<?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>190162</bug_id>
          
          <creation_ts>2018-10-01 14:26:46 -0700</creation_ts>
          <short_desc>Web Inspector: remove analyzer manager</short_desc>
          <delta_ts>2018-10-01 19:28:23 -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>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>190165</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>mattbaker</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1465233</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2018-10-01 14:26:46 -0700</bug_when>
    <thetext>This manager is never used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465254</commentid>
    <comment_count>1</comment_count>
      <attachid>351308</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2018-10-01 14:51:55 -0700</bug_when>
    <thetext>Created attachment 351308
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465258</commentid>
    <comment_count>2</comment_count>
      <attachid>351308</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-10-01 15:00:29 -0700</bug_when>
    <thetext>Comment on attachment 351308
Patch

r-, so that we can remove eslint.js as well. We strip it in optimized builds because we aren&apos;t using it, but lets just remove it at this point. It has probably gotten pretty stale in the years its been unused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465259</commentid>
    <comment_count>3</comment_count>
      <attachid>351311</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2018-10-01 15:01:59 -0700</bug_when>
    <thetext>Created attachment 351311
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465262</commentid>
    <comment_count>4</comment_count>
      <attachid>351311</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-10-01 15:08:47 -0700</bug_when>
    <thetext>Comment on attachment 351311
Patch

You need to update:

    WebKit/InspectorGResources.cmake
    11:        ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/External/ESLint/*.js

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465264</commentid>
    <comment_count>5</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2018-10-01 15:11:42 -0700</bug_when>
    <thetext>Also to ensure this directory gets removed:

    Source/WebInspectorUI/UserInterface/External/ESLint

I think you will want to ensure you have the following in your git configuration:

    [svn]
	rmdir = true

I&apos;m not sure if commit-queue figures this out or not, or if it makes git patches differ, but generally this is needed if landing manually:
https://git-scm.com/docs/git-svn#git-svn---rmdir</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465286</commentid>
    <comment_count>6</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-10-01 15:50:14 -0700</bug_when>
    <thetext>(In reply to Joseph Pecoraro from comment #5)
&gt; Also to ensure this directory gets removed:
&gt; 
&gt;     Source/WebInspectorUI/UserInterface/External/ESLint
&gt; 
&gt; I think you will want to ensure you have the following in your git
&gt; configuration:
&gt; 
&gt;     [svn]
&gt; 	rmdir = true
&gt; 
&gt; I&apos;m not sure if commit-queue figures this out or not, or if it makes git
&gt; patches differ, but generally this is needed if landing manually:
&gt; https://git-scm.com/docs/git-svn#git-svn---rmdir

Nice tip! I was not aware of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465350</commentid>
    <comment_count>7</comment_count>
      <attachid>351333</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2018-10-01 18:31:43 -0700</bug_when>
    <thetext>Created attachment 351333
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465369</commentid>
    <comment_count>8</comment_count>
      <attachid>351333</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-01 19:27:23 -0700</bug_when>
    <thetext>Comment on attachment 351333
Patch

Clearing flags on attachment: 351333

Committed r236709: &lt;https://trac.webkit.org/changeset/236709&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465370</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-01 19:27:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465371</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-01 19:28:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/44929189&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351308</attachid>
            <date>2018-10-01 14:51:55 -0700</date>
            <delta_ts>2018-10-01 15:01:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190162-20181001145154.patch</filename>
            <type>text/plain</type>
            <size>10231</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDY2YjI2NjEwNjUxNzFiNWIwNjcyN2NkM2IxOTMw
NThjNDRjYmI4NjMuLjA1MzI5ZDMwY2Y1NzM5MTk5ZTg3OWNiN2FiNWIyODMyMTllMzljMmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE4LTEwLTAxICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBy
ZW1vdmUgYW5hbHl6ZXIgbWFuYWdlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkwMTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL0Jhc2UvTWFpbi5qczoKKyAgICAgICAgKFdJLmxvYWRlZCk6CisKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qczogUmVtb3ZlZC4K
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9BbmFseXplck1lc3NhZ2UuanM6IFJlbW92
ZWQuCisKIDIwMTgtMDktMjggIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJFR1JFU1NJT04gKHIyMzYwOTEpOiBDU1NLZXl3b3JkQ29tcGxldGlvbnMuanMgaGFzICJj
aGVja291dCIgaW5zdGVhZCBvZiAiY2hlY2stb3V0IiBhcyBhIHZhbHVlIGZvciAtYXBwbGUtcGF5
LWJ1dHRvbi10eXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9CYXNlL01haW4uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9C
YXNlL01haW4uanMKaW5kZXggMDJlYmM2N2JkZDU1YmM4NzcyNGNjMDkyNjk5ZTQ5MTk4OGYyYjEw
MC4uNWJiZjUwNGUyM2I5NDBhZmM1Y2IwMGQ2MDMyMjkxM2JhMWMzMGVmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwpAQCAtMTE2LDcg
KzExNiw2IEBAIFdJLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLmNzc1N0eWxlTWFuYWdl
ciA9IG5ldyBXSS5DU1NTdHlsZU1hbmFnZXI7CiAgICAgdGhpcy5sb2dNYW5hZ2VyID0gbmV3IFdJ
LkxvZ01hbmFnZXI7CiAgICAgdGhpcy5pc3N1ZU1hbmFnZXIgPSBuZXcgV0kuSXNzdWVNYW5hZ2Vy
OwotICAgIHRoaXMuYW5hbHl6ZXJNYW5hZ2VyID0gbmV3IFdJLkFuYWx5emVyTWFuYWdlcjsKICAg
ICB0aGlzLnJ1bnRpbWVNYW5hZ2VyID0gbmV3IFdJLlJ1bnRpbWVNYW5hZ2VyOwogICAgIHRoaXMu
aGVhcE1hbmFnZXIgPSBuZXcgV0kuSGVhcE1hbmFnZXI7CiAgICAgdGhpcy5tZW1vcnlNYW5hZ2Vy
ID0gbmV3IFdJLk1lbW9yeU1hbmFnZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFseXplck1hbmFnZXIuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFseXplck1hbmFnZXIu
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZDE3YmM5ZjA5ZGU5Y2QyMzViMjE5
ZTMzMTZmNjEyNWE5NjM4ZDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMv
QW5hbHl6ZXJNYW5hZ2VyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi1XSS5BbmFseXplck1hbmFnZXIgPSBjbGFzcyBBbmFseXplck1hbmFnZXIgZXh0ZW5k
cyBXSS5PYmplY3QKLXsKLSAgICBjb25zdHJ1Y3RvcigpCi0gICAgewotICAgICAgICBzdXBlcigp
OwotCi0gICAgICAgIHRoaXMuX2VzbGludENvbmZpZyA9IHsKLSAgICAgICAgICAgIGVudjogewot
ICAgICAgICAgICAgICAgICJicm93c2VyIjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAibm9kZSI6
IGZhbHNlCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgZ2xvYmFsczogewotICAgICAgICAg
ICAgICAgICJkb2N1bWVudCI6IHRydWUKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBydWxl
czogewotICAgICAgICAgICAgICAgICJjb25zaXN0ZW50LXJldHVybiI6IDIsCi0gICAgICAgICAg
ICAgICAgImN1cmx5IjogMCwKLSAgICAgICAgICAgICAgICAiZXFlcWVxIjogMCwKLSAgICAgICAg
ICAgICAgICAibmV3LXBhcmVucyI6IDAsCi0gICAgICAgICAgICAgICAgIm5vLWNvbW1hLWRhbmds
ZSI6IDAsCi0gICAgICAgICAgICAgICAgIm5vLWNvbnNvbGUiOiAwLAotICAgICAgICAgICAgICAg
ICJuby1jb25zdGFudC1jb25kaXRpb24iOiAwLAotICAgICAgICAgICAgICAgICJuby1leHRyYS1i
aW5kIjogMiwKLSAgICAgICAgICAgICAgICAibm8tZXh0cmEtc2VtaSI6IDIsCi0gICAgICAgICAg
ICAgICAgIm5vLXByb3RvIjogMCwKLSAgICAgICAgICAgICAgICAibm8tcmV0dXJuLWFzc2lnbiI6
IDIsCi0gICAgICAgICAgICAgICAgIm5vLXRyYWlsaW5nLXNwYWNlcyI6IDIsCi0gICAgICAgICAg
ICAgICAgIm5vLXVuZGVyc2NvcmUtZGFuZ2xlIjogMCwKLSAgICAgICAgICAgICAgICAibm8tdW51
c2VkLWV4cHJlc3Npb25zIjogMiwKLSAgICAgICAgICAgICAgICAibm8td3JhcC1mdW5jIjogMiwK
LSAgICAgICAgICAgICAgICAic2VtaSI6IDIsCi0gICAgICAgICAgICAgICAgInNwYWNlLWluZml4
LW9wcyI6IDIsCi0gICAgICAgICAgICAgICAgInNwYWNlLXJldHVybi10aHJvdy1jYXNlIjogMiwK
LSAgICAgICAgICAgICAgICAic3RyaWN0IjogMCwKLSAgICAgICAgICAgICAgICAidmFsaWQtdHlw
ZW9mIjogMgotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMuX3NvdXJj
ZUNvZGVNZXNzYWdlc01hcCA9IG5ldyBXZWFrTWFwOwotCi0gICAgICAgIFdJLlNvdXJjZUNvZGUu
YWRkRXZlbnRMaXN0ZW5lcihXSS5Tb3VyY2VDb2RlLkV2ZW50LkNvbnRlbnREaWRDaGFuZ2UsIHRo
aXMuX2hhbmRsZVNvdXJjZUNvZGVDb250ZW50RGlkQ2hhbmdlLCB0aGlzKTsKLSAgICB9Ci0KLSAg
ICAvLyBQdWJsaWMKLQotICAgIGdldEFuYWx5emVyTWVzc2FnZXNGb3JTb3VyY2VDb2RlKHNvdXJj
ZUNvZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2
ZSwgcmVqZWN0KSB7Ci0gICAgICAgICAgICB2YXIgYW5hbHl6ZXIgPSBXSS5BbmFseXplck1hbmFn
ZXIuX3R5cGVBbmFseXplck1hcC5nZXQoc291cmNlQ29kZS50eXBlKTsKLSAgICAgICAgICAgIGlm
ICghYW5hbHl6ZXIpIHsKLSAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCJUaGlzIHJl
c291cmNlIHR5cGUgY2Fubm90IGJlIGFuYWx5emVkLiIpKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VDb2RlTWVz
c2FnZXNNYXAuaGFzKHNvdXJjZUNvZGUpKSB7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlz
Ll9zb3VyY2VDb2RlTWVzc2FnZXNNYXAuZ2V0KHNvdXJjZUNvZGUpKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJpZXZl
QW5hbHl6ZXJNZXNzYWdlcyhwcm9wZXJ0aWVzKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHZhciBhbmFseXplck1lc3NhZ2VzID0gW107Ci0gICAgICAgICAgICAgICAgdmFyIHJhd0Fu
YWx5emVyTWVzc2FnZXMgPSBhbmFseXplci52ZXJpZnkoc291cmNlQ29kZS5jb250ZW50LCB0aGlz
Ll9lc2xpbnRDb25maWcpOwotCi0gICAgICAgICAgICAgICAgLy8gUmF3IGxpbmUgYW5kIGNvbHVt
biBudW1iZXJzIGFyZSBvbmUtYmFzZWQuIFNvdXJjZUNvZGVMb2NhdGlvbiBleHBlY3RzIHRoZW0g
dG8gYmUgemVyby1iYXNlZCBzbyB3ZSBzdWJ0cmFjdCAxIGZyb20gZWFjaC4KLSAgICAgICAgICAg
ICAgICBmb3IgKHZhciByYXdBbmFseXplck1lc3NhZ2Ugb2YgcmF3QW5hbHl6ZXJNZXNzYWdlcykK
LSAgICAgICAgICAgICAgICAgICAgYW5hbHl6ZXJNZXNzYWdlcy5wdXNoKG5ldyBXSS5BbmFseXpl
ck1lc3NhZ2UobmV3IFdJLlNvdXJjZUNvZGVMb2NhdGlvbihzb3VyY2VDb2RlLCByYXdBbmFseXpl
ck1lc3NhZ2UubGluZSAtIDEsIHJhd0FuYWx5emVyTWVzc2FnZS5jb2x1bW4gLSAxKSwgcmF3QW5h
bHl6ZXJNZXNzYWdlLm1lc3NhZ2UsIHJhd0FuYWx5emVyTWVzc2FnZS5ydWxlSWQpKTsKLQotICAg
ICAgICAgICAgICAgIHRoaXMuX3NvdXJjZUNvZGVNZXNzYWdlc01hcC5zZXQoc291cmNlQ29kZSwg
YW5hbHl6ZXJNZXNzYWdlcyk7Ci0KLSAgICAgICAgICAgICAgICByZXNvbHZlKGFuYWx5emVyTWVz
c2FnZXMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzb3VyY2VDb2RlLnJlcXVlc3RD
b250ZW50KCkudGhlbihyZXRyaWV2ZUFuYWx5emVyTWVzc2FnZXMuYmluZCh0aGlzKSkuY2F0Y2go
aGFuZGxlUHJvbWlzZUV4Y2VwdGlvbik7Ci0gICAgICAgIH0uYmluZCh0aGlzKSk7Ci0gICAgfQot
Ci0gICAgc291cmNlQ29kZUNhbkJlQW5hbHl6ZWQoc291cmNlQ29kZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBzb3VyY2VDb2RlLnR5cGUgPT09IFdJLlJlc291cmNlLlR5cGUuU2NyaXB0OwotICAg
IH0KLQotICAgIC8vIFByaXZhdGUKLQotICAgIF9oYW5kbGVTb3VyY2VDb2RlQ29udGVudERpZENo
YW5nZShldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBzb3VyY2VDb2RlID0gZXZlbnQudGFyZ2V0
OwotCi0gICAgICAgIC8vIFNpbmNlIHNvdXJjZUNvZGUgaGFzIGNoYW5nZWQsIHJlbW92ZSBpdCBh
bmQgaXRzIG1lc3NhZ2VzIGZyb20gdGhlIG1hcCBzbyBnZXRBbmFseXplck1lc3NhZ2VzRm9yU291
cmNlQ29kZSB3aWxsIGhhdmUgdG8gcmVhbmFseXplIHRoZSBuZXh0IHRpbWUgaXQgaXMgY2FsbGVk
LgotICAgICAgICB0aGlzLl9zb3VyY2VDb2RlTWVzc2FnZXNNYXAuZGVsZXRlKHNvdXJjZUNvZGUp
OwotICAgIH0KLX07Ci0KLVdJLkFuYWx5emVyTWFuYWdlci5fdHlwZUFuYWx5emVyTWFwID0gbmV3
IE1hcDsKLQotLy8gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzNjUxNT4gV2ViIEluc3BlY3Rvcjog
SmF2YVNjcmlwdCBzb3VyY2UgdGV4dCBlZGl0b3Igc2hvdWxkIGhhdmUgYSBsaW50ZXIKLS8vIFdJ
LkFuYWx5emVyTWFuYWdlci5fdHlwZUFuYWx5emVyTWFwLnNldChXSS5SZXNvdXJjZS5UeXBlLlNj
cmlwdCwgZXNsaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01haW4uaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01h
aW4uaHRtbAppbmRleCA5NzA0NTYxZDA2ZTE5NjQyYWNmNjg5ZTAxYWE3OTYwMmRlOGRjYTY0Li4z
YzliZjk0ZTVkYzI2ZjQ4OTU0NzNhNjBlZWVmNmQ0ZTk2ODQzZTY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCkBAIC0zMjEsNyArMzIxLDYgQEAK
ICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1NjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlw
dCBzcmM9Ik1vZGVscy9Mb2NhbFNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAKLSAgICA8c2NyaXB0IHNy
Yz0iTW9kZWxzL0FuYWx5emVyTWVzc2FnZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9
Ik1vZGVscy9BcHBsaWNhdGlvbkNhY2hlRnJhbWUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJNb2RlbHMvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0LmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iTW9kZWxzL0JhY2tGb3J3YXJkRW50cnkuanMiPjwvc2NyaXB0PgpAQCAtNzc0
LDcgKzc3Myw2IEBACiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0Fubm90YXRvci5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0NvZGVNaXJyb3JFZGl0aW5n
Q29udHJvbGxlci5qcyI+PC9zY3JpcHQ+CiAKLSAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMv
QW5hbHl6ZXJNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxl
cnMvQXVkaXRNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxl
cnMvQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3Jj
PSJDb250cm9sbGVycy9CYXNpY0Jsb2NrQW5ub3RhdG9yLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9BbmFseXplck1l
c3NhZ2UuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQW5h
bHl6ZXJNZXNzYWdlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTI1NjBhY2Ri
ZTE2ODY1Nzg4MjkxOTRjYzEzZjgyNDJlYzFhNjZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01vZGVscy9BbmFseXplck1lc3NhZ2UuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotV0kuQW5hbHl6ZXJNZXNzYWdlID0gY2xhc3MgQW5hbHl6ZXJNZXNzYWdl
Ci17Ci0gICAgY29uc3RydWN0b3Ioc291cmNlQ29kZUxvY2F0aW9uLCB0ZXh0LCBydWxlSWRlbnRp
ZmllcikKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNvdXJjZUNvZGVMb2NhdGlvbiBp
bnN0YW5jZW9mIFdJLlNvdXJjZUNvZGVMb2NhdGlvbik7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHR5cGVvZiB0ZXh0ID09PSAic3RyaW5nIik7Ci0KLSAgICAgICAgdGhpcy5fc291cmNlQ29kZUxv
Y2F0aW9uID0gc291cmNlQ29kZUxvY2F0aW9uOwotICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDsK
LSAgICAgICAgdGhpcy5fcnVsZUlkZW50aWZpZXIgPSBydWxlSWRlbnRpZmllcjsKLSAgICB9Ci0K
LSAgICAvLyBQdWJsaWMKLQotICAgIGdldCBzb3VyY2VDb2RlTG9jYXRpb24oKSB7IHJldHVybiB0
aGlzLl9zb3VyY2VDb2RlTG9jYXRpb247IH0KLSAgICBnZXQgc291cmNlQ29kZSgpIHsgcmV0dXJu
IHRoaXMuX3NvdXJjZUNvZGVMb2NhdGlvbi5zb3VyY2VDb2RlOyB9Ci0gICAgZ2V0IHRleHQoKSB7
IHJldHVybiB0aGlzLl90ZXh0OyB9Ci0gICAgZ2V0IHJ1bGVJZGVudGlmaWVyKCkgeyByZXR1cm4g
dGhpcy5fcnVsZUlkZW50aWZpZXI7IH0KLX07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351311</attachid>
            <date>2018-10-01 15:01:59 -0700</date>
            <delta_ts>2018-10-01 18:31:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190162-20181001150158.patch</filename>
            <type>text/plain</type>
            <size>635605</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDY2YjI2NjEwNjUxNzFiNWIwNjcyN2NkM2IxOTMw
NThjNDRjYmI4NjMuLjY0MTM2ZTEyMzQ1Y2NiNDc1YTkwYWIzZDdlZWMwZTQwODhlZjUzOTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE4LTEwLTAxICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBy
ZW1vdmUgYW5hbHl6ZXIgbWFuYWdlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkwMTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL0Jhc2UvTWFpbi5qczoKKyAgICAgICAgKFdJLmxvYWRlZCk6CisKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qczogUmVtb3ZlZC4K
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9BbmFseXplck1lc3NhZ2UuanM6IFJlbW92
ZWQuCisKKyAgICAgICAgKiBTY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBs
OgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRVNMaW50L0xJQ0VOU0U6IFJlbW92
ZWQuCisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9FU0xpbnQvZXNsaW50LmpzOiBS
ZW1vdmVkLgorCiAyMDE4LTA5LTI4ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSRUdSRVNTSU9OIChyMjM2MDkxKTogQ1NTS2V5d29yZENvbXBsZXRpb25zLmpzIGhh
cyAiY2hlY2tvdXQiIGluc3RlYWQgb2YgImNoZWNrLW91dCIgYXMgYSB2YWx1ZSBmb3IgLWFwcGxl
LXBheS1idXR0b24tdHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Njcmlw
dHMvY29weS11c2VyLWludGVyZmFjZS1yZXNvdXJjZXMucGwgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvU2NyaXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5wbAppbmRleCAwMGMzOGMx
ZjMxOWM4OTQzMWE3OTZlZTU1OWJlN2FiYjJkMDM2ZmU0Li4yNWQ3NTBjOTkzMGFmMzhhZWQwOWE2
ODIzZjY1YmE5ZDI1YWNjOGFlIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvU2Ny
aXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5wbAorKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvU2NyaXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5wbApAQCAtMTY1
LDE0ICsxNjUsMTIgQEAgbXkgJHByb3RvY29sRGlyID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCR0YXJn
ZXRSZXNvdXJjZVBhdGgsICdQcm90b2NvbCcpOwogbXkgJHdvcmtlcnNEaXIgPSBGaWxlOjpTcGVj
LT5jYXRkaXIoJHRhcmdldFJlc291cmNlUGF0aCwgJ1dvcmtlcnMnKTsKIG15ICRjb2RlTWlycm9y
UGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdWlSb290LCAnRXh0ZXJuYWwnLCAnQ29kZU1pcnJv
cicpOwogbXkgJGVzcHJpbWFQYXRoID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCR1aVJvb3QsICdFeHRl
cm5hbCcsICdFc3ByaW1hJyk7Ci1teSAkZXNsaW50UGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigk
dWlSb290LCAnRXh0ZXJuYWwnLCAnRVNMaW50Jyk7CiBteSAkdGhyZWVqc1BhdGggPSBGaWxlOjpT
cGVjLT5jYXRkaXIoJHVpUm9vdCwgJ0V4dGVybmFsJywgJ3RocmVlLmpzJyk7CiAKICR3ZWJJbnNw
ZWN0b3JVSUFkZGl0aW9uc0RpciA9ICZ3ZWJJbnNwZWN0b3JVSUFkZGl0aW9uc0RpcigpOwogCiBt
eSAkY29kZU1pcnJvckxpY2Vuc2UgPSByZWFkTGljZW5zZUZpbGUoRmlsZTo6U3BlYy0+Y2F0Zmls
ZSgkY29kZU1pcnJvclBhdGgsICdMSUNFTlNFJykpOwogbXkgJGVzcHJpbWFMaWNlbnNlID0gcmVh
ZExpY2Vuc2VGaWxlKEZpbGU6OlNwZWMtPmNhdGZpbGUoJGVzcHJpbWFQYXRoLCAnTElDRU5TRScp
KTsKLW15ICRlc2xpbnRMaWNlbnNlID0gcmVhZExpY2Vuc2VGaWxlKEZpbGU6OlNwZWMtPmNhdGZp
bGUoJGVzbGludFBhdGgsICdMSUNFTlNFJykpOwogbXkgJHRocmVlanNMaWNlbnNlID0gcmVhZExp
Y2Vuc2VGaWxlKEZpbGU6OlNwZWMtPmNhdGZpbGUoJHRocmVlanNQYXRoLCAnTElDRU5TRScpKTsK
IG1ha2VfcGF0aCgkcHJvdG9jb2xEaXIsICR0YXJnZXRSZXNvdXJjZVBhdGgpOwogCkBAIC0zMTgs
MTUgKzMxNiw2IEBAIGlmICgkc2hvdWxkQ29tYmluZU1haW4pIHsKICAgICAgICAnLS1vdXRwdXQt
ZGlyJywgJGRlcml2ZWRTb3VyY2VzRGlyLAogICAgICAgICctLW91dHB1dC1zY3JpcHQtbmFtZScs
ICdFc3ByaW1hLmpzJyk7CiAKLSAgICAjIENvbWJpbmUgdGhlIEVTTGludCBKYXZhU2NyaXB0IGZp
bGVzIGluIFByb2R1Y3Rpb24gYnVpbGRzIGludG8gYSBzaW5nbGUgZmlsZSAoRVNMaW50LmpzKS4K
LSAgICBzeXN0ZW0oJHBlcmwsICRjb21iaW5lUmVzb3VyY2VzQ21kLAotICAgICAgICctLWlucHV0
LWRpcicsICdFeHRlcm5hbC9FU0xpbnQnLAotICAgICAgICctLWlucHV0LWh0bWwnLCAkZGVyaXZl
ZFNvdXJjZXNNYWluSFRNTCwKLSAgICAgICAnLS1pbnB1dC1odG1sLWRpcicsICR1aVJvb3QsCi0g
ICAgICAgJy0tZGVyaXZlZC1zb3VyY2VzLWRpcicsICRkZXJpdmVkU291cmNlc0RpciwKLSAgICAg
ICAnLS1vdXRwdXQtZGlyJywgJGRlcml2ZWRTb3VyY2VzRGlyLAotICAgICAgICctLW91dHB1dC1z
Y3JpcHQtbmFtZScsICdFU0xpbnQuanMnKTsKLQogICAgICMgQ29tYmluZSB0aGUgdGhyZWUuanMg
SmF2YVNjcmlwdCBmaWxlcyBpbiBQcm9kdWN0aW9uIGJ1aWxkcyBpbnRvIGEgc2luZ2xlIGZpbGUg
KFRocmVlLmpzKS4KICAgICBzeXN0ZW0oJHBlcmwsICRjb21iaW5lUmVzb3VyY2VzQ21kLAogICAg
ICAgICctLWlucHV0LWRpcicsICdFeHRlcm5hbC90aHJlZS5qcycsCkBAIC0zNzIsMTAgKzM2MSw2
IEBAIGlmICgkc2hvdWxkQ29tYmluZU1haW4pIHsKICAgICBteSAkdGFyZ2V0RXNwcmltYUpTID0g
RmlsZTo6U3BlYy0+Y2F0ZmlsZSgkdGFyZ2V0UmVzb3VyY2VQYXRoLCAnRXNwcmltYS5qcycpOwog
ICAgIHNlZWRGaWxlKCR0YXJnZXRFc3ByaW1hSlMsICRlc3ByaW1hTGljZW5zZSk7CiAKLSAgICAj
IEV4cG9ydCB0aGUgbGljZW5zZSBpbnRvIEVTTGludC5qcy4KLSAgICBteSAkdGFyZ2V0RVNMaW50
SlMgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCR0YXJnZXRSZXNvdXJjZVBhdGgsICdFU0xpbnQuanMn
KTsKLSAgICBzZWVkRmlsZSgkdGFyZ2V0RVNMaW50SlMsICRlc2xpbnRMaWNlbnNlKTsKLQogICAg
ICMgRXhwb3J0IHRoZSBsaWNlbnNlIGludG8gVGhyZWUuanMuCiAgICAgbXkgJHRhcmdldFRocmVl
anNKUyA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJHRhcmdldFJlc291cmNlUGF0aCwgJ1RocmVlLmpz
Jyk7CiAgICAgc2VlZEZpbGUoJHRhcmdldFRocmVlanNKUywgJHRocmVlanNMaWNlbnNlKTsKQEAg
LTM5NiwxMCArMzgxLDYgQEAgaWYgKCRzaG91bGRDb21iaW5lTWFpbikgewogICAgIG15ICRkZXJp
dmVkU291cmNlc0VzcHJpbWFKUyA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJGRlcml2ZWRTb3VyY2Vz
RGlyLCAnRXNwcmltYS5qcycpOwogICAgIHN5c3RlbShxcSgiJHB5dGhvbiIgIiRqc01pblNjcmlw
dCIgPCAiJGRlcml2ZWRTb3VyY2VzRXNwcmltYUpTIiA+PiAiJHRhcmdldEVzcHJpbWFKUyIpKSBh
bmQgZGllICJGYWlsZWQgdG8gbWluaWZ5ICRkZXJpdmVkU291cmNlc0VzcHJpbWFKUzogJCEiOwog
Ci0gICAgIyBNaW5pZnkgdGhlIEVTTGludC5qcyBmaWxlLCBhcHBlbmRpbmcgdG8gdGhlIGxpY2Vu
c2UgdGhhdCB3YXMgZXhwb3J0ZWQgYWJvdmUuCi0gICAgbXkgJGRlcml2ZWRTb3VyY2VzRVNMaW50
SlMgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRkZXJpdmVkU291cmNlc0RpciwgJ0VTTGludC5qcycp
OwotICAgIHN5c3RlbShxcSgiJHB5dGhvbiIgIiRqc01pblNjcmlwdCIgPCAiJGRlcml2ZWRTb3Vy
Y2VzRVNMaW50SlMiID4+ICIkdGFyZ2V0RVNMaW50SlMiKSkgYW5kIGRpZSAiRmFpbGVkIHRvIG1p
bmlmeSAkZGVyaXZlZFNvdXJjZXNFU0xpbnRKUzogJCEiOwotCiAgICAgIyBNaW5pZnkgdGhlIFRo
cmVlLmpzIGZpbGUsIGFwcGVuZGluZyB0byB0aGUgbGljZW5zZSB0aGF0IHdhcyBleHBvcnRlZCBh
Ym92ZS4KICAgICBteSAkZGVyaXZlZFNvdXJjZXNUaHJlZWpzSlMgPSBGaWxlOjpTcGVjLT5jYXRm
aWxlKCRkZXJpdmVkU291cmNlc0RpciwgJ1RocmVlLmpzJyk7CiAgICAgc3lzdGVtKHFxKCIkcHl0
aG9uIiAiJGpzTWluU2NyaXB0IiA8ICIkZGVyaXZlZFNvdXJjZXNUaHJlZWpzSlMiID4+ICIkdGFy
Z2V0VGhyZWVqc0pTIikpIGFuZCBkaWUgIkZhaWxlZCB0byBtaW5pZnkgJGRlcml2ZWRTb3VyY2Vz
VGhyZWVqc0pTOiAkISI7CkBAIC00MDcsOSArMzg4LDYgQEAgaWYgKCRzaG91bGRDb21iaW5lTWFp
bikgewogICAgICMgQ29weSBvdmVyIHRoZSBJbWFnZXMgZGlyZWN0b3J5LgogICAgIGRpdHRvKEZp
bGU6OlNwZWMtPmNhdGRpcigkdWlSb290LCAnSW1hZ2VzJyksIEZpbGU6OlNwZWMtPmNhdGRpcigk
dGFyZ2V0UmVzb3VyY2VQYXRoLCAnSW1hZ2VzJykpOwogCi0gICAgIyBSZW1vdmUgRVNMaW50IHVu
dGlsIG5lZWRlZDogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzNjUxNT4gV2ViIEluc3BlY3Rvcjog
SmF2YVNjcmlwdCBzb3VyY2UgdGV4dCBlZGl0b3Igc2hvdWxkIGhhdmUgYSBsaW50ZXIKLSAgICB1
bmxpbmsgJHRhcmdldEVTTGludEpTOwotCiAgICAgIyBDb3B5IHRoZSBQcm90b2NvbC9MZWdhY3kg
YW5kIFdvcmtlcnMgZGlyZWN0b3JpZXMuCiAgICAgZGl0dG8oRmlsZTo6U3BlYy0+Y2F0ZmlsZSgk
dWlSb290LCAnUHJvdG9jb2wnLCAnTGVnYWN5JyksIEZpbGU6OlNwZWMtPmNhdGZpbGUoJHByb3Rv
Y29sRGlyLCAnTGVnYWN5JykpOwogICAgIGRpdHRvKEZpbGU6OlNwZWMtPmNhdGZpbGUoJHVpUm9v
dCwgJ1dvcmtlcnMnKSwgJHdvcmtlcnNEaXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCmluZGV4IDAyZWJjNjdiZGQ1NWJjODc3MjRjYzA5
MjY5OWU0OTE5ODhmMmIxMDAuLjViYmY1MDRlMjNiOTQwYWZjNWNiMDBkNjAzMjI5MTNiYTFjMzBl
ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2Uv
TWFpbi5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01h
aW4uanMKQEAgLTExNiw3ICsxMTYsNiBAQCBXSS5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgdGhp
cy5jc3NTdHlsZU1hbmFnZXIgPSBuZXcgV0kuQ1NTU3R5bGVNYW5hZ2VyOwogICAgIHRoaXMubG9n
TWFuYWdlciA9IG5ldyBXSS5Mb2dNYW5hZ2VyOwogICAgIHRoaXMuaXNzdWVNYW5hZ2VyID0gbmV3
IFdJLklzc3VlTWFuYWdlcjsKLSAgICB0aGlzLmFuYWx5emVyTWFuYWdlciA9IG5ldyBXSS5BbmFs
eXplck1hbmFnZXI7CiAgICAgdGhpcy5ydW50aW1lTWFuYWdlciA9IG5ldyBXSS5SdW50aW1lTWFu
YWdlcjsKICAgICB0aGlzLmhlYXBNYW5hZ2VyID0gbmV3IFdJLkhlYXBNYW5hZ2VyOwogICAgIHRo
aXMubWVtb3J5TWFuYWdlciA9IG5ldyBXSS5NZW1vcnlNYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5h
Z2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMv
QW5hbHl6ZXJNYW5hZ2VyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWQxN2Jj
OWYwOWRlOWNkMjM1YjIxOWUzMzE2ZjYxMjVhOTYzOGQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDEy
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotV0kuQW5hbHl6ZXJNYW5hZ2VyID0gY2xhc3MgQW5hbHl6
ZXJNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0Ci17Ci0gICAgY29uc3RydWN0b3IoKQotICAgIHsK
LSAgICAgICAgc3VwZXIoKTsKLQotICAgICAgICB0aGlzLl9lc2xpbnRDb25maWcgPSB7Ci0gICAg
ICAgICAgICBlbnY6IHsKLSAgICAgICAgICAgICAgICAiYnJvd3NlciI6IHRydWUsCi0gICAgICAg
ICAgICAgICAgIm5vZGUiOiBmYWxzZQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGdsb2Jh
bHM6IHsKLSAgICAgICAgICAgICAgICAiZG9jdW1lbnQiOiB0cnVlCi0gICAgICAgICAgICB9LAot
ICAgICAgICAgICAgcnVsZXM6IHsKLSAgICAgICAgICAgICAgICAiY29uc2lzdGVudC1yZXR1cm4i
OiAyLAotICAgICAgICAgICAgICAgICJjdXJseSI6IDAsCi0gICAgICAgICAgICAgICAgImVxZXFl
cSI6IDAsCi0gICAgICAgICAgICAgICAgIm5ldy1wYXJlbnMiOiAwLAotICAgICAgICAgICAgICAg
ICJuby1jb21tYS1kYW5nbGUiOiAwLAotICAgICAgICAgICAgICAgICJuby1jb25zb2xlIjogMCwK
LSAgICAgICAgICAgICAgICAibm8tY29uc3RhbnQtY29uZGl0aW9uIjogMCwKLSAgICAgICAgICAg
ICAgICAibm8tZXh0cmEtYmluZCI6IDIsCi0gICAgICAgICAgICAgICAgIm5vLWV4dHJhLXNlbWki
OiAyLAotICAgICAgICAgICAgICAgICJuby1wcm90byI6IDAsCi0gICAgICAgICAgICAgICAgIm5v
LXJldHVybi1hc3NpZ24iOiAyLAotICAgICAgICAgICAgICAgICJuby10cmFpbGluZy1zcGFjZXMi
OiAyLAotICAgICAgICAgICAgICAgICJuby11bmRlcnNjb3JlLWRhbmdsZSI6IDAsCi0gICAgICAg
ICAgICAgICAgIm5vLXVudXNlZC1leHByZXNzaW9ucyI6IDIsCi0gICAgICAgICAgICAgICAgIm5v
LXdyYXAtZnVuYyI6IDIsCi0gICAgICAgICAgICAgICAgInNlbWkiOiAyLAotICAgICAgICAgICAg
ICAgICJzcGFjZS1pbmZpeC1vcHMiOiAyLAotICAgICAgICAgICAgICAgICJzcGFjZS1yZXR1cm4t
dGhyb3ctY2FzZSI6IDIsCi0gICAgICAgICAgICAgICAgInN0cmljdCI6IDAsCi0gICAgICAgICAg
ICAgICAgInZhbGlkLXR5cGVvZiI6IDIKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAg
ICAgICB0aGlzLl9zb3VyY2VDb2RlTWVzc2FnZXNNYXAgPSBuZXcgV2Vha01hcDsKLQotICAgICAg
ICBXSS5Tb3VyY2VDb2RlLmFkZEV2ZW50TGlzdGVuZXIoV0kuU291cmNlQ29kZS5FdmVudC5Db250
ZW50RGlkQ2hhbmdlLCB0aGlzLl9oYW5kbGVTb3VyY2VDb2RlQ29udGVudERpZENoYW5nZSwgdGhp
cyk7Ci0gICAgfQotCi0gICAgLy8gUHVibGljCi0KLSAgICBnZXRBbmFseXplck1lc3NhZ2VzRm9y
U291cmNlQ29kZShzb3VyY2VDb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNl
KGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgICAgICAgdmFyIGFuYWx5emVyID0g
V0kuQW5hbHl6ZXJNYW5hZ2VyLl90eXBlQW5hbHl6ZXJNYXAuZ2V0KHNvdXJjZUNvZGUudHlwZSk7
Ci0gICAgICAgICAgICBpZiAoIWFuYWx5emVyKSB7Ci0gICAgICAgICAgICAgICAgcmVqZWN0KG5l
dyBFcnJvcigiVGhpcyByZXNvdXJjZSB0eXBlIGNhbm5vdCBiZSBhbmFseXplZC4iKSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGhp
cy5fc291cmNlQ29kZU1lc3NhZ2VzTWFwLmhhcyhzb3VyY2VDb2RlKSkgewotICAgICAgICAgICAg
ICAgIHJlc29sdmUodGhpcy5fc291cmNlQ29kZU1lc3NhZ2VzTWFwLmdldChzb3VyY2VDb2RlKSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBm
dW5jdGlvbiByZXRyaWV2ZUFuYWx5emVyTWVzc2FnZXMocHJvcGVydGllcykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB2YXIgYW5hbHl6ZXJNZXNzYWdlcyA9IFtdOwotICAgICAgICAg
ICAgICAgIHZhciByYXdBbmFseXplck1lc3NhZ2VzID0gYW5hbHl6ZXIudmVyaWZ5KHNvdXJjZUNv
ZGUuY29udGVudCwgdGhpcy5fZXNsaW50Q29uZmlnKTsKLQotICAgICAgICAgICAgICAgIC8vIFJh
dyBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBhcmUgb25lLWJhc2VkLiBTb3VyY2VDb2RlTG9jYXRp
b24gZXhwZWN0cyB0aGVtIHRvIGJlIHplcm8tYmFzZWQgc28gd2Ugc3VidHJhY3QgMSBmcm9tIGVh
Y2guCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgcmF3QW5hbHl6ZXJNZXNzYWdlIG9mIHJhd0Fu
YWx5emVyTWVzc2FnZXMpCi0gICAgICAgICAgICAgICAgICAgIGFuYWx5emVyTWVzc2FnZXMucHVz
aChuZXcgV0kuQW5hbHl6ZXJNZXNzYWdlKG5ldyBXSS5Tb3VyY2VDb2RlTG9jYXRpb24oc291cmNl
Q29kZSwgcmF3QW5hbHl6ZXJNZXNzYWdlLmxpbmUgLSAxLCByYXdBbmFseXplck1lc3NhZ2UuY29s
dW1uIC0gMSksIHJhd0FuYWx5emVyTWVzc2FnZS5tZXNzYWdlLCByYXdBbmFseXplck1lc3NhZ2Uu
cnVsZUlkKSk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VDb2RlTWVzc2FnZXNNYXAu
c2V0KHNvdXJjZUNvZGUsIGFuYWx5emVyTWVzc2FnZXMpOwotCi0gICAgICAgICAgICAgICAgcmVz
b2x2ZShhbmFseXplck1lc3NhZ2VzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc291
cmNlQ29kZS5yZXF1ZXN0Q29udGVudCgpLnRoZW4ocmV0cmlldmVBbmFseXplck1lc3NhZ2VzLmJp
bmQodGhpcykpLmNhdGNoKGhhbmRsZVByb21pc2VFeGNlcHRpb24pOwotICAgICAgICB9LmJpbmQo
dGhpcykpOwotICAgIH0KLQotICAgIHNvdXJjZUNvZGVDYW5CZUFuYWx5emVkKHNvdXJjZUNvZGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gc291cmNlQ29kZS50eXBlID09PSBXSS5SZXNvdXJjZS5U
eXBlLlNjcmlwdDsKLSAgICB9Ci0KLSAgICAvLyBQcml2YXRlCi0KLSAgICBfaGFuZGxlU291cmNl
Q29kZUNvbnRlbnREaWRDaGFuZ2UoZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgc291cmNlQ29k
ZSA9IGV2ZW50LnRhcmdldDsKLQotICAgICAgICAvLyBTaW5jZSBzb3VyY2VDb2RlIGhhcyBjaGFu
Z2VkLCByZW1vdmUgaXQgYW5kIGl0cyBtZXNzYWdlcyBmcm9tIHRoZSBtYXAgc28gZ2V0QW5hbHl6
ZXJNZXNzYWdlc0ZvclNvdXJjZUNvZGUgd2lsbCBoYXZlIHRvIHJlYW5hbHl6ZSB0aGUgbmV4dCB0
aW1lIGl0IGlzIGNhbGxlZC4KLSAgICAgICAgdGhpcy5fc291cmNlQ29kZU1lc3NhZ2VzTWFwLmRl
bGV0ZShzb3VyY2VDb2RlKTsKLSAgICB9Ci19OwotCi1XSS5BbmFseXplck1hbmFnZXIuX3R5cGVB
bmFseXplck1hcCA9IG5ldyBNYXA7Ci0KLS8vIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzY1MTU+
IFdlYiBJbnNwZWN0b3I6IEphdmFTY3JpcHQgc291cmNlIHRleHQgZWRpdG9yIHNob3VsZCBoYXZl
IGEgbGludGVyCi0vLyBXSS5BbmFseXplck1hbmFnZXIuX3R5cGVBbmFseXplck1hcC5zZXQoV0ku
UmVzb3VyY2UuVHlwZS5TY3JpcHQsIGVzbGludCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9FU0xpbnQvTElDRU5TRSBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VTTGludC9MSUNFTlNFCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWYwNDZmZGNlNTgyYWFmZTc0YWVkZDJhZTY0MGM2
YzdhODc3YzRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VTTGludC9MSUNF
TlNFCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotQ29weXJpZ2h0IChjKSAyMDE0IFRK
IEhvbG93YXljaHVrIDx0akB2aXNpb24tbWVkaWEuY2E+Ci0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5
IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkK
LW9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl
ICdTb2Z0d2FyZScpLCB0byBkZWFsCi1pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv
biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIAotdXNlLCBjb3B5
LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Ig
c2VsbCBjb3BpZXMKLW9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo
b20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotc28sIHN1YmplY3QgdG8gdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zOgotCi1UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp
cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKLWNvcGllcyBvciBz
dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0KLVRIRSBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S
Ci1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSwKLUZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO
T05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotQVVUSE9SUyBPUiBDT1BZUklH
SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotTElB
QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ
U0UsIEFSSVNJTkcgRlJPTSwKLU9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX
QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLVRIRSBTT0ZUV0FSRS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VTTGlu
dC9lc2xpbnQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5h
bC9FU0xpbnQvZXNsaW50LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjEyM2Ey
ZjQ5OTQ4ZDg2MDQ5YWRhMzJlYTU0Y2I1M2I1MThhYmUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0V4dGVybmFsL0VTTGludC9lc2xpbnQuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxODIyMyAr
MCwwIEBACi0hZnVuY3Rpb24oZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZp
bmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1lKCk7ZWxzZSBpZigiZnVuY3Rpb24i
PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxlKTtlbHNle3ZhciBmOyJ1bmRl
ZmluZWQiIT10eXBlb2Ygd2luZG93P2Y9d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFs
P2Y9Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmKGY9c2VsZiksZi5lc2xpbnQ9ZSgp
fX0oZnVuY3Rpb24oKXt2YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVybiAoZnVuY3Rpb24g
ZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9m
IHJlcXVpcmU9PSJmdW5jdGlvbiImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYo
aSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitv
KyInIik7dGhyb3cgZi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixmfXZhciBsPW5bb109e2V4cG9y
dHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtl
XTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9y
dHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PSJmdW5jdGlvbiImJnJlcXVpcmU7Zm9yKHZhciBvPTA7
bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKLW1vZHVsZS5leHBvcnRzPXsKLSAgICAiYnVpbHRpbiI6IHsKLSAgICAg
ICAgIk5hTiI6IGZhbHNlLAotICAgICAgICAiSW5maW5pdHkiOiBmYWxzZSwKLSAgICAgICAgInVu
ZGVmaW5lZCI6IGZhbHNlLAotICAgICAgICAiZXZhbCI6IGZhbHNlLAotCi0gICAgICAgICJwYXJz
ZUZsb2F0IjogZmFsc2UsCi0gICAgICAgICJwYXJzZUludCI6IGZhbHNlLAotICAgICAgICAiaXNO
YU4iOiBmYWxzZSwKLSAgICAgICAgImlzRmluaXRlIjogZmFsc2UsCi0KLSAgICAgICAgImRlY29k
ZVVSSSI6IGZhbHNlLAotICAgICAgICAiZGVjb2RlVVJJQ29tcG9uZW50IjogZmFsc2UsCi0gICAg
ICAgICJlbmNvZGVVUkkiOiBmYWxzZSwKLSAgICAgICAgImVuY29kZVVSSUNvbXBvbmVudCI6IGZh
bHNlLAotCi0gICAgICAgICJPYmplY3QiOiBmYWxzZSwKLSAgICAgICAgIkZ1bmN0aW9uIjogZmFs
c2UsCi0gICAgICAgICJBcnJheSI6IGZhbHNlLAotICAgICAgICAiU3RyaW5nIjogZmFsc2UsCi0g
ICAgICAgICJCb29sZWFuIjogZmFsc2UsCi0gICAgICAgICJNYXAiOiBmYWxzZSwKLSAgICAgICAg
Ik51bWJlciI6IGZhbHNlLAotICAgICAgICAiRGF0ZSI6IGZhbHNlLAotICAgICAgICAiUmVnRXhw
IjogZmFsc2UsCi0gICAgICAgICJFcnJvciI6IGZhbHNlLAotICAgICAgICAiRXZhbEVycm9yIjog
ZmFsc2UsCi0gICAgICAgICJSYW5nZUVycm9yIjogZmFsc2UsCi0gICAgICAgICJSZWZlcmVuY2VF
cnJvciI6IGZhbHNlLAotICAgICAgICAiU2V0IjogZmFsc2UsCi0gICAgICAgICJTeW50YXhFcnJv
ciI6IGZhbHNlLAotICAgICAgICAiVHlwZUVycm9yIjogZmFsc2UsCi0gICAgICAgICJVUklFcnJv
ciI6IGZhbHNlLAotICAgICAgICAiV2Vha01hcCI6IGZhbHNlLAotICAgICAgICAiV2Vha1NldCI6
IGZhbHNlLAotCi0gICAgICAgICJBcnJheUJ1ZmZlciI6IGZhbHNlLAotICAgICAgICAiRmxvYXQz
MkFycmF5IjogZmFsc2UsCi0gICAgICAgICJGbG9hdDY0QXJyYXkiOiBmYWxzZSwKLSAgICAgICAg
IkludDE2QXJyYXkiOiBmYWxzZSwKLSAgICAgICAgIkludDMyQXJyYXkiOiBmYWxzZSwKLSAgICAg
ICAgIkludDhBcnJheSI6IGZhbHNlLAotICAgICAgICAiVWludDE2QXJyYXkiOiBmYWxzZSwKLSAg
ICAgICAgIlVpbnQzMkFycmF5IjogZmFsc2UsCi0gICAgICAgICJVaW50OEFycmF5IjogZmFsc2Us
Ci0gICAgICAgICJVaW50OENsYW1wZWRBcnJheSI6IGZhbHNlLAotCi0gICAgICAgICJNYXRoIjog
ZmFsc2UsCi0gICAgICAgICJKU09OIjogZmFsc2UsCi0KLSAgICAgICAgInRvU3RyaW5nIjogZmFs
c2UsCi0gICAgICAgICJoYXNPd25Qcm9wZXJ0eSI6IGZhbHNlLAotICAgICAgICAidmFsdWVPZiI6
IGZhbHNlLAotICAgICAgICAicHJvcGVydHlJc0VudW1lcmFibGUiOiBmYWxzZSwKLSAgICAgICAg
ImNvbnN0cnVjdG9yIjogZmFsc2UsCi0gICAgICAgICJpc1Byb3RvdHlwZU9mIjogZmFsc2UsCi0g
ICAgICAgICJ0b0xvY2FsZVN0cmluZyI6IGZhbHNlCi0gICAgfSwKLQotICAgICJicm93c2VyIjog
ewotICAgICAgICAiZ2xvYmFscyI6IHsKLSAgICAgICAgICAgICJhZGRFdmVudExpc3RlbmVyIjog
ZmFsc2UsCi0gICAgICAgICAgICAiYXBwbGljYXRpb25DYWNoZSI6IGZhbHNlLAotICAgICAgICAg
ICAgImF0b2IiOiBmYWxzZSwKLSAgICAgICAgICAgICJBdWRpbyI6IGZhbHNlLAotICAgICAgICAg
ICAgIkJsb2IiOiBmYWxzZSwKLSAgICAgICAgICAgICJibHVyIjogZmFsc2UsCi0gICAgICAgICAg
ICAiYnRvYSI6IGZhbHNlLAotICAgICAgICAgICAgImNhbmNlbEFuaW1hdGlvbkZyYW1lIjogZmFs
c2UsCi0gICAgICAgICAgICAiY2xlYXJJbnRlcnZhbCI6IGZhbHNlLAotICAgICAgICAgICAgImNs
ZWFyVGltZW91dCI6IGZhbHNlLAotICAgICAgICAgICAgImNsb3NlIjogZmFsc2UsCi0gICAgICAg
ICAgICAiY2xvc2VkIjogZmFsc2UsCi0gICAgICAgICAgICAiY3J5cHRvIjogZmFsc2UsCi0gICAg
ICAgICAgICAiRGF0YVZpZXciOiBmYWxzZSwKLSAgICAgICAgICAgICJkZWZhdWx0U3RhdHVzIjog
ZmFsc2UsCi0gICAgICAgICAgICAiZGV2aWNlUGl4ZWxSYXRpbyI6IGZhbHNlLAotICAgICAgICAg
ICAgImRpc3BhdGNoRXZlbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJkb2N1bWVudCI6IGZhbHNl
LAotICAgICAgICAgICAgIkRPTVBhcnNlciI6IGZhbHNlLAotICAgICAgICAgICAgIkVsZW1lbnQi
OiBmYWxzZSwKLSAgICAgICAgICAgICJGaWxlUmVhZGVyIjogZmFsc2UsCi0gICAgICAgICAgICAi
ZmluZCI6IGZhbHNlLAotICAgICAgICAgICAgImZvY3VzIjogZmFsc2UsCi0gICAgICAgICAgICAi
Rm9ybURhdGEiOiBmYWxzZSwKLSAgICAgICAgICAgICJmcmFtZUVsZW1lbnQiOiBmYWxzZSwKLSAg
ICAgICAgICAgICJmcmFtZXMiOiBmYWxzZSwKLSAgICAgICAgICAgICJnZXRDb21wdXRlZFN0eWxl
IjogZmFsc2UsCi0gICAgICAgICAgICAiZ2V0U2VsZWN0aW9uIjogZmFsc2UsCi0gICAgICAgICAg
ICAiaGlzdG9yeSI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50IjogZmFs
c2UsCi0gICAgICAgICAgICAiSFRNTEJhc2VFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAi
SFRNTEJvZHlFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTEJSRWxlbWVudCI6IGZh
bHNlLAotICAgICAgICAgICAgIkhUTUxCdXR0b25FbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAg
ICAiSFRNTENhbnZhc0VsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MRGlyZWN0b3J5
RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxEaXZFbGVtZW50IjogZmFsc2UsCi0g
ICAgICAgICAgICAiSFRNTERMaXN0RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxF
bGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTEZpZWxkU2V0RWxlbWVudCI6IGZhbHNl
LAotICAgICAgICAgICAgIkhUTUxGb250RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkhU
TUxGb3JtRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxGcmFtZUVsZW1lbnQiOiBm
YWxzZSwKLSAgICAgICAgICAgICJIVE1MRnJhbWVTZXRFbGVtZW50IjogZmFsc2UsCi0gICAgICAg
ICAgICAiSFRNTEhlYWRFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTEhlYWRpbmdF
bGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTEhSRWxlbWVudCI6IGZhbHNlLAotICAg
ICAgICAgICAgIkhUTUxIdG1sRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxJRnJh
bWVFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTEltYWdlRWxlbWVudCI6IGZhbHNl
LAotICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJI
VE1MTGFiZWxFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTExlZ2VuZEVsZW1lbnQi
OiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MTElFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAg
ICAiSFRNTExpbmtFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTE1hcEVsZW1lbnQi
OiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MTWVudUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAg
ICAgICJIVE1MTWV0YUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MTW9kRWxlbWVu
dCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVtZW50IjogZmFsc2UsCi0gICAg
ICAgICAgICAiSFRNTE9MaXN0RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxPcHRH
cm91cEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MT3B0aW9uRWxlbWVudCI6IGZh
bHNlLAotICAgICAgICAgICAgIkhUTUxQYXJhZ3JhcGhFbGVtZW50IjogZmFsc2UsCi0gICAgICAg
ICAgICAiSFRNTFBhcmFtRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxQcmVFbGVt
ZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTFF1b3RlRWxlbWVudCI6IGZhbHNlLAotICAg
ICAgICAgICAgIkhUTUxTY3JpcHRFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTFNl
bGVjdEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MU3R5bGVFbGVtZW50IjogZmFs
c2UsCi0gICAgICAgICAgICAiSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQiOiBmYWxzZSwKLSAgICAg
ICAgICAgICJIVE1MVGFibGVDZWxsRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxU
YWJsZUNvbEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MVGFibGVFbGVtZW50Ijog
ZmFsc2UsCi0gICAgICAgICAgICAiSFRNTFRhYmxlUm93RWxlbWVudCI6IGZhbHNlLAotICAgICAg
ICAgICAgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRN
TFRleHRBcmVhRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxUaXRsZUVsZW1lbnQi
OiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MVUxpc3RFbGVtZW50IjogZmFsc2UsCi0gICAgICAg
ICAgICAiSFRNTFZpZGVvRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkltYWdlIjogZmFs
c2UsCi0gICAgICAgICAgICAiaW5kZXhlZERCIjogZmFsc2UsCi0gICAgICAgICAgICAiaW5uZXJI
ZWlnaHQiOiBmYWxzZSwKLSAgICAgICAgICAgICJpbm5lcldpZHRoIjogZmFsc2UsCi0gICAgICAg
ICAgICAiSW50bCI6IGZhbHNlLAotICAgICAgICAgICAgImxlbmd0aCI6IGZhbHNlLAotICAgICAg
ICAgICAgImxvY2FsU3RvcmFnZSI6IGZhbHNlLAotICAgICAgICAgICAgImxvY2F0aW9uIjogZmFs
c2UsCi0gICAgICAgICAgICAibWF0Y2hNZWRpYSI6IGZhbHNlLAotICAgICAgICAgICAgIk1lc3Nh
Z2VDaGFubmVsIjogZmFsc2UsCi0gICAgICAgICAgICAiTWVzc2FnZUV2ZW50IjogZmFsc2UsCi0g
ICAgICAgICAgICAiTWVzc2FnZVBvcnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJtb3ZlQnkiOiBm
YWxzZSwKLSAgICAgICAgICAgICJtb3ZlVG8iOiBmYWxzZSwKLSAgICAgICAgICAgICJNdXRhdGlv
bk9ic2VydmVyIjogZmFsc2UsCi0gICAgICAgICAgICAibmFtZSI6IGZhbHNlLAotICAgICAgICAg
ICAgIm5hdmlnYXRvciI6IGZhbHNlLAotICAgICAgICAgICAgIk5vZGUiOiBmYWxzZSwKLSAgICAg
ICAgICAgICJOb2RlRmlsdGVyIjogZmFsc2UsCi0gICAgICAgICAgICAib25iZWZvcmV1bmxvYWQi
OiB0cnVlLAotICAgICAgICAgICAgIm9uYmx1ciI6IHRydWUsCi0gICAgICAgICAgICAib25lcnJv
ciI6IHRydWUsCi0gICAgICAgICAgICAib25mb2N1cyI6IHRydWUsCi0gICAgICAgICAgICAib25s
b2FkIjogdHJ1ZSwKLSAgICAgICAgICAgICJvbnJlc2l6ZSI6IHRydWUsCi0gICAgICAgICAgICAi
b251bmxvYWQiOiB0cnVlLAotICAgICAgICAgICAgIm9wZW4iOiBmYWxzZSwKLSAgICAgICAgICAg
ICJvcGVuRGF0YWJhc2UiOiBmYWxzZSwKLSAgICAgICAgICAgICJvcGVuZXIiOiBmYWxzZSwKLSAg
ICAgICAgICAgICJPcHRpb24iOiBmYWxzZSwKLSAgICAgICAgICAgICJvdXRlckhlaWdodCI6IGZh
bHNlLAotICAgICAgICAgICAgIm91dGVyV2lkdGgiOiBmYWxzZSwKLSAgICAgICAgICAgICJwYWdl
WE9mZnNldCI6IGZhbHNlLAotICAgICAgICAgICAgInBhZ2VZT2Zmc2V0IjogZmFsc2UsCi0gICAg
ICAgICAgICAicGFyZW50IjogZmFsc2UsCi0gICAgICAgICAgICAicG9zdE1lc3NhZ2UiOiBmYWxz
ZSwKLSAgICAgICAgICAgICJwcmludCI6IGZhbHNlLAotICAgICAgICAgICAgInJlbW92ZUV2ZW50
TGlzdGVuZXIiOiBmYWxzZSwKLSAgICAgICAgICAgICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiOiBm
YWxzZSwKLSAgICAgICAgICAgICJyZXNpemVCeSI6IGZhbHNlLAotICAgICAgICAgICAgInJlc2l6
ZVRvIjogZmFsc2UsCi0gICAgICAgICAgICAic2NyZWVuIjogZmFsc2UsCi0gICAgICAgICAgICAi
c2NyZWVuWCI6IGZhbHNlLAotICAgICAgICAgICAgInNjcmVlblkiOiBmYWxzZSwKLSAgICAgICAg
ICAgICJzY3JvbGwiOiBmYWxzZSwKLSAgICAgICAgICAgICJzY3JvbGxiYXJzIjogZmFsc2UsCi0g
ICAgICAgICAgICAic2Nyb2xsQnkiOiBmYWxzZSwKLSAgICAgICAgICAgICJzY3JvbGxUbyI6IGZh
bHNlLAotICAgICAgICAgICAgInNjcm9sbFgiOiBmYWxzZSwKLSAgICAgICAgICAgICJzY3JvbGxZ
IjogZmFsc2UsCi0gICAgICAgICAgICAic2VsZiI6IGZhbHNlLAotICAgICAgICAgICAgInNlc3Np
b25TdG9yYWdlIjogZmFsc2UsCi0gICAgICAgICAgICAic2V0SW50ZXJ2YWwiOiBmYWxzZSwKLSAg
ICAgICAgICAgICJzZXRUaW1lb3V0IjogZmFsc2UsCi0gICAgICAgICAgICAiU2hhcmVkV29ya2Vy
IjogZmFsc2UsCi0gICAgICAgICAgICAic2hvd01vZGFsRGlhbG9nIjogZmFsc2UsCi0gICAgICAg
ICAgICAic3RvcCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0FFbGVtZW50IjogZmFsc2UsCi0g
ICAgICAgICAgICAiU1ZHQWx0R2x5cGhEZWZFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAi
U1ZHQWx0R2x5cGhFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHQWx0R2x5cGhJdGVt
RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0FuZ2xlIjogZmFsc2UsCi0gICAgICAg
ICAgICAiU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0Fu
aW1hdGVkQW5nbGUiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdBbmltYXRlZEJvb2xlYW4iOiBm
YWxzZSwKLSAgICAgICAgICAgICJTVkdBbmltYXRlZEVudW1lcmF0aW9uIjogZmFsc2UsCi0gICAg
ICAgICAgICAiU1ZHQW5pbWF0ZWRJbnRlZ2VyIjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHQW5p
bWF0ZWRMZW5ndGgiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdBbmltYXRlZExlbmd0aExpc3Qi
OiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdBbmltYXRlZE51bWJlciI6IGZhbHNlLAotICAgICAg
ICAgICAgIlNWR0FuaW1hdGVkTnVtYmVyTGlzdCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0Fu
aW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbyI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0FuaW1h
dGVkUmVjdCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0FuaW1hdGVkU3RyaW5nIjogZmFsc2Us
Ci0gICAgICAgICAgICAiU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0IjogZmFsc2UsCi0gICAgICAg
ICAgICAiU1ZHQW5pbWF0ZUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdBbmltYXRl
TW90aW9uRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHQW5pbWF0aW9uRWxlbWVudCI6IGZhbHNl
LAotICAgICAgICAgICAgIlNWR0NpcmNsZUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJT
VkdDbGlwUGF0aEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdDb2xvciI6IGZhbHNl
LAotICAgICAgICAgICAgIlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50IjogZmFs
c2UsCi0gICAgICAgICAgICAiU1ZHQ3Vyc29yRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAg
IlNWR0RlZnNFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRGVzY0VsZW1lbnQiOiBm
YWxzZSwKLSAgICAgICAgICAgICJTVkdEb2N1bWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNW
R0VsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdFbGVtZW50SW5zdGFuY2UiOiBmYWxz
ZSwKLSAgICAgICAgICAgICJTVkdFbGVtZW50SW5zdGFuY2VMaXN0IjogZmFsc2UsCi0gICAgICAg
ICAgICAiU1ZHRWxsaXBzZUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdGRUJsZW5k
RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50Ijog
ZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQiOiBmYWxz
ZSwKLSAgICAgICAgICAgICJTVkdGRUNvbXBvc2l0ZUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAg
ICAgICJTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZFRGlzdGFudExp
Z2h0RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZFRmxvb2RFbGVtZW50IjogZmFs
c2UsCi0gICAgICAgICAgICAiU1ZHRkVGdW5jQUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAg
ICJTVkdGRUZ1bmNCRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZFRnVuY0dFbGVt
ZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRkVGdW5jUkVsZW1lbnQiOiBmYWxzZSwKLSAg
ICAgICAgICAgICJTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAg
ICJTVkdGRUltYWdlRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZFTWVyZ2VFbGVt
ZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRkVNZXJnZU5vZGVFbGVtZW50IjogZmFsc2Us
Ci0gICAgICAgICAgICAiU1ZHRkVNb3JwaG9sb2d5RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAg
ICAgIlNWR0ZFT2Zmc2V0RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZFUG9pbnRM
aWdodEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRkVTcG90TGlnaHRFbGVtZW50IjogZmFs
c2UsCi0gICAgICAgICAgICAiU1ZHRkVUaWxlRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAg
IlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdGaWx0ZXJF
bGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRm9udEVsZW1lbnQiOiBmYWxzZSwKLSAg
ICAgICAgICAgICJTVkdGb250RmFjZUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdG
b250RmFjZUZvcm1hdEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdGb250RmFjZU5h
bWVFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRm9udEZhY2VTcmNFbGVtZW50Ijog
ZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRm9udEZhY2VVcmlFbGVtZW50IjogZmFsc2UsCi0gICAg
ICAgICAgICAiU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJT
VkdHRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0dseXBoRWxlbWVudCI6IGZhbHNl
LAotICAgICAgICAgICAgIlNWR0dseXBoUmVmRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAg
IlNWR0dyYWRpZW50RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0hLZXJuRWxlbWVu
dCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ltYWdlRWxlbWVudCI6IGZhbHNlLAotICAgICAg
ICAgICAgIlNWR0xlbmd0aCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0xlbmd0aExpc3QiOiBm
YWxzZSwKLSAgICAgICAgICAgICJTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQiOiBmYWxzZSwKLSAg
ICAgICAgICAgICJTVkdMaW5lRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR01hcmtl
ckVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdNYXNrRWxlbWVudCI6IGZhbHNlLAot
ICAgICAgICAgICAgIlNWR01hdHJpeCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR01ldGFkYXRh
RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR01pc3NpbmdHbHlwaEVsZW1lbnQiOiBm
YWxzZSwKLSAgICAgICAgICAgICJTVkdNUGF0aEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAg
ICJTVkdOdW1iZXIiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdOdW1iZXJMaXN0IjogZmFsc2Us
Ci0gICAgICAgICAgICAiU1ZHUGFpbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdQYXRoRWxl
bWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1BhdGhTZWciOiBmYWxzZSwKLSAgICAgICAg
ICAgICJTVkdQYXRoU2VnQXJjQWJzIjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHUGF0aFNlZ0Fy
Y1JlbCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1BhdGhTZWdDbG9zZVBhdGgiOiBmYWxzZSwK
LSAgICAgICAgICAgICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzIjogZmFsc2UsCi0gICAgICAg
ICAgICAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCI6IGZhbHNlLAotICAgICAgICAgICAgIlNW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsIjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY1JlbCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljU21vb3RoQWJzIjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdQYXRoU2Vn
TGluZXRvQWJzIjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250
YWxBYnMiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJl
bCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1BhdGhTZWdMaW5ldG9SZWwiOiBmYWxzZSwKLSAg
ICAgICAgICAgICJTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMiOiBmYWxzZSwKLSAgICAgICAg
ICAgICJTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwiOiBmYWxzZSwKLSAgICAgICAgICAgICJT
VkdQYXRoU2VnTGlzdCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1BhdGhTZWdNb3ZldG9BYnMi
OiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdQYXRoU2VnTW92ZXRvUmVsIjogZmFsc2UsCi0gICAg
ICAgICAgICAiU1ZHUGF0dGVybkVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdQb2lu
dCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1BvaW50TGlzdCI6IGZhbHNlLAotICAgICAgICAg
ICAgIlNWR1BvbHlnb25FbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHUG9seWxpbmVF
bGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyI6IGZh
bHNlLAotICAgICAgICAgICAgIlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCI6IGZhbHNlLAotICAg
ICAgICAgICAgIlNWR1JlY3QiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdSZWN0RWxlbWVudCI6
IGZhbHNlLAotICAgICAgICAgICAgIlNWR1JlbmRlcmluZ0ludGVudCI6IGZhbHNlLAotICAgICAg
ICAgICAgIlNWR1NjcmlwdEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdTZXRFbGVt
ZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHU3RvcEVsZW1lbnQiOiBmYWxzZSwKLSAgICAg
ICAgICAgICJTVkdTdHJpbmdMaXN0IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHU3R5bGVFbGVt
ZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHU1ZHRWxlbWVudCI6IGZhbHNlLAotICAgICAg
ICAgICAgIlNWR1N3aXRjaEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdTeW1ib2xF
bGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHVGV4dENvbnRlbnRFbGVtZW50IjogZmFs
c2UsCi0gICAgICAgICAgICAiU1ZHVGV4dEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJT
VkdUZXh0UGF0aEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdUZXh0UG9zaXRpb25p
bmdFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHVGl0bGVFbGVtZW50IjogZmFsc2Us
Ci0gICAgICAgICAgICAiU1ZHVHJhbnNmb3JtIjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHVHJh
bnNmb3JtTGlzdCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1RSZWZFbGVtZW50IjogZmFsc2Us
Ci0gICAgICAgICAgICAiU1ZHVFNwYW5FbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZH
VW5pdFR5cGVzIjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHVXNlRWxlbWVudCI6IGZhbHNlLAot
ICAgICAgICAgICAgIlNWR1ZpZXdFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHVmll
d1NwZWMiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdWS2VybkVsZW1lbnQiOiBmYWxzZSwKLSAg
ICAgICAgICAgICJ0b3AiOiBmYWxzZSwKLSAgICAgICAgICAgICJXZWJTb2NrZXQiOiBmYWxzZSwK
LSAgICAgICAgICAgICJ3aW5kb3ciOiBmYWxzZSwKLSAgICAgICAgICAgICJXb3JrZXIiOiBmYWxz
ZSwKLSAgICAgICAgICAgICJYTUxIdHRwUmVxdWVzdCI6IGZhbHNlLAotICAgICAgICAgICAgIlhN
TFNlcmlhbGl6ZXIiOiBmYWxzZSwKLSAgICAgICAgICAgICJYUGF0aEV2YWx1YXRvciI6IGZhbHNl
LAotICAgICAgICAgICAgIlhQYXRoRXhwcmVzc2lvbiI6IGZhbHNlLAotICAgICAgICAgICAgIlhQ
YXRoUmVzdWx0IjogZmFsc2UKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAibm9kZSI6IHsKLSAg
ICAgICAgImdsb2JhbHMiOiB7Ci0gICAgICAgICAgICAiX19maWxlbmFtZSI6IGZhbHNlLAotICAg
ICAgICAgICAgIl9fZGlybmFtZSI6IGZhbHNlLAotICAgICAgICAgICAgIkJ1ZmZlciI6IGZhbHNl
LAotICAgICAgICAgICAgIkRhdGFWaWV3IjogZmFsc2UsCi0gICAgICAgICAgICAiY29uc29sZSI6
IGZhbHNlLAotICAgICAgICAgICAgImV4cG9ydHMiOiB0cnVlLAotICAgICAgICAgICAgIkdMT0JB
TCI6IGZhbHNlLAotICAgICAgICAgICAgImdsb2JhbCI6IGZhbHNlLAotICAgICAgICAgICAgIm1v
ZHVsZSI6IGZhbHNlLAotICAgICAgICAgICAgInByb2Nlc3MiOiBmYWxzZSwKLSAgICAgICAgICAg
ICJyZXF1aXJlIjogZmFsc2UsCi0gICAgICAgICAgICAic2V0VGltZW91dCI6IGZhbHNlLAotICAg
ICAgICAgICAgImNsZWFyVGltZW91dCI6IGZhbHNlLAotICAgICAgICAgICAgInNldEludGVydmFs
IjogZmFsc2UsCi0gICAgICAgICAgICAiY2xlYXJJbnRlcnZhbCI6IGZhbHNlLAotICAgICAgICAg
ICAgInNldEltbWVkaWF0ZSI6IGZhbHNlLAotICAgICAgICAgICAgImNsZWFySW1tZWRpYXRlIjog
ZmFsc2UKLSAgICAgICAgfSwKLQotICAgICAgICAicnVsZXMiOiB7Ci0gICAgICAgICAgICAibm8t
Y2F0Y2gtc2hhZG93IjogMCwKLSAgICAgICAgICAgICJuby1jb25zb2xlIjogMCwKLSAgICAgICAg
ICAgICJuby1taXhlZC1yZXF1aXJlcyI6IDIsCi0gICAgICAgICAgICAibm8tbmV3LXJlcXVpcmUi
OiAyLAotICAgICAgICAgICAgIm5vLXBhdGgtY29uY2F0IjogMiwKLSAgICAgICAgICAgICJuby1w
cm9jZXNzLWV4aXQiOiAyLAotICAgICAgICAgICAgImdsb2JhbC1zdHJpY3QiOiBbMCwgImFsd2F5
cyJdLAotICAgICAgICAgICAgImhhbmRsZS1jYWxsYmFjay1lcnIiOiBbMiwgImVyciJdCi0gICAg
ICAgIH0KLSAgICB9LAotCi0gICAgImFtZCI6IHsKLSAgICAgICAgImdsb2JhbHMiOiB7Ci0gICAg
ICAgICAgICAicmVxdWlyZSI6IGZhbHNlLAotICAgICAgICAgICAgImRlZmluZSI6IGZhbHNlCi0g
ICAgICAgIH0KLSAgICB9LAotCi0gICAgIm1vY2hhIjogewotICAgICAgICAiZ2xvYmFscyI6IHsK
LSAgICAgICAgICAgICJkZXNjcmliZSI6IGZhbHNlLAotICAgICAgICAgICAgIml0IjogZmFsc2Us
Ci0gICAgICAgICAgICAiYmVmb3JlIjogZmFsc2UsCi0gICAgICAgICAgICAiYWZ0ZXIiOiBmYWxz
ZSwKLSAgICAgICAgICAgICJiZWZvcmVFYWNoIjogZmFsc2UsCi0gICAgICAgICAgICAiYWZ0ZXJF
YWNoIjogZmFsc2UsCi0KLSAgICAgICAgICAgICJzdWl0ZSI6IGZhbHNlLAotICAgICAgICAgICAg
InRlc3QiOiBmYWxzZSwKLSAgICAgICAgICAgICJzZXR1cCI6IGZhbHNlLAotICAgICAgICAgICAg
InRlYXJkb3duIjogZmFsc2UsCi0gICAgICAgICAgICAic3VpdGVTZXR1cCI6IGZhbHNlLAotICAg
ICAgICAgICAgInN1aXRlVGVhcmRvd24iOiBmYWxzZQotICAgICAgICB9Ci0gICAgfSwKLQotICAg
ICJqYXNtaW5lIjogewotICAgICAgICAiZ2xvYmFscyI6IHsKLSAgICAgICAgICAgICJhZnRlckVh
Y2giOiBmYWxzZSwKLSAgICAgICAgICAgICJiZWZvcmVFYWNoIjogZmFsc2UsCi0gICAgICAgICAg
ICAiZGVzY3JpYmUiOiBmYWxzZSwKLSAgICAgICAgICAgICJleHBlY3QiOiBmYWxzZSwKLSAgICAg
ICAgICAgICJpdCI6IGZhbHNlLAotICAgICAgICAgICAgImphc21pbmUiOiBmYWxzZSwKLSAgICAg
ICAgICAgICJwZW5kaW5nIjogZmFsc2UsCi0gICAgICAgICAgICAic3B5T24iOiBmYWxzZSwKLSAg
ICAgICAgICAgICJ3YWl0cyI6IGZhbHNlLAotICAgICAgICAgICAgIndhaXRzRm9yIjogZmFsc2Us
Ci0gICAgICAgICAgICAieGRlc2NyaWJlIjogZmFsc2UsCi0gICAgICAgICAgICAieGl0IjogZmFs
c2UKLSAgICAgICAgfQotICAgIH0KLX0KLQotfSx7fV0sMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7Ci1tb2R1bGUuZXhwb3J0cz17Ci0gICAgImVudiI6IHsKLSAgICAgICAgImJy
b3dzZXIiOiBmYWxzZSwKLSAgICAgICAgIm5vZGUiOiBmYWxzZSwKLSAgICAgICAgImFtZCI6IGZh
bHNlLAotICAgICAgICAibW9jaGEiOiBmYWxzZSwKLSAgICAgICAgImphc21pbmUiOiBmYWxzZQot
ICAgIH0sCi0KLSAgICAicnVsZXMiOiB7Ci0gICAgICAgICJuby1hbGVydCI6IDIsCi0gICAgICAg
ICJuby1hcnJheS1jb25zdHJ1Y3RvciI6IDIsCi0gICAgICAgICJuby1iaXR3aXNlIjogMCwKLSAg
ICAgICAgIm5vLWNhbGxlciI6IDIsCi0gICAgICAgICJuby1jYXRjaC1zaGFkb3ciOiAyLAotICAg
ICAgICAibm8tY29tbWEtZGFuZ2xlIjogMiwKLSAgICAgICAgIm5vLWNvbmQtYXNzaWduIjogMiwK
LSAgICAgICAgIm5vLWNvbnNvbGUiOiAyLAotICAgICAgICAibm8tY29uc3RhbnQtY29uZGl0aW9u
IjogMiwKLSAgICAgICAgIm5vLWNvbnRyb2wtcmVnZXgiOiAyLAotICAgICAgICAibm8tZGVidWdn
ZXIiOiAyLAotICAgICAgICAibm8tZGVsZXRlLXZhciI6IDIsCi0gICAgICAgICJuby1kaXYtcmVn
ZXgiOiAwLAotICAgICAgICAibm8tZHVwZS1rZXlzIjogMiwKLSAgICAgICAgIm5vLWVsc2UtcmV0
dXJuIjogMCwKLSAgICAgICAgIm5vLWVtcHR5IjogMiwKLSAgICAgICAgIm5vLWVtcHR5LWNsYXNz
IjogMiwKLSAgICAgICAgIm5vLWVtcHR5LWxhYmVsIjogMiwKLSAgICAgICAgIm5vLWVxLW51bGwi
OiAwLAotICAgICAgICAibm8tZXZhbCI6IDIsCi0gICAgICAgICJuby1leC1hc3NpZ24iOiAyLAot
ICAgICAgICAibm8tZXh0ZW5kLW5hdGl2ZSI6IDIsCi0gICAgICAgICJuby1leHRyYS1iaW5kIjog
MiwKLSAgICAgICAgIm5vLWV4dHJhLWJvb2xlYW4tY2FzdCI6IDIsCi0gICAgICAgICJuby1leHRy
YS1wYXJlbnMiOiAwLAotICAgICAgICAibm8tZXh0cmEtc2VtaSI6IDIsCi0gICAgICAgICJuby1l
eHRyYS1zdHJpY3QiOiAyLAotICAgICAgICAibm8tZmFsbHRocm91Z2giOiAyLAotICAgICAgICAi
bm8tZmxvYXRpbmctZGVjaW1hbCI6IDAsCi0gICAgICAgICJuby1mdW5jLWFzc2lnbiI6IDIsCi0g
ICAgICAgICJuby1pbXBsaWVkLWV2YWwiOiAyLAotICAgICAgICAibm8taW5uZXItZGVjbGFyYXRp
b25zIjogWzIsICJmdW5jdGlvbnMiXSwKLSAgICAgICAgIm5vLWludmFsaWQtcmVnZXhwIjogMiwK
LSAgICAgICAgIm5vLWl0ZXJhdG9yIjogMiwKLSAgICAgICAgIm5vLWxhYmVsLXZhciI6IDIsCi0g
ICAgICAgICJuby1sYWJlbHMiOiAyLAotICAgICAgICAibm8tbG9uZS1ibG9ja3MiOiAyLAotICAg
ICAgICAibm8tbG9uZWx5LWlmIjogMCwKLSAgICAgICAgIm5vLWxvb3AtZnVuYyI6IDIsCi0gICAg
ICAgICJuby1taXhlZC1yZXF1aXJlcyI6IFswLCBmYWxzZV0sCi0gICAgICAgICJuby1taXhlZC1z
cGFjZXMtYW5kLXRhYnMiOiBbMiwgZmFsc2VdLAotICAgICAgICAibm8tbXVsdGktc3BhY2VzIjog
MiwKLSAgICAgICAgIm5vLW11bHRpLXN0ciI6IDIsCi0gICAgICAgICJuby1tdWx0aXBsZS1lbXB0
eS1saW5lcyI6IFswLCB7Im1heCI6IDJ9XSwKLSAgICAgICAgIm5vLW5hdGl2ZS1yZWFzc2lnbiI6
IDIsCi0gICAgICAgICJuby1uZWdhdGVkLWluLWxocyI6IDIsCi0gICAgICAgICJuby1uZXN0ZWQt
dGVybmFyeSI6IDAsCi0gICAgICAgICJuby1uZXciOiAyLAotICAgICAgICAibm8tbmV3LWZ1bmMi
OiAyLAotICAgICAgICAibm8tbmV3LW9iamVjdCI6IDIsCi0gICAgICAgICJuby1uZXctcmVxdWly
ZSI6IDAsCi0gICAgICAgICJuby1uZXctd3JhcHBlcnMiOiAyLAotICAgICAgICAibm8tb2JqLWNh
bGxzIjogMiwKLSAgICAgICAgIm5vLW9jdGFsIjogMiwKLSAgICAgICAgIm5vLW9jdGFsLWVzY2Fw
ZSI6IDIsCi0gICAgICAgICJuby1wYXRoLWNvbmNhdCI6IDAsCi0gICAgICAgICJuby1wbHVzcGx1
cyI6IDAsCi0gICAgICAgICJuby1wcm9jZXNzLWVudiI6IDAsCi0gICAgICAgICJuby1wcm9jZXNz
LWV4aXQiOiAyLAotICAgICAgICAibm8tcHJvdG8iOiAyLAotICAgICAgICAibm8tcmVkZWNsYXJl
IjogMiwKLSAgICAgICAgIm5vLXJlZ2V4LXNwYWNlcyI6IDIsCi0gICAgICAgICJuby1yZXNlcnZl
ZC1rZXlzIjogMCwKLSAgICAgICAgIm5vLXJlc3RyaWN0ZWQtbW9kdWxlcyI6IDAsCi0gICAgICAg
ICJuby1yZXR1cm4tYXNzaWduIjogMiwKLSAgICAgICAgIm5vLXNjcmlwdC11cmwiOiAyLAotICAg
ICAgICAibm8tc2VsZi1jb21wYXJlIjogMCwKLSAgICAgICAgIm5vLXNlcXVlbmNlcyI6IDIsCi0g
ICAgICAgICJuby1zaGFkb3ciOiAyLAotICAgICAgICAibm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFt
ZXMiOiAyLAotICAgICAgICAibm8tc3BhY2UtYmVmb3JlLXNlbWkiOiAyLAotICAgICAgICAibm8t
c3BhY2VkLWZ1bmMiOiAyLAotICAgICAgICAibm8tc3BhcnNlLWFycmF5cyI6IDIsCi0gICAgICAg
ICJuby1zeW5jIjogMCwKLSAgICAgICAgIm5vLXRlcm5hcnkiOiAwLAotICAgICAgICAibm8tdHJh
aWxpbmctc3BhY2VzIjogMiwKLSAgICAgICAgIm5vLXVuZGVmIjogMiwKLSAgICAgICAgIm5vLXVu
ZGVmLWluaXQiOiAyLAotICAgICAgICAibm8tdW5kZWZpbmVkIjogMCwKLSAgICAgICAgIm5vLXVu
ZGVyc2NvcmUtZGFuZ2xlIjogMiwKLSAgICAgICAgIm5vLXVucmVhY2hhYmxlIjogMiwKLSAgICAg
ICAgIm5vLXVudXNlZC1leHByZXNzaW9ucyI6IDIsCi0gICAgICAgICJuby11bnVzZWQtdmFycyI6
IFsyLCB7InZhcnMiOiAiYWxsIiwgImFyZ3MiOiAiYWZ0ZXItdXNlZCJ9XSwKLSAgICAgICAgIm5v
LXVzZS1iZWZvcmUtZGVmaW5lIjogMiwKLSAgICAgICAgIm5vLXZvaWQiOiAwLAotICAgICAgICAi
bm8td2FybmluZy1jb21tZW50cyI6IFswLCB7ICJ0ZXJtcyI6IFsidG9kbyIsICJmaXhtZSIsICJ4
eHgiXSwgImxvY2F0aW9uIjogInN0YXJ0IiB9XSwKLSAgICAgICAgIm5vLXdpdGgiOiAyLAotICAg
ICAgICAibm8td3JhcC1mdW5jIjogMiwKLQotICAgICAgICAiYmxvY2stc2NvcGVkLXZhciI6IDAs
Ci0gICAgICAgICJicmFjZS1zdHlsZSI6IFswLCAiMXRicyJdLAotICAgICAgICAiY2FtZWxjYXNl
IjogMiwKLSAgICAgICAgImNvbW1hLXNwYWNpbmciOiAyLAotICAgICAgICAiY29tbWEtc3R5bGUi
OiAwLAotICAgICAgICAiY29tcGxleGl0eSI6IFswLCAxMV0sCi0gICAgICAgICJjb25zaXN0ZW50
LXJldHVybiI6IDIsCi0gICAgICAgICJjb25zaXN0ZW50LXRoaXMiOiBbMCwgInRoYXQiXSwKLSAg
ICAgICAgImN1cmx5IjogWzIsICJhbGwiXSwKLSAgICAgICAgImRlZmF1bHQtY2FzZSI6IDAsCi0g
ICAgICAgICJkb3Qtbm90YXRpb24iOiAyLAotICAgICAgICAiZW9sLWxhc3QiOiAyLAotICAgICAg
ICAiZXFlcWVxIjogMiwKLSAgICAgICAgImZ1bmMtbmFtZXMiOiAwLAotICAgICAgICAiZnVuYy1z
dHlsZSI6IFswLCAiZGVjbGFyYXRpb24iXSwKLSAgICAgICAgImdsb2JhbC1zdHJpY3QiOiBbMiwg
Im5ldmVyIl0sCi0gICAgICAgICJndWFyZC1mb3ItaW4iOiAwLAotICAgICAgICAiaGFuZGxlLWNh
bGxiYWNrLWVyciI6IDAsCi0gICAgICAgICJrZXktc3BhY2luZyI6IFsyLCB7ICJiZWZvcmVDb2xv
biI6IGZhbHNlLCAiYWZ0ZXJDb2xvbiI6IHRydWUgfV0sCi0gICAgICAgICJtYXgtZGVwdGgiOiBb
MCwgNF0sCi0gICAgICAgICJtYXgtbGVuIjogWzAsIDgwLCA0XSwKLSAgICAgICAgIm1heC1uZXN0
ZWQtY2FsbGJhY2tzIjogWzAsIDJdLAotICAgICAgICAibWF4LXBhcmFtcyI6IFswLCAzXSwKLSAg
ICAgICAgIm1heC1zdGF0ZW1lbnRzIjogWzAsIDEwXSwKLSAgICAgICAgIm5ldy1jYXAiOiAyLAot
ICAgICAgICAibmV3LXBhcmVucyI6IDIsCi0gICAgICAgICJvbmUtdmFyIjogMCwKLSAgICAgICAg
InBhZGRlZC1ibG9ja3MiOiAwLAotICAgICAgICAicXVvdGUtcHJvcHMiOiAwLAotICAgICAgICAi
cXVvdGVzIjogWzIsICJkb3VibGUiXSwKLSAgICAgICAgInJhZGl4IjogMCwKLSAgICAgICAgInNl
bWkiOiAyLAotICAgICAgICAic29ydC12YXJzIjogMCwKLSAgICAgICAgInNwYWNlLWFmdGVyLWtl
eXdvcmRzIjogWzAsICJhbHdheXMiXSwKLSAgICAgICAgInNwYWNlLWJlZm9yZS1ibG9ja3MiOiBb
MCwgImFsd2F5cyJdLAotICAgICAgICAic3BhY2UtaW4tYnJhY2tldHMiOiBbMCwgIm5ldmVyIl0s
Ci0gICAgICAgICJzcGFjZS1pbi1wYXJlbnMiOiBbMCwgIm5ldmVyIl0sCi0gICAgICAgICJzcGFj
ZS1pbmZpeC1vcHMiOiAyLAotICAgICAgICAic3BhY2UtcmV0dXJuLXRocm93LWNhc2UiOiAyLAot
ICAgICAgICAic3BhY2UtdW5hcnktd29yZC1vcHMiOiAwLAotICAgICAgICAic3BhY2VkLWxpbmUt
Y29tbWVudCI6IFswLCAiYWx3YXlzIl0sCi0gICAgICAgICJzdHJpY3QiOiAyLAotICAgICAgICAi
dXNlLWlzbmFuIjogMiwKLSAgICAgICAgInZhbGlkLWpzZG9jIjogMCwKLSAgICAgICAgInZhbGlk
LXR5cGVvZiI6IDIsCi0gICAgICAgICJ2YXJzLW9uLXRvcCI6IDAsCi0gICAgICAgICJ3cmFwLWlp
ZmUiOiAwLAotICAgICAgICAid3JhcC1yZWdleCI6IDAsCi0gICAgICAgICJ5b2RhIjogWzIsICJu
ZXZlciJdCi0gICAgfQotfQotCi19LHt9XSwzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKLS8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0
b3JzLgotLy8KLS8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl
LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k
IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0vLyAiU29mdHdhcmUiKSwgdG8g
ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0vLyB3
aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us
IHB1Ymxpc2gsCi0vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMg
b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0Ci0vLyBwZXJzb25zIHRvIHdob20gdGhlIFNv
ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUKLS8vIGZvbGxvd2lu
ZyBjb25kaXRpb25zOgotLy8KLS8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz
IHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCi0vLyBpbiBhbGwgY29waWVzIG9y
IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLS8vCi0vLyBUSEUgU09GVFdB
UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ
UkVTUwotLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS
UkFOVElFUyBPRgotLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTgotLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCi0vLyBE
QU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB
Q1QsIFRPUlQgT1IKLS8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O
TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKLS8vIFVTRSBPUiBPVEhFUiBERUFMSU5H
UyBJTiBUSEUgU09GVFdBUkUuCi0KLWZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHsKLSAgdGhpcy5f
ZXZlbnRzID0gdGhpcy5fZXZlbnRzIHx8IHt9OwotICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlz
Ll9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkOwotfQotbW9kdWxlLmV4cG9ydHMgPSBFdmVudEVt
aXR0ZXI7Ci0KLS8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueAotRXZlbnRFbWl0
dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjsKLQotRXZlbnRFbWl0dGVyLnByb3RvdHlw
ZS5fZXZlbnRzID0gdW5kZWZpbmVkOwotRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVu
ZXJzID0gdW5kZWZpbmVkOwotCi0vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmlu
dCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmUKLS8vIGFkZGVkIHRvIGl0
LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVh
a3MuCi1FdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycyA9IDEwOwotCi0vLyBPYnZpb3Vz
bHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlv
biBhbGxvd3MKLS8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1p
dGVkLgotRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbihu
KSB7Ci0gIGlmICghaXNOdW1iZXIobikgfHwgbiA8IDAgfHwgaXNOYU4obikpCi0gICAgdGhyb3cg
VHlwZUVycm9yKCduIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTsKLSAgdGhpcy5fbWF4TGlz
dGVuZXJzID0gbjsKLSAgcmV0dXJuIHRoaXM7Ci19OwotCi1FdmVudEVtaXR0ZXIucHJvdG90eXBl
LmVtaXQgPSBmdW5jdGlvbih0eXBlKSB7Ci0gIHZhciBlciwgaGFuZGxlciwgbGVuLCBhcmdzLCBp
LCBsaXN0ZW5lcnM7Ci0KLSAgaWYgKCF0aGlzLl9ldmVudHMpCi0gICAgdGhpcy5fZXZlbnRzID0g
e307Ci0KLSAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRo
cm93LgotICBpZiAodHlwZSA9PT0gJ2Vycm9yJykgewotICAgIGlmICghdGhpcy5fZXZlbnRzLmVy
cm9yIHx8Ci0gICAgICAgIChpc09iamVjdCh0aGlzLl9ldmVudHMuZXJyb3IpICYmICF0aGlzLl9l
dmVudHMuZXJyb3IubGVuZ3RoKSkgewotICAgICAgZXIgPSBhcmd1bWVudHNbMV07Ci0gICAgICBp
ZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikgewotICAgICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVk
ICdlcnJvcicgZXZlbnQKLSAgICAgIH0KLSAgICAgIHRocm93IFR5cGVFcnJvcignVW5jYXVnaHQs
IHVuc3BlY2lmaWVkICJlcnJvciIgZXZlbnQuJyk7Ci0gICAgfQotICB9Ci0KLSAgaGFuZGxlciA9
IHRoaXMuX2V2ZW50c1t0eXBlXTsKLQotICBpZiAoaXNVbmRlZmluZWQoaGFuZGxlcikpCi0gICAg
cmV0dXJuIGZhbHNlOwotCi0gIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7Ci0gICAgc3dpdGNo
IChhcmd1bWVudHMubGVuZ3RoKSB7Ci0gICAgICAvLyBmYXN0IGNhc2VzCi0gICAgICBjYXNlIDE6
Ci0gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IDI6Ci0gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgMzoKLSAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50
c1sxXSwgYXJndW1lbnRzWzJdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAvLyBzbG93ZXIKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0gICAgICAgIGFy
Z3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7Ci0gICAgICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkr
KykKLSAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTsKLSAgICAgICAgaGFuZGxl
ci5hcHBseSh0aGlzLCBhcmdzKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoaXNPYmplY3QoaGFuZGxl
cikpIHsKLSAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOwotICAgIGFyZ3MgPSBuZXcgQXJyYXko
bGVuIC0gMSk7Ci0gICAgZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKQotICAgICAgYXJnc1tpIC0g
MV0gPSBhcmd1bWVudHNbaV07Ci0KLSAgICBsaXN0ZW5lcnMgPSBoYW5kbGVyLnNsaWNlKCk7Ci0g
ICAgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKysp
Ci0gICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7Ci0gIH0KLQotICByZXR1cm4g
dHJ1ZTsKLX07Ci0KLUV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlv
bih0eXBlLCBsaXN0ZW5lcikgewotICB2YXIgbTsKLQotICBpZiAoIWlzRnVuY3Rpb24obGlzdGVu
ZXIpKQotICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7
Ci0KLSAgaWYgKCF0aGlzLl9ldmVudHMpCi0gICAgdGhpcy5fZXZlbnRzID0ge307Ci0KLSAgLy8g
VG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gIm5ld0xpc3RlbmVy
IiEgQmVmb3JlCi0gIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0ICJu
ZXdMaXN0ZW5lciIuCi0gIGlmICh0aGlzLl9ldmVudHMubmV3TGlzdGVuZXIpCi0gICAgdGhpcy5l
bWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsCi0gICAgICAgICAgICAgIGlzRnVuY3Rpb24obGlzdGVu
ZXIubGlzdGVuZXIpID8KLSAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5l
cik7Ci0KLSAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pCi0gICAgLy8gT3B0aW1pemUgdGhlIGNh
c2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuCi0g
ICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7Ci0gIGVsc2UgaWYgKGlzT2JqZWN0KHRo
aXMuX2V2ZW50c1t0eXBlXSkpCi0gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXks
IGp1c3QgYXBwZW5kLgotICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5wdXNoKGxpc3RlbmVyKTsKLSAg
ZWxzZQotICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRv
IGFycmF5LgotICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFt0aGlzLl9ldmVudHNbdHlwZV0sIGxp
c3RlbmVyXTsKLQotICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVhawotICBpZiAoaXNPYmplY3Qo
dGhpcy5fZXZlbnRzW3R5cGVdKSAmJiAhdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCkgewotICAg
IHZhciBtOwotICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5fbWF4TGlzdGVuZXJzKSkgewotICAg
ICAgbSA9IHRoaXMuX21heExpc3RlbmVyczsKLSAgICB9IGVsc2UgewotICAgICAgbSA9IEV2ZW50
RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzOwotICAgIH0KLQotICAgIGlmIChtICYmIG0gPiAw
ICYmIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGggPiBtKSB7Ci0gICAgICB0aGlzLl9ldmVudHNb
dHlwZV0ud2FybmVkID0gdHJ1ZTsKLSAgICAgIGNvbnNvbGUuZXJyb3IoJyhub2RlKSB3YXJuaW5n
OiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgKwotICAgICAgICAgICAgICAgICAgICAn
bGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiAnICsKLSAgICAgICAgICAgICAgICAg
ICAgJ1VzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicsCi0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgpOwotICAgICAgaWYg
KHR5cGVvZiBjb25zb2xlLnRyYWNlID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgIC8vIG5vdCBz
dXBwb3J0ZWQgaW4gSUUgMTAKLSAgICAgICAgY29uc29sZS50cmFjZSgpOwotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIHJldHVybiB0aGlzOwotfTsKLQotRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5v
biA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7Ci0KLUV2ZW50RW1pdHRlci5w
cm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7Ci0gIGlmICghaXNGdW5j
dGlvbihsaXN0ZW5lcikpCi0gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEg
ZnVuY3Rpb24nKTsKLQotICB2YXIgZmlyZWQgPSBmYWxzZTsKLQotICBmdW5jdGlvbiBnKCkgewot
ICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgZyk7Ci0KLSAgICBpZiAoIWZpcmVkKSB7Ci0g
ICAgICBmaXJlZCA9IHRydWU7Ci0gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMp
OwotICAgIH0KLSAgfQotCi0gIGcubGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAgdGhpcy5vbih0eXBl
LCBnKTsKLQotICByZXR1cm4gdGhpczsKLX07Ci0KLS8vIGVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVy
JyBldmVudCBpZmYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkCi1FdmVudEVtaXR0ZXIucHJvdG90
eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHsKLSAgdmFyIGxp
c3QsIHBvc2l0aW9uLCBsZW5ndGgsIGk7Ci0KLSAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSkK
LSAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpOwotCi0g
IGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pCi0gICAgcmV0dXJuIHRo
aXM7Ci0KLSAgbGlzdCA9IHRoaXMuX2V2ZW50c1t0eXBlXTsKLSAgbGVuZ3RoID0gbGlzdC5sZW5n
dGg7Ci0gIHBvc2l0aW9uID0gLTE7Ci0KLSAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8Ci0gICAg
ICAoaXNGdW5jdGlvbihsaXN0Lmxpc3RlbmVyKSAmJiBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5l
cikpIHsKLSAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdOwotICAgIGlmICh0aGlzLl9ldmVu
dHMucmVtb3ZlTGlzdGVuZXIpCi0gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlw
ZSwgbGlzdGVuZXIpOwotCi0gIH0gZWxzZSBpZiAoaXNPYmplY3QobGlzdCkpIHsKLSAgICBmb3Ig
KGkgPSBsZW5ndGg7IGktLSA+IDA7KSB7Ci0gICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIg
fHwKLSAgICAgICAgICAobGlzdFtpXS5saXN0ZW5lciAmJiBsaXN0W2ldLmxpc3RlbmVyID09PSBs
aXN0ZW5lcikpIHsKLSAgICAgICAgcG9zaXRpb24gPSBpOwotICAgICAgICBicmVhazsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAocG9zaXRpb24gPCAwKQotICAgICAgcmV0dXJuIHRoaXM7Ci0K
LSAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpIHsKLSAgICAgIGxpc3QubGVuZ3RoID0gMDsKLSAg
ICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIGxpc3Qu
c3BsaWNlKHBvc2l0aW9uLCAxKTsKLSAgICB9Ci0KLSAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92
ZUxpc3RlbmVyKQotICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3Rl
bmVyKTsKLSAgfQotCi0gIHJldHVybiB0aGlzOwotfTsKLQotRXZlbnRFbWl0dGVyLnByb3RvdHlw
ZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7Ci0gIHZhciBrZXksIGxpc3Rl
bmVyczsKLQotICBpZiAoIXRoaXMuX2V2ZW50cykKLSAgICByZXR1cm4gdGhpczsKLQotICAvLyBu
b3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0Ci0gIGlmICgh
dGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKSB7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgg
PT09IDApCi0gICAgICB0aGlzLl9ldmVudHMgPSB7fTsKLSAgICBlbHNlIGlmICh0aGlzLl9ldmVu
dHNbdHlwZV0pCi0gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdOwotICAgIHJldHVybiB0
aGlzOwotICB9Ci0KLSAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBv
biBhbGwgZXZlbnRzCi0gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7Ci0gICAgZm9yIChr
ZXkgaW4gdGhpcy5fZXZlbnRzKSB7Ci0gICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXIn
KSBjb250aW51ZTsKLSAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7Ci0gICAgfQot
ICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpOwotICAgIHRoaXMu
X2V2ZW50cyA9IHt9OwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgbGlzdGVuZXJzID0gdGhp
cy5fZXZlbnRzW3R5cGVdOwotCi0gIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVycykpIHsKLSAgICB0
aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8g
TElGTyBvcmRlcgotICAgIHdoaWxlIChsaXN0ZW5lcnMubGVuZ3RoKQotICAgICAgdGhpcy5yZW1v
dmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aCAtIDFdKTsKLSAgfQot
ICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdOwotCi0gIHJldHVybiB0aGlzOwotfTsKLQotRXZl
bnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7Ci0gIHZhciBy
ZXQ7Ci0gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pCi0gICAgcmV0
ID0gW107Ci0gIGVsc2UgaWYgKGlzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5cGVdKSkKLSAgICBy
ZXQgPSBbdGhpcy5fZXZlbnRzW3R5cGVdXTsKLSAgZWxzZQotICAgIHJldCA9IHRoaXMuX2V2ZW50
c1t0eXBlXS5zbGljZSgpOwotICByZXR1cm4gcmV0OwotfTsKLQotRXZlbnRFbWl0dGVyLmxpc3Rl
bmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7Ci0gIHZhciByZXQ7Ci0gIGlmICgh
ZW1pdHRlci5fZXZlbnRzIHx8ICFlbWl0dGVyLl9ldmVudHNbdHlwZV0pCi0gICAgcmV0ID0gMDsK
LSAgZWxzZSBpZiAoaXNGdW5jdGlvbihlbWl0dGVyLl9ldmVudHNbdHlwZV0pKQotICAgIHJldCA9
IDE7Ci0gIGVsc2UKLSAgICByZXQgPSBlbWl0dGVyLl9ldmVudHNbdHlwZV0ubGVuZ3RoOwotICBy
ZXR1cm4gcmV0OwotfTsKLQotZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHsKLSAgcmV0dXJuIHR5
cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7Ci19Ci0KLWZ1bmN0aW9uIGlzTnVtYmVyKGFyZykgewot
ICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7Ci19Ci0KLWZ1bmN0aW9uIGlzT2JqZWN0
KGFyZykgewotICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxs
OwotfQotCi1mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHsKLSAgcmV0dXJuIGFyZyA9PT0gdm9p
ZCAwOwotfQotCi19LHt9XSw0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8q
Ci0gIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdt
YWlsLmNvbT4KLSAgQ29weXJpZ2h0IChDKSAyMDE0IERhbiBUYW8gPGRhbmllbC50YW9AZ21haWwu
Y29tPgotICBDb3B5cmlnaHQgKEMpIDIwMTMgQW5kcmV3IEVpc2VuYmVyZyA8YW5kcmV3QGVpc2Vu
YmVyZy5hcz4KLQotICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLSAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLQotICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLSAgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQotICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
PENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZCi0gIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotLypqc2xpbnQg
Yml0d2lzZTp0cnVlIHBsdXNwbHVzOnRydWUgZXFlcTp0cnVlIG5vbWVuOnRydWUqLwotLypnbG9i
YWwgZG9jdHJpbmU6dHJ1ZSwgZXhwb3J0czp0cnVlLCBwYXJzZVR5cGVFeHByZXNzaW9uOnRydWUs
IHBhcnNlVG9wOnRydWUqLwotCi0oZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgICAndXNlIHN0cmlj
dCc7Ci0KLSAgICB2YXIgVkVSU0lPTiwKLSAgICAgICAgUmVnZXgsCi0gICAgICAgIENhbkFjY2Vz
c1N0cmluZ0J5SW5kZXgsCi0gICAgICAgIHR5cGVkLAotICAgICAgICBqc2RvYywKLSAgICAgICAg
aXNBcnJheSwKLSAgICAgICAgaGFzT3duUHJvcGVydHk7Ci0KLSAgICAvLyBTeW5jIHdpdGggcGFj
a2FnZS5qc29uLgotICAgIFZFUlNJT04gPSAnMC41LjItZGV2JzsKLQotICAgIC8vIFNlZSBhbHNv
IHRvb2xzL2dlbmVyYXRlLXVuaWNvZGUtcmVnZXgucHkuCi0gICAgUmVnZXggPSB7Ci0gICAgICAg
IE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OiBuZXcgUmVnRXhwKCdbXHhhYVx4YjVceGJhXHhjMC1c
eGQ2XHhkOC1ceGY2XHhmOC1cdTAyYzFcdTAyYzYtXHUwMmQxXHUwMmUwLVx1MDJlNFx1MDJlY1x1
MDJlZVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN2EtXHUwMzdkXHUwMzg2XHUwMzg4LVx1
MDM4YVx1MDM4Y1x1MDM4ZS1cdTAzYTFcdTAzYTMtXHUwM2Y1XHUwM2Y3LVx1MDQ4MVx1MDQ4YS1c
dTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVkMC1cdTA1ZWFcdTA1ZjAt
XHUwNWYyXHUwNjIwLVx1MDY0YVx1MDY2ZVx1MDY2Zlx1MDY3MS1cdTA2ZDNcdTA2ZDVcdTA2ZTVc
dTA2ZTZcdTA2ZWVcdTA2ZWZcdTA2ZmEtXHUwNmZjXHUwNmZmXHUwNzEwXHUwNzEyLVx1MDcyZlx1
MDc0ZC1cdTA3YTVcdTA3YjFcdTA3Y2EtXHUwN2VhXHUwN2Y0XHUwN2Y1XHUwN2ZhXHUwODAwLVx1
MDgxNVx1MDgxYVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4YTBcdTA4YTItXHUwOGFjXHUw
OTA0LVx1MDkzOVx1MDkzZFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XHUwOTc5LVx1
MDk3Zlx1MDk4NS1cdTA5OGNcdTA5OGZcdTA5OTBcdTA5OTMtXHUwOWE4XHUwOWFhLVx1MDliMFx1
MDliMlx1MDliNi1cdTA5YjlcdTA5YmRcdTA5Y2VcdTA5ZGNcdTA5ZGRcdTA5ZGYtXHUwOWUxXHUw
OWYwXHUwOWYxXHUwYTA1LVx1MGEwYVx1MGEwZlx1MGExMFx1MGExMy1cdTBhMjhcdTBhMmEtXHUw
YTMwXHUwYTMyXHUwYTMzXHUwYTM1XHUwYTM2XHUwYTM4XHUwYTM5XHUwYTU5LVx1MGE1Y1x1MGE1
ZVx1MGE3Mi1cdTBhNzRcdTBhODUtXHUwYThkXHUwYThmLVx1MGE5MVx1MGE5My1cdTBhYThcdTBh
YWEtXHUwYWIwXHUwYWIyXHUwYWIzXHUwYWI1LVx1MGFiOVx1MGFiZFx1MGFkMFx1MGFlMFx1MGFl
MVx1MGIwNS1cdTBiMGNcdTBiMGZcdTBiMTBcdTBiMTMtXHUwYjI4XHUwYjJhLVx1MGIzMFx1MGIz
Mlx1MGIzM1x1MGIzNS1cdTBiMzlcdTBiM2RcdTBiNWNcdTBiNWRcdTBiNWYtXHUwYjYxXHUwYjcx
XHUwYjgzXHUwYjg1LVx1MGI4YVx1MGI4ZS1cdTBiOTBcdTBiOTItXHUwYjk1XHUwYjk5XHUwYjlh
XHUwYjljXHUwYjllXHUwYjlmXHUwYmEzXHUwYmE0XHUwYmE4LVx1MGJhYVx1MGJhZS1cdTBiYjlc
dTBiZDBcdTBjMDUtXHUwYzBjXHUwYzBlLVx1MGMxMFx1MGMxMi1cdTBjMjhcdTBjMmEtXHUwYzMz
XHUwYzM1LVx1MGMzOVx1MGMzZFx1MGM1OFx1MGM1OVx1MGM2MFx1MGM2MVx1MGM4NS1cdTBjOGNc
dTBjOGUtXHUwYzkwXHUwYzkyLVx1MGNhOFx1MGNhYS1cdTBjYjNcdTBjYjUtXHUwY2I5XHUwY2Jk
XHUwY2RlXHUwY2UwXHUwY2UxXHUwY2YxXHUwY2YyXHUwZDA1LVx1MGQwY1x1MGQwZS1cdTBkMTBc
dTBkMTItXHUwZDNhXHUwZDNkXHUwZDRlXHUwZDYwXHUwZDYxXHUwZDdhLVx1MGQ3Zlx1MGQ4NS1c
dTBkOTZcdTBkOWEtXHUwZGIxXHUwZGIzLVx1MGRiYlx1MGRiZFx1MGRjMC1cdTBkYzZcdTBlMDEt
XHUwZTMwXHUwZTMyXHUwZTMzXHUwZTQwLVx1MGU0Nlx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4N1x1
MGU4OFx1MGU4YVx1MGU4ZFx1MGU5NC1cdTBlOTdcdTBlOTktXHUwZTlmXHUwZWExLVx1MGVhM1x1
MGVhNVx1MGVhN1x1MGVhYVx1MGVhYlx1MGVhZC1cdTBlYjBcdTBlYjJcdTBlYjNcdTBlYmRcdTBl
YzAtXHUwZWM0XHUwZWM2XHUwZWRjLVx1MGVkZlx1MGYwMFx1MGY0MC1cdTBmNDdcdTBmNDktXHUw
ZjZjXHUwZjg4LVx1MGY4Y1x1MTAwMC1cdTEwMmFcdTEwM2ZcdTEwNTAtXHUxMDU1XHUxMDVhLVx1
MTA1ZFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2ZS1cdTEwNzBcdTEwNzUtXHUxMDgxXHUxMDhlXHUx
MGEwLVx1MTBjNVx1MTBjN1x1MTBjZFx1MTBkMC1cdTEwZmFcdTEwZmMtXHUxMjQ4XHUxMjRhLVx1
MTI0ZFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNWEtXHUxMjVkXHUxMjYwLVx1MTI4OFx1MTI4YS1c
dTEyOGRcdTEyOTAtXHUxMmIwXHUxMmIyLVx1MTJiNVx1MTJiOC1cdTEyYmVcdTEyYzBcdTEyYzIt
XHUxMmM1XHUxMmM4LVx1MTJkNlx1MTJkOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1
YVx1MTM4MC1cdTEzOGZcdTEzYTAtXHUxM2Y0XHUxNDAxLVx1MTY2Y1x1MTY2Zi1cdTE2N2ZcdTE2
ODEtXHUxNjlhXHUxNmEwLVx1MTZlYVx1MTZlZS1cdTE2ZjBcdTE3MDAtXHUxNzBjXHUxNzBlLVx1
MTcxMVx1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Y1x1MTc2ZS1cdTE3NzBc
dTE3ODAtXHUxN2IzXHUxN2Q3XHUxN2RjXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4YThcdTE4YWFc
dTE4YjAtXHUxOGY1XHUxOTAwLVx1MTkxY1x1MTk1MC1cdTE5NmRcdTE5NzAtXHUxOTc0XHUxOTgw
LVx1MTlhYlx1MTljMS1cdTE5YzdcdTFhMDAtXHUxYTE2XHUxYTIwLVx1MWE1NFx1MWFhN1x1MWIw
NS1cdTFiMzNcdTFiNDUtXHUxYjRiXHUxYjgzLVx1MWJhMFx1MWJhZVx1MWJhZlx1MWJiYS1cdTFi
ZTVcdTFjMDAtXHUxYzIzXHUxYzRkLVx1MWM0Zlx1MWM1YS1cdTFjN2RcdTFjZTktXHUxY2VjXHUx
Y2VlLVx1MWNmMVx1MWNmNVx1MWNmNlx1MWQwMC1cdTFkYmZcdTFlMDAtXHUxZjE1XHUxZjE4LVx1
MWYxZFx1MWYyMC1cdTFmNDVcdTFmNDgtXHUxZjRkXHUxZjUwLVx1MWY1N1x1MWY1OVx1MWY1Ylx1
MWY1ZFx1MWY1Zi1cdTFmN2RcdTFmODAtXHUxZmI0XHUxZmI2LVx1MWZiY1x1MWZiZVx1MWZjMi1c
dTFmYzRcdTFmYzYtXHUxZmNjXHUxZmQwLVx1MWZkM1x1MWZkNi1cdTFmZGJcdTFmZTAtXHUxZmVj
XHUxZmYyLVx1MWZmNFx1MWZmNi1cdTFmZmNcdTIwNzFcdTIwN2ZcdTIwOTAtXHUyMDljXHUyMTAy
XHUyMTA3XHUyMTBhLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMWRcdTIxMjRcdTIxMjZcdTIxMjhc
dTIxMmEtXHUyMTJkXHUyMTJmLVx1MjEzOVx1MjEzYy1cdTIxM2ZcdTIxNDUtXHUyMTQ5XHUyMTRl
XHUyMTYwLVx1MjE4OFx1MmMwMC1cdTJjMmVcdTJjMzAtXHUyYzVlXHUyYzYwLVx1MmNlNFx1MmNl
Yi1cdTJjZWVcdTJjZjJcdTJjZjNcdTJkMDAtXHUyZDI1XHUyZDI3XHUyZDJkXHUyZDMwLVx1MmQ2
N1x1MmQ2Zlx1MmQ4MC1cdTJkOTZcdTJkYTAtXHUyZGE2XHUyZGE4LVx1MmRhZVx1MmRiMC1cdTJk
YjZcdTJkYjgtXHUyZGJlXHUyZGMwLVx1MmRjNlx1MmRjOC1cdTJkY2VcdTJkZDAtXHUyZGQ2XHUy
ZGQ4LVx1MmRkZVx1MmUyZlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDI5XHUzMDMxLVx1MzAzNVx1
MzAzOC1cdTMwM2NcdTMwNDEtXHUzMDk2XHUzMDlkLVx1MzA5Zlx1MzBhMS1cdTMwZmFcdTMwZmMt
XHUzMGZmXHUzMTA1LVx1MzEyZFx1MzEzMS1cdTMxOGVcdTMxYTAtXHUzMWJhXHUzMWYwLVx1MzFm
Zlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhMDAwLVx1YTQ4Y1x1YTRkMC1cdWE0ZmRcdWE1
MDAtXHVhNjBjXHVhNjEwLVx1YTYxZlx1YTYyYVx1YTYyYlx1YTY0MC1cdWE2NmVcdWE2N2YtXHVh
Njk3XHVhNmEwLVx1YTZlZlx1YTcxNy1cdWE3MWZcdWE3MjItXHVhNzg4XHVhNzhiLVx1YTc4ZVx1
YTc5MC1cdWE3OTNcdWE3YTAtXHVhN2FhXHVhN2Y4LVx1YTgwMVx1YTgwMy1cdWE4MDVcdWE4MDct
XHVhODBhXHVhODBjLVx1YTgyMlx1YTg0MC1cdWE4NzNcdWE4ODItXHVhOGIzXHVhOGYyLVx1YThm
N1x1YThmYlx1YTkwYS1cdWE5MjVcdWE5MzAtXHVhOTQ2XHVhOTYwLVx1YTk3Y1x1YTk4NC1cdWE5
YjJcdWE5Y2ZcdWFhMDAtXHVhYTI4XHVhYTQwLVx1YWE0Mlx1YWE0NC1cdWFhNGJcdWFhNjAtXHVh
YTc2XHVhYTdhXHVhYTgwLVx1YWFhZlx1YWFiMVx1YWFiNVx1YWFiNlx1YWFiOS1cdWFhYmRcdWFh
YzBcdWFhYzJcdWFhZGItXHVhYWRkXHVhYWUwLVx1YWFlYVx1YWFmMi1cdWFhZjRcdWFiMDEtXHVh
YjA2XHVhYjA5LVx1YWIwZVx1YWIxMS1cdWFiMTZcdWFiMjAtXHVhYjI2XHVhYjI4LVx1YWIyZVx1
YWJjMC1cdWFiZTJcdWFjMDAtXHVkN2EzXHVkN2IwLVx1ZDdjNlx1ZDdjYi1cdWQ3ZmJcdWY5MDAt
XHVmYTZkXHVmYTcwLVx1ZmFkOVx1ZmIwMC1cdWZiMDZcdWZiMTMtXHVmYjE3XHVmYjFkXHVmYjFm
LVx1ZmIyOFx1ZmIyYS1cdWZiMzZcdWZiMzgtXHVmYjNjXHVmYjNlXHVmYjQwXHVmYjQxXHVmYjQz
XHVmYjQ0XHVmYjQ2LVx1ZmJiMVx1ZmJkMy1cdWZkM2RcdWZkNTAtXHVmZDhmXHVmZDkyLVx1ZmRj
N1x1ZmRmMC1cdWZkZmJcdWZlNzAtXHVmZTc0XHVmZTc2LVx1ZmVmY1x1ZmYyMS1cdWZmM2FcdWZm
NDEtXHVmZjVhXHVmZjY2LVx1ZmZiZVx1ZmZjMi1cdWZmYzdcdWZmY2EtXHVmZmNmXHVmZmQyLVx1
ZmZkN1x1ZmZkYS1cdWZmZGNdJyksCi0gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IG5l
dyBSZWdFeHAoJ1tceGFhXHhiNVx4YmFceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx1MDJjMVx1MDJj
Ni1cdTAyZDFcdTAyZTAtXHUwMmU0XHUwMmVjXHUwMmVlXHUwMzAwLVx1MDM3NFx1MDM3Nlx1MDM3
N1x1MDM3YS1cdTAzN2RcdTAzODZcdTAzODgtXHUwMzhhXHUwMzhjXHUwMzhlLVx1MDNhMVx1MDNh
My1cdTAzZjVcdTAzZjctXHUwNDgxXHUwNDgzLVx1MDQ4N1x1MDQ4YS1cdTA1MjdcdTA1MzEtXHUw
NTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDU5MS1cdTA1YmRcdTA1YmZcdTA1YzFcdTA1YzJcdTA1
YzRcdTA1YzVcdTA1YzdcdTA1ZDAtXHUwNWVhXHUwNWYwLVx1MDVmMlx1MDYxMC1cdTA2MWFcdTA2
MjAtXHUwNjY5XHUwNjZlLVx1MDZkM1x1MDZkNS1cdTA2ZGNcdTA2ZGYtXHUwNmU4XHUwNmVhLVx1
MDZmY1x1MDZmZlx1MDcxMC1cdTA3NGFcdTA3NGQtXHUwN2IxXHUwN2MwLVx1MDdmNVx1MDdmYVx1
MDgwMC1cdTA4MmRcdTA4NDAtXHUwODViXHUwOGEwXHUwOGEyLVx1MDhhY1x1MDhlNC1cdTA4ZmVc
dTA5MDAtXHUwOTYzXHUwOTY2LVx1MDk2Zlx1MDk3MS1cdTA5NzdcdTA5NzktXHUwOTdmXHUwOTgx
LVx1MDk4M1x1MDk4NS1cdTA5OGNcdTA5OGZcdTA5OTBcdTA5OTMtXHUwOWE4XHUwOWFhLVx1MDli
MFx1MDliMlx1MDliNi1cdTA5YjlcdTA5YmMtXHUwOWM0XHUwOWM3XHUwOWM4XHUwOWNiLVx1MDlj
ZVx1MDlkN1x1MDlkY1x1MDlkZFx1MDlkZi1cdTA5ZTNcdTA5ZTYtXHUwOWYxXHUwYTAxLVx1MGEw
M1x1MGEwNS1cdTBhMGFcdTBhMGZcdTBhMTBcdTBhMTMtXHUwYTI4XHUwYTJhLVx1MGEzMFx1MGEz
Mlx1MGEzM1x1MGEzNVx1MGEzNlx1MGEzOFx1MGEzOVx1MGEzY1x1MGEzZS1cdTBhNDJcdTBhNDdc
dTBhNDhcdTBhNGItXHUwYTRkXHUwYTUxXHUwYTU5LVx1MGE1Y1x1MGE1ZVx1MGE2Ni1cdTBhNzVc
dTBhODEtXHUwYTgzXHUwYTg1LVx1MGE4ZFx1MGE4Zi1cdTBhOTFcdTBhOTMtXHUwYWE4XHUwYWFh
LVx1MGFiMFx1MGFiMlx1MGFiM1x1MGFiNS1cdTBhYjlcdTBhYmMtXHUwYWM1XHUwYWM3LVx1MGFj
OVx1MGFjYi1cdTBhY2RcdTBhZDBcdTBhZTAtXHUwYWUzXHUwYWU2LVx1MGFlZlx1MGIwMS1cdTBi
MDNcdTBiMDUtXHUwYjBjXHUwYjBmXHUwYjEwXHUwYjEzLVx1MGIyOFx1MGIyYS1cdTBiMzBcdTBi
MzJcdTBiMzNcdTBiMzUtXHUwYjM5XHUwYjNjLVx1MGI0NFx1MGI0N1x1MGI0OFx1MGI0Yi1cdTBi
NGRcdTBiNTZcdTBiNTdcdTBiNWNcdTBiNWRcdTBiNWYtXHUwYjYzXHUwYjY2LVx1MGI2Zlx1MGI3
MVx1MGI4Mlx1MGI4M1x1MGI4NS1cdTBiOGFcdTBiOGUtXHUwYjkwXHUwYjkyLVx1MGI5NVx1MGI5
OVx1MGI5YVx1MGI5Y1x1MGI5ZVx1MGI5Zlx1MGJhM1x1MGJhNFx1MGJhOC1cdTBiYWFcdTBiYWUt
XHUwYmI5XHUwYmJlLVx1MGJjMlx1MGJjNi1cdTBiYzhcdTBiY2EtXHUwYmNkXHUwYmQwXHUwYmQ3
XHUwYmU2LVx1MGJlZlx1MGMwMS1cdTBjMDNcdTBjMDUtXHUwYzBjXHUwYzBlLVx1MGMxMFx1MGMx
Mi1cdTBjMjhcdTBjMmEtXHUwYzMzXHUwYzM1LVx1MGMzOVx1MGMzZC1cdTBjNDRcdTBjNDYtXHUw
YzQ4XHUwYzRhLVx1MGM0ZFx1MGM1NVx1MGM1Nlx1MGM1OFx1MGM1OVx1MGM2MC1cdTBjNjNcdTBj
NjYtXHUwYzZmXHUwYzgyXHUwYzgzXHUwYzg1LVx1MGM4Y1x1MGM4ZS1cdTBjOTBcdTBjOTItXHUw
Y2E4XHUwY2FhLVx1MGNiM1x1MGNiNS1cdTBjYjlcdTBjYmMtXHUwY2M0XHUwY2M2LVx1MGNjOFx1
MGNjYS1cdTBjY2RcdTBjZDVcdTBjZDZcdTBjZGVcdTBjZTAtXHUwY2UzXHUwY2U2LVx1MGNlZlx1
MGNmMVx1MGNmMlx1MGQwMlx1MGQwM1x1MGQwNS1cdTBkMGNcdTBkMGUtXHUwZDEwXHUwZDEyLVx1
MGQzYVx1MGQzZC1cdTBkNDRcdTBkNDYtXHUwZDQ4XHUwZDRhLVx1MGQ0ZVx1MGQ1N1x1MGQ2MC1c
dTBkNjNcdTBkNjYtXHUwZDZmXHUwZDdhLVx1MGQ3Zlx1MGQ4Mlx1MGQ4M1x1MGQ4NS1cdTBkOTZc
dTBkOWEtXHUwZGIxXHUwZGIzLVx1MGRiYlx1MGRiZFx1MGRjMC1cdTBkYzZcdTBkY2FcdTBkY2Yt
XHUwZGQ0XHUwZGQ2XHUwZGQ4LVx1MGRkZlx1MGRmMlx1MGRmM1x1MGUwMS1cdTBlM2FcdTBlNDAt
XHUwZTRlXHUwZTUwLVx1MGU1OVx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4N1x1MGU4OFx1MGU4YVx1
MGU4ZFx1MGU5NC1cdTBlOTdcdTBlOTktXHUwZTlmXHUwZWExLVx1MGVhM1x1MGVhNVx1MGVhN1x1
MGVhYVx1MGVhYlx1MGVhZC1cdTBlYjlcdTBlYmItXHUwZWJkXHUwZWMwLVx1MGVjNFx1MGVjNlx1
MGVjOC1cdTBlY2RcdTBlZDAtXHUwZWQ5XHUwZWRjLVx1MGVkZlx1MGYwMFx1MGYxOFx1MGYxOVx1
MGYyMC1cdTBmMjlcdTBmMzVcdTBmMzdcdTBmMzlcdTBmM2UtXHUwZjQ3XHUwZjQ5LVx1MGY2Y1x1
MGY3MS1cdTBmODRcdTBmODYtXHUwZjk3XHUwZjk5LVx1MGZiY1x1MGZjNlx1MTAwMC1cdTEwNDlc
dTEwNTAtXHUxMDlkXHUxMGEwLVx1MTBjNVx1MTBjN1x1MTBjZFx1MTBkMC1cdTEwZmFcdTEwZmMt
XHUxMjQ4XHUxMjRhLVx1MTI0ZFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNWEtXHUxMjVkXHUxMjYw
LVx1MTI4OFx1MTI4YS1cdTEyOGRcdTEyOTAtXHUxMmIwXHUxMmIyLVx1MTJiNVx1MTJiOC1cdTEy
YmVcdTEyYzBcdTEyYzItXHUxMmM1XHUxMmM4LVx1MTJkNlx1MTJkOC1cdTEzMTBcdTEzMTItXHUx
MzE1XHUxMzE4LVx1MTM1YVx1MTM1ZC1cdTEzNWZcdTEzODAtXHUxMzhmXHUxM2EwLVx1MTNmNFx1
MTQwMS1cdTE2NmNcdTE2NmYtXHUxNjdmXHUxNjgxLVx1MTY5YVx1MTZhMC1cdTE2ZWFcdTE2ZWUt
XHUxNmYwXHUxNzAwLVx1MTcwY1x1MTcwZS1cdTE3MTRcdTE3MjAtXHUxNzM0XHUxNzQwLVx1MTc1
M1x1MTc2MC1cdTE3NmNcdTE3NmUtXHUxNzcwXHUxNzcyXHUxNzczXHUxNzgwLVx1MTdkM1x1MTdk
N1x1MTdkY1x1MTdkZFx1MTdlMC1cdTE3ZTlcdTE4MGItXHUxODBkXHUxODEwLVx1MTgxOVx1MTgy
MC1cdTE4NzdcdTE4ODAtXHUxOGFhXHUxOGIwLVx1MThmNVx1MTkwMC1cdTE5MWNcdTE5MjAtXHUx
OTJiXHUxOTMwLVx1MTkzYlx1MTk0Ni1cdTE5NmRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlhYlx1
MTliMC1cdTE5YzlcdTE5ZDAtXHUxOWQ5XHUxYTAwLVx1MWExYlx1MWEyMC1cdTFhNWVcdTFhNjAt
XHUxYTdjXHUxYTdmLVx1MWE4OVx1MWE5MC1cdTFhOTlcdTFhYTdcdTFiMDAtXHUxYjRiXHUxYjUw
LVx1MWI1OVx1MWI2Yi1cdTFiNzNcdTFiODAtXHUxYmYzXHUxYzAwLVx1MWMzN1x1MWM0MC1cdTFj
NDlcdTFjNGQtXHUxYzdkXHUxY2QwLVx1MWNkMlx1MWNkNC1cdTFjZjZcdTFkMDAtXHUxZGU2XHUx
ZGZjLVx1MWYxNVx1MWYxOC1cdTFmMWRcdTFmMjAtXHUxZjQ1XHUxZjQ4LVx1MWY0ZFx1MWY1MC1c
dTFmNTdcdTFmNTlcdTFmNWJcdTFmNWRcdTFmNWYtXHUxZjdkXHUxZjgwLVx1MWZiNFx1MWZiNi1c
dTFmYmNcdTFmYmVcdTFmYzItXHUxZmM0XHUxZmM2LVx1MWZjY1x1MWZkMC1cdTFmZDNcdTFmZDYt
XHUxZmRiXHUxZmUwLVx1MWZlY1x1MWZmMi1cdTFmZjRcdTFmZjYtXHUxZmZjXHUyMDBjXHUyMDBk
XHUyMDNmXHUyMDQwXHUyMDU0XHUyMDcxXHUyMDdmXHUyMDkwLVx1MjA5Y1x1MjBkMC1cdTIwZGNc
dTIwZTFcdTIwZTUtXHUyMGYwXHUyMTAyXHUyMTA3XHUyMTBhLVx1MjExM1x1MjExNVx1MjExOS1c
dTIxMWRcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMmEtXHUyMTJkXHUyMTJmLVx1MjEzOVx1MjEzYy1c
dTIxM2ZcdTIxNDUtXHUyMTQ5XHUyMTRlXHUyMTYwLVx1MjE4OFx1MmMwMC1cdTJjMmVcdTJjMzAt
XHUyYzVlXHUyYzYwLVx1MmNlNFx1MmNlYi1cdTJjZjNcdTJkMDAtXHUyZDI1XHUyZDI3XHUyZDJk
XHUyZDMwLVx1MmQ2N1x1MmQ2Zlx1MmQ3Zi1cdTJkOTZcdTJkYTAtXHUyZGE2XHUyZGE4LVx1MmRh
ZVx1MmRiMC1cdTJkYjZcdTJkYjgtXHUyZGJlXHUyZGMwLVx1MmRjNlx1MmRjOC1cdTJkY2VcdTJk
ZDAtXHUyZGQ2XHUyZGQ4LVx1MmRkZVx1MmRlMC1cdTJkZmZcdTJlMmZcdTMwMDUtXHUzMDA3XHUz
MDIxLVx1MzAyZlx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNjXHUzMDQxLVx1MzA5Nlx1MzA5OVx1
MzA5YVx1MzA5ZC1cdTMwOWZcdTMwYTEtXHUzMGZhXHUzMGZjLVx1MzBmZlx1MzEwNS1cdTMxMmRc
dTMxMzEtXHUzMThlXHUzMWEwLVx1MzFiYVx1MzFmMC1cdTMxZmZcdTM0MDAtXHU0ZGI1XHU0ZTAw
LVx1OWZjY1x1YTAwMC1cdWE0OGNcdWE0ZDAtXHVhNGZkXHVhNTAwLVx1YTYwY1x1YTYxMC1cdWE2
MmJcdWE2NDAtXHVhNjZmXHVhNjc0LVx1YTY3ZFx1YTY3Zi1cdWE2OTdcdWE2OWYtXHVhNmYxXHVh
NzE3LVx1YTcxZlx1YTcyMi1cdWE3ODhcdWE3OGItXHVhNzhlXHVhNzkwLVx1YTc5M1x1YTdhMC1c
dWE3YWFcdWE3ZjgtXHVhODI3XHVhODQwLVx1YTg3M1x1YTg4MC1cdWE4YzRcdWE4ZDAtXHVhOGQ5
XHVhOGUwLVx1YThmN1x1YThmYlx1YTkwMC1cdWE5MmRcdWE5MzAtXHVhOTUzXHVhOTYwLVx1YTk3
Y1x1YTk4MC1cdWE5YzBcdWE5Y2YtXHVhOWQ5XHVhYTAwLVx1YWEzNlx1YWE0MC1cdWFhNGRcdWFh
NTAtXHVhYTU5XHVhYTYwLVx1YWE3Nlx1YWE3YVx1YWE3Ylx1YWE4MC1cdWFhYzJcdWFhZGItXHVh
YWRkXHVhYWUwLVx1YWFlZlx1YWFmMi1cdWFhZjZcdWFiMDEtXHVhYjA2XHVhYjA5LVx1YWIwZVx1
YWIxMS1cdWFiMTZcdWFiMjAtXHVhYjI2XHVhYjI4LVx1YWIyZVx1YWJjMC1cdWFiZWFcdWFiZWNc
dWFiZWRcdWFiZjAtXHVhYmY5XHVhYzAwLVx1ZDdhM1x1ZDdiMC1cdWQ3YzZcdWQ3Y2ItXHVkN2Zi
XHVmOTAwLVx1ZmE2ZFx1ZmE3MC1cdWZhZDlcdWZiMDAtXHVmYjA2XHVmYjEzLVx1ZmIxN1x1ZmIx
ZC1cdWZiMjhcdWZiMmEtXHVmYjM2XHVmYjM4LVx1ZmIzY1x1ZmIzZVx1ZmI0MFx1ZmI0MVx1ZmI0
M1x1ZmI0NFx1ZmI0Ni1cdWZiYjFcdWZiZDMtXHVmZDNkXHVmZDUwLVx1ZmQ4Zlx1ZmQ5Mi1cdWZk
YzdcdWZkZjAtXHVmZGZiXHVmZTAwLVx1ZmUwZlx1ZmUyMC1cdWZlMjZcdWZlMzNcdWZlMzRcdWZl
NGQtXHVmZTRmXHVmZTcwLVx1ZmU3NFx1ZmU3Ni1cdWZlZmNcdWZmMTAtXHVmZjE5XHVmZjIxLVx1
ZmYzYVx1ZmYzZlx1ZmY0MS1cdWZmNWFcdWZmNjYtXHVmZmJlXHVmZmMyLVx1ZmZjN1x1ZmZjYS1c
dWZmY2ZcdWZmZDItXHVmZmQ3XHVmZmRhLVx1ZmZkY10nKQotICAgIH07Ci0KLSAgICBDYW5BY2Nl
c3NTdHJpbmdCeUluZGV4ID0gdHlwZW9mICdkb2N0cmluZSdbMF0gIT09IHVuZGVmaW5lZDsKLQot
ICAgIGZ1bmN0aW9uIHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIGxhc3QpIHsKLSAgICAgICAg
dmFyIG91dHB1dDsKLSAgICAgICAgaWYgKCFDYW5BY2Nlc3NTdHJpbmdCeUluZGV4KSB7Ci0gICAg
ICAgICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoaW5kZXgsIGxhc3QpLmpvaW4oJycpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgb3V0cHV0ID0gc291cmNlLnNsaWNlKGluZGV4LCBs
YXN0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gb3V0cHV0OwotICAgIH0KLQotICAgIGlz
QXJyYXkgPSBBcnJheS5pc0FycmF5OwotICAgIGlmICghaXNBcnJheSkgewotICAgICAgICBpc0Fy
cmF5ID0gZnVuY3Rpb24gaXNBcnJheShhcnkpIHsKLSAgICAgICAgICAgIHJldHVybiBPYmplY3Qu
cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJ5KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKLSAgICAg
ICAgfTsKLSAgICB9Ci0KLSAgICBoYXNPd25Qcm9wZXJ0eSA9IChmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgIHZhciBmdW5jID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTsKLSAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgbmFtZSkgewotICAgICAgICAgICAg
cmV0dXJuIGZ1bmMuY2FsbChvYmosIG5hbWUpOwotICAgICAgICB9OwotICAgIH0oKSk7Ci0KLSAg
ICBmdW5jdGlvbiBzaGFsbG93Q29weShvYmopIHsKLSAgICAgICAgdmFyIHJldCA9IHt9LCBrZXk7
Ci0gICAgICAgIGZvciAoa2V5IGluIG9iaikgewotICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Q
cm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAg
IGZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3IoY2gpIHsKLSAgICAgICAgcmV0dXJuIGNoID09PSAn
XG4nIHx8IGNoID09PSAnXHInIHx8IGNoID09PSAnXHUyMDI4JyB8fCBjaCA9PT0gJ1x1MjAyOSc7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7Ci0gICAgICAgIHJldHVy
biAoY2ggPT09ICcgJykgfHwgKGNoID09PSAnXHUwMDA5JykgfHwgKGNoID09PSAnXHUwMDBCJykg
fHwKLSAgICAgICAgICAgIChjaCA9PT0gJ1x1MDAwQycpIHx8IChjaCA9PT0gJ1x1MDBBMCcpIHx8
Ci0gICAgICAgICAgICAoY2guY2hhckNvZGVBdCgwKSA+PSAweDE2ODAgJiYKLSAgICAgICAgICAg
ICAnXHUxNjgwXHUxODBFXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzXHUyMDA0XHUyMDA1XHUyMDA2
XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBBXHUyMDJGXHUyMDVGXHUzMDAwXHVGRUZGJy5pbmRleE9m
KGNoKSA+PSAwKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChjaCkgewot
ICAgICAgICByZXR1cm4gJzAxMjM0NTY3ODknLmluZGV4T2YoY2gpID49IDA7Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gaXNIZXhEaWdpdChjaCkgewotICAgICAgICByZXR1cm4gJzAxMjM0NTY3ODlh
YmNkZWZBQkNERUYnLmluZGV4T2YoY2gpID49IDA7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNP
Y3RhbERpZ2l0KGNoKSB7Ci0gICAgICAgIHJldHVybiAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpID49
IDA7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNBU0NJSUFscGhhbnVtZXJpYyhjaCkgewotICAg
ICAgICByZXR1cm4gKGNoID49ICdhJyAmJiBjaCA8PSAneicpIHx8IChjaCA+PSAnQScgJiYgY2gg
PD0gJ1onKSB8fCAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jyk7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gaXNJZGVudGlmaWVyU3RhcnQoY2gpIHsKLSAgICAgICAgcmV0dXJuIChjaCA9PT0gJyQnKSB8
fCAoY2ggPT09ICdfJykgfHwgKGNoID09PSAnXFwnKSB8fAotICAgICAgICAgICAgKGNoID49ICdh
JyAmJiBjaCA8PSAneicpIHx8IChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8fAotICAgICAgICAg
ICAgKChjaC5jaGFyQ29kZUF0KDApID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmll
clN0YXJ0LnRlc3QoY2gpKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJQYXJ0
KGNoKSB7Ci0gICAgICAgIHJldHVybiAoY2ggPT09ICckJykgfHwgKGNoID09PSAnXycpIHx8IChj
aCA9PT0gJ1xcJykgfHwKLSAgICAgICAgICAgIChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fCAo
Y2ggPj0gJ0EnICYmIGNoIDw9ICdaJykgfHwKLSAgICAgICAgICAgICgoY2ggPj0gJzAnKSAmJiAo
Y2ggPD0gJzknKSkgfHwKLSAgICAgICAgICAgICgoY2guY2hhckNvZGVBdCgwKSA+PSAweDgwKSAm
JiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJQYXJ0LnRlc3QoY2gpKTsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiBpc1R5cGVOYW1lKGNoKSB7Ci0gICAgICAgIHJldHVybiAnPjwoKXt9W10sOip8PyE9
Jy5pbmRleE9mKGNoKSA9PT0gLTEgJiYgIWlzV2hpdGVTcGFjZShjaCkgJiYgIWlzTGluZVRlcm1p
bmF0b3IoY2gpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGlzUGFyYW1UaXRsZSh0aXRsZSkgewot
ICAgICAgICByZXR1cm4gdGl0bGUgPT09ICdwYXJhbScgfHwgdGl0bGUgPT09ICdhcmd1bWVudCcg
fHwgdGl0bGUgPT09ICdhcmcnOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGlzUHJvcGVydHkodGl0
bGUpIHsKLSAgICAgICAgcmV0dXJuIHRpdGxlID09PSAncHJvcGVydHknIHx8IHRpdGxlID09PSAn
cHJvcCc7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNOYW1lUGFyYW1ldGVyUmVxdWlyZWQodGl0
bGUpIHsKLSAgICAgICAgcmV0dXJuIGlzUGFyYW1UaXRsZSh0aXRsZSkgfHwgaXNQcm9wZXJ0eSh0
aXRsZSkgfHwKLSAgICAgICAgICAgIHRpdGxlID09PSAnYWxpYXMnIHx8IHRpdGxlID09PSAndGhp
cycgfHwgdGl0bGUgPT09ICdtaXhlcycgfHwgdGl0bGUgPT09ICdyZXF1aXJlcyc7Ci0gICAgfQot
Ci0gICAgZnVuY3Rpb24gaXNBbGxvd2VkTmFtZSh0aXRsZSkgewotICAgICAgICByZXR1cm4gaXNO
YW1lUGFyYW1ldGVyUmVxdWlyZWQodGl0bGUpIHx8IHRpdGxlID09PSAnY29uc3QnIHx8IHRpdGxl
ID09PSAnY29uc3RhbnQnOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGlzQWxsb3dlZE5lc3RlZCh0
aXRsZSkgewotICAgICAgICByZXR1cm4gaXNQcm9wZXJ0eSh0aXRsZSkgfHwgaXNQYXJhbVRpdGxl
KHRpdGxlKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0
aXRsZSkgewotICAgICAgICByZXR1cm4gaXNQYXJhbVRpdGxlKHRpdGxlKSB8fCB0aXRsZSA9PT0g
J2RlZmluZScgfHwgdGl0bGUgPT09ICdlbnVtJyB8fAotICAgICAgICAgICAgdGl0bGUgPT09ICdp
bXBsZW1lbnRzJyB8fCB0aXRsZSA9PT0gJ3JldHVybicgfHwKLSAgICAgICAgICAgIHRpdGxlID09
PSAndGhpcycgfHwgdGl0bGUgPT09ICd0eXBlJyB8fCB0aXRsZSA9PT0gJ3R5cGVkZWYnIHx8Ci0g
ICAgICAgICAgICB0aXRsZSA9PT0gJ3JldHVybnMnIHx8IGlzUHJvcGVydHkodGl0bGUpOwotICAg
IH0KLQotICAgIC8vIENvbnNpZGVyIGRlcHJlY2F0aW9uIGluc3RlYWQgdXNpbmcgJ2lzVHlwZVBh
cmFtZXRlclJlcXVpcmVkJyBhbmQgJ1J1bGVzJyBkZWNsYXJhdGlvbiB0byBwaWNrIHdoZW4gYSB0
eXBlIGlzIG9wdGlvbmFsL3JlcXVpcmVkCi0gICAgLy8gVGhpcyB3b3VsZCByZXF1aXJlIGNoYW5n
ZXMgdG8gJ3BhcnNlVHlwZScKLSAgICBmdW5jdGlvbiBpc0FsbG93ZWRUeXBlKHRpdGxlKSB7Ci0g
ICAgICAgIHJldHVybiBpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aXRsZSkgfHwgdGl0bGUgPT09
ICd0aHJvd3MnIHx8IHRpdGxlID09PSAnY29uc3QnIHx8IHRpdGxlID09PSAnY29uc3RhbnQnIHx8
Ci0gICAgICAgICAgICB0aXRsZSA9PT0gJ25hbWVzcGFjZScgfHwgdGl0bGUgPT09ICdtZW1iZXIn
IHx8IHRpdGxlID09PSAndmFyJyB8fCB0aXRsZSA9PT0gJ21vZHVsZScgfHwKLSAgICAgICAgICAg
IHRpdGxlID09PSAnY29uc3RydWN0b3InIHx8IHRpdGxlID09PSAnY2xhc3MnIHx8IHRpdGxlID09
PSAnZXh0ZW5kcycgfHwgdGl0bGUgPT09ICdhdWdtZW50cycgfHwKLSAgICAgICAgICAgIHRpdGxl
ID09PSAncHVibGljJyB8fCB0aXRsZSA9PT0gJ3ByaXZhdGUnIHx8IHRpdGxlID09PSAncHJvdGVj
dGVkJzsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBEb2N0cmluZUVycm9yKG1lc3NhZ2UpIHsKLSAg
ICAgICAgdGhpcy5uYW1lID0gJ0RvY3RyaW5lRXJyb3InOwotICAgICAgICB0aGlzLm1lc3NhZ2Ug
PSBtZXNzYWdlOwotICAgIH0KLSAgICBEb2N0cmluZUVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJv
cigpOwotICAgIERvY3RyaW5lRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG9jdHJpbmVF
cnJvcjsKLQotICAgIGZ1bmN0aW9uIHRocm93RXJyb3IobWVzc2FnZSkgewotICAgICAgICB0aHJv
dyBuZXcgRG9jdHJpbmVFcnJvcihtZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBhc3Nl
cnQoY29uZCwgdGV4dCkgewotICAgICAgICBpZiAoVkVSU0lPTi5zbGljZSgtMykgPT09ICdkZXYn
KSB7Ci0gICAgICAgICAgICBpZiAoIWNvbmQpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KHRleHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g
dHJpbShzdHIpIHsKLSAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXHMrLywgJycpLnJlcGxh
Y2UoL1xzKyQvLCAnJyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdW53cmFwQ29tbWVudChkb2Mp
IHsKLSAgICAgICAgLy8gSlNEb2MgY29tbWVudCBpcyBmb2xsb3dpbmcgZm9ybQotICAgICAgICAv
LyAgIC8qKgotICAgICAgICAvLyAgICAqIC4uLi4uLi4KLSAgICAgICAgLy8gICAgKi8KLSAgICAg
ICAgLy8gcmVtb3ZlIC8qKiwgKi8gYW5kICoKLSAgICAgICAgdmFyIEJFRk9SRV9TVEFSID0gMCwK
LSAgICAgICAgICAgIFNUQVIgPSAxLAotICAgICAgICAgICAgQUZURVJfU1RBUiA9IDIsCi0gICAg
ICAgICAgICBpbmRleCwKLSAgICAgICAgICAgIGxlbiwKLSAgICAgICAgICAgIG1vZGUsCi0gICAg
ICAgICAgICByZXN1bHQsCi0gICAgICAgICAgICBjaDsKLQotICAgICAgICBkb2MgPSBkb2MucmVw
bGFjZSgvXlwvXCpcKj8vLCAnJykucmVwbGFjZSgvXCpcLyQvLCAnJyk7Ci0gICAgICAgIGluZGV4
ID0gMDsKLSAgICAgICAgbGVuID0gZG9jLmxlbmd0aDsKLSAgICAgICAgbW9kZSA9IEJFRk9SRV9T
VEFSOwotICAgICAgICByZXN1bHQgPSAnJzsKLQotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW4p
IHsKLSAgICAgICAgICAgIGNoID0gZG9jW2luZGV4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobW9k
ZSkgewotICAgICAgICAgICAgY2FzZSBCRUZPUkVfU1RBUjoKLSAgICAgICAgICAgICAgICBpZiAo
aXNMaW5lVGVybWluYXRvcihjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNo
OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICcqJykgewotICAgICAgICAgICAg
ICAgICAgICBtb2RlID0gU1RBUjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1doaXRl
U3BhY2UoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjaDsKLSAgICAgICAg
ICAgICAgICAgICAgbW9kZSA9IEFGVEVSX1NUQVI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNUQVI6Ci0gICAgICAgICAgICAg
ICAgaWYgKCFpc1doaXRlU3BhY2UoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSBjaDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbW9kZSA9IGlzTGluZVRl
cm1pbmF0b3IoY2gpID8gQkVGT1JFX1NUQVIgOiBBRlRFUl9TVEFSOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEFGVEVSX1NUQVI6Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ICs9IGNoOwotICAgICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkg
ewotICAgICAgICAgICAgICAgICAgICBtb2RlID0gQkVGT1JFX1NUQVI7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aW5kZXggKz0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
Ci0gICAgLy8gVHlwZSBFeHByZXNzaW9uIFBhcnNlcgotCi0gICAgKGZ1bmN0aW9uIChleHBvcnRz
KSB7Ci0gICAgICAgIHZhciBTeW50YXgsCi0gICAgICAgICAgICBUb2tlbiwKLSAgICAgICAgICAg
IHNvdXJjZSwKLSAgICAgICAgICAgIGxlbmd0aCwKLSAgICAgICAgICAgIGluZGV4LAotICAgICAg
ICAgICAgcHJldmlvdXMsCi0gICAgICAgICAgICB0b2tlbiwKLSAgICAgICAgICAgIHZhbHVlOwot
Ci0gICAgICAgIFN5bnRheCA9IHsKLSAgICAgICAgICAgIE51bGxhYmxlTGl0ZXJhbDogJ051bGxh
YmxlTGl0ZXJhbCcsCi0gICAgICAgICAgICBBbGxMaXRlcmFsOiAnQWxsTGl0ZXJhbCcsCi0gICAg
ICAgICAgICBOdWxsTGl0ZXJhbDogJ051bGxMaXRlcmFsJywKLSAgICAgICAgICAgIFVuZGVmaW5l
ZExpdGVyYWw6ICdVbmRlZmluZWRMaXRlcmFsJywKLSAgICAgICAgICAgIFZvaWRMaXRlcmFsOiAn
Vm9pZExpdGVyYWwnLAotICAgICAgICAgICAgVW5pb25UeXBlOiAnVW5pb25UeXBlJywKLSAgICAg
ICAgICAgIEFycmF5VHlwZTogJ0FycmF5VHlwZScsCi0gICAgICAgICAgICBSZWNvcmRUeXBlOiAn
UmVjb3JkVHlwZScsCi0gICAgICAgICAgICBGaWVsZFR5cGU6ICdGaWVsZFR5cGUnLAotICAgICAg
ICAgICAgRnVuY3Rpb25UeXBlOiAnRnVuY3Rpb25UeXBlJywKLSAgICAgICAgICAgIFBhcmFtZXRl
clR5cGU6ICdQYXJhbWV0ZXJUeXBlJywKLSAgICAgICAgICAgIFJlc3RUeXBlOiAnUmVzdFR5cGUn
LAotICAgICAgICAgICAgTm9uTnVsbGFibGVUeXBlOiAnTm9uTnVsbGFibGVUeXBlJywKLSAgICAg
ICAgICAgIE9wdGlvbmFsVHlwZTogJ09wdGlvbmFsVHlwZScsCi0gICAgICAgICAgICBOdWxsYWJs
ZVR5cGU6ICdOdWxsYWJsZVR5cGUnLAotICAgICAgICAgICAgTmFtZUV4cHJlc3Npb246ICdOYW1l
RXhwcmVzc2lvbicsCi0gICAgICAgICAgICBUeXBlQXBwbGljYXRpb246ICdUeXBlQXBwbGljYXRp
b24nCi0gICAgICAgIH07Ci0KLSAgICAgICAgVG9rZW4gPSB7Ci0gICAgICAgICAgICBJTExFR0FM
OiAwLCAgICAvLyBJTExFR0FMCi0gICAgICAgICAgICBET1Q6IDEsICAgICAgICAvLyAuCi0gICAg
ICAgICAgICBET1RfTFQ6IDIsICAgICAvLyAuPAotICAgICAgICAgICAgUkVTVDogMywgICAgICAg
Ly8gLi4uCi0gICAgICAgICAgICBMVDogNCwgICAgICAgICAvLyA8Ci0gICAgICAgICAgICBHVDog
NSwgICAgICAgICAvLyA+Ci0gICAgICAgICAgICBMUEFSRU46IDYsICAgICAvLyAoCi0gICAgICAg
ICAgICBSUEFSRU46IDcsICAgICAvLyApCi0gICAgICAgICAgICBMQlJBQ0U6IDgsICAgICAvLyB7
Ci0gICAgICAgICAgICBSQlJBQ0U6IDksICAgICAvLyB9Ci0gICAgICAgICAgICBMQlJBQ0s6IDEw
LCAgICAvLyBbCi0gICAgICAgICAgICBSQlJBQ0s6IDExLCAgICAvLyBdCi0gICAgICAgICAgICBD
T01NQTogMTIsICAgICAvLyAsCi0gICAgICAgICAgICBDT0xPTjogMTMsICAgICAvLyA6Ci0gICAg
ICAgICAgICBTVEFSOiAxNCwgICAgICAvLyAqCi0gICAgICAgICAgICBQSVBFOiAxNSwgICAgICAv
LyB8Ci0gICAgICAgICAgICBRVUVTVElPTjogMTYsICAvLyA/Ci0gICAgICAgICAgICBCQU5HOiAx
NywgICAgICAvLyAhCi0gICAgICAgICAgICBFUVVBTDogMTgsICAgICAvLyA9Ci0gICAgICAgICAg
ICBOQU1FOiAxOSwgICAgICAvLyBuYW1lIHRva2VuCi0gICAgICAgICAgICBTVFJJTkc6IDIwLCAg
ICAvLyBzdHJpbmcKLSAgICAgICAgICAgIE5VTUJFUjogMjEsICAgIC8vIG51bWJlcgotICAgICAg
ICAgICAgRU9GOiAyMgotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIENvbnRleHQocHJl
dmlvdXMsIGluZGV4LCB0b2tlbiwgdmFsdWUpIHsKLSAgICAgICAgICAgIHRoaXMuX3ByZXZpb3Vz
ID0gcHJldmlvdXM7Ci0gICAgICAgICAgICB0aGlzLl9pbmRleCA9IGluZGV4OwotICAgICAgICAg
ICAgdGhpcy5fdG9rZW4gPSB0b2tlbjsKLSAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBDb250ZXh0LnByb3RvdHlwZS5yZXN0b3JlID0gZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgcHJldmlvdXMgPSB0aGlzLl9wcmV2aW91czsKLSAgICAgICAg
ICAgIGluZGV4ID0gdGhpcy5faW5kZXg7Ci0gICAgICAgICAgICB0b2tlbiA9IHRoaXMuX3Rva2Vu
OwotICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl92YWx1ZTsKLSAgICAgICAgfTsKLQotICAgICAg
ICBDb250ZXh0LnNhdmUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENv
bnRleHQocHJldmlvdXMsIGluZGV4LCB0b2tlbiwgdmFsdWUpOwotICAgICAgICB9OwotCi0gICAg
ICAgIGZ1bmN0aW9uIGFkdmFuY2UoKSB7Ci0gICAgICAgICAgICB2YXIgY2ggPSBzb3VyY2VbaW5k
ZXhdOwotICAgICAgICAgICAgaW5kZXggKz0gMTsKLSAgICAgICAgICAgIHJldHVybiBjaDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNjYW5IZXhFc2NhcGUocHJlZml4KSB7Ci0gICAg
ICAgICAgICB2YXIgaSwgbGVuLCBjaCwgY29kZSA9IDA7Ci0KLSAgICAgICAgICAgIGxlbiA9IChw
cmVmaXggPT09ICd1JykgPyA0IDogMjsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47
ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpc0hleERpZ2l0
KHNvdXJjZVtpbmRleF0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gYWR2YW5jZSgpOwot
ICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgJzAxMjM0NTY3ODlhYmNkZWYn
LmluZGV4T2YoY2gudG9Mb3dlckNhc2UoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICcnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gc2NhblN0cmluZygpIHsKLSAgICAgICAgICAgIHZh
ciBzdHIgPSAnJywgcXVvdGUsIGNoLCBjb2RlLCB1bmVzY2FwZWQsIHJlc3RvcmU7IC8vVE9ETyBy
ZXZpZXcgcmVtb3ZhbCBvY3RhbCA9IGZhbHNlCi0gICAgICAgICAgICBxdW90ZSA9IHNvdXJjZVtp
bmRleF07Ci0gICAgICAgICAgICArK2luZGV4OwotCi0gICAgICAgICAgICB3aGlsZSAoaW5kZXgg
PCBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBjaCA9IGFkdmFuY2UoKTsKLQotICAgICAgICAg
ICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcXVvdGUgPSAn
JzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChjaCA9PT0gJ1xcJykgewotICAgICAgICAgICAgICAgICAgICBjaCA9IGFkdmFuY2UoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpc0xpbmVUZXJtaW5hdG9yKGNoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcbic7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICdyJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xyJzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J3QnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHQnOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
dSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5lc2NhcGVkID0gc2NhbkhleEVzY2FwZShjaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHVuZXNjYXBlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIg
Kz0gdW5lc2NhcGVkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ2InOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAn
XGInOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnZic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdc
Zic7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICd2JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1x2
JzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNPY3Rh
bERpZ2l0KGNoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gJzAx
MjM0NTY3Jy5pbmRleE9mKGNoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVlbmNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIERlcHJlY2F0aW5nIHVudXNlZCBjb2RlLiBUT0RPIHJldmlldyByZW1vdmFs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKGNvZGUgIT09IDApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgb2N0YWwgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvL30KLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0p
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1RPRE8gUmV2aWV3IFJl
bW92YWwgb2N0YWwgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKGFkdmFuY2UoKSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93
ZWQgd2hlbiBzdHJpbmcgc3RhcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3aXRoIDAsIDEsIDIsIDMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgnMDEyMycuaW5kZXhPZihjaCkgPj0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleCA8IGxlbmd0aCAmJgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDgg
KyAnMDEyMzQ1NjcnLmluZGV4T2YoYWR2YW5jZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2Rl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoID09PSAgJ1xyJyAmJiBzb3VyY2VbaW5kZXhdID09PSAnXG4nKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNM
aW5lVGVybWluYXRvcihjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHF1b3RlICE9PSAn
JykgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgcXVvdGUnKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFsdWUgPSBzdHI7Ci0gICAgICAgICAgICByZXR1
cm4gVG9rZW4uU1RSSU5HOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gc2Nhbk51bWJl
cigpIHsKLSAgICAgICAgICAgIHZhciBudW1iZXIsIGNoOwotCi0gICAgICAgICAgICBudW1iZXIg
PSAnJzsKLSAgICAgICAgICAgIGlmIChjaCAhPT0gJy4nKSB7Ci0gICAgICAgICAgICAgICAgbnVt
YmVyID0gYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLQot
ICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09ICcwJykgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoY2ggPT09ICd4JyB8fCBjaCA9PT0gJ1gnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBudW1iZXIgKz0gYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlu
ZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2Vb
aW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNIZXhEaWdpdChjaCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBh
ZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChudW1iZXIubGVuZ3RoIDw9IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBvbmx5IDB4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcign
dW5leHBlY3RlZCB0b2tlbicpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBwYXJzZUludChudW1iZXIsIDE2KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBUb2tlbi5OVU1CRVI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0g
c291cmNlW2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2N0YWxE
aWdpdChjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bWJlciArPSBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY2gpIHx8IGlzRGVjaW1hbERpZ2l0KGNoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2Vu
Jyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludChudW1iZXIsIDgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuLk5VTUJFUjsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChj
aCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9r
ZW4nKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBj
aCA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNEZWNpbWFsRGln
aXQoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNoID09PSAnLicp
IHsKLSAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOwotICAgICAgICAgICAgICAg
IHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJj
ZVtpbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNEZWNpbWFsRGlnaXQoY2gpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNoID09PSAnZScgfHwgY2ggPT09
ICdFJykgewotICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7Ci0KLSAgICAgICAg
ICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09PSAn
KycgfHwgY2ggPT09ICctJykgewotICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5j
ZSgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2lu
ZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHdo
aWxlIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3Vy
Y2VbaW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0RlY2ltYWxEaWdpdChj
aCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgp
IHsKLSAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAgICAgICAgICAg
aWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQobnVtYmVyKTsKLSAgICAgICAgICAg
IHJldHVybiBUb2tlbi5OVU1CRVI7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIGZ1bmN0aW9uIHNj
YW5UeXBlTmFtZSgpIHsKLSAgICAgICAgICAgIHZhciBjaCwgY2gyOwotCi0gICAgICAgICAgICB2
YWx1ZSA9IGFkdmFuY2UoKTsKLSAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBp
c1R5cGVOYW1lKHNvdXJjZVtpbmRleF0pKSB7Ci0gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2Vb
aW5kZXhdOwotICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy4nKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICgoaW5kZXggKyAxKSA8IGxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgY2gyID0gc291cmNlW2luZGV4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y2gyID09PSAnPCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB2YWx1ZSArPSBhZHZhbmNlKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gVG9rZW4uTkFNRTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1
bmN0aW9uIG5leHQoKSB7Ci0gICAgICAgICAgICB2YXIgY2g7Ci0KLSAgICAgICAgICAgIHByZXZp
b3VzID0gaW5kZXg7Ci0KLSAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBpc1do
aXRlU3BhY2Uoc291cmNlW2luZGV4XSkpIHsKLSAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7Ci0gICAgICAg
ICAgICAgICAgdG9rZW4gPSBUb2tlbi5FT0Y7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2Vu
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAg
ICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgICAgICBjYXNlICciJzoKLSAgICAgICAgICAg
ICAgICB0b2tlbiA9IHNjYW5TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47
Ci0KLSAgICAgICAgICAgIGNhc2UgJzonOgotICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAg
ICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkNPTE9OOwotICAgICAgICAgICAgICAgIHJldHVy
biB0b2tlbjsKLQotICAgICAgICAgICAgY2FzZSAnLCc6Ci0gICAgICAgICAgICAgICAgYWR2YW5j
ZSgpOwotICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uQ09NTUE7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRva2VuOwotCi0gICAgICAgICAgICBjYXNlICcoJzoKLSAgICAgICAgICAgICAg
ICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5MUEFSRU47Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotCi0gICAgICAgICAgICBjYXNlICcpJzoKLSAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5SUEFS
RU47Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotCi0gICAgICAgICAgICBjYXNlICdb
JzoKLSAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBU
b2tlbi5MQlJBQ0s7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotCi0gICAgICAgICAg
ICBjYXNlICddJzoKLSAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAg
dG9rZW4gPSBUb2tlbi5SQlJBQ0s7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotCi0g
ICAgICAgICAgICBjYXNlICd7JzoKLSAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAg
ICAgICAgICAgdG9rZW4gPSBUb2tlbi5MQlJBQ0U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRv
a2VuOwotCi0gICAgICAgICAgICBjYXNlICd9JzoKLSAgICAgICAgICAgICAgICBhZHZhbmNlKCk7
Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5SQlJBQ0U7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRva2VuOwotCi0gICAgICAgICAgICBjYXNlICcuJzoKLSAgICAgICAgICAgICAgICBh
ZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNoID09PSAnPCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uRE9UX0xUOwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRva2VuOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGNoID09PSAnLicgJiYgaW5kZXggKyAxIDwgbGVuZ3RoICYmIHNvdXJj
ZVtpbmRleCArIDFdID09PSAnLicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2Uo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuID0gVG9rZW4uUkVTVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0b2tlbjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlm
IChpc0RlY2ltYWxEaWdpdChjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0g
c2Nhbk51bWJlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRv
a2VuID0gVG9rZW4uRE9UOwotICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKLQotICAgICAg
ICAgICAgY2FzZSAnPCc6Ci0gICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAg
ICAgIHRva2VuID0gVG9rZW4uTFQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotCi0g
ICAgICAgICAgICBjYXNlICc+JzoKLSAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAg
ICAgICAgICAgdG9rZW4gPSBUb2tlbi5HVDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47
Ci0KLSAgICAgICAgICAgIGNhc2UgJyonOgotICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAg
ICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlNUQVI7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRva2VuOwotCi0gICAgICAgICAgICBjYXNlICd8JzoKLSAgICAgICAgICAgICAgICBhZHZhbmNl
KCk7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5QSVBFOwotICAgICAgICAgICAgICAg
IHJldHVybiB0b2tlbjsKLQotICAgICAgICAgICAgY2FzZSAnPyc6Ci0gICAgICAgICAgICAgICAg
YWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUVVFU1RJT047Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotCi0gICAgICAgICAgICBjYXNlICchJzoKLSAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5CQU5H
OwotICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKLQotICAgICAgICAgICAgY2FzZSAnPSc6
Ci0gICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIHRva2VuID0gVG9r
ZW4uRVFVQUw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotCi0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChjaCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdG9rZW4gPSBzY2FuTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB0b2tlbjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyB0
eXBlIHN0cmluZyBwZXJtaXRzIGZvbGxvd2luZyBjYXNlLAotICAgICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAgICAgLy8gbmFtZXNwYWNlLm1vZHVsZS5NeUNsYXNzCi0gICAgICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgICAgICAvLyB0aGlzIHJlZHVjZWQgMSB0b2tlbiBUS19OQU1FCi0g
ICAgICAgICAgICAgICAgaWYgKGlzVHlwZU5hbWUoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRva2VuID0gc2NhblR5cGVOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tl
bjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLklM
TEVHQUw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY29uc3VtZSh0YXJnZXQsIHRleHQpIHsKLSAgICAg
ICAgICAgIGFzc2VydCh0b2tlbiA9PT0gdGFyZ2V0LCB0ZXh0IHx8ICdjb25zdW1lZCB0b2tlbiBu
b3QgbWF0Y2hlZCcpOwotICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZnVuY3Rpb24gZXhwZWN0KHRhcmdldCkgewotICAgICAgICAgICAgaWYgKHRva2VuICE9PSB0YXJn
ZXQpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBVbmlvblR5cGUgOj0gJygnIFR5cGVVbmlvbkxpc3QgJyknCi0gICAgICAgIC8vCi0gICAgICAg
IC8vIFR5cGVVbmlvbkxpc3QgOj0KLSAgICAgICAgLy8gICAgIDw8ZW1wdHk+PgotICAgICAgICAv
LyAgIHwgTm9uZW1wdHlUeXBlVW5pb25MaXN0Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIE5vbmVt
cHR5VHlwZVVuaW9uTGlzdCA6PQotICAgICAgICAvLyAgICAgVHlwZUV4cHJlc3Npb24KLSAgICAg
ICAgLy8gICB8IFR5cGVFeHByZXNzaW9uICd8JyBOb25lbXB0eVR5cGVVbmlvbkxpc3QKLSAgICAg
ICAgZnVuY3Rpb24gcGFyc2VVbmlvblR5cGUoKSB7Ci0gICAgICAgICAgICB2YXIgZWxlbWVudHM7
Ci0gICAgICAgICAgICBjb25zdW1lKFRva2VuLkxQQVJFTiwgJ1VuaW9uVHlwZSBzaG91bGQgc3Rh
cnQgd2l0aCAoJyk7Ci0gICAgICAgICAgICBlbGVtZW50cyA9IFtdOwotICAgICAgICAgICAgaWYg
KHRva2VuICE9PSBUb2tlbi5SUEFSRU4pIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkg
ewotICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVHlwZUV4cHJlc3Npb24o
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUlBBUkVOKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uUElQRSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uc3VtZShUb2tlbi5SUEFSRU4sICdVbmlvblR5
cGUgc2hvdWxkIGVuZCB3aXRoICknKTsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LlVuaW9uVHlwZSwKLSAgICAgICAgICAgICAgICBlbGVtZW50czog
ZWxlbWVudHMKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBcnJheVR5
cGUgOj0gJ1snIEVsZW1lbnRUeXBlTGlzdCAnXScKLSAgICAgICAgLy8KLSAgICAgICAgLy8gRWxl
bWVudFR5cGVMaXN0IDo9Ci0gICAgICAgIC8vICAgICA8PGVtcHR5Pj4KLSAgICAgICAgLy8gIHwg
VHlwZUV4cHJlc3Npb24KLSAgICAgICAgLy8gIHwgJy4uLicgVHlwZUV4cHJlc3Npb24KLSAgICAg
ICAgLy8gIHwgVHlwZUV4cHJlc3Npb24gJywnIEVsZW1lbnRUeXBlTGlzdAotICAgICAgICBmdW5j
dGlvbiBwYXJzZUFycmF5VHlwZSgpIHsKLSAgICAgICAgICAgIHZhciBlbGVtZW50czsKLSAgICAg
ICAgICAgIGNvbnN1bWUoVG9rZW4uTEJSQUNLLCAnQXJyYXlUeXBlIHNob3VsZCBzdGFydCB3aXRo
IFsnKTsKLSAgICAgICAgICAgIGVsZW1lbnRzID0gW107Ci0gICAgICAgICAgICB3aGlsZSAodG9r
ZW4gIT09IFRva2VuLlJCUkFDSykgewotICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9r
ZW4uUkVTVCkgewotICAgICAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLlJFU1QpOwotICAg
ICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGU6IFN5bnRheC5SZXN0VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Np
b246IHBhcnNlVHlwZUV4cHJlc3Npb24oKQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVR5cGVFeHByZXNzaW9uKCkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJCUkFDSykg
ewotICAgICAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uQ09NTUEpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV4cGVjdChUb2tlbi5SQlJBQ0spOwot
ICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQXJyYXlU
eXBlLAotICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cwotICAgICAgICAgICAgfTsK
LSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHBhcnNlRmllbGROYW1lKCkgewotICAgICAg
ICAgICAgdmFyIHYgPSB2YWx1ZTsKLSAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uTkFN
RSB8fCB0b2tlbiA9PT0gVG9rZW4uU1RSSU5HKSB7Ci0gICAgICAgICAgICAgICAgbmV4dCgpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB2OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAodG9rZW4gPT09IFRva2VuLk5VTUJFUikgewotICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9r
ZW4uTlVNQkVSKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHYpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBGaWVsZFR5cGUgOj0KLSAgICAgICAgLy8gICAgIEZpZWxkTmFt
ZQotICAgICAgICAvLyAgIHwgRmllbGROYW1lICc6JyBUeXBlRXhwcmVzc2lvbgotICAgICAgICAv
LwotICAgICAgICAvLyBGaWVsZE5hbWUgOj0KLSAgICAgICAgLy8gICAgIE5hbWVFeHByZXNzaW9u
Ci0gICAgICAgIC8vICAgfCBTdHJpbmdMaXRlcmFsCi0gICAgICAgIC8vICAgfCBOdW1iZXJMaXRl
cmFsCi0gICAgICAgIC8vICAgfCBSZXNlcnZlZElkZW50aWZpZXIKLSAgICAgICAgZnVuY3Rpb24g
cGFyc2VGaWVsZFR5cGUoKSB7Ci0gICAgICAgICAgICB2YXIga2V5OwotCi0gICAgICAgICAgICBr
ZXkgPSBwYXJzZUZpZWxkTmFtZSgpOwotICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5D
T0xPTikgewotICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQ09MT04pOwotICAgICAgICAg
ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5GaWVsZFR5
cGUsCi0gICAgICAgICAgICAgICAgICAgIGtleToga2V5LAotICAgICAgICAgICAgICAgICAgICB2
YWx1ZTogcGFyc2VUeXBlRXhwcmVzc2lvbigpCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4
LkZpZWxkVHlwZSwKLSAgICAgICAgICAgICAgICBrZXk6IGtleSwKLSAgICAgICAgICAgICAgICB2
YWx1ZTogbnVsbAotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlY29y
ZFR5cGUgOj0gJ3snIEZpZWxkVHlwZUxpc3QgJ30nCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEZp
ZWxkVHlwZUxpc3QgOj0KLSAgICAgICAgLy8gICAgIDw8ZW1wdHk+PgotICAgICAgICAvLyAgIHwg
RmllbGRUeXBlCi0gICAgICAgIC8vICAgfCBGaWVsZFR5cGUgJywnIEZpZWxkVHlwZUxpc3QKLSAg
ICAgICAgZnVuY3Rpb24gcGFyc2VSZWNvcmRUeXBlKCkgewotICAgICAgICAgICAgdmFyIGZpZWxk
czsKLQotICAgICAgICAgICAgY29uc3VtZShUb2tlbi5MQlJBQ0UsICdSZWNvcmRUeXBlIHNob3Vs
ZCBzdGFydCB3aXRoIHsnKTsKLSAgICAgICAgICAgIGZpZWxkcyA9IFtdOwotICAgICAgICAgICAg
aWYgKHRva2VuID09PSBUb2tlbi5DT01NQSkgewotICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9r
ZW4uQ09NTUEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAo
dG9rZW4gIT09IFRva2VuLlJCUkFDRSkgewotICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVz
aChwYXJzZUZpZWxkVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBU
b2tlbi5SQlJBQ0UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChUb2tlbi5DT01N
QSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBleHBlY3QoVG9rZW4uUkJSQUNFKTsKLSAgICAgICAgICAgIHJldHVy
biB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlJlY29yZFR5cGUsCi0gICAgICAgICAg
ICAgICAgZmllbGRzOiBmaWVsZHMKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAg
ICBmdW5jdGlvbiBwYXJzZU5hbWVFeHByZXNzaW9uKCkgewotICAgICAgICAgICAgdmFyIG5hbWUg
PSB2YWx1ZTsKLSAgICAgICAgICAgIGV4cGVjdChUb2tlbi5OQU1FKTsKLSAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5hbWVFeHByZXNzaW9uLAotICAg
ICAgICAgICAgICAgIG5hbWU6IG5hbWUKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBUeXBlRXhwcmVzc2lvbkxpc3QgOj0KLSAgICAgICAgLy8gICAgIFRvcExldmVsVHlw
ZUV4cHJlc3Npb24KLSAgICAgICAgLy8gICB8IFRvcExldmVsVHlwZUV4cHJlc3Npb24gJywnIFR5
cGVFeHByZXNzaW9uTGlzdAotICAgICAgICBmdW5jdGlvbiBwYXJzZVR5cGVFeHByZXNzaW9uTGlz
dCgpIHsKLSAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IFtdOwotCi0gICAgICAgICAgICBlbGVt
ZW50cy5wdXNoKHBhcnNlVG9wKCkpOwotICAgICAgICAgICAgd2hpbGUgKHRva2VuID09PSBUb2tl
bi5DT01NQSkgewotICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQ09NTUEpOwotICAgICAg
ICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUb3AoKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gZWxlbWVudHM7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUeXBlTmFt
ZSA6PQotICAgICAgICAvLyAgICAgTmFtZUV4cHJlc3Npb24KLSAgICAgICAgLy8gICB8IE5hbWVF
eHByZXNzaW9uIFR5cGVBcHBsaWNhdGlvbgotICAgICAgICAvLwotICAgICAgICAvLyBUeXBlQXBw
bGljYXRpb24gOj0KLSAgICAgICAgLy8gICAgICcuPCcgVHlwZUV4cHJlc3Npb25MaXN0ICc+Jwot
ICAgICAgICAvLyAgIHwgJzwnIFR5cGVFeHByZXNzaW9uTGlzdCAnPicgICAvLyB0aGlzIGlzIGV4
dGVuc2lvbiBvZiBkb2N0cmluZQotICAgICAgICBmdW5jdGlvbiBwYXJzZVR5cGVOYW1lKCkgewot
ICAgICAgICAgICAgdmFyIGV4cHIsIGFwcGxpY2F0aW9uczsKLQotICAgICAgICAgICAgZXhwciA9
IHBhcnNlTmFtZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4u
RE9UX0xUIHx8IHRva2VuID09PSBUb2tlbi5MVCkgewotICAgICAgICAgICAgICAgIG5leHQoKTsK
LSAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMgPSBwYXJzZVR5cGVFeHByZXNzaW9uTGlzdCgp
OwotICAgICAgICAgICAgICAgIGV4cGVjdChUb2tlbi5HVCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlR5cGVBcHBsaWNhdGlvbiwK
LSAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwciwKLSAgICAgICAgICAgICAgICAg
ICAgYXBwbGljYXRpb25zOiBhcHBsaWNhdGlvbnMKLSAgICAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBSZXN1bHRUeXBlIDo9Ci0gICAgICAgIC8vICAgICA8PGVtcHR5Pj4KLSAgICAgICAgLy8gICB8
ICc6JyB2b2lkCi0gICAgICAgIC8vICAgfCAnOicgVHlwZUV4cHJlc3Npb24KLSAgICAgICAgLy8K
LSAgICAgICAgLy8gQk5GIGlzIGFib3ZlCi0gICAgICAgIC8vIGJ1dCwgd2UgcmVtb3ZlIDw8ZW1w
dHk+PiBwYXR0ZXJuLCBzbyB0b2tlbiBpcyBhbHdheXMgVHlwZVRva2VuOjpDT0xPTgotICAgICAg
ICBmdW5jdGlvbiBwYXJzZVJlc3VsdFR5cGUoKSB7Ci0gICAgICAgICAgICBjb25zdW1lKFRva2Vu
LkNPTE9OLCAnUmVzdWx0VHlwZSBzaG91bGQgc3RhcnQgd2l0aCA6Jyk7Ci0gICAgICAgICAgICBp
ZiAodG9rZW4gPT09IFRva2VuLk5BTUUgJiYgdmFsdWUgPT09ICd2b2lkJykgewotICAgICAgICAg
ICAgICAgIGNvbnN1bWUoVG9rZW4uTkFNRSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAg
ICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlZvaWRMaXRlcmFsCi0gICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVFeHByZXNz
aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQYXJhbWV0ZXJzVHlwZSA6PQotICAgICAg
ICAvLyAgICAgUmVzdFBhcmFtZXRlclR5cGUKLSAgICAgICAgLy8gICB8IE5vblJlc3RQYXJhbWV0
ZXJzVHlwZQotICAgICAgICAvLyAgIHwgTm9uUmVzdFBhcmFtZXRlcnNUeXBlICcsJyBSZXN0UGFy
YW1ldGVyVHlwZQotICAgICAgICAvLwotICAgICAgICAvLyBSZXN0UGFyYW1ldGVyVHlwZSA6PQot
ICAgICAgICAvLyAgICAgJy4uLicKLSAgICAgICAgLy8gICAgICcuLi4nIElkZW50aWZpZXIKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gTm9uUmVzdFBhcmFtZXRlcnNUeXBlIDo9Ci0gICAgICAgIC8v
ICAgICBQYXJhbWV0ZXJUeXBlICcsJyBOb25SZXN0UGFyYW1ldGVyc1R5cGUKLSAgICAgICAgLy8g
ICB8IFBhcmFtZXRlclR5cGUKLSAgICAgICAgLy8gICB8IE9wdGlvbmFsUGFyYW1ldGVyc1R5cGUK
LSAgICAgICAgLy8KLSAgICAgICAgLy8gT3B0aW9uYWxQYXJhbWV0ZXJzVHlwZSA6PQotICAgICAg
ICAvLyAgICAgT3B0aW9uYWxQYXJhbWV0ZXJUeXBlCi0gICAgICAgIC8vICAgfCBPcHRpb25hbFBh
cmFtZXRlclR5cGUsIE9wdGlvbmFsUGFyYW1ldGVyc1R5cGUKLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gT3B0aW9uYWxQYXJhbWV0ZXJUeXBlIDo9IFBhcmFtZXRlclR5cGU9Ci0gICAgICAgIC8vCi0g
ICAgICAgIC8vIFBhcmFtZXRlclR5cGUgOj0gVHlwZUV4cHJlc3Npb24gfCBJZGVudGlmaWVyICc6
JyBUeXBlRXhwcmVzc2lvbgotICAgICAgICAvLwotICAgICAgICAvLyBJZGVudGlmaWVyIGlzICJu
ZXciIG9yICJ0aGlzIgotICAgICAgICBmdW5jdGlvbiBwYXJzZVBhcmFtZXRlcnNUeXBlKCkgewot
ICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtdLCBub3JtYWwgPSB0cnVlLCBleHByLCByZXN0ID0g
ZmFsc2U7Ci0KLSAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPT0gVG9rZW4uUlBBUkVOKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5SRVNUKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIFJlc3RQYXJhbWV0ZXJUeXBlCi0gICAgICAgICAgICAgICAgICAgIGNvbnN1bWUo
VG9rZW4uUkVTVCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3QgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGV4cHIgPSBwYXJzZVR5cGVFeHByZXNzaW9uKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4Lk5hbWVFeHByZXNzaW9u
ICYmIHRva2VuID09PSBUb2tlbi5DT0xPTikgewotICAgICAgICAgICAgICAgICAgICAvLyBJZGVu
dGlmaWVyICc6JyBUeXBlRXhwcmVzc2lvbgotICAgICAgICAgICAgICAgICAgICBjb25zdW1lKFRv
a2VuLkNPTE9OKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwciA9IHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5QYXJhbWV0ZXJUeXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZTogZXhwci5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lv
bjogcGFyc2VUeXBlRXhwcmVzc2lvbigpCi0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uRVFVQUwpIHsK
LSAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5FUVVBTCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGV4cHIgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguT3B0
aW9uYWxUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcgotICAg
ICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBub3JtYWwgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vcm1h
bCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tl
bicpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmIChyZXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUmVzdFR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBleHByZXNzaW9uOiBleHByCi0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGV4cHIpOwotICAgICAgICAg
ICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUlBBUkVOKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGV4cGVjdChUb2tlbi5DT01NQSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIHBhcmFtczsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZ1bmN0
aW9uVHlwZSA6PSAnZnVuY3Rpb24nIEZ1bmN0aW9uU2lnbmF0dXJlVHlwZQotICAgICAgICAvLwot
ICAgICAgICAvLyBGdW5jdGlvblNpZ25hdHVyZVR5cGUgOj0KLSAgICAgICAgLy8gICB8IFR5cGVQ
YXJhbWV0ZXJzICcoJyAnKScgUmVzdWx0VHlwZQotICAgICAgICAvLyAgIHwgVHlwZVBhcmFtZXRl
cnMgJygnIFBhcmFtZXRlcnNUeXBlICcpJyBSZXN1bHRUeXBlCi0gICAgICAgIC8vICAgfCBUeXBl
UGFyYW1ldGVycyAnKCcgJ3RoaXMnICc6JyBUeXBlTmFtZSAnKScgUmVzdWx0VHlwZQotICAgICAg
ICAvLyAgIHwgVHlwZVBhcmFtZXRlcnMgJygnICd0aGlzJyAnOicgVHlwZU5hbWUgJywnIFBhcmFt
ZXRlcnNUeXBlICcpJyBSZXN1bHRUeXBlCi0gICAgICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25U
eXBlKCkgewotICAgICAgICAgICAgdmFyIGlzTmV3LCB0aGlzQmluZGluZywgcGFyYW1zLCByZXN1
bHQsIGZuVHlwZTsKLSAgICAgICAgICAgIGFzc2VydCh0b2tlbiA9PT0gVG9rZW4uTkFNRSAmJiB2
YWx1ZSA9PT0gJ2Z1bmN0aW9uJywgJ0Z1bmN0aW9uVHlwZSBzaG91bGQgc3RhcnQgd2l0aCBcJ2Z1
bmN0aW9uXCcnKTsKLSAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTkFNRSk7Ci0KLSAgICAgICAg
ICAgIC8vIEdvb2dsZSBDbG9zdXJlIENvbXBpbGVyIGlzIG5vdCBpbXBsZW1lbnRpbmcgVHlwZVBh
cmFtZXRlcnMuCi0gICAgICAgICAgICAvLyBTbyB3ZSBkbyBub3QuIGlmIHdlIGRvbid0IGdldCAn
KCcsIHdlIHNlZSBpdCBhcyBlcnJvci4KLSAgICAgICAgICAgIGV4cGVjdChUb2tlbi5MUEFSRU4p
OwotCi0gICAgICAgICAgICBpc05ldyA9IGZhbHNlOwotICAgICAgICAgICAgcGFyYW1zID0gW107
Ci0gICAgICAgICAgICB0aGlzQmluZGluZyA9IG51bGw7Ci0gICAgICAgICAgICBpZiAodG9rZW4g
IT09IFRva2VuLlJQQVJFTikgewotICAgICAgICAgICAgICAgIC8vIFBhcmFtZXRlcnNUeXBlIG9y
ICd0aGlzJwotICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uTkFNRSAmJgotICAg
ICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID09PSAndGhpcycgfHwgdmFsdWUgPT09ICduZXcn
KSkgewotICAgICAgICAgICAgICAgICAgICAvLyAndGhpcycgb3IgJ25ldycKLSAgICAgICAgICAg
ICAgICAgICAgLy8gJ25ldycgaXMgQ2xvc3VyZSBDb21waWxlciBleHRlbnNpb24KLSAgICAgICAg
ICAgICAgICAgICAgaXNOZXcgPSB2YWx1ZSA9PT0gJ25ldyc7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnN1bWUoVG9rZW4uTkFNRSk7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChUb2tlbi5D
T0xPTik7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXNCaW5kaW5nID0gcGFyc2VUeXBlTmFtZSgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkNPTU1BKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkNPTU1BKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1ldGVyc1R5cGUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBh
cmFtcyA9IHBhcnNlUGFyYW1ldGVyc1R5cGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGV4cGVjdChUb2tlbi5SUEFSRU4pOwotCi0gICAgICAgICAg
ICByZXN1bHQgPSBudWxsOwotICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5DT0xPTikg
ewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlUmVzdWx0VHlwZSgpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBmblR5cGUgPSB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LkZ1bmN0aW9uVHlwZSwKLSAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKLSAgICAg
ICAgICAgICAgICByZXN1bHQ6IHJlc3VsdAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGlm
ICh0aGlzQmluZGluZykgewotICAgICAgICAgICAgICAgIC8vIGF2b2lkIGFkZGluZyBudWxsICdu
ZXcnIGFuZCAndGhpcycgcHJvcGVydGllcwotICAgICAgICAgICAgICAgIGZuVHlwZVsndGhpcydd
ID0gdGhpc0JpbmRpbmc7Ci0gICAgICAgICAgICAgICAgaWYgKGlzTmV3KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZuVHlwZVsnbmV3J10gPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmblR5cGU7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBCYXNpY1R5cGVFeHByZXNzaW9uIDo9Ci0gICAgICAgIC8vICAgICAnKicKLSAgICAgICAg
Ly8gICB8ICdudWxsJwotICAgICAgICAvLyAgIHwgJ3VuZGVmaW5lZCcKLSAgICAgICAgLy8gICB8
IFR5cGVOYW1lCi0gICAgICAgIC8vICAgfCBGdW5jdGlvblR5cGUKLSAgICAgICAgLy8gICB8IFVu
aW9uVHlwZQotICAgICAgICAvLyAgIHwgUmVjb3JkVHlwZQotICAgICAgICAvLyAgIHwgQXJyYXlU
eXBlCi0gICAgICAgIGZ1bmN0aW9uIHBhcnNlQmFzaWNUeXBlRXhwcmVzc2lvbigpIHsKLSAgICAg
ICAgICAgIHZhciBjb250ZXh0OwotICAgICAgICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
ICAgICAgY2FzZSBUb2tlbi5TVEFSOgotICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uU1RB
Uik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LkFsbExpdGVyYWwKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBjYXNl
IFRva2VuLkxQQVJFTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VVbmlvblR5cGUoKTsK
LQotICAgICAgICAgICAgY2FzZSBUb2tlbi5MQlJBQ0s6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHBhcnNlQXJyYXlUeXBlKCk7Ci0KLSAgICAgICAgICAgIGNhc2UgVG9rZW4uTEJSQUNFOgotICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJzZVJlY29yZFR5cGUoKTsKLQotICAgICAgICAgICAgY2Fz
ZSBUb2tlbi5OQU1FOgotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ251bGwnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTkFNRSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTnVsbExp
dGVyYWwKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAodmFsdWUgPT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnN1bWUoVG9rZW4uTkFNRSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVW5kZWZpbmVkTGl0ZXJhbAotICAg
ICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGNvbnRleHQgPSBDb250ZXh0LnNhdmUoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09
ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uVHlwZSgpOwotICAgICAgICAgICAgICAgICAg
ICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlc3RvcmUo
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJzZVR5cGVOYW1lKCk7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVHlwZUV4cHJlc3Npb24gOj0KLSAgICAgICAg
Ly8gICAgIEJhc2ljVHlwZUV4cHJlc3Npb24KLSAgICAgICAgLy8gICB8ICc/JyBCYXNpY1R5cGVF
eHByZXNzaW9uCi0gICAgICAgIC8vICAgfCAnIScgQmFzaWNUeXBlRXhwcmVzc2lvbgotICAgICAg
ICAvLyAgIHwgQmFzaWNUeXBlRXhwcmVzc2lvbiAnPycKLSAgICAgICAgLy8gICB8IEJhc2ljVHlw
ZUV4cHJlc3Npb24gJyEnCi0gICAgICAgIC8vICAgfCAnPycKLSAgICAgICAgLy8gICB8IEJhc2lj
VHlwZUV4cHJlc3Npb24gJ1tdJwotICAgICAgICBmdW5jdGlvbiBwYXJzZVR5cGVFeHByZXNzaW9u
KCkgewotICAgICAgICAgICAgdmFyIGV4cHI7Ci0KLSAgICAgICAgICAgIGlmICh0b2tlbiA9PT0g
VG9rZW4uUVVFU1RJT04pIHsKLSAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLlFVRVNUSU9O
KTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkNPTU1BIHx8IHRva2VuID09
PSBUb2tlbi5FUVVBTCB8fCB0b2tlbiA9PT0gVG9rZW4uUkJSQUNFIHx8Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbiA9PT0gVG9rZW4uUlBBUkVOIHx8IHRva2VuID09PSBUb2tlbi5QSVBF
IHx8IHRva2VuID09PSBUb2tlbi5FT0YgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
ID09PSBUb2tlbi5SQlJBQ0spIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxsYWJsZUxpdGVyYWwKLSAgICAgICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk51bGxhYmxlVHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcGFyc2VCYXNpY1R5cGVFeHByZXNzaW9uKCksCi0g
ICAgICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZQotICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQkFORykgewotICAg
ICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQkFORyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5vbk51bGxhYmxlVHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcGFyc2VCYXNpY1R5cGVFeHByZXNzaW9uKCks
Ci0gICAgICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZQotICAgICAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGV4cHIgPSBwYXJzZUJhc2ljVHlwZUV4cHJlc3Np
b24oKTsKLSAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQkFORykgewotICAgICAgICAg
ICAgICAgIGNvbnN1bWUoVG9rZW4uQkFORyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAg
ICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5vbk51bGxhYmxlVHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwciwKLSAgICAgICAgICAgICAgICAgICAgcHJlZml4
OiBmYWxzZQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICh0b2tlbiA9PT0gVG9rZW4uUVVFU1RJT04pIHsKLSAgICAgICAgICAgICAgICBjb25zdW1l
KFRva2VuLlFVRVNUSU9OKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguTnVsbGFibGVUeXBlLAotICAgICAgICAgICAgICAgICAgICBl
eHByZXNzaW9uOiBleHByLAotICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IGZhbHNlCi0gICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRva2VuID09
PSBUb2tlbi5MQlJBQ0spIHsKLSAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkxCUkFDSyk7
Ci0gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5SQlJBQ0ssICdleHBlY3RlZCBhbiBhcnJh
eS1zdHlsZSB0eXBlIGRlY2xhcmF0aW9uICgnICsgdmFsdWUgKyAnW10pJyk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlR5cGVBcHBs
aWNhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogewotICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5hbWVFeHByZXNzaW9uLAotICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZTogJ0FycmF5JwotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgICAgICAgICBhcHBsaWNhdGlvbnM6IFtleHByXQotICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBleHByOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gVG9wTGV2ZWxUeXBlRXhwcmVzc2lvbiA6PQotICAgICAgICAvLyAgICAgIFR5cGVFeHBy
ZXNzaW9uCi0gICAgICAgIC8vICAgIHwgVHlwZVVuaW9uTGlzdAotICAgICAgICAvLwotICAgICAg
ICAvLyBUaGlzIHJ1bGUgaXMgR29vZ2xlIENsb3N1cmUgQ29tcGlsZXIgZXh0ZW5zaW9uLCBub3Qg
RVM0Ci0gICAgICAgIC8vIGxpa2UsCi0gICAgICAgIC8vICAgeyBudW1iZXIgfCBzdHJpbmcgfQot
ICAgICAgICAvLyBJZiBzdHJpY3QgdG8gRVM0LCB3ZSBzaG91bGQgd3JpdGUgaXQgYXMKLSAgICAg
ICAgLy8gICB7IChudW1iZXJ8c3RyaW5nKSB9Ci0gICAgICAgIGZ1bmN0aW9uIHBhcnNlVG9wKCkg
ewotICAgICAgICAgICAgdmFyIGV4cHIsIGVsZW1lbnRzOwotCi0gICAgICAgICAgICBleHByID0g
cGFyc2VUeXBlRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5Q
SVBFKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGVsZW1lbnRzID0gWyBleHByIF07Ci0gICAgICAgICAgICBjb25zdW1lKFRva2Vu
LlBJUEUpOwotICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICBlbGVt
ZW50cy5wdXNoKHBhcnNlVHlwZUV4cHJlc3Npb24oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRv
a2VuICE9PSBUb2tlbi5QSVBFKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLlBJUEUpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5
bnRheC5VbmlvblR5cGUsCi0gICAgICAgICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRzCi0gICAg
ICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcGFyc2VUb3BQYXJhbVR5
cGUoKSB7Ci0gICAgICAgICAgICB2YXIgZXhwcjsKLQotICAgICAgICAgICAgaWYgKHRva2VuID09
PSBUb2tlbi5SRVNUKSB7Ci0gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5SRVNUKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
UmVzdFR5cGUsCi0gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlVG9wKCkKLSAg
ICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBleHByID0gcGFy
c2VUb3AoKTsKLSAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uRVFVQUwpIHsKLSAgICAg
ICAgICAgICAgICBjb25zdW1lKFRva2VuLkVRVUFMKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ewotICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguT3B0aW9uYWxUeXBlLAotICAgICAg
ICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByCi0gICAgICAgICAgICAgICAgfTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmdW5jdGlvbiBwYXJzZVR5cGUoc3JjLCBvcHQpIHsKLSAgICAgICAgICAgIHZhciBleHByOwot
Ci0gICAgICAgICAgICBzb3VyY2UgPSBzcmM7Ci0gICAgICAgICAgICBsZW5ndGggPSBzb3VyY2Uu
bGVuZ3RoOwotICAgICAgICAgICAgaW5kZXggPSAwOwotICAgICAgICAgICAgcHJldmlvdXMgPSAw
OwotCi0gICAgICAgICAgICBpZiAoIUNhbkFjY2Vzc1N0cmluZ0J5SW5kZXgpIHsKLSAgICAgICAg
ICAgICAgICBzb3VyY2UgPSBzb3VyY2Uuc3BsaXQoJycpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBuZXh0KCk7Ci0gICAgICAgICAgICBleHByID0gcGFyc2VUb3AoKTsKLQotICAgICAg
ICAgICAgaWYgKG9wdCAmJiBvcHQubWlkc3RyZWFtKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHsKLSAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwciwKLSAgICAgICAgICAgICAg
ICAgICAgaW5kZXg6IHByZXZpb3VzCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5FT0YpIHsKLSAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yKCdub3QgcmVhY2ggdG8gRU9GJyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHJldHVybiBleHByOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcGFyc2VQ
YXJhbVR5cGUoc3JjLCBvcHQpIHsKLSAgICAgICAgICAgIHZhciBleHByOwotCi0gICAgICAgICAg
ICBzb3VyY2UgPSBzcmM7Ci0gICAgICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOwotICAg
ICAgICAgICAgaW5kZXggPSAwOwotICAgICAgICAgICAgcHJldmlvdXMgPSAwOwotCi0gICAgICAg
ICAgICBpZiAoIUNhbkFjY2Vzc1N0cmluZ0J5SW5kZXgpIHsKLSAgICAgICAgICAgICAgICBzb3Vy
Y2UgPSBzb3VyY2Uuc3BsaXQoJycpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuZXh0
KCk7Ci0gICAgICAgICAgICBleHByID0gcGFyc2VUb3BQYXJhbVR5cGUoKTsKLQotICAgICAgICAg
ICAgaWYgKG9wdCAmJiBvcHQubWlkc3RyZWFtKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwciwKLSAgICAgICAgICAgICAgICAg
ICAgaW5kZXg6IHByZXZpb3VzCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5FT0YpIHsKLSAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yKCdub3QgcmVhY2ggdG8gRU9GJyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHJldHVybiBleHByOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gc3RyaW5naWZ5
SW1wbChub2RlLCBjb21wYWN0LCB0b3BMZXZlbCkgewotICAgICAgICAgICAgdmFyIHJlc3VsdCwg
aSwgaXo7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIFN5bnRheC5OdWxsYWJsZUxpdGVyYWw6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gJz8n
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFN5bnRheC5BbGxM
aXRlcmFsOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9ICcqJzsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBTeW50YXguTnVsbExpdGVyYWw6Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gJ251bGwnOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIFN5bnRheC5VbmRlZmluZWRMaXRlcmFsOgotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9ICd1bmRlZmluZWQnOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBj
YXNlIFN5bnRheC5Wb2lkTGl0ZXJhbDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAndm9pZCc7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU3ludGF4LlVuaW9u
VHlwZToKLSAgICAgICAgICAgICAgICBpZiAoIXRvcExldmVsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9ICcoJzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSAnJzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUuZWxlbWVudHMubGVuZ3RoOyBpIDwgaXo7ICsraSkgewot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLmVsZW1lbnRz
W2ldLCBjb21wYWN0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChpICsgMSkgIT09IGl6KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3wnOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCF0b3BMZXZl
bCkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyknOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTeW50YXguQXJy
YXlUeXBlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9ICdbJzsKLSAgICAgICAgICAgICAgICBm
b3IgKGkgPSAwLCBpeiA9IG5vZGUuZWxlbWVudHMubGVuZ3RoOyBpIDwgaXo7ICsraSkgewotICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLmVsZW1lbnRzW2ld
LCBjb21wYWN0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChpICsgMSkgIT09IGl6KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGFjdCA/ICcsJyA6ICcsICc7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ICs9ICddJzsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2Fz
ZSBTeW50YXguUmVjb3JkVHlwZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAneyc7Ci0gICAg
ICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmZpZWxkcy5sZW5ndGg7IGkgPCBpejsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdpZnlJbXBsKG5vZGUu
ZmllbGRzW2ldLCBjb21wYWN0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChpICsgMSkgIT09
IGl6KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGFjdCA/ICcsJyA6
ICcsICc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0ICs9ICd9JzsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgY2FzZSBTeW50YXguRmllbGRUeXBlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnZh
bHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5vZGUua2V5ICsgKGNvbXBhY3Qg
PyAnOicgOiAnOiAnKSArIHN0cmluZ2lmeUltcGwobm9kZS52YWx1ZSwgY29tcGFjdCk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS5r
ZXk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIFN5bnRheC5GdW5jdGlvblR5cGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0g
Y29tcGFjdCA/ICdmdW5jdGlvbignIDogJ2Z1bmN0aW9uICgnOwotCi0gICAgICAgICAgICAgICAg
aWYgKG5vZGVbJ3RoaXMnXSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZVsnbmV3J10p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoY29tcGFjdCA/ICduZXc6JyA6
ICduZXc6ICcpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9IChjb21wYWN0ID8gJ3RoaXM6JyA6ICd0aGlzOiAnKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdp
ZnlJbXBsKG5vZGVbJ3RoaXMnXSwgY29tcGFjdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUucGFyYW1zLmxlbmd0aCAhPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ICs9IGNvbXBhY3QgPyAnLCcgOiAnLCAnOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLnBh
cmFtcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSBzdHJpbmdpZnlJbXBsKG5vZGUucGFyYW1zW2ldLCBjb21wYWN0KTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKChpICsgMSkgIT09IGl6KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgKz0gY29tcGFjdCA/ICcsJyA6ICcsICc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyknOwotCi0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUucmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSAoY29tcGFjdCA/ICc6JyA6ICc6ICcpICsgc3RyaW5naWZ5SW1wbChub2RlLnJlc3VsdCwgY29t
cGFjdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgICAgICBjYXNlIFN5bnRheC5QYXJhbWV0ZXJUeXBlOgotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG5vZGUubmFtZSArIChjb21wYWN0ID8gJzonIDogJzogJykgKyBzdHJpbmdpZnlJbXBsKG5v
ZGUuZXhwcmVzc2lvbiwgY29tcGFjdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGNhc2UgU3ludGF4LlJlc3RUeXBlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9ICcu
Li4nOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmV4cHJlc3Npb24pIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIGNhc2UgU3ludGF4Lk5vbk51bGxhYmxlVHlwZToKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS5wcmVmaXgpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJyEnICsgc3RyaW5naWZ5
SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNz
aW9uLCBjb21wYWN0KSArICchJzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU3ludGF4Lk9wdGlvbmFsVHlwZToKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCkg
KyAnPSc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU3ludGF4
Lk51bGxhYmxlVHlwZToKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5wcmVmaXgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gJz8nICsgc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Np
b24sIGNvbXBhY3QpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KSArICc/
JzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIGNhc2UgU3ludGF4Lk5hbWVFeHByZXNzaW9uOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG5vZGUubmFtZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBT
eW50YXguVHlwZUFwcGxpY2F0aW9uOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0cmluZ2lm
eUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KSArICcuPCc7Ci0gICAgICAgICAgICAgICAg
Zm9yIChpID0gMCwgaXogPSBub2RlLmFwcGxpY2F0aW9ucy5sZW5ndGg7IGkgPCBpejsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdpZnlJbXBsKG5vZGUuYXBwbGlj
YXRpb25zW2ldLCBjb21wYWN0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChpICsgMSkgIT09
IGl6KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGFjdCA/ICcsJyA6
ICcsICc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0ICs9ICc+JzsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCdVbmtub3duIHR5cGUg
JyArIG5vZGUudHlwZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzdHJpbmdpZnkobm9kZSwgb3B0aW9u
cykgewotICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAg
IG9wdGlvbnMgPSB7fTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdp
ZnlJbXBsKG5vZGUsIG9wdGlvbnMuY29tcGFjdCwgb3B0aW9ucy50b3BMZXZlbCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBleHBvcnRzLnBhcnNlVHlwZSA9IHBhcnNlVHlwZTsKLSAgICAgICAgZXhw
b3J0cy5wYXJzZVBhcmFtVHlwZSA9IHBhcnNlUGFyYW1UeXBlOwotICAgICAgICBleHBvcnRzLnN0
cmluZ2lmeSA9IHN0cmluZ2lmeTsKLSAgICAgICAgZXhwb3J0cy5TeW50YXggPSBTeW50YXg7Ci0g
ICAgfSh0eXBlZCA9IHt9KSk7Ci0KLSAgICAvLyBKU0RvYyBUYWcgUGFyc2VyCi0KLSAgICAoZnVu
Y3Rpb24gKGV4cG9ydHMpIHsKLSAgICAgICAgdmFyIFJ1bGVzLAotICAgICAgICAgICAgaW5kZXgs
Ci0gICAgICAgICAgICBsaW5lTnVtYmVyLAotICAgICAgICAgICAgbGVuZ3RoLAotICAgICAgICAg
ICAgc291cmNlLAotICAgICAgICAgICAgcmVjb3ZlcmFibGUsCi0gICAgICAgICAgICBzbG9wcHks
Ci0gICAgICAgICAgICBzdHJpY3Q7Ci0KLSAgICAgICAgZnVuY3Rpb24gYWR2YW5jZSgpIHsKLSAg
ICAgICAgICAgIHZhciBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAgICAgICBpbmRleCArPSAx
OwotICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7Ci0gICAgICAgICAgICAg
ICAgbGluZU51bWJlciArPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGNo
OwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gc2NhblRpdGxlKCkgewotICAgICAgICAg
ICAgdmFyIHRpdGxlID0gJyc7Ci0gICAgICAgICAgICAvLyB3YXN0ZSAnQCcKLSAgICAgICAgICAg
IGFkdmFuY2UoKTsKLQotICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIGlzQVND
SUlBbHBoYW51bWVyaWMoc291cmNlW2luZGV4XSkpIHsKLSAgICAgICAgICAgICAgICB0aXRsZSAr
PSBhZHZhbmNlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0aXRsZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNlZWtDb250ZW50KCkgewotICAgICAgICAg
ICAgdmFyIGNoLCB3YWl0aW5nLCBsYXN0ID0gaW5kZXg7Ci0KLSAgICAgICAgICAgIHdhaXRpbmcg
PSBmYWxzZTsKLSAgICAgICAgICAgIHdoaWxlIChsYXN0IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgY2ggPSBzb3VyY2VbbGFzdF07Ci0gICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1p
bmF0b3IoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMTsKLSAgICAg
ICAgICAgICAgICAgICAgd2FpdGluZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICh3YWl0aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ0AnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWlzV2hpdGVTcGFjZShjaCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHdhaXRpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBsYXN0ICs9IDE7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gbGFzdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHR5cGUgZXhwcmVz
c2lvbiBtYXkgaGF2ZSBuZXN0IGJyYWNlLCBzdWNoIGFzLAotICAgICAgICAvLyB7IHsgb2s6IHN0
cmluZyB9IH0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gdGhlcmVmb3JlLCBzY2FubmluZyB0eXBl
IGV4cHJlc3Npb24gd2l0aCBiYWxhbmNpbmcgYnJhY2VzLgotICAgICAgICBmdW5jdGlvbiBwYXJz
ZVR5cGUodGl0bGUsIGxhc3QpIHsKLSAgICAgICAgICAgIHZhciBjaCwgYnJhY2UsIHR5cGUsIGRp
cmVjdCA9IGZhbHNlOwotCi0gICAgICAgICAgICAvLyBzZWFyY2ggJ3snCi0gICAgICAgICAgICB3
aGlsZSAoaW5kZXggPCBsYXN0KSB7Ci0gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhd
OwotICAgICAgICAgICAgICAgIGlmIChpc1doaXRlU3BhY2UoY2gpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAneycp
IHsKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyB0
aGlzIGlzIGRpcmVjdCBwYXR0ZXJuCi0gICAgICAgICAgICAgICAgICAgIGRpcmVjdCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKCFkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAvLyB0
eXBlIGV4cHJlc3Npb24geyBpcyBmb3VuZAotICAgICAgICAgICAgICAgIGJyYWNlID0gMTsKLSAg
ICAgICAgICAgICAgICB0eXBlID0gJyc7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwg
bGFzdCkgewotICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnfScpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmFjZSAtPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicmFj
ZSA9PT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICd7
JykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlICs9IDE7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlICs9IGFkdmFuY2Uo
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmIChicmFjZSAhPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAvLyBicmFjZXMg
aXMgbm90IGJhbGFuY2VkCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdC
cmFjZXMgYXJlIG5vdCBiYWxhbmNlZCcpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1BhcmFtVGl0bGUodGl0bGUp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZWQucGFyc2VQYXJhbVR5cGUo
dHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHR5cGVkLnBhcnNlVHlwZSh0eXBlKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChlMSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZSBmYWlsZWQKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGZ1bmN0aW9uIHNjYW5JZGVudGlmaWVyKGxhc3QpIHsKLSAgICAgICAgICAgIHZhciBp
ZGVudGlmaWVyOwotICAgICAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJTdGFydChzb3VyY2VbaW5k
ZXhdKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWRlbnRpZmllciA9IGFkdmFuY2UoKTsKLSAgICAgICAgICAgIHdoaWxlIChpbmRl
eCA8IGxhc3QgJiYgaXNJZGVudGlmaWVyUGFydChzb3VyY2VbaW5kZXhdKSkgewotICAgICAgICAg
ICAgICAgIGlkZW50aWZpZXIgKz0gYWR2YW5jZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIGlkZW50aWZpZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBza2lw
V2hpdGVTcGFjZShsYXN0KSB7Ci0gICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsYXN0ICYmIChp
c1doaXRlU3BhY2Uoc291cmNlW2luZGV4XSkgfHwgaXNMaW5lVGVybWluYXRvcihzb3VyY2VbaW5k
ZXhdKSkpIHsKLSAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBwYXJzZU5hbWUobGFzdCwgYWxsb3dCcmFja2V0cywg
YWxsb3dOZXN0ZWRQYXJhbXMpIHsKLSAgICAgICAgICAgIHZhciBuYW1lID0gJycsIHVzZUJyYWNr
ZXRzOwotCi0gICAgICAgICAgICBza2lwV2hpdGVTcGFjZShsYXN0KTsKLQotICAgICAgICAgICAg
aWYgKGluZGV4ID49IGxhc3QpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGFsbG93QnJhY2tldHMgJiYgc291cmNlW2luZGV4
XSA9PT0gJ1snKSB7Ci0gICAgICAgICAgICAgICAgdXNlQnJhY2tldHMgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIG5hbWUgPSBhZHZhbmNlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICghaXNJZGVudGlmaWVyU3RhcnQoc291cmNlW2luZGV4XSkpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbmFtZSArPSBzY2Fu
SWRlbnRpZmllcihsYXN0KTsKLQotICAgICAgICAgICAgaWYgKGFsbG93TmVzdGVkUGFyYW1zKSB7
Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHNvdXJjZVtpbmRleF0gPT09ICcuJykgewotICAgICAg
ICAgICAgICAgICAgICBuYW1lICs9ICcuJzsKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0g
MTsKLSAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBzY2FuSWRlbnRpZmllcihsYXN0KTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh1c2VCcmFj
a2V0cykgewotICAgICAgICAgICAgICAgIC8vIGRvIHdlIGhhdmUgYSBkZWZhdWx0IHZhbHVlIGZv
ciB0aGlzPwotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAnPScpIHsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyBjb25zdW1lIHRoZSAnPScnIHN5bWJvbAotICAgICAgICAg
ICAgICAgICAgICBuYW1lICs9IGFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gc2Nh
biBpbiB0aGUgZGVmYXVsdCB2YWx1ZQotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXgg
PCBsYXN0ICYmIHNvdXJjZVtpbmRleF0gIT09ICddJykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZSArPSBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gbGFzdCAgfHwgc291cmNlW2lu
ZGV4XSAhPT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdlIG5ldmVyIGZvdW5kIGEg
Y2xvc2luZyAnXScKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gY29sbGVjdCB0aGUgbGFzdCAnXScKLSAgICAg
ICAgICAgICAgICBuYW1lICs9IGFkdmFuY2UoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuIG5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBza2lwVG9UYWco
KSB7Ci0gICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgc291cmNlW2luZGV4XSAh
PT0gJ0AnKSB7Ci0gICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgewotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydChzb3VyY2VbaW5kZXhdID09
PSAnQCcpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBUYWdQYXJzZXIob3B0aW9ucywgdGl0bGUpIHsKLSAgICAgICAgICAgIHRoaXMuX29w
dGlvbnMgPSBvcHRpb25zOwotICAgICAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTsKLSAgICAg
ICAgICAgIHRoaXMuX3RhZyA9IHsKLSAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsCi0gICAg
ICAgICAgICAgICAgZGVzY3JpcHRpb246IG51bGwKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAg
ICBpZiAodGhpcy5fb3B0aW9ucy5saW5lTnVtYmVycykgewotICAgICAgICAgICAgICAgIHRoaXMu
X3RhZy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHRoaXMuX2xhc3QgPSAwOwotICAgICAgICAgICAgLy8gc3BhY2UgdG8gc2F2ZSBzcGVjaWFsIGlu
Zm9ybWF0aW9uIGZvciB0aXRsZSBwYXJzZXJzLgotICAgICAgICAgICAgdGhpcy5fZXh0cmEgPSB7
IH07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBhZGRFcnJvcihlcnIsIC4uLikKLSAgICAgICAg
VGFnUGFyc2VyLnByb3RvdHlwZS5hZGRFcnJvciA9IGZ1bmN0aW9uIGFkZEVycm9yKGVycm9yVGV4
dCkgewotICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChh
cmd1bWVudHMsIDEpLAotICAgICAgICAgICAgICAgIG1zZyA9IGVycm9yVGV4dC5yZXBsYWNlKAot
ICAgICAgICAgICAgICAgICAgICAvJShcZCkvZywKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24gKHdob2xlLCBpbmRleCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGluZGV4
IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlJyk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1tpbmRleF07Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICApOwotCi0gICAgICAgICAgICBpZiAoIXRoaXMuX3Rh
Zy5lcnJvcnMpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl90YWcuZXJyb3JzID0gW107Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3RyaWN0KSB7Ci0gICAgICAgICAgICAgICAgdGhy
b3dFcnJvcihtc2cpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5fdGFnLmVycm9y
cy5wdXNoKG1zZyk7Ci0gICAgICAgICAgICByZXR1cm4gcmVjb3ZlcmFibGU7Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZVR5cGUgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgICAgICAvLyB0eXBlIHJlcXVpcmVkIHRpdGxlcwotICAgICAgICAgICAgaWYgKGlz
VHlwZVBhcmFtZXRlclJlcXVpcmVkKHRoaXMuX3RpdGxlKSkgewotICAgICAgICAgICAgICAgIHRy
eSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhZy50eXBlID0gcGFyc2VUeXBlKHRoaXMu
X3RpdGxlLCB0aGlzLl9sYXN0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl90YWcu
dHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1BhcmFtVGl0bGUodGhpcy5f
dGl0bGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9y
KCdNaXNzaW5nIG9yIGludmFsaWQgdGFnIHR5cGUnKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFn
LnR5cGUgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoZXJy
b3IubWVzc2FnZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaXNBbGxvd2VkVHlwZSh0aGlzLl90aXRsZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBv
cHRpb25hbCB0eXBlcwotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMuX3RhZy50eXBlID0gcGFyc2VUeXBlKHRoaXMuX3RpdGxlLCB0aGlzLl9sYXN0KTsKLSAg
ICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vRm9yIG9w
dGlvbmFsIHR5cGVzLCBsZXRzIGRyb3AgdGhlIHRocm93biBlcnJvciB3aGVuIHdlIGhpdCB0aGUg
ZW5kIG9mIHRoZSBmaWxlCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgVGFnUGFyc2VyLnByb3Rv
dHlwZS5fcGFyc2VOYW1lUGF0aCA9IGZ1bmN0aW9uIChvcHRpb25hbCkgewotICAgICAgICAgICAg
dmFyIG5hbWU7Ci0gICAgICAgICAgICBuYW1lID0gcGFyc2VOYW1lKHRoaXMuX2xhc3QsIHNsb3Bw
eSAmJiBpc1BhcmFtVGl0bGUodGhpcy5fdGl0bGUpLCB0cnVlKTsKLSAgICAgICAgICAgIGlmICgh
bmFtZSkgewotICAgICAgICAgICAgICAgIGlmICghb3B0aW9uYWwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgdGFnIG5hbWUnKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhp
cy5fdGFnLm5hbWUgPSBuYW1lOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZU5hbWVQYXRoID0gZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlTmFtZVBhdGgoZmFsc2UpOwotICAg
ICAgICB9OwotCi0gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VOYW1lUGF0aE9wdGlv
bmFsID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlTmFtZVBh
dGgodHJ1ZSk7Ci0gICAgICAgIH07Ci0KLQotICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBh
cnNlTmFtZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBhc3NpZ24sIG5hbWU7Ci0K
LSAgICAgICAgICAgIC8vIHBhcmFtLCBwcm9wZXJ0eSByZXF1aXJlcyBuYW1lCi0gICAgICAgICAg
ICBpZiAoaXNBbGxvd2VkTmFtZSh0aGlzLl90aXRsZSkpIHsKLSAgICAgICAgICAgICAgICB0aGlz
Ll90YWcubmFtZSA9IHBhcnNlTmFtZSh0aGlzLl9sYXN0LCBzbG9wcHkgJiYgaXNQYXJhbVRpdGxl
KHRoaXMuX3RpdGxlKSwgaXNBbGxvd2VkTmVzdGVkKHRoaXMuX3RpdGxlKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCF0aGlzLl90YWcubmFtZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
TmFtZVBhcmFtZXRlclJlcXVpcmVkKHRoaXMuX3RpdGxlKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoZSBuYW1lIGhhcyBhbHJlYWR5IGJlZW4gcGFyc2Vk
IGJ1dCBpbnRlcnByZXRlZCBhcyBhIHR5cGUKLSAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBh
bHNvIHBvc3NpYmxlIHRoaXMgaXMgYSBzbG9wcHkgZGVjbGFyYXRpb24sIGluIHdoaWNoIGNhc2Ug
aXQgd2lsbCBiZQotICAgICAgICAgICAgICAgICAgICAvLyBmaXhlZCBhdCB0aGUgZW5kCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChpc1BhcmFtVGl0bGUodGhpcy5fdGl0bGUpICYmIHRoaXMuX3Rh
Zy50eXBlLm5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V4dHJhLm5hbWUg
PSB0aGlzLl90YWcudHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhZy5uYW1l
ID0gdGhpcy5fdGFnLnR5cGUubmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rh
Zy50eXBlID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyBu
YW1lJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5fdGFnLm5hbWU7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gJ1snICYmIG5hbWUu
Y2hhckF0KG5hbWUubGVuZ3RoIC0gMSkgPT09ICddJykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gZXh0cmFjdCB0aGUgZGVmYXVsdCB2YWx1ZSBpZiB0aGVyZSBpcyBvbmUKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6IEBwYXJhbSB7c3RyaW5nfSBbc29tZWJvZHk9Sm9o
biBEb2VdIGRlc2NyaXB0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ24gPSBuYW1l
LnN1YnN0cmluZygxLCBuYW1lLmxlbmd0aCAtIDEpLnNwbGl0KCc9Jyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYXNzaWduWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5fdGFnWydkZWZhdWx0J10gPSBhc3NpZ25bMV07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcubmFtZSA9IGFzc2lnblswXTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCB0byBhbiBvcHRpb25hbCB0eXBl
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFnLnR5cGUudHlwZSAhPT0gJ09w
dGlvbmFsVHlwZScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlw
ZSA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ09wdGlvbmFsVHlw
ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHRoaXMuX3Rh
Zy50eXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZURlc2NyaXB0aW9uID0gZnVuY3Rpb24gcGFyc2VE
ZXNjcmlwdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IHRyaW0oc2xpY2VT
b3VyY2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpOwotICAgICAgICAgICAgaWYgKGRlc2Ny
aXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgvXi1ccysvKS50ZXN0KGRlc2NyaXB0aW9u
KSkgewotICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLnN1YnN0
cmluZygyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5fdGFnLmRl
c2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfTsKLQotICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNl
S2luZCA9IGZ1bmN0aW9uIHBhcnNlS2luZCgpIHsKLSAgICAgICAgICAgIHZhciBraW5kLCBraW5k
czsKLSAgICAgICAgICAgIGtpbmRzID0gewotICAgICAgICAgICAgICAgICdjbGFzcyc6IHRydWUs
Ci0gICAgICAgICAgICAgICAgJ2NvbnN0YW50JzogdHJ1ZSwKLSAgICAgICAgICAgICAgICAnZXZl
bnQnOiB0cnVlLAotICAgICAgICAgICAgICAgICdleHRlcm5hbCc6IHRydWUsCi0gICAgICAgICAg
ICAgICAgJ2ZpbGUnOiB0cnVlLAotICAgICAgICAgICAgICAgICdmdW5jdGlvbic6IHRydWUsCi0g
ICAgICAgICAgICAgICAgJ21lbWJlcic6IHRydWUsCi0gICAgICAgICAgICAgICAgJ21peGluJzog
dHJ1ZSwKLSAgICAgICAgICAgICAgICAnbW9kdWxlJzogdHJ1ZSwKLSAgICAgICAgICAgICAgICAn
bmFtZXNwYWNlJzogdHJ1ZSwKLSAgICAgICAgICAgICAgICAndHlwZWRlZic6IHRydWUKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICBraW5kID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2UsIGlu
ZGV4LCB0aGlzLl9sYXN0KSk7Ci0gICAgICAgICAgICB0aGlzLl90YWcua2luZCA9IGtpbmQ7Ci0g
ICAgICAgICAgICBpZiAoIWhhc093blByb3BlcnR5KGtpbmRzLCBraW5kKSkgewotICAgICAgICAg
ICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignSW52YWxpZCBraW5kIG5hbWUgXCclMFwnJywga2lu
ZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Owot
Ci0gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VBY2Nlc3MgPSBmdW5jdGlvbiBwYXJz
ZUFjY2VzcygpIHsKLSAgICAgICAgICAgIHZhciBhY2Nlc3M7Ci0gICAgICAgICAgICBhY2Nlc3Mg
PSB0cmltKHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTsKLSAgICAgICAg
ICAgIHRoaXMuX3RhZy5hY2Nlc3MgPSBhY2Nlc3M7Ci0gICAgICAgICAgICBpZiAoYWNjZXNzICE9
PSAncHJpdmF0ZScgJiYgYWNjZXNzICE9PSAncHJvdGVjdGVkJyAmJiBhY2Nlc3MgIT09ICdwdWJs
aWMnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdJbnZhbGlkIGFjY2Vz
cyBuYW1lIFwnJTBcJycsIGFjY2VzcykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9OwotCi0gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VW
YXJpYXRpb24gPSBmdW5jdGlvbiBwYXJzZVZhcmlhdGlvbigpIHsKLSAgICAgICAgICAgIHZhciB2
YXJpYXRpb24sIHRleHQ7Ci0gICAgICAgICAgICB0ZXh0ID0gdHJpbShzbGljZVNvdXJjZShzb3Vy
Y2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7Ci0gICAgICAgICAgICB2YXJpYXRpb24gPSBwYXJzZUZs
b2F0KHRleHQsIDEwKTsKLSAgICAgICAgICAgIHRoaXMuX3RhZy52YXJpYXRpb24gPSB2YXJpYXRp
b247Ci0gICAgICAgICAgICBpZiAoaXNOYU4odmFyaWF0aW9uKSkgewotICAgICAgICAgICAgICAg
IGlmICghdGhpcy5hZGRFcnJvcignSW52YWxpZCB2YXJpYXRpb24gXCclMFwnJywgdGV4dCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9OwotCi0gICAg
ICAgIFRhZ1BhcnNlci5wcm90b3R5cGUuZW5zdXJlRW5kID0gZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgdmFyIHNob3VsZEJlRW1wdHkgPSB0cmltKHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgs
IHRoaXMuX2xhc3QpKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRCZUVtcHR5KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdVbmtub3duIGNvbnRlbnQgXCclMFwnJywgc2hv
dWxkQmVFbXB0eSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9OwotCi0gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUuZXBpbG9ndWUgPSBmdW5jdGlv
biBlcGlsb2d1ZSgpIHsKLSAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbjsKLQotICAgICAgICAg
ICAgZGVzY3JpcHRpb24gPSB0aGlzLl90YWcuZGVzY3JpcHRpb247Ci0gICAgICAgICAgICAvLyB1
bi1maXggcG90ZW50aWFsbHkgc2xvcHB5IGRlY2xhcmF0aW9uCi0gICAgICAgICAgICBpZiAoaXNQ
YXJhbVRpdGxlKHRoaXMuX3RpdGxlKSAmJiAhdGhpcy5fdGFnLnR5cGUgJiYgZGVzY3JpcHRpb24g
JiYgZGVzY3JpcHRpb24uY2hhckF0KDApID09PSAnWycpIHsKLSAgICAgICAgICAgICAgICB0aGlz
Ll90YWcudHlwZSA9IHRoaXMuX2V4dHJhLm5hbWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdGFn
Lm5hbWUgPSB1bmRlZmluZWQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXNsb3BweSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCB0
YWcgbmFtZScpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9OwotCi0gICAgICAgIFJ1bGVzID0gewot
ICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWFjY2Vzcy5odG1sCi0gICAg
ICAgICAgICAnYWNjZXNzJzogWydwYXJzZUFjY2VzcyddLAotICAgICAgICAgICAgLy8gaHR0cDov
L3VzZWpzZG9jLm9yZy90YWdzLWFsaWFzLmh0bWwKLSAgICAgICAgICAgICdhbGlhcyc6IFsncGFy
c2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2Rv
Yy5vcmcvdGFncy1hdWdtZW50cy5odG1sCi0gICAgICAgICAgICAnYXVnbWVudHMnOiBbJ3BhcnNl
VHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCi0gICAgICAgICAg
ICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtY29uc3RydWN0b3IuaHRtbAotICAgICAgICAg
ICAgJ2NvbnN0cnVjdG9yJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywg
J2Vuc3VyZUVuZCddLAotICAgICAgICAgICAgLy8gU3lub255bTogaHR0cDovL3VzZWpzZG9jLm9y
Zy90YWdzLWNvbnN0cnVjdG9yLmh0bWwKLSAgICAgICAgICAgICdjbGFzcyc6IFsncGFyc2VUeXBl
JywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKLSAgICAgICAgICAgIC8v
IFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1leHRlbmRzLmh0bWwKLSAgICAgICAg
ICAgICdleHRlbmRzJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vu
c3VyZUVuZCddLAotICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWRlcHJl
Y2F0ZWQuaHRtbAotICAgICAgICAgICAgJ2RlcHJlY2F0ZWQnOiBbJ3BhcnNlRGVzY3JpcHRpb24n
XSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1nbG9iYWwuaHRtbAot
ICAgICAgICAgICAgJ2dsb2JhbCc6IFsnZW5zdXJlRW5kJ10sCi0gICAgICAgICAgICAvLyBodHRw
Oi8vdXNlanNkb2Mub3JnL3RhZ3MtaW5uZXIuaHRtbAotICAgICAgICAgICAgJ2lubmVyJzogWydl
bnN1cmVFbmQnXSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1pbnN0
YW5jZS5odG1sCi0gICAgICAgICAgICAnaW5zdGFuY2UnOiBbJ2Vuc3VyZUVuZCddLAotICAgICAg
ICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWtpbmQuaHRtbAotICAgICAgICAgICAg
J2tpbmQnOiBbJ3BhcnNlS2luZCddLAotICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9y
Zy90YWdzLW1peGVzLmh0bWwKLSAgICAgICAgICAgICdtaXhlcyc6IFsncGFyc2VOYW1lUGF0aCcs
ICdlbnN1cmVFbmQnXSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1t
aXhpbi5odG1sCi0gICAgICAgICAgICAnbWl4aW4nOiBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcs
ICdlbnN1cmVFbmQnXSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1t
ZW1iZXIuaHRtbAotICAgICAgICAgICAgJ21lbWJlcic6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFt
ZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vq
c2RvYy5vcmcvdGFncy1tZXRob2QuaHRtbAotICAgICAgICAgICAgJ21ldGhvZCc6IFsncGFyc2VO
YW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAotICAgICAgICAgICAgLy8gaHR0cDovL3Vz
ZWpzZG9jLm9yZy90YWdzLW1vZHVsZS5odG1sCi0gICAgICAgICAgICAnbW9kdWxlJzogWydwYXJz
ZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAotICAgICAgICAg
ICAgLy8gU3lub255bTogaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLW1ldGhvZC5odG1sCi0gICAg
ICAgICAgICAnZnVuYyc6IFsncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAot
ICAgICAgICAgICAgLy8gU3lub255bTogaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLW1ldGhvZC5o
dG1sCi0gICAgICAgICAgICAnZnVuY3Rpb24nOiBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdl
bnN1cmVFbmQnXSwKLSAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcv
dGFncy1tZW1iZXIuaHRtbAotICAgICAgICAgICAgJ3Zhcic6IFsncGFyc2VUeXBlJywgJ3BhcnNl
TmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91
c2Vqc2RvYy5vcmcvdGFncy1uYW1lLmh0bWwKLSAgICAgICAgICAgICduYW1lJzogWydwYXJzZU5h
bWVQYXRoJywgJ2Vuc3VyZUVuZCddLAotICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9y
Zy90YWdzLW5hbWVzcGFjZS5odG1sCi0gICAgICAgICAgICAnbmFtZXNwYWNlJzogWydwYXJzZVR5
cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAotICAgICAgICAgICAg
Ly8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXByaXZhdGUuaHRtbAotICAgICAgICAgICAgJ3By
aXZhdGUnOiBbJ3BhcnNlVHlwZScsICdwYXJzZURlc2NyaXB0aW9uJ10sCi0gICAgICAgICAgICAv
LyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtcHJvdGVjdGVkLmh0bWwKLSAgICAgICAgICAgICdw
cm90ZWN0ZWQnOiBbJ3BhcnNlVHlwZScsICdwYXJzZURlc2NyaXB0aW9uJ10sCi0gICAgICAgICAg
ICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtcHVibGljLmh0bWwKLSAgICAgICAgICAgICdw
dWJsaWMnOiBbJ3BhcnNlVHlwZScsICdwYXJzZURlc2NyaXB0aW9uJ10sCi0gICAgICAgICAgICAv
LyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtcmVhZG9ubHkuaHRtbAotICAgICAgICAgICAgJ3Jl
YWRvbmx5JzogWydlbnN1cmVFbmQnXSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5v
cmcvdGFncy1yZXF1aXJlcy5odG1sCi0gICAgICAgICAgICAncmVxdWlyZXMnOiBbJ3BhcnNlTmFt
ZVBhdGgnLCAnZW5zdXJlRW5kJ10sCi0gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3Jn
L3RhZ3Mtc2luY2UuaHRtbAotICAgICAgICAgICAgJ3NpbmNlJzogWydwYXJzZURlc2NyaXB0aW9u
J10sCi0gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3Mtc3RhdGljLmh0bWwK
LSAgICAgICAgICAgICdzdGF0aWMnOiBbJ2Vuc3VyZUVuZCddLAotICAgICAgICAgICAgLy8gaHR0
cDovL3VzZWpzZG9jLm9yZy90YWdzLXN1bW1hcnkuaHRtbAotICAgICAgICAgICAgJ3N1bW1hcnkn
OiBbJ3BhcnNlRGVzY3JpcHRpb24nXSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5v
cmcvdGFncy10aGlzLmh0bWwKLSAgICAgICAgICAgICd0aGlzJzogWydwYXJzZU5hbWVQYXRoJywg
J2Vuc3VyZUVuZCddLAotICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXRv
ZG8uaHRtbAotICAgICAgICAgICAgJ3RvZG8nOiBbJ3BhcnNlRGVzY3JpcHRpb24nXSwKLSAgICAg
ICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy12YXJpYXRpb24uaHRtbAotICAgICAg
ICAgICAgJ3ZhcmlhdGlvbic6IFsncGFyc2VWYXJpYXRpb24nXSwKLSAgICAgICAgICAgIC8vIGh0
dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy12ZXJzaW9uLmh0bWwKLSAgICAgICAgICAgICd2ZXJzaW9u
JzogWydwYXJzZURlc2NyaXB0aW9uJ10KLSAgICAgICAgfTsKLQotICAgICAgICBUYWdQYXJzZXIu
cHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UoKSB7Ci0gICAgICAgICAgICB2YXIgaSwg
aXosIHNlcXVlbmNlcywgbWV0aG9kOwotCi0gICAgICAgICAgICAvLyBlbXB0eSB0aXRsZQotICAg
ICAgICAgICAgaWYgKCF0aGlzLl90aXRsZSkgewotICAgICAgICAgICAgICAgIGlmICghdGhpcy5h
ZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRpdGxlJykpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBTZWVrIHRvIGNvbnRlbnQgbGFzdCBpbmRleC4KLSAgICAgICAgICAgIHRoaXMu
X2xhc3QgPSBzZWVrQ29udGVudCh0aGlzLl90aXRsZSk7Ci0KLSAgICAgICAgICAgIGlmIChoYXNP
d25Qcm9wZXJ0eShSdWxlcywgdGhpcy5fdGl0bGUpKSB7Ci0gICAgICAgICAgICAgICAgc2VxdWVu
Y2VzID0gUnVsZXNbdGhpcy5fdGl0bGVdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAvLyBkZWZhdWx0IHNlcXVlbmNlcwotICAgICAgICAgICAgICAgIHNlcXVlbmNlcyA9
IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZScsICdwYXJzZURlc2NyaXB0aW9uJywgJ2VwaWxvZ3Vl
J107Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gc2VxdWVu
Y2VzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKLSAgICAgICAgICAgICAgICBtZXRob2QgPSBzZXF1
ZW5jZXNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzW21ldGhvZF0oKSkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFNlZWsgZ2xvYmFsIGluZGV4IHRvIGVuZCBvZiB0aGlzIHRh
Zy4KLSAgICAgICAgICAgIGluZGV4ID0gdGhpcy5fbGFzdDsKLSAgICAgICAgICAgIHJldHVybiB0
aGlzLl90YWc7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gcGFyc2VUYWcob3B0aW9u
cykgewotICAgICAgICAgICAgdmFyIHRpdGxlLCBwYXJzZXI7Ci0KLSAgICAgICAgICAgIC8vIHNr
aXAgdG8gdGFnCi0gICAgICAgICAgICBpZiAoIXNraXBUb1RhZygpKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHNjYW4gdGl0
bGUKLSAgICAgICAgICAgIHRpdGxlID0gc2NhblRpdGxlKCk7Ci0KLSAgICAgICAgICAgIC8vIGNv
bnN0cnVjdCB0YWcgcGFyc2VyCi0gICAgICAgICAgICBwYXJzZXIgPSBuZXcgVGFnUGFyc2VyKG9w
dGlvbnMsIHRpdGxlKTsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2UoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFBhcnNlIEpTRG9jCi0gICAgICAgIC8vCi0K
LSAgICAgICAgZnVuY3Rpb24gc2NhbkpTRG9jRGVzY3JpcHRpb24oKSB7Ci0gICAgICAgICAgICB2
YXIgZGVzY3JpcHRpb24gPSAnJywgY2gsIGF0QWxsb3dlZDsKLQotICAgICAgICAgICAgYXRBbGxv
d2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewotICAgICAg
ICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLQotICAgICAgICAgICAgICAgIGlmIChhdEFs
bG93ZWQgJiYgY2ggPT09ICdAJykgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgYXRBbGxvd2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGF0QWxsb3dlZCAmJiAhaXNXaGl0ZVNwYWNlKGNoKSkgewotICAgICAgICAg
ICAgICAgICAgICBhdEFsbG93ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBkZXNjcmlwdGlvbiArPSBhZHZhbmNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gdHJpbShkZXNjcmlwdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBwYXJzZShjb21tZW50LCBvcHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgdGFncyA9
IFtdLCB0YWcsIGRlc2NyaXB0aW9uLCBpbnRlcmVzdGluZ1RhZ3MsIGksIGl6OwotCi0gICAgICAg
ICAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgb3B0aW9u
cyA9IHt9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMu
dW53cmFwID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy51bndyYXApIHsKLSAgICAgICAgICAgICAg
ICBzb3VyY2UgPSB1bndyYXBDb21tZW50KGNvbW1lbnQpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBzb3VyY2UgPSBjb21tZW50OwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBhcnJheSBvZiByZWxldmFudCB0YWdzCi0gICAgICAgICAgICBpZiAob3B0aW9u
cy50YWdzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkob3B0aW9ucy50YWdzKSkgewot
ICAgICAgICAgICAgICAgICAgICBpbnRlcmVzdGluZ1RhZ3MgPSB7IH07Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciAoaSA9IDAsIGl6ID0gb3B0aW9ucy50YWdzLmxlbmd0aDsgaSA8IGl6OyBpKysp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50YWdzW2ldID09
PSAnc3RyaW5nJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZXN0aW5nVGFn
c1tvcHRpb25zLnRhZ3NbaV1dID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcignSW52YWxpZCAidGFn
cyIgcGFyYW1ldGVyOiAnICsgb3B0aW9ucy50YWdzKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ0ludmFsaWQgInRhZ3MiIHBhcmFtZXRlcjogJyAr
IG9wdGlvbnMudGFncyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoIUNhbkFjY2Vzc1N0cmluZ0J5SW5kZXgpIHsKLSAgICAgICAgICAgICAgICBz
b3VyY2UgPSBzb3VyY2Uuc3BsaXQoJycpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBs
ZW5ndGggPSBzb3VyY2UubGVuZ3RoOwotICAgICAgICAgICAgaW5kZXggPSAwOwotICAgICAgICAg
ICAgbGluZU51bWJlciA9IDA7Ci0gICAgICAgICAgICByZWNvdmVyYWJsZSA9IG9wdGlvbnMucmVj
b3ZlcmFibGU7Ci0gICAgICAgICAgICBzbG9wcHkgPSBvcHRpb25zLnNsb3BweTsKLSAgICAgICAg
ICAgIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0OwotCi0gICAgICAgICAgICBkZXNjcmlwdGlvbiA9
IHNjYW5KU0RvY0Rlc2NyaXB0aW9uKCk7Ci0KLSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0g
ICAgICAgICAgICAgICAgdGFnID0gcGFyc2VUYWcob3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAg
aWYgKCF0YWcpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGlmICghaW50ZXJlc3RpbmdUYWdzIHx8IGludGVyZXN0aW5nVGFn
cy5oYXNPd25Qcm9wZXJ0eSh0YWcudGl0bGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRhZ3Mu
cHVzaCh0YWcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sCi0g
ICAgICAgICAgICAgICAgdGFnczogdGFncwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAg
ICAgICBleHBvcnRzLnBhcnNlID0gcGFyc2U7Ci0gICAgfShqc2RvYyA9IHt9KSk7Ci0KLSAgICBl
eHBvcnRzLnZlcnNpb24gPSBWRVJTSU9OOwotICAgIGV4cG9ydHMucGFyc2UgPSBqc2RvYy5wYXJz
ZTsKLSAgICBleHBvcnRzLnBhcnNlVHlwZSA9IHR5cGVkLnBhcnNlVHlwZTsKLSAgICBleHBvcnRz
LnBhcnNlUGFyYW1UeXBlID0gdHlwZWQucGFyc2VQYXJhbVR5cGU7Ci0gICAgZXhwb3J0cy51bndy
YXBDb21tZW50ID0gdW53cmFwQ29tbWVudDsKLSAgICBleHBvcnRzLlN5bnRheCA9IHNoYWxsb3dD
b3B5KHR5cGVkLlN5bnRheCk7Ci0gICAgZXhwb3J0cy5FcnJvciA9IERvY3RyaW5lRXJyb3I7Ci0g
ICAgZXhwb3J0cy50eXBlID0gewotICAgICAgICBTeW50YXg6IGV4cG9ydHMuU3ludGF4LAotICAg
ICAgICBwYXJzZVR5cGU6IHR5cGVkLnBhcnNlVHlwZSwKLSAgICAgICAgcGFyc2VQYXJhbVR5cGU6
IHR5cGVkLnBhcnNlUGFyYW1UeXBlLAotICAgICAgICBzdHJpbmdpZnk6IHR5cGVkLnN0cmluZ2lm
eQotICAgIH07Ci19KHR5cGVvZiBleHBvcnRzID09PSAndW5kZWZpbmVkJyA/IChkb2N0cmluZSA9
IHt9KSA6IGV4cG9ydHMpKTsKLS8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovCi0K
LX0se31dLDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoKLSAgQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTMgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgot
ICBDb3B5cmlnaHQgKEMpIDIwMTMgQWxleCBTZXZpbGxlIDxoaUBhbGV4YW5kZXJzZXZpbGxlLmNv
bT4KLQotICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLSAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLQotICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLSAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQotICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlS
SUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZCi0gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotLyoqCi0gKiBFc2NvcGUg
KDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL0NvbnN0ZWxsYXRpb24vZXNjb3BlIj5lc2NvcGU8
L2E+KSBpcyBhbiA8YQotICogaHJlZj0iaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3Jn
L3B1YmxpY2F0aW9ucy9zdGFuZGFyZHMvRWNtYS0yNjIuaHRtIj5FQ01BU2NyaXB0PC9hPgotICog
c2NvcGUgYW5hbHl6ZXIgZXh0cmFjdGVkIGZyb20gdGhlIDxhCi0gKiBocmVmPSJodHRwOi8vZ2l0
aHViLmNvbS9Db25zdGVsbGF0aW9uL2VzbWFuZ2xlIj5lc21hbmdsZSBwcm9qZWN0PC9hLz4uCi0g
KiA8cD4KLSAqIDxlbT5lc2NvcGU8L2VtPiBmaW5kcyBsZXhpY2FsIHNjb3BlcyBpbiBhIHNvdXJj
ZSBwcm9ncmFtLCBpLmUuIGFyZWFzIG9mIHRoYXQKLSAqIHByb2dyYW0gd2hlcmUgZGlmZmVyZW50
IG9jY3VycmVuY2VzIG9mIHRoZSBzYW1lIGlkZW50aWZpZXIgcmVmZXIgdG8gdGhlIHNhbWUKLSAq
IHZhcmlhYmxlLiBXaXRoIGVhY2ggc2NvcGUgdGhlIGNvbnRhaW5lZCB2YXJpYWJsZXMgYXJlIGNv
bGxlY3RlZCwgYW5kIGVhY2gKLSAqIGlkZW50aWZpZXIgcmVmZXJlbmNlIGluIGNvZGUgaXMgbGlu
a2VkIHRvIGl0cyBjb3JyZXNwb25kaW5nIHZhcmlhYmxlIChpZgotICogcG9zc2libGUpLgotICog
PHA+Ci0gKiA8ZW0+ZXNjb3BlPC9lbT4gd29ya3Mgb24gYSBzeW50YXggdHJlZSBvZiB0aGUgcGFy
c2VkIHNvdXJjZSBjb2RlIHdoaWNoIGhhcwotICogdG8gYWRoZXJlIHRvIHRoZSA8YQotICogaHJl
Zj0iaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9TcGlkZXJNb25rZXkv
UGFyc2VyX0FQSSI+Ci0gKiBNb3ppbGxhIFBhcnNlciBBUEk8L2E+LiBFLmcuIDxhIGhyZWY9Imh0
dHA6Ly9lc3ByaW1hLm9yZyI+ZXNwcmltYTwvYT4gaXMgYSBwYXJzZXIKLSAqIHRoYXQgcHJvZHVj
ZXMgc3VjaCBzeW50YXggdHJlZXMuCi0gKiA8cD4KLSAqIFRoZSBtYWluIGludGVyZmFjZSBpcyB0
aGUge0BsaW5rIGFuYWx5emV9IGZ1bmN0aW9uLgotICogQG1vZHVsZQotICovCi0KLS8qanNsaW50
IGJpdHdpc2U6dHJ1ZSAqLwotLypnbG9iYWwgZXhwb3J0czp0cnVlLCBkZWZpbmU6dHJ1ZSwgcmVx
dWlyZTp0cnVlKi8KLShmdW5jdGlvbiAoZmFjdG9yeSwgZ2xvYmFsKSB7Ci0gICAgJ3VzZSBzdHJp
Y3QnOwotCi0gICAgZnVuY3Rpb24gbmFtZXNwYWNlKHN0ciwgb2JqKSB7Ci0gICAgICAgIHZhciBp
LCBpeiwgbmFtZXMsIG5hbWU7Ci0gICAgICAgIG5hbWVzID0gc3RyLnNwbGl0KCcuJyk7Ci0gICAg
ICAgIGZvciAoaSA9IDAsIGl6ID0gbmFtZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgewotICAgICAg
ICAgICAgbmFtZSA9IG5hbWVzW2ldOwotICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0
eShuYW1lKSkgewotICAgICAgICAgICAgICAgIG9iaiA9IG9ialtuYW1lXTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgb2JqID0gKG9ialtuYW1lXSA9IHt9KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gb2JqOwotICAgIH0KLQotICAgIC8v
IFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9u
SlMvTm9kZS5qcywKLSAgICAvLyBhbmQgcGxhaW4gYnJvd3NlciBsb2FkaW5nLAotICAgIGlmICh0
eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsKLSAgICAgICAgZGVm
aW5lKCdlc2NvcGUnLCBbJ2V4cG9ydHMnLCAnZXN0cmF2ZXJzZSddLCBmdW5jdGlvbiAoZXhwb3J0
cywgZXN0cmF2ZXJzZSkgewotICAgICAgICAgICAgZmFjdG9yeShleHBvcnRzLCBnbG9iYWwsIGVz
dHJhdmVyc2UpOwotICAgICAgICB9KTsKLSAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9
PSAndW5kZWZpbmVkJykgewotICAgICAgICBmYWN0b3J5KGV4cG9ydHMsIGdsb2JhbCwgcmVxdWly
ZSgnZXN0cmF2ZXJzZScpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmYWN0b3J5KG5hbWVzcGFj
ZSgnZXNjb3BlJywgZ2xvYmFsKSwgZ2xvYmFsLCBnbG9iYWwuZXN0cmF2ZXJzZSk7Ci0gICAgfQot
fShmdW5jdGlvbiAoZXhwb3J0cywgZ2xvYmFsLCBlc3RyYXZlcnNlKSB7Ci0gICAgJ3VzZSBzdHJp
Y3QnOwotCi0gICAgdmFyIFN5bnRheCwKLSAgICAgICAgTWFwLAotICAgICAgICBjdXJyZW50U2Nv
cGUsCi0gICAgICAgIGdsb2JhbFNjb3BlLAotICAgICAgICBzY29wZXMsCi0gICAgICAgIG9wdGlv
bnM7Ci0KLSAgICBTeW50YXggPSBlc3RyYXZlcnNlLlN5bnRheDsKLQotICAgIGlmICh0eXBlb2Yg
Z2xvYmFsLk1hcCAhPT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgLy8gRVM2IE1hcAotICAgICAg
ICBNYXAgPSBnbG9iYWwuTWFwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE1hcCA9IGZ1bmN0aW9u
IE1hcCgpIHsKLSAgICAgICAgICAgIHRoaXMuX19kYXRhID0ge307Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBNYXBHZXQoa2V5KSB7Ci0gICAgICAg
ICAgICBrZXkgPSAnJCcgKyBrZXk7Ci0gICAgICAgICAgICBpZiAodGhpcy5fX2RhdGEuaGFzT3du
UHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9fZGF0YVtrZXld
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICAgICAg
fTsKLQotICAgICAgICBNYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIE1hcEhhcyhrZXkpIHsK
LSAgICAgICAgICAgIGtleSA9ICckJyArIGtleTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9f
ZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpOwotICAgICAgICB9OwotCi0gICAgICAgIE1hcC5wcm90
b3R5cGUuc2V0ID0gZnVuY3Rpb24gTWFwU2V0KGtleSwgdmFsKSB7Ci0gICAgICAgICAgICBrZXkg
PSAnJCcgKyBrZXk7Ci0gICAgICAgICAgICB0aGlzLl9fZGF0YVtrZXldID0gdmFsOwotICAgICAg
ICB9OwotCi0gICAgICAgIE1hcC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24gTWFwRGVs
ZXRlKGtleSkgewotICAgICAgICAgICAga2V5ID0gJyQnICsga2V5OwotICAgICAgICAgICAgcmV0
dXJuIGRlbGV0ZSB0aGlzLl9fZGF0YVtrZXldOwotICAgICAgICB9OwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIGFzc2VydChjb25kLCB0ZXh0KSB7Ci0gICAgICAgIGlmICghY29uZCkgewotICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKHRleHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVu
Y3Rpb24gZGVmYXVsdE9wdGlvbnMoKSB7Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBv
cHRpbWlzdGljOiBmYWxzZSwKLSAgICAgICAgICAgIGRpcmVjdGl2ZTogZmFsc2UKLSAgICAgICAg
fTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB1cGRhdGVEZWVwbHkodGFyZ2V0LCBvdmVycmlkZSkg
ewotICAgICAgICB2YXIga2V5LCB2YWw7Ci0KLSAgICAgICAgZnVuY3Rpb24gaXNIYXNoT2JqZWN0
KHRhcmdldCkgewotICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3Qn
ICYmIHRhcmdldCBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKHRhcmdldCBpbnN0YW5jZW9mIFJlZ0V4
cCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGtleSBpbiBvdmVycmlkZSkgewotICAgICAg
ICAgICAgaWYgKG92ZXJyaWRlLmhhc093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgICAgICAg
ICB2YWwgPSBvdmVycmlkZVtrZXldOwotICAgICAgICAgICAgICAgIGlmIChpc0hhc2hPYmplY3Qo
dmFsKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNIYXNoT2JqZWN0KHRhcmdldFtrZXld
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRGVlcGx5KHRhcmdldFtrZXldLCB2
YWwpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdGFyZ2V0W2tleV0gPSB1cGRhdGVEZWVwbHkoe30sIHZhbCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0YXJn
ZXRba2V5XSA9IHZhbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBIFJl
ZmVyZW5jZSByZXByZXNlbnRzIGEgc2luZ2xlIG9jY3VycmVuY2Ugb2YgYW4gaWRlbnRpZmllciBp
biBjb2RlLgotICAgICAqIEBjbGFzcyBSZWZlcmVuY2UKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBS
ZWZlcmVuY2UoaWRlbnQsIHNjb3BlLCBmbGFnLCB3cml0ZUV4cHIsIG1heWJlSW1wbGljaXRHbG9i
YWwpIHsKLSAgICAgICAgLyoqIAotICAgICAgICAgKiBJZGVudGlmaWVyIHN5bnRheCBub2RlLgot
ICAgICAgICAgKiBAbWVtYmVyIHtlc3ByaW1hI0lkZW50aWZpZXJ9IFJlZmVyZW5jZSNpZGVudGlm
aWVyIAotICAgICAgICAgKi8KLSAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gaWRlbnQ7Ci0gICAg
ICAgIC8qKiAKLSAgICAgICAgICogUmVmZXJlbmNlIHRvIHRoZSBlbmNsb3NpbmcgU2NvcGUuCi0g
ICAgICAgICAqIEBtZW1iZXIge1Njb3BlfSBSZWZlcmVuY2UjZnJvbSAKLSAgICAgICAgICovCi0g
ICAgICAgIHRoaXMuZnJvbSA9IHNjb3BlOwotICAgICAgICAvKioKLSAgICAgICAgICogV2hldGhl
ciB0aGUgcmVmZXJlbmNlIGNvbWVzIGZyb20gYSBkeW5hbWljIHNjb3BlIChzdWNoIGFzICdldmFs
JywKLSAgICAgICAgICogJ3dpdGgnLCBldGMuKSwgYW5kIG1heSBiZSB0cmFwcGVkIGJ5IGR5bmFt
aWMgc2NvcGVzLgotICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBSZWZlcmVuY2UjdGFpbnRl
ZAotICAgICAgICAgKi8KLSAgICAgICAgdGhpcy50YWludGVkID0gZmFsc2U7Ci0gICAgICAgIC8q
KiAKLSAgICAgICAgICogVGhlIHZhcmlhYmxlIHRoaXMgcmVmZXJlbmNlIGlzIHJlc29sdmVkIHdp
dGguCi0gICAgICAgICAqIEBtZW1iZXIge1ZhcmlhYmxlfSBSZWZlcmVuY2UjcmVzb2x2ZWQgCi0g
ICAgICAgICAqLwotICAgICAgICB0aGlzLnJlc29sdmVkID0gbnVsbDsKLSAgICAgICAgLyoqIAot
ICAgICAgICAgKiBUaGUgcmVhZC13cml0ZSBtb2RlIG9mIHRoZSByZWZlcmVuY2UuIChWYWx1ZSBp
cyBvbmUgb2Yge0BsaW5rCi0gICAgICAgICAqIFJlZmVyZW5jZS5SRUFEfSwge0BsaW5rIFJlZmVy
ZW5jZS5SV30sIHtAbGluayBSZWZlcmVuY2UuV1JJVEV9KS4KLSAgICAgICAgICogQG1lbWJlciB7
bnVtYmVyfSBSZWZlcmVuY2UjZmxhZyAKLSAgICAgICAgICogQHByaXZhdGUKLSAgICAgICAgICov
Ci0gICAgICAgIHRoaXMuZmxhZyA9IGZsYWc7Ci0gICAgICAgIGlmICh0aGlzLmlzV3JpdGUoKSkg
ewotICAgICAgICAgICAgLyoqIAotICAgICAgICAgICAgICogSWYgcmVmZXJlbmNlIGlzIHdyaXRl
YWJsZSwgdGhpcyBpcyB0aGUgdHJlZSBiZWluZyB3cml0dGVuIHRvIGl0LgotICAgICAgICAgICAg
ICogQG1lbWJlciB7ZXNwcmltYSNOb2RlfSBSZWZlcmVuY2Ujd3JpdGVFeHByIAotICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICB0aGlzLndyaXRlRXhwciA9IHdyaXRlRXhwcjsKLSAgICAgICAg
fQotICAgICAgICAvKiogCi0gICAgICAgICAqIFdoZXRoZXIgdGhlIFJlZmVyZW5jZSBtaWdodCBy
ZWZlciB0byBhIGdsb2JhbCB2YXJpYWJsZS4KLSAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0g
UmVmZXJlbmNlI19fbWF5YmVJbXBsaWNpdEdsb2JhbCAKLSAgICAgICAgICogQHByaXZhdGUKLSAg
ICAgICAgICovCi0gICAgICAgIHRoaXMuX19tYXliZUltcGxpY2l0R2xvYmFsID0gbWF5YmVJbXBs
aWNpdEdsb2JhbDsKLSAgICB9Ci0KLSAgICAvKiogCi0gICAgICogQGNvbnN0YW50IFJlZmVyZW5j
ZS5SRUFEIAotICAgICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgUmVmZXJlbmNlLlJFQUQgPSAw
eDE7Ci0gICAgLyoqIAotICAgICAqIEBjb25zdGFudCBSZWZlcmVuY2UuV1JJVEUgCi0gICAgICog
QHByaXZhdGUKLSAgICAgKi8KLSAgICBSZWZlcmVuY2UuV1JJVEUgPSAweDI7Ci0gICAgLyoqIAot
ICAgICAqIEBjb25zdGFudCBSZWZlcmVuY2UuUlcgCi0gICAgICogQHByaXZhdGUKLSAgICAgKi8K
LSAgICBSZWZlcmVuY2UuUlcgPSAweDM7Ci0KLSAgICAvKioKLSAgICAgKiBXaGV0aGVyIHRoZSBy
ZWZlcmVuY2UgaXMgc3RhdGljLgotICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lzU3RhdGljCi0g
ICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBSZWZlcmVuY2UucHJvdG90eXBl
LmlzU3RhdGljID0gZnVuY3Rpb24gaXNTdGF0aWMoKSB7Ci0gICAgICAgIHJldHVybiAhdGhpcy50
YWludGVkICYmIHRoaXMucmVzb2x2ZWQgJiYgdGhpcy5yZXNvbHZlZC5zY29wZS5pc1N0YXRpYygp
OwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgd3Jp
dGVhYmxlLgotICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lzV3JpdGUKLSAgICAgKiBAcmV0dXJu
IHtib29sZWFufQotICAgICAqLwotICAgIFJlZmVyZW5jZS5wcm90b3R5cGUuaXNXcml0ZSA9IGZ1
bmN0aW9uIGlzV3JpdGUoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmZsYWcgJiBSZWZlcmVuY2Uu
V1JJVEU7Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBp
cyByZWFkYWJsZS4KLSAgICAgKiBAbWV0aG9kIFJlZmVyZW5jZSNpc1JlYWQKLSAgICAgKiBAcmV0
dXJuIHtib29sZWFufQotICAgICAqLwotICAgIFJlZmVyZW5jZS5wcm90b3R5cGUuaXNSZWFkID0g
ZnVuY3Rpb24gaXNSZWFkKCkgewotICAgICAgICByZXR1cm4gdGhpcy5mbGFnICYgUmVmZXJlbmNl
LlJFQUQ7Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBp
cyByZWFkLW9ubHkuCi0gICAgICogQG1ldGhvZCBSZWZlcmVuY2UjaXNSZWFkT25seQotICAgICAq
IEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgUmVmZXJlbmNlLnByb3RvdHlwZS5pc1Jl
YWRPbmx5ID0gZnVuY3Rpb24gaXNSZWFkT25seSgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZmxh
ZyA9PT0gUmVmZXJlbmNlLlJFQUQ7Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIFdoZXRoZXIg
dGhlIHJlZmVyZW5jZSBpcyB3cml0ZS1vbmx5LgotICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lz
V3JpdGVPbmx5Ci0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAgICAgKi8KLSAgICBSZWZlcmVu
Y2UucHJvdG90eXBlLmlzV3JpdGVPbmx5ID0gZnVuY3Rpb24gaXNXcml0ZU9ubHkoKSB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLmZsYWcgPT09IFJlZmVyZW5jZS5XUklURTsKLSAgICB9OwotCi0gICAg
LyoqCi0gICAgICogV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIHJlYWQtd3JpdGUuCi0gICAgICog
QG1ldGhvZCBSZWZlcmVuY2UjaXNSZWFkV3JpdGUKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufQot
ICAgICAqLwotICAgIFJlZmVyZW5jZS5wcm90b3R5cGUuaXNSZWFkV3JpdGUgPSBmdW5jdGlvbiBp
c1JlYWRXcml0ZSgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZmxhZyA9PT0gUmVmZXJlbmNlLlJX
OwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBBIFZhcmlhYmxlIHJlcHJlc2VudHMgYSBsb2Nh
bGx5IHNjb3BlZCBpZGVudGlmaWVyLiBUaGVzZSBpbmNsdWRlIGFyZ3VtZW50cyB0bwotICAgICAq
IGZ1bmN0aW9ucy4KLSAgICAgKiBAY2xhc3MgVmFyaWFibGUKLSAgICAgKi8KLSAgICBmdW5jdGlv
biBWYXJpYWJsZShuYW1lLCBzY29wZSkgewotICAgICAgICAvKiogIAotICAgICAgICAgKiBUaGUg
dmFyaWFibGUgbmFtZSwgYXMgZ2l2ZW4gaW4gdGhlIHNvdXJjZSBjb2RlLgotICAgICAgICAgKiBA
bWVtYmVyIHtTdHJpbmd9IFZhcmlhYmxlI25hbWUgCi0gICAgICAgICAqLwotICAgICAgICB0aGlz
Lm5hbWUgPSBuYW1lOwotICAgICAgICAvKioKLSAgICAgICAgICogTGlzdCBvZiBkZWZpbmluZyBv
Y2N1cnJlbmNlcyBvZiB0aGlzIHZhcmlhYmxlIChsaWtlIGluICd2YXIgLi4uJwotICAgICAgICAg
KiBzdGF0ZW1lbnRzIG9yIGFzIHBhcmFtZXRlciksIGFzIEFTVCBub2Rlcy4KLSAgICAgICAgICog
QG1lbWJlciB7ZXNwcmltYS5JZGVudGlmaWVyW119IFZhcmlhYmxlI2lkZW50aWZpZXJzCi0gICAg
ICAgICAqLwotICAgICAgICB0aGlzLmlkZW50aWZpZXJzID0gW107Ci0gICAgICAgIC8qKgotICAg
ICAgICAgKiBMaXN0IG9mIHtAbGluayBSZWZlcmVuY2V8cmVmZXJlbmNlc30gb2YgdGhpcyB2YXJp
YWJsZSAoZXhjbHVkaW5nIHBhcmFtZXRlciBlbnRyaWVzKQotICAgICAgICAgKiBpbiBpdHMgZGVm
aW5pbmcgc2NvcGUgYW5kIGFsbCBuZXN0ZWQgc2NvcGVzLiBGb3IgZGVmaW5pbmcKLSAgICAgICAg
ICogb2NjdXJyZW5jZXMgb25seSBzZWUge0BsaW5rIFZhcmlhYmxlI2RlZnN9LgotICAgICAgICAg
KiBAbWVtYmVyIHtSZWZlcmVuY2VbXX0gVmFyaWFibGUjcmVmZXJlbmNlcwotICAgICAgICAgKi8K
LSAgICAgICAgdGhpcy5yZWZlcmVuY2VzID0gW107Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAq
IExpc3Qgb2YgZGVmaW5pbmcgb2NjdXJyZW5jZXMgb2YgdGhpcyB2YXJpYWJsZSAobGlrZSBpbiAn
dmFyIC4uLicKLSAgICAgICAgICogc3RhdGVtZW50cyBvciBhcyBwYXJhbWV0ZXIpLCBhcyBjdXN0
b20gb2JqZWN0cy4KLSAgICAgICAgICogQHR5cGVkZWYge09iamVjdH0gRGVmRW50cnkKLSAgICAg
ICAgICogQHByb3BlcnR5IHtTdHJpbmd9IERlZkVudHJ5LnR5cGUgLSB0aGUgdHlwZSBvZiB0aGUg
b2NjdXJyZW5jZSAoZS5nLgotICAgICAgICAgKiAgICAgICJQYXJhbWV0ZXIiLCAiVmFyaWFibGUi
LCAuLi4pCi0gICAgICAgICAqIEBwcm9wZXJ0eSB7ZXNwcmltYS5JZGVudGlmaWVyfSBEZWZFbnRy
eS5uYW1lIC0gdGhlIGlkZW50aWZpZXIgQVNUIG5vZGUgb2YgdGhlIG9jY3VycmVuY2UKLSAgICAg
ICAgICogQHByb3BlcnR5IHtlc3ByaW1hLk5vZGV9IERlZkVudHJ5Lm5vZGUgLSB0aGUgZW5jbG9z
aW5nIG5vZGUgb2YgdGhlCi0gICAgICAgICAqICAgICAgaWRlbnRpZmllcgotICAgICAgICAgKiBA
cHJvcGVydHkge2VzcHJpbWEuTm9kZX0gW0RlZkVudHJ5LnBhcmVudF0gLSB0aGUgZW5jbG9zaW5n
IHN0YXRlbWVudAotICAgICAgICAgKiAgICAgIG5vZGUgb2YgdGhlIGlkZW50aWZpZXIKLSAgICAg
ICAgICogQG1lbWJlciB7RGVmRW50cnlbXX0gVmFyaWFibGUjZGVmcwotICAgICAgICAgKi8KLSAg
ICAgICAgdGhpcy5kZWZzID0gW107Ci0KLSAgICAgICAgdGhpcy50YWludGVkID0gZmFsc2U7Ci0g
ICAgICAgIC8qKgotICAgICAgICAgKiBXaGV0aGVyIHRoaXMgaXMgYSBzdGFjayB2YXJpYWJsZS4K
LSAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gVmFyaWFibGUjc3RhY2sKLSAgICAgICAgICov
Ci0gICAgICAgIHRoaXMuc3RhY2sgPSB0cnVlOwotICAgICAgICAvKiogCi0gICAgICAgICAqIFJl
ZmVyZW5jZSB0byB0aGUgZW5jbG9zaW5nIFNjb3BlLgotICAgICAgICAgKiBAbWVtYmVyIHtTY29w
ZX0gVmFyaWFibGUjc2NvcGUgCi0gICAgICAgICAqLwotICAgICAgICB0aGlzLnNjb3BlID0gc2Nv
cGU7Ci0gICAgfQotCi0gICAgVmFyaWFibGUuQ2F0Y2hDbGF1c2UgPSAnQ2F0Y2hDbGF1c2UnOwot
ICAgIFZhcmlhYmxlLlBhcmFtZXRlciA9ICdQYXJhbWV0ZXInOwotICAgIFZhcmlhYmxlLkZ1bmN0
aW9uTmFtZSA9ICdGdW5jdGlvbk5hbWUnOwotICAgIFZhcmlhYmxlLlZhcmlhYmxlID0gJ1Zhcmlh
YmxlJzsKLSAgICBWYXJpYWJsZS5JbXBsaWNpdEdsb2JhbFZhcmlhYmxlID0gJ0ltcGxpY2l0R2xv
YmFsVmFyaWFibGUnOwotCi0gICAgZnVuY3Rpb24gaXNTdHJpY3RTY29wZShzY29wZSwgYmxvY2sp
IHsKLSAgICAgICAgdmFyIGJvZHksIGksIGl6LCBzdG10LCBleHByOwotCi0gICAgICAgIC8vIFdo
ZW4gdXBwZXIgc2NvcGUgaXMgZXhpc3RzIGFuZCBzdHJpY3QsIGlubmVyIHNjb3BlIGlzIGFsc28g
c3RyaWN0LgotICAgICAgICBpZiAoc2NvcGUudXBwZXIgJiYgc2NvcGUudXBwZXIuaXNTdHJpY3Qp
IHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNj
b3BlLnR5cGUgPT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgIGJvZHkgPSBibG9jay5ib2R5
OwotICAgICAgICB9IGVsc2UgaWYgKHNjb3BlLnR5cGUgPT09ICdnbG9iYWwnKSB7Ci0gICAgICAg
ICAgICBib2R5ID0gYmxvY2s7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob3B0aW9ucy5kaXJlY3RpdmUpIHsKLSAg
ICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gYm9keS5ib2R5Lmxlbmd0aDsgaSA8IGl6OyArK2kp
IHsKLSAgICAgICAgICAgICAgICBzdG10ID0gYm9keS5ib2R5W2ldOwotICAgICAgICAgICAgICAg
IGlmIChzdG10LnR5cGUgIT09ICdEaXJlY3RpdmVTdGF0ZW1lbnQnKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc3Rt
dC5yYXcgPT09ICcidXNlIHN0cmljdCInIHx8IHN0bXQucmF3ID09PSAnXCd1c2Ugc3RyaWN0XCcn
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaSA9IDAs
IGl6ID0gYm9keS5ib2R5Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKLSAgICAgICAgICAgICAgICBz
dG10ID0gYm9keS5ib2R5W2ldOwotICAgICAgICAgICAgICAgIGlmIChzdG10LnR5cGUgIT09IFN5
bnRheC5FeHByZXNzaW9uU3RhdGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBleHByID0gc3RtdC5leHByZXNzaW9u
OwotICAgICAgICAgICAgICAgIGlmIChleHByLnR5cGUgIT09IFN5bnRheC5MaXRlcmFsIHx8IHR5
cGVvZiBleHByLnZhbHVlICE9PSAnc3RyaW5nJykgewotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGV4cHIucmF3ICE9IG51
bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIucmF3ID09PSAnInVzZSBzdHJpY3Qi
JyB8fCBleHByLnJhdyA9PT0gJ1wndXNlIHN0cmljdFwnJykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoZXhwci52YWx1ZSA9PT0gJ3VzZSBz
dHJpY3QnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQGNsYXNz
IFNjb3BlCi0gICAgICovCi0gICAgZnVuY3Rpb24gU2NvcGUoYmxvY2ssIG9wdCkgewotICAgICAg
ICB2YXIgdmFyaWFibGUsIGJvZHk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIE9uZSBvZiAn
Y2F0Y2gnLCAnd2l0aCcsICdmdW5jdGlvbicgb3IgJ2dsb2JhbCcuCi0gICAgICAgICAqIEBtZW1i
ZXIge1N0cmluZ30gU2NvcGUjdHlwZQotICAgICAgICAgKi8KLSAgICAgICAgdGhpcy50eXBlID0K
LSAgICAgICAgICAgIChibG9jay50eXBlID09PSBTeW50YXguQ2F0Y2hDbGF1c2UpID8gJ2NhdGNo
JyA6Ci0gICAgICAgICAgICAoYmxvY2sudHlwZSA9PT0gU3ludGF4LldpdGhTdGF0ZW1lbnQpID8g
J3dpdGgnIDoKLSAgICAgICAgICAgIChibG9jay50eXBlID09PSBTeW50YXguUHJvZ3JhbSkgPyAn
Z2xvYmFsJyA6ICdmdW5jdGlvbic7Ci0gICAgICAgICAvKioKLSAgICAgICAgICogVGhlIHNjb3Bl
ZCB7QGxpbmsgVmFyaWFibGV9cyBvZiB0aGlzIHNjb3BlLCBhcyA8Y29kZT57IFZhcmlhYmxlLm5h
bWUKLSAgICAgICAgICogOiBWYXJpYWJsZSB9PC9jb2RlPi4KLSAgICAgICAgICogQG1lbWJlciB7
TWFwfSBTY29wZSNzZXQKLSAgICAgICAgICovCi0gICAgICAgIHRoaXMuc2V0ID0gbmV3IE1hcCgp
OwotICAgICAgICAvKioKLSAgICAgICAgICogVGhlIHRhaW50ZWQgdmFyaWFibGVzIG9mIHRoaXMg
c2NvcGUsIGFzIDxjb2RlPnsgVmFyaWFibGUubmFtZSA6Ci0gICAgICAgICAqIGJvb2xlYW4gfTwv
Y29kZT4uCi0gICAgICAgICAqIEBtZW1iZXIge01hcH0gU2NvcGUjdGFpbnRzICovCi0gICAgICAg
IHRoaXMudGFpbnRzID0gbmV3IE1hcCgpOwotICAgICAgICAvKioKLSAgICAgICAgICogR2VuZXJh
bGx5LCB0aHJvdWdoIHRoZSBsZXhpY2FsIHNjb3Bpbmcgb2YgSlMgeW91IGNhbiBhbHdheXMga25v
dwotICAgICAgICAgKiB3aGljaCB2YXJpYWJsZSBhbiBpZGVudGlmaWVyIGluIHRoZSBzb3VyY2Ug
Y29kZSByZWZlcnMgdG8uIFRoZXJlIGFyZQotICAgICAgICAgKiBhIGZldyBleGNlcHRpb25zIHRv
IHRoaXMgcnVsZS4gV2l0aCAnZ2xvYmFsJyBhbmQgJ3dpdGgnIHNjb3BlcyB5b3UKLSAgICAgICAg
ICogY2FuIG9ubHkgZGVjaWRlIGF0IHJ1bnRpbWUgd2hpY2ggdmFyaWFibGUgYSByZWZlcmVuY2Ug
cmVmZXJzIHRvLgotICAgICAgICAgKiBNb3Jlb3ZlciwgaWYgJ2V2YWwoKScgaXMgdXNlZCBpbiBh
IHNjb3BlLCBpdCBtaWdodCBpbnRyb2R1Y2UgbmV3Ci0gICAgICAgICAqIGJpbmRpbmdzIGluIHRo
aXMgb3IgaXRzIHByYXJlbnQgc2NvcGVzLgotICAgICAgICAgKiBBbGwgdGhvc2Ugc2NvcGVzIGFy
ZSBjb25zaWRlcmVkICdkeW5hbWljJy4KLSAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gU2Nv
cGUjZHluYW1pYwotICAgICAgICAgKi8KLSAgICAgICAgdGhpcy5keW5hbWljID0gdGhpcy50eXBl
ID09PSAnZ2xvYmFsJyB8fCB0aGlzLnR5cGUgPT09ICd3aXRoJzsKLSAgICAgICAgLyoqCi0gICAg
ICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBzY29wZS1kZWZpbmluZyBzeW50YXggbm9kZS4KLSAg
ICAgICAgICogQG1lbWJlciB7ZXNwcmltYS5Ob2RlfSBTY29wZSNibG9jawotICAgICAgICAgKi8K
LSAgICAgICAgdGhpcy5ibG9jayA9IGJsb2NrOwotICAgICAgICAgLyoqCi0gICAgICAgICAqIFRo
ZSB7QGxpbmsgUmVmZXJlbmNlfHJlZmVyZW5jZXN9IHRoYXQgYXJlIG5vdCByZXNvbHZlZCB3aXRo
IHRoaXMgc2NvcGUuCi0gICAgICAgICAqIEBtZW1iZXIge1JlZmVyZW5jZVtdfSBTY29wZSN0aHJv
dWdoCi0gICAgICAgICAqLwotICAgICAgICB0aGlzLnRocm91Z2ggPSBbXTsKLSAgICAgICAgIC8q
KgotICAgICAgICAgKiBUaGUgc2NvcGVkIHtAbGluayBWYXJpYWJsZX1zIG9mIHRoaXMgc2NvcGUu
IEluIHRoZSBjYXNlIG9mIGEKLSAgICAgICAgICogJ2Z1bmN0aW9uJyBzY29wZSB0aGlzIGluY2x1
ZGVzIHRoZSBhdXRvbWF0aWMgYXJndW1lbnQgPGVtPmFyZ3VtZW50czwvZW0+IGFzCi0gICAgICAg
ICAqIGl0cyBmaXJzdCBlbGVtZW50LCBhcyB3ZWxsIGFzIGFsbCBmdXJ0aGVyIGZvcm1hbCBhcmd1
bWVudHMuCi0gICAgICAgICAqIEBtZW1iZXIge1ZhcmlhYmxlW119IFNjb3BlI3ZhcmlhYmxlcwot
ICAgICAgICAgKi8KLSAgICAgICAgdGhpcy52YXJpYWJsZXMgPSBbXTsKLSAgICAgICAgIC8qKgot
ICAgICAgICAgKiBBbnkgdmFyaWFibGUge0BsaW5rIFJlZmVyZW5jZXxyZWZlcmVuY2V9IGZvdW5k
IGluIHRoaXMgc2NvcGUuIFRoaXMKLSAgICAgICAgICogaW5jbHVkZXMgb2NjdXJyZW5jZXMgb2Yg
bG9jYWwgdmFyaWFibGVzIGFzIHdlbGwgYXMgdmFyaWFibGVzIGZyb20KLSAgICAgICAgICogcGFy
ZW50IHNjb3BlcyAoaW5jbHVkaW5nIHRoZSBnbG9iYWwgc2NvcGUpLiBGb3IgbG9jYWwgdmFyaWFi
bGVzCi0gICAgICAgICAqIHRoaXMgYWxzbyBpbmNsdWRlcyBkZWZpbmluZyBvY2N1cnJlbmNlcyAo
bGlrZSBpbiBhICd2YXInIHN0YXRlbWVudCkuCi0gICAgICAgICAqIEluIGEgJ2Z1bmN0aW9uJyBz
Y29wZSB0aGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlIG9jY3VycmVuY2VzIG9mIHRoZQotICAgICAg
ICAgKiBmb3JtYWwgcGFyYW1ldGVyIGluIHRoZSBwYXJhbWV0ZXIgbGlzdC4KLSAgICAgICAgICog
QG1lbWJlciB7UmVmZXJlbmNlW119IFNjb3BlI3JlZmVyZW5jZXMKLSAgICAgICAgICovCi0gICAg
ICAgIHRoaXMucmVmZXJlbmNlcyA9IFtdOwotICAgICAgICAgLyoqCi0gICAgICAgICAqIExpc3Qg
b2Yge0BsaW5rIFJlZmVyZW5jZX1zIHRoYXQgYXJlIGxlZnQgdG8gYmUgcmVzb2x2ZWQgKGkuZS4g
d2hpY2gKLSAgICAgICAgICogbmVlZCB0byBiZSBsaW5rZWQgdG8gdGhlIHZhcmlhYmxlIHRoZXkg
cmVmZXIgdG8pLiBVc2VkIGludGVybmFsbHkgdG8KLSAgICAgICAgICogcmVzb2x2ZSBiaW5kaW5n
cyBkdXJpbmcgc2NvcGUgYW5hbHlzaXMuIE9uIGEgZmluYWxpemVkIHNjb3BlCi0gICAgICAgICAq
IGFuYWx5c2lzLCBhbGwgc29wZXMgaGF2ZSA8ZW0+bGVmdDwvZW0+IHZhbHVlIDxzdHJvbmc+bnVs
bDwvc3Ryb25nPi4KLSAgICAgICAgICogQG1lbWJlciB7UmVmZXJlbmNlW119IFNjb3BlI2xlZnQK
LSAgICAgICAgICovCi0gICAgICAgIHRoaXMubGVmdCA9IFtdOwotICAgICAgICAgLyoqCi0gICAg
ICAgICAqIEZvciAnZ2xvYmFsJyBhbmQgJ2Z1bmN0aW9uJyBzY29wZXMsIHRoaXMgaXMgYSBzZWxm
LXJlZmVyZW5jZS4gRm9yCi0gICAgICAgICAqIG90aGVyIHNjb3BlIHR5cGVzIHRoaXMgaXMgdGhl
IDxlbT52YXJpYWJsZVNjb3BlPC9lbT4gdmFsdWUgb2YgdGhlCi0gICAgICAgICAqIHBhcmVudCBz
Y29wZS4KLSAgICAgICAgICogQG1lbWJlciB7U2NvcGV9IFNjb3BlI3ZhcmlhYmxlU2NvcGUKLSAg
ICAgICAgICovCi0gICAgICAgIHRoaXMudmFyaWFibGVTY29wZSA9Ci0gICAgICAgICAgICAodGhp
cy50eXBlID09PSAnZ2xvYmFsJyB8fCB0aGlzLnR5cGUgPT09ICdmdW5jdGlvbicpID8gdGhpcyA6
IGN1cnJlbnRTY29wZS52YXJpYWJsZVNjb3BlOwotICAgICAgICAgLyoqCi0gICAgICAgICAqIFdo
ZXRoZXIgdGhpcyBzY29wZSBpcyBjcmVhdGVkIGJ5IGEgRnVuY3Rpb25FeHByZXNzaW9uLgotICAg
ICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBTY29wZSNmdW5jdGlvbkV4cHJlc3Npb25TY29wZQot
ICAgICAgICAgKi8KLSAgICAgICAgdGhpcy5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSA9IGZhbHNl
OwotICAgICAgICAgLyoqCi0gICAgICAgICAqIFdoZXRoZXIgdGhpcyBpcyBhIHNjb3BlIHRoYXQg
Y29udGFpbnMgYW4gJ2V2YWwoKScgaW52b2NhdGlvbi4KLSAgICAgICAgICogQG1lbWJlciB7Ym9v
bGVhbn0gU2NvcGUjZGlyZWN0Q2FsbFRvRXZhbFNjb3BlCi0gICAgICAgICAqLwotICAgICAgICB0
aGlzLmRpcmVjdENhbGxUb0V2YWxTY29wZSA9IGZhbHNlOwotICAgICAgICAgLyoqCi0gICAgICAg
ICAqIEBtZW1iZXIge2Jvb2xlYW59IFNjb3BlI3RoaXNGb3VuZAotICAgICAgICAgKi8KLSAgICAg
ICAgdGhpcy50aGlzRm91bmQgPSBmYWxzZTsKLSAgICAgICAgYm9keSA9IHRoaXMudHlwZSA9PT0g
J2Z1bmN0aW9uJyA/IGJsb2NrLmJvZHkgOiBibG9jazsKLSAgICAgICAgaWYgKG9wdC5uYW1pbmcp
IHsKLSAgICAgICAgICAgIHRoaXMuX19kZWZpbmUoYmxvY2suaWQsIHsKLSAgICAgICAgICAgICAg
ICB0eXBlOiBWYXJpYWJsZS5GdW5jdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgbmFtZTogYmxv
Y2suaWQsCi0gICAgICAgICAgICAgICAgbm9kZTogYmxvY2sKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgdGhpcy5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSA9IHRydWU7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAnZnVuY3Rpb24nKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoJ2FyZ3VtZW50cycsIHRoaXMpOwot
ICAgICAgICAgICAgICAgIHRoaXMudGFpbnRzLnNldCgnYXJndW1lbnRzJywgdHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5zZXQuc2V0KCdhcmd1bWVudHMnLCB2YXJpYWJsZSk7Ci0gICAgICAg
ICAgICAgICAgdGhpcy52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmIChibG9jay50eXBlID09PSBTeW50YXguRnVuY3Rpb25FeHByZXNzaW9u
ICYmIGJsb2NrLmlkKSB7Ci0gICAgICAgICAgICAgICAgbmV3IFNjb3BlKGJsb2NrLCB7IG5hbWlu
ZzogdHJ1ZSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgICAvKioKLSAg
ICAgICAgICogUmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQge0BsaW5rIFNjb3BlfHNjb3BlfS4KLSAg
ICAgICAgICogQG1lbWJlciB7U2NvcGV9IFNjb3BlI3VwcGVyCi0gICAgICAgICAqLwotICAgICAg
ICB0aGlzLnVwcGVyID0gY3VycmVudFNjb3BlOwotICAgICAgICAgLyoqCi0gICAgICAgICAqIFdo
ZXRoZXIgJ3VzZSBzdHJpY3QnIGlzIGluIGVmZmVjdCBpbiB0aGlzIHNjb3BlLgotICAgICAgICAg
KiBAbWVtYmVyIHtib29sZWFufSBTY29wZSNpc1N0cmljdAotICAgICAgICAgKi8KLSAgICAgICAg
dGhpcy5pc1N0cmljdCA9IGlzU3RyaWN0U2NvcGUodGhpcywgYmxvY2spOwotCi0gICAgICAgICAv
KioKLSAgICAgICAgICogTGlzdCBvZiBuZXN0ZWQge0BsaW5rIFNjb3BlfXMuCi0gICAgICAgICAq
IEBtZW1iZXIge1Njb3BlW119IFNjb3BlI2NoaWxkU2NvcGVzCi0gICAgICAgICAqLwotICAgICAg
ICB0aGlzLmNoaWxkU2NvcGVzID0gW107Ci0gICAgICAgIGlmIChjdXJyZW50U2NvcGUpIHsKLSAg
ICAgICAgICAgIGN1cnJlbnRTY29wZS5jaGlsZFNjb3Blcy5wdXNoKHRoaXMpOwotICAgICAgICB9
Ci0KLQotICAgICAgICAvLyBSQUlJCi0gICAgICAgIGN1cnJlbnRTY29wZSA9IHRoaXM7Ci0gICAg
ICAgIGlmICh0aGlzLnR5cGUgPT09ICdnbG9iYWwnKSB7Ci0gICAgICAgICAgICBnbG9iYWxTY29w
ZSA9IHRoaXM7Ci0gICAgICAgICAgICBnbG9iYWxTY29wZS5pbXBsaWNpdCA9IHsKLSAgICAgICAg
ICAgICAgICBzZXQ6IG5ldyBNYXAoKSwKLSAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IFtdCi0g
ICAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgICAgIHNjb3Blcy5wdXNoKHRoaXMpOwotICAg
IH0KLQotICAgIFNjb3BlLnByb3RvdHlwZS5fX2Nsb3NlID0gZnVuY3Rpb24gX19jbG9zZSgpIHsK
LSAgICAgICAgdmFyIGksIGl6LCByZWYsIGN1cnJlbnQsIG5vZGUsIGltcGxpY2l0OwotCi0gICAg
ICAgIC8vIEJlY2F1c2UgaWYgdGhpcyBpcyBnbG9iYWwgZW52aXJvbm1lbnQsIHVwcGVyIGlzIG51
bGwKLSAgICAgICAgaWYgKCF0aGlzLmR5bmFtaWMgfHwgb3B0aW9ucy5vcHRpbWlzdGljKSB7Ci0g
ICAgICAgICAgICAvLyBzdGF0aWMgcmVzb2x2ZQotICAgICAgICAgICAgZm9yIChpID0gMCwgaXog
PSB0aGlzLmxlZnQubGVuZ3RoOyBpIDwgaXo7ICsraSkgewotICAgICAgICAgICAgICAgIHJlZiA9
IHRoaXMubGVmdFtpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX19yZXNvbHZlKHJlZikp
IHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fX2RlbGVnYXRlVG9VcHBlclNjb3BlKHJlZik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gdGhpcyBpcyAiZ2xvYmFsIiAvICJ3aXRoIiAvICJmdW5jdGlvbiB3aXRoIGV2
YWwiIGVudmlyb25tZW50Ci0gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAnd2l0aCcpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHRoaXMubGVmdC5sZW5ndGg7IGkgPCBp
ejsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZiA9IHRoaXMubGVmdFtpXTsKLSAgICAg
ICAgICAgICAgICAgICAgcmVmLnRhaW50ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB0
aGlzLl9fZGVsZWdhdGVUb1VwcGVyU2NvcGUocmVmKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gdGhpcy5s
ZWZ0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gbm90aWZ5
IGFsbCBuYW1lcyBhcmUgdGhyb3VnaCB0byBnbG9iYWwKLSAgICAgICAgICAgICAgICAgICAgcmVm
ID0gdGhpcy5sZWZ0W2ldOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gdGhpczsKLSAg
ICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50
aHJvdWdoLnB1c2gocmVmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJy
ZW50LnVwcGVyOwotICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChjdXJyZW50KTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhp
cy50eXBlID09PSAnZ2xvYmFsJykgewotICAgICAgICAgICAgaW1wbGljaXQgPSBbXTsKLSAgICAg
ICAgICAgIGZvciAoaSA9IDAsIGl6ID0gdGhpcy5sZWZ0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsK
LSAgICAgICAgICAgICAgICByZWYgPSB0aGlzLmxlZnRbaV07Ci0gICAgICAgICAgICAgICAgaWYg
KHJlZi5fX21heWJlSW1wbGljaXRHbG9iYWwgJiYgIXRoaXMuc2V0LmhhcyhyZWYuaWRlbnRpZmll
ci5uYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBpbXBsaWNpdC5wdXNoKHJlZi5fX21heWJl
SW1wbGljaXRHbG9iYWwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gY3JlYXRlIGFuIGltcGxpY2l0IGdsb2JhbCB2YXJpYWJsZSBmcm9tIGFzc2ln
bm1lbnQgZXhwcmVzc2lvbgotICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBpbXBsaWNpdC5s
ZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IGltcGxpY2l0W2ld
OwotICAgICAgICAgICAgICAgIHRoaXMuX19kZWZpbmVJbXBsaWNpdChub2RlLmxlZnQsIHsKLSAg
ICAgICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuSW1wbGljaXRHbG9iYWxWYXJpYWJsZSwK
LSAgICAgICAgICAgICAgICAgICAgbmFtZTogbm9kZS5sZWZ0LAotICAgICAgICAgICAgICAgICAg
ICBub2RlOiBub2RlCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICB0aGlzLmxlZnQgPSBudWxsOwotICAgICAgICBjdXJyZW50U2NvcGUgPSB0
aGlzLnVwcGVyOwotICAgIH07Ci0KLSAgICBTY29wZS5wcm90b3R5cGUuX19yZXNvbHZlID0gZnVu
Y3Rpb24gX19yZXNvbHZlKHJlZikgewotICAgICAgICB2YXIgdmFyaWFibGUsIG5hbWU7Ci0gICAg
ICAgIG5hbWUgPSByZWYuaWRlbnRpZmllci5uYW1lOwotICAgICAgICBpZiAodGhpcy5zZXQuaGFz
KG5hbWUpKSB7Ci0gICAgICAgICAgICB2YXJpYWJsZSA9IHRoaXMuc2V0LmdldChuYW1lKTsKLSAg
ICAgICAgICAgIHZhcmlhYmxlLnJlZmVyZW5jZXMucHVzaChyZWYpOwotICAgICAgICAgICAgdmFy
aWFibGUuc3RhY2sgPSB2YXJpYWJsZS5zdGFjayAmJiByZWYuZnJvbS52YXJpYWJsZVNjb3BlID09
PSB0aGlzLnZhcmlhYmxlU2NvcGU7Ci0gICAgICAgICAgICBpZiAocmVmLnRhaW50ZWQpIHsKLSAg
ICAgICAgICAgICAgICB2YXJpYWJsZS50YWludGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB0
aGlzLnRhaW50cy5zZXQodmFyaWFibGUubmFtZSwgdHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZWYucmVzb2x2ZWQgPSB2YXJpYWJsZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9OwotCi0gICAgU2NvcGUu
cHJvdG90eXBlLl9fZGVsZWdhdGVUb1VwcGVyU2NvcGUgPSBmdW5jdGlvbiBfX2RlbGVnYXRlVG9V
cHBlclNjb3BlKHJlZikgewotICAgICAgICBpZiAodGhpcy51cHBlcikgewotICAgICAgICAgICAg
dGhpcy51cHBlci5sZWZ0LnB1c2gocmVmKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLnRocm91
Z2gucHVzaChyZWYpOwotICAgIH07Ci0KLSAgICBTY29wZS5wcm90b3R5cGUuX19kZWZpbmVJbXBs
aWNpdCA9IGZ1bmN0aW9uIF9fZGVmaW5lSW1wbGljaXQobm9kZSwgaW5mbykgewotICAgICAgICB2
YXIgbmFtZSwgdmFyaWFibGU7Ci0gICAgICAgIGlmIChub2RlICYmIG5vZGUudHlwZSA9PT0gU3lu
dGF4LklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIG5hbWUgPSBub2RlLm5hbWU7Ci0gICAgICAg
ICAgICBpZiAoIXRoaXMuaW1wbGljaXQuc2V0LmhhcyhuYW1lKSkgewotICAgICAgICAgICAgICAg
IHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKG5hbWUsIHRoaXMpOwotICAgICAgICAgICAgICAgIHZh
cmlhYmxlLmlkZW50aWZpZXJzLnB1c2gobm9kZSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUu
ZGVmcy5wdXNoKGluZm8pOwotICAgICAgICAgICAgICAgIHRoaXMuaW1wbGljaXQuc2V0LnNldChu
YW1lLCB2YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5pbXBsaWNpdC52YXJpYWJsZXMu
cHVzaCh2YXJpYWJsZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZh
cmlhYmxlID0gdGhpcy5pbXBsaWNpdC5zZXQuZ2V0KG5hbWUpOwotICAgICAgICAgICAgICAgIHZh
cmlhYmxlLmlkZW50aWZpZXJzLnB1c2gobm9kZSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUu
ZGVmcy5wdXNoKGluZm8pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IFNjb3BlLnByb3RvdHlwZS5fX2RlZmluZSA9IGZ1bmN0aW9uIF9fZGVmaW5lKG5vZGUsIGluZm8p
IHsKLSAgICAgICAgdmFyIG5hbWUsIHZhcmlhYmxlOwotICAgICAgICBpZiAobm9kZSAmJiBub2Rl
LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBuYW1lID0gbm9kZS5u
YW1lOwotICAgICAgICAgICAgaWYgKCF0aGlzLnNldC5oYXMobmFtZSkpIHsKLSAgICAgICAgICAg
ICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShuYW1lLCB0aGlzKTsKLSAgICAgICAgICAgICAg
ICB2YXJpYWJsZS5pZGVudGlmaWVycy5wdXNoKG5vZGUpOwotICAgICAgICAgICAgICAgIHZhcmlh
YmxlLmRlZnMucHVzaChpbmZvKTsKLSAgICAgICAgICAgICAgICB0aGlzLnNldC5zZXQobmFtZSwg
dmFyaWFibGUpOwotICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVzLnB1c2godmFyaWFibGUp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IHRoaXMu
c2V0LmdldChuYW1lKTsKLSAgICAgICAgICAgICAgICB2YXJpYWJsZS5pZGVudGlmaWVycy5wdXNo
KG5vZGUpOwotICAgICAgICAgICAgICAgIHZhcmlhYmxlLmRlZnMucHVzaChpbmZvKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBTY29wZS5wcm90b3R5cGUuX19yZWZl
cmVuY2luZyA9IGZ1bmN0aW9uIF9fcmVmZXJlbmNpbmcobm9kZSwgYXNzaWduLCB3cml0ZUV4cHIs
IG1heWJlSW1wbGljaXRHbG9iYWwpIHsKLSAgICAgICAgdmFyIHJlZjsKLSAgICAgICAgLy8gYmVj
YXVzZSBBcnJheSBlbGVtZW50IG1heSBiZSBudWxsCi0gICAgICAgIGlmIChub2RlICYmIG5vZGUu
dHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIHJlZiA9IG5ldyBSZWZl
cmVuY2Uobm9kZSwgdGhpcywgYXNzaWduIHx8IFJlZmVyZW5jZS5SRUFELCB3cml0ZUV4cHIsIG1h
eWJlSW1wbGljaXRHbG9iYWwpOwotICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VzLnB1c2gocmVm
KTsKLSAgICAgICAgICAgIHRoaXMubGVmdC5wdXNoKHJlZik7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgU2NvcGUucHJvdG90eXBlLl9fZGV0ZWN0RXZhbCA9IGZ1bmN0aW9uIF9fZGV0ZWN0RXZh
bCgpIHsKLSAgICAgICAgdmFyIGN1cnJlbnQ7Ci0gICAgICAgIGN1cnJlbnQgPSB0aGlzOwotICAg
ICAgICB0aGlzLmRpcmVjdENhbGxUb0V2YWxTY29wZSA9IHRydWU7Ci0gICAgICAgIGRvIHsKLSAg
ICAgICAgICAgIGN1cnJlbnQuZHluYW1pYyA9IHRydWU7Ci0gICAgICAgICAgICBjdXJyZW50ID0g
Y3VycmVudC51cHBlcjsKLSAgICAgICAgfSB3aGlsZSAoY3VycmVudCk7Ci0gICAgfTsKLQotICAg
IFNjb3BlLnByb3RvdHlwZS5fX2RldGVjdFRoaXMgPSBmdW5jdGlvbiBfX2RldGVjdFRoaXMoKSB7
Ci0gICAgICAgIHRoaXMudGhpc0ZvdW5kID0gdHJ1ZTsKLSAgICB9OwotCi0gICAgU2NvcGUucHJv
dG90eXBlLl9faXNDbG9zZWQgPSBmdW5jdGlvbiBpc0Nsb3NlZCgpIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMubGVmdCA9PT0gbnVsbDsKLSAgICB9OwotCi0gICAgLy8gQVBJIFNjb3BlI3Jlc29sdmUo
bmFtZSkKLSAgICAvLyByZXR1cm5zIHJlc29sdmVkIHJlZmVyZW5jZQotICAgIFNjb3BlLnByb3Rv
dHlwZS5yZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZShpZGVudCkgewotICAgICAgICB2YXIgcmVm
LCBpLCBpejsKLSAgICAgICAgYXNzZXJ0KHRoaXMuX19pc0Nsb3NlZCgpLCAnc2NvcGUgc2hvdWxk
IGJlIGNsb3NlZCcpOwotICAgICAgICBhc3NlcnQoaWRlbnQudHlwZSA9PT0gU3ludGF4LklkZW50
aWZpZXIsICd0YXJnZXQgc2hvdWxkIGJlIGlkZW50aWZpZXInKTsKLSAgICAgICAgZm9yIChpID0g
MCwgaXogPSB0aGlzLnJlZmVyZW5jZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgewotICAgICAgICAg
ICAgcmVmID0gdGhpcy5yZWZlcmVuY2VzW2ldOwotICAgICAgICAgICAgaWYgKHJlZi5pZGVudGlm
aWVyID09PSBpZGVudCkgewotICAgICAgICAgICAgICAgIHJldHVybiByZWY7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfTsKLQotICAgIC8vIEFQ
SSBTY29wZSNpc1N0YXRpYwotICAgIC8vIHJldHVybnMgdGhpcyBzY29wZSBpcyBzdGF0aWMKLSAg
ICBTY29wZS5wcm90b3R5cGUuaXNTdGF0aWMgPSBmdW5jdGlvbiBpc1N0YXRpYygpIHsKLSAgICAg
ICAgcmV0dXJuICF0aGlzLmR5bmFtaWM7Ci0gICAgfTsKLQotICAgIC8vIEFQSSBTY29wZSNpc0Fy
Z3VtZW50c01hdGVyaWFsaXplZAotICAgIC8vIHJldHVybiB0aGlzIHNjb3BlIGhhcyBtYXRlcmlh
bGl6ZWQgYXJndW1lbnRzCi0gICAgU2NvcGUucHJvdG90eXBlLmlzQXJndW1lbnRzTWF0ZXJpYWxp
emVkID0gZnVuY3Rpb24gaXNBcmd1bWVudHNNYXRlcmlhbGl6ZWQoKSB7Ci0gICAgICAgIC8vIFRP
RE8oQ29uc3RlbGxhdGlvbikKLSAgICAgICAgLy8gV2UgY2FuIG1vcmUgYWdncmVzc2l2ZSBvbiB0
aGlzIGNvbmRpdGlvbiBsaWtlIHRoaXMuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGZ1bmN0aW9u
IHQoKSB7Ci0gICAgICAgIC8vICAgICAvLyBhcmd1bWVudHMgb2YgdCBpcyBhbHdheXMgaGlkZGVu
LgotICAgICAgICAvLyAgICAgZnVuY3Rpb24gYXJndW1lbnRzKCkgewotICAgICAgICAvLyAgICAg
fQotICAgICAgICAvLyB9Ci0gICAgICAgIHZhciB2YXJpYWJsZTsKLQotICAgICAgICAvLyBUaGlz
IGlzIG5vdCBmdW5jdGlvbiBzY29wZQotICAgICAgICBpZiAodGhpcy50eXBlICE9PSAnZnVuY3Rp
b24nKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICghdGhpcy5pc1N0YXRpYygpKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZhcmlhYmxlID0gdGhpcy5zZXQuZ2V0KCdhcmd1bWVudHMnKTsKLSAgICAg
ICAgYXNzZXJ0KHZhcmlhYmxlLCAnYWx3YXlzIGhhdmUgYXJndW1lbnRzIHZhcmlhYmxlJyk7Ci0g
ICAgICAgIHJldHVybiB2YXJpYWJsZS50YWludGVkIHx8IHZhcmlhYmxlLnJlZmVyZW5jZXMubGVu
Z3RoICAhPT0gMDsKLSAgICB9OwotCi0gICAgLy8gQVBJIFNjb3BlI2lzVGhpc01hdGVyaWFsaXpl
ZAotICAgIC8vIHJldHVybiB0aGlzIHNjb3BlIGhhcyBtYXRlcmlhbGl6ZWQgYHRoaXNgIHJlZmVy
ZW5jZQotICAgIFNjb3BlLnByb3RvdHlwZS5pc1RoaXNNYXRlcmlhbGl6ZWQgPSBmdW5jdGlvbiBp
c1RoaXNNYXRlcmlhbGl6ZWQoKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgbm90IGZ1bmN0aW9uIHNj
b3BlCi0gICAgICAgIGlmICh0aGlzLnR5cGUgIT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdGhpcy5pc1N0YXRpYygpKSB7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhp
cy50aGlzRm91bmQ7Ci0gICAgfTsKLQotICAgIFNjb3BlLm1hbmdsZWROYW1lID0gJ19fJGVzY29w
ZSRfXyc7Ci0KLSAgICBTY29wZS5wcm90b3R5cGUuYXR0YWNoID0gZnVuY3Rpb24gYXR0YWNoKCkg
ewotICAgICAgICBpZiAoIXRoaXMuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUpIHsKLSAgICAgICAg
ICAgIHRoaXMuYmxvY2tbU2NvcGUubWFuZ2xlZE5hbWVdID0gdGhpczsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICBTY29wZS5wcm90b3R5cGUuZGV0YWNoID0gZnVuY3Rpb24gZGV0YWNoKCkgewot
ICAgICAgICBpZiAoIXRoaXMuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUpIHsKLSAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLmJsb2NrW1Njb3BlLm1hbmdsZWROYW1lXTsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICBTY29wZS5wcm90b3R5cGUuaXNVc2VkTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7Ci0g
ICAgICAgIGlmICh0aGlzLnNldC5oYXMobmFtZSkpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBpeiA9IHRoaXMudGhyb3VnaC5s
ZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy50aHJvdWdoW2ldLmlk
ZW50aWZpZXIubmFtZSA9PT0gbmFtZSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Owot
Ci0gICAgLyoqCi0gICAgICogQGNsYXNzIFNjb3BlTWFuYWdlcgotICAgICAqLwotICAgIGZ1bmN0
aW9uIFNjb3BlTWFuYWdlcihzY29wZXMpIHsKLSAgICAgICAgdGhpcy5zY29wZXMgPSBzY29wZXM7
Ci0gICAgICAgIHRoaXMuYXR0YWNoZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm5z
IGFwcHJvcGxpYXRlIHNjb3BlIGZvciB0aGlzIG5vZGUKLSAgICBTY29wZU1hbmFnZXIucHJvdG90
eXBlLl9fZ2V0ID0gZnVuY3Rpb24gX19nZXQobm9kZSkgewotICAgICAgICB2YXIgaSwgaXosIHNj
b3BlOwotICAgICAgICBpZiAodGhpcy5hdHRhY2hlZCkgewotICAgICAgICAgICAgcmV0dXJuIG5v
ZGVbU2NvcGUubWFuZ2xlZE5hbWVdIHx8IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFNj
b3BlLmlzU2NvcGVSZXF1aXJlZChub2RlKSkgewotICAgICAgICAgICAgZm9yIChpID0gMCwgaXog
PSB0aGlzLnNjb3Blcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAgICAgICAgc2Nv
cGUgPSB0aGlzLnNjb3Blc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXNjb3BlLmZ1bmN0aW9u
RXhwcmVzc2lvblNjb3BlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5ibG9jayA9
PT0gbm9kZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH07Ci0KLSAgICBTY29wZU1hbmFnZXIucHJv
dG90eXBlLmFjcXVpcmUgPSBmdW5jdGlvbiBhY3F1aXJlKG5vZGUpIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX19nZXQobm9kZSk7Ci0gICAgfTsKLQotICAgIFNjb3BlTWFuYWdlci5wcm90b3R5cGUu
cmVsZWFzZSA9IGZ1bmN0aW9uIHJlbGVhc2Uobm9kZSkgewotICAgICAgICB2YXIgc2NvcGUgPSB0
aGlzLl9fZ2V0KG5vZGUpOwotICAgICAgICBpZiAoc2NvcGUpIHsKLSAgICAgICAgICAgIHNjb3Bl
ID0gc2NvcGUudXBwZXI7Ci0gICAgICAgICAgICB3aGlsZSAoc2NvcGUpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIXNjb3BlLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3BlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzY29wZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
c2NvcGUgPSBzY29wZS51cHBlcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICB9OwotCi0gICAgU2NvcGVNYW5hZ2VyLnByb3RvdHlwZS5hdHRhY2gg
PSBmdW5jdGlvbiBhdHRhY2goKSB7Ci0gICAgICAgIHZhciBpLCBpejsKLSAgICAgICAgZm9yIChp
ID0gMCwgaXogPSB0aGlzLnNjb3Blcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAg
ICB0aGlzLnNjb3Blc1tpXS5hdHRhY2goKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmF0dGFj
aGVkID0gdHJ1ZTsKLSAgICB9OwotCi0gICAgU2NvcGVNYW5hZ2VyLnByb3RvdHlwZS5kZXRhY2gg
PSBmdW5jdGlvbiBkZXRhY2goKSB7Ci0gICAgICAgIHZhciBpLCBpejsKLSAgICAgICAgZm9yIChp
ID0gMCwgaXogPSB0aGlzLnNjb3Blcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAg
ICB0aGlzLnNjb3Blc1tpXS5kZXRhY2goKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmF0dGFj
aGVkID0gZmFsc2U7Ci0gICAgfTsKLQotICAgIFNjb3BlLmlzU2NvcGVSZXF1aXJlZCA9IGZ1bmN0
aW9uIGlzU2NvcGVSZXF1aXJlZChub2RlKSB7Ci0gICAgICAgIHJldHVybiBTY29wZS5pc1Zhcmlh
YmxlU2NvcGVSZXF1aXJlZChub2RlKSB8fCBub2RlLnR5cGUgPT09IFN5bnRheC5XaXRoU3RhdGVt
ZW50IHx8IG5vZGUudHlwZSA9PT0gU3ludGF4LkNhdGNoQ2xhdXNlOwotICAgIH07Ci0KLSAgICBT
Y29wZS5pc1ZhcmlhYmxlU2NvcGVSZXF1aXJlZCA9IGZ1bmN0aW9uIGlzVmFyaWFibGVTY29wZVJl
cXVpcmVkKG5vZGUpIHsKLSAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gU3ludGF4LlByb2dy
YW0gfHwgbm9kZS50eXBlID09PSBTeW50YXguRnVuY3Rpb25FeHByZXNzaW9uIHx8IG5vZGUudHlw
ZSA9PT0gU3ludGF4LkZ1bmN0aW9uRGVjbGFyYXRpb247Ci0gICAgfTsKLQotICAgIC8qKgotICAg
ICAqIE1haW4gaW50ZXJmYWNlIGZ1bmN0aW9uLiBUYWtlcyBhbiBFc3ByaW1hIHN5bnRheCB0cmVl
IGFuZCByZXR1cm5zIHRoZQotICAgICAqIGFuYWx5emVkIHNjb3Blcy4KLSAgICAgKiBAZnVuY3Rp
b24gYW5hbHl6ZQotICAgICAqIEBwYXJhbSB7ZXNwcmltYS5UcmVlfSB0cmVlCi0gICAgICogQHBh
cmFtIHtPYmplY3R9IHByb3ZpZGVkT3B0aW9ucyAtIE9wdGlvbnMgdGhhdCB0YWlsb3IgdGhlIHNj
b3BlIGFuYWx5c2lzCi0gICAgICogQHBhcmFtIHtib29sZWFufSBbcHJvdmlkZWRPcHRpb25zLm9w
dGltaXN0aWM9ZmFsc2VdIC0gdGhlIG9wdGltaXN0aWMgZmxhZwotICAgICAqIEBwYXJhbSB7Ym9v
bGVhbn0gW3Byb3ZpZGVkT3B0aW9ucy5kaXJlY3RpdmU9ZmFsc2VdLSB0aGUgZGlyZWN0aXZlIGZs
YWcKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm92aWRlZE9wdGlvbnMuaWdub3JlRXZhbD1m
YWxzZV0tIHdoZXRoZXIgdG8gY2hlY2sgJ2V2YWwoKScgY2FsbHMKLSAgICAgKiBAcmV0dXJuIHtT
Y29wZU1hbmFnZXJ9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gYW5hbHl6ZSh0cmVlLCBwcm92aWRl
ZE9wdGlvbnMpIHsKLSAgICAgICAgdmFyIHJlc3VsdFNjb3BlczsKLQotICAgICAgICBvcHRpb25z
ID0gdXBkYXRlRGVlcGx5KGRlZmF1bHRPcHRpb25zKCksIHByb3ZpZGVkT3B0aW9ucyk7Ci0gICAg
ICAgIHJlc3VsdFNjb3BlcyA9IHNjb3BlcyA9IFtdOwotICAgICAgICBjdXJyZW50U2NvcGUgPSBu
dWxsOwotICAgICAgICBnbG9iYWxTY29wZSA9IG51bGw7Ci0KLSAgICAgICAgLy8gYXR0YWNoIHNj
b3BlIGFuZCBjb2xsZWN0IC8gcmVzb2x2ZSBuYW1lcwotICAgICAgICBlc3RyYXZlcnNlLnRyYXZl
cnNlKHRyZWUsIHsKLSAgICAgICAgICAgIGVudGVyOiBmdW5jdGlvbiBlbnRlcihub2RlKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGksIGl6LCBkZWNsOwotICAgICAgICAgICAgICAgIGlmIChTY29w
ZS5pc1Njb3BlUmVxdWlyZWQobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3IFNjb3Bl
KG5vZGUsIHt9KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUudHlwZSkgewotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkFzc2lnbm1lbnRFeHBy
ZXNzaW9uOgotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvciA9PT0gJz0nKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2Rl
LmxlZnQsIFJlZmVyZW5jZS5XUklURSwgbm9kZS5yaWdodCwgKCFjdXJyZW50U2NvcGUuaXNTdHJp
Y3QgJiYgbm9kZS5sZWZ0Lm5hbWUgIT0gbnVsbCkgJiYgbm9kZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZl
cmVuY2luZyhub2RlLmxlZnQsIFJlZmVyZW5jZS5SVywgbm9kZS5yaWdodCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNp
bmcobm9kZS5yaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICAgICAgY2FzZSBTeW50YXguQXJyYXlFeHByZXNzaW9uOgotICAgICAgICAgICAgICAgICAgICBm
b3IgKGkgPSAwLCBpeiA9IG5vZGUuZWxlbWVudHMubGVuZ3RoOyBpIDwgaXo7ICsraSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5lbGVt
ZW50c1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5CbG9ja1N0YXRlbWVudDoKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5CaW5h
cnlFeHByZXNzaW9uOgotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVu
Y2luZyhub2RlLmxlZnQpOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZl
cmVuY2luZyhub2RlLnJpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgICAgICBjYXNlIFN5bnRheC5CcmVha1N0YXRlbWVudDoKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5DYWxsRXhwcmVzc2lvbjoK
LSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5jYWxs
ZWUpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGVbJ2FyZ3VtZW50
cyddLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGVbJ2FyZ3VtZW50cyddW2ldKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoaXMgaXMgZGlyZWN0
IGNhbGwgdG8gZXZhbAotICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuaWdub3JlRXZh
bCAmJiBub2RlLmNhbGxlZS50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBub2RlLmNhbGxl
ZS5uYW1lID09PSAnZXZhbCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29w
ZS52YXJpYWJsZVNjb3BlLl9fZGV0ZWN0RXZhbCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXgu
Q2F0Y2hDbGF1c2U6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX2RlZmluZShu
b2RlLnBhcmFtLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBWYXJpYWJsZS5DYXRj
aENsYXVzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUucGFyYW0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlCi0gICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4
LkNvbmRpdGlvbmFsRXhwcmVzc2lvbjoKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3Bl
Ll9fcmVmZXJlbmNpbmcobm9kZS50ZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNj
b3BlLl9fcmVmZXJlbmNpbmcobm9kZS5jb25zZXF1ZW50KTsKLSAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5hbHRlcm5hdGUpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkNvbnRpbnVlU3Rh
dGVtZW50OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNh
c2UgU3ludGF4LkRpcmVjdGl2ZVN0YXRlbWVudDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5Eb1doaWxlU3RhdGVtZW50OgotICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnRlc3QpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkRl
YnVnZ2VyU3RhdGVtZW50OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgICAgIGNhc2UgU3ludGF4LkVtcHR5U3RhdGVtZW50OgotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkV4cHJlc3Npb25TdGF0ZW1lbnQ6
Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuZXhw
cmVzc2lvbik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAg
Y2FzZSBTeW50YXguRm9yU3RhdGVtZW50OgotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Nv
cGUuX19yZWZlcmVuY2luZyhub2RlLmluaXQpOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50
U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnRlc3QpOwotICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnVwZGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguRm9ySW5TdGF0ZW1lbnQ6Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmxlZnQudHlwZSA9PT0gU3ludGF4LlZhcmlhYmxl
RGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3Jl
ZmVyZW5jaW5nKG5vZGUubGVmdC5kZWNsYXJhdGlvbnNbMF0uaWQsIFJlZmVyZW5jZS5XUklURSwg
bnVsbCwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5sZWZ0LCBSZWZlcmVu
Y2UuV1JJVEUsIG51bGwsICghY3VycmVudFNjb3BlLmlzU3RyaWN0ICYmIG5vZGUubGVmdC5uYW1l
ICE9IG51bGwpICYmIG5vZGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUucmlnaHQpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkZ1bmN0aW9u
RGVjbGFyYXRpb246Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uRGVjbGFyYXRpb24g
bmFtZSBpcyBkZWZpbmVkIGluIHVwcGVyIHNjb3BlCi0gICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRTY29wZS51cHBlci5fX2RlZmluZShub2RlLmlkLCB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlOiBWYXJpYWJsZS5GdW5jdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBu
YW1lOiBub2RlLmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZQotICAgICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBu
b2RlLnBhcmFtcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50U2NvcGUuX19kZWZpbmUobm9kZS5wYXJhbXNbaV0sIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlOiBWYXJpYWJsZS5QYXJhbWV0ZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZTogbm9kZS5wYXJhbXNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZTogbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaQot
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5GdW5j
dGlvbkV4cHJlc3Npb246Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlkIGlzIGRlZmluZWQgaW4g
dXBwZXIgc2NvcGUKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLnBh
cmFtcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50U2NvcGUuX19kZWZpbmUobm9kZS5wYXJhbXNbaV0sIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlOiBWYXJpYWJsZS5QYXJhbWV0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZTogbm9kZS5wYXJhbXNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZTogbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaQotICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5JZGVudGlmaWVy
OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3lu
dGF4LklmU3RhdGVtZW50OgotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZl
cmVuY2luZyhub2RlLnRlc3QpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgICAgIGNhc2UgU3ludGF4LkxpdGVyYWw6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguTGFiZWxlZFN0YXRlbWVudDoKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5Mb2dp
Y2FsRXhwcmVzc2lvbjoKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJl
bmNpbmcobm9kZS5sZWZ0KTsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVm
ZXJlbmNpbmcobm9kZS5yaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgICAgICAgICAgY2FzZSBTeW50YXguTWVtYmVyRXhwcmVzc2lvbjoKLSAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5vYmplY3QpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS5jb21wdXRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5wcm9wZXJ0eSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBj
YXNlIFN5bnRheC5OZXdFeHByZXNzaW9uOgotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Nv
cGUuX19yZWZlcmVuY2luZyhub2RlLmNhbGxlZSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
aSA9IDAsIGl6ID0gbm9kZVsnYXJndW1lbnRzJ10ubGVuZ3RoOyBpIDwgaXo7ICsraSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZVsnYXJn
dW1lbnRzJ11baV0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguT2JqZWN0RXhwcmVzc2lvbjoK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5bnRh
eC5Qcm9ncmFtOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAg
IGNhc2UgU3ludGF4LlByb3BlcnR5OgotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUu
X19yZWZlcmVuY2luZyhub2RlLnZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5SZXR1cm5TdGF0ZW1lbnQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuYXJndW1lbnQpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlNl
cXVlbmNlRXhwcmVzc2lvbjoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBu
b2RlLmV4cHJlc3Npb25zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuZXhwcmVzc2lvbnNbaV0pOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgICAgICAgICAgY2FzZSBTeW50YXguU3dpdGNoU3RhdGVtZW50OgotICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmRpc2NyaW1pbmFudCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguU3dp
dGNoQ2FzZToKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmco
bm9kZS50ZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAg
ICBjYXNlIFN5bnRheC5UaGlzRXhwcmVzc2lvbjoKLSAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFNjb3BlLnZhcmlhYmxlU2NvcGUuX19kZXRlY3RUaGlzKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVGhyb3dTdGF0ZW1lbnQ6Ci0g
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuYXJndW1l
bnQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2Ug
U3ludGF4LlRyeVN0YXRlbWVudDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgICAgICBjYXNlIFN5bnRheC5VbmFyeUV4cHJlc3Npb246Ci0gICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuYXJndW1lbnQpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlVwZGF0ZUV4
cHJlc3Npb246Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5n
KG5vZGUuYXJndW1lbnQsIFJlZmVyZW5jZS5SVywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVmFyaWFibGVEZWNsYXJhdGlv
bjoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmRlY2xhcmF0aW9u
cy5sZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWNsID0g
bm9kZS5kZWNsYXJhdGlvbnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Nv
cGUudmFyaWFibGVTY29wZS5fX2RlZmluZShkZWNsLmlkLCB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZTogVmFyaWFibGUuVmFyaWFibGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZTogZGVjbC5pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBk
ZWNsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudDogbm9kZQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbC5pbml0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZXIgaXMgZm91bmQKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhkZWNsLmlkLCBSZWZlcmVuY2Uu
V1JJVEUsIGRlY2wuaW5pdCwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKGRlY2wuaW5pdCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5WYXJpYWJsZURlY2xhcmF0b3I6Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguV2hp
bGVTdGF0ZW1lbnQ6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5j
aW5nKG5vZGUudGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICAgICAgY2FzZSBTeW50YXguV2l0aFN0YXRlbWVudDoKLSAgICAgICAgICAgICAgICAgICAgLy8g
V2l0aFN0YXRlbWVudCBvYmplY3QgaXMgcmVmZXJlbmNlZCBhdCB1cHBlciBzY29wZQotICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50U2NvcGUudXBwZXIuX19yZWZlcmVuY2luZyhub2RlLm9iamVj
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbiBsZWF2ZShub2RlKSB7Ci0g
ICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRTY29wZSAmJiBub2RlID09PSBjdXJyZW50U2Nv
cGUuYmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fY2xvc2UoKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IGFzc2VydChjdXJyZW50U2NvcGUgPT09IG51bGwpOwotICAgICAgICBnbG9iYWxTY29wZSA9IG51
bGw7Ci0gICAgICAgIHNjb3BlcyA9IG51bGw7Ci0gICAgICAgIG9wdGlvbnMgPSBudWxsOwotCi0g
ICAgICAgIHJldHVybiBuZXcgU2NvcGVNYW5hZ2VyKHJlc3VsdFNjb3Blcyk7Ci0gICAgfQotCi0g
ICAgLyoqIEBuYW1lIG1vZHVsZTplc2NvcGUudmVyc2lvbiAqLwotICAgIGV4cG9ydHMudmVyc2lv
biA9ICcxLjAuMSc7Ci0gICAgLyoqIEBuYW1lIG1vZHVsZTplc2NvcGUuUmVmZXJlbmNlICovCi0g
ICAgZXhwb3J0cy5SZWZlcmVuY2UgPSBSZWZlcmVuY2U7Ci0gICAgLyoqIEBuYW1lIG1vZHVsZTpl
c2NvcGUuVmFyaWFibGUgKi8KLSAgICBleHBvcnRzLlZhcmlhYmxlID0gVmFyaWFibGU7Ci0gICAg
LyoqIEBuYW1lIG1vZHVsZTplc2NvcGUuU2NvcGUgKi8KLSAgICBleHBvcnRzLlNjb3BlID0gU2Nv
cGU7Ci0gICAgLyoqIEBuYW1lIG1vZHVsZTplc2NvcGUuU2NvcGVNYW5hZ2VyICovCi0gICAgZXhw
b3J0cy5TY29wZU1hbmFnZXIgPSBTY29wZU1hbmFnZXI7Ci0gICAgLyoqIEBuYW1lIG1vZHVsZTpl
c2NvcGUuYW5hbHl6ZSAqLwotICAgIGV4cG9ydHMuYW5hbHl6ZSA9IGFuYWx5emU7Ci19LCB0aGlz
KSk7Ci0vKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqLwotCi19LHsiZXN0cmF2ZXJz
ZSI6N31dLDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoKLSAgQ29weXJp
Z2h0IChDKSAyMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgotICBD
b3B5cmlnaHQgKEMpIDIwMTMgVGhhZGRlZSBUeWwgPHRoYWRkZWUudHlsQGdtYWlsLmNvbT4KLSAg
Q29weXJpZ2h0IChDKSAyMDEzIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFpd2kuYmU+Ci0gIENv
cHlyaWdodCAoQykgMjAxMiBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT4K
LSAgQ29weXJpZ2h0IChDKSAyMDEyIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFpd2kuYmU+Ci0g
IENvcHlyaWdodCAoQykgMjAxMiBKb29zdC1XaW0gQm9la2VzdGVpam4gPGpvb3N0LXdpbUBib2Vr
ZXN0ZWlqbi5ubD4KLSAgQ29weXJpZ2h0IChDKSAyMDEyIEtyaXMgS293YWwgPGtyaXMua293YWxA
Y2l4YXIuY29tPgotICBDb3B5cmlnaHQgKEMpIDIwMTIgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50
ZWFAZ21haWwuY29tPgotICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJwYWQgQm9yc29zIDxhcnBhZC5i
b3Jzb3NAZ29vZ2xlbWFpbC5jb20+Ci0gIENvcHlyaWdodCAoQykgMjAxMSBBcml5YSBIaWRheWF0
IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT4KLQotICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6Ci0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLSAg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZCi0g
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotKi8KLQotLypqc2xpbnQgYml0d2lzZTp0cnVlIHBsdXNwbHVzOnRydWUgKi8KLS8qZ2xvYmFs
IGVzcHJpbWE6dHJ1ZSwgZGVmaW5lOnRydWUsIGV4cG9ydHM6dHJ1ZSwgd2luZG93OiB0cnVlLAot
dGhyb3dFcnJvclRvbGVyYW50OiB0cnVlLAotdGhyb3dFcnJvcjogdHJ1ZSwgZ2VuZXJhdGVTdGF0
ZW1lbnQ6IHRydWUsIHBlZWs6IHRydWUsCi1wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uOiB0cnVl
LCBwYXJzZUJsb2NrOiB0cnVlLCBwYXJzZUV4cHJlc3Npb246IHRydWUsCi1wYXJzZUZ1bmN0aW9u
RGVjbGFyYXRpb246IHRydWUsIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uOiB0cnVlLAotcGFyc2VG
dW5jdGlvblNvdXJjZUVsZW1lbnRzOiB0cnVlLCBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcjogdHJ1
ZSwKLXBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbjogdHJ1ZSwKLXBhcnNlVW5hcnlFeHByZXNz
aW9uOiB0cnVlLAotcGFyc2VTdGF0ZW1lbnQ6IHRydWUsIHBhcnNlU291cmNlRWxlbWVudDogdHJ1
ZSAqLwotCi0oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0K
LSAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQs
IENvbW1vbkpTL05vZGUuanMsCi0gICAgLy8gUmhpbm8sIGFuZCBwbGFpbiBicm93c2VyIGxvYWRp
bmcuCi0KLSAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLwotICAgIGlmICh0eXBlb2YgZGVm
aW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsKLSAgICAgICAgZGVmaW5lKFsnZXhw
b3J0cyddLCBmYWN0b3J5KTsKLSAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5k
ZWZpbmVkJykgewotICAgICAgICBmYWN0b3J5KGV4cG9ydHMpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGZhY3RvcnkoKHJvb3QuZXNwcmltYSA9IHt9KSk7Ci0gICAgfQotfSh0aGlzLCBmdW5jdGlv
biAoZXhwb3J0cykgewotICAgICd1c2Ugc3RyaWN0JzsKLQotICAgIHZhciBUb2tlbiwKLSAgICAg
ICAgVG9rZW5OYW1lLAotICAgICAgICBGbkV4cHJUb2tlbnMsCi0gICAgICAgIFN5bnRheCwKLSAg
ICAgICAgUHJvcGVydHlLaW5kLAotICAgICAgICBNZXNzYWdlcywKLSAgICAgICAgUmVnZXgsCi0g
ICAgICAgIFN5bnRheFRyZWVEZWxlZ2F0ZSwKLSAgICAgICAgc291cmNlLAotICAgICAgICBzdHJp
Y3QsCi0gICAgICAgIGluZGV4LAotICAgICAgICBsaW5lTnVtYmVyLAotICAgICAgICBsaW5lU3Rh
cnQsCi0gICAgICAgIGxlbmd0aCwKLSAgICAgICAgZGVsZWdhdGUsCi0gICAgICAgIGxvb2thaGVh
ZCwKLSAgICAgICAgc3RhdGUsCi0gICAgICAgIGV4dHJhOwotCi0gICAgVG9rZW4gPSB7Ci0gICAg
ICAgIEJvb2xlYW5MaXRlcmFsOiAxLAotICAgICAgICBFT0Y6IDIsCi0gICAgICAgIElkZW50aWZp
ZXI6IDMsCi0gICAgICAgIEtleXdvcmQ6IDQsCi0gICAgICAgIE51bGxMaXRlcmFsOiA1LAotICAg
ICAgICBOdW1lcmljTGl0ZXJhbDogNiwKLSAgICAgICAgUHVuY3R1YXRvcjogNywKLSAgICAgICAg
U3RyaW5nTGl0ZXJhbDogOCwKLSAgICAgICAgUmVndWxhckV4cHJlc3Npb246IDkKLSAgICB9Owot
Ci0gICAgVG9rZW5OYW1lID0ge307Ci0gICAgVG9rZW5OYW1lW1Rva2VuLkJvb2xlYW5MaXRlcmFs
XSA9ICdCb29sZWFuJzsKLSAgICBUb2tlbk5hbWVbVG9rZW4uRU9GXSA9ICc8ZW5kPic7Ci0gICAg
VG9rZW5OYW1lW1Rva2VuLklkZW50aWZpZXJdID0gJ0lkZW50aWZpZXInOwotICAgIFRva2VuTmFt
ZVtUb2tlbi5LZXl3b3JkXSA9ICdLZXl3b3JkJzsKLSAgICBUb2tlbk5hbWVbVG9rZW4uTnVsbExp
dGVyYWxdID0gJ051bGwnOwotICAgIFRva2VuTmFtZVtUb2tlbi5OdW1lcmljTGl0ZXJhbF0gPSAn
TnVtZXJpYyc7Ci0gICAgVG9rZW5OYW1lW1Rva2VuLlB1bmN0dWF0b3JdID0gJ1B1bmN0dWF0b3In
OwotICAgIFRva2VuTmFtZVtUb2tlbi5TdHJpbmdMaXRlcmFsXSA9ICdTdHJpbmcnOwotICAgIFRv
a2VuTmFtZVtUb2tlbi5SZWd1bGFyRXhwcmVzc2lvbl0gPSAnUmVndWxhckV4cHJlc3Npb24nOwot
Ci0gICAgLy8gQSBmdW5jdGlvbiBmb2xsb3dpbmcgb25lIG9mIHRob3NlIHRva2VucyBpcyBhbiBl
eHByZXNzaW9uLgotICAgIEZuRXhwclRva2VucyA9IFsnKCcsICd7JywgJ1snLCAnaW4nLCAndHlw
ZW9mJywgJ2luc3RhbmNlb2YnLCAnbmV3JywKLSAgICAgICAgICAgICAgICAgICAgJ3JldHVybics
ICdjYXNlJywgJ2RlbGV0ZScsICd0aHJvdycsICd2b2lkJywKLSAgICAgICAgICAgICAgICAgICAg
Ly8gYXNzaWdubWVudCBvcGVyYXRvcnMKLSAgICAgICAgICAgICAgICAgICAgJz0nLCAnKz0nLCAn
LT0nLCAnKj0nLCAnLz0nLCAnJT0nLCAnPDw9JywgJz4+PScsICc+Pj49JywKLSAgICAgICAgICAg
ICAgICAgICAgJyY9JywgJ3w9JywgJ149JywgJywnLAotICAgICAgICAgICAgICAgICAgICAvLyBi
aW5hcnkvdW5hcnkgb3BlcmF0b3JzCi0gICAgICAgICAgICAgICAgICAgICcrJywgJy0nLCAnKics
ICcvJywgJyUnLCAnKysnLCAnLS0nLCAnPDwnLCAnPj4nLCAnPj4+JywgJyYnLAotICAgICAgICAg
ICAgICAgICAgICAnfCcsICdeJywgJyEnLCAnficsICcmJicsICd8fCcsICc/JywgJzonLCAnPT09
JywgJz09JywgJz49JywKLSAgICAgICAgICAgICAgICAgICAgJzw9JywgJzwnLCAnPicsICchPScs
ICchPT0nXTsKLQotICAgIFN5bnRheCA9IHsKLSAgICAgICAgQXNzaWdubWVudEV4cHJlc3Npb246
ICdBc3NpZ25tZW50RXhwcmVzc2lvbicsCi0gICAgICAgIEFycmF5RXhwcmVzc2lvbjogJ0FycmF5
RXhwcmVzc2lvbicsCi0gICAgICAgIEJsb2NrU3RhdGVtZW50OiAnQmxvY2tTdGF0ZW1lbnQnLAot
ICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiAnQmluYXJ5RXhwcmVzc2lvbicsCi0gICAgICAgIEJy
ZWFrU3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1lbnQnLAotICAgICAgICBDYWxsRXhwcmVzc2lvbjog
J0NhbGxFeHByZXNzaW9uJywKLSAgICAgICAgQ2F0Y2hDbGF1c2U6ICdDYXRjaENsYXVzZScsCi0g
ICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbicsCi0g
ICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQnLAotICAgICAgICBE
b1doaWxlU3RhdGVtZW50OiAnRG9XaGlsZVN0YXRlbWVudCcsCi0gICAgICAgIERlYnVnZ2VyU3Rh
dGVtZW50OiAnRGVidWdnZXJTdGF0ZW1lbnQnLAotICAgICAgICBFbXB0eVN0YXRlbWVudDogJ0Vt
cHR5U3RhdGVtZW50JywKLSAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudDogJ0V4cHJlc3Npb25T
dGF0ZW1lbnQnLAotICAgICAgICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLAotICAgICAg
ICBGb3JJblN0YXRlbWVudDogJ0ZvckluU3RhdGVtZW50JywKLSAgICAgICAgRnVuY3Rpb25EZWNs
YXJhdGlvbjogJ0Z1bmN0aW9uRGVjbGFyYXRpb24nLAotICAgICAgICBGdW5jdGlvbkV4cHJlc3Np
b246ICdGdW5jdGlvbkV4cHJlc3Npb24nLAotICAgICAgICBJZGVudGlmaWVyOiAnSWRlbnRpZmll
cicsCi0gICAgICAgIElmU3RhdGVtZW50OiAnSWZTdGF0ZW1lbnQnLAotICAgICAgICBMaXRlcmFs
OiAnTGl0ZXJhbCcsCi0gICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6ICdMYWJlbGVkU3RhdGVtZW50
JywKLSAgICAgICAgTG9naWNhbEV4cHJlc3Npb246ICdMb2dpY2FsRXhwcmVzc2lvbicsCi0gICAg
ICAgIE1lbWJlckV4cHJlc3Npb246ICdNZW1iZXJFeHByZXNzaW9uJywKLSAgICAgICAgTmV3RXhw
cmVzc2lvbjogJ05ld0V4cHJlc3Npb24nLAotICAgICAgICBPYmplY3RFeHByZXNzaW9uOiAnT2Jq
ZWN0RXhwcmVzc2lvbicsCi0gICAgICAgIFByb2dyYW06ICdQcm9ncmFtJywKLSAgICAgICAgUHJv
cGVydHk6ICdQcm9wZXJ0eScsCi0gICAgICAgIFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0YXRl
bWVudCcsCi0gICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogJ1NlcXVlbmNlRXhwcmVzc2lvbics
Ci0gICAgICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsCi0gICAgICAgIFN3
aXRjaENhc2U6ICdTd2l0Y2hDYXNlJywKLSAgICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhw
cmVzc2lvbicsCi0gICAgICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLAotICAg
ICAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLAotICAgICAgICBVbmFyeUV4cHJlc3Np
b246ICdVbmFyeUV4cHJlc3Npb24nLAotICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBkYXRl
RXhwcmVzc2lvbicsCi0gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURlY2xh
cmF0aW9uJywKLSAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJhdG9y
JywKLSAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsCi0gICAgICAgIFdp
dGhTdGF0ZW1lbnQ6ICdXaXRoU3RhdGVtZW50JwotICAgIH07Ci0KLSAgICBQcm9wZXJ0eUtpbmQg
PSB7Ci0gICAgICAgIERhdGE6IDEsCi0gICAgICAgIEdldDogMiwKLSAgICAgICAgU2V0OiA0Ci0g
ICAgfTsKLQotICAgIC8vIEVycm9yIG1lc3NhZ2VzIHNob3VsZCBiZSBpZGVudGljYWwgdG8gVjgu
Ci0gICAgTWVzc2FnZXMgPSB7Ci0gICAgICAgIFVuZXhwZWN0ZWRUb2tlbjogICdVbmV4cGVjdGVk
IHRva2VuICUwJywKLSAgICAgICAgVW5leHBlY3RlZE51bWJlcjogICdVbmV4cGVjdGVkIG51bWJl
cicsCi0gICAgICAgIFVuZXhwZWN0ZWRTdHJpbmc6ICAnVW5leHBlY3RlZCBzdHJpbmcnLAotICAg
ICAgICBVbmV4cGVjdGVkSWRlbnRpZmllcjogICdVbmV4cGVjdGVkIGlkZW50aWZpZXInLAotICAg
ICAgICBVbmV4cGVjdGVkUmVzZXJ2ZWQ6ICAnVW5leHBlY3RlZCByZXNlcnZlZCB3b3JkJywKLSAg
ICAgICAgVW5leHBlY3RlZEVPUzogICdVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCcsCi0gICAgICAg
IE5ld2xpbmVBZnRlclRocm93OiAgJ0lsbGVnYWwgbmV3bGluZSBhZnRlciB0aHJvdycsCi0gICAg
ICAgIEludmFsaWRSZWdFeHA6ICdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbicsCi0gICAgICAg
IFVudGVybWluYXRlZFJlZ0V4cDogICdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogbWlzc2lu
ZyAvJywKLSAgICAgICAgSW52YWxpZExIU0luQXNzaWdubWVudDogICdJbnZhbGlkIGxlZnQtaGFu
ZCBzaWRlIGluIGFzc2lnbm1lbnQnLAotICAgICAgICBJbnZhbGlkTEhTSW5Gb3JJbjogICdJbnZh
bGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvci1pbicsCi0gICAgICAgIE11bHRpcGxlRGVmYXVsdHNJ
blN3aXRjaDogJ01vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVu
dCcsCi0gICAgICAgIE5vQ2F0Y2hPckZpbmFsbHk6ICAnTWlzc2luZyBjYXRjaCBvciBmaW5hbGx5
IGFmdGVyIHRyeScsCi0gICAgICAgIFVua25vd25MYWJlbDogJ1VuZGVmaW5lZCBsYWJlbCBcJyUw
XCcnLAotICAgICAgICBSZWRlY2xhcmF0aW9uOiAnJTAgXCclMVwnIGhhcyBhbHJlYWR5IGJlZW4g
ZGVjbGFyZWQnLAotICAgICAgICBJbGxlZ2FsQ29udGludWU6ICdJbGxlZ2FsIGNvbnRpbnVlIHN0
YXRlbWVudCcsCi0gICAgICAgIElsbGVnYWxCcmVhazogJ0lsbGVnYWwgYnJlYWsgc3RhdGVtZW50
JywKLSAgICAgICAgSWxsZWdhbFJldHVybjogJ0lsbGVnYWwgcmV0dXJuIHN0YXRlbWVudCcsCi0g
ICAgICAgIFN0cmljdE1vZGVXaXRoOiAgJ1N0cmljdCBtb2RlIGNvZGUgbWF5IG5vdCBpbmNsdWRl
IGEgd2l0aCBzdGF0ZW1lbnQnLAotICAgICAgICBTdHJpY3RDYXRjaFZhcmlhYmxlOiAgJ0NhdGNo
IHZhcmlhYmxlIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAot
ICAgICAgICBTdHJpY3RWYXJOYW1lOiAgJ1ZhcmlhYmxlIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9y
IGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZScsCi0gICAgICAgIFN0cmljdFBhcmFtTmFtZTogICdQ
YXJhbWV0ZXIgbmFtZSBldmFsIG9yIGFyZ3VtZW50cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJpY3Qg
bW9kZScsCi0gICAgICAgIFN0cmljdFBhcmFtRHVwZTogJ1N0cmljdCBtb2RlIGZ1bmN0aW9uIG1h
eSBub3QgaGF2ZSBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzJywKLSAgICAgICAgU3RyaWN0RnVu
Y3Rpb25OYW1lOiAgJ0Z1bmN0aW9uIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBp
biBzdHJpY3QgbW9kZScsCi0gICAgICAgIFN0cmljdE9jdGFsTGl0ZXJhbDogICdPY3RhbCBsaXRl
cmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuJywKLSAgICAgICAgU3RyaWN0RGVs
ZXRlOiAgJ0RlbGV0ZSBvZiBhbiB1bnF1YWxpZmllZCBpZGVudGlmaWVyIGluIHN0cmljdCBtb2Rl
LicsCi0gICAgICAgIFN0cmljdER1cGxpY2F0ZVByb3BlcnR5OiAgJ0R1cGxpY2F0ZSBkYXRhIHBy
b3BlcnR5IGluIG9iamVjdCBsaXRlcmFsIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKLSAg
ICAgICAgQWNjZXNzb3JEYXRhUHJvcGVydHk6ICAnT2JqZWN0IGxpdGVyYWwgbWF5IG5vdCBoYXZl
IGRhdGEgYW5kIGFjY2Vzc29yIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZScsCi0gICAgICAg
IEFjY2Vzc29yR2V0U2V0OiAgJ09iamVjdCBsaXRlcmFsIG1heSBub3QgaGF2ZSBtdWx0aXBsZSBn
ZXQvc2V0IGFjY2Vzc29ycyB3aXRoIHRoZSBzYW1lIG5hbWUnLAotICAgICAgICBTdHJpY3RMSFNB
c3NpZ25tZW50OiAgJ0Fzc2lnbm1lbnQgdG8gZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93
ZWQgaW4gc3RyaWN0IG1vZGUnLAotICAgICAgICBTdHJpY3RMSFNQb3N0Zml4OiAgJ1Bvc3RmaXgg
aW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFu
ZCBpbiBzdHJpY3QgbW9kZScsCi0gICAgICAgIFN0cmljdExIU1ByZWZpeDogICdQcmVmaXggaW5j
cmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBp
biBzdHJpY3QgbW9kZScsCi0gICAgICAgIFN0cmljdFJlc2VydmVkV29yZDogICdVc2Ugb2YgZnV0
dXJlIHJlc2VydmVkIHdvcmQgaW4gc3RyaWN0IG1vZGUnCi0gICAgfTsKLQotICAgIC8vIFNlZSBh
bHNvIHRvb2xzL2dlbmVyYXRlLXVuaWNvZGUtcmVnZXgucHkuCi0gICAgUmVnZXggPSB7Ci0gICAg
ICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OiBuZXcgUmVnRXhwKCdbXHhBQVx4QjVceEJBXHhD
MC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJF
Q1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4
LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4
QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFcdTA1
RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2
RTVcdTA2RTZcdTA2RUVcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcy
Rlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAw
LVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBcdTA4QTItXHUwOEFD
XHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XHUwOTc5
LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlC
MFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUx
XHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQVx1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEt
XHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUwQTU5LVx1MEE1Q1x1
MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThc
dTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1
MEFFMVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1
MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUw
QjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUw
QjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBC
QjlcdTBCRDBcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUw
QzMzXHUwQzM1LVx1MEMzOVx1MEMzRFx1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBD
OENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUw
Q0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBE
MTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4
NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBF
MDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MVx1MEU4Mlx1MEU4NFx1MEU4
N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVB
M1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRc
dTBFQzAtXHUwRUM0XHUwRUM2XHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDkt
XHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVB
LVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXHUxMDhF
XHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRB
LVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4
QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEy
QzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1
MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q1x1MTY2Ri1cdTE2N0Zc
dTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTZFRS1cdTE2RjBcdTE3MDAtXHUxNzBDXHUxNzBF
LVx1MTcxMVx1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3
NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4
QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUx
OTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XHUxQTIwLVx1MUE1NFx1MUFBN1x1
MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRlx1MUJCQS1c
dTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VD
XHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4
LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1
Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZD
Mi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM1x1MUZENi1cdTFGREJcdTFGRTAtXHUx
RkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZcdTIwOTAtXHUyMDlDXHUy
MTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIx
MjhcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUy
MTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1
MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1
MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1c
dTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2
XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDI5XHUzMDMxLVx1MzAz
NVx1MzAzOC1cdTMwM0NcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMw
RkMtXHUzMEZGXHUzMTA1LVx1MzEyRFx1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1
MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRc
dUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQlx1QTY0MC1cdUE2NkVcdUE2N0Yt
XHVBNjk3XHVBNkEwLVx1QTZFRlx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XHVBNzhCLVx1QTc4
RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4
MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1
QThGN1x1QThGQlx1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1c
dUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAt
XHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNVx1QUFCNlx1QUFCOS1cdUFBQkRc
dUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFCMDEt
XHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIy
RVx1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5
MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVG
QjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVG
QjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RcdUZENTAtXHVGRDhGXHVGRDkyLVx1
RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ1x1RkYyMS1cdUZGM0Fc
dUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQy
LVx1RkZEN1x1RkZEQS1cdUZGRENdJyksCi0gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6
IG5ldyBSZWdFeHAoJ1tceEFBXHhCNVx4QkFceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1
MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzAwLVx1MDM3NFx1MDM3Nlx1
MDM3N1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1
MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDgzLVx1MDQ4N1x1MDQ4QS1cdTA1MjdcdTA1MzEt
XHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzFcdTA1QzJc
dTA1QzRcdTA1QzVcdTA1QzdcdTA1RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYxMC1cdTA2MUFc
dTA2MjAtXHUwNjY5XHUwNjZFLVx1MDZEM1x1MDZENS1cdTA2RENcdTA2REYtXHUwNkU4XHUwNkVB
LVx1MDZGQ1x1MDZGRlx1MDcxMC1cdTA3NEFcdTA3NEQtXHUwN0IxXHUwN0MwLVx1MDdGNVx1MDdG
QVx1MDgwMC1cdTA4MkRcdTA4NDAtXHUwODVCXHUwOEEwXHUwOEEyLVx1MDhBQ1x1MDhFNC1cdTA4
RkVcdTA5MDAtXHUwOTYzXHUwOTY2LVx1MDk2Rlx1MDk3MS1cdTA5NzdcdTA5NzktXHUwOTdGXHUw
OTgxLVx1MDk4M1x1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1
MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkMtXHUwOUM0XHUwOUM3XHUwOUM4XHUwOUNCLVx1
MDlDRVx1MDlEN1x1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTNcdTA5RTYtXHUwOUYxXHUwQTAxLVx1
MEEwM1x1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1
MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOVx1MEEzQ1x1MEEzRS1cdTBBNDJcdTBB
NDdcdTBBNDhcdTBBNEItXHUwQTREXHUwQTUxXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE2Ni1cdTBB
NzVcdTBBODEtXHUwQTgzXHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XHUw
QUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkMtXHUwQUM1XHUwQUM3LVx1
MEFDOVx1MEFDQi1cdTBBQ0RcdTBBRDBcdTBBRTAtXHUwQUUzXHUwQUU2LVx1MEFFRlx1MEIwMS1c
dTBCMDNcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBc
dTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNDLVx1MEI0NFx1MEI0N1x1MEI0OFx1MEI0Qi1c
dTBCNERcdTBCNTZcdTBCNTdcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYzXHUwQjY2LVx1MEI2Rlx1
MEI3MVx1MEI4Mlx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1
MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBC
QUUtXHUwQkI5XHUwQkJFLVx1MEJDMlx1MEJDNi1cdTBCQzhcdTBCQ0EtXHUwQkNEXHUwQkQwXHUw
QkQ3XHUwQkU2LVx1MEJFRlx1MEMwMS1cdTBDMDNcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1
MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRC1cdTBDNDRcdTBDNDYt
XHUwQzQ4XHUwQzRBLVx1MEM0RFx1MEM1NVx1MEM1Nlx1MEM1OFx1MEM1OVx1MEM2MC1cdTBDNjNc
dTBDNjYtXHUwQzZGXHUwQzgyXHUwQzgzXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTIt
XHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkMtXHUwQ0M0XHUwQ0M2LVx1MEND
OFx1MENDQS1cdTBDQ0RcdTBDRDVcdTBDRDZcdTBDREVcdTBDRTAtXHUwQ0UzXHUwQ0U2LVx1MENF
Rlx1MENGMVx1MENGMlx1MEQwMlx1MEQwM1x1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEy
LVx1MEQzQVx1MEQzRC1cdTBENDRcdTBENDYtXHUwRDQ4XHUwRDRBLVx1MEQ0RVx1MEQ1N1x1MEQ2
MC1cdTBENjNcdTBENjYtXHUwRDZGXHUwRDdBLVx1MEQ3Rlx1MEQ4Mlx1MEQ4M1x1MEQ4NS1cdTBE
OTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBEQ0FcdTBE
Q0YtXHUwREQ0XHUwREQ2XHUwREQ4LVx1MERERlx1MERGMlx1MERGM1x1MEUwMS1cdTBFM0FcdTBF
NDAtXHUwRTRFXHUwRTUwLVx1MEU1OVx1MEU4MVx1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4
QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM1x1MEVBNVx1MEVB
N1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjlcdTBFQkItXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVD
Nlx1MEVDOC1cdTBFQ0RcdTBFRDAtXHUwRUQ5XHUwRURDLVx1MEVERlx1MEYwMFx1MEYxOFx1MEYx
OVx1MEYyMC1cdTBGMjlcdTBGMzVcdTBGMzdcdTBGMzlcdTBGM0UtXHUwRjQ3XHUwRjQ5LVx1MEY2
Q1x1MEY3MS1cdTBGODRcdTBGODYtXHUwRjk3XHUwRjk5LVx1MEZCQ1x1MEZDNlx1MTAwMC1cdTEw
NDlcdTEwNTAtXHUxMDlEXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEw
RkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUx
MjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1c
dTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTIt
XHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM1RC1cdTEzNUZcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNG
NFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2
RUUtXHUxNkYwXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTRcdTE3MjAtXHUxNzM0XHUxNzQwLVx1
MTc1M1x1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzcyXHUxNzczXHUxNzgwLVx1MTdEM1x1
MTdEN1x1MTdEQ1x1MTdERFx1MTdFMC1cdTE3RTlcdTE4MEItXHUxODBEXHUxODEwLVx1MTgxOVx1
MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNcdTE5MjAt
XHUxOTJCXHUxOTMwLVx1MTkzQlx1MTk0Ni1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlB
Qlx1MTlCMC1cdTE5QzlcdTE5RDAtXHUxOUQ5XHUxQTAwLVx1MUExQlx1MUEyMC1cdTFBNUVcdTFB
NjAtXHUxQTdDXHUxQTdGLVx1MUE4OVx1MUE5MC1cdTFBOTlcdTFBQTdcdTFCMDAtXHUxQjRCXHUx
QjUwLVx1MUI1OVx1MUI2Qi1cdTFCNzNcdTFCODAtXHUxQkYzXHUxQzAwLVx1MUMzN1x1MUM0MC1c
dTFDNDlcdTFDNEQtXHUxQzdEXHUxQ0QwLVx1MUNEMlx1MUNENC1cdTFDRjZcdTFEMDAtXHUxREU2
XHUxREZDLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1
MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZC
Ni1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFG
RDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDBDXHUy
MDBEXHUyMDNGXHUyMDQwXHUyMDU0XHUyMDcxXHUyMDdGXHUyMDkwLVx1MjA5Q1x1MjBEMC1cdTIw
RENcdTIwRTFcdTIwRTUtXHUyMEYwXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjEx
OS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEz
Qy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJDMkVcdTJD
MzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUy
RDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ3Ri1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1
MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0Vc
dTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkRFMC1cdTJERkZcdTJFMkZcdTMwMDUtXHUzMDA3
XHUzMDIxLVx1MzAyRlx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5
OVx1MzA5QVx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMx
MkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0
RTAwLVx1OUZDQ1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1c
dUE2MkJcdUE2NDAtXHVBNjZGXHVBNjc0LVx1QTY3RFx1QTY3Ri1cdUE2OTdcdUE2OUYtXHVBNkYx
XHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdB
MC1cdUE3QUFcdUE3RjgtXHVBODI3XHVBODQwLVx1QTg3M1x1QTg4MC1cdUE4QzRcdUE4RDAtXHVB
OEQ5XHVBOEUwLVx1QThGN1x1QThGQlx1QTkwMC1cdUE5MkRcdUE5MzAtXHVBOTUzXHVBOTYwLVx1
QTk3Q1x1QTk4MC1cdUE5QzBcdUE5Q0YtXHVBOUQ5XHVBQTAwLVx1QUEzNlx1QUE0MC1cdUFBNERc
dUFBNTAtXHVBQTU5XHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE3Qlx1QUE4MC1cdUFBQzJcdUFBREIt
XHVBQUREXHVBQUUwLVx1QUFFRlx1QUFGMi1cdUFBRjZcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIw
RVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUJDMC1cdUFCRUFcdUFC
RUNcdUFCRURcdUFCRjAtXHVBQkY5XHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVE
N0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1
RkIxRC1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1
RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1c
dUZEQzdcdUZERjAtXHVGREZCXHVGRTAwLVx1RkUwRlx1RkUyMC1cdUZFMjZcdUZFMzNcdUZFMzRc
dUZFNEQtXHVGRTRGXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMTAtXHVGRjE5XHVGRjIx
LVx1RkYzQVx1RkYzRlx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZD
QS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10nKQotICAgIH07Ci0KLSAgICAvLyBF
bnN1cmUgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLCBvdGhlcndpc2UgdGhyb3cgYW4gZXJyb3IuCi0g
ICAgLy8gVGhpcyBpcyBvbmx5IHRvIGhhdmUgYSBiZXR0ZXIgY29udHJhY3Qgc2VtYW50aWMsIGku
ZS4gYW5vdGhlciBzYWZldHkgbmV0Ci0gICAgLy8gdG8gY2F0Y2ggYSBsb2dpYyBlcnJvci4gVGhl
IGNvbmRpdGlvbiBzaGFsbCBiZSBmdWxmaWxsZWQgaW4gbm9ybWFsIGNhc2UuCi0gICAgLy8gRG8g
Tk9UIHVzZSB0aGlzIHRvIGVuZm9yY2UgYSBjZXJ0YWluIGNvbmRpdGlvbiBvbiBhbnkgdXNlciBp
bnB1dC4KLQotICAgIGZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHsKLSAgICAg
ICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovCi0gICAgICAgIGlmICghY29uZGl0aW9uKSB7Ci0g
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FTU0VSVDogJyArIG1lc3NhZ2UpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNEZWNpbWFsRGlnaXQoY2gpIHsKLSAgICAgICAg
cmV0dXJuIChjaCA+PSA0OCAmJiBjaCA8PSA1Nyk7ICAgLy8gMC4uOQotICAgIH0KLQotICAgIGZ1
bmN0aW9uIGlzSGV4RGlnaXQoY2gpIHsKLSAgICAgICAgcmV0dXJuICcwMTIzNDU2Nzg5YWJjZGVm
QUJDREVGJy5pbmRleE9mKGNoKSA+PSAwOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGlzT2N0YWxE
aWdpdChjaCkgewotICAgICAgICByZXR1cm4gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKSA+PSAwOwot
ICAgIH0KLQotCi0gICAgLy8gNy4yIFdoaXRlIFNwYWNlCi0KLSAgICBmdW5jdGlvbiBpc1doaXRl
U3BhY2UoY2gpIHsKLSAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyMCkgfHwgKGNoID09PSAweDA5
KSB8fCAoY2ggPT09IDB4MEIpIHx8IChjaCA9PT0gMHgwQykgfHwgKGNoID09PSAweEEwKSB8fAot
ICAgICAgICAgICAgKGNoID49IDB4MTY4MCAmJiBbMHgxNjgwLCAweDE4MEUsIDB4MjAwMCwgMHgy
MDAxLCAweDIwMDIsIDB4MjAwMywgMHgyMDA0LCAweDIwMDUsIDB4MjAwNiwgMHgyMDA3LCAweDIw
MDgsIDB4MjAwOSwgMHgyMDBBLCAweDIwMkYsIDB4MjA1RiwgMHgzMDAwLCAweEZFRkZdLmluZGV4
T2YoY2gpID49IDApOwotICAgIH0KLQotICAgIC8vIDcuMyBMaW5lIFRlcm1pbmF0b3JzCi0KLSAg
ICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9yKGNoKSB7Ci0gICAgICAgIHJldHVybiAoY2ggPT09
IDB4MEEpIHx8IChjaCA9PT0gMHgwRCkgfHwgKGNoID09PSAweDIwMjgpIHx8IChjaCA9PT0gMHgy
MDI5KTsKLSAgICB9Ci0KLSAgICAvLyA3LjYgSWRlbnRpZmllciBOYW1lcyBhbmQgSWRlbnRpZmll
cnMKLQotICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllclN0YXJ0KGNoKSB7Ci0gICAgICAgIHJldHVy
biAoY2ggPT09IDB4MjQpIHx8IChjaCA9PT0gMHg1RikgfHwgIC8vICQgKGRvbGxhcikgYW5kIF8g
KHVuZGVyc2NvcmUpCi0gICAgICAgICAgICAoY2ggPj0gMHg0MSAmJiBjaCA8PSAweDVBKSB8fCAg
ICAgICAgIC8vIEEuLloKLSAgICAgICAgICAgIChjaCA+PSAweDYxICYmIGNoIDw9IDB4N0EpIHx8
ICAgICAgICAgLy8gYS4uegotICAgICAgICAgICAgKGNoID09PSAweDVDKSB8fCAgICAgICAgICAg
ICAgICAgICAgICAvLyBcIChiYWNrc2xhc2gpCi0gICAgICAgICAgICAoKGNoID49IDB4ODApICYm
IFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShj
aCkpKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJQYXJ0KGNoKSB7Ci0gICAg
ICAgIHJldHVybiAoY2ggPT09IDB4MjQpIHx8IChjaCA9PT0gMHg1RikgfHwgIC8vICQgKGRvbGxh
cikgYW5kIF8gKHVuZGVyc2NvcmUpCi0gICAgICAgICAgICAoY2ggPj0gMHg0MSAmJiBjaCA8PSAw
eDVBKSB8fCAgICAgICAgIC8vIEEuLloKLSAgICAgICAgICAgIChjaCA+PSAweDYxICYmIGNoIDw9
IDB4N0EpIHx8ICAgICAgICAgLy8gYS4uegotICAgICAgICAgICAgKGNoID49IDB4MzAgJiYgY2gg
PD0gMHgzOSkgfHwgICAgICAgICAvLyAwLi45Ci0gICAgICAgICAgICAoY2ggPT09IDB4NUMpIHx8
ICAgICAgICAgICAgICAgICAgICAgIC8vIFwgKGJhY2tzbGFzaCkKLSAgICAgICAgICAgICgoY2gg
Pj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KFN0cmluZy5mcm9t
Q2hhckNvZGUoY2gpKSk7Ci0gICAgfQotCi0gICAgLy8gNy42LjEuMiBGdXR1cmUgUmVzZXJ2ZWQg
V29yZHMKLQotICAgIGZ1bmN0aW9uIGlzRnV0dXJlUmVzZXJ2ZWRXb3JkKGlkKSB7Ci0gICAgICAg
IHN3aXRjaCAoaWQpIHsKLSAgICAgICAgY2FzZSAnY2xhc3MnOgotICAgICAgICBjYXNlICdlbnVt
JzoKLSAgICAgICAgY2FzZSAnZXhwb3J0JzoKLSAgICAgICAgY2FzZSAnZXh0ZW5kcyc6Ci0gICAg
ICAgIGNhc2UgJ2ltcG9ydCc6Ci0gICAgICAgIGNhc2UgJ3N1cGVyJzoKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3Jk
KGlkKSB7Ci0gICAgICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgICAgY2FzZSAnaW1wbGVtZW50cyc6
Ci0gICAgICAgIGNhc2UgJ2ludGVyZmFjZSc6Ci0gICAgICAgIGNhc2UgJ3BhY2thZ2UnOgotICAg
ICAgICBjYXNlICdwcml2YXRlJzoKLSAgICAgICAgY2FzZSAncHJvdGVjdGVkJzoKLSAgICAgICAg
Y2FzZSAncHVibGljJzoKLSAgICAgICAgY2FzZSAnc3RhdGljJzoKLSAgICAgICAgY2FzZSAneWll
bGQnOgotICAgICAgICBjYXNlICdsZXQnOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBpc1Jlc3RyaWN0ZWRXb3JkKGlkKSB7Ci0gICAgICAgIHJldHVybiBp
ZCA9PT0gJ2V2YWwnIHx8IGlkID09PSAnYXJndW1lbnRzJzsKLSAgICB9Ci0KLSAgICAvLyA3LjYu
MS4xIEtleXdvcmRzCi0KLSAgICBmdW5jdGlvbiBpc0tleXdvcmQoaWQpIHsKLSAgICAgICAgaWYg
KHN0cmljdCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoaWQpKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vICdjb25zdCcgaXMgc3BlY2lhbGl6
ZWQgYXMgS2V5d29yZCBpbiBWOC4KLSAgICAgICAgLy8gJ3lpZWxkJyBhbmQgJ2xldCcgYXJlIGZv
ciBjb21wYXRpYmxpdHkgd2l0aCBTcGlkZXJNb25rZXkgYW5kIEVTLm5leHQuCi0gICAgICAgIC8v
IFNvbWUgb3RoZXJzIGFyZSBmcm9tIGZ1dHVyZSByZXNlcnZlZCB3b3Jkcy4KLQotICAgICAgICBz
d2l0Y2ggKGlkLmxlbmd0aCkgewotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICByZXR1cm4g
KGlkID09PSAnaWYnKSB8fCAoaWQgPT09ICdpbicpIHx8IChpZCA9PT0gJ2RvJyk7Ci0gICAgICAg
IGNhc2UgMzoKLSAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd2YXInKSB8fCAoaWQgPT09ICdm
b3InKSB8fCAoaWQgPT09ICduZXcnKSB8fAotICAgICAgICAgICAgICAgIChpZCA9PT0gJ3RyeScp
IHx8IChpZCA9PT0gJ2xldCcpOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICByZXR1cm4g
KGlkID09PSAndGhpcycpIHx8IChpZCA9PT0gJ2Vsc2UnKSB8fCAoaWQgPT09ICdjYXNlJykgfHwK
LSAgICAgICAgICAgICAgICAoaWQgPT09ICd2b2lkJykgfHwgKGlkID09PSAnd2l0aCcpIHx8IChp
ZCA9PT0gJ2VudW0nKTsKLSAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgcmV0dXJuIChpZCA9
PT0gJ3doaWxlJykgfHwgKGlkID09PSAnYnJlYWsnKSB8fCAoaWQgPT09ICdjYXRjaCcpIHx8Ci0g
ICAgICAgICAgICAgICAgKGlkID09PSAndGhyb3cnKSB8fCAoaWQgPT09ICdjb25zdCcpIHx8IChp
ZCA9PT0gJ3lpZWxkJykgfHwKLSAgICAgICAgICAgICAgICAoaWQgPT09ICdjbGFzcycpIHx8IChp
ZCA9PT0gJ3N1cGVyJyk7Ci0gICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgIHJldHVybiAoaWQg
PT09ICdyZXR1cm4nKSB8fCAoaWQgPT09ICd0eXBlb2YnKSB8fCAoaWQgPT09ICdkZWxldGUnKSB8
fAotICAgICAgICAgICAgICAgIChpZCA9PT0gJ3N3aXRjaCcpIHx8IChpZCA9PT0gJ2V4cG9ydCcp
IHx8IChpZCA9PT0gJ2ltcG9ydCcpOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICByZXR1
cm4gKGlkID09PSAnZGVmYXVsdCcpIHx8IChpZCA9PT0gJ2ZpbmFsbHknKSB8fCAoaWQgPT09ICdl
eHRlbmRzJyk7Ci0gICAgICAgIGNhc2UgODoKLSAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdm
dW5jdGlvbicpIHx8IChpZCA9PT0gJ2NvbnRpbnVlJykgfHwgKGlkID09PSAnZGVidWdnZXInKTsK
LSAgICAgICAgY2FzZSAxMDoKLSAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdpbnN0YW5jZW9m
Jyk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyA3LjQgQ29tbWVudHMKLQotICAgIGZ1bmN0aW9uIGFkZENvbW1l
bnQodHlwZSwgdmFsdWUsIHN0YXJ0LCBlbmQsIGxvYykgewotICAgICAgICB2YXIgY29tbWVudCwg
YXR0YWNoZXI7Ci0KLSAgICAgICAgYXNzZXJ0KHR5cGVvZiBzdGFydCA9PT0gJ251bWJlcicsICdD
b21tZW50IG11c3QgaGF2ZSB2YWxpZCBwb3NpdGlvbicpOwotCi0gICAgICAgIC8vIEJlY2F1c2Ug
dGhlIHdheSB0aGUgYWN0dWFsIHRva2VuIGlzIHNjYW5uZWQsIG9mdGVuIHRoZSBjb21tZW50cwot
ICAgICAgICAvLyAoaWYgYW55KSBhcmUgc2tpcHBlZCB0d2ljZSBkdXJpbmcgdGhlIGxleGljYWwg
YW5hbHlzaXMuCi0gICAgICAgIC8vIFRodXMsIHdlIG5lZWQgdG8gc2tpcCBhZGRpbmcgYSBjb21t
ZW50IGlmIHRoZSBjb21tZW50IGFycmF5IGFscmVhZHkKLSAgICAgICAgLy8gaGFuZGxlZCBpdC4K
LSAgICAgICAgaWYgKHN0YXRlLmxhc3RDb21tZW50U3RhcnQgPj0gc3RhcnQpIHsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0ID0g
c3RhcnQ7Ci0KLSAgICAgICAgY29tbWVudCA9IHsKLSAgICAgICAgICAgIHR5cGU6IHR5cGUsCi0g
ICAgICAgICAgICB2YWx1ZTogdmFsdWUKLSAgICAgICAgfTsKLSAgICAgICAgaWYgKGV4dHJhLnJh
bmdlKSB7Ci0gICAgICAgICAgICBjb21tZW50LnJhbmdlID0gW3N0YXJ0LCBlbmRdOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChleHRyYS5sb2MpIHsKLSAgICAgICAgICAgIGNvbW1lbnQubG9jID0g
bG9jOwotICAgICAgICB9Ci0gICAgICAgIGV4dHJhLmNvbW1lbnRzLnB1c2goY29tbWVudCk7Ci0g
ICAgICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7Ci0gICAgICAgICAgICBleHRyYS5sZWFk
aW5nQ29tbWVudHMucHVzaChjb21tZW50KTsKLSAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29t
bWVudHMucHVzaChjb21tZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNr
aXBTaW5nbGVMaW5lQ29tbWVudChvZmZzZXQpIHsKLSAgICAgICAgdmFyIHN0YXJ0LCBsb2MsIGNo
LCBjb21tZW50OwotCi0gICAgICAgIHN0YXJ0ID0gaW5kZXggLSBvZmZzZXQ7Ci0gICAgICAgIGxv
YyA9IHsKLSAgICAgICAgICAgIHN0YXJ0OiB7Ci0gICAgICAgICAgICAgICAgbGluZTogbGluZU51
bWJlciwKLSAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gb2Zmc2V0
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVu
Z3RoKSB7Ci0gICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKLSAgICAg
ICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIG9mZnNldCwgaW5kZXggLSAxKTsKLSAg
ICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmU6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0g
bGluZVN0YXJ0IC0gMQotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAg
ICBhZGRDb21tZW50KCdMaW5lJywgY29tbWVudCwgc3RhcnQsIGluZGV4IC0gMSwgbG9jKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09PSAxMyAmJiBzb3VyY2Uu
Y2hhckNvZGVBdChpbmRleCkgPT09IDEwKSB7Ci0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjsKLSAgICAg
ICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsK
LSAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyBvZmZzZXQsIGluZGV4
KTsKLSAgICAgICAgICAgIGxvYy5lbmQgPSB7Ci0gICAgICAgICAgICAgICAgbGluZTogbGluZU51
bWJlciwKLSAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0Ci0gICAgICAg
ICAgICB9OwotICAgICAgICAgICAgYWRkQ29tbWVudCgnTGluZScsIGNvbW1lbnQsIHN0YXJ0LCBp
bmRleCwgbG9jKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNraXBNdWx0aUxp
bmVDb21tZW50KCkgewotICAgICAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7Ci0KLSAg
ICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7Ci0gICAgICAgICAgICBzdGFydCA9IGluZGV4IC0g
MjsKLSAgICAgICAgICAgIGxvYyA9IHsKLSAgICAgICAgICAgICAgICBzdGFydDogewotICAgICAg
ICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICBjb2x1
bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH07Ci0gICAgICAgIH0KLQotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAg
ICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwotICAgICAgICAgICAgaWYgKGlz
TGluZVRlcm1pbmF0b3IoY2gpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYm
IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MEEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKytsaW5l
TnVtYmVyOwotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgbGluZVN0
YXJ0ID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgewotICAg
ICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4s
ICdJTExFR0FMJyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChj
aCA9PT0gMHgyQSkgewotICAgICAgICAgICAgICAgIC8vIEJsb2NrIGNvbW1lbnQgZW5kcyB3aXRo
ICcqLycuCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkg
PT09IDB4MkYpIHsKLSAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAg
ICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsg
MiwgaW5kZXggLSAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29tbWVudCgnQmxvY2snLCBj
b21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICArK2luZGV4OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICArK2luZGV4
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOwotICAgIH0KLQotICAgIGZ1bmN0aW9u
IHNraXBDb21tZW50KCkgewotICAgICAgICB2YXIgY2gsIHN0YXJ0OwotCi0gICAgICAgIHN0YXJ0
ID0gKGluZGV4ID09PSAwKTsKLSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAg
ICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKLQotICAgICAgICAgICAgaWYg
KGlzV2hpdGVTcGFjZShjaCkpIHsKLSAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgewotICAgICAgICAgICAgICAgICsr
aW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHNvdXJjZS5jaGFyQ29k
ZUF0KGluZGV4KSA9PT0gMHgwQSkgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7Ci0gICAgICAgICAg
ICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlOwot
ICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyRikgeyAvLyBVKzAwMkYgaXMgJy8nCi0g
ICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpOwotICAgICAg
ICAgICAgICAgIGlmIChjaCA9PT0gMHgyRikgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4
OwotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgICAgICBza2lw
U2luZ2xlTGluZUNvbW1lbnQoMik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7ICAvLyBVKzAwMkEgaXMg
JyonCi0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICsr
aW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHNraXBNdWx0aUxpbmVDb21tZW50KCk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydCAmJiBjaCA9PT0gMHgyRCkg
eyAvLyBVKzAwMkQgaXMgJy0nCi0gICAgICAgICAgICAgICAgLy8gVSswMDNFIGlzICc+JwotICAg
ICAgICAgICAgICAgIGlmICgoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgyRCkg
JiYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMikgPT09IDB4M0UpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vICctLT4nIGlzIGEgc2luZ2xlLWxpbmUgY29tbWVudAotICAgICAgICAgICAg
ICAgICAgICBpbmRleCArPSAzOwotICAgICAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNv
bW1lbnQoMyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0g
MHgzQykgeyAvLyBVKzAwM0MgaXMgJzwnCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5zbGlj
ZShpbmRleCArIDEsIGluZGV4ICsgNCkgPT09ICchLS0nKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICsraW5kZXg7IC8vIGA8YAotICAgICAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgIWAKLSAg
ICAgICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYC1gCi0gICAgICAgICAgICAgICAgICAgICsr
aW5kZXg7IC8vIGAtYAotICAgICAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQo
NCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9u
IHNjYW5IZXhFc2NhcGUocHJlZml4KSB7Ci0gICAgICAgIHZhciBpLCBsZW4sIGNoLCBjb2RlID0g
MDsKLQotICAgICAgICBsZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7Ci0gICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3Ro
ICYmIGlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHsKLSAgICAgICAgICAgICAgICBjaCA9IHNv
dXJjZVtpbmRleCsrXTsKLSAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgJzAxMjM0
NTY3ODlhYmNkZWYnLmluZGV4T2YoY2gudG9Mb3dlckNhc2UoKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIHJldHVybiAnJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBnZXRFc2NhcGVkSWRlbnRpZmllcigpIHsKLSAgICAgICAgdmFyIGNoLCBpZDsK
LQotICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KyspOwotICAgICAgICBpZCA9
IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpOwotCi0gICAgICAgIC8vICdcdScgKFUrMDA1QywgVSsw
MDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgotICAgICAgICBpZiAoY2ggPT09IDB4
NUMpIHsKLSAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NzUp
IHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9r
ZW4sICdJTExFR0FMJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICArK2luZGV4OwotICAg
ICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKCd1Jyk7Ci0gICAgICAgICAgICBpZiAoIWNoIHx8
IGNoID09PSAnXFwnIHx8ICFpc0lkZW50aWZpZXJTdGFydChjaC5jaGFyQ29kZUF0KDApKSkgewot
ICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwg
J0lMTEVHQUwnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlkID0gY2g7Ci0gICAgICAg
IH0KLQotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGNoID0g
c291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwotICAgICAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJQ
YXJ0KGNoKSkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgKytpbmRleDsKLSAgICAgICAgICAgIGlkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gp
OwotCi0gICAgICAgICAgICAvLyAnXHUnIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2Nh
cGVkIGNoYXJhY3Rlci4KLSAgICAgICAgICAgIGlmIChjaCA9PT0gMHg1QykgewotICAgICAgICAg
ICAgICAgIGlkID0gaWQuc3Vic3RyKDAsIGlkLmxlbmd0aCAtIDEpOwotICAgICAgICAgICAgICAg
IGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NzUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAg
ICAgICAgIGNoID0gc2NhbkhleEVzY2FwZSgndScpOwotICAgICAgICAgICAgICAgIGlmICghY2gg
fHwgY2ggPT09ICdcXCcgfHwgIWlzSWRlbnRpZmllclBhcnQoY2guY2hhckNvZGVBdCgwKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRv
a2VuLCAnSUxMRUdBTCcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZCAr
PSBjaDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBpZDsKLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBnZXRJZGVudGlmaWVyKCkgewotICAgICAgICB2YXIgc3RhcnQs
IGNoOwotCi0gICAgICAgIHN0YXJ0ID0gaW5kZXgrKzsKLSAgICAgICAgd2hpbGUgKGluZGV4IDwg
bGVuZ3RoKSB7Ci0gICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKLSAg
ICAgICAgICAgIGlmIChjaCA9PT0gMHg1QykgewotICAgICAgICAgICAgICAgIC8vIEJsYWNrc2xh
c2ggKFUrMDA1QykgbWFya3MgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuCi0gICAgICAgICAgICAg
ICAgaW5kZXggPSBzdGFydDsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RXNjYXBlZElkZW50
aWZpZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJQYXJ0
KGNoKSkgewotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIHNvdXJjZS5zbGljZShzdGFydCwgaW5kZXgpOwotICAgIH0KLQotICAgIGZ1bmN0
aW9uIHNjYW5JZGVudGlmaWVyKCkgewotICAgICAgICB2YXIgc3RhcnQsIGlkLCB0eXBlOwotCi0g
ICAgICAgIHN0YXJ0ID0gaW5kZXg7Ci0KLSAgICAgICAgLy8gQmFja3NsYXNoIChVKzAwNUMpIHN0
YXJ0cyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KLSAgICAgICAgaWQgPSAoc291cmNlLmNoYXJDb2Rl
QXQoaW5kZXgpID09PSAweDVDKSA/IGdldEVzY2FwZWRJZGVudGlmaWVyKCkgOiBnZXRJZGVudGlm
aWVyKCk7Ci0KLSAgICAgICAgLy8gVGhlcmUgaXMgbm8ga2V5d29yZCBvciBsaXRlcmFsIHdpdGgg
b25seSBvbmUgY2hhcmFjdGVyLgotICAgICAgICAvLyBUaHVzLCBpdCBtdXN0IGJlIGFuIGlkZW50
aWZpZXIuCi0gICAgICAgIGlmIChpZC5sZW5ndGggPT09IDEpIHsKLSAgICAgICAgICAgIHR5cGUg
PSBUb2tlbi5JZGVudGlmaWVyOwotICAgICAgICB9IGVsc2UgaWYgKGlzS2V5d29yZChpZCkpIHsK
LSAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5LZXl3b3JkOwotICAgICAgICB9IGVsc2UgaWYgKGlk
ID09PSAnbnVsbCcpIHsKLSAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5OdWxsTGl0ZXJhbDsKLSAg
ICAgICAgfSBlbHNlIGlmIChpZCA9PT0gJ3RydWUnIHx8IGlkID09PSAnZmFsc2UnKSB7Ci0gICAg
ICAgICAgICB0eXBlID0gVG9rZW4uQm9vbGVhbkxpdGVyYWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiB7Ci0gICAgICAgICAgICB0eXBlOiB0eXBlLAotICAgICAgICAgICAgdmFsdWU6IGlk
LAotICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKLSAgICAgICAgICAgIGxpbmVT
dGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAotICAgICAgICAgICAg
ZW5kOiBpbmRleAotICAgICAgICB9OwotICAgIH0KLQotCi0gICAgLy8gNy43IFB1bmN0dWF0b3Jz
Ci0KLSAgICBmdW5jdGlvbiBzY2FuUHVuY3R1YXRvcigpIHsKLSAgICAgICAgdmFyIHN0YXJ0ID0g
aW5kZXgsCi0gICAgICAgICAgICBjb2RlID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpLAotICAg
ICAgICAgICAgY29kZTIsCi0gICAgICAgICAgICBjaDEgPSBzb3VyY2VbaW5kZXhdLAotICAgICAg
ICAgICAgY2gyLAotICAgICAgICAgICAgY2gzLAotICAgICAgICAgICAgY2g0OwotCi0gICAgICAg
IHN3aXRjaCAoY29kZSkgewotCi0gICAgICAgIC8vIENoZWNrIGZvciBtb3N0IGNvbW1vbiBzaW5n
bGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgotICAgICAgICBjYXNlIDB4MkU6ICAvLyAuIGRvdAot
ICAgICAgICBjYXNlIDB4Mjg6ICAvLyAoIG9wZW4gYnJhY2tldAotICAgICAgICBjYXNlIDB4Mjk6
ICAvLyApIGNsb3NlIGJyYWNrZXQKLSAgICAgICAgY2FzZSAweDNCOiAgLy8gOyBzZW1pY29sb24K
LSAgICAgICAgY2FzZSAweDJDOiAgLy8gLCBjb21tYQotICAgICAgICBjYXNlIDB4N0I6ICAvLyB7
IG9wZW4gY3VybHkgYnJhY2UKLSAgICAgICAgY2FzZSAweDdEOiAgLy8gfSBjbG9zZSBjdXJseSBi
cmFjZQotICAgICAgICBjYXNlIDB4NUI6ICAvLyBbCi0gICAgICAgIGNhc2UgMHg1RDogIC8vIF0K
LSAgICAgICAgY2FzZSAweDNBOiAgLy8gOgotICAgICAgICBjYXNlIDB4M0Y6ICAvLyA/Ci0gICAg
ICAgIGNhc2UgMHg3RTogIC8vIH4KLSAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICBp
ZiAoZXh0cmEudG9rZW5pemUpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gMHgyOCkg
ewotICAgICAgICAgICAgICAgICAgICBleHRyYS5vcGVuUGFyZW5Ub2tlbiA9IGV4dHJhLnRva2Vu
cy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAweDdCKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5DdXJseVRva2VuID0gZXh0cmEudG9rZW5zLmxl
bmd0aDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCi0gICAgICAgICAg
ICAgICAgdmFsdWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSksCi0gICAgICAgICAgICAgICAg
bGluZU51bWJlcjogbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVT
dGFydCwKLSAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCi0gICAgICAgICAgICAgICAgZW5k
OiBpbmRleAotICAgICAgICAgICAgfTsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
Y29kZTIgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpOwotCi0gICAgICAgICAgICAvLyAn
PScgKFUrMDAzRCkgbWFya3MgYW4gYXNzaWdubWVudCBvciBjb21wYXJpc29uIG9wZXJhdG9yLgot
ICAgICAgICAgICAgaWYgKGNvZGUyID09PSAweDNEKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNo
IChjb2RlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAweDJCOiAgLy8gKwotICAgICAgICAgICAg
ICAgIGNhc2UgMHgyRDogIC8vIC0KLSAgICAgICAgICAgICAgICBjYXNlIDB4MkY6ICAvLyAvCi0g
ICAgICAgICAgICAgICAgY2FzZSAweDNDOiAgLy8gPAotICAgICAgICAgICAgICAgIGNhc2UgMHgz
RTogIC8vID4KLSAgICAgICAgICAgICAgICBjYXNlIDB4NUU6ICAvLyBeCi0gICAgICAgICAgICAg
ICAgY2FzZSAweDdDOiAgLy8gfAotICAgICAgICAgICAgICAgIGNhc2UgMHgyNTogIC8vICUKLSAg
ICAgICAgICAgICAgICBjYXNlIDB4MjY6ICAvLyAmCi0gICAgICAgICAgICAgICAgY2FzZSAweDJB
OiAgLy8gKgotICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1
YXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2Rl
KGNvZGUpICsgU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlMiksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgbGlu
ZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGluZGV4Ci0gICAgICAgICAgICAgICAgICAg
IH07Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDB4MjE6IC8vICEKLSAgICAgICAgICAgICAgICBj
YXNlIDB4M0Q6IC8vID0KLSAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsKLQotICAgICAg
ICAgICAgICAgICAgICAvLyAhPT0gYW5kID09PQotICAgICAgICAgICAgICAgICAgICBpZiAoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICArK2luZGV4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNvdXJjZS5zbGljZShzdGFydCwgaW5kZXgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhcnQ6IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBpbmRl
eAotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQtY2hhcmFjdGVyIHB1bmN0dWF0b3I6ID4+Pj0K
LQotICAgICAgICBjaDQgPSBzb3VyY2Uuc3Vic3RyKGluZGV4LCA0KTsKLQotICAgICAgICBpZiAo
Y2g0ID09PSAnPj4+PScpIHsKLSAgICAgICAgICAgIGluZGV4ICs9IDQ7Ci0gICAgICAgICAgICBy
ZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCi0gICAgICAg
ICAgICAgICAgdmFsdWU6IGNoNCwKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVt
YmVyLAotICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAg
ICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAgICAgICBlbmQ6IGluZGV4Ci0gICAgICAgICAg
ICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMy1jaGFyYWN0ZXIgcHVuY3R1YXRvcnM6ID09
PSAhPT0gPj4+IDw8PSA+Pj0KLQotICAgICAgICBjaDMgPSBjaDQuc3Vic3RyKDAsIDMpOwotCi0g
ICAgICAgIGlmIChjaDMgPT09ICc+Pj4nIHx8IGNoMyA9PT0gJzw8PScgfHwgY2gzID09PSAnPj49
JykgewotICAgICAgICAgICAgaW5kZXggKz0gMzsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKLSAgICAgICAgICAgICAgICB2YWx1
ZTogY2gzLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAgICAg
ICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAgICAgICAgc3RhcnQ6IHN0
YXJ0LAotICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKLSAgICAgICAgICAgIH07Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBPdGhlciAyLWNoYXJhY3RlciBwdW5jdHVhdG9yczogKysgLS0gPDwg
Pj4gJiYgfHwKLSAgICAgICAgY2gyID0gY2gzLnN1YnN0cigwLCAyKTsKLQotICAgICAgICBpZiAo
KGNoMSA9PT0gY2gyWzFdICYmICgnKy08PiZ8Jy5pbmRleE9mKGNoMSkgPj0gMCkpIHx8IGNoMiA9
PT0gJz0+JykgewotICAgICAgICAgICAgaW5kZXggKz0gMjsKLSAgICAgICAgICAgIHJldHVybiB7
Ci0gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKLSAgICAgICAgICAgICAg
ICB2YWx1ZTogY2gyLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0g
ICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAgICAgICAgc3Rh
cnQ6IHN0YXJ0LAotICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKLSAgICAgICAgICAgIH07Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyAxLWNoYXJhY3RlciBwdW5jdHVhdG9yczogPCA+ID0gISAr
IC0gKiAlICYgfCBeIC8KLSAgICAgICAgaWYgKCc8Pj0hKy0qJSZ8Xi8nLmluZGV4T2YoY2gxKSA+
PSAwKSB7Ci0gICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAg
ICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAotICAgICAgICAgICAgICAgIHZhbHVl
OiBjaDEsCi0gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKLSAgICAgICAg
ICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgICAgICBzdGFydDogc3Rh
cnQsCi0gICAgICAgICAgICAgICAgZW5kOiBpbmRleAotICAgICAgICAgICAgfTsKLSAgICAgICAg
fQotCi0gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lM
TEVHQUwnKTsKLSAgICB9Ci0KLSAgICAvLyA3LjguMyBOdW1lcmljIExpdGVyYWxzCi0KLSAgICBm
dW5jdGlvbiBzY2FuSGV4TGl0ZXJhbChzdGFydCkgewotICAgICAgICB2YXIgbnVtYmVyID0gJyc7
Ci0KLSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAoIWlz
SGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkgewotICAgICAgICAgICAgdGhy
b3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGlu
ZGV4KSkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRU
b2tlbiwgJ0lMTEVHQUwnKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB7Ci0gICAgICAg
ICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwKLSAgICAgICAgICAgIHZhbHVlOiBwYXJz
ZUludCgnMHgnICsgbnVtYmVyLCAxNiksCi0gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVt
YmVyLAotICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAgICBzdGFy
dDogc3RhcnQsCi0gICAgICAgICAgICBlbmQ6IGluZGV4Ci0gICAgICAgIH07Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gc2Nhbk9jdGFsTGl0ZXJhbChzdGFydCkgewotICAgICAgICB2YXIgbnVtYmVy
ID0gJzAnICsgc291cmNlW2luZGV4KytdOwotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgp
IHsKLSAgICAgICAgICAgIGlmICghaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBudW1iZXIgKz0g
c291cmNlW2luZGV4KytdOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0
YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkgfHwgaXNEZWNpbWFsRGlnaXQoc291cmNlLmNo
YXJDb2RlQXQoaW5kZXgpKSkgewotICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IHsKLSAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLAotICAgICAgICAgICAg
dmFsdWU6IHBhcnNlSW50KG51bWJlciwgOCksCi0gICAgICAgICAgICBvY3RhbDogdHJ1ZSwKLSAg
ICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICBsaW5lU3RhcnQ6
IGxpbmVTdGFydCwKLSAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAgIGVuZDog
aW5kZXgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzY2FuTnVtZXJpY0xpdGVy
YWwoKSB7Ci0gICAgICAgIHZhciBudW1iZXIsIHN0YXJ0LCBjaDsKLQotICAgICAgICBjaCA9IHNv
dXJjZVtpbmRleF07Ci0gICAgICAgIGFzc2VydChpc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0
KDApKSB8fCAoY2ggPT09ICcuJyksCi0gICAgICAgICAgICAnTnVtZXJpYyBsaXRlcmFsIG11c3Qg
c3RhcnQgd2l0aCBhIGRlY2ltYWwgZGlnaXQgb3IgYSBkZWNpbWFsIHBvaW50Jyk7Ci0KLSAgICAg
ICAgc3RhcnQgPSBpbmRleDsKLSAgICAgICAgbnVtYmVyID0gJyc7Ci0gICAgICAgIGlmIChjaCAh
PT0gJy4nKSB7Ci0gICAgICAgICAgICBudW1iZXIgPSBzb3VyY2VbaW5kZXgrK107Ci0gICAgICAg
ICAgICBjaCA9IHNvdXJjZVtpbmRleF07Ci0KLSAgICAgICAgICAgIC8vIEhleCBudW1iZXIgc3Rh
cnRzIHdpdGggJzB4Jy4KLSAgICAgICAgICAgIC8vIE9jdGFsIG51bWJlciBzdGFydHMgd2l0aCAn
MCcuCi0gICAgICAgICAgICBpZiAobnVtYmVyID09PSAnMCcpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY2ggPT09ICd4JyB8fCBjaCA9PT0gJ1gnKSB7Ci0gICAgICAgICAgICAgICAgICAgICsraW5k
ZXg7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuSGV4TGl0ZXJhbChzdGFydCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuT2N0YWxMaXRlcmFsKHN0YXJ0KTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBkZWNpbWFsIG51bWJlciBzdGFy
dHMgd2l0aCAnMCcgc3VjaCBhcyAnMDknIGlzIGlsbGVnYWwuCi0gICAgICAgICAgICAgICAgaWYg
KGNoICYmIGlzRGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwn
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHdoaWxl
IChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7Ci0gICAgICAgICAg
ICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNoID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjaCA9PT0g
Jy4nKSB7Ci0gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOwotICAgICAgICAg
ICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKLSAg
ICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGNoID09PSAnZScgfHwgY2ggPT09ICdFJykgewotICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJj
ZVtpbmRleCsrXTsKLQotICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOwotICAgICAgICAg
ICAgaWYgKGNoID09PSAnKycgfHwgY2ggPT09ICctJykgewotICAgICAgICAgICAgICAgIG51bWJl
ciArPSBzb3VyY2VbaW5kZXgrK107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNE
ZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgewotICAgICAgICAgICAgICAg
IHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9
LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2Rl
QXQoaW5kZXgpKSkgewotICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBl
Y3RlZFRva2VuLCAnSUxMRUdBTCcpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHsKLSAg
ICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLAotICAgICAgICAgICAgdmFsdWU6
IHBhcnNlRmxvYXQobnVtYmVyKSwKLSAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIs
Ci0gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgIHN0YXJ0OiBz
dGFydCwKLSAgICAgICAgICAgIGVuZDogaW5kZXgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICAv
LyA3LjguNCBTdHJpbmcgTGl0ZXJhbHMKLQotICAgIGZ1bmN0aW9uIHNjYW5TdHJpbmdMaXRlcmFs
KCkgewotICAgICAgICB2YXIgc3RyID0gJycsIHF1b3RlLCBzdGFydCwgY2gsIGNvZGUsIHVuZXNj
YXBlZCwgcmVzdG9yZSwgb2N0YWwgPSBmYWxzZSwgc3RhcnRMaW5lTnVtYmVyLCBzdGFydExpbmVT
dGFydDsKLSAgICAgICAgc3RhcnRMaW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICAgICAgc3Rh
cnRMaW5lU3RhcnQgPSBsaW5lU3RhcnQ7Ci0KLSAgICAgICAgcXVvdGUgPSBzb3VyY2VbaW5kZXhd
OwotICAgICAgICBhc3NlcnQoKHF1b3RlID09PSAnXCcnIHx8IHF1b3RlID09PSAnIicpLAotICAg
ICAgICAgICAgJ1N0cmluZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZScpOwotCi0g
ICAgICAgIHN0YXJ0ID0gaW5kZXg7Ci0gICAgICAgICsraW5kZXg7Ci0KLSAgICAgICAgd2hpbGUg
KGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKLQot
ICAgICAgICAgICAgaWYgKGNoID09PSBxdW90ZSkgewotICAgICAgICAgICAgICAgIHF1b3RlID0g
Jyc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09
PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107Ci0gICAgICAg
ICAgICAgICAgaWYgKCFjaCB8fCAhaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkg
ewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3RvcmUgPSBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuZXNj
YXBlZCA9IHNjYW5IZXhFc2NhcGUoY2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVu
ZXNjYXBlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSB1bmVzY2FwZWQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4ID0gcmVzdG9yZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIg
Kz0gY2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnbic6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlICdyJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSAnXHInOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ3QnOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcdCc7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xiJzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ciArPSAnXGYnOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3YnOgotICAgICAgICAgICAgICAgICAgICAgICAg
c3RyICs9ICdceDBCJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNPY3Rh
bERpZ2l0KGNoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAnMDEyMzQ1
NjcnLmluZGV4T2YoY2gpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXDAgaXMg
bm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjb2RlICE9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdGFsID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRl
eF0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3
Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gMyBkaWdpdHMgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHN0cmluZyBzdGFydHMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCAwLCAxLCAyLCAzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnMDEyMycuaW5kZXhPZihjaCkgPj0gMCAmJgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4IDwgbGVuZ3RoICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPY3RhbERpZ2l0KHNv
dXJjZVtpbmRleF0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
ID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yoc291cmNlW2luZGV4KytdKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29k
ZShjb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RyICs9IGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gICdccicgJiYgc291cmNlW2luZGV4XSA9PT0g
J1xuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hh
ckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgc3RyICs9IGNoOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHF1b3RlICE9PSAnJykgewotICAgICAgICAgICAgdGhyb3dFcnJvcih7
fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHR5cGU6IFRva2VuLlN0cmluZ0xpdGVyYWwsCi0g
ICAgICAgICAgICB2YWx1ZTogc3RyLAotICAgICAgICAgICAgb2N0YWw6IG9jdGFsLAotICAgICAg
ICAgICAgc3RhcnRMaW5lTnVtYmVyOiBzdGFydExpbmVOdW1iZXIsCi0gICAgICAgICAgICBzdGFy
dExpbmVTdGFydDogc3RhcnRMaW5lU3RhcnQsCi0gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5l
TnVtYmVyLAotICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAgICBz
dGFydDogc3RhcnQsCi0gICAgICAgICAgICBlbmQ6IGluZGV4Ci0gICAgICAgIH07Ci0gICAgfQot
Ci0gICAgZnVuY3Rpb24gdGVzdFJlZ0V4cChwYXR0ZXJuLCBmbGFncykgewotICAgICAgICB2YXIg
dmFsdWU7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IG5ldyBSZWdFeHAocGF0
dGVybiwgZmxhZ3MpOwotICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkUmVnRXhwKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2NhblJlZ0V4cEJvZHkoKSB7Ci0gICAg
ICAgIHZhciBjaCwgc3RyLCBjbGFzc01hcmtlciwgdGVybWluYXRlZCwgYm9keTsKLQotICAgICAg
ICBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAgIGFzc2VydChjaCA9PT0gJy8nLCAnUmVndWxh
ciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2gnKTsKLSAgICAgICAg
c3RyID0gc291cmNlW2luZGV4KytdOwotCi0gICAgICAgIGNsYXNzTWFya2VyID0gZmFsc2U7Ci0g
ICAgICAgIHRlcm1pbmF0ZWQgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3Ro
KSB7Ci0gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAgICAgICAgIHN0ciAr
PSBjaDsKLSAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJykgewotICAgICAgICAgICAgICAgIGNo
ID0gc291cmNlW2luZGV4KytdOwotICAgICAgICAgICAgICAgIC8vIEVDTUEtMjYyIDcuOC41Ci0g
ICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVk
UmVnRXhwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3RyICs9IGNoOwot
ICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkp
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVk
UmVnRXhwKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NNYXJrZXIpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoY2ggPT09ICddJykgewotICAgICAgICAgICAgICAgICAgICBjbGFzc01hcmtl
ciA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNoID09PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgdGVybWlu
YXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoY2ggPT09ICdbJykgewotICAgICAgICAgICAgICAgICAgICBjbGFzc01hcmtl
ciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCF0ZXJtaW5hdGVkKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBN
ZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRXhj
bHVkZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaC4KLSAgICAgICAgYm9keSA9IHN0ci5zdWJz
dHIoMSwgc3RyLmxlbmd0aCAtIDIpOwotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgdmFs
dWU6IGJvZHksCi0gICAgICAgICAgICBsaXRlcmFsOiBzdHIKLSAgICAgICAgfTsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBzY2FuUmVnRXhwRmxhZ3MoKSB7Ci0gICAgICAgIHZhciBjaCwgc3RyLCBm
bGFncywgcmVzdG9yZTsKLQotICAgICAgICBzdHIgPSAnJzsKLSAgICAgICAgZmxhZ3MgPSAnJzsK
LSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBjaCA9IHNvdXJj
ZVtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIWlzSWRlbnRpZmllclBhcnQoY2guY2hhckNvZGVB
dCgwKSkpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgKytpbmRleDsKLSAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJyAmJiBpbmRleCA8IGxl
bmd0aCkgewotICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgICAg
ICAgICBpZiAoY2ggPT09ICd1JykgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAg
ICAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIGNo
ID0gc2NhbkhleEVzY2FwZSgndScpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2gpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IGNoOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChzdHIgKz0gJ1xcdSc7IHJlc3RvcmUgPCBpbmRleDsgKytyZXN0b3JlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHNvdXJjZVtyZXN0b3JlXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZsYWdzICs9ICd1JzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFx1JzsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJh
bnQoe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcJzsKLSAgICAgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9r
ZW4sICdJTExFR0FMJyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBmbGFncyArPSBjaDsKLSAgICAgICAgICAgICAgICBzdHIgKz0gY2g7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gewotICAgICAgICAg
ICAgdmFsdWU6IGZsYWdzLAotICAgICAgICAgICAgbGl0ZXJhbDogc3RyCi0gICAgICAgIH07Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gc2NhblJlZ0V4cCgpIHsKLSAgICAgICAgdmFyIHN0YXJ0LCBi
b2R5LCBmbGFncywgcGF0dGVybiwgdmFsdWU7Ci0KLSAgICAgICAgbG9va2FoZWFkID0gbnVsbDsK
LSAgICAgICAgc2tpcENvbW1lbnQoKTsKLSAgICAgICAgc3RhcnQgPSBpbmRleDsKLQotICAgICAg
ICBib2R5ID0gc2NhblJlZ0V4cEJvZHkoKTsKLSAgICAgICAgZmxhZ3MgPSBzY2FuUmVnRXhwRmxh
Z3MoKTsKLSAgICAgICAgdmFsdWUgPSB0ZXN0UmVnRXhwKGJvZHkudmFsdWUsIGZsYWdzLnZhbHVl
KTsKLQotICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUpIHsKLSAgICAgICAgICAgIHJldHVybiB7
Ci0gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUmVndWxhckV4cHJlc3Npb24sCi0gICAgICAg
ICAgICAgICAgdmFsdWU6IHZhbHVlLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVO
dW1iZXIsCi0gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAg
ICAgICAgc3RhcnQ6IHN0YXJ0LAotICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKLSAgICAgICAg
ICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgbGl0ZXJh
bDogYm9keS5saXRlcmFsICsgZmxhZ3MubGl0ZXJhbCwKLSAgICAgICAgICAgIHZhbHVlOiB2YWx1
ZSwKLSAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAgIGVuZDogaW5kZXgKLSAg
ICAgICAgfTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjb2xsZWN0UmVnZXgoKSB7Ci0gICAgICAg
IHZhciBwb3MsIGxvYywgcmVnZXgsIHRva2VuOwotCi0gICAgICAgIHNraXBDb21tZW50KCk7Ci0K
LSAgICAgICAgcG9zID0gaW5kZXg7Ci0gICAgICAgIGxvYyA9IHsKLSAgICAgICAgICAgIHN0YXJ0
OiB7Ci0gICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBj
b2x1bW46IGluZGV4IC0gbGluZVN0YXJ0Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgcmVnZXggPSBzY2FuUmVnRXhwKCk7Ci0gICAgICAgIGxvYy5lbmQgPSB7Ci0gICAgICAg
ICAgICBsaW5lOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVT
dGFydAotICAgICAgICB9OwotCi0gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCi0g
ICAgICAgIGlmICghZXh0cmEudG9rZW5pemUpIHsKLSAgICAgICAgICAgIC8vIFBvcCB0aGUgcHJl
dmlvdXMgdG9rZW4sIHdoaWNoIGlzIGxpa2VseSAnLycgb3IgJy89JwotICAgICAgICAgICAgaWYg
KGV4dHJhLnRva2Vucy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBleHRy
YS50b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0aCAtIDFdOwotICAgICAgICAgICAgICAgIGlmICh0
b2tlbi5yYW5nZVswXSA9PT0gcG9zICYmIHRva2VuLnR5cGUgPT09ICdQdW5jdHVhdG9yJykgewot
ICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICcvJyB8fCB0b2tlbi52YWx1
ZSA9PT0gJy89JykgewotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zLnBvcCgp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBleHRyYS50b2tlbnMucHVzaCh7Ci0gICAgICAgICAgICAgICAgdHlw
ZTogJ1JlZ3VsYXJFeHByZXNzaW9uJywKLSAgICAgICAgICAgICAgICB2YWx1ZTogcmVnZXgubGl0
ZXJhbCwKLSAgICAgICAgICAgICAgICByYW5nZTogW3BvcywgaW5kZXhdLAotICAgICAgICAgICAg
ICAgIGxvYzogbG9jCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biByZWdleDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJOYW1lKHRva2VuKSB7
Ci0gICAgICAgIHJldHVybiB0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyIHx8Ci0gICAg
ICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkIHx8Ci0gICAgICAgICAgICB0b2tl
bi50eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCB8fAotICAgICAgICAgICAgdG9rZW4udHlw
ZSA9PT0gVG9rZW4uTnVsbExpdGVyYWw7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYWR2YW5jZVNs
YXNoKCkgewotICAgICAgICB2YXIgcHJldlRva2VuLAotICAgICAgICAgICAgY2hlY2tUb2tlbjsK
LSAgICAgICAgLy8gVXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06Ci0gICAgICAgIC8vIGh0
dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3N3ZWV0LmpzL3dpa2kvZGVzaWduCi0gICAgICAgIHBy
ZXZUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0gMV07Ci0gICAgICAg
IGlmICghcHJldlRva2VuKSB7Ci0gICAgICAgICAgICAvLyBOb3RoaW5nIGJlZm9yZSB0aGF0OiBp
dCBjYW5ub3QgYmUgYSBkaXZpc2lvbi4KLSAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgo
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAocHJldlRva2VuLnR5cGUgPT09ICdQdW5jdHVhdG9y
JykgewotICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJ10nKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSAnKScpIHsKLSAgICAgICAgICAgICAgICBjaGVj
a1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5QYXJlblRva2VuIC0gMV07Ci0gICAgICAg
ICAgICAgICAgaWYgKGNoZWNrVG9rZW4gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNr
VG9rZW4udHlwZSA9PT0gJ0tleXdvcmQnICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2hl
Y2tUb2tlbi52YWx1ZSA9PT0gJ2lmJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNr
VG9rZW4udmFsdWUgPT09ICd3aGlsZScgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGVj
a1Rva2VuLnZhbHVlID09PSAnZm9yJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNr
VG9rZW4udmFsdWUgPT09ICd3aXRoJykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bGxlY3RSZWdleCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4g
c2NhblB1bmN0dWF0b3IoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwcmV2VG9r
ZW4udmFsdWUgPT09ICd9JykgewotICAgICAgICAgICAgICAgIC8vIERpdmlkaW5nIGEgZnVuY3Rp
b24gYnkgYW55dGhpbmcgbWFrZXMgbGl0dGxlIHNlbnNlLAotICAgICAgICAgICAgICAgIC8vIGJ1
dCB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGF0LgotICAgICAgICAgICAgICAgIGlmIChleHRyYS50
b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSAzXSAmJgotICAgICAgICAgICAgICAgICAgICAg
ICAgZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10udHlwZSA9PT0gJ0tleXdv
cmQnKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFub255bW91cyBmdW5jdGlvbi4KLSAgICAg
ICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlU
b2tlbiAtIDRdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrVG9rZW4pIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYS50b2tlbnNbZXh0cmEu
b3BlbkN1cmx5VG9rZW4gLSA0XSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9r
ZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0udHlwZSA9PT0gJ0tleXdvcmQnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIE5hbWVkIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgICAgICBj
aGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNV07Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghY2hlY2tUb2tlbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVh
dG9yKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIGNoZWNrVG9rZW4g
ZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmdW5jdGlvbiBpcwotICAgICAgICAgICAgICAgIC8vIGEg
ZGVjbGFyYXRpb24gb3IgYW4gZXhwcmVzc2lvbi4KLSAgICAgICAgICAgICAgICBpZiAoRm5FeHBy
VG9rZW5zLmluZGV4T2YoY2hlY2tUb2tlbi52YWx1ZSkgPj0gMCkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBJdCBpcyBhbiBleHByZXNzaW9uLgotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c2NhblB1bmN0dWF0b3IoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8g
SXQgaXMgYSBkZWNsYXJhdGlvbi4KLSAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKHByZXZUb2tlbi50eXBlID09PSAnS2V5d29yZCcpIHsKLSAg
ICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gc2NhblB1bmN0dWF0b3IoKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBhZHZhbmNlKCkgewot
ICAgICAgICB2YXIgY2g7Ci0KLSAgICAgICAgc2tpcENvbW1lbnQoKTsKLQotICAgICAgICBpZiAo
aW5kZXggPj0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAg
IHR5cGU6IFRva2VuLkVPRiwKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVy
LAotICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgICAg
IHN0YXJ0OiBpbmRleCwKLSAgICAgICAgICAgICAgICBlbmQ6IGluZGV4Ci0gICAgICAgICAgICB9
OwotICAgICAgICB9Ci0KLSAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7Ci0K
LSAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSkgewotICAgICAgICAgICAgcmV0dXJu
IHNjYW5JZGVudGlmaWVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBWZXJ5IGNvbW1vbjog
KCBhbmQgKSBhbmQgOwotICAgICAgICBpZiAoY2ggPT09IDB4MjggfHwgY2ggPT09IDB4MjkgfHwg
Y2ggPT09IDB4M0IpIHsKLSAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gU3RyaW5nIGxpdGVyYWwgc3RhcnRzIHdpdGggc2luZ2xlIHF1
b3RlIChVKzAwMjcpIG9yIGRvdWJsZSBxdW90ZSAoVSswMDIyKS4KLSAgICAgICAgaWYgKGNoID09
PSAweDI3IHx8IGNoID09PSAweDIyKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2NhblN0cmluZ0xp
dGVyYWwoKTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgLy8gRG90ICguKSBVKzAwMkUgY2FuIGFs
c28gc3RhcnQgYSBmbG9hdGluZy1wb2ludCBudW1iZXIsIGhlbmNlIHRoZSBuZWVkCi0gICAgICAg
IC8vIHRvIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3Rlci4KLSAgICAgICAgaWYgKGNoID09PSAweDJF
KSB7Ci0gICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5k
ZXggKyAxKSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChjaCkpIHsKLSAgICAgICAgICAg
IHJldHVybiBzY2FuTnVtZXJpY0xpdGVyYWwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNs
YXNoICgvKSBVKzAwMkYgY2FuIGFsc28gc3RhcnQgYSByZWdleC4KLSAgICAgICAgaWYgKGV4dHJh
LnRva2VuaXplICYmIGNoID09PSAweDJGKSB7Ci0gICAgICAgICAgICByZXR1cm4gYWR2YW5jZVNs
YXNoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBjb2xsZWN0VG9rZW4oKSB7Ci0gICAgICAgIHZhciBsb2MsIHRv
a2VuLCByYW5nZSwgdmFsdWU7Ci0KLSAgICAgICAgc2tpcENvbW1lbnQoKTsKLSAgICAgICAgbG9j
ID0gewotICAgICAgICAgICAgc3RhcnQ6IHsKLSAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVt
YmVyLAotICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICB0b2tlbiA9IGFkdmFuY2UoKTsKLSAgICAgICAg
bG9jLmVuZCA9IHsKLSAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICBj
b2x1bW46IGluZGV4IC0gbGluZVN0YXJ0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKHRva2Vu
LnR5cGUgIT09IFRva2VuLkVPRikgewotICAgICAgICAgICAgdmFsdWUgPSBzb3VyY2Uuc2xpY2Uo
dG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7Ci0gICAgICAgICAgICBleHRyYS50b2tlbnMucHVzaCh7
Ci0gICAgICAgICAgICAgICAgdHlwZTogVG9rZW5OYW1lW3Rva2VuLnR5cGVdLAotICAgICAgICAg
ICAgICAgIHZhbHVlOiB2YWx1ZSwKLSAgICAgICAgICAgICAgICByYW5nZTogW3Rva2VuLnN0YXJ0
LCB0b2tlbi5lbmRdLAotICAgICAgICAgICAgICAgIGxvYzogbG9jCi0gICAgICAgICAgICB9KTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0b2tlbjsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBsZXgoKSB7Ci0gICAgICAgIHZhciB0b2tlbjsKLQotICAgICAgICB0b2tlbiA9IGxvb2thaGVh
ZDsKLSAgICAgICAgaW5kZXggPSB0b2tlbi5lbmQ7Ci0gICAgICAgIGxpbmVOdW1iZXIgPSB0b2tl
bi5saW5lTnVtYmVyOwotICAgICAgICBsaW5lU3RhcnQgPSB0b2tlbi5saW5lU3RhcnQ7Ci0KLSAg
ICAgICAgbG9va2FoZWFkID0gKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSA/
IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgpOwotCi0gICAgICAgIGluZGV4ID0gdG9rZW4uZW5k
OwotICAgICAgICBsaW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjsKLSAgICAgICAgbGluZVN0
YXJ0ID0gdG9rZW4ubGluZVN0YXJ0OwotCi0gICAgICAgIHJldHVybiB0b2tlbjsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBwZWVrKCkgewotICAgICAgICB2YXIgcG9zLCBsaW5lLCBzdGFydDsKLQot
ICAgICAgICBwb3MgPSBpbmRleDsKLSAgICAgICAgbGluZSA9IGxpbmVOdW1iZXI7Ci0gICAgICAg
IHN0YXJ0ID0gbGluZVN0YXJ0OwotICAgICAgICBsb29rYWhlYWQgPSAodHlwZW9mIGV4dHJhLnRv
a2VucyAhPT0gJ3VuZGVmaW5lZCcpID8gY29sbGVjdFRva2VuKCkgOiBhZHZhbmNlKCk7Ci0gICAg
ICAgIGluZGV4ID0gcG9zOwotICAgICAgICBsaW5lTnVtYmVyID0gbGluZTsKLSAgICAgICAgbGlu
ZVN0YXJ0ID0gc3RhcnQ7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gUG9zaXRpb24obGluZSwgY29s
dW1uKSB7Ci0gICAgICAgIHRoaXMubGluZSA9IGxpbmU7Ci0gICAgICAgIHRoaXMuY29sdW1uID0g
Y29sdW1uOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIFNvdXJjZUxvY2F0aW9uKHN0YXJ0TGluZSwg
c3RhcnRDb2x1bW4sIGxpbmUsIGNvbHVtbikgewotICAgICAgICB0aGlzLnN0YXJ0ID0gbmV3IFBv
c2l0aW9uKHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4pOwotICAgICAgICB0aGlzLmVuZCA9IG5ldyBQ
b3NpdGlvbihsaW5lLCBjb2x1bW4pOwotICAgIH0KLQotICAgIFN5bnRheFRyZWVEZWxlZ2F0ZSA9
IHsKLQotICAgICAgICBuYW1lOiAnU3ludGF4VHJlZScsCi0KLSAgICAgICAgcHJvY2Vzc0NvbW1l
bnQ6IGZ1bmN0aW9uIChub2RlKSB7Ci0gICAgICAgICAgICB2YXIgbGFzdENoaWxkLCB0cmFpbGlu
Z0NvbW1lbnRzOwotCi0gICAgICAgICAgICBpZiAobm9kZS50eXBlID09PSBTeW50YXguUHJvZ3Jh
bSkgewotICAgICAgICAgICAgICAgIGlmIChub2RlLmJvZHkubGVuZ3RoID4gMCkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAoZXh0cmEudHJhaWxpbmdDb21tZW50cy5sZW5ndGggPiAwKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGV4dHJhLnRyYWlsaW5nQ29tbWVudHNbMF0ucmFuZ2VbMF0gPj0g
bm9kZS5yYW5nZVsxXSkgewotICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0g
ZXh0cmEudHJhaWxpbmdDb21tZW50czsKLSAgICAgICAgICAgICAgICAgICAgZXh0cmEudHJhaWxp
bmdDb21tZW50cyA9IFtdOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChleHRyYS5ib3R0
b21SaWdodFN0YWNrLmxlbmd0aCA+IDAgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJh
LmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFp
bGluZ0NvbW1lbnRzICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5ib3R0b21SaWdo
dFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50
c1swXS5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRy
YWlsaW5nQ29tbWVudHMgPSBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0
U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50czsKLSAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5n
dGggLSAxXS50cmFpbGluZ0NvbW1lbnRzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gRWF0aW5nIHRoZSBzdGFjay4KLSAgICAgICAgICAgIHdoaWxl
IChleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCA+IDAgJiYgZXh0cmEuYm90dG9tUmlnaHRT
dGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzBdID49IG5vZGUu
cmFuZ2VbMF0pIHsKLSAgICAgICAgICAgICAgICBsYXN0Q2hpbGQgPSBleHRyYS5ib3R0b21SaWdo
dFN0YWNrLnBvcCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobGFzdENoaWxk
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMgJiYgbGFz
dENoaWxkLmxlYWRpbmdDb21tZW50c1tsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCAt
IDFdLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS5sZWFkaW5nQ29tbWVudHMgPSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzOwotICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgbGFzdENoaWxkLmxlYWRpbmdDb21tZW50czsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGV4dHJhLmxlYWRpbmdDb21tZW50cy5sZW5n
dGggPiAwICYmIGV4dHJhLmxlYWRpbmdDb21tZW50c1tleHRyYS5sZWFkaW5nQ29tbWVudHMubGVu
Z3RoIC0gMV0ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSkgewotICAgICAgICAgICAgICAgIG5v
ZGUubGVhZGluZ0NvbW1lbnRzID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzOwotICAgICAgICAgICAg
ICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9IFtdOwotICAgICAgICAgICAgfQotCi0KLSAgICAg
ICAgICAgIGlmICh0cmFpbGluZ0NvbW1lbnRzKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS50cmFp
bGluZ0NvbW1lbnRzID0gdHJhaWxpbmdDb21tZW50czsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgZXh0cmEuYm90dG9tUmlnaHRTdGFjay5wdXNoKG5vZGUpOwotICAgICAgICB9LAotCi0g
ICAgICAgIG1hcmtFbmQ6IGZ1bmN0aW9uIChub2RlLCBzdGFydFRva2VuKSB7Ci0gICAgICAgICAg
ICBpZiAoZXh0cmEucmFuZ2UpIHsKLSAgICAgICAgICAgICAgICBub2RlLnJhbmdlID0gW3N0YXJ0
VG9rZW4uc3RhcnQsIGluZGV4XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChleHRy
YS5sb2MpIHsKLSAgICAgICAgICAgICAgICBub2RlLmxvYyA9IG5ldyBTb3VyY2VMb2NhdGlvbigK
LSAgICAgICAgICAgICAgICAgICAgc3RhcnRUb2tlbi5zdGFydExpbmVOdW1iZXIgPT09IHVuZGVm
aW5lZCA/ICBzdGFydFRva2VuLmxpbmVOdW1iZXIgOiBzdGFydFRva2VuLnN0YXJ0TGluZU51bWJl
ciwKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRUb2tlbi5zdGFydCAtIChzdGFydFRva2VuLnN0
YXJ0TGluZVN0YXJ0ID09PSB1bmRlZmluZWQgPyAgc3RhcnRUb2tlbi5saW5lU3RhcnQgOiBzdGFy
dFRva2VuLnN0YXJ0TGluZVN0YXJ0KSwKLSAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlciwK
LSAgICAgICAgICAgICAgICAgICAgaW5kZXggLSBsaW5lU3RhcnQKLSAgICAgICAgICAgICAgICAp
OwotICAgICAgICAgICAgICAgIHRoaXMucG9zdFByb2Nlc3Mobm9kZSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5wcm9jZXNzQ29tbWVudChub2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiBub2RlOwotICAgICAgICB9LAotCi0gICAgICAgIHBvc3RQcm9jZXNzOiBmdW5jdGlv
biAobm9kZSkgewotICAgICAgICAgICAgaWYgKGV4dHJhLnNvdXJjZSkgewotICAgICAgICAgICAg
ICAgIG5vZGUubG9jLnNvdXJjZSA9IGV4dHJhLnNvdXJjZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiBub2RlOwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZUFycmF5RXhw
cmVzc2lvbjogZnVuY3Rpb24gKGVsZW1lbnRzKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5BcnJheUV4cHJlc3Npb24sCi0gICAgICAgICAgICAg
ICAgZWxlbWVudHM6IGVsZW1lbnRzCi0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAg
ICAgIGNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGxlZnQs
IHJpZ2h0KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5
bnRheC5Bc3NpZ25tZW50RXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3Bl
cmF0b3IsCi0gICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKLSAgICAgICAgICAgICAgICByaWdo
dDogcmlnaHQKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlQmlu
YXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkgewotICAgICAg
ICAgICAgdmFyIHR5cGUgPSAob3BlcmF0b3IgPT09ICd8fCcgfHwgb3BlcmF0b3IgPT09ICcmJicp
ID8gU3ludGF4LkxvZ2ljYWxFeHByZXNzaW9uIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5
bnRheC5CaW5hcnlFeHByZXNzaW9uOwotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAg
ICAgICB0eXBlOiB0eXBlLAotICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKLSAg
ICAgICAgICAgICAgICBsZWZ0OiBsZWZ0LAotICAgICAgICAgICAgICAgIHJpZ2h0OiByaWdodAot
ICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVCbG9ja1N0YXRlbWVu
dDogZnVuY3Rpb24gKGJvZHkpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LkJsb2NrU3RhdGVtZW50LAotICAgICAgICAgICAgICAgIGJvZHk6IGJv
ZHkKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlQnJlYWtTdGF0
ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguQnJlYWtTdGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgbGFi
ZWw6IGxhYmVsCi0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZUNh
bGxFeHByZXNzaW9uOiBmdW5jdGlvbiAoY2FsbGVlLCBhcmdzKSB7Ci0gICAgICAgICAgICByZXR1
cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5DYWxsRXhwcmVzc2lvbiwKLSAgICAg
ICAgICAgICAgICBjYWxsZWU6IGNhbGxlZSwKLSAgICAgICAgICAgICAgICAnYXJndW1lbnRzJzog
YXJncwotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVDYXRjaENs
YXVzZTogZnVuY3Rpb24gKHBhcmFtLCBib2R5KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5DYXRjaENsYXVzZSwKLSAgICAgICAgICAgICAgICBw
YXJhbTogcGFyYW0sCi0gICAgICAgICAgICAgICAgYm9keTogYm9keQotICAgICAgICAgICAgfTsK
LSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb246IGZ1bmN0
aW9uICh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHsKLSAgICAgICAgICAgIHJldHVybiB7
Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNvbmRpdGlvbmFsRXhwcmVzc2lvbiwKLSAg
ICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAotICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IGNv
bnNlcXVlbnQsCi0gICAgICAgICAgICAgICAgYWx0ZXJuYXRlOiBhbHRlcm5hdGUKLSAgICAgICAg
ICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlQ29udGludWVTdGF0ZW1lbnQ6IGZ1
bmN0aW9uIChsYWJlbCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguQ29udGludWVTdGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgbGFiZWw6IGxh
YmVsCi0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZURlYnVnZ2Vy
U3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5EZWJ1Z2dlclN0YXRlbWVudAotICAgICAgICAgICAgfTsKLSAg
ICAgICAgfSwKLQotICAgICAgICBjcmVhdGVEb1doaWxlU3RhdGVtZW50OiBmdW5jdGlvbiAoYm9k
eSwgdGVzdCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguRG9XaGlsZVN0YXRlbWVudCwKLSAgICAgICAgICAgICAgICBib2R5OiBib2R5LAotICAg
ICAgICAgICAgICAgIHRlc3Q6IHRlc3QKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAg
ICAgICAgY3JlYXRlRW1wdHlTdGF0ZW1lbnQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkVtcHR5U3RhdGVtZW50Ci0gICAg
ICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1l
bnQ6IGZ1bmN0aW9uIChleHByZXNzaW9uKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5FeHByZXNzaW9uU3RhdGVtZW50LAotICAgICAgICAgICAg
ICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgY3JlYXRlRm9yU3RhdGVtZW50OiBmdW5jdGlvbiAoaW5pdCwgdGVzdCwgdXBkYXRl
LCBib2R5KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5
bnRheC5Gb3JTdGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgaW5pdDogaW5pdCwKLSAgICAgICAg
ICAgICAgICB0ZXN0OiB0ZXN0LAotICAgICAgICAgICAgICAgIHVwZGF0ZTogdXBkYXRlLAotICAg
ICAgICAgICAgICAgIGJvZHk6IGJvZHkKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAg
ICAgICAgY3JlYXRlRm9ySW5TdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm9keSkg
ewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRm9y
SW5TdGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKLSAgICAgICAgICAgICAg
ICByaWdodDogcmlnaHQsCi0gICAgICAgICAgICAgICAgYm9keTogYm9keSwKLSAgICAgICAgICAg
ICAgICBlYWNoOiBmYWxzZQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBj
cmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgZGVmYXVsdHMs
IGJvZHkpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LkZ1bmN0aW9uRGVjbGFyYXRpb24sCi0gICAgICAgICAgICAgICAgaWQ6IGlkLAotICAgICAg
ICAgICAgICAgIHBhcmFtczogcGFyYW1zLAotICAgICAgICAgICAgICAgIGRlZmF1bHRzOiBkZWZh
dWx0cywKLSAgICAgICAgICAgICAgICBib2R5OiBib2R5LAotICAgICAgICAgICAgICAgIHJlc3Q6
IG51bGwsCi0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBmYWxzZSwKLSAgICAgICAgICAgICAg
ICBleHByZXNzaW9uOiBmYWxzZQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAg
ICBjcmVhdGVGdW5jdGlvbkV4cHJlc3Npb246IGZ1bmN0aW9uIChpZCwgcGFyYW1zLCBkZWZhdWx0
cywgYm9keSkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguRnVuY3Rpb25FeHByZXNzaW9uLAotICAgICAgICAgICAgICAgIGlkOiBpZCwKLSAgICAg
ICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKLSAgICAgICAgICAgICAgICBkZWZhdWx0czogZGVm
YXVsdHMsCi0gICAgICAgICAgICAgICAgYm9keTogYm9keSwKLSAgICAgICAgICAgICAgICByZXN0
OiBudWxsLAotICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZmFsc2UsCi0gICAgICAgICAgICAg
ICAgZXhwcmVzc2lvbjogZmFsc2UKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAg
ICAgY3JlYXRlSWRlbnRpZmllcjogZnVuY3Rpb24gKG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVy
biB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LklkZW50aWZpZXIsCi0gICAgICAgICAg
ICAgICAgbmFtZTogbmFtZQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBj
cmVhdGVJZlN0YXRlbWVudDogZnVuY3Rpb24gKHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkg
ewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguSWZT
dGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKLSAgICAgICAgICAgICAgICBj
b25zZXF1ZW50OiBjb25zZXF1ZW50LAotICAgICAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0ZXJu
YXRlCi0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZUxhYmVsZWRT
dGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCwgYm9keSkgewotICAgICAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTGFiZWxlZFN0YXRlbWVudCwKLSAgICAgICAg
ICAgICAgICBsYWJlbDogbGFiZWwsCi0gICAgICAgICAgICAgICAgYm9keTogYm9keQotICAgICAg
ICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVMaXRlcmFsOiBmdW5jdGlvbiAo
dG9rZW4pIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LkxpdGVyYWwsCi0gICAgICAgICAgICAgICAgdmFsdWU6IHRva2VuLnZhbHVlLAotICAgICAg
ICAgICAgICAgIHJhdzogc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpCi0gICAg
ICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZU1lbWJlckV4cHJlc3Npb246
IGZ1bmN0aW9uIChhY2Nlc3Nvciwgb2JqZWN0LCBwcm9wZXJ0eSkgewotICAgICAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTWVtYmVyRXhwcmVzc2lvbiwKLSAg
ICAgICAgICAgICAgICBjb21wdXRlZDogYWNjZXNzb3IgPT09ICdbJywKLSAgICAgICAgICAgICAg
ICBvYmplY3Q6IG9iamVjdCwKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHkKLSAg
ICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlTmV3RXhwcmVzc2lvbjog
ZnVuY3Rpb24gKGNhbGxlZSwgYXJncykgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguTmV3RXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICBjYWxs
ZWU6IGNhbGxlZSwKLSAgICAgICAgICAgICAgICAnYXJndW1lbnRzJzogYXJncwotICAgICAgICAg
ICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVPYmplY3RFeHByZXNzaW9uOiBmdW5j
dGlvbiAocHJvcGVydGllcykgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAg
ICB0eXBlOiBTeW50YXguT2JqZWN0RXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICBwcm9wZXJ0
aWVzOiBwcm9wZXJ0aWVzCi0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNy
ZWF0ZVBvc3RmaXhFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50KSB7Ci0g
ICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VcGRhdGVF
eHByZXNzaW9uLAotICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKLSAgICAgICAg
ICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsCi0gICAgICAgICAgICAgICAgcHJlZml4OiBmYWxz
ZQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVQcm9ncmFtOiBm
dW5jdGlvbiAoYm9keSkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguUHJvZ3JhbSwKLSAgICAgICAgICAgICAgICBib2R5OiBib2R5Ci0gICAgICAg
ICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZVByb3BlcnR5OiBmdW5jdGlvbiAo
a2luZCwga2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAg
ICB0eXBlOiBTeW50YXguUHJvcGVydHksCi0gICAgICAgICAgICAgICAga2V5OiBrZXksCi0gICAg
ICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAotICAgICAgICAgICAgICAgIGtpbmQ6IGtpbmQKLSAg
ICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlUmV0dXJuU3RhdGVtZW50
OiBmdW5jdGlvbiAoYXJndW1lbnQpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LlJldHVyblN0YXRlbWVudCwKLSAgICAgICAgICAgICAgICBhcmd1
bWVudDogYXJndW1lbnQKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3Jl
YXRlU2VxdWVuY2VFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwcmVzc2lvbnMpIHsKLSAgICAgICAg
ICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlNlcXVlbmNlRXhwcmVz
c2lvbiwKLSAgICAgICAgICAgICAgICBleHByZXNzaW9uczogZXhwcmVzc2lvbnMKLSAgICAgICAg
ICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlU3dpdGNoQ2FzZTogZnVuY3Rpb24g
KHRlc3QsIGNvbnNlcXVlbnQpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LlN3aXRjaENhc2UsCi0gICAgICAgICAgICAgICAgdGVzdDogdGVzdCwK
LSAgICAgICAgICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50Ci0gICAgICAgICAgICB9Owot
ICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZVN3aXRjaFN0YXRlbWVudDogZnVuY3Rpb24gKGRp
c2NyaW1pbmFudCwgY2FzZXMpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LlN3aXRjaFN0YXRlbWVudCwKLSAgICAgICAgICAgICAgICBkaXNjcmlt
aW5hbnQ6IGRpc2NyaW1pbmFudCwKLSAgICAgICAgICAgICAgICBjYXNlczogY2FzZXMKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlVGhpc0V4cHJlc3Npb246IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LlRoaXNFeHByZXNzaW9uCi0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAg
ICAgIGNyZWF0ZVRocm93U3RhdGVtZW50OiBmdW5jdGlvbiAoYXJndW1lbnQpIHsKLSAgICAgICAg
ICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlRocm93U3RhdGVtZW50
LAotICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudAotICAgICAgICAgICAgfTsKLSAg
ICAgICAgfSwKLQotICAgICAgICBjcmVhdGVUcnlTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChibG9jaywg
Z3VhcmRlZEhhbmRsZXJzLCBoYW5kbGVycywgZmluYWxpemVyKSB7Ci0gICAgICAgICAgICByZXR1
cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UcnlTdGF0ZW1lbnQsCi0gICAgICAg
ICAgICAgICAgYmxvY2s6IGJsb2NrLAotICAgICAgICAgICAgICAgIGd1YXJkZWRIYW5kbGVyczog
Z3VhcmRlZEhhbmRsZXJzLAotICAgICAgICAgICAgICAgIGhhbmRsZXJzOiBoYW5kbGVycywKLSAg
ICAgICAgICAgICAgICBmaW5hbGl6ZXI6IGZpbmFsaXplcgotICAgICAgICAgICAgfTsKLSAgICAg
ICAgfSwKLQotICAgICAgICBjcmVhdGVVbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRv
ciwgYXJndW1lbnQpIHsKLSAgICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gJysrJyB8fCBvcGVy
YXRvciA9PT0gJy0tJykgewotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5VcGRhdGVFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRvcjogb3BlcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1
bWVudCwKLSAgICAgICAgICAgICAgICAgICAgcHJlZml4OiB0cnVlCi0gICAgICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LlVuYXJ5RXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICBvcGVyYXRvcjog
b3BlcmF0b3IsCi0gICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LAotICAgICAgICAg
ICAgICAgIHByZWZpeDogdHJ1ZQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAg
ICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbiAoZGVjbGFyYXRpb25zLCBraW5k
KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5W
YXJpYWJsZURlY2xhcmF0aW9uLAotICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogZGVjbGFy
YXRpb25zLAotICAgICAgICAgICAgICAgIGtpbmQ6IGtpbmQKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdG9yOiBmdW5jdGlvbiAoaWQs
IGluaXQpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LlZhcmlhYmxlRGVjbGFyYXRvciwKLSAgICAgICAgICAgICAgICBpZDogaWQsCi0gICAgICAg
ICAgICAgICAgaW5pdDogaW5pdAotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAg
ICBjcmVhdGVXaGlsZVN0YXRlbWVudDogZnVuY3Rpb24gKHRlc3QsIGJvZHkpIHsKLSAgICAgICAg
ICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LldoaWxlU3RhdGVtZW50
LAotICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCi0gICAgICAgICAgICAgICAgYm9keTogYm9k
eQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVXaXRoU3RhdGVt
ZW50OiBmdW5jdGlvbiAob2JqZWN0LCBib2R5KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5XaXRoU3RhdGVtZW50LAotICAgICAgICAgICAgICAg
IG9iamVjdDogb2JqZWN0LAotICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKLSAgICAgICAgICAg
IH07Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMg
YSBsaW5lIHRlcm1pbmF0b3IgYmVmb3JlIHRoZSBuZXh0IHRva2VuLgotCi0gICAgZnVuY3Rpb24g
cGVla0xpbmVUZXJtaW5hdG9yKCkgewotICAgICAgICB2YXIgcG9zLCBsaW5lLCBzdGFydCwgZm91
bmQ7Ci0KLSAgICAgICAgcG9zID0gaW5kZXg7Ci0gICAgICAgIGxpbmUgPSBsaW5lTnVtYmVyOwot
ICAgICAgICBzdGFydCA9IGxpbmVTdGFydDsKLSAgICAgICAgc2tpcENvbW1lbnQoKTsKLSAgICAg
ICAgZm91bmQgPSBsaW5lTnVtYmVyICE9PSBsaW5lOwotICAgICAgICBpbmRleCA9IHBvczsKLSAg
ICAgICAgbGluZU51bWJlciA9IGxpbmU7Ci0gICAgICAgIGxpbmVTdGFydCA9IHN0YXJ0OwotCi0g
ICAgICAgIHJldHVybiBmb3VuZDsKLSAgICB9Ci0KLSAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24K
LQotICAgIGZ1bmN0aW9uIHRocm93RXJyb3IodG9rZW4sIG1lc3NhZ2VGb3JtYXQpIHsKLSAgICAg
ICAgdmFyIGVycm9yLAotICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5j
YWxsKGFyZ3VtZW50cywgMiksCi0gICAgICAgICAgICBtc2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxh
Y2UoCi0gICAgICAgICAgICAgICAgLyUoXGQpL2csCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24g
KHdob2xlLCBpbmRleCkgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoaW5kZXggPCBhcmdz
Lmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UnKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICk7Ci0KLSAgICAgICAgaWYgKHR5cGVvZiB0b2tlbi5saW5lTnVtYmVyID09PSAnbnVt
YmVyJykgewotICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ0xpbmUgJyArIHRva2VuLmxp
bmVOdW1iZXIgKyAnOiAnICsgbXNnKTsKLSAgICAgICAgICAgIGVycm9yLmluZGV4ID0gdG9rZW4u
c3RhcnQ7Ci0gICAgICAgICAgICBlcnJvci5saW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjsK
LSAgICAgICAgICAgIGVycm9yLmNvbHVtbiA9IHRva2VuLnN0YXJ0IC0gbGluZVN0YXJ0ICsgMTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdMaW5lICcg
KyBsaW5lTnVtYmVyICsgJzogJyArIG1zZyk7Ci0gICAgICAgICAgICBlcnJvci5pbmRleCA9IGlu
ZGV4OwotICAgICAgICAgICAgZXJyb3IubGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAgICAg
ICAgICBlcnJvci5jb2x1bW4gPSBpbmRleCAtIGxpbmVTdGFydCArIDE7Ci0gICAgICAgIH0KLQot
ICAgICAgICBlcnJvci5kZXNjcmlwdGlvbiA9IG1zZzsKLSAgICAgICAgdGhyb3cgZXJyb3I7Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gdGhyb3dFcnJvclRvbGVyYW50KCkgewotICAgICAgICB0cnkg
ewotICAgICAgICAgICAgdGhyb3dFcnJvci5hcHBseShudWxsLCBhcmd1bWVudHMpOwotICAgICAg
ICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7Ci0gICAgICAg
ICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2goZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LQotICAgIC8vIFRocm93IGFuIGV4Y2VwdGlvbiBiZWNhdXNlIG9mIHRoZSB0b2tlbi4KLQotICAg
IGZ1bmN0aW9uIHRocm93VW5leHBlY3RlZCh0b2tlbikgewotICAgICAgICBpZiAodG9rZW4udHlw
ZSA9PT0gVG9rZW4uRU9GKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdl
cy5VbmV4cGVjdGVkRU9TKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0b2tlbi50eXBlID09
PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkgewotICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwg
TWVzc2FnZXMuVW5leHBlY3RlZE51bWJlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodG9r
ZW4udHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgewotICAgICAgICAgICAgdGhyb3dFcnJv
cih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFN0cmluZyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgewotICAgICAgICAgICAgdGhy
b3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZElkZW50aWZpZXIpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKLSAgICAgICAg
ICAgIGlmIChpc0Z1dHVyZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkUmVzZXJ2ZWQpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRv
a2VuLnZhbHVlKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwg
TWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4
cGVjdGVkVG9rZW4sIHRva2VuLnZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEJvb2xl
YW5MaXRlcmFsLCBOdWxsTGl0ZXJhbCwgb3IgUHVuY3R1YXRvci4KLSAgICAgICAgdGhyb3dFcnJv
cih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCB0b2tlbi52YWx1ZSk7Ci0gICAgfQot
Ci0gICAgLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQgcHVu
Y3R1YXRvci4KLSAgICAvLyBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KLQot
ICAgIGZ1bmN0aW9uIGV4cGVjdCh2YWx1ZSkgewotICAgICAgICB2YXIgdG9rZW4gPSBsZXgoKTsK
LSAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgfHwgdG9rZW4udmFs
dWUgIT09IHZhbHVlKSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNoIHRo
ZSBzcGVjaWZpZWQga2V5d29yZC4KLSAgICAvLyBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJl
IHRocm93bi4KLQotICAgIGZ1bmN0aW9uIGV4cGVjdEtleXdvcmQoa2V5d29yZCkgewotICAgICAg
ICB2YXIgdG9rZW4gPSBsZXgoKTsKLSAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLktl
eXdvcmQgfHwgdG9rZW4udmFsdWUgIT09IGtleXdvcmQpIHsKLSAgICAgICAgICAgIHRocm93VW5l
eHBlY3RlZCh0b2tlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBp
ZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci4KLQotICAg
IGZ1bmN0aW9uIG1hdGNoKHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBsb29rYWhlYWQudHlwZSA9
PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09IHZhbHVlOwotICAgIH0K
LQotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNp
ZmllZCBrZXl3b3JkCi0KLSAgICBmdW5jdGlvbiBtYXRjaEtleXdvcmQoa2V5d29yZCkgewotICAg
ICAgICByZXR1cm4gbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQgJiYgbG9va2FoZWFk
LnZhbHVlID09PSBrZXl3b3JkOwotICAgIH0KLQotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBu
ZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IKLQotICAgIGZ1bmN0aW9uIG1hdGNo
QXNzaWduKCkgewotICAgICAgICB2YXIgb3A7Ci0KLSAgICAgICAgaWYgKGxvb2thaGVhZC50eXBl
ICE9PSBUb2tlbi5QdW5jdHVhdG9yKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgICAgb3AgPSBsb29rYWhlYWQudmFsdWU7Ci0gICAgICAgIHJldHVybiBvcCA9
PT0gJz0nIHx8Ci0gICAgICAgICAgICBvcCA9PT0gJyo9JyB8fAotICAgICAgICAgICAgb3AgPT09
ICcvPScgfHwKLSAgICAgICAgICAgIG9wID09PSAnJT0nIHx8Ci0gICAgICAgICAgICBvcCA9PT0g
Jys9JyB8fAotICAgICAgICAgICAgb3AgPT09ICctPScgfHwKLSAgICAgICAgICAgIG9wID09PSAn
PDw9JyB8fAotICAgICAgICAgICAgb3AgPT09ICc+Pj0nIHx8Ci0gICAgICAgICAgICBvcCA9PT0g
Jz4+Pj0nIHx8Ci0gICAgICAgICAgICBvcCA9PT0gJyY9JyB8fAotICAgICAgICAgICAgb3AgPT09
ICdePScgfHwKLSAgICAgICAgICAgIG9wID09PSAnfD0nOwotICAgIH0KLQotICAgIGZ1bmN0aW9u
IGNvbnN1bWVTZW1pY29sb24oKSB7Ci0gICAgICAgIHZhciBsaW5lOwotCi0gICAgICAgIC8vIENh
dGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWljb2xvbiAo
VSswMDNCKS4KLSAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzQiB8
fCBtYXRjaCgnOycpKSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGxpbmUgPSBsaW5lTnVtYmVyOwotICAgICAgICBza2lwQ29t
bWVudCgpOwotICAgICAgICBpZiAobGluZU51bWJlciAhPT0gbGluZSkgewotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tl
bi5FT0YgJiYgIW1hdGNoKCd9JykpIHsKLSAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29r
YWhlYWQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgcHJvdmlk
ZWQgZXhwcmVzc2lvbiBpcyBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uCi0KLSAgICBmdW5jdGlvbiBp
c0xlZnRIYW5kU2lkZShleHByKSB7Ci0gICAgICAgIHJldHVybiBleHByLnR5cGUgPT09IFN5bnRh
eC5JZGVudGlmaWVyIHx8IGV4cHIudHlwZSA9PT0gU3ludGF4Lk1lbWJlckV4cHJlc3Npb247Ci0g
ICAgfQotCi0gICAgLy8gMTEuMS40IEFycmF5IEluaXRpYWxpc2VyCi0KLSAgICBmdW5jdGlvbiBw
YXJzZUFycmF5SW5pdGlhbGlzZXIoKSB7Ci0gICAgICAgIHZhciBlbGVtZW50cyA9IFtdLCBzdGFy
dFRva2VuOwotCi0gICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgIGV4cGVj
dCgnWycpOwotCi0gICAgICAgIHdoaWxlICghbWF0Y2goJ10nKSkgewotICAgICAgICAgICAgaWYg
KG1hdGNoKCcsJykpIHsKLSAgICAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgICAgICBl
bGVtZW50cy5wdXNoKG51bGwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBlbGVtZW50cy5wdXNoKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIW1hdGNoKCddJykpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcs
Jyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgbGV4KCk7Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3Jl
YXRlQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKSwgc3RhcnRUb2tlbik7Ci0gICAgfQotCi0gICAg
Ly8gMTEuMS41IE9iamVjdCBJbml0aWFsaXNlcgotCi0gICAgZnVuY3Rpb24gcGFyc2VQcm9wZXJ0
eUZ1bmN0aW9uKHBhcmFtLCBmaXJzdCkgewotICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QsIGJv
ZHksIHN0YXJ0VG9rZW47Ci0KLSAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7Ci0gICAg
ICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9u
U291cmNlRWxlbWVudHMoKTsKLSAgICAgICAgaWYgKGZpcnN0ICYmIHN0cmljdCAmJiBpc1Jlc3Ry
aWN0ZWRXb3JkKHBhcmFtWzBdLm5hbWUpKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJh
bnQoZmlyc3QsIE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
c3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7Ci0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5k
KGRlbGVnYXRlLmNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbihudWxsLCBwYXJhbSwgW10sIGJvZHkp
LCBzdGFydFRva2VuKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFByb3BlcnR5
S2V5KCkgewotICAgICAgICB2YXIgdG9rZW4sIHN0YXJ0VG9rZW47Ci0KLSAgICAgICAgc3RhcnRU
b2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgdG9rZW4gPSBsZXgoKTsKLQotICAgICAgICAvLyBO
b3RlOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGZyb20gcGFyc2VPYmplY3RQcm9wZXJ0
eSgpLCB3aGVyZQotICAgICAgICAvLyBFT0YgYW5kIFB1bmN0dWF0b3IgdG9rZW5zIGFyZSBhbHJl
YWR5IGZpbHRlcmVkIG91dC4KLQotICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uU3Ry
aW5nTGl0ZXJhbCB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkgewotICAg
ICAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tlbi5vY3RhbCkgewotICAgICAgICAgICAgICAgIHRo
cm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRl
LmNyZWF0ZUxpdGVyYWwodG9rZW4pLCBzdGFydFRva2VuKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUlkZW50aWZpZXIodG9rZW4u
dmFsdWUpLCBzdGFydFRva2VuKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFBy
b3BlcnR5KCkgewotICAgICAgICB2YXIgdG9rZW4sIGtleSwgaWQsIHZhbHVlLCBwYXJhbSwgc3Rh
cnRUb2tlbjsKLQotICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgc3RhcnRUb2tl
biA9IGxvb2thaGVhZDsKLQotICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRp
ZmllcikgewotCi0gICAgICAgICAgICBpZCA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKLQot
ICAgICAgICAgICAgLy8gUHJvcGVydHkgQXNzaWdubWVudDogR2V0dGVyIGFuZCBTZXR0ZXIuCi0K
LSAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJ2dldCcgJiYgIW1hdGNoKCc6JykpIHsK
LSAgICAgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Ci0gICAgICAg
ICAgICAgICAgZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KCcpJyk7Ci0gICAg
ICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24oW10pOwotICAgICAgICAg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdn
ZXQnLCBrZXksIHZhbHVlKSwgc3RhcnRUb2tlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAodG9rZW4udmFsdWUgPT09ICdzZXQnICYmICFtYXRjaCgnOicpKSB7Ci0gICAgICAgICAg
ICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOwotICAgICAgICAgICAgICAgIGV4
cGVjdCgnKCcpOwotICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOwotICAgICAgICAg
ICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGV4cGVjdCgnKScpOwotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9s
ZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihbXSk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSBbIHBhcnNl
VmFyaWFibGVJZGVudGlmaWVyKCkgXTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcpJyk7
Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHBhcmFt
LCB0b2tlbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdzZXQnLCBrZXksIHZhbHVlKSwg
c3RhcnRUb2tlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBleHBlY3QoJzonKTsKLSAg
ICAgICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwotICAgICAgICAg
ICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2luaXQn
LCBpZCwgdmFsdWUpLCBzdGFydFRva2VuKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4u
dHlwZSA9PT0gVG9rZW4uRU9GIHx8IHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHsK
LSAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Ci0gICAgICAgICAgICBl
eHBlY3QoJzonKTsKLSAgICAgICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lv
bigpOwotICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRl
UHJvcGVydHkoJ2luaXQnLCBrZXksIHZhbHVlKSwgc3RhcnRUb2tlbik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCkgewotICAgICAgICB2
YXIgcHJvcGVydGllcyA9IFtdLCBwcm9wZXJ0eSwgbmFtZSwga2V5LCBraW5kLCBtYXAgPSB7fSwg
dG9TdHJpbmcgPSBTdHJpbmcsIHN0YXJ0VG9rZW47Ci0KLSAgICAgICAgc3RhcnRUb2tlbiA9IGxv
b2thaGVhZDsKLQotICAgICAgICBleHBlY3QoJ3snKTsKLQotICAgICAgICB3aGlsZSAoIW1hdGNo
KCd9JykpIHsKLSAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eSgpOwot
Ci0gICAgICAgICAgICBpZiAocHJvcGVydHkua2V5LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVy
KSB7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IHByb3BlcnR5LmtleS5uYW1lOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBuYW1lID0gdG9TdHJpbmcocHJvcGVydHkua2V5
LnZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGtpbmQgPSAocHJvcGVydHkua2lu
ZCA9PT0gJ2luaXQnKSA/IFByb3BlcnR5S2luZC5EYXRhIDogKHByb3BlcnR5LmtpbmQgPT09ICdn
ZXQnKSA/IFByb3BlcnR5S2luZC5HZXQgOiBQcm9wZXJ0eUtpbmQuU2V0OwotCi0gICAgICAgICAg
ICBrZXkgPSAnJCcgKyBuYW1lOwotICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFz
T3duUHJvcGVydHkuY2FsbChtYXAsIGtleSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobWFwW2tl
eV0gPT09IFByb3BlcnR5S2luZC5EYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJp
Y3QgJiYga2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0RHVwbGljYXRlUHJvcGVy
dHkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgIT09IFByb3BlcnR5S2lu
ZC5EYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30s
IE1lc3NhZ2VzLkFjY2Vzc29yRGF0YVByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09
PSBQcm9wZXJ0eUtpbmQuRGF0YSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckRhdGFQcm9wZXJ0eSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobWFwW2tleV0gJiBraW5kKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vzc29yR2V0U2V0KTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBtYXBba2V5XSB8PSBraW5kOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBtYXBba2V5XSA9IGtpbmQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByb3BlcnRp
ZXMucHVzaChwcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgIGlmICghbWF0Y2goJ30nKSkgewotICAg
ICAgICAgICAgICAgIGV4cGVjdCgnLCcpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgZXhwZWN0KCd9Jyk7Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVs
ZWdhdGUuY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKSwgc3RhcnRUb2tlbik7Ci0g
ICAgfQotCi0gICAgLy8gMTEuMS42IFRoZSBHcm91cGluZyBPcGVyYXRvcgotCi0gICAgZnVuY3Rp
b24gcGFyc2VHcm91cEV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciBleHByOwotCi0gICAgICAg
IGV4cGVjdCgnKCcpOwotCi0gICAgICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTsKLQotICAg
ICAgICBleHBlY3QoJyknKTsKLQotICAgICAgICByZXR1cm4gZXhwcjsKLSAgICB9Ci0KLQotICAg
IC8vIDExLjEgUHJpbWFyeSBFeHByZXNzaW9ucwotCi0gICAgZnVuY3Rpb24gcGFyc2VQcmltYXJ5
RXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIHR5cGUsIHRva2VuLCBleHByLCBzdGFydFRva2Vu
OwotCi0gICAgICAgIGlmIChtYXRjaCgnKCcpKSB7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VH
cm91cEV4cHJlc3Npb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXRjaCgnWycpKSB7
Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAobWF0Y2goJ3snKSkgewotICAgICAgICAgICAgcmV0dXJuIHBhcnNlT2Jq
ZWN0SW5pdGlhbGlzZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHR5cGUgPSBsb29rYWhlYWQu
dHlwZTsKLSAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLQotICAgICAgICBpZiAodHlw
ZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgewotICAgICAgICAgICAgZXhwciA9ICBkZWxlZ2F0ZS5j
cmVhdGVJZGVudGlmaWVyKGxleCgpLnZhbHVlKTsKLSAgICAgICAgfSBlbHNlIGlmICh0eXBlID09
PSBUb2tlbi5TdHJpbmdMaXRlcmFsIHx8IHR5cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFsKSB7
Ci0gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGxvb2thaGVhZC5vY3RhbCkgewotICAgICAgICAg
ICAgICAgIHRocm93RXJyb3JUb2xlcmFudChsb29rYWhlYWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFs
TGl0ZXJhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3Jl
YXRlTGl0ZXJhbChsZXgoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uS2V5
d29yZCkgewotICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZnVuY3Rpb24nKSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgndGhpcycpKSB7Ci0gICAgICAgICAg
ICAgICAgbGV4KCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVRoaXNF
eHByZXNzaW9uKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93
VW5leHBlY3RlZChsZXgoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodHlw
ZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwpIHsKLSAgICAgICAgICAgIHRva2VuID0gbGV4KCk7
Ci0gICAgICAgICAgICB0b2tlbi52YWx1ZSA9ICh0b2tlbi52YWx1ZSA9PT0gJ3RydWUnKTsKLSAg
ICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2VuKTsKLSAgICAgICAg
fSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbCkgewotICAgICAgICAgICAgdG9r
ZW4gPSBsZXgoKTsKLSAgICAgICAgICAgIHRva2VuLnZhbHVlID0gbnVsbDsKLSAgICAgICAgICAg
IGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2VuKTsKLSAgICAgICAgfSBlbHNlIGlm
IChtYXRjaCgnLycpIHx8IG1hdGNoKCcvPScpKSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGV4
dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAgICBleHByID0gZGVs
ZWdhdGUuY3JlYXRlTGl0ZXJhbChjb2xsZWN0UmVnZXgoKSk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHNjYW5SZWdF
eHAoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwZWVrKCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7Ci0gICAgfQot
Ci0gICAgLy8gMTEuMiBMZWZ0LUhhbmQtU2lkZSBFeHByZXNzaW9ucwotCi0gICAgZnVuY3Rpb24g
cGFyc2VBcmd1bWVudHMoKSB7Ci0gICAgICAgIHZhciBhcmdzID0gW107Ci0KLSAgICAgICAgZXhw
ZWN0KCcoJyk7Ci0KLSAgICAgICAgaWYgKCFtYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICB3aGls
ZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBhcmdzLnB1c2gocGFyc2VBc3Np
Z25tZW50RXhwcmVzc2lvbigpKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2goJyknKSkgewot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZXhwZWN0KCcsJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBl
eHBlY3QoJyknKTsKLQotICAgICAgICByZXR1cm4gYXJnczsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKSB7Ci0gICAgICAgIHZhciB0b2tlbiwgc3RhcnRU
b2tlbjsKLQotICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwotICAgICAgICB0b2tlbiA9
IGxleCgpOwotCi0gICAgICAgIGlmICghaXNJZGVudGlmaWVyTmFtZSh0b2tlbikpIHsKLSAgICAg
ICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVyKHRva2VuLnZhbHVl
KSwgc3RhcnRUb2tlbik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZE1l
bWJlcigpIHsKLSAgICAgICAgZXhwZWN0KCcuJyk7Ci0KLSAgICAgICAgcmV0dXJuIHBhcnNlTm9u
Q29tcHV0ZWRQcm9wZXJ0eSgpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlQ29tcHV0ZWRN
ZW1iZXIoKSB7Ci0gICAgICAgIHZhciBleHByOwotCi0gICAgICAgIGV4cGVjdCgnWycpOwotCi0g
ICAgICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTsKLQotICAgICAgICBleHBlY3QoJ10nKTsK
LQotICAgICAgICByZXR1cm4gZXhwcjsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZU5ld0V4
cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciBjYWxsZWUsIGFyZ3MsIHN0YXJ0VG9rZW47Ci0KLSAg
ICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgZXhwZWN0S2V5d29yZCgnbmV3
Jyk7Ci0gICAgICAgIGNhbGxlZSA9IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbigpOwotICAg
ICAgICBhcmdzID0gbWF0Y2goJygnKSA/IHBhcnNlQXJndW1lbnRzKCkgOiBbXTsKLQotICAgICAg
ICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVOZXdFeHByZXNzaW9uKGNh
bGxlZSwgYXJncyksIHN0YXJ0VG9rZW4pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlTGVm
dEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpIHsKLSAgICAgICAgdmFyIHByZXZpb3VzQWxs
b3dJbiwgZXhwciwgYXJncywgcHJvcGVydHksIHN0YXJ0VG9rZW47Ci0KLSAgICAgICAgc3RhcnRU
b2tlbiA9IGxvb2thaGVhZDsKLQotICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxv
d0luOwotICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKLSAgICAgICAgZXhwciA9IG1hdGNo
S2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4cHJl
c3Npb24oKTsKLSAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKLQotICAg
ICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2goJy4nKSkgewotICAgICAgICAg
ICAgICAgIHByb3BlcnR5ID0gcGFyc2VOb25Db21wdXRlZE1lbWJlcigpOwotICAgICAgICAgICAg
ICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCcuJywgZXhwciwgcHJv
cGVydHkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKCcpKSB7Ci0gICAgICAgICAg
ICAgICAgYXJncyA9IHBhcnNlQXJndW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IGRl
bGVnYXRlLmNyZWF0ZUNhbGxFeHByZXNzaW9uKGV4cHIsIGFyZ3MpOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChtYXRjaCgnWycpKSB7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZUNv
bXB1dGVkTWVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1l
bWJlckV4cHJlc3Npb24oJ1snLCBleHByLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVs
ZWdhdGUubWFya0VuZChleHByLCBzdGFydFRva2VuKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBleHByOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVz
c2lvbigpIHsKLSAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJbiwgZXhwciwgcHJvcGVydHksIHN0
YXJ0VG9rZW47Ci0KLSAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLQotICAgICAgICBw
cmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luOwotICAgICAgICBleHByID0gbWF0Y2hLZXl3
b3JkKCduZXcnKSA/IHBhcnNlTmV3RXhwcmVzc2lvbigpIDogcGFyc2VQcmltYXJ5RXhwcmVzc2lv
bigpOwotICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOwotCi0gICAgICAg
IHdoaWxlIChtYXRjaCgnLicpIHx8IG1hdGNoKCdbJykpIHsKLSAgICAgICAgICAgIGlmIChtYXRj
aCgnWycpKSB7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZUNvbXB1dGVkTWVtYmVy
KCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Np
b24oJ1snLCBleHByLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHByb3BlcnR5ID0gcGFyc2VOb25Db21wdXRlZE1lbWJlcigpOwotICAgICAgICAgICAg
ICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCcuJywgZXhwciwgcHJv
cGVydHkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHBy
LCBzdGFydFRva2VuKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBleHByOwotICAgIH0K
LQotICAgIC8vIDExLjMgUG9zdGZpeCBFeHByZXNzaW9ucwotCi0gICAgZnVuY3Rpb24gcGFyc2VQ
b3N0Zml4RXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIGV4cHIsIHRva2VuLCBzdGFydFRva2Vu
ID0gbG9va2FoZWFkOwotCi0gICAgICAgIGV4cHIgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Np
b25BbGxvd0NhbGwoKTsKLQotICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlB1
bmN0dWF0b3IpIHsKLSAgICAgICAgICAgIGlmICgobWF0Y2goJysrJykgfHwgbWF0Y2goJy0tJykp
ICYmICFwZWVrTGluZVRlcm1pbmF0b3IoKSkgewotICAgICAgICAgICAgICAgIC8vIDExLjMuMSwg
MTEuMy4yCi0gICAgICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IFN5bnRh
eC5JZGVudGlmaWVyICYmIGlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkgewotICAgICAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdExIU1Bvc3Rm
aXgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghaXNMZWZ0SGFu
ZFNpZGUoZXhwcikpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9
LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICB0b2tlbiA9IGxleCgpOwotICAgICAgICAgICAgICAgIGV4cHIgPSBk
ZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVBvc3RmaXhFeHByZXNzaW9uKHRva2VuLnZh
bHVlLCBleHByKSwgc3RhcnRUb2tlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gZXhwcjsKLSAgICB9Ci0KLSAgICAvLyAxMS40IFVuYXJ5IE9wZXJhdG9ycwot
Ci0gICAgZnVuY3Rpb24gcGFyc2VVbmFyeUV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciB0b2tl
biwgZXhwciwgc3RhcnRUb2tlbjsKLQotICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRv
a2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnR5cGUgIT09IFRva2VuLktleXdvcmQpIHsKLSAg
ICAgICAgICAgIGV4cHIgPSBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAobWF0Y2goJysrJykgfHwgbWF0Y2goJy0tJykpIHsKLSAgICAgICAgICAgIHN0YXJ0VG9r
ZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgICAgICB0b2tlbiA9IGxleCgpOwotICAgICAgICAgICAg
ZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAvLyAxMS40LjQsIDEx
LjQuNQotICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IFN5bnRheC5JZGVu
dGlmaWVyICYmIGlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkgewotICAgICAgICAgICAgICAg
IHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0TEhTUHJlZml4KTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFpc0xlZnRIYW5kU2lkZShleHByKSkgewotICAg
ICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0lu
QXNzaWdubWVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0
ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpOwotICAgICAgICAgICAg
ZXhwciA9IGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7Ci0gICAgICAgIH0gZWxz
ZSBpZiAobWF0Y2goJysnKSB8fCBtYXRjaCgnLScpIHx8IG1hdGNoKCd+JykgfHwgbWF0Y2goJyEn
KSkgewotICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgICAgIHRv
a2VuID0gbGV4KCk7Ci0gICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsK
LSAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4u
dmFsdWUsIGV4cHIpOwotICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLm1hcmtFbmQoZXhwciwg
c3RhcnRUb2tlbik7Ci0gICAgICAgIH0gZWxzZSBpZiAobWF0Y2hLZXl3b3JkKCdkZWxldGUnKSB8
fCBtYXRjaEtleXdvcmQoJ3ZvaWQnKSB8fCBtYXRjaEtleXdvcmQoJ3R5cGVvZicpKSB7Ci0gICAg
ICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwotICAgICAgICAgICAgdG9rZW4gPSBsZXgo
KTsKLSAgICAgICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOwotICAgICAgICAg
ICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhw
cik7Ci0gICAgICAgICAgICBleHByID0gZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFydFRva2Vu
KTsKLSAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci5vcGVyYXRvciA9PT0gJ2RlbGV0ZScg
JiYgZXhwci5hcmd1bWVudC50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgewotICAgICAgICAg
ICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0RGVsZXRlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGV4cHIgPSBwYXJzZVBv
c3RmaXhFeHByZXNzaW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZXhwcjsKLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBiaW5hcnlQcmVjZWRlbmNlKHRva2VuLCBhbGxvd0luKSB7Ci0g
ICAgICAgIHZhciBwcmVjID0gMDsKLQotICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4u
UHVuY3R1YXRvciAmJiB0b2tlbi50eXBlICE9PSBUb2tlbi5LZXl3b3JkKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHsK
LSAgICAgICAgY2FzZSAnfHwnOgotICAgICAgICAgICAgcHJlYyA9IDE7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlICcmJic6Ci0gICAgICAgICAgICBwcmVjID0gMjsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJ3wnOgotICAgICAgICAgICAgcHJlYyA9IDM7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICdeJzoKLSAgICAgICAgICAgIHBy
ZWMgPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSAnJic6Ci0gICAgICAg
ICAgICBwcmVjID0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJz09JzoK
LSAgICAgICAgY2FzZSAnIT0nOgotICAgICAgICBjYXNlICc9PT0nOgotICAgICAgICBjYXNlICch
PT0nOgotICAgICAgICAgICAgcHJlYyA9IDY7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlICc8JzoKLSAgICAgICAgY2FzZSAnPic6Ci0gICAgICAgIGNhc2UgJzw9JzoKLSAgICAg
ICAgY2FzZSAnPj0nOgotICAgICAgICBjYXNlICdpbnN0YW5jZW9mJzoKLSAgICAgICAgICAgIHBy
ZWMgPSA3OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSAnaW4nOgotICAgICAg
ICAgICAgcHJlYyA9IGFsbG93SW4gPyA3IDogMDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgJzw8JzoKLSAgICAgICAgY2FzZSAnPj4nOgotICAgICAgICBjYXNlICc+Pj4nOgot
ICAgICAgICAgICAgcHJlYyA9IDg7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
ICcrJzoKLSAgICAgICAgY2FzZSAnLSc6Ci0gICAgICAgICAgICBwcmVjID0gOTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJyonOgotICAgICAgICBjYXNlICcvJzoKLSAgICAg
ICAgY2FzZSAnJSc6Ci0gICAgICAgICAgICBwcmVjID0gMTE7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gcHJlYzsKLSAgICB9Ci0KLSAgICAvLyAxMS41IE11bHRpcGxpY2F0aXZlIE9w
ZXJhdG9ycwotICAgIC8vIDExLjYgQWRkaXRpdmUgT3BlcmF0b3JzCi0gICAgLy8gMTEuNyBCaXR3
aXNlIFNoaWZ0IE9wZXJhdG9ycwotICAgIC8vIDExLjggUmVsYXRpb25hbCBPcGVyYXRvcnMKLSAg
ICAvLyAxMS45IEVxdWFsaXR5IE9wZXJhdG9ycwotICAgIC8vIDExLjEwIEJpbmFyeSBCaXR3aXNl
IE9wZXJhdG9ycwotICAgIC8vIDExLjExIEJpbmFyeSBMb2dpY2FsIE9wZXJhdG9ycwotCi0gICAg
ZnVuY3Rpb24gcGFyc2VCaW5hcnlFeHByZXNzaW9uKCkgewotICAgICAgICB2YXIgbWFya2VyLCBt
YXJrZXJzLCBleHByLCB0b2tlbiwgcHJlYywgc3RhY2ssIHJpZ2h0LCBvcGVyYXRvciwgbGVmdCwg
aTsKLQotICAgICAgICBtYXJrZXIgPSBsb29rYWhlYWQ7Ci0gICAgICAgIGxlZnQgPSBwYXJzZVVu
YXJ5RXhwcmVzc2lvbigpOwotCi0gICAgICAgIHRva2VuID0gbG9va2FoZWFkOwotICAgICAgICBw
cmVjID0gYmluYXJ5UHJlY2VkZW5jZSh0b2tlbiwgc3RhdGUuYWxsb3dJbik7Ci0gICAgICAgIGlm
IChwcmVjID09PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gbGVmdDsKLSAgICAgICAgfQotICAg
ICAgICB0b2tlbi5wcmVjID0gcHJlYzsKLSAgICAgICAgbGV4KCk7Ci0KLSAgICAgICAgbWFya2Vy
cyA9IFttYXJrZXIsIGxvb2thaGVhZF07Ci0gICAgICAgIHJpZ2h0ID0gcGFyc2VVbmFyeUV4cHJl
c3Npb24oKTsKLQotICAgICAgICBzdGFjayA9IFtsZWZ0LCB0b2tlbiwgcmlnaHRdOwotCi0gICAg
ICAgIHdoaWxlICgocHJlYyA9IGJpbmFyeVByZWNlZGVuY2UobG9va2FoZWFkLCBzdGF0ZS5hbGxv
d0luKSkgPiAwKSB7Ci0KLSAgICAgICAgICAgIC8vIFJlZHVjZTogbWFrZSBhIGJpbmFyeSBleHBy
ZXNzaW9uIGZyb20gdGhlIHRocmVlIHRvcG1vc3QgZW50cmllcy4KLSAgICAgICAgICAgIHdoaWxl
ICgoc3RhY2subGVuZ3RoID4gMikgJiYgKHByZWMgPD0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMl0u
cHJlYykpIHsKLSAgICAgICAgICAgICAgICByaWdodCA9IHN0YWNrLnBvcCgpOwotICAgICAgICAg
ICAgICAgIG9wZXJhdG9yID0gc3RhY2sucG9wKCkudmFsdWU7Ci0gICAgICAgICAgICAgICAgbGVm
dCA9IHN0YWNrLnBvcCgpOwotICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVC
aW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICAgICAg
bWFya2Vycy5wb3AoKTsKLSAgICAgICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJzW21hcmtlcnMu
bGVuZ3RoIC0gMV07Ci0gICAgICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBtYXJr
ZXIpOwotICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goZXhwcik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIFNoaWZ0LgotICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKLSAgICAg
ICAgICAgIHRva2VuLnByZWMgPSBwcmVjOwotICAgICAgICAgICAgc3RhY2sucHVzaCh0b2tlbik7
Ci0gICAgICAgICAgICBtYXJrZXJzLnB1c2gobG9va2FoZWFkKTsKLSAgICAgICAgICAgIGV4cHIg
PSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgc3RhY2sucHVzaChleHByKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIEZpbmFsIHJlZHVjZSB0byBjbGVhbi11cCB0aGUgc3Rh
Y2suCi0gICAgICAgIGkgPSBzdGFjay5sZW5ndGggLSAxOwotICAgICAgICBleHByID0gc3RhY2tb
aV07Ci0gICAgICAgIG1hcmtlcnMucG9wKCk7Ci0gICAgICAgIHdoaWxlIChpID4gMSkgewotICAg
ICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUJpbmFyeUV4cHJlc3Npb24oc3RhY2tbaSAt
IDFdLnZhbHVlLCBzdGFja1tpIC0gMl0sIGV4cHIpOwotICAgICAgICAgICAgaSAtPSAyOwotICAg
ICAgICAgICAgbWFya2VyID0gbWFya2Vycy5wb3AoKTsKLSAgICAgICAgICAgIGRlbGVnYXRlLm1h
cmtFbmQoZXhwciwgbWFya2VyKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBleHByOwot
ICAgIH0KLQotCi0gICAgLy8gMTEuMTIgQ29uZGl0aW9uYWwgT3BlcmF0b3IKLQotICAgIGZ1bmN0
aW9uIHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCkgewotICAgICAgICB2YXIgZXhwciwgcHJl
dmlvdXNBbGxvd0luLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUsIHN0YXJ0VG9rZW47Ci0KLSAgICAg
ICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLQotICAgICAgICBleHByID0gcGFyc2VCaW5hcnlF
eHByZXNzaW9uKCk7Ci0KLSAgICAgICAgaWYgKG1hdGNoKCc/JykpIHsKLSAgICAgICAgICAgIGxl
eCgpOwotICAgICAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjsKLSAgICAg
ICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOwotICAgICAgICAgICAgY29uc2VxdWVudCA9IHBh
cnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBw
cmV2aW91c0FsbG93SW47Ci0gICAgICAgICAgICBleHBlY3QoJzonKTsKLSAgICAgICAgICAgIGFs
dGVybmF0ZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKLQotICAgICAgICAgICAgZXhw
ciA9IGRlbGVnYXRlLmNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbihleHByLCBjb25zZXF1ZW50
LCBhbHRlcm5hdGUpOwotICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFydFRv
a2VuKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBleHByOwotICAgIH0KLQotICAgIC8v
IDExLjEzIEFzc2lnbm1lbnQgT3BlcmF0b3JzCi0KLSAgICBmdW5jdGlvbiBwYXJzZUFzc2lnbm1l
bnRFeHByZXNzaW9uKCkgewotICAgICAgICB2YXIgdG9rZW4sIGxlZnQsIHJpZ2h0LCBub2RlLCBz
dGFydFRva2VuOwotCi0gICAgICAgIHRva2VuID0gbG9va2FoZWFkOwotICAgICAgICBzdGFydFRv
a2VuID0gbG9va2FoZWFkOwotCi0gICAgICAgIG5vZGUgPSBsZWZ0ID0gcGFyc2VDb25kaXRpb25h
bEV4cHJlc3Npb24oKTsKLQotICAgICAgICBpZiAobWF0Y2hBc3NpZ24oKSkgewotICAgICAgICAg
ICAgLy8gTGVmdEhhbmRTaWRlRXhwcmVzc2lvbgotICAgICAgICAgICAgaWYgKCFpc0xlZnRIYW5k
U2lkZShsZWZ0KSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVz
c2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8vIDExLjEzLjEKLSAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgbGVmdC50eXBlID09PSBT
eW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGxlZnQubmFtZSkpIHsKLSAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdExIU0Fz
c2lnbm1lbnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0b2tlbiA9IGxleCgpOwot
ICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAg
ICAgICBub2RlID0gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVBc3NpZ25tZW50RXhw
cmVzc2lvbih0b2tlbi52YWx1ZSwgbGVmdCwgcmlnaHQpLCBzdGFydFRva2VuKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBub2RlOwotICAgIH0KLQotICAgIC8vIDExLjE0IENvbW1hIE9w
ZXJhdG9yCi0KLSAgICBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciBl
eHByLCBzdGFydFRva2VuID0gbG9va2FoZWFkOwotCi0gICAgICAgIGV4cHIgPSBwYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKCk7Ci0KLSAgICAgICAgaWYgKG1hdGNoKCcsJykpIHsKLSAgICAgICAg
ICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb24oWyBleHByIF0pOwot
Ci0gICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIW1hdGNoKCcsJykpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgICAgIGV4cHIuZXhw
cmVzc2lvbnMucHVzaChwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgfQotCi0gICAgLy8gMTIuMSBCbG9j
awotCi0gICAgZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnRMaXN0KCkgewotICAgICAgICB2YXIgbGlz
dCA9IFtdLAotICAgICAgICAgICAgc3RhdGVtZW50OwotCi0gICAgICAgIHdoaWxlIChpbmRleCA8
IGxlbmd0aCkgewotICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNlU291
cmNlRWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZW1lbnQgPT09ICd1bmRl
ZmluZWQnKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBsaXN0LnB1c2goc3RhdGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBs
aXN0OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlQmxvY2soKSB7Ci0gICAgICAgIHZhciBi
bG9jaywgc3RhcnRUb2tlbjsKLQotICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwotICAg
ICAgICBleHBlY3QoJ3snKTsKLQotICAgICAgICBibG9jayA9IHBhcnNlU3RhdGVtZW50TGlzdCgp
OwotCi0gICAgICAgIGV4cGVjdCgnfScpOwotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJr
RW5kKGRlbGVnYXRlLmNyZWF0ZUJsb2NrU3RhdGVtZW50KGJsb2NrKSwgc3RhcnRUb2tlbik7Ci0g
ICAgfQotCi0gICAgLy8gMTIuMiBWYXJpYWJsZSBTdGF0ZW1lbnQKLQotICAgIGZ1bmN0aW9uIHBh
cnNlVmFyaWFibGVJZGVudGlmaWVyKCkgewotICAgICAgICB2YXIgdG9rZW4sIHN0YXJ0VG9rZW47
Ci0KLSAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgdG9rZW4gPSBsZXgo
KTsKLQotICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uSWRlbnRpZmllcikgewotICAg
ICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUlkZW50aWZpZXIodG9rZW4udmFs
dWUpLCBzdGFydFRva2VuKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVj
bGFyYXRpb24oa2luZCkgewotICAgICAgICB2YXIgaW5pdCA9IG51bGwsIGlkLCBzdGFydFRva2Vu
OwotCi0gICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgIGlkID0gcGFyc2VW
YXJpYWJsZUlkZW50aWZpZXIoKTsKLQotICAgICAgICAvLyAxMi4yLjEKLSAgICAgICAgaWYgKHN0
cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7Ci0gICAgICAgICAgICB0aHJvd0Vy
cm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdFZhck5hbWUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGtpbmQgPT09ICdjb25zdCcpIHsKLSAgICAgICAgICAgIGV4cGVjdCgnPScpOwot
ICAgICAgICAgICAgaW5pdCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAg
fSBlbHNlIGlmIChtYXRjaCgnPScpKSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAg
IGluaXQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0
b3IoaWQsIGluaXQpLCBzdGFydFRva2VuKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZVZh
cmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpIHsKLSAgICAgICAgdmFyIGxpc3QgPSBbXTsKLQot
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICBsaXN0LnB1c2gocGFyc2VWYXJpYWJsZURlY2xhcmF0
aW9uKGtpbmQpKTsKLSAgICAgICAgICAgIGlmICghbWF0Y2goJywnKSkgewotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgIH0g
d2hpbGUgKGluZGV4IDwgbGVuZ3RoKTsKLQotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCkgewotICAgICAgICB2YXIgZGVj
bGFyYXRpb25zOwotCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ3ZhcicpOwotCi0gICAgICAgIGRl
Y2xhcmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKTsKLQotICAgICAgICBj
b25zdW1lU2VtaWNvbG9uKCk7Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVZhcmlh
YmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCAndmFyJyk7Ci0gICAgfQotCi0gICAgLy8ga2lu
ZCBtYXkgYmUgYGNvbnN0YCBvciBgbGV0YAotICAgIC8vIEJvdGggYXJlIGV4cGVyaW1lbnRhbCBh
bmQgbm90IGluIHRoZSBzcGVjaWZpY2F0aW9uIHlldC4KLSAgICAvLyBzZWUgaHR0cDovL3dpa2ku
ZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTpjb25zdAotICAgIC8vIGFuZCBodHRw
Oi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmxldAotICAgIGZ1bmN0
aW9uIHBhcnNlQ29uc3RMZXREZWNsYXJhdGlvbihraW5kKSB7Ci0gICAgICAgIHZhciBkZWNsYXJh
dGlvbnMsIHN0YXJ0VG9rZW47Ci0KLSAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLQot
ICAgICAgICBleHBlY3RLZXl3b3JkKGtpbmQpOwotCi0gICAgICAgIGRlY2xhcmF0aW9ucyA9IHBh
cnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qoa2luZCk7Ci0KLSAgICAgICAgY29uc3VtZVNlbWlj
b2xvbigpOwotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0
ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKSwgc3RhcnRUb2tlbik7Ci0g
ICAgfQotCi0gICAgLy8gMTIuMyBFbXB0eSBTdGF0ZW1lbnQKLQotICAgIGZ1bmN0aW9uIHBhcnNl
RW1wdHlTdGF0ZW1lbnQoKSB7Ci0gICAgICAgIGV4cGVjdCgnOycpOwotICAgICAgICByZXR1cm4g
ZGVsZWdhdGUuY3JlYXRlRW1wdHlTdGF0ZW1lbnQoKTsKLSAgICB9Ci0KLSAgICAvLyAxMi40IEV4
cHJlc3Npb24gU3RhdGVtZW50Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1l
bnQoKSB7Ci0gICAgICAgIHZhciBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgIGNv
bnN1bWVTZW1pY29sb24oKTsKLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUV4cHJlc3Np
b25TdGF0ZW1lbnQoZXhwcik7Ci0gICAgfQotCi0gICAgLy8gMTIuNSBJZiBzdGF0ZW1lbnQKLQot
ICAgIGZ1bmN0aW9uIHBhcnNlSWZTdGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZhciB0ZXN0LCBjb25z
ZXF1ZW50LCBhbHRlcm5hdGU7Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgnaWYnKTsKLQotICAg
ICAgICBleHBlY3QoJygnKTsKLQotICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7Ci0K
LSAgICAgICAgZXhwZWN0KCcpJyk7Ci0KLSAgICAgICAgY29uc2VxdWVudCA9IHBhcnNlU3RhdGVt
ZW50KCk7Ci0KLSAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZWxzZScpKSB7Ci0gICAgICAgICAg
ICBsZXgoKTsKLSAgICAgICAgICAgIGFsdGVybmF0ZSA9IHBhcnNlU3RhdGVtZW50KCk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhbHRlcm5hdGUgPSBudWxsOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUlmU3RhdGVtZW50KHRlc3QsIGNvbnNlcXVl
bnQsIGFsdGVybmF0ZSk7Ci0gICAgfQotCi0gICAgLy8gMTIuNiBJdGVyYXRpb24gU3RhdGVtZW50
cwotCi0gICAgZnVuY3Rpb24gcGFyc2VEb1doaWxlU3RhdGVtZW50KCkgewotICAgICAgICB2YXIg
Ym9keSwgdGVzdCwgb2xkSW5JdGVyYXRpb247Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgnZG8n
KTsKLQotICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uOwotICAgICAg
ICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7Ci0KLSAgICAgICAgYm9keSA9IHBhcnNlU3RhdGVt
ZW50KCk7Ci0KLSAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjsKLQot
ICAgICAgICBleHBlY3RLZXl3b3JkKCd3aGlsZScpOwotCi0gICAgICAgIGV4cGVjdCgnKCcpOwot
Ci0gICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKLQotICAgICAgICBleHBlY3QoJykn
KTsKLQotICAgICAgICBpZiAobWF0Y2goJzsnKSkgewotICAgICAgICAgICAgbGV4KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlRG9XaGlsZVN0YXRlbWVudChi
b2R5LCB0ZXN0KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZVdoaWxlU3RhdGVtZW50KCkg
ewotICAgICAgICB2YXIgdGVzdCwgYm9keSwgb2xkSW5JdGVyYXRpb247Ci0KLSAgICAgICAgZXhw
ZWN0S2V5d29yZCgnd2hpbGUnKTsKLQotICAgICAgICBleHBlY3QoJygnKTsKLQotICAgICAgICB0
ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7Ci0KLSAgICAgICAgZXhwZWN0KCcpJyk7Ci0KLSAgICAg
ICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjsKLSAgICAgICAgc3RhdGUuaW5J
dGVyYXRpb24gPSB0cnVlOwotCi0gICAgICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOwotCi0g
ICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247Ci0KLSAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLmNyZWF0ZVdoaWxlU3RhdGVtZW50KHRlc3QsIGJvZHkpOwotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIHBhcnNlRm9yVmFyaWFibGVEZWNsYXJhdGlvbigpIHsKLSAgICAgICAgdmFy
IHRva2VuLCBkZWNsYXJhdGlvbnMsIHN0YXJ0VG9rZW47Ci0KLSAgICAgICAgc3RhcnRUb2tlbiA9
IGxvb2thaGVhZDsKLSAgICAgICAgdG9rZW4gPSBsZXgoKTsKLSAgICAgICAgZGVjbGFyYXRpb25z
ID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOwotCi0gICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRp
b25zLCB0b2tlbi52YWx1ZSksIHN0YXJ0VG9rZW4pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBh
cnNlRm9yU3RhdGVtZW50KCkgewotICAgICAgICB2YXIgaW5pdCwgdGVzdCwgdXBkYXRlLCBsZWZ0
LCByaWdodCwgYm9keSwgb2xkSW5JdGVyYXRpb247Ci0KLSAgICAgICAgaW5pdCA9IHRlc3QgPSB1
cGRhdGUgPSBudWxsOwotCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2ZvcicpOwotCi0gICAgICAg
IGV4cGVjdCgnKCcpOwotCi0gICAgICAgIGlmIChtYXRjaCgnOycpKSB7Ci0gICAgICAgICAgICBs
ZXgoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3Zh
cicpIHx8IG1hdGNoS2V5d29yZCgnbGV0JykpIHsKLSAgICAgICAgICAgICAgICBzdGF0ZS5hbGxv
d0luID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaW5pdCA9IHBhcnNlRm9yVmFyaWFibGVEZWNs
YXJhdGlvbigpOwotICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOwotCi0gICAg
ICAgICAgICAgICAgaWYgKGluaXQuZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiBtYXRjaEtl
eXdvcmQoJ2luJykpIHsKLSAgICAgICAgICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGxlZnQgPSBpbml0OwotICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhw
cmVzc2lvbigpOwotICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93
SW4gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpbml0ID0gcGFyc2VFeHByZXNzaW9uKCk7Ci0g
ICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAobWF0Y2hLZXl3b3JkKCdpbicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIExlZnRIYW5k
U2lkZUV4cHJlc3Npb24KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0xlZnRIYW5kU2lkZShp
bml0KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBN
ZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JJbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7
Ci0gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGluaXQgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgewotICAg
ICAgICAgICAgICAgIGV4cGVjdCgnOycpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgewotCi0gICAgICAgICAgICBp
ZiAoIW1hdGNoKCc7JykpIHsKLSAgICAgICAgICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9u
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBleHBlY3QoJzsnKTsKLQotICAgICAgICAg
ICAgaWYgKCFtYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlID0gcGFyc2VFeHBy
ZXNzaW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBleHBlY3QoJykn
KTsKLQotICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uOwotICAgICAg
ICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7Ci0KLSAgICAgICAgYm9keSA9IHBhcnNlU3RhdGVt
ZW50KCk7Ci0KLSAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjsKLQot
ICAgICAgICByZXR1cm4gKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgPwotICAgICAgICAg
ICAgICAgIGRlbGVnYXRlLmNyZWF0ZUZvclN0YXRlbWVudChpbml0LCB0ZXN0LCB1cGRhdGUsIGJv
ZHkpIDoKLSAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5jcmVhdGVGb3JJblN0YXRlbWVudChsZWZ0
LCByaWdodCwgYm9keSk7Ci0gICAgfQotCi0gICAgLy8gMTIuNyBUaGUgY29udGludWUgc3RhdGVt
ZW50Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUNvbnRpbnVlU3RhdGVtZW50KCkgewotICAgICAgICB2
YXIgbGFiZWwgPSBudWxsLCBrZXk7Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgnY29udGludWUn
KTsKLQotICAgICAgICAvLyBPcHRpbWl6ZSB0aGUgbW9zdCBjb21tb24gZm9ybTogJ2NvbnRpbnVl
OycuCi0gICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0IpIHsKLSAg
ICAgICAgICAgIGxleCgpOwotCi0gICAgICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVl
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUNv
bnRpbnVlU3RhdGVtZW50KG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBlZWtMaW5l
VGVybWluYXRvcigpKSB7Ci0gICAgICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVlKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUNvbnRp
bnVlU3RhdGVtZW50KG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvb2thaGVhZC50
eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBsYWJlbCA9IHBhcnNlVmFy
aWFibGVJZGVudGlmaWVyKCk7Ci0KLSAgICAgICAgICAgIGtleSA9ICckJyArIGxhYmVsLm5hbWU7
Ci0gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChz
dGF0ZS5sYWJlbFNldCwga2V5KSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1l
c3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0KLSAgICAgICAgaWYgKGxhYmVsID09
PSBudWxsICYmICFzdGF0ZS5pbkl0ZXJhdGlvbikgewotICAgICAgICAgICAgdGhyb3dFcnJvcih7
fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBkZWxlZ2F0ZS5jcmVhdGVDb250aW51ZVN0YXRlbWVudChsYWJlbCk7Ci0gICAgfQotCi0gICAg
Ly8gMTIuOCBUaGUgYnJlYWsgc3RhdGVtZW50Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUJyZWFrU3Rh
dGVtZW50KCkgewotICAgICAgICB2YXIgbGFiZWwgPSBudWxsLCBrZXk7Ci0KLSAgICAgICAgZXhw
ZWN0S2V5d29yZCgnYnJlYWsnKTsKLQotICAgICAgICAvLyBDYXRjaCB0aGUgdmVyeSBjb21tb24g
Y2FzZSBmaXJzdDogaW1tZWRpYXRlbHkgYSBzZW1pY29sb24gKFUrMDAzQikuCi0gICAgICAgIGlm
IChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0IpIHsKLSAgICAgICAgICAgIGxleCgp
OwotCi0gICAgICAgICAgICBpZiAoIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRj
aCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJl
YWspOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRl
QnJlYWtTdGF0ZW1lbnQobnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocGVla0xpbmVU
ZXJtaW5hdG9yKCkpIHsKLSAgICAgICAgICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0
YXRlLmluU3dpdGNoKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LklsbGVnYWxCcmVhayk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5jcmVhdGVCcmVha1N0YXRlbWVudChudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgewotICAgICAgICAgICAgbGFi
ZWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOwotCi0gICAgICAgICAgICBrZXkgPSAnJCcg
KyBsYWJlbC5uYW1lOwotICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blBy
b3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKLSAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5Vbmtub3duTGFiZWwsIGxhYmVsLm5hbWUpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwotCi0gICAgICAg
IGlmIChsYWJlbCA9PT0gbnVsbCAmJiAhKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dp
dGNoKSkgewotICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFr
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVCcmVha1N0YXRl
bWVudChsYWJlbCk7Ci0gICAgfQotCi0gICAgLy8gMTIuOSBUaGUgcmV0dXJuIHN0YXRlbWVudAot
Ci0gICAgZnVuY3Rpb24gcGFyc2VSZXR1cm5TdGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZhciBhcmd1
bWVudCA9IG51bGw7Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgncmV0dXJuJyk7Ci0KLSAgICAg
ICAgaWYgKCFzdGF0ZS5pbkZ1bmN0aW9uQm9keSkgewotICAgICAgICAgICAgdGhyb3dFcnJvclRv
bGVyYW50KHt9LCBNZXNzYWdlcy5JbGxlZ2FsUmV0dXJuKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vICdyZXR1cm4nIGZvbGxvd2VkIGJ5IGEgc3BhY2UgYW5kIGFuIGlkZW50aWZpZXIgaXMgdmVy
eSBjb21tb24uCi0gICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4MjAp
IHsKLSAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChp
bmRleCArIDEpKSkgewotICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9u
KCk7Ci0gICAgICAgICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwotICAgICAgICAgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7
Ci0gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUmV0dXJuU3RhdGVtZW50KG51bGwp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtYXRjaCgnOycpKSB7Ci0gICAgICAgICAgICBp
ZiAoIW1hdGNoKCd9JykgJiYgbG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikgewotICAgICAg
ICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0KLSAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLmNyZWF0ZVJldHVyblN0YXRlbWVudChhcmd1bWVudCk7Ci0gICAgfQotCi0gICAg
Ly8gMTIuMTAgVGhlIHdpdGggc3RhdGVtZW50Ci0KLSAgICBmdW5jdGlvbiBwYXJzZVdpdGhTdGF0
ZW1lbnQoKSB7Ci0gICAgICAgIHZhciBvYmplY3QsIGJvZHk7Ci0KLSAgICAgICAgaWYgKHN0cmlj
dCkgewotICAgICAgICAgICAgLy8gVE9ETyhpa2FyaWVuYXRvcik6IFNob3VsZCB3ZSB1cGRhdGUg
dGhlIHRlc3QgY2FzZXMgaW5zdGVhZD8KLSAgICAgICAgICAgIHNraXBDb21tZW50KCk7Ci0gICAg
ICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdE1vZGVXaXRoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ3dpdGgnKTsKLQotICAgICAgICBl
eHBlY3QoJygnKTsKLQotICAgICAgICBvYmplY3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKLQotICAg
ICAgICBleHBlY3QoJyknKTsKLQotICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKLQot
ICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlV2l0aFN0YXRlbWVudChvYmplY3QsIGJvZHkp
OwotICAgIH0KLQotICAgIC8vIDEyLjEwIFRoZSBzd2l0aCBzdGF0ZW1lbnQKLQotICAgIGZ1bmN0
aW9uIHBhcnNlU3dpdGNoQ2FzZSgpIHsKLSAgICAgICAgdmFyIHRlc3QsIGNvbnNlcXVlbnQgPSBb
XSwgc3RhdGVtZW50LCBzdGFydFRva2VuOwotCi0gICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhl
YWQ7Ci0gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkgewotICAgICAgICAgICAg
bGV4KCk7Ci0gICAgICAgICAgICB0ZXN0ID0gbnVsbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGV4cGVjdEtleXdvcmQoJ2Nhc2UnKTsKLSAgICAgICAgICAgIHRlc3QgPSBwYXJzZUV4
cHJlc3Npb24oKTsKLSAgICAgICAgfQotICAgICAgICBleHBlY3QoJzonKTsKLQotICAgICAgICB3
aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChtYXRjaCgnfScpIHx8IG1h
dGNoS2V5d29yZCgnZGVmYXVsdCcpIHx8IG1hdGNoS2V5d29yZCgnY2FzZScpKSB7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZW1lbnQgPSBw
YXJzZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgY29uc2VxdWVudC5wdXNoKHN0YXRlbWVudCk7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5j
cmVhdGVTd2l0Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQpLCBzdGFydFRva2VuKTsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBwYXJzZVN3aXRjaFN0YXRlbWVudCgpIHsKLSAgICAgICAgdmFyIGRpc2Ny
aW1pbmFudCwgY2FzZXMsIGNsYXVzZSwgb2xkSW5Td2l0Y2gsIGRlZmF1bHRGb3VuZDsKLQotICAg
ICAgICBleHBlY3RLZXl3b3JkKCdzd2l0Y2gnKTsKLQotICAgICAgICBleHBlY3QoJygnKTsKLQot
ICAgICAgICBkaXNjcmltaW5hbnQgPSBwYXJzZUV4cHJlc3Npb24oKTsKLQotICAgICAgICBleHBl
Y3QoJyknKTsKLQotICAgICAgICBleHBlY3QoJ3snKTsKLQotICAgICAgICBjYXNlcyA9IFtdOwot
Ci0gICAgICAgIGlmIChtYXRjaCgnfScpKSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50LCBj
YXNlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNo
OwotICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IHRydWU7Ci0gICAgICAgIGRlZmF1bHRGb3VuZCA9
IGZhbHNlOwotCi0gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAg
aWYgKG1hdGNoKCd9JykpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNsYXVzZSA9IHBhcnNlU3dpdGNoQ2FzZSgpOwotICAgICAgICAgICAgaWYg
KGNsYXVzZS50ZXN0ID09PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRGb3Vu
ZCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5NdWx0aXBs
ZURlZmF1bHRzSW5Td2l0Y2gpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBk
ZWZhdWx0Rm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZXMucHVz
aChjbGF1c2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJblN3
aXRjaDsKLQotICAgICAgICBleHBlY3QoJ30nKTsKLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUu
Y3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpOwotICAgIH0KLQotICAg
IC8vIDEyLjEzIFRoZSB0aHJvdyBzdGF0ZW1lbnQKLQotICAgIGZ1bmN0aW9uIHBhcnNlVGhyb3dT
dGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZhciBhcmd1bWVudDsKLQotICAgICAgICBleHBlY3RLZXl3
b3JkKCd0aHJvdycpOwotCi0gICAgICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkgewotICAg
ICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTmV3bGluZUFmdGVyVGhyb3cpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYXJndW1lbnQgPSBwYXJzZUV4cHJlc3Npb24oKTsKLQotICAgICAg
ICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVRo
cm93U3RhdGVtZW50KGFyZ3VtZW50KTsKLSAgICB9Ci0KLSAgICAvLyAxMi4xNCBUaGUgdHJ5IHN0
YXRlbWVudAotCi0gICAgZnVuY3Rpb24gcGFyc2VDYXRjaENsYXVzZSgpIHsKLSAgICAgICAgdmFy
IHBhcmFtLCBib2R5LCBzdGFydFRva2VuOwotCi0gICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhl
YWQ7Ci0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2NhdGNoJyk7Ci0KLSAgICAgICAgZXhwZWN0KCco
Jyk7Ci0gICAgICAgIGlmIChtYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0
ZWQobG9va2FoZWFkKTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtID0gcGFyc2VWYXJpYWJs
ZUlkZW50aWZpZXIoKTsKLSAgICAgICAgLy8gMTIuMTQuMQotICAgICAgICBpZiAoc3RyaWN0ICYm
IGlzUmVzdHJpY3RlZFdvcmQocGFyYW0ubmFtZSkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3JU
b2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0Q2F0Y2hWYXJpYWJsZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBleHBlY3QoJyknKTsKLSAgICAgICAgYm9keSA9IHBhcnNlQmxvY2soKTsKLSAgICAg
ICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlQ2F0Y2hDbGF1c2UocGFy
YW0sIGJvZHkpLCBzdGFydFRva2VuKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZVRyeVN0
YXRlbWVudCgpIHsKLSAgICAgICAgdmFyIGJsb2NrLCBoYW5kbGVycyA9IFtdLCBmaW5hbGl6ZXIg
PSBudWxsOwotCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ3RyeScpOwotCi0gICAgICAgIGJsb2Nr
ID0gcGFyc2VCbG9jaygpOwotCi0gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2NhdGNoJykpIHsK
LSAgICAgICAgICAgIGhhbmRsZXJzLnB1c2gocGFyc2VDYXRjaENsYXVzZSgpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2ZpbmFsbHknKSkgewotICAgICAgICAgICAg
bGV4KCk7Ci0gICAgICAgICAgICBmaW5hbGl6ZXIgPSBwYXJzZUJsb2NrKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoaGFuZGxlcnMubGVuZ3RoID09PSAwICYmICFmaW5hbGl6ZXIpIHsKLSAg
ICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5vQ2F0Y2hPckZpbmFsbHkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVRyeVN0YXRlbWVudChibG9j
aywgW10sIGhhbmRsZXJzLCBmaW5hbGl6ZXIpOwotICAgIH0KLQotICAgIC8vIDEyLjE1IFRoZSBk
ZWJ1Z2dlciBzdGF0ZW1lbnQKLQotICAgIGZ1bmN0aW9uIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQo
KSB7Ci0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2RlYnVnZ2VyJyk7Ci0KLSAgICAgICAgY29uc3Vt
ZVNlbWljb2xvbigpOwotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVEZWJ1Z2dlclN0
YXRlbWVudCgpOwotICAgIH0KLQotICAgIC8vIDEyIFN0YXRlbWVudHMKLQotICAgIGZ1bmN0aW9u
IHBhcnNlU3RhdGVtZW50KCkgewotICAgICAgICB2YXIgdHlwZSA9IGxvb2thaGVhZC50eXBlLAot
ICAgICAgICAgICAgZXhwciwKLSAgICAgICAgICAgIGxhYmVsZWRCb2R5LAotICAgICAgICAgICAg
a2V5LAotICAgICAgICAgICAgc3RhcnRUb2tlbjsKLQotICAgICAgICBpZiAodHlwZSA9PT0gVG9r
ZW4uRU9GKSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVh
ZC52YWx1ZSA9PT0gJ3snKSB7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VCbG9jaygpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLQotICAgICAgICBpZiAo
dHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikgewotICAgICAgICAgICAgc3dpdGNoIChsb29rYWhl
YWQudmFsdWUpIHsKLSAgICAgICAgICAgIGNhc2UgJzsnOgotICAgICAgICAgICAgICAgIHJldHVy
biBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRW1wdHlTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7Ci0g
ICAgICAgICAgICBjYXNlICcoJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFy
a0VuZChwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7Ci0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKLSAgICAgICAgICAg
IHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7Ci0gICAgICAgICAgICBjYXNlICdicmVhayc6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VCcmVha1N0YXRlbWVu
dCgpLCBzdGFydFRva2VuKTsKLSAgICAgICAgICAgIGNhc2UgJ2NvbnRpbnVlJzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUNvbnRpbnVlU3RhdGVtZW50KCks
IHN0YXJ0VG9rZW4pOwotICAgICAgICAgICAgY2FzZSAnZGVidWdnZXInOgotICAgICAgICAgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKSwgc3Rh
cnRUb2tlbik7Ci0gICAgICAgICAgICBjYXNlICdkbyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLm1hcmtFbmQocGFyc2VEb1doaWxlU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOwot
ICAgICAgICAgICAgY2FzZSAnZm9yJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUu
bWFya0VuZChwYXJzZUZvclN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKLSAgICAgICAgICAgIGNh
c2UgJ2Z1bmN0aW9uJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChw
YXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSwgc3RhcnRUb2tlbik7Ci0gICAgICAgICAgICBjYXNl
ICdpZic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VJZlN0
YXRlbWVudCgpLCBzdGFydFRva2VuKTsKLSAgICAgICAgICAgIGNhc2UgJ3JldHVybic6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VSZXR1cm5TdGF0ZW1lbnQo
KSwgc3RhcnRUb2tlbik7Ci0gICAgICAgICAgICBjYXNlICdzd2l0Y2gnOgotICAgICAgICAgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlU3dpdGNoU3RhdGVtZW50KCksIHN0YXJ0
VG9rZW4pOwotICAgICAgICAgICAgY2FzZSAndGhyb3cnOgotICAgICAgICAgICAgICAgIHJldHVy
biBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlVGhyb3dTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7Ci0g
ICAgICAgICAgICBjYXNlICd0cnknOgotICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5t
YXJrRW5kKHBhcnNlVHJ5U3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOwotICAgICAgICAgICAgY2Fz
ZSAndmFyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVZh
cmlhYmxlU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOwotICAgICAgICAgICAgY2FzZSAnd2hpbGUn
OgotICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlV2hpbGVTdGF0
ZW1lbnQoKSwgc3RhcnRUb2tlbik7Ci0gICAgICAgICAgICBjYXNlICd3aXRoJzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVdpdGhTdGF0ZW1lbnQoKSwgc3Rh
cnRUb2tlbik7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZXhwciA9IHBhcnNlRXhwcmVzc2lv
bigpOwotCi0gICAgICAgIC8vIDEyLjEyIExhYmVsbGVkIFN0YXRlbWVudHMKLSAgICAgICAgaWYg
KChleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSAmJiBtYXRjaCgnOicpKSB7Ci0gICAg
ICAgICAgICBsZXgoKTsKLQotICAgICAgICAgICAga2V5ID0gJyQnICsgZXhwci5uYW1lOwotICAg
ICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS5s
YWJlbFNldCwga2V5KSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LlJlZGVjbGFyYXRpb24sICdMYWJlbCcsIGV4cHIubmFtZSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHN0YXRlLmxhYmVsU2V0W2tleV0gPSB0cnVlOwotICAgICAgICAgICAgbGFiZWxl
ZEJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmxhYmVs
U2V0W2tleV07Ci0gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5j
cmVhdGVMYWJlbGVkU3RhdGVtZW50KGV4cHIsIGxhYmVsZWRCb2R5KSwgc3RhcnRUb2tlbik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0KLSAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChleHBy
KSwgc3RhcnRUb2tlbik7Ci0gICAgfQotCi0gICAgLy8gMTMgRnVuY3Rpb24gRGVmaW5pdGlvbgot
Ci0gICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCkgewotICAgICAgICB2
YXIgc291cmNlRWxlbWVudCwgc291cmNlRWxlbWVudHMgPSBbXSwgdG9rZW4sIGRpcmVjdGl2ZSwg
Zmlyc3RSZXN0cmljdGVkLAotICAgICAgICAgICAgb2xkTGFiZWxTZXQsIG9sZEluSXRlcmF0aW9u
LCBvbGRJblN3aXRjaCwgb2xkSW5GdW5jdGlvbkJvZHksIHN0YXJ0VG9rZW47Ci0KLSAgICAgICAg
c3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgZXhwZWN0KCd7Jyk7Ci0KLSAgICAgICAg
d2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUg
IT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOwotCi0gICAgICAgICAgICBz
b3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7Ci0gICAgICAgICAgICBzb3VyY2VF
bGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpOwotICAgICAgICAgICAgaWYgKHNvdXJjZUVsZW1l
bnQuZXhwcmVzc2lvbi50eXBlICE9PSBTeW50YXguTGl0ZXJhbCkgewotICAgICAgICAgICAgICAg
IC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0
ICsgMSwgdG9rZW4uZW5kIC0gMSk7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aXZlID09PSAndXNl
IHN0cmljdCcpIHsKLSAgICAgICAgICAgICAgICBzdHJpY3QgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGlmICghZmlyc3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG9sZExhYmVsU2V0ID0gc3RhdGUubGFiZWxTZXQ7
Ci0gICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247Ci0gICAgICAgIG9s
ZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7Ci0gICAgICAgIG9sZEluRnVuY3Rpb25Cb2R5ID0g
c3RhdGUuaW5GdW5jdGlvbkJvZHk7Ci0KLSAgICAgICAgc3RhdGUubGFiZWxTZXQgPSB7fTsKLSAg
ICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBmYWxzZTsKLSAgICAgICAgc3RhdGUuaW5Td2l0Y2gg
PSBmYWxzZTsKLSAgICAgICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkgPSB0cnVlOwotCi0gICAgICAg
IHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNvdXJj
ZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKLSAgICAgICAgICAgIGlmICh0eXBlb2Yg
c291cmNlRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxl
bWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBleHBlY3QoJ30nKTsKLQotICAgICAgICBzdGF0
ZS5sYWJlbFNldCA9IG9sZExhYmVsU2V0OwotICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9s
ZEluSXRlcmF0aW9uOwotICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IG9sZEluU3dpdGNoOwotICAg
ICAgICBzdGF0ZS5pbkZ1bmN0aW9uQm9keSA9IG9sZEluRnVuY3Rpb25Cb2R5OwotCi0gICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUJsb2NrU3RhdGVtZW50KHNv
dXJjZUVsZW1lbnRzKSwgc3RhcnRUb2tlbik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VQ
YXJhbXMoZmlyc3RSZXN0cmljdGVkKSB7Ci0gICAgICAgIHZhciBwYXJhbSwgcGFyYW1zID0gW10s
IHRva2VuLCBzdHJpY3RlZCwgcGFyYW1TZXQsIGtleSwgbWVzc2FnZTsKLSAgICAgICAgZXhwZWN0
KCcoJyk7Ci0KLSAgICAgICAgaWYgKCFtYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICBwYXJhbVNl
dCA9IHt9OwotICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgICAgICAgICAgcGFyYW0gPSBwYXJzZVZh
cmlhYmxlSWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAgIGtleSA9ICckJyArIHRva2VuLnZh
bHVlOwotICAgICAgICAgICAgICAgIGlmIChzdHJpY3QpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzdHJpY3RlZCA9IHRva2VuOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9
IE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBh
cmFtU2V0LCBrZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3RlZCA9IHRva2Vu
OwotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFt
RHVwZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IWZpcnN0UmVzdHJpY3RlZCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVk
V29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJp
Y3RlZCA9IHRva2VuOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2Vz
LlN0cmljdFBhcmFtTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmlj
dE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtU2V0LCBr
ZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1
cGU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcGFyYW1zLnB1c2gocGFyYW0pOwotICAgICAgICAgICAgICAgIHBhcmFtU2V0W2tleV0g
PSB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBleHBlY3Qo
JywnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGV4cGVjdCgnKScpOwot
Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKLSAgICAgICAg
ICAgIHN0cmljdGVkOiBzdHJpY3RlZCwKLSAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogZmly
c3RSZXN0cmljdGVkLAotICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZQotICAgICAgICB9Owot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpIHsKLSAgICAg
ICAgdmFyIGlkLCBwYXJhbXMgPSBbXSwgYm9keSwgdG9rZW4sIHN0cmljdGVkLCB0bXAsIGZpcnN0
UmVzdHJpY3RlZCwgbWVzc2FnZSwgcHJldmlvdXNTdHJpY3QsIHN0YXJ0VG9rZW47Ci0KLSAgICAg
ICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLQotICAgICAgICBleHBlY3RLZXl3b3JkKCdmdW5j
dGlvbicpOwotICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgaWQgPSBwYXJzZVZh
cmlhYmxlSWRlbnRpZmllcigpOwotICAgICAgICBpZiAoc3RyaWN0KSB7Ci0gICAgICAgICAgICBp
ZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVk
V29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0
b2tlbjsKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25O
YW1lOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9r
ZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47Ci0g
ICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0
UmVzdHJpY3RlZCk7Ci0gICAgICAgIHBhcmFtcyA9IHRtcC5wYXJhbXM7Ci0gICAgICAgIHN0cmlj
dGVkID0gdG1wLnN0cmljdGVkOwotICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0bXAuZmlyc3RS
ZXN0cmljdGVkOwotICAgICAgICBpZiAodG1wLm1lc3NhZ2UpIHsKLSAgICAgICAgICAgIG1lc3Nh
Z2UgPSB0bXAubWVzc2FnZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByZXZpb3VzU3RyaWN0ID0g
c3RyaWN0OwotICAgICAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7Ci0g
ICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7Ci0gICAgICAgICAgICB0aHJv
d0Vycm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHN0cmljdCAmJiBzdHJpY3RlZCkgewotICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHN0
cmljdGVkLCBtZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0
cmljdDsKLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVG
dW5jdGlvbkRlY2xhcmF0aW9uKGlkLCBwYXJhbXMsIFtdLCBib2R5KSwgc3RhcnRUb2tlbik7Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKSB7Ci0gICAgICAg
IHZhciB0b2tlbiwgaWQgPSBudWxsLCBzdHJpY3RlZCwgZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdl
LCB0bXAsIHBhcmFtcyA9IFtdLCBib2R5LCBwcmV2aW91c1N0cmljdCwgc3RhcnRUb2tlbjsKLQot
ICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwotICAgICAgICBleHBlY3RLZXl3b3JkKCdm
dW5jdGlvbicpOwotCi0gICAgICAgIGlmICghbWF0Y2goJygnKSkgewotICAgICAgICAgICAgdG9r
ZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVy
KCk7Ci0gICAgICAgICAgICBpZiAoc3RyaWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUmVz
dHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXJy
b3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChpc1Jl
c3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICBmaXJzdFJl
c3RyaWN0ZWQgPSB0b2tlbjsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2Vz
LlN0cmljdEZ1bmN0aW9uTmFtZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0
TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmly
c3RSZXN0cmljdGVkID0gdG9rZW47Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNz
YWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgdG1wID0gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVk
KTsKLSAgICAgICAgcGFyYW1zID0gdG1wLnBhcmFtczsKLSAgICAgICAgc3RyaWN0ZWQgPSB0bXAu
c3RyaWN0ZWQ7Ci0gICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRtcC5maXJzdFJlc3RyaWN0ZWQ7
Ci0gICAgICAgIGlmICh0bXAubWVzc2FnZSkgewotICAgICAgICAgICAgbWVzc2FnZSA9IHRtcC5t
ZXNzYWdlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7Ci0g
ICAgICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTsKLSAgICAgICAgaWYg
KHN0cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoZmly
c3RSZXN0cmljdGVkLCBtZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RyaWN0ICYm
IHN0cmljdGVkKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoc3RyaWN0ZWQsIG1l
c3NhZ2UpOwotICAgICAgICB9Ci0gICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OwotCi0g
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUZ1bmN0aW9uRXhw
cmVzc2lvbihpZCwgcGFyYW1zLCBbXSwgYm9keSksIHN0YXJ0VG9rZW4pOwotICAgIH0KLQotICAg
IC8vIDE0IFByb2dyYW0KLQotICAgIGZ1bmN0aW9uIHBhcnNlU291cmNlRWxlbWVudCgpIHsKLSAg
ICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkgewotICAgICAgICAgICAgY2FzZSAnY29uc3QnOgot
ICAgICAgICAgICAgY2FzZSAnbGV0JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDb25z
dExldERlY2xhcmF0aW9uKGxvb2thaGVhZC52YWx1ZSk7Ci0gICAgICAgICAgICBjYXNlICdmdW5j
dGlvbic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigp
OwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VTdGF0
ZW1lbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb29rYWhl
YWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VTdGF0ZW1l
bnQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlU291cmNlRWxlbWVu
dHMoKSB7Ci0gICAgICAgIHZhciBzb3VyY2VFbGVtZW50LCBzb3VyY2VFbGVtZW50cyA9IFtdLCB0
b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0ZWQ7Ci0KLSAgICAgICAgd2hpbGUgKGluZGV4
IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgICAg
IGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQgPSBw
YXJzZVNvdXJjZUVsZW1lbnQoKTsKLSAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291
cmNlRWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoc291cmNlRWxlbWVudC5leHByZXNzaW9uLnR5
cGUgIT09IFN5bnRheC5MaXRlcmFsKSB7Ci0gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBub3Qg
ZGlyZWN0aXZlCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBkaXJlY3RpdmUgPSBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQgKyAxLCB0b2tlbi5lbmQg
LSAxKTsKLSAgICAgICAgICAgIGlmIChkaXJlY3RpdmUgPT09ICd1c2Ugc3RyaWN0JykgewotICAg
ICAgICAgICAgICAgIHN0cmljdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0UmVz
dHJpY3RlZCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoZmlyc3RS
ZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3Ry
aWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmlj
dGVkID0gdG9rZW47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBzb3VyY2VF
bGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7Ci0gICAgICAgICAgICAvKiBpc3RhbmJ1bCBp
Z25vcmUgaWYgKi8KLSAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlRWxlbWVudCA9PT0gJ3Vu
ZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHNvdXJjZUVsZW1lbnRzOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNl
UHJvZ3JhbSgpIHsKLSAgICAgICAgdmFyIGJvZHksIHN0YXJ0VG9rZW47Ci0KLSAgICAgICAgc2tp
cENvbW1lbnQoKTsKLSAgICAgICAgcGVlaygpOwotICAgICAgICBzdGFydFRva2VuID0gbG9va2Fo
ZWFkOwotICAgICAgICBzdHJpY3QgPSBmYWxzZTsKLQotICAgICAgICBib2R5ID0gcGFyc2VTb3Vy
Y2VFbGVtZW50cygpOwotICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5j
cmVhdGVQcm9ncmFtKGJvZHkpLCBzdGFydFRva2VuKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBm
aWx0ZXJUb2tlbkxvY2F0aW9uKCkgewotICAgICAgICB2YXIgaSwgZW50cnksIHRva2VuLCB0b2tl
bnMgPSBbXTsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXh0cmEudG9rZW5zLmxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICBlbnRyeSA9IGV4dHJhLnRva2Vuc1tpXTsKLSAgICAgICAgICAg
IHRva2VuID0gewotICAgICAgICAgICAgICAgIHR5cGU6IGVudHJ5LnR5cGUsCi0gICAgICAgICAg
ICAgICAgdmFsdWU6IGVudHJ5LnZhbHVlCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAgaWYg
KGV4dHJhLnJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4ucmFuZ2UgPSBlbnRyeS5yYW5n
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChleHRyYS5sb2MpIHsKLSAgICAgICAg
ICAgICAgICB0b2tlbi5sb2MgPSBlbnRyeS5sb2M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB0b2tlbnMucHVzaCh0b2tlbik7Ci0gICAgICAgIH0KLQotICAgICAgICBleHRyYS50b2tlbnMg
PSB0b2tlbnM7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdG9rZW5pemUoY29kZSwgb3B0aW9ucykg
ewotICAgICAgICB2YXIgdG9TdHJpbmcsCi0gICAgICAgICAgICB0b2tlbiwKLSAgICAgICAgICAg
IHRva2VuczsKLQotICAgICAgICB0b1N0cmluZyA9IFN0cmluZzsKLSAgICAgICAgaWYgKHR5cGVv
ZiBjb2RlICE9PSAnc3RyaW5nJyAmJiAhKGNvZGUgaW5zdGFuY2VvZiBTdHJpbmcpKSB7Ci0gICAg
ICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxl
Z2F0ZSA9IFN5bnRheFRyZWVEZWxlZ2F0ZTsKLSAgICAgICAgc291cmNlID0gY29kZTsKLSAgICAg
ICAgaW5kZXggPSAwOwotICAgICAgICBsaW5lTnVtYmVyID0gKHNvdXJjZS5sZW5ndGggPiAwKSA/
IDEgOiAwOwotICAgICAgICBsaW5lU3RhcnQgPSAwOwotICAgICAgICBsZW5ndGggPSBzb3VyY2Uu
bGVuZ3RoOwotICAgICAgICBsb29rYWhlYWQgPSBudWxsOwotICAgICAgICBzdGF0ZSA9IHsKLSAg
ICAgICAgICAgIGFsbG93SW46IHRydWUsCi0gICAgICAgICAgICBsYWJlbFNldDoge30sCi0gICAg
ICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsCi0gICAgICAgICAgICBpbkl0ZXJhdGlvbjog
ZmFsc2UsCi0gICAgICAgICAgICBpblN3aXRjaDogZmFsc2UsCi0gICAgICAgICAgICBsYXN0Q29t
bWVudFN0YXJ0OiAtMQotICAgICAgICB9OwotCi0gICAgICAgIGV4dHJhID0ge307Ci0KLSAgICAg
ICAgLy8gT3B0aW9ucyBtYXRjaGluZy4KLSAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307
Ci0KLSAgICAgICAgLy8gT2YgY291cnNlIHdlIGNvbGxlY3QgdG9rZW5zIGhlcmUuCi0gICAgICAg
IG9wdGlvbnMudG9rZW5zID0gdHJ1ZTsKLSAgICAgICAgZXh0cmEudG9rZW5zID0gW107Ci0gICAg
ICAgIGV4dHJhLnRva2VuaXplID0gdHJ1ZTsKLSAgICAgICAgLy8gVGhlIGZvbGxvd2luZyB0d28g
ZmllbGRzIGFyZSBuZWNlc3NhcnkgdG8gY29tcHV0ZSB0aGUgUmVnZXggdG9rZW5zLgotICAgICAg
ICBleHRyYS5vcGVuUGFyZW5Ub2tlbiA9IC0xOwotICAgICAgICBleHRyYS5vcGVuQ3VybHlUb2tl
biA9IC0xOwotCi0gICAgICAgIGV4dHJhLnJhbmdlID0gKHR5cGVvZiBvcHRpb25zLnJhbmdlID09
PSAnYm9vbGVhbicpICYmIG9wdGlvbnMucmFuZ2U7Ci0gICAgICAgIGV4dHJhLmxvYyA9ICh0eXBl
b2Ygb3B0aW9ucy5sb2MgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5sb2M7Ci0KLSAgICAgICAg
aWYgKHR5cGVvZiBvcHRpb25zLmNvbW1lbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLmNvbW1l
bnQpIHsKLSAgICAgICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy50
b2xlcmFudCkgewotICAgICAgICAgICAgZXh0cmEuZXJyb3JzID0gW107Ci0gICAgICAgIH0KLQot
ICAgICAgICB0cnkgewotICAgICAgICAgICAgcGVlaygpOwotICAgICAgICAgICAgaWYgKGxvb2th
aGVhZC50eXBlID09PSBUb2tlbi5FT0YpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXh0cmEu
dG9rZW5zOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0b2tlbiA9IGxleCgpOwotICAg
ICAgICAgICAgd2hpbGUgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHsKLSAgICAgICAg
ICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGxleCgpOwotICAgICAg
ICAgICAgICAgIH0gY2F0Y2ggKGxleEVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRva2Vu
ID0gbG9va2FoZWFkOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5lcnJvcnMucHVzaChsZXhFcnJvcik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGJyZWFrIG9uIHRoZSBmaXJzdCBlcnJv
cgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgaW5maW5pdGUgbG9vcHMuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGxleEVycm9yOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7Ci0gICAgICAgICAgICB0b2tlbnMgPSBleHRyYS50b2tl
bnM7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmNvbW1lbnRzICE9PSAndW5kZWZpbmVk
JykgewotICAgICAgICAgICAgICAgIHRva2Vucy5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09ICd1
bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW5zLmVycm9ycyA9IGV4dHJhLmVycm9y
czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgdGhy
b3cgZTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGV4dHJhID0ge307Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHRva2VuczsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJz
ZShjb2RlLCBvcHRpb25zKSB7Ci0gICAgICAgIHZhciBwcm9ncmFtLCB0b1N0cmluZzsKLQotICAg
ICAgICB0b1N0cmluZyA9IFN0cmluZzsKLSAgICAgICAgaWYgKHR5cGVvZiBjb2RlICE9PSAnc3Ry
aW5nJyAmJiAhKGNvZGUgaW5zdGFuY2VvZiBTdHJpbmcpKSB7Ci0gICAgICAgICAgICBjb2RlID0g
dG9TdHJpbmcoY29kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxlZ2F0ZSA9IFN5bnRheFRy
ZWVEZWxlZ2F0ZTsKLSAgICAgICAgc291cmNlID0gY29kZTsKLSAgICAgICAgaW5kZXggPSAwOwot
ICAgICAgICBsaW5lTnVtYmVyID0gKHNvdXJjZS5sZW5ndGggPiAwKSA/IDEgOiAwOwotICAgICAg
ICBsaW5lU3RhcnQgPSAwOwotICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOwotICAgICAg
ICBsb29rYWhlYWQgPSBudWxsOwotICAgICAgICBzdGF0ZSA9IHsKLSAgICAgICAgICAgIGFsbG93
SW46IHRydWUsCi0gICAgICAgICAgICBsYWJlbFNldDoge30sCi0gICAgICAgICAgICBpbkZ1bmN0
aW9uQm9keTogZmFsc2UsCi0gICAgICAgICAgICBpbkl0ZXJhdGlvbjogZmFsc2UsCi0gICAgICAg
ICAgICBpblN3aXRjaDogZmFsc2UsCi0gICAgICAgICAgICBsYXN0Q29tbWVudFN0YXJ0OiAtMQot
ICAgICAgICB9OwotCi0gICAgICAgIGV4dHJhID0ge307Ci0gICAgICAgIGlmICh0eXBlb2Ygb3B0
aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgIGV4dHJhLnJhbmdlID0gKHR5cGVv
ZiBvcHRpb25zLnJhbmdlID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMucmFuZ2U7Ci0gICAgICAg
ICAgICBleHRyYS5sb2MgPSAodHlwZW9mIG9wdGlvbnMubG9jID09PSAnYm9vbGVhbicpICYmIG9w
dGlvbnMubG9jOwotICAgICAgICAgICAgZXh0cmEuYXR0YWNoQ29tbWVudCA9ICh0eXBlb2Ygb3B0
aW9ucy5hdHRhY2hDb21tZW50ID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMuYXR0YWNoQ29tbWVu
dDsKLQotICAgICAgICAgICAgaWYgKGV4dHJhLmxvYyAmJiBvcHRpb25zLnNvdXJjZSAhPT0gbnVs
bCAmJiBvcHRpb25zLnNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgZXh0
cmEuc291cmNlID0gdG9TdHJpbmcob3B0aW9ucy5zb3VyY2UpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9rZW5zID09PSAnYm9vbGVhbicgJiYgb3B0
aW9ucy50b2tlbnMpIHsKLSAgICAgICAgICAgICAgICBleHRyYS50b2tlbnMgPSBbXTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAnYm9v
bGVhbicgJiYgb3B0aW9ucy5jb21tZW50KSB7Ci0gICAgICAgICAgICAgICAgZXh0cmEuY29tbWVu
dHMgPSBbXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50
b2xlcmFudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudG9sZXJhbnQpIHsKLSAgICAgICAgICAg
ICAgICBleHRyYS5lcnJvcnMgPSBbXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChl
eHRyYS5hdHRhY2hDb21tZW50KSB7Ci0gICAgICAgICAgICAgICAgZXh0cmEucmFuZ2UgPSB0cnVl
OwotICAgICAgICAgICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107Ci0gICAgICAgICAgICAgICAg
ZXh0cmEuYm90dG9tUmlnaHRTdGFjayA9IFtdOwotICAgICAgICAgICAgICAgIGV4dHJhLnRyYWls
aW5nQ29tbWVudHMgPSBbXTsKLSAgICAgICAgICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMg
PSBbXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgICBwcm9ncmFtID0gcGFyc2VQcm9ncmFtKCk7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGV4
dHJhLmNvbW1lbnRzICE9PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgICAgIHByb2dyYW0u
Y29tbWVudHMgPSBleHRyYS5jb21tZW50czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgICAg
IGZpbHRlclRva2VuTG9jYXRpb24oKTsKLSAgICAgICAgICAgICAgICBwcm9ncmFtLnRva2VucyA9
IGV4dHJhLnRva2VuczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0
cmEuZXJyb3JzICE9PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgICAgIHByb2dyYW0uZXJy
b3JzID0gZXh0cmEuZXJyb3JzOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChlKSB7
Ci0gICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAg
ZXh0cmEgPSB7fTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBwcm9ncmFtOwotICAgIH0K
LQotICAgIC8vIFN5bmMgd2l0aCAqLmpzb24gbWFuaWZlc3RzLgotICAgIGV4cG9ydHMudmVyc2lv
biA9ICcxLjIuMic7Ci0KLSAgICBleHBvcnRzLnRva2VuaXplID0gdG9rZW5pemU7Ci0KLSAgICBl
eHBvcnRzLnBhcnNlID0gcGFyc2U7Ci0KLSAgICAvLyBEZWVwIGNvcHkuCi0gICAvKiBpc3RhbmJ1
bCBpZ25vcmUgbmV4dCAqLwotICAgIGV4cG9ydHMuU3ludGF4ID0gKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgdmFyIG5hbWUsIHR5cGVzID0ge307Ci0KLSAgICAgICAgaWYgKHR5cGVvZiBPYmplY3Qu
Y3JlYXRlID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgICB0eXBlcyA9IE9iamVjdC5jcmVh
dGUobnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKG5hbWUgaW4gU3ludGF4KSB7Ci0g
ICAgICAgICAgICBpZiAoU3ludGF4Lmhhc093blByb3BlcnR5KG5hbWUpKSB7Ci0gICAgICAgICAg
ICAgICAgdHlwZXNbbmFtZV0gPSBTeW50YXhbbmFtZV07Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5mcmVlemUgPT09ICdmdW5jdGlvbicpIHsK
LSAgICAgICAgICAgIE9iamVjdC5mcmVlemUodHlwZXMpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIHR5cGVzOwotICAgIH0oKSk7Ci0KLX0pKTsKLS8qIHZpbTogc2V0IHN3PTQgdHM9NCBl
dCB0dz04MCA6ICovCi0KLX0se31dLDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
ewotLyoKLSAgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50
ZWFAZ21haWwuY29tPgotICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlkYXlhdCA8YXJpeWEu
aGlkYXlhdEBnbWFpbC5jb20+Ci0KLSAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Ogot
Ci0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCi0gIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWQotICBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0v
KmpzbGludCB2YXJzOmZhbHNlLCBiaXR3aXNlOnRydWUqLwotLypqc2hpbnQgaW5kZW50OjQqLwot
LypnbG9iYWwgZXhwb3J0czp0cnVlLCBkZWZpbmU6dHJ1ZSovCi0oZnVuY3Rpb24gKHJvb3QsIGZh
Y3RvcnkpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERl
ZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsCi0gICAgLy8g
YW5kIHBsYWluIGJyb3dzZXIgbG9hZGluZywKLSAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1
bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7Ci0gICAgICAgIGRlZmluZShbJ2V4cG9ydHMnXSwgZmFj
dG9yeSk7Ci0gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHsK
LSAgICAgICAgZmFjdG9yeShleHBvcnRzKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmYWN0b3J5
KChyb290LmVzdHJhdmVyc2UgPSB7fSkpOwotICAgIH0KLX0odGhpcywgZnVuY3Rpb24gKGV4cG9y
dHMpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICB2YXIgU3ludGF4LAotICAgICAgICBpc0Fy
cmF5LAotICAgICAgICBWaXNpdG9yT3B0aW9uLAotICAgICAgICBWaXNpdG9yS2V5cywKLSAgICAg
ICAgQlJFQUssCi0gICAgICAgIFNLSVA7Ci0KLSAgICBTeW50YXggPSB7Ci0gICAgICAgIEFzc2ln
bm1lbnRFeHByZXNzaW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLAotICAgICAgICBBcnJheUV4
cHJlc3Npb246ICdBcnJheUV4cHJlc3Npb24nLAotICAgICAgICBBcnJheVBhdHRlcm46ICdBcnJh
eVBhdHRlcm4nLAotICAgICAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogJ0Fycm93RnVuY3Rp
b25FeHByZXNzaW9uJywKLSAgICAgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcs
Ci0gICAgICAgIEJpbmFyeUV4cHJlc3Npb246ICdCaW5hcnlFeHByZXNzaW9uJywKLSAgICAgICAg
QnJlYWtTdGF0ZW1lbnQ6ICdCcmVha1N0YXRlbWVudCcsCi0gICAgICAgIENhbGxFeHByZXNzaW9u
OiAnQ2FsbEV4cHJlc3Npb24nLAotICAgICAgICBDYXRjaENsYXVzZTogJ0NhdGNoQ2xhdXNlJywK
LSAgICAgICAgQ2xhc3NCb2R5OiAnQ2xhc3NCb2R5JywKLSAgICAgICAgQ2xhc3NEZWNsYXJhdGlv
bjogJ0NsYXNzRGVjbGFyYXRpb24nLAotICAgICAgICBDbGFzc0V4cHJlc3Npb246ICdDbGFzc0V4
cHJlc3Npb24nLAotICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246ICdDb25kaXRpb25hbEV4
cHJlc3Npb24nLAotICAgICAgICBDb250aW51ZVN0YXRlbWVudDogJ0NvbnRpbnVlU3RhdGVtZW50
JywKLSAgICAgICAgRGVidWdnZXJTdGF0ZW1lbnQ6ICdEZWJ1Z2dlclN0YXRlbWVudCcsCi0gICAg
ICAgIERpcmVjdGl2ZVN0YXRlbWVudDogJ0RpcmVjdGl2ZVN0YXRlbWVudCcsCi0gICAgICAgIERv
V2hpbGVTdGF0ZW1lbnQ6ICdEb1doaWxlU3RhdGVtZW50JywKLSAgICAgICAgRW1wdHlTdGF0ZW1l
bnQ6ICdFbXB0eVN0YXRlbWVudCcsCi0gICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6ICdFeHBy
ZXNzaW9uU3RhdGVtZW50JywKLSAgICAgICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVtZW50JywK
LSAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0YXRlbWVudCcsCi0gICAgICAgIEZ1bmN0
aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJywKLSAgICAgICAgRnVuY3Rpb25F
eHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJywKLSAgICAgICAgSWRlbnRpZmllcjogJ0lk
ZW50aWZpZXInLAotICAgICAgICBJZlN0YXRlbWVudDogJ0lmU3RhdGVtZW50JywKLSAgICAgICAg
TGl0ZXJhbDogJ0xpdGVyYWwnLAotICAgICAgICBMYWJlbGVkU3RhdGVtZW50OiAnTGFiZWxlZFN0
YXRlbWVudCcsCi0gICAgICAgIExvZ2ljYWxFeHByZXNzaW9uOiAnTG9naWNhbEV4cHJlc3Npb24n
LAotICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiAnTWVtYmVyRXhwcmVzc2lvbicsCi0gICAgICAg
IE1ldGhvZERlZmluaXRpb246ICdNZXRob2REZWZpbml0aW9uJywKLSAgICAgICAgTmV3RXhwcmVz
c2lvbjogJ05ld0V4cHJlc3Npb24nLAotICAgICAgICBPYmplY3RFeHByZXNzaW9uOiAnT2JqZWN0
RXhwcmVzc2lvbicsCi0gICAgICAgIE9iamVjdFBhdHRlcm46ICdPYmplY3RQYXR0ZXJuJywKLSAg
ICAgICAgUHJvZ3JhbTogJ1Byb2dyYW0nLAotICAgICAgICBQcm9wZXJ0eTogJ1Byb3BlcnR5JywK
LSAgICAgICAgUmV0dXJuU3RhdGVtZW50OiAnUmV0dXJuU3RhdGVtZW50JywKLSAgICAgICAgU2Vx
dWVuY2VFeHByZXNzaW9uOiAnU2VxdWVuY2VFeHByZXNzaW9uJywKLSAgICAgICAgU3dpdGNoU3Rh
dGVtZW50OiAnU3dpdGNoU3RhdGVtZW50JywKLSAgICAgICAgU3dpdGNoQ2FzZTogJ1N3aXRjaENh
c2UnLAotICAgICAgICBUaGlzRXhwcmVzc2lvbjogJ1RoaXNFeHByZXNzaW9uJywKLSAgICAgICAg
VGhyb3dTdGF0ZW1lbnQ6ICdUaHJvd1N0YXRlbWVudCcsCi0gICAgICAgIFRyeVN0YXRlbWVudDog
J1RyeVN0YXRlbWVudCcsCi0gICAgICAgIFVuYXJ5RXhwcmVzc2lvbjogJ1VuYXJ5RXhwcmVzc2lv
bicsCi0gICAgICAgIFVwZGF0ZUV4cHJlc3Npb246ICdVcGRhdGVFeHByZXNzaW9uJywKLSAgICAg
ICAgVmFyaWFibGVEZWNsYXJhdGlvbjogJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLAotICAgICAgICBW
YXJpYWJsZURlY2xhcmF0b3I6ICdWYXJpYWJsZURlY2xhcmF0b3InLAotICAgICAgICBXaGlsZVN0
YXRlbWVudDogJ1doaWxlU3RhdGVtZW50JywKLSAgICAgICAgV2l0aFN0YXRlbWVudDogJ1dpdGhT
dGF0ZW1lbnQnLAotICAgICAgICBZaWVsZEV4cHJlc3Npb246ICdZaWVsZEV4cHJlc3Npb24nCi0g
ICAgfTsKLQotICAgIGZ1bmN0aW9uIGlnbm9yZUpTSGludEVycm9yKCkgeyB9Ci0KLSAgICBpc0Fy
cmF5ID0gQXJyYXkuaXNBcnJheTsKLSAgICBpZiAoIWlzQXJyYXkpIHsKLSAgICAgICAgaXNBcnJh
eSA9IGZ1bmN0aW9uIGlzQXJyYXkoYXJyYXkpIHsKLSAgICAgICAgICAgIHJldHVybiBPYmplY3Qu
cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyYXkpID09PSAnW29iamVjdCBBcnJheV0nOwotICAg
ICAgICB9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGRlZXBDb3B5KG9iaikgewotICAgICAgICB2
YXIgcmV0ID0ge30sIGtleSwgdmFsOwotICAgICAgICBmb3IgKGtleSBpbiBvYmopIHsKLSAgICAg
ICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgICAgIHZh
bCA9IG9ialtrZXldOwotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0
JyAmJiB2YWwgIT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0W2tleV0gPSBkZWVw
Q29weSh2YWwpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldFtrZXldID0gdmFsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNoYWxsb3dD
b3B5KG9iaikgewotICAgICAgICB2YXIgcmV0ID0ge30sIGtleTsKLSAgICAgICAgZm9yIChrZXkg
aW4gb2JqKSB7Ci0gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHsKLSAg
ICAgICAgICAgICAgICByZXRba2V5XSA9IG9ialtrZXldOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICAgIGlnbm9yZUpTSGludEVycm9yKHNo
YWxsb3dDb3B5KTsKLQotICAgIC8vIGJhc2VkIG9uIExMVk0gbGliYysrIHVwcGVyX2JvdW5kIC8g
bG93ZXJfYm91bmQKLSAgICAvLyBNSVQgTGljZW5zZQotCi0gICAgZnVuY3Rpb24gdXBwZXJCb3Vu
ZChhcnJheSwgZnVuYykgewotICAgICAgICB2YXIgZGlmZiwgbGVuLCBpLCBjdXJyZW50OwotCi0g
ICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aDsKLSAgICAgICAgaSA9IDA7Ci0KLSAgICAgICAgd2hp
bGUgKGxlbikgewotICAgICAgICAgICAgZGlmZiA9IGxlbiA+Pj4gMTsKLSAgICAgICAgICAgIGN1
cnJlbnQgPSBpICsgZGlmZjsKLSAgICAgICAgICAgIGlmIChmdW5jKGFycmF5W2N1cnJlbnRdKSkg
ewotICAgICAgICAgICAgICAgIGxlbiA9IGRpZmY7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGkgPSBjdXJyZW50ICsgMTsKLSAgICAgICAgICAgICAgICBsZW4gLT0gZGlm
ZiArIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGk7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gbG93ZXJCb3VuZChhcnJheSwgZnVuYykgewotICAgICAgICB2YXIg
ZGlmZiwgbGVuLCBpLCBjdXJyZW50OwotCi0gICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aDsKLSAg
ICAgICAgaSA9IDA7Ci0KLSAgICAgICAgd2hpbGUgKGxlbikgewotICAgICAgICAgICAgZGlmZiA9
IGxlbiA+Pj4gMTsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBpICsgZGlmZjsKLSAgICAgICAgICAg
IGlmIChmdW5jKGFycmF5W2N1cnJlbnRdKSkgewotICAgICAgICAgICAgICAgIGkgPSBjdXJyZW50
ICsgMTsKLSAgICAgICAgICAgICAgICBsZW4gLT0gZGlmZiArIDE7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGxlbiA9IGRpZmY7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIGlnbm9yZUpTSGludEVycm9yKGxvd2Vy
Qm91bmQpOwotCi0gICAgVmlzaXRvcktleXMgPSB7Ci0gICAgICAgIEFzc2lnbm1lbnRFeHByZXNz
aW9uOiBbJ2xlZnQnLCAncmlnaHQnXSwKLSAgICAgICAgQXJyYXlFeHByZXNzaW9uOiBbJ2VsZW1l
bnRzJ10sCi0gICAgICAgIEFycmF5UGF0dGVybjogWydlbGVtZW50cyddLAotICAgICAgICBBcnJv
d0Z1bmN0aW9uRXhwcmVzc2lvbjogWydwYXJhbXMnLCAnZGVmYXVsdHMnLCAncmVzdCcsICdib2R5
J10sCi0gICAgICAgIEJsb2NrU3RhdGVtZW50OiBbJ2JvZHknXSwKLSAgICAgICAgQmluYXJ5RXhw
cmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sCi0gICAgICAgIEJyZWFrU3RhdGVtZW50OiBbJ2xh
YmVsJ10sCi0gICAgICAgIENhbGxFeHByZXNzaW9uOiBbJ2NhbGxlZScsICdhcmd1bWVudHMnXSwK
LSAgICAgICAgQ2F0Y2hDbGF1c2U6IFsncGFyYW0nLCAnYm9keSddLAotICAgICAgICBDbGFzc0Jv
ZHk6IFsnYm9keSddLAotICAgICAgICBDbGFzc0RlY2xhcmF0aW9uOiBbJ2lkJywgJ2JvZHknLCAn
c3VwZXJDbGFzcyddLAotICAgICAgICBDbGFzc0V4cHJlc3Npb246IFsnaWQnLCAnYm9keScsICdz
dXBlckNsYXNzJ10sCi0gICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogWyd0ZXN0JywgJ2Nv
bnNlcXVlbnQnLCAnYWx0ZXJuYXRlJ10sCi0gICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiBbJ2xh
YmVsJ10sCi0gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiBbXSwKLSAgICAgICAgRGlyZWN0aXZl
U3RhdGVtZW50OiBbXSwKLSAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogWydib2R5JywgJ3Rlc3Qn
XSwKLSAgICAgICAgRW1wdHlTdGF0ZW1lbnQ6IFtdLAotICAgICAgICBFeHByZXNzaW9uU3RhdGVt
ZW50OiBbJ2V4cHJlc3Npb24nXSwKLSAgICAgICAgRm9yU3RhdGVtZW50OiBbJ2luaXQnLCAndGVz
dCcsICd1cGRhdGUnLCAnYm9keSddLAotICAgICAgICBGb3JJblN0YXRlbWVudDogWydsZWZ0Jywg
J3JpZ2h0JywgJ2JvZHknXSwKLSAgICAgICAgRm9yT2ZTdGF0ZW1lbnQ6IFsnbGVmdCcsICdyaWdo
dCcsICdib2R5J10sCi0gICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246IFsnaWQnLCAncGFyYW1z
JywgJ2RlZmF1bHRzJywgJ3Jlc3QnLCAnYm9keSddLAotICAgICAgICBGdW5jdGlvbkV4cHJlc3Np
b246IFsnaWQnLCAncGFyYW1zJywgJ2RlZmF1bHRzJywgJ3Jlc3QnLCAnYm9keSddLAotICAgICAg
ICBJZGVudGlmaWVyOiBbXSwKLSAgICAgICAgSWZTdGF0ZW1lbnQ6IFsndGVzdCcsICdjb25zZXF1
ZW50JywgJ2FsdGVybmF0ZSddLAotICAgICAgICBMaXRlcmFsOiBbXSwKLSAgICAgICAgTGFiZWxl
ZFN0YXRlbWVudDogWydsYWJlbCcsICdib2R5J10sCi0gICAgICAgIExvZ2ljYWxFeHByZXNzaW9u
OiBbJ2xlZnQnLCAncmlnaHQnXSwKLSAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogWydvYmplY3Qn
LCAncHJvcGVydHknXSwKLSAgICAgICAgTWV0aG9kRGVmaW5pdGlvbjogWydrZXknLCAndmFsdWUn
XSwKLSAgICAgICAgTmV3RXhwcmVzc2lvbjogWydjYWxsZWUnLCAnYXJndW1lbnRzJ10sCi0gICAg
ICAgIE9iamVjdEV4cHJlc3Npb246IFsncHJvcGVydGllcyddLAotICAgICAgICBPYmplY3RQYXR0
ZXJuOiBbJ3Byb3BlcnRpZXMnXSwKLSAgICAgICAgUHJvZ3JhbTogWydib2R5J10sCi0gICAgICAg
IFByb3BlcnR5OiBbJ2tleScsICd2YWx1ZSddLAotICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6IFsn
YXJndW1lbnQnXSwKLSAgICAgICAgU2VxdWVuY2VFeHByZXNzaW9uOiBbJ2V4cHJlc3Npb25zJ10s
Ci0gICAgICAgIFN3aXRjaFN0YXRlbWVudDogWydkaXNjcmltaW5hbnQnLCAnY2FzZXMnXSwKLSAg
ICAgICAgU3dpdGNoQ2FzZTogWyd0ZXN0JywgJ2NvbnNlcXVlbnQnXSwKLSAgICAgICAgVGhpc0V4
cHJlc3Npb246IFtdLAotICAgICAgICBUaHJvd1N0YXRlbWVudDogWydhcmd1bWVudCddLAotICAg
ICAgICBUcnlTdGF0ZW1lbnQ6IFsnYmxvY2snLCAnaGFuZGxlcnMnLCAnaGFuZGxlcicsICdndWFy
ZGVkSGFuZGxlcnMnLCAnZmluYWxpemVyJ10sCi0gICAgICAgIFVuYXJ5RXhwcmVzc2lvbjogWydh
cmd1bWVudCddLAotICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10sCi0gICAg
ICAgIFZhcmlhYmxlRGVjbGFyYXRpb246IFsnZGVjbGFyYXRpb25zJ10sCi0gICAgICAgIFZhcmlh
YmxlRGVjbGFyYXRvcjogWydpZCcsICdpbml0J10sCi0gICAgICAgIFdoaWxlU3RhdGVtZW50OiBb
J3Rlc3QnLCAnYm9keSddLAotICAgICAgICBXaXRoU3RhdGVtZW50OiBbJ29iamVjdCcsICdib2R5
J10sCi0gICAgICAgIFlpZWxkRXhwcmVzc2lvbjogWydhcmd1bWVudCddCi0gICAgfTsKLQotICAg
IC8vIHVuaXF1ZSBpZAotICAgIEJSRUFLID0ge307Ci0gICAgU0tJUCA9IHt9OwotCi0gICAgVmlz
aXRvck9wdGlvbiA9IHsKLSAgICAgICAgQnJlYWs6IEJSRUFLLAotICAgICAgICBTa2lwOiBTS0lQ
Ci0gICAgfTsKLQotICAgIGZ1bmN0aW9uIFJlZmVyZW5jZShwYXJlbnQsIGtleSkgewotICAgICAg
ICB0aGlzLnBhcmVudCA9IHBhcmVudDsKLSAgICAgICAgdGhpcy5rZXkgPSBrZXk7Ci0gICAgfQot
Ci0gICAgUmVmZXJlbmNlLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZShub2Rl
KSB7Ci0gICAgICAgIHRoaXMucGFyZW50W3RoaXMua2V5XSA9IG5vZGU7Ci0gICAgfTsKLQotICAg
IGZ1bmN0aW9uIEVsZW1lbnQobm9kZSwgcGF0aCwgd3JhcCwgcmVmKSB7Ci0gICAgICAgIHRoaXMu
bm9kZSA9IG5vZGU7Ci0gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7Ci0gICAgICAgIHRoaXMud3Jh
cCA9IHdyYXA7Ci0gICAgICAgIHRoaXMucmVmID0gcmVmOwotICAgIH0KLQotICAgIGZ1bmN0aW9u
IENvbnRyb2xsZXIoKSB7IH0KLQotICAgIC8vIEFQSToKLSAgICAvLyByZXR1cm4gcHJvcGVydHkg
cGF0aCBhcnJheSBmcm9tIHJvb3QgdG8gY3VycmVudCBub2RlCi0gICAgQ29udHJvbGxlci5wcm90
b3R5cGUucGF0aCA9IGZ1bmN0aW9uIHBhdGgoKSB7Ci0gICAgICAgIHZhciBpLCBpeiwgaiwganos
IHJlc3VsdCwgZWxlbWVudDsKLQotICAgICAgICBmdW5jdGlvbiBhZGRUb1BhdGgocmVzdWx0LCBw
YXRoKSB7Ci0gICAgICAgICAgICBpZiAoaXNBcnJheShwYXRoKSkgewotICAgICAgICAgICAgICAg
IGZvciAoaiA9IDAsIGp6ID0gcGF0aC5sZW5ndGg7IGogPCBqejsgKytqKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5wdXNoKHBhdGhbal0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGF0aCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyByb290IG5vZGUKLSAgICAgICAgaWYg
KCF0aGlzLl9fY3VycmVudC5wYXRoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIGZpcnN0IG5vZGUgaXMgc2VudGluZWwsIHNlY29uZCBub2RlIGlz
IHJvb3QgZWxlbWVudAotICAgICAgICByZXN1bHQgPSBbXTsKLSAgICAgICAgZm9yIChpID0gMiwg
aXogPSB0aGlzLl9fbGVhdmVsaXN0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKLSAgICAgICAgICAg
IGVsZW1lbnQgPSB0aGlzLl9fbGVhdmVsaXN0W2ldOwotICAgICAgICAgICAgYWRkVG9QYXRoKHJl
c3VsdCwgZWxlbWVudC5wYXRoKTsKLSAgICAgICAgfQotICAgICAgICBhZGRUb1BhdGgocmVzdWx0
LCB0aGlzLl9fY3VycmVudC5wYXRoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Owot
Ci0gICAgLy8gQVBJOgotICAgIC8vIHJldHVybiBhcnJheSBvZiBwYXJlbnQgZWxlbWVudHMKLSAg
ICBDb250cm9sbGVyLnByb3RvdHlwZS5wYXJlbnRzID0gZnVuY3Rpb24gcGFyZW50cygpIHsKLSAg
ICAgICAgdmFyIGksIGl6LCByZXN1bHQ7Ci0KLSAgICAgICAgLy8gZmlyc3Qgbm9kZSBpcyBzZW50
aW5lbAotICAgICAgICByZXN1bHQgPSBbXTsKLSAgICAgICAgZm9yIChpID0gMSwgaXogPSB0aGlz
Ll9fbGVhdmVsaXN0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKLSAgICAgICAgICAgIHJlc3VsdC5w
dXNoKHRoaXMuX19sZWF2ZWxpc3RbaV0ubm9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH07Ci0KLSAgICAvLyBBUEk6Ci0gICAgLy8gcmV0dXJuIGN1cnJlbnQg
bm9kZQotICAgIENvbnRyb2xsZXIucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5jdGlvbiBjdXJyZW50
KCkgewotICAgICAgICByZXR1cm4gdGhpcy5fX2N1cnJlbnQubm9kZTsKLSAgICB9OwotCi0gICAg
Q29udHJvbGxlci5wcm90b3R5cGUuX19leGVjdXRlID0gZnVuY3Rpb24gX19leGVjdXRlKGNhbGxi
YWNrLCBlbGVtZW50KSB7Ci0gICAgICAgIHZhciBwcmV2aW91cywgcmVzdWx0OwotCi0gICAgICAg
IHJlc3VsdCA9IHVuZGVmaW5lZDsKLQotICAgICAgICBwcmV2aW91cyAgPSB0aGlzLl9fY3VycmVu
dDsKLSAgICAgICAgdGhpcy5fX2N1cnJlbnQgPSBlbGVtZW50OwotICAgICAgICB0aGlzLl9fc3Rh
dGUgPSBudWxsOwotICAgICAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAgICAgIHJlc3VsdCA9
IGNhbGxiYWNrLmNhbGwodGhpcywgZWxlbWVudC5ub2RlLCB0aGlzLl9fbGVhdmVsaXN0W3RoaXMu
X19sZWF2ZWxpc3QubGVuZ3RoIC0gMV0ubm9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5f
X2N1cnJlbnQgPSBwcmV2aW91czsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH07Ci0K
LSAgICAvLyBBUEk6Ci0gICAgLy8gbm90aWZ5IGNvbnRyb2wgc2tpcCAvIGJyZWFrCi0gICAgQ29u
dHJvbGxlci5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KGZsYWcpIHsKLSAgICAg
ICAgdGhpcy5fX3N0YXRlID0gZmxhZzsKLSAgICB9OwotCi0gICAgLy8gQVBJOgotICAgIC8vIHNr
aXAgY2hpbGQgbm9kZXMgb2YgY3VycmVudCBub2RlCi0gICAgQ29udHJvbGxlci5wcm90b3R5cGUu
c2tpcCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdGhpcy5ub3RpZnkoU0tJUCk7Ci0gICAgfTsK
LQotICAgIC8vIEFQSToKLSAgICAvLyBicmVhayB0cmF2ZXJzYWxzCi0gICAgQ29udHJvbGxlci5w
cm90b3R5cGVbJ2JyZWFrJ10gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHRoaXMubm90aWZ5KEJS
RUFLKTsKLSAgICB9OwotCi0gICAgQ29udHJvbGxlci5wcm90b3R5cGUuX19pbml0aWFsaXplID0g
ZnVuY3Rpb24ocm9vdCwgdmlzaXRvcikgewotICAgICAgICB0aGlzLnZpc2l0b3IgPSB2aXNpdG9y
OwotICAgICAgICB0aGlzLnJvb3QgPSByb290OwotICAgICAgICB0aGlzLl9fd29ya2xpc3QgPSBb
XTsKLSAgICAgICAgdGhpcy5fX2xlYXZlbGlzdCA9IFtdOwotICAgICAgICB0aGlzLl9fY3VycmVu
dCA9IG51bGw7Ci0gICAgICAgIHRoaXMuX19zdGF0ZSA9IG51bGw7Ci0gICAgfTsKLQotICAgIENv
bnRyb2xsZXIucHJvdG90eXBlLnRyYXZlcnNlID0gZnVuY3Rpb24gdHJhdmVyc2Uocm9vdCwgdmlz
aXRvcikgewotICAgICAgICB2YXIgd29ya2xpc3QsCi0gICAgICAgICAgICBsZWF2ZWxpc3QsCi0g
ICAgICAgICAgICBlbGVtZW50LAotICAgICAgICAgICAgbm9kZSwKLSAgICAgICAgICAgIG5vZGVU
eXBlLAotICAgICAgICAgICAgcmV0LAotICAgICAgICAgICAga2V5LAotICAgICAgICAgICAgY3Vy
cmVudCwKLSAgICAgICAgICAgIGN1cnJlbnQyLAotICAgICAgICAgICAgY2FuZGlkYXRlcywKLSAg
ICAgICAgICAgIGNhbmRpZGF0ZSwKLSAgICAgICAgICAgIHNlbnRpbmVsOwotCi0gICAgICAgIHRo
aXMuX19pbml0aWFsaXplKHJvb3QsIHZpc2l0b3IpOwotCi0gICAgICAgIHNlbnRpbmVsID0ge307
Ci0KLSAgICAgICAgLy8gcmVmZXJlbmNlCi0gICAgICAgIHdvcmtsaXN0ID0gdGhpcy5fX3dvcmts
aXN0OwotICAgICAgICBsZWF2ZWxpc3QgPSB0aGlzLl9fbGVhdmVsaXN0OwotCi0gICAgICAgIC8v
IGluaXRpYWxpemUKLSAgICAgICAgd29ya2xpc3QucHVzaChuZXcgRWxlbWVudChyb290LCBudWxs
LCBudWxsLCBudWxsKSk7Ci0gICAgICAgIGxlYXZlbGlzdC5wdXNoKG5ldyBFbGVtZW50KG51bGws
IG51bGwsIG51bGwsIG51bGwpKTsKLQotICAgICAgICB3aGlsZSAod29ya2xpc3QubGVuZ3RoKSB7
Ci0gICAgICAgICAgICBlbGVtZW50ID0gd29ya2xpc3QucG9wKCk7Ci0KLSAgICAgICAgICAgIGlm
IChlbGVtZW50ID09PSBzZW50aW5lbCkgewotICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBsZWF2
ZWxpc3QucG9wKCk7Ci0KLSAgICAgICAgICAgICAgICByZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNp
dG9yLmxlYXZlLCBlbGVtZW50KTsKLQotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUg
PT09IEJSRUFLIHx8IHJldCA9PT0gQlJFQUspIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKGVsZW1lbnQubm9kZSkgewotCi0gICAgICAgICAgICAg
ICAgcmV0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5lbnRlciwgZWxlbWVudCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCByZXQgPT09IEJSRUFLKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHNlbnRpbmVsKTsKLSAgICAgICAgICAgICAgICBsZWF2
ZWxpc3QucHVzaChlbGVtZW50KTsKLQotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUg
PT09IFNLSVAgfHwgcmV0ID09PSBTS0lQKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5vZGUgPSBlbGVtZW50Lm5v
ZGU7Ci0gICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBlbGVtZW50LndyYXAgfHwgbm9kZS50eXBl
OwotICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBWaXNpdG9yS2V5c1tub2RlVHlwZV07Ci0K
LSAgICAgICAgICAgICAgICBjdXJyZW50ID0gY2FuZGlkYXRlcy5sZW5ndGg7Ci0gICAgICAgICAg
ICAgICAgd2hpbGUgKChjdXJyZW50IC09IDEpID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
a2V5ID0gY2FuZGlkYXRlc1tjdXJyZW50XTsKLSAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRl
ID0gbm9kZVtrZXldOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQXJyYXkoY2FuZGlkYXRlKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChuZXcgRWxlbWVudChjYW5kaWRhdGUsIGtleSwg
bnVsbCwgbnVsbCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBjdXJyZW50MiA9IGNhbmRpZGF0
ZS5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0g
MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGVbY3VycmVudDJdKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG5vZGVUeXBlID09PSBTeW50
YXguT2JqZWN0RXhwcmVzc2lvbiB8fCBub2RlVHlwZSA9PT0gU3ludGF4Lk9iamVjdFBhdHRlcm4p
ICYmICdwcm9wZXJ0aWVzJyA9PT0gY2FuZGlkYXRlc1tjdXJyZW50XSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJd
LCBba2V5LCBjdXJyZW50Ml0sICdQcm9wZXJ0eScsIG51bGwpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3
IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCBudWxsLCBudWxs
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHdv
cmtsaXN0LnB1c2goZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgQ29udHJvbGxl
ci5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uocm9vdCwgdmlzaXRvcikgewot
ICAgICAgICB2YXIgd29ya2xpc3QsCi0gICAgICAgICAgICBsZWF2ZWxpc3QsCi0gICAgICAgICAg
ICBub2RlLAotICAgICAgICAgICAgbm9kZVR5cGUsCi0gICAgICAgICAgICB0YXJnZXQsCi0gICAg
ICAgICAgICBlbGVtZW50LAotICAgICAgICAgICAgY3VycmVudCwKLSAgICAgICAgICAgIGN1cnJl
bnQyLAotICAgICAgICAgICAgY2FuZGlkYXRlcywKLSAgICAgICAgICAgIGNhbmRpZGF0ZSwKLSAg
ICAgICAgICAgIHNlbnRpbmVsLAotICAgICAgICAgICAgb3V0ZXIsCi0gICAgICAgICAgICBrZXk7
Ci0KLSAgICAgICAgdGhpcy5fX2luaXRpYWxpemUocm9vdCwgdmlzaXRvcik7Ci0KLSAgICAgICAg
c2VudGluZWwgPSB7fTsKLQotICAgICAgICAvLyByZWZlcmVuY2UKLSAgICAgICAgd29ya2xpc3Qg
PSB0aGlzLl9fd29ya2xpc3Q7Ci0gICAgICAgIGxlYXZlbGlzdCA9IHRoaXMuX19sZWF2ZWxpc3Q7
Ci0KLSAgICAgICAgLy8gaW5pdGlhbGl6ZQotICAgICAgICBvdXRlciA9IHsKLSAgICAgICAgICAg
IHJvb3Q6IHJvb3QKLSAgICAgICAgfTsKLSAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KHJv
b3QsIG51bGwsIG51bGwsIG5ldyBSZWZlcmVuY2Uob3V0ZXIsICdyb290JykpOwotICAgICAgICB3
b3JrbGlzdC5wdXNoKGVsZW1lbnQpOwotICAgICAgICBsZWF2ZWxpc3QucHVzaChlbGVtZW50KTsK
LQotICAgICAgICB3aGlsZSAod29ya2xpc3QubGVuZ3RoKSB7Ci0gICAgICAgICAgICBlbGVtZW50
ID0gd29ya2xpc3QucG9wKCk7Ci0KLSAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBzZW50aW5l
bCkgewotICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBsZWF2ZWxpc3QucG9wKCk7Ci0KLSAgICAg
ICAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmxlYXZlLCBlbGVtZW50
KTsKLQotICAgICAgICAgICAgICAgIC8vIG5vZGUgbWF5IGJlIHJlcGxhY2VkIHdpdGggbnVsbCwK
LSAgICAgICAgICAgICAgICAvLyBzbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVuZGVmaW5lZCBhbmQg
bnVsbCBpbiB0aGlzIHBsYWNlCi0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gdW5kZWZp
bmVkICYmIHRhcmdldCAhPT0gQlJFQUsgJiYgdGFyZ2V0ICE9PSBTS0lQKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIHJlcGxhY2UKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZWYucmVw
bGFjZSh0YXJnZXQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0
aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHRhcmdldCA9PT0gQlJFQUspIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0YXJnZXQgPSB0
aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmVudGVyLCBlbGVtZW50KTsKLQotICAgICAgICAgICAgLy8g
bm9kZSBtYXkgYmUgcmVwbGFjZWQgd2l0aCBudWxsLAotICAgICAgICAgICAgLy8gc28gZGlzdGlu
Z3Vpc2ggYmV0d2VlbiB1bmRlZmluZWQgYW5kIG51bGwgaW4gdGhpcyBwbGFjZQotICAgICAgICAg
ICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gQlJFQUsgJiYgdGFyZ2V0
ICE9PSBTS0lQKSB7Ci0gICAgICAgICAgICAgICAgLy8gcmVwbGFjZQotICAgICAgICAgICAgICAg
IGVsZW1lbnQucmVmLnJlcGxhY2UodGFyZ2V0KTsKLSAgICAgICAgICAgICAgICBlbGVtZW50Lm5v
ZGUgPSB0YXJnZXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLl9fc3Rh
dGUgPT09IEJSRUFLIHx8IHRhcmdldCA9PT0gQlJFQUspIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gb3V0ZXIucm9vdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gbm9kZSBtYXkg
YmUgbnVsbAotICAgICAgICAgICAgbm9kZSA9IGVsZW1lbnQubm9kZTsKLSAgICAgICAgICAgIGlm
ICghbm9kZSkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHNlbnRpbmVsKTsKLSAgICAgICAgICAgIGxlYXZlbGlz
dC5wdXNoKGVsZW1lbnQpOwotCi0gICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBTS0lQ
IHx8IHRhcmdldCA9PT0gU0tJUCkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBub2RlVHlwZSA9IGVsZW1lbnQud3JhcCB8fCBub2RlLnR5
cGU7Ci0gICAgICAgICAgICBjYW5kaWRhdGVzID0gVmlzaXRvcktleXNbbm9kZVR5cGVdOwotCi0g
ICAgICAgICAgICBjdXJyZW50ID0gY2FuZGlkYXRlcy5sZW5ndGg7Ci0gICAgICAgICAgICB3aGls
ZSAoKGN1cnJlbnQgLT0gMSkgPj0gMCkgewotICAgICAgICAgICAgICAgIGtleSA9IGNhbmRpZGF0
ZXNbY3VycmVudF07Ci0gICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gbm9kZVtrZXldOwotICAg
ICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghaXNBcnJheShj
YW5kaWRhdGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1l
bnQoY2FuZGlkYXRlLCBrZXksIG51bGwsIG5ldyBSZWZlcmVuY2Uobm9kZSwga2V5KSkpOwotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBjdXJyZW50MiA9IGNhbmRpZGF0ZS5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgd2hp
bGUgKChjdXJyZW50MiAtPSAxKSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2Fu
ZGlkYXRlW2N1cnJlbnQyXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09
PSBTeW50YXguT2JqZWN0RXhwcmVzc2lvbiAmJiAncHJvcGVydGllcycgPT09IGNhbmRpZGF0ZXNb
Y3VycmVudF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVu
dChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sICdQcm9wZXJ0eScsIG5ldyBS
ZWZlcmVuY2UoY2FuZGlkYXRlLCBjdXJyZW50MikpOwotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGNhbmRp
ZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgbnVsbCwgbmV3IFJlZmVyZW5jZShjYW5k
aWRhdGUsIGN1cnJlbnQyKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gb3V0ZXIucm9vdDsKLSAgICB9Owot
Ci0gICAgZnVuY3Rpb24gdHJhdmVyc2Uocm9vdCwgdmlzaXRvcikgewotICAgICAgICB2YXIgY29u
dHJvbGxlciA9IG5ldyBDb250cm9sbGVyKCk7Ci0gICAgICAgIHJldHVybiBjb250cm9sbGVyLnRy
YXZlcnNlKHJvb3QsIHZpc2l0b3IpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHJlcGxhY2Uocm9v
dCwgdmlzaXRvcikgewotICAgICAgICB2YXIgY29udHJvbGxlciA9IG5ldyBDb250cm9sbGVyKCk7
Ci0gICAgICAgIHJldHVybiBjb250cm9sbGVyLnJlcGxhY2Uocm9vdCwgdmlzaXRvcik7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gZXh0ZW5kQ29tbWVudFJhbmdlKGNvbW1lbnQsIHRva2Vucykgewot
ICAgICAgICB2YXIgdGFyZ2V0OwotCi0gICAgICAgIHRhcmdldCA9IHVwcGVyQm91bmQodG9rZW5z
LCBmdW5jdGlvbiBzZWFyY2godG9rZW4pIHsKLSAgICAgICAgICAgIHJldHVybiB0b2tlbi5yYW5n
ZVswXSA+IGNvbW1lbnQucmFuZ2VbMF07Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGNvbW1lbnQu
ZXh0ZW5kZWRSYW5nZSA9IFtjb21tZW50LnJhbmdlWzBdLCBjb21tZW50LnJhbmdlWzFdXTsKLQot
ICAgICAgICBpZiAodGFyZ2V0ICE9PSB0b2tlbnMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBjb21t
ZW50LmV4dGVuZGVkUmFuZ2VbMV0gPSB0b2tlbnNbdGFyZ2V0XS5yYW5nZVswXTsKLSAgICAgICAg
fQotCi0gICAgICAgIHRhcmdldCAtPSAxOwotICAgICAgICBpZiAodGFyZ2V0ID49IDApIHsKLSAg
ICAgICAgICAgIGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVswXSA9IHRva2Vuc1t0YXJnZXRdLnJhbmdl
WzFdOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNvbW1lbnQ7Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gYXR0YWNoQ29tbWVudHModHJlZSwgcHJvdmlkZWRDb21tZW50cywgdG9rZW5zKSB7
Ci0gICAgICAgIC8vIEF0IGZpcnN0LCB3ZSBzaG91bGQgY2FsY3VsYXRlIGV4dGVuZGVkIGNvbW1l
bnQgcmFuZ2VzLgotICAgICAgICB2YXIgY29tbWVudHMgPSBbXSwgY29tbWVudCwgbGVuLCBpLCBj
dXJzb3I7Ci0KLSAgICAgICAgaWYgKCF0cmVlLnJhbmdlKSB7Ci0gICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ2F0dGFjaENvbW1lbnRzIG5lZWRzIHJhbmdlIGluZm9ybWF0aW9uJyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyB0b2tlbnMgYXJyYXkgaXMgZW1wdHksIHdlIGF0dGFjaCBjb21t
ZW50cyB0byB0cmVlIGFzICdsZWFkaW5nQ29tbWVudHMnCi0gICAgICAgIGlmICghdG9rZW5zLmxl
bmd0aCkgewotICAgICAgICAgICAgaWYgKHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcHJvdmlkZWRDb21tZW50cy5sZW5ndGg7IGkg
PCBsZW47IGkgKz0gMSkgewotICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gZGVlcENvcHko
cHJvdmlkZWRDb21tZW50c1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQuZXh0ZW5k
ZWRSYW5nZSA9IFswLCB0cmVlLnJhbmdlWzBdXTsKLSAgICAgICAgICAgICAgICAgICAgY29tbWVu
dHMucHVzaChjb21tZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdHJl
ZS5sZWFkaW5nQ29tbWVudHMgPSBjb21tZW50czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiB0cmVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcHJv
dmlkZWRDb21tZW50cy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkgewotICAgICAgICAgICAgY29t
bWVudHMucHVzaChleHRlbmRDb21tZW50UmFuZ2UoZGVlcENvcHkocHJvdmlkZWRDb21tZW50c1tp
XSksIHRva2VucykpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhpcyBpcyBiYXNlZCBvbiBK
b2huIEZyZWVtYW4ncyBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgY3Vyc29yID0gMDsKLSAgICAg
ICAgdHJhdmVyc2UodHJlZSwgewotICAgICAgICAgICAgZW50ZXI6IGZ1bmN0aW9uIChub2RlKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQ7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAo
Y3Vyc29yIDwgY29tbWVudHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQg
PSBjb21tZW50c1tjdXJzb3JdOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudC5leHRl
bmRlZFJhbmdlWzFdID4gbm9kZS5yYW5nZVswXSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAo
Y29tbWVudC5leHRlbmRlZFJhbmdlWzFdID09PSBub2RlLnJhbmdlWzBdKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUubGVhZGluZ0NvbW1lbnRzKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBbXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRz
LnB1c2goY29tbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cy5zcGxpY2Uo
Y3Vyc29yLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnNvciArPSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBvdXQgb2Ygb3duZWQgbm9kZQot
ICAgICAgICAgICAgICAgIGlmIChjdXJzb3IgPT09IGNvbW1lbnRzLmxlbmd0aCkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gVmlzaXRvck9wdGlvbi5CcmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29tbWVudHNbY3Vyc29yXS5leHRlbmRlZFJhbmdl
WzBdID4gbm9kZS5yYW5nZVsxXSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaXRv
ck9wdGlvbi5Ta2lwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgY3Vyc29yID0gMDsKLSAgICAgICAgdHJhdmVyc2UodHJlZSwgewotICAg
ICAgICAgICAgbGVhdmU6IGZ1bmN0aW9uIChub2RlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNv
bW1lbnQ7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoY3Vyc29yIDwgY29tbWVudHMubGVuZ3Ro
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBjb21tZW50c1tjdXJzb3JdOwotICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS5yYW5nZVsxXSA8IGNvbW1lbnQuZXh0ZW5kZWRSYW5n
ZVswXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5yYW5nZVsxXSA9PT0gY29tbWVu
dC5leHRlbmRlZFJhbmdlWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUu
dHJhaWxpbmdDb21tZW50cykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudHJh
aWxpbmdDb21tZW50cyA9IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS50cmFpbGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb21tZW50cy5zcGxpY2UoY3Vyc29yLCAxKTsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciArPSAx
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgLy8gYWxyZWFkeSBvdXQgb2Ygb3duZWQgbm9kZQotICAgICAgICAgICAgICAgIGlmIChj
dXJzb3IgPT09IGNvbW1lbnRzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
VmlzaXRvck9wdGlvbi5CcmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoY29tbWVudHNbY3Vyc29yXS5leHRlbmRlZFJhbmdlWzBdID4gbm9kZS5yYW5nZVsxXSkg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaXRvck9wdGlvbi5Ta2lwOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJu
IHRyZWU7Ci0gICAgfQotCi0gICAgZXhwb3J0cy52ZXJzaW9uID0gJzEuNS4xLWRldic7Ci0gICAg
ZXhwb3J0cy5TeW50YXggPSBTeW50YXg7Ci0gICAgZXhwb3J0cy50cmF2ZXJzZSA9IHRyYXZlcnNl
OwotICAgIGV4cG9ydHMucmVwbGFjZSA9IHJlcGxhY2U7Ci0gICAgZXhwb3J0cy5hdHRhY2hDb21t
ZW50cyA9IGF0dGFjaENvbW1lbnRzOwotICAgIGV4cG9ydHMuVmlzaXRvcktleXMgPSBWaXNpdG9y
S2V5czsKLSAgICBleHBvcnRzLlZpc2l0b3JPcHRpb24gPSBWaXNpdG9yT3B0aW9uOwotICAgIGV4
cG9ydHMuQ29udHJvbGxlciA9IENvbnRyb2xsZXI7Ci19KSk7Ci0vKiB2aW06IHNldCBzdz00IHRz
PTQgZXQgdHc9ODAgOiAqLwotCi19LHt9XSw4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKLSd1c2Ugc3RyaWN0JzsKLQotZnVuY3Rpb24gVG9PYmplY3QodmFsKSB7Ci0JaWYgKHZh
bCA9PSBudWxsKSB7Ci0JCXRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90
IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7Ci0JfQotCi0JcmV0dXJuIE9iamVj
dCh2YWwpOwotfQotCi1tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24g
KHRhcmdldCwgc291cmNlKSB7Ci0JdmFyIHBlbmRpbmdFeGNlcHRpb247Ci0JdmFyIGZyb207Ci0J
dmFyIGtleXM7Ci0JdmFyIHRvID0gVG9PYmplY3QodGFyZ2V0KTsKLQotCWZvciAodmFyIHMgPSAx
OyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7Ci0JCWZyb20gPSBhcmd1bWVudHNbc107Ci0J
CWtleXMgPSBPYmplY3Qua2V5cyhPYmplY3QoZnJvbSkpOwotCi0JCWZvciAodmFyIGkgPSAwOyBp
IDwga2V5cy5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsKLQkJCQl0b1trZXlzW2ldXSA9IGZyb21b
a2V5c1tpXV07Ci0JCQl9IGNhdGNoIChlcnIpIHsKLQkJCQlpZiAocGVuZGluZ0V4Y2VwdGlvbiA9
PT0gdW5kZWZpbmVkKSB7Ci0JCQkJCXBlbmRpbmdFeGNlcHRpb24gPSBlcnI7Ci0JCQkJfQotCQkJ
fQotCQl9Ci0JfQotCi0JaWYgKHBlbmRpbmdFeGNlcHRpb24pIHsKLQkJdGhyb3cgcGVuZGluZ0V4
Y2VwdGlvbjsKLQl9Ci0KLQlyZXR1cm4gdG87Ci19OwotCi19LHt9XSw5OltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBNYWluIEVTTGludCBv
YmplY3QuCi0gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCi0gKi8KLSJ1c2Ugc3RyaWN0IjsK
LQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlcXVpcmVtZW50cwotLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotdmFyIGVzcHJpbWEgPSByZXF1aXJlKCJlc3ByaW1hIiksCi0gICAgZXN0
cmF2ZXJzZSA9IHJlcXVpcmUoImVzdHJhdmVyc2UiKSwKLSAgICBlc2NvcGUgPSByZXF1aXJlKCJl
c2NvcGUiKSwKLSAgICBlbnZpcm9ubWVudHMgPSByZXF1aXJlKCIuLi9jb25mL2Vudmlyb25tZW50
cy5qc29uIiksCi0gICAgYXNzaWduID0gcmVxdWlyZSgib2JqZWN0LWFzc2lnbiIpLAotICAgIHJ1
bGVzID0gcmVxdWlyZSgiLi9ydWxlcyIpLAotICAgIHV0aWwgPSByZXF1aXJlKCIuL3V0aWwiKSwK
LSAgICBSdWxlQ29udGV4dCA9IHJlcXVpcmUoIi4vcnVsZS1jb250ZXh0IiksCi0gICAgRXZlbnRF
bWl0dGVyID0gcmVxdWlyZSgiZXZlbnRzIikuRXZlbnRFbWl0dGVyOwotCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gSGVscGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotZnVuY3Rp
b24gZXNjYXBlUmVnRXhwKHJ4KSB7Ci0gICAgcmV0dXJuIHJ4LnJlcGxhY2UoL1tcLVxbXF1cL1x7
XH1cKFwpXCpcK1w/XC5cXFxeXCRcfF0vZywgIlxcJCYiKTsKLX0KLQotLyoqCi0gKiBQYXJzZXMg
YSBsaXN0IG9mICJuYW1lOmJvb2xlYW5fdmFsdWUiIG9yL2FuZCAibmFtZSIgb3B0aW9ucyBkaXZp
ZGVkIGJ5IGNvbW1hIG9yCi0gKiB3aGl0ZXNwYWNlLgotICogQHBhcmFtIHtzdHJpbmd9IHN0cmlu
ZyBUaGUgc3RyaW5nIHRvIHBhcnNlLgotICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG1hcCBv
YmplY3Qgb2YgbmFtZXMgYW5kIGJvb2xlYW4gdmFsdWVzCi0gKi8KLWZ1bmN0aW9uIHBhcnNlQm9v
bGVhbkNvbmZpZyhzdHJpbmcpIHsKLSAgICB2YXIgaXRlbXMgPSB7fTsKLSAgICAvLyBDb2xsYXBz
ZSB3aGl0ZXNwYWNlIGFyb3VuZCA6IHRvIG1ha2UgcGFyc2luZyBlYXNpZXIKLSAgICBzdHJpbmcg
PSBzdHJpbmcucmVwbGFjZSgvXHMqOlxzKi9nLCAiOiIpOwotICAgIC8vIENvbGxhcHNlIHdoaXRl
c3BhY2UgYXJvdW5kICwKLSAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXHMqLFxzKi9nLCAi
LCIpOwotICAgIHN0cmluZy5zcGxpdCgvXHN8LCsvKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsK
LSAgICAgICAgaWYgKCFuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgdmFyIHBvcyA9IG5hbWUuaW5kZXhPZigiOiIpLAotICAgICAgICAgICAgdmFsdWU7Ci0g
ICAgICAgIGlmIChwb3MgIT09IC0xKSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IG5hbWUuc3Vic3Ry
aW5nKHBvcyArIDEsIG5hbWUubGVuZ3RoKTsKLSAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0
cmluZygwLCBwb3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgaXRlbXNbbmFtZV0gPSAodmFsdWUg
PT09ICJ0cnVlIik7Ci0KLSAgICB9KTsKLSAgICByZXR1cm4gaXRlbXM7Ci19Ci0KLS8qKgotICog
UGFyc2VzIGEgSlNPTi1saWtlIGNvbmZpZy4KLSAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhl
IHN0cmluZyB0byBwYXJzZS4KLSAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBtYXAgb2JqZWN0
Ci0gKi8KLWZ1bmN0aW9uIHBhcnNlSnNvbkNvbmZpZyhzdHJpbmcpIHsKLSAgICB2YXIgaXRlbXMg
PSB7fTsKLSAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvKFthLXowLTlcLVwvXSspOi9nLCAi
XCIkMVwiOiIpLnJlcGxhY2UoLyhcXXxbMC05XSlccysoPz0iKS8sICIkMSwiKTsKLSAgICB0cnkg
ewotICAgICAgICBpdGVtcyA9IEpTT04ucGFyc2UoInsiICsgc3RyaW5nICsgIn0iKTsKLSAgICB9
IGNhdGNoKGUpIHsgfQotCi0gICAgcmV0dXJuIGl0ZW1zOwotfQotCi0vKioKLSAqIFBhcnNlcyBh
IGNvbmZpZyBvZiB2YWx1ZXMgc2VwYXJhdGVkIGJ5IGNvbW1hLgotICogQHBhcmFtIHtzdHJpbmd9
IHN0cmluZyBUaGUgc3RyaW5nIHRvIHBhcnNlLgotICogQHJldHVybnMge09iamVjdH0gUmVzdWx0
IG1hcCBvZiB2YWx1ZXMgYW5kIHRydWUgdmFsdWVzCi0gKi8KLWZ1bmN0aW9uIHBhcnNlTGlzdENv
bmZpZyhzdHJpbmcpIHsKLSAgICB2YXIgaXRlbXMgPSB7fTsKLSAgICAvLyBDb2xsYXBzZSB3aGl0
ZXNwYWNlIGFyb3VuZCAsCi0gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xzKixccyovZywg
IiwiKTsKLSAgICBzdHJpbmcuc3BsaXQoLywrLykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7Ci0g
ICAgICAgIG5hbWUgPSBuYW1lLnRyaW0oKTsKLSAgICAgICAgaWYgKCFuYW1lKSB7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaXRlbXNbbmFtZV0gPSB0cnVlOwotICAg
IH0pOwotICAgIHJldHVybiBpdGVtczsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge1Njb3BlfSBzY29w
ZSBUaGUgc2NvcGUgb2JqZWN0IHRvIGNoZWNrLgotICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhl
IG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGxvb2sgdXAuCi0gKiBAcmV0dXJucyB7VmFyaWFibGV9
IFRoZSB2YXJpYWJsZSBvYmplY3QgaWYgZm91bmQgb3IgbnVsbCBpZiBub3QuCi0gKi8KLWZ1bmN0
aW9uIGdldFZhcmlhYmxlKHNjb3BlLCBuYW1lKSB7Ci0gICAgdmFyIHZhcmlhYmxlID0gbnVsbDsK
LSAgICBzY29wZS52YXJpYWJsZXMuc29tZShmdW5jdGlvbih2KSB7Ci0gICAgICAgIGlmICh2Lm5h
bWUgPT09IG5hbWUpIHsKLSAgICAgICAgICAgIHZhcmlhYmxlID0gdjsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0KLSAgICB9KTsKLSAgICByZXR1cm4gdmFyaWFibGU7Ci19Ci0KLS8qKgotICog
RW5zdXJlcyB0aGF0IHZhcmlhYmxlcyByZXByZXNlbnRpbmcgYnVpbHQtaW4gcHJvcGVydGllcyBv
ZiB0aGUgR2xvYmFsIE9iamVjdCwKLSAqIGFuZCBhbnkgZ2xvYmFscyBkZWNsYXJlZCBieSBzcGVj
aWFsIGJsb2NrIGNvbW1lbnRzLCBhcmUgcHJlc2VudCBpbiB0aGUgZ2xvYmFsCi0gKiBzY29wZS4K
LSAqIEBwYXJhbSB7QVNUTm9kZX0gcHJvZ3JhbSBUaGUgdG9wIG5vZGUgb2YgdGhlIEFTVC4KLSAq
IEBwYXJhbSB7U2NvcGV9IGdsb2JhbFNjb3BlIFRoZSBnbG9iYWwgc2NvcGUuCi0gKiBAcGFyYW0g
e09iamVjdH0gY29uZmlnIFRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uIGRhdGEuCi0gKiBAcmV0
dXJucyB7dm9pZH0KLSAqLwotZnVuY3Rpb24gYWRkRGVjbGFyZWRHbG9iYWxzKHByb2dyYW0sIGds
b2JhbFNjb3BlLCBjb25maWcpIHsKLSAgICB2YXIgZGVjbGFyZWRHbG9iYWxzID0ge30sCi0gICAg
ICAgIGV4cGxpY2l0R2xvYmFscyA9IHt9LAotICAgICAgICBidWlsdGluID0gZW52aXJvbm1lbnRz
LmJ1aWx0aW47Ci0KLSAgICBhc3NpZ24oZGVjbGFyZWRHbG9iYWxzLCBidWlsdGluKTsKLQotICAg
IE9iamVjdC5rZXlzKGNvbmZpZy5lbnYpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHsKLSAgICAg
ICAgaWYgKGNvbmZpZy5lbnZbbmFtZV0pIHsKLSAgICAgICAgICAgIHZhciBlbnZpcm9ubWVudEds
b2JhbHMgPSBlbnZpcm9ubWVudHNbbmFtZV0gJiYgZW52aXJvbm1lbnRzW25hbWVdLmdsb2JhbHM7
Ci0gICAgICAgICAgICBpZiAoZW52aXJvbm1lbnRHbG9iYWxzKSB7Ci0gICAgICAgICAgICAgICAg
YXNzaWduKGRlY2xhcmVkR2xvYmFscywgZW52aXJvbm1lbnRHbG9iYWxzKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0pOwotCi0gICAgYXNzaWduKGRlY2xhcmVkR2xvYmFscywgY29u
ZmlnLmdsb2JhbHMpOwotICAgIGFzc2lnbihleHBsaWNpdEdsb2JhbHMsIGNvbmZpZy5hc3RHbG9i
YWxzKTsKLQotICAgIE9iamVjdC5rZXlzKGRlY2xhcmVkR2xvYmFscykuZm9yRWFjaChmdW5jdGlv
bihuYW1lKSB7Ci0gICAgICAgIHZhciB2YXJpYWJsZSA9IGdldFZhcmlhYmxlKGdsb2JhbFNjb3Bl
LCBuYW1lKTsKLSAgICAgICAgaWYgKCF2YXJpYWJsZSkgewotICAgICAgICAgICAgdmFyaWFibGUg
PSBuZXcgZXNjb3BlLlZhcmlhYmxlKG5hbWUsIGdsb2JhbFNjb3BlKTsKLSAgICAgICAgICAgIHZh
cmlhYmxlLmVzbGludEV4cGxpY2l0R2xvYmFsID0gZmFsc2U7Ci0gICAgICAgICAgICBnbG9iYWxT
Y29wZS52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyaWFi
bGUud3JpdGVhYmxlID0gZGVjbGFyZWRHbG9iYWxzW25hbWVdOwotICAgIH0pOwotCi0gICAgT2Jq
ZWN0LmtleXMoZXhwbGljaXRHbG9iYWxzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAg
ICAgdmFyIHZhcmlhYmxlID0gZ2V0VmFyaWFibGUoZ2xvYmFsU2NvcGUsIG5hbWUpOwotICAgICAg
ICBpZiAoIXZhcmlhYmxlKSB7Ci0gICAgICAgICAgICB2YXJpYWJsZSA9IG5ldyBlc2NvcGUuVmFy
aWFibGUobmFtZSwgZ2xvYmFsU2NvcGUpOwotICAgICAgICAgICAgdmFyaWFibGUuZXNsaW50RXhw
bGljaXRHbG9iYWwgPSB0cnVlOwotICAgICAgICAgICAgZ2xvYmFsU2NvcGUudmFyaWFibGVzLnB1
c2godmFyaWFibGUpOwotICAgICAgICB9Ci0gICAgICAgIHZhcmlhYmxlLndyaXRlYWJsZSA9IGV4
cGxpY2l0R2xvYmFsc1tuYW1lXTsKLSAgICB9KTsKLX0KLQotLyoqCi0gKiBBZGQgZGF0YSB0byBy
ZXBvcnRpbmcgY29uZmlndXJhdGlvbiB0byBkaXNhYmxlIHJlcG9ydGluZyBmb3IgbGlzdCBvZiBy
dWxlcwotICogc3RhcnRpbmcgZnJvbSBzdGFydCBsb2NhdGlvbgotICogQHBhcmFtICB7T2JqZWN0
W119IHJlcG9ydGluZ0NvbmZpZyBDdXJyZW50IHJlcG9ydGluZyBjb25maWd1cmF0aW9uCi0gKiBA
cGFyYW0gIHtPYmplY3R9IHN0YXJ0IFBvc2l0aW9uIHRvIHN0YXJ0Ci0gKiBAcGFyYW0gIHtzdHJp
bmdbXX0gcnVsZXMgTGlzdCBvZiBydWxlcwotICogQHJldHVybnMge3ZvaWR9Ci0gKi8KLWZ1bmN0
aW9uIGRpc2FibGVSZXBvcnRpbmcocmVwb3J0aW5nQ29uZmlnLCBzdGFydCwgcnVsZXMpIHsKLQot
ICAgIGlmIChydWxlcy5sZW5ndGgpIHsKLSAgICAgICAgcnVsZXMuZm9yRWFjaChmdW5jdGlvbihy
dWxlKSB7Ci0gICAgICAgICAgICByZXBvcnRpbmdDb25maWcucHVzaCh7Ci0gICAgICAgICAgICAg
ICAgc3RhcnQ6IHN0YXJ0LAotICAgICAgICAgICAgICAgIGVuZDogbnVsbCwKLSAgICAgICAgICAg
ICAgICBydWxlOiBydWxlCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgcmVwb3J0aW5nQ29uZmlnLnB1c2goewotICAgICAgICAgICAgc3RhcnQ6IHN0
YXJ0LAotICAgICAgICAgICAgZW5kOiBudWxsLAotICAgICAgICAgICAgcnVsZTogbnVsbAotICAg
ICAgICB9KTsKLSAgICB9Ci19Ci0KLS8qKgotICogQWRkIGRhdGEgdG8gcmVwb3J0aW5nIGNvbmZp
Z3VyYXRpb24gdG8gZW5hYmxlIHJlcG9ydGluZyBmb3IgbGlzdCBvZiBydWxlcwotICogc3RhcnRp
bmcgZnJvbSBzdGFydCBsb2NhdGlvbgotICogQHBhcmFtICB7T2JqZWN0W119IHJlcG9ydGluZ0Nv
bmZpZyBDdXJyZW50IHJlcG9ydGluZyBjb25maWd1cmF0aW9uCi0gKiBAcGFyYW0gIHtPYmplY3R9
IHN0YXJ0IFBvc2l0aW9uIHRvIHN0YXJ0Ci0gKiBAcGFyYW0gIHtzdHJpbmdbXX0gcnVsZXMgTGlz
dCBvZiBydWxlcwotICogQHJldHVybnMge3ZvaWR9Ci0gKi8KLWZ1bmN0aW9uIGVuYWJsZVJlcG9y
dGluZyhyZXBvcnRpbmdDb25maWcsIHN0YXJ0LCBydWxlcykgewotICAgIHZhciBpOwotCi0gICAg
aWYgKHJ1bGVzLmxlbmd0aCkgewotICAgICAgICBydWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGUp
IHsKLSAgICAgICAgICAgIGZvciAoaSA9IHJlcG9ydGluZ0NvbmZpZy5sZW5ndGggLSAxOyBpID49
IDA7IGktLSkgewotICAgICAgICAgICAgICAgIGlmICghcmVwb3J0aW5nQ29uZmlnW2ldLmVuZCAm
JiByZXBvcnRpbmdDb25maWdbaV0ucnVsZSA9PT0gcnVsZSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmVwb3J0aW5nQ29uZmlnW2ldLmVuZCA9IHN0YXJ0OwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIC8vIGZpbmQgYWxsIHByZXZpb3VzIGRpc2FibGVkIGxvY2F0aW9u
cyBpZiB0aGV5IHdhcyBzdGFydGVkIGFzIGxpc3Qgb2YgcnVsZXMKLSAgICAgICAgdmFyIHByZXZT
dGFydDsKLSAgICAgICAgZm9yIChpID0gcmVwb3J0aW5nQ29uZmlnLmxlbmd0aCAtIDE7IGkgPj0g
MDsgaS0tKSB7Ci0gICAgICAgICAgICBpZiAocHJldlN0YXJ0ICYmIHByZXZTdGFydCAhPT0gcmVw
b3J0aW5nQ29uZmlnW2ldLnN0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcmVwb3J0aW5nQ29uZmlnW2ldLmVuZCkgewotICAg
ICAgICAgICAgICAgIHJlcG9ydGluZ0NvbmZpZ1tpXS5lbmQgPSBzdGFydDsKLSAgICAgICAgICAg
ICAgICBwcmV2U3RhcnQgPSByZXBvcnRpbmdDb25maWdbaV0uc3RhcnQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLQotLyoqCi0gKiBQYXJzZXMgY29tbWVudHMgaW4gZmls
ZSB0byBleHRyYWN0IGZpbGUtc3BlY2lmaWMgY29uZmlnIG9mIHJ1bGVzLCBnbG9iYWxzCi0gKiBh
bmQgZW52aXJvbm1lbnRzIGFuZCBtZXJnZXMgdGhlbSB3aXRoIGdsb2JhbCBjb25maWc7IGFsc28g
Y29kZSBibG9ja3MKLSAqIHdoZXJlIHJlcG9ydGluZyBpcyBkaXNhYmxlZCBvciBlbmFibGVkIGFu
ZCBtZXJnZXMgdGhlbSB3aXRoIHJlcG9ydGluZyBjb25maWcuCi0gKiBAcGFyYW0ge0FTVE5vZGV9
IGFzdCBUaGUgdG9wIG5vZGUgb2YgdGhlIEFTVC4KLSAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcg
VGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZGF0YS4KLSAqIEBwYXJhbSB7T2JqZWN0W119IHJl
cG9ydGluZ0NvbmZpZyBUaGUgZXhpc3RpbmcgcmVwb3J0aW5nIGNvbmZpZ3VyYXRpb24gZGF0YS4K
LSAqIEByZXR1cm5zIHt2b2lkfQotICovCi1mdW5jdGlvbiBtb2RpZnlDb25maWdzRnJvbUNvbW1l
bnRzKGFzdCwgY29uZmlnLCByZXBvcnRpbmdDb25maWcpIHsKLQotICAgIHZhciBjb21tZW50Q29u
ZmlnID0gewotICAgICAgICBhc3RHbG9iYWxzOiB7fSwKLSAgICAgICAgcnVsZXM6IHt9LAotICAg
ICAgICBlbnY6IHt9Ci0gICAgfTsKLSAgICB2YXIgY29tbWVudFJ1bGVzID0ge307Ci0KLSAgICBh
c3QuY29tbWVudHMuZm9yRWFjaChmdW5jdGlvbihjb21tZW50KSB7Ci0gICAgICAgIGlmIChjb21t
ZW50LnR5cGUgPT09ICJCbG9jayIpIHsKLQotICAgICAgICAgICAgdmFyIHZhbHVlID0gY29tbWVu
dC52YWx1ZS50cmltKCk7Ci0gICAgICAgICAgICB2YXIgbWF0Y2ggPSAvXihlc2xpbnQtXHcrfGVz
bGludHxnbG9iYWxzPykoXHN8JCkvLmV4ZWModmFsdWUpOwotCi0gICAgICAgICAgICBpZiAobWF0
Y2gpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZyhtYXRjaC5pbmRl
eCArIG1hdGNoWzFdLmxlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1hdGNoWzFd
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgImdsb2JhbHMiOgotICAgICAgICAgICAgICAg
ICAgICBjYXNlICJnbG9iYWwiOgotICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5taXhpbihj
b21tZW50Q29uZmlnLmFzdEdsb2JhbHMsIHBhcnNlQm9vbGVhbkNvbmZpZyh2YWx1ZSkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSAi
ZXNsaW50LWVudiI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB1dGlsLm1peGluKGNvbW1lbnRD
b25maWcuZW52LCBwYXJzZUxpc3RDb25maWcodmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgImVzbGludC1kaXNhYmxlIjoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVSZXBvcnRpbmcocmVwb3J0aW5nQ29uZmln
LCBjb21tZW50LmxvYy5zdGFydCwgT2JqZWN0LmtleXMocGFyc2VMaXN0Q29uZmlnKHZhbHVlKSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSAiZXNsaW50LWVuYWJsZSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVSZXBv
cnRpbmcocmVwb3J0aW5nQ29uZmlnLCBjb21tZW50LmxvYy5zdGFydCwgT2JqZWN0LmtleXMocGFy
c2VMaXN0Q29uZmlnKHZhbHVlKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXNsaW50IjoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBpdGVtcyA9IHBhcnNlSnNvbkNvbmZpZyh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBPYmplY3Qua2V5cyhpdGVtcykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGVWYWx1ZSA9IGl0ZW1zW25hbWVdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZVZhbHVlID09PSAibnVtYmVy
IiB8fCAoQXJyYXkuaXNBcnJheShydWxlVmFsdWUpICYmIHR5cGVvZiBydWxlVmFsdWVbMF0gPT09
ICJudW1iZXIiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50UnVs
ZXNbbmFtZV0gPSBydWxlVmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgICAgICAgICAvLyBubyBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSk7Ci0KLSAgICAvLyBhcHBseSBlbnZpcm9u
bWVudCBydWxlcyBiZWZvcmUgdXNlciBydWxlcwotICAgIE9iamVjdC5rZXlzKGNvbW1lbnRDb25m
aWcuZW52KS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7Ci0gICAgICAgIHZhciBlbnZpcm9ubWVu
dFJ1bGVzID0gZW52aXJvbm1lbnRzW25hbWVdICYmIGVudmlyb25tZW50c1tuYW1lXS5ydWxlczsK
LSAgICAgICAgaWYgKGNvbW1lbnRDb25maWcuZW52W25hbWVdICYmIGVudmlyb25tZW50UnVsZXMp
IHsKLSAgICAgICAgICAgIHV0aWwubWl4aW4oY29tbWVudENvbmZpZy5ydWxlcywgZW52aXJvbm1l
bnRSdWxlcyk7Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICB1dGlsLm1peGluKGNvbW1lbnRDb25m
aWcucnVsZXMsIGNvbW1lbnRSdWxlcyk7Ci0KLSAgICB1dGlsLm1lcmdlQ29uZmlncyhjb25maWcs
IGNvbW1lbnRDb25maWcpOwotfQotCi0vKioKLSAqIENoZWNrIGlmIG1lc3NhZ2Ugb2YgcnVsZSB3
aXRoIHJ1bGVJZCBzaG91bGQgYmUgaWdub3JlZCBpbiBsb2NhdGlvbgotICogQHBhcmFtICB7T2Jq
ZWN0W119IHJlcG9ydGluZ0NvbmZpZyAgQ29sbGVjdGlvbiBvZiBpZ25vcmUgcmVjb3JkcwotICog
QHBhcmFtICB7c3RyaW5nfSBydWxlSWQgICBJZCBvZiBydWxlCi0gKiBAcGFyYW0gIHtPYmplY3R9
IGxvY2F0aW9uIExvY2F0aW9uIG9mIG1lc3NhZ2UKLSAqIEByZXR1cm5zIHtib29sZWFufSAgICAg
ICAgICBUcnVlIGlmIG1lc3NhZ2Ugc2hvdWxkIGJlIGlnbm9yZWQsIGZhbHNlIG90aGVyd2lzZQot
ICovCi1mdW5jdGlvbiBpc0Rpc2FibGVkQnlSZXBvcnRpbmdDb25maWcocmVwb3J0aW5nQ29uZmln
LCBydWxlSWQsIGxvY2F0aW9uKSB7Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgYyA9IHJlcG9ydGlu
Z0NvbmZpZy5sZW5ndGg7IGkgPCBjOyBpKyspIHsKLQotICAgICAgICB2YXIgaWdub3JlID0gcmVw
b3J0aW5nQ29uZmlnW2ldOwotICAgICAgICBpZiAoKCFpZ25vcmUucnVsZSB8fCBpZ25vcmUucnVs
ZSA9PT0gcnVsZUlkKSAmJgotICAgICAgICAgICAgKGxvY2F0aW9uLmxpbmUgPiBpZ25vcmUuc3Rh
cnQubGluZSB8fCAobG9jYXRpb24ubGluZSA9PT0gaWdub3JlLnN0YXJ0LmxpbmUgJiYgbG9jYXRp
b24uY29sdW1uID49IGlnbm9yZS5zdGFydC5jb2x1bW4pKSAmJgotICAgICAgICAgICAgKCFpZ25v
cmUuZW5kIHx8IChsb2NhdGlvbi5saW5lIDwgaWdub3JlLmVuZC5saW5lIHx8IChsb2NhdGlvbi5s
aW5lID09PSBpZ25vcmUuZW5kLmxpbmUgJiYgbG9jYXRpb24uY29sdW1uIDw9IGlnbm9yZS5lbmQu
Y29sdW1uKSkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8qKgotICogUHJvY2VzcyBpbml0aWFsIGNv
bmZpZyB0byBtYWtlIGl0IHNhZmUgdG8gZXh0ZW5kIGJ5IGZpbGUgY29tbWVudCBjb25maWcKLSAq
IEBwYXJhbSAge09iamVjdH0gY29uZmlnIEluaXRpYWwgY29uZmlnCi0gKiBAcmV0dXJucyB7T2Jq
ZWN0fSAgICAgICAgUHJvY2Vzc2VkIGNvbmZpZwotICovCi1mdW5jdGlvbiBwcmVwYXJlQ29uZmln
KGNvbmZpZykgewotCi0gICAgY29uZmlnLmdsb2JhbHMgPSBjb25maWcuZ2xvYmFscyB8fCBjb25m
aWcuZ2xvYmFsIHx8IHt9OwotICAgIGRlbGV0ZSBjb25maWcuZ2xvYmFsOwotCi0gICAgdmFyIGNv
cGllZFJ1bGVzID0ge307Ci0gICAgaWYgKHR5cGVvZiBjb25maWcucnVsZXMgPT09ICJvYmplY3Qi
KSB7Ci0gICAgICAgIE9iamVjdC5rZXlzKGNvbmZpZy5ydWxlcykuZm9yRWFjaChmdW5jdGlvbihr
KSB7Ci0gICAgICAgICAgICB2YXIgcnVsZSA9IGNvbmZpZy5ydWxlc1trXTsKLSAgICAgICAgICAg
IGlmIChBcnJheS5pc0FycmF5KHJ1bGUpKSB7Ci0gICAgICAgICAgICAgICAgY29waWVkUnVsZXNb
a10gPSBydWxlLnNsaWNlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGNvcGllZFJ1bGVzW2tdID0gcnVsZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgcnVsZXM6IGNvcGllZFJ1bGVzLAotICAgICAgICBn
bG9iYWxzOiB1dGlsLm1lcmdlQ29uZmlncyh7fSwgY29uZmlnLmdsb2JhbHMpLAotICAgICAgICBl
bnY6IHV0aWwubWVyZ2VDb25maWdzKHt9LCBjb25maWcuZW52IHx8IHt9KSwKLSAgICAgICAgc2V0
dGluZ3M6IHV0aWwubWVyZ2VDb25maWdzKHt9LCBjb25maWcuc2V0dGluZ3MgfHwge30pCi0gICAg
fTsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFB1YmxpYyBJbnRlcmZhY2UKLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8qKgotICogT2JqZWN0IHRoYXQgaXMgcmVzcG9uc2li
bGUgZm9yIHZlcmlmeWluZyBKYXZhU2NyaXB0IHRleHQKLSAqIEBuYW1lIGVzbGludAotICovCi1t
b2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbigpIHsKLQotICAgIHZhciBhcGkgPSBPYmplY3QuY3Jl
YXRlKG5ldyBFdmVudEVtaXR0ZXIoKSksCi0gICAgICAgIG1lc3NhZ2VzID0gW10sCi0gICAgICAg
IGN1cnJlbnRUZXh0ID0gbnVsbCwKLSAgICAgICAgY3VycmVudFRleHRMaW5lcyA9IFtdLAotICAg
ICAgICBjdXJyZW50Q29uZmlnID0gbnVsbCwKLSAgICAgICAgY3VycmVudFRva2VucyA9IG51bGws
Ci0gICAgICAgIGN1cnJlbnRTY29wZXMgPSBudWxsLAotICAgICAgICBzY29wZU1hcCA9IG51bGws
Ci0gICAgICAgIGN1cnJlbnRGaWxlbmFtZSA9IG51bGwsCi0gICAgICAgIGNvbnRyb2xsZXIgPSBu
dWxsLAotICAgICAgICByZXBvcnRpbmdDb25maWcgPSBbXSwKLSAgICAgICAgY29tbWVudExvY3NF
bnRlciA9IFtdLAotICAgICAgICBjb21tZW50TG9jc0V4aXQgPSBbXTsKLQotICAgIC8qKgotICAg
ICAqIFBhcnNlcyB0ZXh0IGludG8gYW4gQVNULiBNb3ZlZCBvdXQgaGVyZSBiZWNhdXNlIHRoZSB0
cnktY2F0Y2ggcHJldmVudHMKLSAgICAgKiBvcHRpbWl6YXRpb24gb2YgZnVuY3Rpb25zLCBzbyBp
dCdzIGJlc3QgdG8ga2VlcCB0aGUgdHJ5LWNhdGNoIGFzIGlzb2xhdGVkCi0gICAgICogYXMgcG9z
c2libGUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUaGUgdGV4dCB0byBwYXJzZS4KLSAg
ICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gVGhlIEFTVCBpZiBzdWNjZXNzZnVsIG9yIG51bGwgaWYg
bm90LgotICAgICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gcGFyc2UodGV4dCkg
ewotICAgICAgICAvKgotICAgICAgICAgKiBDaGVjayBmb3IgcGFyc2luZyBlcnJvcnMgZmlyc3Qu
IElmIHRoZXJlJ3MgYSBwYXJzaW5nIGVycm9yLCBub3RoaW5nCi0gICAgICAgICAqIGVsc2UgY2Fu
IGhhcHBlbi4gSG93ZXZlciwgYSBwYXJzaW5nIGVycm9yIGRvZXMgbm90IHRocm93IGFuIGVycm9y
Ci0gICAgICAgICAqIGZyb20gdGhpcyBtZXRob2QgLSBpdCdzIGp1c3QgY29uc2lkZXJlZCBhIGZh
dGFsIGVycm9yIG1lc3NhZ2UsIGEKLSAgICAgICAgICogcHJvYmxlbSB0aGF0IEVTTGludCBpZGVu
dGlmaWVkIGp1c3QgbGlrZSBhbnkgb3RoZXIuCi0gICAgICAgICAqLwotICAgICAgICB0cnkgewot
ICAgICAgICAgICAgcmV0dXJuIGVzcHJpbWEucGFyc2UodGV4dCwgewotICAgICAgICAgICAgICAg
IGxvYzogdHJ1ZSwKLSAgICAgICAgICAgICAgICByYW5nZTogdHJ1ZSwKLSAgICAgICAgICAgICAg
ICByYXc6IHRydWUsCi0gICAgICAgICAgICAgICAgdG9rZW5zOiB0cnVlLAotICAgICAgICAgICAg
ICAgIGNvbW1lbnQ6IHRydWUsCi0gICAgICAgICAgICAgICAgYXR0YWNoQ29tbWVudDogdHJ1ZQot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gY2F0Y2ggKGV4KSB7Ci0KLSAgICAgICAgICAgIG1l
c3NhZ2VzLnB1c2goewotICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLAotICAgICAgICAgICAg
ICAgIHNldmVyaXR5OiAyLAotCi0gICAgICAgICAgICAgICAgLy8gbWVzc2FnZXMgY29tZSBhcyAi
TGluZSBYOiBVbmV4cGVjdGVkIHRva2VuIGZvbyIsIHNvIHN0cmlwIG9mZiBsZWFkaW5nIHBhcnQK
LSAgICAgICAgICAgICAgICBtZXNzYWdlOiBleC5tZXNzYWdlLnN1YnN0cmluZyhleC5tZXNzYWdl
LmluZGV4T2YoIjoiKSArIDEpLnRyaW0oKSwKLQotICAgICAgICAgICAgICAgIGxpbmU6IGV4Lmxp
bmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgY29sdW1uOiBleC5jb2x1bW4KLSAgICAgICAgICAg
IH0pOwotCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8qKgotICAgICAqIENoZWNrIGNvbGxlY3Rpb24gb2YgY29tbWVudHMgdG8gcHJldmVudCBkb3Vi
bGUgZXZlbnQgZm9yIGNvbW1lbnQgYXMKLSAgICAgKiBsZWFkaW5nIGFuZCB0cmFpbGluZywgdGhl
biBlbWl0IGV2ZW50IGlmIHBhc3NpbmcKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gY29tbWVu
dHMgQ29sbGVjdGlvbiBvZiBjb21tZW50IG5vZGVzCi0gICAgICogQHBhcmFtIHtPYmplY3RbXX0g
bG9jcyBMaXN0IG9mIGxvY2F0aW9ucyBvZiBwcmV2aW91cyBjb21tZW50IG5vZGVzCi0gICAgICog
QHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBFdmVudCBuYW1lIHBvc3RmaXgKLSAgICAgKiBAcmV0
dXJucyB7dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBlbWl0Q29tbWVudHMoY29tbWVudHMs
IGxvY3MsIGV2ZW50TmFtZSkgewotCi0gICAgICAgIGlmIChjb21tZW50cy5sZW5ndGgpIHsKLSAg
ICAgICAgICAgIGNvbW1lbnRzLmZvckVhY2goZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAg
ICAgIGlmIChsb2NzLmluZGV4T2Yobm9kZS5sb2MpID49IDApIHsKLSAgICAgICAgICAgICAgICAg
ICAgbG9jcy5zcGxpY2UobG9jcy5pbmRleE9mKG5vZGUubG9jKSwgMSk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbG9jcy5wdXNoKG5vZGUubG9jKTsKLSAg
ICAgICAgICAgICAgICAgICAgYXBpLmVtaXQobm9kZS50eXBlICsgZXZlbnROYW1lLCBub2RlKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8qKgotICAgICAqIFNob3J0Y3V0IHRvIGNoZWNrIGFuZCBlbWl0IGVudGVyIG9mIGNvbW1l
bnQgbm9kZXMKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gY29tbWVudHMgQ29sbGVjdGlvbiBv
ZiBjb21tZW50IG5vZGVzCi0gICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAgZnVu
Y3Rpb24gZW1pdENvbW1lbnRzRW50ZXIoY29tbWVudHMpIHsKLSAgICAgICAgZW1pdENvbW1lbnRz
KGNvbW1lbnRzLCBjb21tZW50TG9jc0VudGVyLCAiQ29tbWVudCIpOwotICAgIH0KLQotICAgIC8q
KgotICAgICAqIFNob3J0Y3V0IHRvIGNoZWNrIGFuZCBlbWl0IGV4aXQgb2YgY29tbWVudCBub2Rl
cwotICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBjb21tZW50cyBDb2xsZWN0aW9uIG9mIGNvbW1l
bnQgbm9kZXMKLSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBl
bWl0Q29tbWVudHNFeGl0KGNvbW1lbnRzKSB7Ci0gICAgICAgIGVtaXRDb21tZW50cyhjb21tZW50
cywgY29tbWVudExvY3NFeGl0LCAiQ29tbWVudDpleGl0Iik7Ci0gICAgfQotCi0gICAgLyoqCi0g
ICAgICogR2V0IHRoZSBzZXZlcml0eSBsZXZlbCBvZiBhIHJ1bGUgKDAgLSBub25lLCAxIC0gd2Fy
bmluZywgMiAtIGVycm9yKQotICAgICAqIFJldHVybnMgMCBpZiB0aGUgcnVsZSBjb25maWcgaXMg
bm90IHZhbGlkIChhbiBBcnJheSBvciBhIG51bWJlcikKLSAgICAgKiBAcGFyYW0ge0FycmF5fG51
bWJlcn0gcnVsZUNvbmZpZyBydWxlIGNvbmZpZ3VyYXRpb24KLSAgICAgKiBAcmV0dXJucyB7bnVt
YmVyfSAwLCAxLCBvciAyLCBpbmRpY2F0aW5nIHJ1bGUgc2V2ZXJpdHkKLSAgICAgKi8KLSAgICBm
dW5jdGlvbiBnZXRSdWxlU2V2ZXJpdHkocnVsZUNvbmZpZykgewotICAgICAgICBpZiAodHlwZW9m
IHJ1bGVDb25maWcgPT09ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICByZXR1cm4gcnVsZUNvbmZp
ZzsKLSAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJ1bGVDb25maWcpKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gcnVsZUNvbmZpZ1swXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IHRo
ZSBvcHRpb25zIGZvciBhIHJ1bGUgKG5vdCBpbmNsdWRpbmcgc2V2ZXJpdHkpLCBpZiBhbnkKLSAg
ICAgKiBAcGFyYW0ge0FycmF5fG51bWJlcn0gcnVsZUNvbmZpZyBydWxlIGNvbmZpZ3VyYXRpb24K
LSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIHJ1bGUgb3B0aW9ucywgZW1wdHkgQXJyYXkgaWYg
bm9uZQotICAgICAqLwotICAgIGZ1bmN0aW9uIGdldFJ1bGVPcHRpb25zKHJ1bGVDb25maWcpIHsK
LSAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocnVsZUNvbmZpZykpIHsKLSAgICAgICAgICAgIHJl
dHVybiBydWxlQ29uZmlnLnNsaWNlKDEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
cmV0dXJuIFtdOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gc2V0IHVubGltaXRlZCBsaXN0
ZW5lcnMgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvNTI0KQot
ICAgIGFwaS5zZXRNYXhMaXN0ZW5lcnMoMCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXNldHMgdGhl
IGludGVybmFsIHN0YXRlIG9mIHRoZSBvYmplY3QuCi0gICAgICogQHJldHVybnMge3ZvaWR9Ci0g
ICAgICovCi0gICAgYXBpLnJlc2V0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMucmVtb3Zl
QWxsTGlzdGVuZXJzKCk7Ci0gICAgICAgIG1lc3NhZ2VzID0gW107Ci0gICAgICAgIGN1cnJlbnRD
b25maWcgPSBudWxsOwotICAgICAgICBjdXJyZW50VGV4dCA9IG51bGw7Ci0gICAgICAgIGN1cnJl
bnRUZXh0TGluZXMgPSBbXTsKLSAgICAgICAgY3VycmVudFRva2VucyA9IG51bGw7Ci0gICAgICAg
IGN1cnJlbnRTY29wZXMgPSBudWxsOwotICAgICAgICBzY29wZU1hcCA9IG51bGw7Ci0gICAgICAg
IGNvbnRyb2xsZXIgPSBudWxsOwotICAgICAgICByZXBvcnRpbmdDb25maWcgPSBbXTsKLSAgICAg
ICAgY29tbWVudExvY3NFbnRlciA9IFtdOwotICAgICAgICBjb21tZW50TG9jc0V4aXQgPSBbXTsK
LSAgICB9OwotCi0gICAgLyoqCi0gICAgICogVmVyaWZpZXMgdGhlIHRleHQgYWdhaW5zdCB0aGUg
cnVsZXMgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgYXJndW1lbnQuCi0gICAgICogQHBhcmFtIHtz
dHJpbmd9IHRleHQgVGhlIEphdmFTY3JpcHQgdGV4dCB0byB2ZXJpZnkuCi0gICAgICogQHBhcmFt
IHtPYmplY3R9IGNvbmZpZyBBbiBvYmplY3Qgd2hvc2Uga2V5cyBzcGVjaWZ5IHRoZSBydWxlcyB0
byB1c2UuCi0gICAgICogQHBhcmFtIHtzdHJpbmc9fSBmaWxlbmFtZSBUaGUgb3B0aW9uYWwgZmls
ZW5hbWUgb2YgdGhlIGZpbGUgYmVpbmcgY2hlY2tlZC4KLSAgICAgKiAgICAgIElmIHRoaXMgaXMg
bm90IHNldCwgdGhlIGZpbGVuYW1lIHdpbGwgZGVmYXVsdCB0byAnPGlucHV0PicgaW4gdGhlIHJ1
bGUgY29udGV4dC4KLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBzYXZlU3RhdGUgSW5kaWNhdGVz
IGlmIHRoZSBzdGF0ZSBmcm9tIHRoZSBsYXN0IHJ1biBzaG91bGQgYmUgc2F2ZWQuCi0gICAgICog
ICAgICBNb3N0bHkgdXNlZnVsIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgotICAgICAqIEByZXR1cm5z
IHtPYmplY3RbXX0gVGhlIHJlc3VsdHMgYXMgYW4gYXJyYXkgb2YgbWVzc2FnZXMgb3IgbnVsbCBp
ZiBubyBtZXNzYWdlcy4KLSAgICAgKi8KLSAgICBhcGkudmVyaWZ5ID0gZnVuY3Rpb24odGV4dCwg
Y29uZmlnLCBmaWxlbmFtZSwgc2F2ZVN0YXRlKSB7Ci0KLSAgICAgICAgdmFyIGFzdDsKLQotICAg
ICAgICAvLyBzZXQgdGhlIGN1cnJlbnQgcGFyc2VkIGZpbGVuYW1lCi0gICAgICAgIGN1cnJlbnRG
aWxlbmFtZSA9IGZpbGVuYW1lOwotCi0gICAgICAgIGlmICghc2F2ZVN0YXRlKSB7Ci0gICAgICAg
ICAgICB0aGlzLnJlc2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBhc3QgPSBwYXJzZSh0ZXh0
LnJlcGxhY2UoL14jIShbXlxyXG5dK1tcclxuXSspLywgIi8vJDEiKSk7Ci0KLSAgICAgICAgLy8g
aWYgRXNwcmltYSBmYWlsZWQgdG8gcGFyc2UgdGhlIGZpbGUsIHRoZXJlJ3Mgbm8gc2Vuc2UgaW4g
c2V0dGluZyB1cCBydWxlcwotICAgICAgICBpZiAoYXN0KSB7Ci0gICAgICAgICAgICAvLyBwcm9j
ZXNzIGluaXRpYWwgY29uZmlnIHRvIG1ha2UgaXQgc2FmZSB0byBleHRlbmQKLSAgICAgICAgICAg
IGNvbmZpZyA9IHByZXBhcmVDb25maWcoY29uZmlnKTsKLQotICAgICAgICAgICAgLy8gcGFyc2Ug
Z2xvYmFsIGNvbW1lbnRzIGFuZCBtb2RpZnkgY29uZmlnCi0gICAgICAgICAgICBtb2RpZnlDb25m
aWdzRnJvbUNvbW1lbnRzKGFzdCwgY29uZmlnLCByZXBvcnRpbmdDb25maWcpOwotCi0gICAgICAg
ICAgICAvLyBlbmFibGUgYXBwcm9wcmlhdGUgcnVsZXMKLSAgICAgICAgICAgIE9iamVjdC5rZXlz
KGNvbmZpZy5ydWxlcykuZmlsdGVyKGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBnZXRSdWxlU2V2ZXJpdHkoY29uZmlnLnJ1bGVzW2tleV0pID4gMDsKLSAgICAgICAgICAg
IH0pLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIgcnVsZUNy
ZWF0b3IgPSBydWxlcy5nZXQoa2V5KSwKLSAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHkgPSBn
ZXRSdWxlU2V2ZXJpdHkoY29uZmlnLnJ1bGVzW2tleV0pLAotICAgICAgICAgICAgICAgICAgICBv
cHRpb25zID0gZ2V0UnVsZU9wdGlvbnMoY29uZmlnLnJ1bGVzW2tleV0pLAotICAgICAgICAgICAg
ICAgICAgICBydWxlOwotCi0gICAgICAgICAgICAgICAgaWYgKHJ1bGVDcmVhdG9yKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBydWxlID0gcnVs
ZUNyZWF0b3IobmV3IFJ1bGVDb250ZXh0KGtleSwgYXBpLCBzZXZlcml0eSwgb3B0aW9ucywgY29u
ZmlnLnNldHRpbmdzKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBhbGwgdGhl
IG5vZGUgdHlwZXMgYXMgbGlzdGVuZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qu
a2V5cyhydWxlKS5mb3JFYWNoKGZ1bmN0aW9uKG5vZGVUeXBlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXBpLm9uKG5vZGVUeXBlLCBydWxlW25vZGVUeXBlXSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChleCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZXgubWVzc2FnZSA9ICJFcnJvciB3aGlsZSBsb2FkaW5nIHJ1
bGUgJyIgKyBrZXkgKyAiJzogIiArIGV4Lm1lc3NhZ2U7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0aHJvdyBleDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEZWZpbml0aW9uIGZv
ciBydWxlICciICsga2V5ICsgIicgd2FzIG5vdCBmb3VuZC4iKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgLy8gc2F2ZSBjb25maWcgc28gcnVsZXMg
Y2FuIGFjY2VzcyBhcyBuZWNlc3NhcnkKLSAgICAgICAgICAgIGN1cnJlbnRDb25maWcgPSBjb25m
aWc7Ci0gICAgICAgICAgICBjdXJyZW50VGV4dCA9IHRleHQ7Ci0gICAgICAgICAgICBjb250cm9s
bGVyID0gbmV3IGVzdHJhdmVyc2UuQ29udHJvbGxlcigpOwotCi0gICAgICAgICAgICAvLyBnYXRo
ZXIgZGF0YSB0aGF0IG1heSBiZSBuZWVkZWQgYnkgdGhlIHJ1bGVzCi0gICAgICAgICAgICBjdXJy
ZW50U2NvcGVzID0gZXNjb3BlLmFuYWx5emUoYXN0LCB7IGlnbm9yZUV2YWw6IHRydWUgfSkuc2Nv
cGVzOwotCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogSW5kZXggdGhlIHNjb3BlcyBi
eSB0aGUgc3RhcnQgcmFuZ2Ugb2YgdGhlaXIgYmxvY2sgZm9yIGVmZmljaWVudAotICAgICAgICAg
ICAgICogbG9va3VwIGluIGdldFNjb3BlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBz
Y29wZU1hcCA9IFtdOwotICAgICAgICAgICAgY3VycmVudFNjb3Blcy5mb3JFYWNoKGZ1bmN0aW9u
IChzY29wZSwgaW5kZXgpIHsKLSAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzY29wZS5ibG9j
ay5yYW5nZVswXTsKLQotICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyB0d28gc2NvcGVzIGFy
ZSByZXR1cm5lZCBmb3IgYSBnaXZlbiBub2RlLiBUaGlzIGlzCi0gICAgICAgICAgICAgICAgLy8g
aGFuZGxlZCBsYXRlciBpbiBhIGtub3duIHdheSwgc28ganVzdCBkb24ndCBvdmVyd3JpdGUgaGVy
ZS4KLSAgICAgICAgICAgICAgICBpZiAoIXNjb3BlTWFwW3JhbmdlXSkgewotICAgICAgICAgICAg
ICAgICAgICBzY29wZU1hcFtyYW5nZV0gPSBpbmRleDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9KTsKLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFNwbGl0IHRleHQg
aGVyZSBpbnRvIGFycmF5IG9mIGxpbmVzIHNvCi0gICAgICAgICAgICAgKiBpdCdzIG5vdCBiZWlu
ZyBkb25lIHJlcGVhdGVkbHkKLSAgICAgICAgICAgICAqIGJ5IGluZGl2aWR1YWwgcnVsZXMuCi0g
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGN1cnJlbnRUZXh0TGluZXMgPSBjdXJyZW50VGV4
dC5zcGxpdCgvXHI/XG4vZyk7Ci0KLSAgICAgICAgICAgIC8vIEZyZWV6aW5nIHNvIGFycmF5IGlz
bid0IGFjY2lkZW50YWxseSBjaGFuZ2VkIGJ5IGEgcnVsZS4KLSAgICAgICAgICAgIE9iamVjdC5m
cmVlemUoY3VycmVudFRleHRMaW5lcyk7Ci0KLSAgICAgICAgICAgIC8qIGdldCBhbGwgdG9rZW5z
IGZyb20gdGhlIGFzdCBhbmQgc3RvcmUgdGhlbSBhcyBhIGhhc2h0YWJsZSB0bwotICAgICAgICAg
ICAgICogaW1wcm92ZSB0cmF2ZXJzYWwgc3BlZWQgd2hlbiB3YW50aW5nIHRvIGZpbmQgdG9rZW5z
IGZvciBhIGdpdmVuCi0gICAgICAgICAgICAgKiBub2RlCi0gICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIGN1cnJlbnRUb2tlbnMgPSBbXTsKLSAgICAgICAgICAgIGFzdC50b2tlbnMuZm9yRWFj
aChmdW5jdGlvbih0b2tlbikgewotICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbnNbdG9rZW4u
cmFuZ2VbMF1dID0gdG9rZW47Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgLy8gYXVn
bWVudCBnbG9iYWwgc2NvcGUgd2l0aCBkZWNsYXJlZCBnbG9iYWwgdmFyaWFibGVzCi0gICAgICAg
ICAgICBhZGREZWNsYXJlZEdsb2JhbHMoYXN0LCBjdXJyZW50U2NvcGVzWzBdLCBjdXJyZW50Q29u
ZmlnKTsKLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIEVhY2ggbm9kZSBoYXMgYSB0
eXBlIHByb3BlcnR5LiBXaGVuZXZlciBhIHBhcnRpY3VsYXIgdHlwZSBvZiBub2RlIGlzIGZvdW5k
LAotICAgICAgICAgICAgICogYW4gZXZlbnQgaXMgZmlyZWQuIFRoaXMgYWxsb3dzIGFueSBsaXN0
ZW5lcnMgdG8gYXV0b21hdGljYWxseSBiZSBpbmZvcm1lZAotICAgICAgICAgICAgICogdGhhdCB0
aGlzIHR5cGUgb2Ygbm9kZSBoYXMgYmVlbiBmb3VuZCBhbmQgcmVhY3QgYWNjb3JkaW5nbHkuCi0g
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNvbnRyb2xsZXIudHJhdmVyc2UoYXN0LCB7Ci0g
ICAgICAgICAgICAgICAgZW50ZXI6IGZ1bmN0aW9uKG5vZGUsIHBhcmVudCkgewotCi0gICAgICAg
ICAgICAgICAgICAgIHZhciBjb21tZW50cyA9IGFwaS5nZXRDb21tZW50cyhub2RlKTsKLQotICAg
ICAgICAgICAgICAgICAgICBlbWl0Q29tbWVudHNFbnRlcihjb21tZW50cy5sZWFkaW5nKTsKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgICAgICAgICAgICAg
ICAgIGFwaS5lbWl0KG5vZGUudHlwZSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRD
b21tZW50c0VudGVyKGNvbW1lbnRzLnRyYWlsaW5nKTsKLSAgICAgICAgICAgICAgICB9LAotICAg
ICAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGNvbW1lbnRzID0gYXBpLmdldENvbW1lbnRzKG5vZGUpOwotCi0gICAgICAgICAgICAg
ICAgICAgIGVtaXRDb21tZW50c0V4aXQoY29tbWVudHMudHJhaWxpbmcpOwotICAgICAgICAgICAg
ICAgICAgICBhcGkuZW1pdChub2RlLnR5cGUgKyAiOmV4aXQiLCBub2RlKTsKLSAgICAgICAgICAg
ICAgICAgICAgZW1pdENvbW1lbnRzRXhpdChjb21tZW50cy5sZWFkaW5nKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1l
c3NhZ2VzOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBSZXBvcnRzIGEgbWVzc2FnZSBmcm9t
IG9uZSBvZiB0aGUgcnVsZXMuCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHJ1bGVJZCBUaGUgSUQg
b2YgdGhlIHJ1bGUgY2F1c2luZyB0aGUgbWVzc2FnZS4KLSAgICAgKiBAcGFyYW0ge251bWJlcn0g
c2V2ZXJpdHkgVGhlIHNldmVyaXR5IGxldmVsIG9mIHRoZSBydWxlIGFzIGNvbmZpZ3VyZWQuCi0g
ICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0aGF0IHRoZSBtZXNzYWdl
IHJlbGF0ZXMgdG8uCi0gICAgICogQHBhcmFtIHtPYmplY3Q9fSBsb2NhdGlvbiBBbiBvYmplY3Qg
Y29udGFpbmluZyB0aGUgZXJyb3IgbGluZSBhbmQgY29sdW1uCi0gICAgICogICAgICBudW1iZXJz
LiBJZiBsb2NhdGlvbiBpcyBub3QgcHJvdmlkZWQgdGhlIG5vZGUncyBzdGFydCBsb2NhdGlvbiB3
aWxsCi0gICAgICogICAgICBiZSB1c2VkLgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdl
IFRoZSBhY3R1YWwgbWVzc2FnZS4KLSAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25h
bCB0ZW1wbGF0ZSBkYXRhIHdoaWNoIHByb2R1Y2VzIGEgZm9ybWF0dGVkIG1lc3NhZ2UKLSAgICAg
KiAgICAgd2l0aCBzeW1ib2xzIGJlaW5nIHJlcGxhY2VkIGJ5IHRoaXMgb2JqZWN0J3MgdmFsdWVz
LgotICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIGFwaS5yZXBvcnQgPSBmdW5j
dGlvbihydWxlSWQsIHNldmVyaXR5LCBub2RlLCBsb2NhdGlvbiwgbWVzc2FnZSwgb3B0cykgewot
Ci0gICAgICAgIGlmICh0eXBlb2YgbG9jYXRpb24gPT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAg
ICBvcHRzID0gbWVzc2FnZTsKLSAgICAgICAgICAgIG1lc3NhZ2UgPSBsb2NhdGlvbjsKLSAgICAg
ICAgICAgIGxvY2F0aW9uID0gbm9kZS5sb2Muc3RhcnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBP
YmplY3Qua2V5cyhvcHRzIHx8IHt9KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKLSAgICAgICAg
ICAgIHZhciByeCA9IG5ldyBSZWdFeHAoInt7IiArIGVzY2FwZVJlZ0V4cChrZXkpICsgIn19Iiwg
ImciKTsKLSAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UocngsIG9wdHNba2V5
XSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGlmIChpc0Rpc2FibGVkQnlSZXBvcnRpbmdDb25m
aWcocmVwb3J0aW5nQ29uZmlnLCBydWxlSWQsIGxvY2F0aW9uKSkgewotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbWVzc2FnZXMucHVzaCh7Ci0gICAgICAgICAgICBy
dWxlSWQ6IHJ1bGVJZCwKLSAgICAgICAgICAgIHNldmVyaXR5OiBzZXZlcml0eSwKLSAgICAgICAg
ICAgIG5vZGU6IG5vZGUsCi0gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLAotICAgICAgICAg
ICAgbGluZTogbG9jYXRpb24ubGluZSwKLSAgICAgICAgICAgIGNvbHVtbjogbG9jYXRpb24uY29s
dW1uLAotICAgICAgICAgICAgc291cmNlOiBhcGkuZ2V0U291cmNlKG5vZGUpCi0gICAgICAgIH0p
OwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhl
IGdpdmVuIG5vZGUuCi0gICAgICogQHBhcmFtIHtBU1ROb2RlPX0gbm9kZSBUaGUgQVNUIG5vZGUg
dG8gZ2V0IHRoZSB0ZXh0IGZvci4KLSAgICAgKiBAcGFyYW0ge2ludD19IGJlZm9yZUNvdW50IFRo
ZSBudW1iZXIgb2YgY2hhcmFjdGVycyBiZWZvcmUgdGhlIG5vZGUgdG8gcmV0cmlldmUuCi0gICAg
ICogQHBhcmFtIHtpbnQ9fSBhZnRlckNvdW50IFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhZnRl
ciB0aGUgbm9kZSB0byByZXRyaWV2ZS4KLSAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgdGV4
dCByZXByZXNlbnRpbmcgdGhlIEFTVCBub2RlLgotICAgICAqLwotICAgIGFwaS5nZXRTb3VyY2Ug
PSBmdW5jdGlvbihub2RlLCBiZWZvcmVDb3VudCwgYWZ0ZXJDb3VudCkgewotICAgICAgICBpZiAo
bm9kZSkgewotICAgICAgICAgICAgcmV0dXJuIChjdXJyZW50VGV4dCAhPT0gbnVsbCkgPyBjdXJy
ZW50VGV4dC5zbGljZShub2RlLnJhbmdlWzBdIC0gKGJlZm9yZUNvdW50IHx8IDApLAotICAgICAg
ICAgICAgICAgIG5vZGUucmFuZ2VbMV0gKyAoYWZ0ZXJDb3VudCB8fCAwKSkgOiBudWxsOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0OwotICAgICAgICB9
Ci0KLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgZW50aXJlIHNvdXJjZSB0ZXh0
IHNwbGl0IGludG8gYW4gYXJyYXkgb2YgbGluZXMuCi0gICAgICogQHJldHVybnMge0FycmF5fSBU
aGUgc291cmNlIHRleHQgYXMgYW4gYXJyYXkgb2YgbGluZXMuCi0gICAgICovCi0gICAgYXBpLmdl
dFNvdXJjZUxpbmVzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50VGV4dExp
bmVzOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIGFsbCBjb21tZW50cyBmb3IgdGhl
IGdpdmVuIG5vZGUuCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0
byBnZXQgdGhlIGNvbW1lbnRzIGZvci4KLSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgbGlz
dCBvZiBjb21tZW50cyBpbmRleGVkIGJ5IHRoZWlyIHBvc2l0aW9uLgotICAgICAqLwotICAgIGFw
aS5nZXRDb21tZW50cyA9IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICB2YXIgbGVhZGluZ0Nv
bW1lbnRzID0gbm9kZS5sZWFkaW5nQ29tbWVudHMgfHwgW10sCi0gICAgICAgICAgICB0cmFpbGlu
Z0NvbW1lbnRzID0gbm9kZS50cmFpbGluZ0NvbW1lbnRzIHx8IFtdOwotCi0gICAgICAgIC8qCi0g
ICAgICAgICAqIEVzcHJpbWEgYWRkcyBhICJjb21tZW50cyIgYXJyYXkgb24gUHJvZ3JhbSBub2Rl
cyByYXRoZXIgdGhhbgotICAgICAgICAgKiBsZWFkaW5nQ29tbWVudHMvdHJhaWxpbmdDb21tZW50
cy4gQ29tbWVudHMgYXJlIG9ubHkgbGVmdCBpbiB0aGUKLSAgICAgICAgICogUHJvZ3JhbSBub2Rl
IGNvbW1lbnRzIGFycmF5IGlmIHRoZXJlIGlzIG5vIGV4ZWN1dGFibGUgY29kZS4KLSAgICAgICAg
ICovCi0gICAgICAgIGlmIChub2RlLnR5cGUgPT09ICJQcm9ncmFtIikgewotICAgICAgICAgICAg
aWYgKG5vZGUuYm9keS5sZW5ndGggPT09IDApIHsKLSAgICAgICAgICAgICAgICBsZWFkaW5nQ29t
bWVudHMgPSBub2RlLmNvbW1lbnRzOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIHsKLSAgICAgICAgICAgIGxlYWRpbmc6IGxlYWRpbmdDb21tZW50cywKLSAgICAg
ICAgICAgIHRyYWlsaW5nOiB0cmFpbGluZ0NvbW1lbnRzCi0gICAgICAgIH07Ci0gICAgfTsKLQot
ICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgSlNEb2MgY29tbWVudCBmb3IgYSBnaXZlbiBu
b2RlLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gZ2V0IHRo
ZSBjb21tZW50IGZvci4KLSAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gVGhlIEJsb2NrQ29tbWVu
dCBub2RlIGNvbnRhaW5pbmcgdGhlIEpTRG9jIGZvciB0aGUKLSAgICAgKiAgICAgIGdpdmVuIG5v
ZGUgb3IgbnVsbCBpZiBub3QgZm91bmQuCi0gICAgICovCi0gICAgYXBpLmdldEpTRG9jQ29tbWVu
dCA9IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQs
Ci0gICAgICAgICAgICBsaW5lID0gbm9kZS5sb2Muc3RhcnQubGluZTsKLQotICAgICAgICAvKioK
LSAgICAgICAgICogRmluZHMgYSBKU0RvYyBjb21tZW50IG5vZGUgaW4gYW4gYXJyYXkgb2YgY29t
bWVudCBub2Rlcy4KLSAgICAgICAgICogQHBhcmFtIHtBU1ROb2RlW119IGNvbW1lbnRzIFRoZSBh
cnJheSBvZiBjb21tZW50IG5vZGVzIHRvIHNlYXJjaC4KLSAgICAgICAgICogQHJldHVybnMge0FT
VE5vZGV9IFRoZSBub2RlIGlmIGZvdW5kLCBudWxsIGlmIG5vdC4KLSAgICAgICAgICogQHByaXZh
dGUKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGZpbmRKU0RvY0NvbW1lbnQoY29tbWVu
dHMpIHsKLQotICAgICAgICAgICAgaWYgKGNvbW1lbnRzKSB7Ci0gICAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IGNvbW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChjb21tZW50c1tpXS50eXBlID09PSAiQmxvY2siICYmIGNvbW1lbnRzW2ld
LnZhbHVlLmNoYXJBdCgwKSA9PT0gIioiKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChsaW5lIC0gY29tbWVudHNbaV0ubG9jLmVuZC5saW5lIDw9IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY29tbWVudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlICJGdW5jdGlv
bkRlY2xhcmF0aW9uIjoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmluZEpTRG9jQ29tbWVudChu
b2RlLmxlYWRpbmdDb21tZW50cyk7Ci0KLSAgICAgICAgICAgIGNhc2UgIkZ1bmN0aW9uRXhwcmVz
c2lvbiI6Ci0KLSAgICAgICAgICAgICAgICBpZiAocGFyZW50LnR5cGUgIT09ICJDYWxsRXhwcmVz
c2lvbiIgfHwgcGFyZW50LmNhbGxlZSAhPT0gbm9kZSkgewotICAgICAgICAgICAgICAgICAgICB3
aGlsZSAocGFyZW50ICYmICFwYXJlbnQubGVhZGluZ0NvbW1lbnRzICYmIHBhcmVudC50eXBlICE9
PSAiRnVuY3Rpb25FeHByZXNzaW9uIiAmJiBwYXJlbnQudHlwZSAhPT0gIkZ1bmN0aW9uRGVjbGFy
YXRpb24iKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBh
cmVudCAmJiAocGFyZW50LnR5cGUgIT09ICJGdW5jdGlvbkRlY2xhcmF0aW9uIikgPyBmaW5kSlNE
b2NDb21tZW50KHBhcmVudC5sZWFkaW5nQ29tbWVudHMpIDogbnVsbDsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBmYWxscyB0aHJvdWdoCi0KLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgLyoqCi0gICAgICogR2V0cyBhIG51bWJlciBvZiB0b2tlbnMgdGhhdCBwcmVjZWRlIGEg
Z2l2ZW4gbm9kZSdzIHRva2VucyBpbiB0aGUgdG9rZW4gc3RyZWFtLgotICAgICAqIEBwYXJhbSB7
QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCi0gICAgICogQHBhcmFtIHtpbnR9IFtiZWZvcmVD
b3VudD0wXSBUaGUgbnVtYmVyIG9mIHRva2VucyBiZWZvcmUgdGhlIG5vZGUgdG8gcmV0cmlldmUu
Ci0gICAgICogQHJldHVybnMge1tUb2tlbl19IEFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5n
IHRva2Vucy4KLSAgICAgKi8KLSAgICBhcGkuZ2V0VG9rZW5zQmVmb3JlID0gZnVuY3Rpb24obm9k
ZSwgYmVmb3JlQ291bnQpIHsKLSAgICAgICAgdmFyIGJlZm9yZVRva2VucyA9IFtdLCBjdXJzb3Ig
PSBub2RlLnJhbmdlWzBdIC0gMTsKLSAgICAgICAgd2hpbGUgKGJlZm9yZUNvdW50ID4gMCAmJiBj
dXJzb3IgPj0gMCkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSkgewot
ICAgICAgICAgICAgICAgIGJlZm9yZVRva2Vucy51bnNoaWZ0KGN1cnJlbnRUb2tlbnNbY3Vyc29y
XSk7Ci0gICAgICAgICAgICAgICAgLS1iZWZvcmVDb3VudDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIC0tY3Vyc29yOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBiZWZvcmVUb2tlbnM7
Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHRva2VuIHRoYXQgcHJlY2VkZXMg
YSBnaXZlbiBub2RlJ3MgdG9rZW5zIGluIHRoZSB0b2tlbiBzdHJlYW0uCi0gICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KLSAgICAgKiBAcGFyYW0ge2ludH0gW3NraXA9
MF0gQSBudW1iZXIgb2YgdG9rZW5zIHRvIHNraXAgYmVmb3JlIHRoZSBnaXZlbiBub2RlLgotICAg
ICAqIEByZXR1cm5zIHtUb2tlbn0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdG9rZW4uCi0g
ICAgICovCi0gICAgYXBpLmdldFRva2VuQmVmb3JlID0gZnVuY3Rpb24obm9kZSwgc2tpcCkgewot
ICAgICAgICBmb3IgKHZhciBjdXJzb3IgPSBub2RlLnJhbmdlWzBdIC0gMTsgY3Vyc29yID49IDA7
IC0tY3Vyc29yKSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHNraXAgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC0tc2tp
cDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y3VycmVudFRva2Vuc1tjdXJzb3JdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIGEgbnVtYmVyIG9mIHRv
a2VucyB0aGF0IHByZWNlZGUgYSBnaXZlbiBub2RlJ3MgdG9rZW5zIGluIHRoZSB0b2tlbiBzdHJl
YW0uCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KLSAgICAgKiBA
cGFyYW0ge2ludH0gW2FmdGVyQ291bnQ9MF0gVGhlIG51bWJlciBvZiB0b2tlbnMgYWZ0ZXIgdGhl
IG5vZGUgdG8gcmV0cmlldmUuCi0gICAgICogQHJldHVybnMge1tUb2tlbl19IEFycmF5IG9mIG9i
amVjdHMgcmVwcmVzZW50aW5nIHRva2Vucy4KLSAgICAgKi8KLSAgICBhcGkuZ2V0VG9rZW5zQWZ0
ZXIgPSBmdW5jdGlvbihub2RlLCBhZnRlckNvdW50KSB7Ci0gICAgICAgIHZhciBhZnRlclRva2Vu
cyA9IFtdLCBjdXJzb3IgPSBub2RlLnJhbmdlWzFdOwotICAgICAgICB3aGlsZSAoYWZ0ZXJDb3Vu
dCA+IDAgJiYgY3Vyc29yIDwgY3VycmVudFRva2Vucy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGlm
IChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsKLSAgICAgICAgICAgICAgICBhZnRlclRva2Vucy5w
dXNoKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSk7Ci0gICAgICAgICAgICAgICAgLS1hZnRlckNvdW50
OwotICAgICAgICAgICAgICAgIGN1cnNvciA9IGN1cnJlbnRUb2tlbnNbY3Vyc29yXS5yYW5nZVsx
XTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFmdGVyVG9rZW5zOwotICAgIH07
Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSB0b2tlbiB0aGF0IGZvbGxvd3MgYSBnaXZlbiBu
b2RlJ3MgdG9rZW5zIGluIHRoZSB0b2tlbiBzdHJlYW0uCi0gICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBub2RlIFRoZSBBU1Qgbm9kZS4KLSAgICAgKiBAcGFyYW0ge2ludH0gW3NraXA9MF0gQSBudW1i
ZXIgb2YgdG9rZW5zIHRvIHNraXAgYWZ0ZXIgdGhlIGdpdmVuIG5vZGUuCi0gICAgICogQHJldHVy
bnMge1Rva2VufSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0b2tlbi4KLSAgICAgKi8KLSAg
ICBhcGkuZ2V0VG9rZW5BZnRlciA9IGZ1bmN0aW9uKG5vZGUsIHNraXApIHsKLSAgICAgICAgZm9y
ICh2YXIgY3Vyc29yID0gbm9kZS5yYW5nZVsxXTsgY3Vyc29yIDwgY3VycmVudFRva2Vucy5sZW5n
dGg7ICsrY3Vyc29yKSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHNraXAgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC0t
c2tpcDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY3VycmVudFRva2Vuc1tjdXJzb3JdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIGFsbCB0b2tlbnMg
dGhhdCBhcmUgcmVsYXRlZCB0byB0aGUgZ2l2ZW4gbm9kZS4KLSAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IG5vZGUgVGhlIEFTVCBub2RlLgotICAgICAqIEBwYXJhbSB7aW50fSBbYmVmb3JlQ291bnQ9
MF0gVGhlIG51bWJlciBvZiB0b2tlbnMgYmVmb3JlIHRoZSBub2RlIHRvIHJldHJpZXZlLgotICAg
ICAqIEBwYXJhbSB7aW50fSBbYWZ0ZXJDb3VudD0wXSBUaGUgbnVtYmVyIG9mIHRva2VucyBhZnRl
ciB0aGUgbm9kZSB0byByZXRyaWV2ZS4KLSAgICAgKiBAcmV0dXJucyB7W1Rva2VuXX0gQXJyYXkg
b2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdG9rZW5zLgotICAgICAqLwotICAgIGFwaS5nZXRUb2tl
bnMgPSBmdW5jdGlvbihub2RlLCBiZWZvcmVDb3VudCwgYWZ0ZXJDb3VudCkgewotICAgICAgICB2
YXIgYmVmb3JlVG9rZW5zID0gYXBpLmdldFRva2Vuc0JlZm9yZShub2RlLCBiZWZvcmVDb3VudCks
Ci0gICAgICAgICAgICBhZnRlclRva2VucyA9IGFwaS5nZXRUb2tlbnNBZnRlcihub2RlLCBhZnRl
ckNvdW50KSwKLSAgICAgICAgICAgIHRva2VucyA9IFtdLAotICAgICAgICAgICAgY3Vyc29yID0g
bm9kZS5yYW5nZVswXTsKLSAgICAgICAgd2hpbGUgKGN1cnNvciA8IG5vZGUucmFuZ2VbMV0pIHsK
LSAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsKLSAgICAgICAgICAgICAg
ICB0b2tlbnMucHVzaChjdXJyZW50VG9rZW5zW2N1cnNvcl0pOwotICAgICAgICAgICAgICAgIGN1
cnNvciA9IGN1cnJlbnRUb2tlbnNbY3Vyc29yXS5yYW5nZVsxXTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGJlZm9yZVRva2Vucy5jb25jYXQodG9rZW5zLCBhZnRlclRva2Vucyk7
Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGZpcnN0IGBjb3VudGAgdG9rZW5z
IG9mIHRoZSBnaXZlbiBub2RlJ3MgdG9rZW4gc3RyZWFtLgotICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSBUaGUgQVNUIG5vZGUuCi0gICAgICogQHBhcmFtIHtpbnR9IFtjb3VudD0wXSBUaGUg
bnVtYmVyIG9mIHRva2VucyBvZiB0aGUgbm9kZSB0byByZXRyaWV2ZS4KLSAgICAgKiBAcmV0dXJu
cyB7W1Rva2VuXX0gQXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdG9rZW5zLgotICAgICAq
LwotICAgIGFwaS5nZXRGaXJzdFRva2VucyA9IGZ1bmN0aW9uKG5vZGUsIGNvdW50KSB7Ci0gICAg
ICAgIHZhciB0b2tlbnMgPSBbXSwgY3Vyc29yID0gbm9kZS5yYW5nZVswXTsKLSAgICAgICAgd2hp
bGUgKGNvdW50ID4gMCAmJiBjdXJzb3IgPCBub2RlLnJhbmdlWzFdKSB7Ci0gICAgICAgICAgICBp
ZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2go
Y3VycmVudFRva2Vuc1tjdXJzb3JdKTsKLSAgICAgICAgICAgICAgICAtLWNvdW50OwotICAgICAg
ICAgICAgICAgIGN1cnNvciA9IGN1cnJlbnRUb2tlbnNbY3Vyc29yXS5yYW5nZVsxXTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgKytjdXJzb3I7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRva2VuczsKLSAgICB9OwotCi0gICAgLyoqCi0g
ICAgICogR2V0cyB0aGUgZmlyc3QgdG9rZW4gb2YgdGhlIGdpdmVuIG5vZGUncyB0b2tlbiBzdHJl
YW0uCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KLSAgICAgKiBA
cGFyYW0ge2ludH0gW3NraXA9MF0gQSBudW1iZXIgb2YgdG9rZW5zIHRvIHNraXAuCi0gICAgICog
QHJldHVybnMge1Rva2VufSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0b2tlbi4KLSAgICAg
Ki8KLSAgICBhcGkuZ2V0Rmlyc3RUb2tlbiA9IGZ1bmN0aW9uKG5vZGUsIHNraXApIHsKLSAgICAg
ICAgZm9yICh2YXIgY3Vyc29yID0gbm9kZS5yYW5nZVswXTsgY3Vyc29yIDwgbm9kZS5yYW5nZVsx
XTsgKytjdXJzb3IpIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsK
LSAgICAgICAgICAgICAgICBpZiAoc2tpcCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLS1z
a2lwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBjdXJyZW50VG9rZW5zW2N1cnNvcl07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGxhc3QgYGNv
dW50YCB0b2tlbnMgb2YgdGhlIGdpdmVuIG5vZGUuCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIFRoZSBBU1Qgbm9kZS4KLSAgICAgKiBAcGFyYW0ge2ludH0gW2NvdW50PTBdIFRoZSBudW1i
ZXIgb2YgdG9rZW5zIG9mIHRoZSBub2RlIHRvIHJldHJpZXZlLgotICAgICAqIEByZXR1cm5zIHtb
VG9rZW5dfSBBcnJheSBvZiBvYmplY3RzIHJlcHJlc2VudGluZyB0b2tlbnMuCi0gICAgICovCi0g
ICAgYXBpLmdldExhc3RUb2tlbnMgPSBmdW5jdGlvbihub2RlLCBjb3VudCkgewotICAgICAgICB2
YXIgdG9rZW5zID0gW10sIGN1cnNvciA9IG5vZGUucmFuZ2VbMV0gLSAxOwotICAgICAgICB3aGls
ZSAoY291bnQgPiAwICYmIGN1cnNvciA+PSBub2RlLnJhbmdlWzBdKSB7Ci0gICAgICAgICAgICBp
ZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW5zLnVuc2hp
ZnQoY3VycmVudFRva2Vuc1tjdXJzb3JdKTsKLSAgICAgICAgICAgICAgICAtLWNvdW50OwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgLS1jdXJzb3I7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRva2VuczsKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgbGFzdCB0b2tl
biBvZiB0aGUgZ2l2ZW4gbm9kZSdzIHRva2VuIHN0cmVhbS4KLSAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IG5vZGUgVGhlIEFTVCBub2RlLgotICAgICAqIEBwYXJhbSB7aW50fSBbc2tpcD0wXSBBIG51
bWJlciBvZiB0b2tlbnMgdG8gc2tpcC4KLSAgICAgKiBAcmV0dXJucyB7VG9rZW59IEFuIG9iamVj
dCByZXByZXNlbnRpbmcgdGhlIHRva2VuLgotICAgICAqLwotICAgIGFwaS5nZXRMYXN0VG9rZW4g
PSBmdW5jdGlvbihub2RlLCBza2lwKSB7Ci0gICAgICAgIGZvciAodmFyIGN1cnNvciA9IG5vZGUu
cmFuZ2VbMV0gLSAxOyBjdXJzb3IgPj0gbm9kZS5yYW5nZVswXTsgLS1jdXJzb3IpIHsKLSAgICAg
ICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsKLSAgICAgICAgICAgICAgICBpZiAo
c2tpcCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLS1za2lwOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50VG9rZW5zW2N1cnNv
cl07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIC8qKgotICAgICAqIEdldHMgbm9kZXMgdGhhdCBhcmUgYW5jZXN0b3JzIG9mIGN1cnJl
bnQgbm9kZS4KLSAgICAgKiBAcmV0dXJucyB7QVNUTm9kZVtdfSBBcnJheSBvZiBvYmplY3RzIHJl
cHJlc2VudGluZyBhbmNlc3RvcnMuCi0gICAgICovCi0gICAgYXBpLmdldEFuY2VzdG9ycyA9IGZ1
bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gY29udHJvbGxlci5wYXJlbnRzKCk7Ci0gICAgfTsK
LQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgc2NvcGUgZm9yIHRoZSBjdXJyZW50IG5vZGUu
Ci0gICAgICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY3Vy
cmVudCBub2RlJ3Mgc2NvcGUuCi0gICAgICovCi0gICAgYXBpLmdldFNjb3BlID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHZhciBwYXJlbnRzID0gY29udHJvbGxlci5wYXJlbnRzKCksCi0gICAgICAg
ICAgICBpbm5lckJsb2NrID0gbnVsbCwKLSAgICAgICAgICAgIHNlbGVjdGVkU2NvcGVJbmRleDsK
LQotICAgICAgICAvLyBEb24ndCBkbyB0aGlzIGZvciBQcm9ncmFtIG5vZGVzIC0gdGhleSBoYXZl
IG5vIHBhcmVudHMKLSAgICAgICAgaWYgKHBhcmVudHMubGVuZ3RoKSB7Ci0KLSAgICAgICAgICAg
IC8vIGlmIGN1cnJlbnQgbm9kZSBpcyBmdW5jdGlvbiBkZWNsYXJhdGlvbiwgYWRkIGl0IHRvIHRo
ZSBsaXN0Ci0gICAgICAgICAgICB2YXIgY3VycmVudCA9IGNvbnRyb2xsZXIuY3VycmVudCgpOwot
ICAgICAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRGVjbGFyYXRpb24iIHx8
IGN1cnJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIpIHsKLSAgICAgICAgICAgICAg
ICBwYXJlbnRzLnB1c2goY3VycmVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IEFzY2VuZCB0aGUgY3VycmVudCBub2RlJ3MgcGFyZW50cwotICAgICAgICAgICAgZm9yICh2YXIg
aSA9IHBhcmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLQotICAgICAgICAgICAgICAg
IC8vIFRoZSBmaXJzdCBub2RlIHRoYXQgcmVxdWlyZXMgYSBzY29wZSBpcyB0aGUgbm9kZSB0aGF0
IHdpbGwgYmUKLSAgICAgICAgICAgICAgICAvLyBvdXIgY3VycmVudCBub2RlJ3MgaW5uZXJtb3N0
IHNjb3BlLgotICAgICAgICAgICAgICAgIGlmIChlc2NvcGUuU2NvcGUuaXNTY29wZVJlcXVpcmVk
KHBhcmVudHNbaV0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlubmVyQmxvY2sgPSBwYXJlbnRz
W2ldOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEZpbmQgYW5kIHJldHVybiB0aGUgaW5uZXJtb3N0
IHNjb3BlCi0gICAgICAgICAgICBzZWxlY3RlZFNjb3BlSW5kZXggPSBzY29wZU1hcFtpbm5lckJs
b2NrLnJhbmdlWzBdXTsKLQotICAgICAgICAgICAgLy8gTmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lv
bnMgY3JlYXRlIHR3byBuZXN0ZWQgc2NvcGUgb2JqZWN0cy4gVGhlCi0gICAgICAgICAgICAvLyBv
dXRlciBzY29wZSBjb250YWlucyBvbmx5IHRoZSBmdW5jdGlvbiBleHByZXNzaW9uIG5hbWUuIFdl
IHJldHVybgotICAgICAgICAgICAgLy8gdGhlIGlubmVyIHNjb3BlLgotICAgICAgICAgICAgaWYg
KGlubmVyQmxvY2sudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIgJiYgaW5uZXJCbG9jay5p
ZCAmJiBpbm5lckJsb2NrLmlkLm5hbWUpIHsKLSAgICAgICAgICAgICAgICArK3NlbGVjdGVkU2Nv
cGVJbmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTY29w
ZXNbc2VsZWN0ZWRTY29wZUluZGV4XTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJl
dHVybiBjdXJyZW50U2NvcGVzWzBdOyAgICAvLyBnbG9iYWwgc2NvcGUKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBmaWxlbmFtZSBmb3IgdGhlIGN1cnJlbnRs
eSBwYXJzZWQgc291cmNlLgotICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmaWxlbmFtZSBh
c3NvY2lhdGVkIHdpdGggdGhlIHNvdXJjZSBiZWluZyBwYXJzZWQuCi0gICAgICogICAgIERlZmF1
bHRzIHRvICI8aW5wdXQ+IiBpZiBubyBmaWxlbmFtZSBpbmZvIGlzIHByZXNlbnQuCi0gICAgICov
Ci0gICAgYXBpLmdldEZpbGVuYW1lID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh0eXBlb2Yg
Y3VycmVudEZpbGVuYW1lID09PSAic3RyaW5nIikgewotICAgICAgICAgICAgcmV0dXJuIGN1cnJl
bnRGaWxlbmFtZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiAiPGlucHV0
PiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogRGVmaW5lcyBhIG5ldyBs
aW50aW5nIHJ1bGUuCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHJ1bGVJZCBBIHVuaXF1ZSBydWxl
IGlkZW50aWZpZXIKLSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBydWxlTW9kdWxlIEZ1bmN0aW9u
IGZyb20gY29udGV4dCB0byBvYmplY3QgbWFwcGluZyBBU1Qgbm9kZSB0eXBlcyB0byBldmVudCBo
YW5kbGVycwotICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIHZhciBkZWZpbmVS
dWxlID0gYXBpLmRlZmluZVJ1bGUgPSBmdW5jdGlvbihydWxlSWQsIHJ1bGVNb2R1bGUpIHsKLSAg
ICAgICAgcnVsZXMuZGVmaW5lKHJ1bGVJZCwgcnVsZU1vZHVsZSk7Ci0gICAgfTsKLQotICAgIC8q
KgotICAgICAqIERlZmluZXMgbWFueSBuZXcgbGludGluZyBydWxlcy4KLSAgICAgKiBAcGFyYW0g
e29iamVjdH0gcnVsZXMgbWFwIGZyb20gdW5pcXVlIHJ1bGUgaWRlbnRpZmllciB0byBydWxlCi0g
ICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAgYXBpLmRlZmluZVJ1bGVzID0gZnVu
Y3Rpb24ocnVsZXMpIHsKLSAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocnVsZXMp
LmZvckVhY2goZnVuY3Rpb24ocnVsZUlkKSB7Ci0gICAgICAgICAgICBkZWZpbmVSdWxlKHJ1bGVJ
ZCwgcnVsZXNbcnVsZUlkXSk7Ci0gICAgICAgIH0pOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAg
KiBHZXRzIHRoZSBkZWZhdWx0IGVzbGludCBjb25maWd1cmF0aW9uLgotICAgICAqIEByZXR1cm5z
IHtPYmplY3R9IE9iamVjdCBtYXBwaW5nIHJ1bGUgSURzIHRvIHRoZWlyIGRlZmF1bHQgY29uZmln
dXJhdGlvbnMKLSAgICAgKi8KLSAgICBhcGkuZGVmYXVsdHMgPSBmdW5jdGlvbigpIHsKLSAgICAg
ICAgcmV0dXJuIHJlcXVpcmUoIi4uL2NvbmYvZXNsaW50Lmpzb24iKTsKLSAgICB9OwotCi0gICAg
cmV0dXJuIGFwaTsKLQotfSgpKTsKLQotfSx7Ii4uL2NvbmYvZW52aXJvbm1lbnRzLmpzb24iOjEs
Ii4uL2NvbmYvZXNsaW50Lmpzb24iOjIsIi4vcnVsZS1jb250ZXh0IjoxMSwiLi9ydWxlcyI6MTIs
Ii4vdXRpbCI6MTUwLCJlc2NvcGUiOjUsImVzcHJpbWEiOjYsImVzdHJhdmVyc2UiOjcsImV2ZW50
cyI6Mywib2JqZWN0LWFzc2lnbiI6OH1dLDEwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJ1bGVzID0gT2Jq
ZWN0LmNyZWF0ZShudWxsKTsKLSAgICBydWxlc1siYmxvY2stc2NvcGVkLXZhciJdID0gcmVxdWly
ZSgiLi9ydWxlcy9ibG9jay1zY29wZWQtdmFyIik7Ci0gICAgcnVsZXNbImJyYWNlLXN0eWxlIl0g
PSByZXF1aXJlKCIuL3J1bGVzL2JyYWNlLXN0eWxlIik7Ci0gICAgcnVsZXNbImNhbWVsY2FzZSJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9jYW1lbGNhc2UiKTsKLSAgICBydWxlc1siY29tbWEtc3BhY2lu
ZyJdID0gcmVxdWlyZSgiLi9ydWxlcy9jb21tYS1zcGFjaW5nIik7Ci0gICAgcnVsZXNbImNvbW1h
LXN0eWxlIl0gPSByZXF1aXJlKCIuL3J1bGVzL2NvbW1hLXN0eWxlIik7Ci0gICAgcnVsZXNbImNv
bXBsZXhpdHkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvY29tcGxleGl0eSIpOwotICAgIHJ1bGVzWyJj
b25zaXN0ZW50LXJldHVybiJdID0gcmVxdWlyZSgiLi9ydWxlcy9jb25zaXN0ZW50LXJldHVybiIp
OwotICAgIHJ1bGVzWyJjb25zaXN0ZW50LXRoaXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvY29uc2lz
dGVudC10aGlzIik7Ci0gICAgcnVsZXNbImN1cmx5Il0gPSByZXF1aXJlKCIuL3J1bGVzL2N1cmx5
Iik7Ci0gICAgcnVsZXNbImRlZmF1bHQtY2FzZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9kZWZhdWx0
LWNhc2UiKTsKLSAgICBydWxlc1siZG90LW5vdGF0aW9uIl0gPSByZXF1aXJlKCIuL3J1bGVzL2Rv
dC1ub3RhdGlvbiIpOwotICAgIHJ1bGVzWyJlb2wtbGFzdCJdID0gcmVxdWlyZSgiLi9ydWxlcy9l
b2wtbGFzdCIpOwotICAgIHJ1bGVzWyJlcWVxZXEiXSA9IHJlcXVpcmUoIi4vcnVsZXMvZXFlcWVx
Iik7Ci0gICAgcnVsZXNbImZ1bmMtbmFtZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvZnVuYy1uYW1l
cyIpOwotICAgIHJ1bGVzWyJmdW5jLXN0eWxlIl0gPSByZXF1aXJlKCIuL3J1bGVzL2Z1bmMtc3R5
bGUiKTsKLSAgICBydWxlc1siZ2xvYmFsLXN0cmljdCJdID0gcmVxdWlyZSgiLi9ydWxlcy9nbG9i
YWwtc3RyaWN0Iik7Ci0gICAgcnVsZXNbImd1YXJkLWZvci1pbiJdID0gcmVxdWlyZSgiLi9ydWxl
cy9ndWFyZC1mb3ItaW4iKTsKLSAgICBydWxlc1siaGFuZGxlLWNhbGxiYWNrLWVyciJdID0gcmVx
dWlyZSgiLi9ydWxlcy9oYW5kbGUtY2FsbGJhY2stZXJyIik7Ci0gICAgcnVsZXNbImtleS1zcGFj
aW5nIl0gPSByZXF1aXJlKCIuL3J1bGVzL2tleS1zcGFjaW5nIik7Ci0gICAgcnVsZXNbIm1heC1k
ZXB0aCJdID0gcmVxdWlyZSgiLi9ydWxlcy9tYXgtZGVwdGgiKTsKLSAgICBydWxlc1sibWF4LWxl
biJdID0gcmVxdWlyZSgiLi9ydWxlcy9tYXgtbGVuIik7Ci0gICAgcnVsZXNbIm1heC1uZXN0ZWQt
Y2FsbGJhY2tzIl0gPSByZXF1aXJlKCIuL3J1bGVzL21heC1uZXN0ZWQtY2FsbGJhY2tzIik7Ci0g
ICAgcnVsZXNbIm1heC1wYXJhbXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbWF4LXBhcmFtcyIpOwot
ICAgIHJ1bGVzWyJtYXgtc3RhdGVtZW50cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9tYXgtc3RhdGVt
ZW50cyIpOwotICAgIHJ1bGVzWyJuZXctY2FwIl0gPSByZXF1aXJlKCIuL3J1bGVzL25ldy1jYXAi
KTsKLSAgICBydWxlc1sibmV3LXBhcmVucyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uZXctcGFyZW5z
Iik7Ci0gICAgcnVsZXNbIm5vLWFsZXJ0Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWFsZXJ0Iik7
Ci0gICAgcnVsZXNbIm5vLWFycmF5LWNvbnN0cnVjdG9yIl0gPSByZXF1aXJlKCIuL3J1bGVzL25v
LWFycmF5LWNvbnN0cnVjdG9yIik7Ci0gICAgcnVsZXNbIm5vLWJpdHdpc2UiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tYml0d2lzZSIpOwotICAgIHJ1bGVzWyJuby1jYWxsZXIiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tY2FsbGVyIik7Ci0gICAgcnVsZXNbIm5vLWNhdGNoLXNoYWRvdyJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby1jYXRjaC1zaGFkb3ciKTsKLSAgICBydWxlc1sibm8tY29tbWEtZGFu
Z2xlIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWNvbW1hLWRhbmdsZSIpOwotICAgIHJ1bGVzWyJu
by1jb25kLWFzc2lnbiJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jb25kLWFzc2lnbiIpOwotICAg
IHJ1bGVzWyJuby1jb25zb2xlIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWNvbnNvbGUiKTsKLSAg
ICBydWxlc1sibm8tY29uc3RhbnQtY29uZGl0aW9uIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWNv
bnN0YW50LWNvbmRpdGlvbiIpOwotICAgIHJ1bGVzWyJuby1jb250cm9sLXJlZ2V4Il0gPSByZXF1
aXJlKCIuL3J1bGVzL25vLWNvbnRyb2wtcmVnZXgiKTsKLSAgICBydWxlc1sibm8tZGVidWdnZXIi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZGVidWdnZXIiKTsKLSAgICBydWxlc1sibm8tZGVsZXRl
LXZhciJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1kZWxldGUtdmFyIik7Ci0gICAgcnVsZXNbIm5v
LWRpdi1yZWdleCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1kaXYtcmVnZXgiKTsKLSAgICBydWxl
c1sibm8tZHVwZS1rZXlzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWR1cGUta2V5cyIpOwotICAg
IHJ1bGVzWyJuby1lbHNlLXJldHVybiJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1lbHNlLXJldHVy
biIpOwotICAgIHJ1bGVzWyJuby1lbXB0eS1jbGFzcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1l
bXB0eS1jbGFzcyIpOwotICAgIHJ1bGVzWyJuby1lbXB0eS1sYWJlbCJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1lbXB0eS1sYWJlbCIpOwotICAgIHJ1bGVzWyJuby1lbXB0eSJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1lbXB0eSIpOwotICAgIHJ1bGVzWyJuby1lcS1udWxsIl0gPSByZXF1aXJlKCIu
L3J1bGVzL25vLWVxLW51bGwiKTsKLSAgICBydWxlc1sibm8tZXZhbCJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1ldmFsIik7Ci0gICAgcnVsZXNbIm5vLWV4LWFzc2lnbiJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1leC1hc3NpZ24iKTsKLSAgICBydWxlc1sibm8tZXh0ZW5kLW5hdGl2ZSJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby1leHRlbmQtbmF0aXZlIik7Ci0gICAgcnVsZXNbIm5vLWV4dHJhLWJp
bmQiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXh0cmEtYmluZCIpOwotICAgIHJ1bGVzWyJuby1l
eHRyYS1ib29sZWFuLWNhc3QiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXh0cmEtYm9vbGVhbi1j
YXN0Iik7Ci0gICAgcnVsZXNbIm5vLWV4dHJhLXBhcmVucyJdID0gcmVxdWlyZSgiLi9ydWxlcy9u
by1leHRyYS1wYXJlbnMiKTsKLSAgICBydWxlc1sibm8tZXh0cmEtc2VtaSJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1leHRyYS1zZW1pIik7Ci0gICAgcnVsZXNbIm5vLWV4dHJhLXN0cmljdCJdID0g
cmVxdWlyZSgiLi9ydWxlcy9uby1leHRyYS1zdHJpY3QiKTsKLSAgICBydWxlc1sibm8tZmFsbHRo
cm91Z2giXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZmFsbHRocm91Z2giKTsKLSAgICBydWxlc1si
bm8tZmxvYXRpbmctZGVjaW1hbCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1mbG9hdGluZy1kZWNp
bWFsIik7Ci0gICAgcnVsZXNbIm5vLWZ1bmMtYXNzaWduIl0gPSByZXF1aXJlKCIuL3J1bGVzL25v
LWZ1bmMtYXNzaWduIik7Ci0gICAgcnVsZXNbIm5vLWltcGxpZWQtZXZhbCJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1pbXBsaWVkLWV2YWwiKTsKLSAgICBydWxlc1sibm8taW5uZXItZGVjbGFyYXRp
b25zIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWlubmVyLWRlY2xhcmF0aW9ucyIpOwotICAgIHJ1
bGVzWyJuby1pbnZhbGlkLXJlZ2V4cCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1pbnZhbGlkLXJl
Z2V4cCIpOwotICAgIHJ1bGVzWyJuby1pdGVyYXRvciJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1p
dGVyYXRvciIpOwotICAgIHJ1bGVzWyJuby1sYWJlbC12YXIiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tbGFiZWwtdmFyIik7Ci0gICAgcnVsZXNbIm5vLWxhYmVscyJdID0gcmVxdWlyZSgiLi9ydWxl
cy9uby1sYWJlbHMiKTsKLSAgICBydWxlc1sibm8tbG9uZS1ibG9ja3MiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvbm8tbG9uZS1ibG9ja3MiKTsKLSAgICBydWxlc1sibm8tbG9uZWx5LWlmIl0gPSByZXF1
aXJlKCIuL3J1bGVzL25vLWxvbmVseS1pZiIpOwotICAgIHJ1bGVzWyJuby1sb29wLWZ1bmMiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvbm8tbG9vcC1mdW5jIik7Ci0gICAgcnVsZXNbIm5vLW1peGVkLXJl
cXVpcmVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW1peGVkLXJlcXVpcmVzIik7Ci0gICAgcnVs
ZXNbIm5vLW1peGVkLXNwYWNlcy1hbmQtdGFicyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1taXhl
ZC1zcGFjZXMtYW5kLXRhYnMiKTsKLSAgICBydWxlc1sibm8tbXVsdGktc3BhY2VzIl0gPSByZXF1
aXJlKCIuL3J1bGVzL25vLW11bHRpLXNwYWNlcyIpOwotICAgIHJ1bGVzWyJuby1tdWx0aS1zdHIi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tbXVsdGktc3RyIik7Ci0gICAgcnVsZXNbIm5vLW11bHRp
cGxlLWVtcHR5LWxpbmVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW11bHRpcGxlLWVtcHR5LWxp
bmVzIik7Ci0gICAgcnVsZXNbIm5vLW5hdGl2ZS1yZWFzc2lnbiJdID0gcmVxdWlyZSgiLi9ydWxl
cy9uby1uYXRpdmUtcmVhc3NpZ24iKTsKLSAgICBydWxlc1sibm8tbmVnYXRlZC1pbi1saHMiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvbm8tbmVnYXRlZC1pbi1saHMiKTsKLSAgICBydWxlc1sibm8tbmVz
dGVkLXRlcm5hcnkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tbmVzdGVkLXRlcm5hcnkiKTsKLSAg
ICBydWxlc1sibm8tbmV3LWZ1bmMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tbmV3LWZ1bmMiKTsK
LSAgICBydWxlc1sibm8tbmV3LW9iamVjdCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1uZXctb2Jq
ZWN0Iik7Ci0gICAgcnVsZXNbIm5vLW5ldy1yZXF1aXJlIl0gPSByZXF1aXJlKCIuL3J1bGVzL25v
LW5ldy1yZXF1aXJlIik7Ci0gICAgcnVsZXNbIm5vLW5ldy13cmFwcGVycyJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1uZXctd3JhcHBlcnMiKTsKLSAgICBydWxlc1sibm8tbmV3Il0gPSByZXF1aXJl
KCIuL3J1bGVzL25vLW5ldyIpOwotICAgIHJ1bGVzWyJuby1vYmotY2FsbHMiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tb2JqLWNhbGxzIik7Ci0gICAgcnVsZXNbIm5vLW9jdGFsLWVzY2FwZSJdID0g
cmVxdWlyZSgiLi9ydWxlcy9uby1vY3RhbC1lc2NhcGUiKTsKLSAgICBydWxlc1sibm8tb2N0YWwi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tb2N0YWwiKTsKLSAgICBydWxlc1sibm8tcGF0aC1jb25j
YXQiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcGF0aC1jb25jYXQiKTsKLSAgICBydWxlc1sibm8t
cGx1c3BsdXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcGx1c3BsdXMiKTsKLSAgICBydWxlc1si
bm8tcHJvY2Vzcy1lbnYiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcHJvY2Vzcy1lbnYiKTsKLSAg
ICBydWxlc1sibm8tcHJvY2Vzcy1leGl0Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXByb2Nlc3Mt
ZXhpdCIpOwotICAgIHJ1bGVzWyJuby1wcm90byJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1wcm90
byIpOwotICAgIHJ1bGVzWyJuby1yZWRlY2xhcmUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcmVk
ZWNsYXJlIik7Ci0gICAgcnVsZXNbIm5vLXJlZ2V4LXNwYWNlcyJdID0gcmVxdWlyZSgiLi9ydWxl
cy9uby1yZWdleC1zcGFjZXMiKTsKLSAgICBydWxlc1sibm8tcmVzZXJ2ZWQta2V5cyJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby1yZXNlcnZlZC1rZXlzIik7Ci0gICAgcnVsZXNbIm5vLXJlc3RyaWN0
ZWQtbW9kdWxlcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1yZXN0cmljdGVkLW1vZHVsZXMiKTsK
LSAgICBydWxlc1sibm8tcmV0dXJuLWFzc2lnbiJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1yZXR1
cm4tYXNzaWduIik7Ci0gICAgcnVsZXNbIm5vLXNjcmlwdC11cmwiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8tc2NyaXB0LXVybCIpOwotICAgIHJ1bGVzWyJuby1zZWxmLWNvbXBhcmUiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tc2VsZi1jb21wYXJlIik7Ci0gICAgcnVsZXNbIm5vLXNlcXVlbmNlcyJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1zZXF1ZW5jZXMiKTsKLSAgICBydWxlc1sibm8tc2hhZG93
LXJlc3RyaWN0ZWQtbmFtZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc2hhZG93LXJlc3RyaWN0
ZWQtbmFtZXMiKTsKLSAgICBydWxlc1sibm8tc2hhZG93Il0gPSByZXF1aXJlKCIuL3J1bGVzL25v
LXNoYWRvdyIpOwotICAgIHJ1bGVzWyJuby1zcGFjZS1iZWZvcmUtc2VtaSJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1zcGFjZS1iZWZvcmUtc2VtaSIpOwotICAgIHJ1bGVzWyJuby1zcGFjZWQtZnVu
YyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1zcGFjZWQtZnVuYyIpOwotICAgIHJ1bGVzWyJuby1z
cGFyc2UtYXJyYXlzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXNwYXJzZS1hcnJheXMiKTsKLSAg
ICBydWxlc1sibm8tc3luYyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1zeW5jIik7Ci0gICAgcnVs
ZXNbIm5vLXRlcm5hcnkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tdGVybmFyeSIpOwotICAgIHJ1
bGVzWyJuby10cmFpbGluZy1zcGFjZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tdHJhaWxpbmct
c3BhY2VzIik7Ci0gICAgcnVsZXNbIm5vLXVuZGVmLWluaXQiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tdW5kZWYtaW5pdCIpOwotICAgIHJ1bGVzWyJuby11bmRlZiJdID0gcmVxdWlyZSgiLi9ydWxl
cy9uby11bmRlZiIpOwotICAgIHJ1bGVzWyJuby11bmRlZmluZWQiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8tdW5kZWZpbmVkIik7Ci0gICAgcnVsZXNbIm5vLXVuZGVyc2NvcmUtZGFuZ2xlIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLXVuZGVyc2NvcmUtZGFuZ2xlIik7Ci0gICAgcnVsZXNbIm5vLXVu
cmVhY2hhYmxlIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXVucmVhY2hhYmxlIik7Ci0gICAgcnVs
ZXNbIm5vLXVudXNlZC1leHByZXNzaW9ucyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby11bnVzZWQt
ZXhwcmVzc2lvbnMiKTsKLSAgICBydWxlc1sibm8tdW51c2VkLXZhcnMiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvbm8tdW51c2VkLXZhcnMiKTsKLSAgICBydWxlc1sibm8tdXNlLWJlZm9yZS1kZWZpbmUi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tdXNlLWJlZm9yZS1kZWZpbmUiKTsKLSAgICBydWxlc1si
bm8tdm9pZCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby12b2lkIik7Ci0gICAgcnVsZXNbIm5vLXdh
cm5pbmctY29tbWVudHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8td2FybmluZy1jb21tZW50cyIp
OwotICAgIHJ1bGVzWyJuby13aXRoIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXdpdGgiKTsKLSAg
ICBydWxlc1sibm8td3JhcC1mdW5jIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXdyYXAtZnVuYyIp
OwotICAgIHJ1bGVzWyJvbmUtdmFyIl0gPSByZXF1aXJlKCIuL3J1bGVzL29uZS12YXIiKTsKLSAg
ICBydWxlc1sicGFkZGVkLWJsb2NrcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9wYWRkZWQtYmxvY2tz
Iik7Ci0gICAgcnVsZXNbInF1b3RlLXByb3BzIl0gPSByZXF1aXJlKCIuL3J1bGVzL3F1b3RlLXBy
b3BzIik7Ci0gICAgcnVsZXNbInF1b3RlcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9xdW90ZXMiKTsK
LSAgICBydWxlc1sicmFkaXgiXSA9IHJlcXVpcmUoIi4vcnVsZXMvcmFkaXgiKTsKLSAgICBydWxl
c1sic2VtaSJdID0gcmVxdWlyZSgiLi9ydWxlcy9zZW1pIik7Ci0gICAgcnVsZXNbInNvcnQtdmFy
cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9zb3J0LXZhcnMiKTsKLSAgICBydWxlc1sic3BhY2UtYWZ0
ZXIta2V5d29yZHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc3BhY2UtYWZ0ZXIta2V5d29yZHMiKTsK
LSAgICBydWxlc1sic3BhY2UtYmVmb3JlLWJsb2NrcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFj
ZS1iZWZvcmUtYmxvY2tzIik7Ci0gICAgcnVsZXNbInNwYWNlLWluLWJyYWNrZXRzIl0gPSByZXF1
aXJlKCIuL3J1bGVzL3NwYWNlLWluLWJyYWNrZXRzIik7Ci0gICAgcnVsZXNbInNwYWNlLWluLXBh
cmVucyJdID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZS1pbi1wYXJlbnMiKTsKLSAgICBydWxlc1si
c3BhY2UtaW5maXgtb3BzIl0gPSByZXF1aXJlKCIuL3J1bGVzL3NwYWNlLWluZml4LW9wcyIpOwot
ICAgIHJ1bGVzWyJzcGFjZS1yZXR1cm4tdGhyb3ctY2FzZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9z
cGFjZS1yZXR1cm4tdGhyb3ctY2FzZSIpOwotICAgIHJ1bGVzWyJzcGFjZS11bmFyeS13b3JkLW9w
cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZS11bmFyeS13b3JkLW9wcyIpOwotICAgIHJ1bGVz
WyJzcGFjZWQtbGluZS1jb21tZW50Il0gPSByZXF1aXJlKCIuL3J1bGVzL3NwYWNlZC1saW5lLWNv
bW1lbnQiKTsKLSAgICBydWxlc1sic3RyaWN0Il0gPSByZXF1aXJlKCIuL3J1bGVzL3N0cmljdCIp
OwotICAgIHJ1bGVzWyJ1c2UtaXNuYW4iXSA9IHJlcXVpcmUoIi4vcnVsZXMvdXNlLWlzbmFuIik7
Ci0gICAgcnVsZXNbInZhbGlkLWpzZG9jIl0gPSByZXF1aXJlKCIuL3J1bGVzL3ZhbGlkLWpzZG9j
Iik7Ci0gICAgcnVsZXNbInZhbGlkLXR5cGVvZiJdID0gcmVxdWlyZSgiLi9ydWxlcy92YWxpZC10
eXBlb2YiKTsKLSAgICBydWxlc1sidmFycy1vbi10b3AiXSA9IHJlcXVpcmUoIi4vcnVsZXMvdmFy
cy1vbi10b3AiKTsKLSAgICBydWxlc1sid3JhcC1paWZlIl0gPSByZXF1aXJlKCIuL3J1bGVzL3dy
YXAtaWlmZSIpOwotICAgIHJ1bGVzWyJ3cmFwLXJlZ2V4Il0gPSByZXF1aXJlKCIuL3J1bGVzL3dy
YXAtcmVnZXgiKTsKLSAgICBydWxlc1sieW9kYSJdID0gcmVxdWlyZSgiLi9ydWxlcy95b2RhIik7
Ci0KLSAgICByZXR1cm4gcnVsZXM7Ci19OwotfSx7Ii4vcnVsZXMvYmxvY2stc2NvcGVkLXZhciI6
MTMsIi4vcnVsZXMvYnJhY2Utc3R5bGUiOjE0LCIuL3J1bGVzL2NhbWVsY2FzZSI6MTUsIi4vcnVs
ZXMvY29tbWEtc3BhY2luZyI6MTYsIi4vcnVsZXMvY29tbWEtc3R5bGUiOjE3LCIuL3J1bGVzL2Nv
bXBsZXhpdHkiOjE4LCIuL3J1bGVzL2NvbnNpc3RlbnQtcmV0dXJuIjoxOSwiLi9ydWxlcy9jb25z
aXN0ZW50LXRoaXMiOjIwLCIuL3J1bGVzL2N1cmx5IjoyMSwiLi9ydWxlcy9kZWZhdWx0LWNhc2Ui
OjIyLCIuL3J1bGVzL2RvdC1ub3RhdGlvbiI6MjMsIi4vcnVsZXMvZW9sLWxhc3QiOjI0LCIuL3J1
bGVzL2VxZXFlcSI6MjUsIi4vcnVsZXMvZnVuYy1uYW1lcyI6MjYsIi4vcnVsZXMvZnVuYy1zdHls
ZSI6MjcsIi4vcnVsZXMvZ2xvYmFsLXN0cmljdCI6MjgsIi4vcnVsZXMvZ3VhcmQtZm9yLWluIjoy
OSwiLi9ydWxlcy9oYW5kbGUtY2FsbGJhY2stZXJyIjozMCwiLi9ydWxlcy9rZXktc3BhY2luZyI6
MzEsIi4vcnVsZXMvbWF4LWRlcHRoIjozMiwiLi9ydWxlcy9tYXgtbGVuIjozMywiLi9ydWxlcy9t
YXgtbmVzdGVkLWNhbGxiYWNrcyI6MzQsIi4vcnVsZXMvbWF4LXBhcmFtcyI6MzUsIi4vcnVsZXMv
bWF4LXN0YXRlbWVudHMiOjM2LCIuL3J1bGVzL25ldy1jYXAiOjM3LCIuL3J1bGVzL25ldy1wYXJl
bnMiOjM4LCIuL3J1bGVzL25vLWFsZXJ0IjozOSwiLi9ydWxlcy9uby1hcnJheS1jb25zdHJ1Y3Rv
ciI6NDAsIi4vcnVsZXMvbm8tYml0d2lzZSI6NDEsIi4vcnVsZXMvbm8tY2FsbGVyIjo0MiwiLi9y
dWxlcy9uby1jYXRjaC1zaGFkb3ciOjQzLCIuL3J1bGVzL25vLWNvbW1hLWRhbmdsZSI6NDQsIi4v
cnVsZXMvbm8tY29uZC1hc3NpZ24iOjQ1LCIuL3J1bGVzL25vLWNvbnNvbGUiOjQ2LCIuL3J1bGVz
L25vLWNvbnN0YW50LWNvbmRpdGlvbiI6NDcsIi4vcnVsZXMvbm8tY29udHJvbC1yZWdleCI6NDgs
Ii4vcnVsZXMvbm8tZGVidWdnZXIiOjQ5LCIuL3J1bGVzL25vLWRlbGV0ZS12YXIiOjUwLCIuL3J1
bGVzL25vLWRpdi1yZWdleCI6NTEsIi4vcnVsZXMvbm8tZHVwZS1rZXlzIjo1MiwiLi9ydWxlcy9u
by1lbHNlLXJldHVybiI6NTMsIi4vcnVsZXMvbm8tZW1wdHkiOjU2LCIuL3J1bGVzL25vLWVtcHR5
LWNsYXNzIjo1NCwiLi9ydWxlcy9uby1lbXB0eS1sYWJlbCI6NTUsIi4vcnVsZXMvbm8tZXEtbnVs
bCI6NTcsIi4vcnVsZXMvbm8tZXZhbCI6NTgsIi4vcnVsZXMvbm8tZXgtYXNzaWduIjo1OSwiLi9y
dWxlcy9uby1leHRlbmQtbmF0aXZlIjo2MCwiLi9ydWxlcy9uby1leHRyYS1iaW5kIjo2MSwiLi9y
dWxlcy9uby1leHRyYS1ib29sZWFuLWNhc3QiOjYyLCIuL3J1bGVzL25vLWV4dHJhLXBhcmVucyI6
NjMsIi4vcnVsZXMvbm8tZXh0cmEtc2VtaSI6NjQsIi4vcnVsZXMvbm8tZXh0cmEtc3RyaWN0Ijo2
NSwiLi9ydWxlcy9uby1mYWxsdGhyb3VnaCI6NjYsIi4vcnVsZXMvbm8tZmxvYXRpbmctZGVjaW1h
bCI6NjcsIi4vcnVsZXMvbm8tZnVuYy1hc3NpZ24iOjY4LCIuL3J1bGVzL25vLWltcGxpZWQtZXZh
bCI6NjksIi4vcnVsZXMvbm8taW5uZXItZGVjbGFyYXRpb25zIjo3MCwiLi9ydWxlcy9uby1pbnZh
bGlkLXJlZ2V4cCI6NzEsIi4vcnVsZXMvbm8taXRlcmF0b3IiOjcyLCIuL3J1bGVzL25vLWxhYmVs
LXZhciI6NzMsIi4vcnVsZXMvbm8tbGFiZWxzIjo3NCwiLi9ydWxlcy9uby1sb25lLWJsb2NrcyI6
NzUsIi4vcnVsZXMvbm8tbG9uZWx5LWlmIjo3NiwiLi9ydWxlcy9uby1sb29wLWZ1bmMiOjc3LCIu
L3J1bGVzL25vLW1peGVkLXJlcXVpcmVzIjo3OCwiLi9ydWxlcy9uby1taXhlZC1zcGFjZXMtYW5k
LXRhYnMiOjc5LCIuL3J1bGVzL25vLW11bHRpLXNwYWNlcyI6ODAsIi4vcnVsZXMvbm8tbXVsdGkt
c3RyIjo4MSwiLi9ydWxlcy9uby1tdWx0aXBsZS1lbXB0eS1saW5lcyI6ODIsIi4vcnVsZXMvbm8t
bmF0aXZlLXJlYXNzaWduIjo4MywiLi9ydWxlcy9uby1uZWdhdGVkLWluLWxocyI6ODQsIi4vcnVs
ZXMvbm8tbmVzdGVkLXRlcm5hcnkiOjg1LCIuL3J1bGVzL25vLW5ldyI6OTAsIi4vcnVsZXMvbm8t
bmV3LWZ1bmMiOjg2LCIuL3J1bGVzL25vLW5ldy1vYmplY3QiOjg3LCIuL3J1bGVzL25vLW5ldy1y
ZXF1aXJlIjo4OCwiLi9ydWxlcy9uby1uZXctd3JhcHBlcnMiOjg5LCIuL3J1bGVzL25vLW9iai1j
YWxscyI6OTEsIi4vcnVsZXMvbm8tb2N0YWwiOjkzLCIuL3J1bGVzL25vLW9jdGFsLWVzY2FwZSI6
OTIsIi4vcnVsZXMvbm8tcGF0aC1jb25jYXQiOjk0LCIuL3J1bGVzL25vLXBsdXNwbHVzIjo5NSwi
Li9ydWxlcy9uby1wcm9jZXNzLWVudiI6OTYsIi4vcnVsZXMvbm8tcHJvY2Vzcy1leGl0Ijo5Nywi
Li9ydWxlcy9uby1wcm90byI6OTgsIi4vcnVsZXMvbm8tcmVkZWNsYXJlIjo5OSwiLi9ydWxlcy9u
by1yZWdleC1zcGFjZXMiOjEwMCwiLi9ydWxlcy9uby1yZXNlcnZlZC1rZXlzIjoxMDEsIi4vcnVs
ZXMvbm8tcmVzdHJpY3RlZC1tb2R1bGVzIjoxMDIsIi4vcnVsZXMvbm8tcmV0dXJuLWFzc2lnbiI6
MTAzLCIuL3J1bGVzL25vLXNjcmlwdC11cmwiOjEwNCwiLi9ydWxlcy9uby1zZWxmLWNvbXBhcmUi
OjEwNSwiLi9ydWxlcy9uby1zZXF1ZW5jZXMiOjEwNiwiLi9ydWxlcy9uby1zaGFkb3ciOjEwOCwi
Li9ydWxlcy9uby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lcyI6MTA3LCIuL3J1bGVzL25vLXNwYWNl
LWJlZm9yZS1zZW1pIjoxMDksIi4vcnVsZXMvbm8tc3BhY2VkLWZ1bmMiOjExMCwiLi9ydWxlcy9u
by1zcGFyc2UtYXJyYXlzIjoxMTEsIi4vcnVsZXMvbm8tc3luYyI6MTEyLCIuL3J1bGVzL25vLXRl
cm5hcnkiOjExMywiLi9ydWxlcy9uby10cmFpbGluZy1zcGFjZXMiOjExNCwiLi9ydWxlcy9uby11
bmRlZiI6MTE2LCIuL3J1bGVzL25vLXVuZGVmLWluaXQiOjExNSwiLi9ydWxlcy9uby11bmRlZmlu
ZWQiOjExNywiLi9ydWxlcy9uby11bmRlcnNjb3JlLWRhbmdsZSI6MTE4LCIuL3J1bGVzL25vLXVu
cmVhY2hhYmxlIjoxMTksIi4vcnVsZXMvbm8tdW51c2VkLWV4cHJlc3Npb25zIjoxMjAsIi4vcnVs
ZXMvbm8tdW51c2VkLXZhcnMiOjEyMSwiLi9ydWxlcy9uby11c2UtYmVmb3JlLWRlZmluZSI6MTIy
LCIuL3J1bGVzL25vLXZvaWQiOjEyMywiLi9ydWxlcy9uby13YXJuaW5nLWNvbW1lbnRzIjoxMjQs
Ii4vcnVsZXMvbm8td2l0aCI6MTI1LCIuL3J1bGVzL25vLXdyYXAtZnVuYyI6MTI2LCIuL3J1bGVz
L29uZS12YXIiOjEyNywiLi9ydWxlcy9wYWRkZWQtYmxvY2tzIjoxMjgsIi4vcnVsZXMvcXVvdGUt
cHJvcHMiOjEyOSwiLi9ydWxlcy9xdW90ZXMiOjEzMCwiLi9ydWxlcy9yYWRpeCI6MTMxLCIuL3J1
bGVzL3NlbWkiOjEzMiwiLi9ydWxlcy9zb3J0LXZhcnMiOjEzMywiLi9ydWxlcy9zcGFjZS1hZnRl
ci1rZXl3b3JkcyI6MTM0LCIuL3J1bGVzL3NwYWNlLWJlZm9yZS1ibG9ja3MiOjEzNSwiLi9ydWxl
cy9zcGFjZS1pbi1icmFja2V0cyI6MTM2LCIuL3J1bGVzL3NwYWNlLWluLXBhcmVucyI6MTM3LCIu
L3J1bGVzL3NwYWNlLWluZml4LW9wcyI6MTM4LCIuL3J1bGVzL3NwYWNlLXJldHVybi10aHJvdy1j
YXNlIjoxMzksIi4vcnVsZXMvc3BhY2UtdW5hcnktd29yZC1vcHMiOjE0MCwiLi9ydWxlcy9zcGFj
ZWQtbGluZS1jb21tZW50IjoxNDEsIi4vcnVsZXMvc3RyaWN0IjoxNDIsIi4vcnVsZXMvdXNlLWlz
bmFuIjoxNDMsIi4vcnVsZXMvdmFsaWQtanNkb2MiOjE0NCwiLi9ydWxlcy92YWxpZC10eXBlb2Yi
OjE0NSwiLi9ydWxlcy92YXJzLW9uLXRvcCI6MTQ2LCIuL3J1bGVzL3dyYXAtaWlmZSI6MTQ3LCIu
L3J1bGVzL3dyYXAtcmVnZXgiOjE0OCwiLi9ydWxlcy95b2RhIjoxNDl9XSwxMTpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZUNvbnRl
eHQgdXRpbGl0eSBmb3IgcnVsZXMKLSAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKLSAqLwot
InVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29uc3RhbnRzCi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12YXIgUEFTU1RIUk9VR0hTID0gWwotICAgICAgICAi
Z2V0U291cmNlIiwKLSAgICAgICAgImdldFNvdXJjZUxpbmVzIiwKLSAgICAgICAgImdldFRva2Vu
cyIsCi0gICAgICAgICJnZXRUb2tlbnNCZWZvcmUiLAotICAgICAgICAiZ2V0VG9rZW5CZWZvcmUi
LAotICAgICAgICAiZ2V0VG9rZW5zQWZ0ZXIiLAotICAgICAgICAiZ2V0VG9rZW5BZnRlciIsCi0g
ICAgICAgICJnZXRGaXJzdFRva2VucyIsCi0gICAgICAgICJnZXRGaXJzdFRva2VuIiwKLSAgICAg
ICAgImdldExhc3RUb2tlbnMiLAotICAgICAgICAiZ2V0TGFzdFRva2VuIiwKLSAgICAgICAgImdl
dENvbW1lbnRzIiwKLSAgICAgICAgImdldEFuY2VzdG9ycyIsCi0gICAgICAgICJnZXRTY29wZSIs
Ci0gICAgICAgICJnZXRKU0RvY0NvbW1lbnQiLAotICAgICAgICAiZ2V0RmlsZW5hbWUiCi0gICAg
XTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotLyoqCi0gKiBBY3RzIGFzIGFuIGFic3RyYWN0aW9uIGxheWVy
IGJldHdlZW4gcnVsZXMgYW5kIHRoZSBtYWluIGVzbGludCBvYmplY3QuCi0gKiBAY29uc3RydWN0
b3IKLSAqIEBwYXJhbSB7c3RyaW5nfSBydWxlSWQgVGhlIElEIG9mIHRoZSBydWxlIHVzaW5nIHRo
aXMgb2JqZWN0LgotICogQHBhcmFtIHtlc2xpbnR9IGVzbGludCBUaGUgZXNsaW50IG9iamVjdC4K
LSAqIEBwYXJhbSB7bnVtYmVyfSBzZXZlcml0eSBUaGUgY29uZmlndXJlZCBzZXZlcml0eSBsZXZl
bCBvZiB0aGUgcnVsZS4KLSAqIEBwYXJhbSB7YXJyYXl9IG9wdGlvbnMgVGhlIGNvbmZpZ3VyYXRp
b24gaW5mb3JtYXRpb24gdG8gYmUgYWRkZWQgdG8gdGhlIHJ1bGUuCi0gKiBAcGFyYW0ge29iamVj
dH0gc2V0dGluZ3MgVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgcGFzc2VkIGZyb20gdGhlIGNv
bmZpZyBmaWxlLgotICovCi1mdW5jdGlvbiBSdWxlQ29udGV4dChydWxlSWQsIGVzbGludCwgc2V2
ZXJpdHksIG9wdGlvbnMsIHNldHRpbmdzKSB7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgcmVhZC1v
bmx5IElEIG9mIHRoZSBydWxlLgotICAgICAqLwotICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0
aGlzLCAiaWQiLCB7Ci0gICAgICAgIHZhbHVlOiBydWxlSWQKLSAgICB9KTsKLQotICAgIC8qKgot
ICAgICAqIFRoZSByZWFkLW9ubHkgb3B0aW9ucyBvZiB0aGUgcnVsZQotICAgICAqLwotICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAib3B0aW9ucyIsIHsKLSAgICAgICAgdmFsdWU6IG9w
dGlvbnMKLSAgICB9KTsKLQotICAgIC8qKgotICAgICAqIFRoZSByZWFkLW9ubHkgc2V0dGluZ3Mg
c2hhcmVkIGJldHdlZW4gYWxsIHJ1bGVzCi0gICAgICovCi0gICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KHRoaXMsICJzZXR0aW5ncyIsIHsKLSAgICAgICAgdmFsdWU6IHNldHRpbmdzCi0gICAgfSk7
Ci0KLSAgICAvLyBjb3B5IG92ZXIgcGFzc3Rocm91Z2ggbWV0aG9kcwotICAgIFBBU1NUSFJPVUdI
Uy5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgdGhpc1tuYW1lXSA9IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgcmV0dXJuIGVzbGludFtuYW1lXS5hcHBseShlc2xpbnQsIGFyZ3Vt
ZW50cyk7Ci0gICAgICAgIH07Ci0gICAgfSwgdGhpcyk7Ci0KLSAgICAvKioKLSAgICAgKiBQYXNz
dGhyb3VnaCB0byBlc2xpbnQucmVwb3J0KCkgdGhhdCBhdXRvbWF0aWNhbGx5IGFzc2lnbnMgdGhl
IHJ1bGUgSUQgYW5kIHNldmVyaXR5LgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUg
QVNUIG5vZGUgcmVsYXRlZCB0byB0aGUgbWVzc2FnZS4KLSAgICAgKiBAcGFyYW0ge09iamVjdD19
IGxvY2F0aW9uIFRoZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IuCi0gICAgICogQHBhcmFtIHtzdHJp
bmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSB0byB0aGUgdXNlci4KLSAgICAgKiBA
cGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCB0ZW1wbGF0ZSBkYXRhIHdoaWNoIHByb2R1Y2Vz
IGEgZm9ybWF0dGVkIG1lc3NhZ2UKLSAgICAgKiAgICAgd2l0aCBzeW1ib2xzIGJlaW5nIHJlcGxh
Y2VkIGJ5IHRoaXMgb2JqZWN0J3MgdmFsdWVzLgotICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAg
ICAqLwotICAgIHRoaXMucmVwb3J0ID0gZnVuY3Rpb24obm9kZSwgbG9jYXRpb24sIG1lc3NhZ2Us
IG9wdHMpIHsKLSAgICAgICAgZXNsaW50LnJlcG9ydChydWxlSWQsIHNldmVyaXR5LCBub2RlLCBs
b2NhdGlvbiwgbWVzc2FnZSwgb3B0cyk7Ci0gICAgfTsKLQotfQotCi1SdWxlQ29udGV4dC5wcm90
b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFJ1bGVDb250ZXh0Ci19OwotCi1tb2R1bGUuZXhw
b3J0cyA9IFJ1bGVDb250ZXh0OwotCi19LHt9XSwxMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgRGVmaW5lcyBhIHN0b3JhZ2UgZm9yIHJ1
bGVzLgotICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcwotICovCi0KLSJ1c2Ugc3RyaWN0IjsK
LQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlcXVpcmVtZW50cwotLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotdmFyIGxvYWRSdWxlcyA9IHJlcXVpcmUoIi4vbG9hZC1ydWxlcyIpOwot
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUHJpdmF0ZXMKLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLXZhciBydWxlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7Ci0KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0vLyBQdWJsaWMgSW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0vKioKLSAqIFJlZ2lzdGVycyBhIHJ1bGUgbW9kdWxlIGZvciBydWxlIGlkIGluIHN0b3Jh
Z2UuCi0gKiBAcGFyYW0ge1N0cmluZ30gcnVsZUlkIFJ1bGUgaWQgKGZpbGUgbmFtZSkuCi0gKiBA
cGFyYW0ge0Z1bmN0aW9ufSBydWxlTW9kdWxlIFJ1bGUgaGFuZGxlci4KLSAqIEByZXR1cm5zIHt2
b2lkfQotICovCi1mdW5jdGlvbiBkZWZpbmUocnVsZUlkLCBydWxlTW9kdWxlKSB7Ci0gICAgcnVs
ZXNbcnVsZUlkXSA9IHJ1bGVNb2R1bGU7Ci19Ci0KLWV4cG9ydHMuZGVmaW5lID0gZGVmaW5lOwot
Ci0vKioKLSAqIExvYWRzIGFuZCByZWdpc3RlcnMgYWxsIHJ1bGVzIGZyb20gcGFzc2VkIHJ1bGVz
IGRpcmVjdG9yeS4KLSAqIEBwYXJhbSB7U3RyaW5nfSBbcnVsZXNEaXJdIFBhdGggdG8gcnVsZXMg
ZGlyZWN0b3J5LCBtYXkgYmUgcmVsYXRpdmUuIERlZmF1bHRzIHRvIGBsaWIvcnVsZXNgLgotICog
QHJldHVybnMge3ZvaWR9Ci0gKi8KLWZ1bmN0aW9uIGxvYWQocnVsZXNEaXIpIHsKLSAgICB2YXIg
bmV3UnVsZXMgPSBsb2FkUnVsZXMocnVsZXNEaXIpOwotICAgIE9iamVjdC5rZXlzKG5ld1J1bGVz
KS5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGVJZCkgewotICAgICAgICBkZWZpbmUocnVsZUlkLCBuZXdS
dWxlc1tydWxlSWRdKTsKLSAgICB9KTsKLX0KLQotZXhwb3J0cy5sb2FkID0gbG9hZDsKLQotLyoq
Ci0gKiBSZWdpc3RlcnMgYWxsIGdpdmVuIHJ1bGVzIG9mIGEgcGx1Z2luLgotICogQHBhcmFtIHtP
YmplY3R9IHBsdWdpblJ1bGVzIEEga2V5L3ZhbHVlIG1hcCBvZiBydWxlIGRlZmluaXRpb25zLgot
ICogQHBhcmFtIHtTdHJpbmd9IHBsdWdpbk5hbWUgVGhlIG5hbWUgb2YgdGhlIHBsdWdpbiB3aXRo
b3V0IHByZWZpeCAoYGVzbGludC1wbHVnaW4tYCkuCi0gKiBAcmV0dXJucyB7dm9pZH0KLSAqLwot
ZXhwb3J0cy5pbXBvcnQgPSBmdW5jdGlvbiAocGx1Z2luUnVsZXMsIHBsdWdpbk5hbWUpIHsKLSAg
ICBPYmplY3Qua2V5cyhwbHVnaW5SdWxlcykuZm9yRWFjaChmdW5jdGlvbiAocnVsZUlkKSB7Ci0g
ICAgICAgIHZhciBxdWFsaWZpZWRSdWxlSWQgPSBwbHVnaW5OYW1lICsgIi8iICsgcnVsZUlkLAot
ICAgICAgICAgICAgcnVsZSA9IHBsdWdpblJ1bGVzW3J1bGVJZF07Ci0KLSAgICAgICAgZGVmaW5l
KHF1YWxpZmllZFJ1bGVJZCwgcnVsZSk7Ci0gICAgfSk7Ci19OwotCi0vKioKLSAqIEFjY2VzcyBy
dWxlIGhhbmRsZXIgYnkgaWQgKGZpbGUgbmFtZSkuCi0gKiBAcGFyYW0ge1N0cmluZ30gcnVsZUlk
IFJ1bGUgaWQgKGZpbGUgbmFtZSkuCi0gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJ1bGUgaGFuZGxl
ci4KLSAqLwotZXhwb3J0cy5nZXQgPSBmdW5jdGlvbihydWxlSWQpIHsKLSAgICByZXR1cm4gcnVs
ZXNbcnVsZUlkXTsKLX07Ci0KLS8qKgotICogUmVzZXQgcnVsZXMgc3RvcmFnZS4KLSAqIFNob3Vs
ZCBiZSB1c2VkIG9ubHkgaW4gdGVzdHMuCi0gKiBAcmV0dXJucyB7dm9pZH0KLSAqLwotZXhwb3J0
cy50ZXN0Q2xlYXIgPSBmdW5jdGlvbigpIHsKLSAgICBydWxlcyA9IE9iamVjdC5jcmVhdGUobnVs
bCk7Ci19OwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSW5pdGlhbGl6YXRpb24KLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIGxvYWRzIGJ1aWx0LWluIHJ1bGVzCi1sb2FkKCk7
Ci0KLX0seyIuL2xvYWQtcnVsZXMiOjEwfV0sMTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gY2hlY2sgZm9yICJibG9jayBz
Y29wZWQiIHZhcmlhYmxlcyBieSBiaW5kaW5nIGNvbnRleHQKLSAqIEBhdXRob3IgTWF0dCBEdVZh
bGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5jb20+Ci0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICB2
YXIgc2NvcGVTdGFjayA9IFtdOwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEhl
bHBlcnMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvKioKLSAgICAgKiBEZXRlcm1p
bmVzIHdoZXRoZXIgYW4gaWRlbnRpZmllciBpcyBpbiBkZWNsYXJhdGlvbiBwb3NpdGlvbiBvciBp
cyBhIG5vbi1kZWNsYXJhdGlvbiByZWZlcmVuY2UuCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBp
ZCBUaGUgaWRlbnRpZmllci4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmVudCBUaGUgaWRl
bnRpZmllcidzIHBhcmVudCBBU1Qgbm9kZS4KLSAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1
ZSB3aGVuIHRoZSBpZGVudGlmaWVyIGlzIGluIGRlY2xhcmF0aW9uIHBvc2l0aW9uLgotICAgICAq
LwotICAgIGZ1bmN0aW9uIGlzRGVjbGFyYXRpb24oaWQsIHBhcmVudCkgewotICAgICAgICBzd2l0
Y2ggKHBhcmVudC50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlICJGdW5jdGlvbkRlY2xhcmF0aW9u
IjoKLSAgICAgICAgICAgIGNhc2UgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHBhcmVudC5wYXJhbXMuaW5kZXhPZihpZCkgPiAtMSB8fCBpZCA9PT0gcGFyZW50
LmlkOwotCi0gICAgICAgICAgICBjYXNlICJWYXJpYWJsZURlY2xhcmF0b3IiOgotICAgICAgICAg
ICAgICAgIHJldHVybiBpZCA9PT0gcGFyZW50LmlkOwotCi0gICAgICAgICAgICBjYXNlICJDYXRj
aENsYXVzZSI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlkID09PSBwYXJlbnQucGFyYW07Ci0K
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGlk
ZW50aWZpZXIgaXMgaW4gcHJvcGVydHkgcG9zaXRpb24uCi0gICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBpZCBUaGUgaWRlbnRpZmllci4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmVudCBUaGUg
aWRlbnRpZmllcidzIHBhcmVudCBBU1Qgbm9kZS4KLSAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0g
dHJ1ZSB3aGVuIHRoZSBpZGVudGlmaWVyIGlzIGluIHByb3BlcnR5IHBvc2l0aW9uLgotICAgICAq
LwotICAgIGZ1bmN0aW9uIGlzUHJvcGVydHkoaWQsIHBhcmVudCkgewotICAgICAgICBzd2l0Y2gg
KHBhcmVudC50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlICJNZW1iZXJFeHByZXNzaW9uIjoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gaWQgPT09IHBhcmVudC5wcm9wZXJ0eSAmJiAhcGFyZW50LmNv
bXB1dGVkOwotCi0gICAgICAgICAgICBjYXNlICJQcm9wZXJ0eSI6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGlkID09PSBwYXJlbnQua2V5OwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAg
ICAqIFB1c2hlcyBhIG5ldyBzY29wZSBvYmplY3Qgb24gdGhlIHNjb3BlIHN0YWNrLgotICAgICAq
IEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIHB1c2hTY29wZSgpIHsKLSAg
ICAgICAgc2NvcGVTdGFjay5wdXNoKFtdKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW1v
dmVzIHRoZSB0b3Btb3N0IHNjb3BlIG9iamVjdCBmcm9tIHRoZSBzY29wZSBzdGFjay4KLSAgICAg
KiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBwb3BTY29wZSgpIHsKLSAg
ICAgICAgc2NvcGVTdGFjay5wb3AoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZWNsYXJl
cyB0aGUgZ2l2ZW4gbmFtZXMgaW4gdGhlIHRvcG1vc3Qgc2NvcGUgb2JqZWN0LgotICAgICAqIEBw
YXJhbSB7W1N0cmluZ119IG5hbWVzIEEgbGlzdCBvZiBuYW1lcyB0byBkZWNsYXJlLgotICAgICAq
IEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIGRlY2xhcmUobmFtZXMpIHsK
LSAgICAgICAgW10ucHVzaC5hcHBseShzY29wZVN0YWNrW3Njb3BlU3RhY2subGVuZ3RoIC0gMV0s
IG5hbWVzKTsKLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGlj
IEFQSQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIGZ1bmN0aW9uIGZ1bmN0aW9uSGFu
ZGxlcihub2RlKSB7Ci0gICAgICAgIHB1c2hTY29wZSgpOwotICAgICAgICBkZWNsYXJlKG5vZGUu
cGFyYW1zLm1hcChmdW5jdGlvbihpZCkgewotICAgICAgICAgICAgcmV0dXJuIGlkLm5hbWU7Ci0g
ICAgICAgIH0pKTsKLSAgICAgICAgZGVjbGFyZShub2RlLmlkID8gW25vZGUuaWQubmFtZV0gOiBb
XSk7Ci0gICAgICAgIGRlY2xhcmUoWyJhcmd1bWVudHMiXSk7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gdmFyaWFibGVEZWNsYXJhdGlvbkhhbmRsZXIobm9kZSkgewotICAgICAgICBkZWNsYXJlKG5v
ZGUuZGVjbGFyYXRpb25zLm1hcChmdW5jdGlvbihkZWNsKSB7Ci0gICAgICAgICAgICByZXR1cm4g
ZGVjbC5pZC5uYW1lOwotICAgICAgICB9KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAg
ICAgIlByb2dyYW0iOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHNjb3BlU3RhY2sgPSBbY29u
dGV4dC5nZXRTY29wZSgpLnZhcmlhYmxlcy5tYXAoZnVuY3Rpb24odikgewotICAgICAgICAgICAg
ICAgIHJldHVybiB2Lm5hbWU7Ci0gICAgICAgICAgICB9KV07Ci0gICAgICAgIH0sCi0KLSAgICAg
ICAgIkJsb2NrU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgdmFyIHN0
YXRlbWVudHMgPSBub2RlLmJvZHk7Ci0gICAgICAgICAgICBwdXNoU2NvcGUoKTsKLSAgICAgICAg
ICAgIHN0YXRlbWVudHMuZm9yRWFjaChmdW5jdGlvbihzdG10KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHN0bXQudHlwZSA9PT0gIlZhcmlhYmxlRGVjbGFyYXRpb24iKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb25IYW5kbGVyKHN0bXQpOwotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoc3RtdC50eXBlID09PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZGVjbGFyZShbc3RtdC5pZC5uYW1lXSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgIkJsb2NrU3RhdGVtZW50
OmV4aXQiOiBwb3BTY29wZSwKLQotICAgICAgICAiQ2F0Y2hDbGF1c2UiOiBmdW5jdGlvbihub2Rl
KSB7Ci0gICAgICAgICAgICBwdXNoU2NvcGUoKTsKLSAgICAgICAgICAgIGRlY2xhcmUoW25vZGUu
cGFyYW0ubmFtZV0pOwotICAgICAgICB9LAotICAgICAgICAiQ2F0Y2hDbGF1c2U6ZXhpdCI6IHBv
cFNjb3BlLAotCi0gICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogZnVuY3Rpb25IYW5kbGVy
LAotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0IjogcG9wU2NvcGUsCi0KLSAgICAg
ICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uSGFuZGxlciwKLSAgICAgICAgIkZ1bmN0
aW9uRXhwcmVzc2lvbjpleGl0IjogcG9wU2NvcGUsCi0KLSAgICAgICAgIkZvclN0YXRlbWVudCI6
IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHB1c2hTY29wZSgpOwotICAgICAgICAgICAg
aWYgKG5vZGUuaW5pdCAmJiBub2RlLmluaXQudHlwZSA9PT0gIlZhcmlhYmxlRGVjbGFyYXRpb24i
KSB7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvbkhhbmRsZXIobm9kZS5pbml0
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkZvclN0YXRlbWVudDpleGl0
IjogcG9wU2NvcGUsCi0KLSAgICAgICAgIkZvckluU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkg
ewotICAgICAgICAgICAgcHVzaFNjb3BlKCk7Ci0gICAgICAgICAgICBpZiAobm9kZS5sZWZ0LnR5
cGUgPT09ICJWYXJpYWJsZURlY2xhcmF0aW9uIikgewotICAgICAgICAgICAgICAgIHZhcmlhYmxl
RGVjbGFyYXRpb25IYW5kbGVyKG5vZGUubGVmdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0s
Ci0gICAgICAgICJGb3JJblN0YXRlbWVudDpleGl0IjogcG9wU2NvcGUsCi0KLSAgICAgICAgIklk
ZW50aWZpZXIiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YXIgYW5jZXN0b3IgPSBj
b250ZXh0LmdldEFuY2VzdG9ycygpLnBvcCgpOwotICAgICAgICAgICAgaWYgKGlzRGVjbGFyYXRp
b24obm9kZSwgYW5jZXN0b3IpIHx8IGlzUHJvcGVydHkobm9kZSwgYW5jZXN0b3IpKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDAsIGwgPSBzY29wZVN0YWNrLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgICAg
ICAgIGlmIChzY29wZVN0YWNrW2ldLmluZGV4T2Yobm9kZS5uYW1lKSA+IC0xKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJcIiIgKyBub2RlLm5hbWUgKyAiXCIg
dXNlZCBvdXRzaWRlIG9mIGJpbmRpbmcgY29udGV4dC4iKTsKLSAgICAgICAgfQotICAgIH07Ci0K
LX07Ci0KLX0se31dLDE0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgot
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgYmxvY2sgc3RhdGVtZW50cyB0aGF0IGRvIG5v
dCB1c2UgdGhlIG9uZSB0cnVlIGJyYWNlIHN0eWxlCi0gKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4g
TXllcnMKLSAqLwotCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotICAgIHZhciBzdHlsZSA9IGNvbnRleHQub3B0aW9u
c1swXSB8fCAiMXRicyI7Ci0gICAgdmFyIHBhcmFtcyA9IGNvbnRleHQub3B0aW9uc1sxXSB8fCB7
fTsKLQotICAgIHZhciBPUEVOX01FU1NBR0UgPSAiT3BlbmluZyBjdXJseSBicmFjZSBkb2VzIG5v
dCBhcHBlYXIgb24gdGhlIHNhbWUgbGluZSBhcyBjb250cm9sbGluZyBzdGF0ZW1lbnQuIiwKLSAg
ICAgICAgQk9EWV9NRVNTQUdFID0gIlN0YXRlbWVudCBpbnNpZGUgb2YgY3VybHkgYnJhY2VzIHNo
b3VsZCBiZSBvbiBuZXh0IGxpbmUuIiwKLSAgICAgICAgQ0xPU0VfTUVTU0FHRSA9ICJDbG9zaW5n
IGN1cmx5IGJyYWNlIGRvZXMgbm90IGFwcGVhciBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBzdWJz
ZXF1ZW50IGJsb2NrLiIsCi0gICAgICAgIENMT1NFX01FU1NBR0VfU0lOR0xFID0gIkNsb3Npbmcg
Y3VybHkgYnJhY2Ugc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGxpbmUgYXMgb3BlbmluZyBjdXJseSBi
cmFjZSBvciBvbiB0aGUgbGluZSBhZnRlciB0aGUgcHJldmlvdXMgYmxvY2suIiwKLSAgICAgICAg
Q0xPU0VfTUVTU0FHRV9TVFJPVVNUUlVQID0gIkNsb3NpbmcgY3VybHkgYnJhY2UgYXBwZWFycyBv
biB0aGUgc2FtZSBsaW5lIGFzIHRoZSBzdWJzZXF1ZW50IGJsb2NrLiI7Ci0KLSAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICAgIC8qKgotICAgICAqIEJpbmRzIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHRvIGEgZnVuY3Rpb24g
dGhhdCB2ZXJpZmllcyB0aGF0IHRoZSBvcGVuaW5nCi0gICAgICogY3VybHkgYnJhY2UgaXMgb24g
dGhlIHNhbWUgbGluZSBhcyBpdHMgY29udHJvbGxpbmcgc3RhdGVtZW50IG9mIGEgZ2l2ZW4KLSAg
ICAgKiBub2RlLgotICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBUaGUgcHJvcGVydGllcyB0byBj
aGVjayBvbiB0aGUgbm9kZS4KLSAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24g
dGhhdCB3aWxsIHBlcmZvcm0gdGhlIGNoZWNrIG9uIGEgbm9kZQotICAgICAqLwotICAgIGZ1bmN0
aW9uIGNoZWNrQmxvY2soKSB7Ci0gICAgICAgIHZhciBibG9ja1Byb3BlcnRpZXMgPSBhcmd1bWVu
dHM7Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBbXS5mb3JF
YWNoLmNhbGwoYmxvY2tQcm9wZXJ0aWVzLCBmdW5jdGlvbihibG9ja1Byb3ApIHsKLSAgICAgICAg
ICAgICAgICB2YXIgYmxvY2sgPSBub2RlW2Jsb2NrUHJvcF0sIHByZXZpb3VzVG9rZW4sIGN1cmx5
VG9rZW4sIGN1cmx5VG9rZW5FbmQsIGN1cmx5VG9rZW5zT25TYW1lTGluZTsKLSAgICAgICAgICAg
ICAgICBibG9jayA9IG5vZGVbYmxvY2tQcm9wXTsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2sg
JiYgYmxvY2sudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50IikgewotICAgICAgICAgICAgICAgICAg
ICBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShibG9jayk7Ci0gICAgICAg
ICAgICAgICAgICAgIGN1cmx5VG9rZW4gPSBjb250ZXh0LmdldEZpcnN0VG9rZW4oYmxvY2spOwot
ICAgICAgICAgICAgICAgICAgICBjdXJseVRva2VuRW5kID0gY29udGV4dC5nZXRMYXN0VG9rZW4o
YmxvY2spOwotICAgICAgICAgICAgICAgICAgICBjdXJseVRva2Vuc09uU2FtZUxpbmUgPSBjdXJs
eVRva2VuLmxvYy5zdGFydC5saW5lID09PSBjdXJseVRva2VuRW5kLmxvYy5zdGFydC5saW5lOwot
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1Rva2VuLmxvYy5zdGFydC5saW5lICE9
PSBjdXJseVRva2VuLmxvYy5zdGFydC5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCBPUEVOX01FU1NBR0UpOwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGJsb2NrLmJvZHkubGVuZ3RoICYmIHBhcmFtcy5hbGxvd1NpbmdsZUxpbmUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJseVRva2VuLmxvYy5zdGFydC5saW5lID09
PSBibG9jay5ib2R5WzBdLmxvYy5zdGFydC5saW5lICYmICFjdXJseVRva2Vuc09uU2FtZUxpbmUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChibG9jay5ib2R5
WzBdLCBCT0RZX01FU1NBR0UpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChj
dXJseVRva2VuRW5kLmxvYy5zdGFydC5saW5lID09PSBibG9jay5ib2R5W2Jsb2NrLmJvZHkubGVu
Z3RoIC0gMV0ubG9jLnN0YXJ0LmxpbmUgJiYgIWN1cmx5VG9rZW5zT25TYW1lTGluZSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGJsb2NrLmJvZHlbYmxvY2su
Ym9keS5sZW5ndGggLSAxXSwgQ0xPU0VfTUVTU0FHRV9TSU5HTEUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJsb2NrLmJvZHkubGVu
Z3RoICYmIGN1cmx5VG9rZW4ubG9jLnN0YXJ0LmxpbmUgPT09IGJsb2NrLmJvZHlbMF0ubG9jLnN0
YXJ0LmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGJsb2Nr
LmJvZHlbMF0sIEJPRFlfTUVTU0FHRSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICAvKioK
LSAgICAgKiBFbmZvcmNlcyB0aGUgY29uZmlndXJlZCBicmFjZSBzdHlsZSBvbiBJZlN0YXRlbWVu
dHMKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgQW4gSWZTdGF0ZW1lbnQgbm9kZS4KLSAg
ICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBjaGVja0lmU3RhdGVt
ZW50KG5vZGUpIHsKLSAgICAgICAgdmFyIHRva2VuczsKLQotICAgICAgICBjaGVja0Jsb2NrKCJj
b25zZXF1ZW50IiwgImFsdGVybmF0ZSIpKG5vZGUpOwotCi0gICAgICAgIGlmIChub2RlLmFsdGVy
bmF0ZSAmJiBub2RlLmFsdGVybmF0ZS50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiKSB7Ci0gICAg
ICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vuc0JlZm9yZShub2RlLmFsdGVybmF0ZSwg
Mik7Ci0gICAgICAgICAgICBpZiAoc3R5bGUgPT09ICIxdGJzIikgewotICAgICAgICAgICAgICAg
IGlmICh0b2tlbnNbMF0ubG9jLnN0YXJ0LmxpbmUgIT09IHRva2Vuc1sxXS5sb2Muc3RhcnQubGlu
ZSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLmFsdGVybmF0ZSwg
Q0xPU0VfTUVTU0FHRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlm
IChzdHlsZSA9PT0gInN0cm91c3RydXAiKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2Vuc1sw
XS5sb2Muc3RhcnQubGluZSA9PT0gdG9rZW5zWzFdLmxvYy5zdGFydC5saW5lKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUuYWx0ZXJuYXRlLCBDTE9TRV9NRVNTQUdF
X1NUUk9VU1RSVVApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEVuZm9yY2VzIHRoZSBjb25maWd1cmVkIGJyYWNl
IHN0eWxlIG9uIFRyeVN0YXRlbWVudHMKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgQSBU
cnlTdGF0ZW1lbnQgbm9kZS4KLSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKi8KLSAgICBm
dW5jdGlvbiBjaGVja1RyeVN0YXRlbWVudChub2RlKSB7Ci0gICAgICAgIHZhciB0b2tlbnM7Ci0K
LSAgICAgICAgY2hlY2tCbG9jaygiYmxvY2siLCAiZmluYWxpemVyIikobm9kZSk7Ci0KLSAgICAg
ICAgaWYgKG5vZGUuZmluYWxpemVyICYmIG5vZGUuZmluYWxpemVyLnR5cGUgPT09ICJCbG9ja1N0
YXRlbWVudCIpIHsKLSAgICAgICAgICAgIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zQmVmb3Jl
KG5vZGUuZmluYWxpemVyLCAyKTsKLSAgICAgICAgICAgIGlmIChzdHlsZSA9PT0gIjF0YnMiKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHRva2Vuc1swXS5sb2Muc3RhcnQubGluZSAhPT0gdG9rZW5z
WzFdLmxvYy5zdGFydC5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUuZmluYWxpemVyLCBDTE9TRV9NRVNTQUdFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKHN0eWxlID09PSAic3Ryb3VzdHJ1cCIpIHsKLSAgICAgICAgICAg
ICAgICBpZiAodG9rZW5zWzBdLmxvYy5zdGFydC5saW5lID09PSB0b2tlbnNbMV0ubG9jLnN0YXJ0
LmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZS5maW5hbGl6
ZXIsIENMT1NFX01FU1NBR0VfU1RST1VTVFJVUCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRW5mb3JjZXMgdGhl
IGNvbmZpZ3VyZWQgYnJhY2Ugc3R5bGUgb24gQ2F0Y2hDbGF1c2VzCi0gICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIEEgQ2F0Y2hDbGF1c2Ugbm9kZS4KLSAgICAgKiBAcmV0dXJucyB7dm9pZH0K
LSAgICAgKi8KLSAgICBmdW5jdGlvbiBjaGVja0NhdGNoQ2xhdXNlKG5vZGUpIHsKLSAgICAgICAg
dmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUpLAotICAgICAg
ICAgICAgZmlyc3RUb2tlbiA9IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbihub2RlKTsKLQotICAgICAg
ICBjaGVja0Jsb2NrKCJib2R5Iikobm9kZSk7Ci0KLSAgICAgICAgaWYgKG5vZGUuYm9keSAmJiBu
b2RlLmJvZHkudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50IikgewotICAgICAgICAgICAgaWYgKHN0
eWxlID09PSAiMXRicyIpIHsKLSAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNUb2tlbi5sb2Mu
c3RhcnQubGluZSAhPT0gZmlyc3RUb2tlbi5sb2Muc3RhcnQubGluZSkgewotICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBDTE9TRV9NRVNTQUdFKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0eWxlID09PSAic3Ryb3VzdHJ1cCIpIHsK
LSAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNUb2tlbi5sb2Muc3RhcnQubGluZSA9PT0gZmly
c3RUb2tlbi5sb2Muc3RhcnQubGluZSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCBDTE9TRV9NRVNTQUdFX1NUUk9VU1RSVVApOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEVuZm9y
Y2VzIHRoZSBjb25maWd1cmVkIGJyYWNlIHN0eWxlIG9uIFN3aXRjaFN0YXRlbWVudHMKLSAgICAg
KiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgQSBTd2l0Y2hTdGF0ZW1lbnQgbm9kZS4KLSAgICAgKiBA
cmV0dXJucyB7dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBjaGVja1N3aXRjaFN0YXRlbWVu
dChub2RlKSB7Ci0gICAgICAgIHZhciB0b2tlbnM7Ci0gICAgICAgIGlmIChub2RlLmNhc2VzICYm
IG5vZGUuY2FzZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldFRv
a2Vuc0JlZm9yZShub2RlLmNhc2VzWzBdLCAyKTsKLSAgICAgICAgICAgIGlmICh0b2tlbnNbMF0u
bG9jLnN0YXJ0LmxpbmUgIT09IHRva2Vuc1sxXS5sb2Muc3RhcnQubGluZSkgewotICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIE9QRU5fTUVTU0FHRSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldExhc3RU
b2tlbnMobm9kZSwgMyk7Ci0gICAgICAgICAgICBpZiAodG9rZW5zWzBdLmxvYy5zdGFydC5saW5l
ICE9PSB0b2tlbnNbMV0ubG9jLnN0YXJ0LmxpbmUpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCBPUEVOX01FU1NBR0UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYyBBUEkKLSAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICByZXR1cm4gewotICAgICAgICAiRnVuY3Rpb25EZWNs
YXJhdGlvbiI6IGNoZWNrQmxvY2soImJvZHkiKSwKLSAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lv
biI6IGNoZWNrQmxvY2soImJvZHkiKSwKLSAgICAgICAgIklmU3RhdGVtZW50IjogY2hlY2tJZlN0
YXRlbWVudCwKLSAgICAgICAgIlRyeVN0YXRlbWVudCI6IGNoZWNrVHJ5U3RhdGVtZW50LAotICAg
ICAgICAiQ2F0Y2hDbGF1c2UiOiBjaGVja0NhdGNoQ2xhdXNlLAotICAgICAgICAiRG9XaGlsZVN0
YXRlbWVudCI6IGNoZWNrQmxvY2soImJvZHkiKSwKLSAgICAgICAgIldoaWxlU3RhdGVtZW50Ijog
Y2hlY2tCbG9jaygiYm9keSIpLAotICAgICAgICAiV2l0aFN0YXRlbWVudCI6IGNoZWNrQmxvY2so
ImJvZHkiKSwKLSAgICAgICAgIkZvclN0YXRlbWVudCI6IGNoZWNrQmxvY2soImJvZHkiKSwKLSAg
ICAgICAgIkZvckluU3RhdGVtZW50IjogY2hlY2tCbG9jaygiYm9keSIpLAotICAgICAgICAiU3dp
dGNoU3RhdGVtZW50IjogY2hlY2tTd2l0Y2hTdGF0ZW1lbnQKLSAgICB9OwotCi19OwotCi19LHt9
XSwxNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3Zl
cnZpZXcgUnVsZSB0byBmbGFnIG5vbi1jYW1lbGNhc2VkIGlkZW50aWZpZXJzCi0gKiBAYXV0aG9y
IE5pY2hvbGFzIEMuIFpha2FzCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1
bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICAgIC8qKgotICAgICAqIENoZWNrcyBpZiBhIHN0cmluZyBjb250YWlucyBhbiB1bmRlcnNjb3Jl
IGFuZCBpc24ndCBhbGwgdXBwZXItY2FzZQotICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRo
ZSBzdHJpbmcgdG8gY2hlY2suCi0gICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIHRoZSBzdHJp
bmcgaXMgdW5kZXJzY29yZWQKLSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIGZ1bmN0aW9u
IGlzVW5kZXJzY29yZWQobmFtZSkgewotCi0gICAgICAgIC8vIGlmIHRoZXJlJ3MgYW4gdW5kZXJz
Y29yZSwgaXQgbWlnaHQgYmUgQV9DT05TVEFOVCwgd2hpY2ggaXMgb2theQotICAgICAgICByZXR1
cm4gbmFtZS5pbmRleE9mKCJfIikgPiAtMSAmJiBuYW1lICE9PSBuYW1lLnRvVXBwZXJDYXNlKCk7
Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVwb3J0cyBhbiBBU1Qgbm9kZSBhcyBhIHJ1bGUg
dmlvbGF0aW9uLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZXBv
cnQuCi0gICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICogQHByaXZhdGUKLSAgICAgKi8KLSAg
ICBmdW5jdGlvbiByZXBvcnQobm9kZSkgewotICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
SWRlbnRpZmllciAne3tuYW1lfX0nIGlzIG5vdCBpbiBjYW1lbCBjYXNlLiIsIHsgbmFtZTogbm9k
ZS5uYW1lIH0pOwotICAgIH0KLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIklkZW50aWZpZXIi
OiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIC8vIExlYWRpbmcgYW5kIHRyYWlsaW5n
IHVuZGVyc2NvcmVzIGFyZSBjb21tb25seSB1c2VkIHRvIGZsYWcgcHJpdmF0ZS9wcm90ZWN0ZWQg
aWRlbnRpZmllcnMsIHN0cmlwIHRoZW0KLSAgICAgICAgICAgIHZhciBuYW1lID0gbm9kZS5uYW1l
LnJlcGxhY2UoL15fK3xfKyQvZywgIiIpLAotICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVBhcmVu
dCA9IChub2RlLnBhcmVudC50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIpID8gbm9kZS5wYXJl
bnQucGFyZW50IDogbm9kZS5wYXJlbnQ7Ci0KLSAgICAgICAgICAgIC8vIE1lbWJlckV4cHJlc3Np
b25zIGdldCBzcGVjaWFsIHJ1bGVzCi0gICAgICAgICAgICBpZiAobm9kZS5wYXJlbnQudHlwZSA9
PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBBbHdheXMgcmVw
b3J0IHVuZGVyc2NvcmVkIG9iamVjdCBuYW1lcwotICAgICAgICAgICAgICAgIGlmIChub2RlLnBh
cmVudC5vYmplY3QudHlwZSA9PT0gIklkZW50aWZpZXIiICYmCi0gICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLnBhcmVudC5vYmplY3QubmFtZSA9PT0gbm9kZS5uYW1lICYmCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpc1VuZGVyc2NvcmVkKG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlcG9ydChub2RlKTsKLQotICAgICAgICAgICAgICAgIC8vIFJlcG9ydCBBc3NpZ25tZW50RXhw
cmVzc2lvbnMgb25seSBpZiB0aGV5IGFyZSB0aGUgbGVmdCBzaWRlIG9mIHRoZSBhc3NpZ25tZW50
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlZmZlY3RpdmVQYXJlbnQudHlwZSA9PT0gIkFz
c2lnbm1lbnRFeHByZXNzaW9uIiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgaXNVbmRlcnNj
b3JlZChuYW1lKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgKGVmZmVjdGl2ZVBhcmVudC5y
aWdodC50eXBlICE9PSAiTWVtYmVyRXhwcmVzc2lvbiIgfHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVmZmVjdGl2ZVBhcmVudC5sZWZ0LnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIiAmJgot
ICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlUGFyZW50LmxlZnQucHJvcGVydHkubmFt
ZSA9PT0gbm9kZS5uYW1lKSkgewotICAgICAgICAgICAgICAgICAgICByZXBvcnQobm9kZSk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBSZXBvcnQgYW55dGhpbmcgdGhhdCBp
cyB1bmRlcnNjb3JlZCB0aGF0IGlzbid0IGEgQ2FsbEV4cHJlc3Npb24KLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXNVbmRlcnNjb3JlZChuYW1lKSAmJiBlZmZlY3RpdmVQYXJlbnQudHlwZSAhPT0g
IkNhbGxFeHByZXNzaW9uIikgewotICAgICAgICAgICAgICAgIHJlcG9ydChub2RlKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDE2OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBDb21tYSBzcGFj
aW5nIC0gdmFsaWRhdGVzIHNwYWNpbmcgYmVmb3JlIGFuZCBhZnRlciBjb21tYQotICogQGF1dGhv
ciBWaWduZXNoIEFuYW5kIGFrYSB2ZWdldGFibGVtYW4uCi0gKiBAY29weXJpZ2h0IDIwMTQgVmln
bmVzaCBBbmFuZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotInVzZSBzdHJpY3QiOwotCi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLSAgICB2
YXIgb3B0aW9ucyA9IHsKLSAgICAgICAgYmVmb3JlOiBjb250ZXh0Lm9wdGlvbnNbMF0gPyAhIWNv
bnRleHQub3B0aW9uc1swXS5iZWZvcmUgOiBmYWxzZSwKLSAgICAgICAgYWZ0ZXI6IGNvbnRleHQu
b3B0aW9uc1swXSA/ICEhY29udGV4dC5vcHRpb25zWzBdLmFmdGVyIDogdHJ1ZQotICAgIH07Ci0K
LSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycwotICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIERldGVybWluZXMgd2hldGhlciB0d28gYWRqYWNl
bnQgdG9rZW5zIGhhdmUgd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZW0uCi0gICAgICogQHBhcmFtIHtP
YmplY3R9IGxlZnQgLSBUaGUgbGVmdCB0b2tlbiBvYmplY3QuCi0gICAgICogQHBhcmFtIHtPYmpl
Y3R9IHJpZ2h0IC0gVGhlIHJpZ2h0IHRva2VuIG9iamVjdC4KLSAgICAgKiBAcmV0dXJucyB7Ym9v
bGVhbn0gV2hldGhlciBvciBub3QgdGhlcmUgaXMgc3BhY2UgYmV0d2VlbiB0aGUgdG9rZW5zLgot
ICAgICAqLwotICAgIGZ1bmN0aW9uIGlzU3BhY2VkKGxlZnQsIHJpZ2h0KSB7Ci0gICAgICAgIHJl
dHVybiBsZWZ0LnJhbmdlWzFdIDwgcmlnaHQucmFuZ2VbMF07Ci0gICAgfQotCi0gICAgLyoqCi0g
ICAgICogUnVuIHJlcG9ydC4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIGJpbmFy
eSBleHByZXNzaW9uIG5vZGUgdG8gY2hlY2suCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG1zZyBU
aGUgZXJyb3IgbXNnIHRvIHNob3cuCi0gICAgICogQHByaXZhdGUKLSAgICAgKiBAcmV0dXJucyB7
dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiByZXBvcnQobm9kZSwgbXNnKSB7Ci0gICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsIG1zZyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2hv
dyBzcGFjZSByZXF1aXJlZCBtZXNzYWdlLgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkaXIgVGhl
IGxvY2F0aW9uIG9mIHNwYWNpbmcuCi0gICAgICogQHByaXZhdGUKLSAgICAgKiBAcmV0dXJucyB7
c3RyaW5nfSBUaGUgc3BhY2luZyBlcnJvciBtc2cuCi0gICAgICovCi0gICAgZnVuY3Rpb24gZ2V0
U3BhY2VSZXFNc2coZGlyKSB7Ci0gICAgICAgIHJldHVybiAiQSBzcGFjZSBpcyByZXF1aXJlZCAi
ICsgZGlyICsgIiAnLCcuIjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTaG93IG5vIHNwYWNl
IG1lc3NhZ2UuCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGRpciBUaGUgbG9jYXRpb24gb2Ygc3Bh
Y2luZwotICAgICAqIEBwcml2YXRlCi0gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHNwYWNp
bmcgZXJyb3IgbXNnLgotICAgICAqLwotICAgIGZ1bmN0aW9uIGdldE5vU3BhY2VNc2coZGlyKSB7
Ci0gICAgICAgIHJldHVybiAiVGhlcmUgc2hvdWxkIGJlIG5vIHNwYWNlICIgKyBkaXIgKyAiICcs
Jy4iOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFZhbGlkYXRlcyB0aGUgc3BhY2luZyBiZWZv
cmUgYW5kIGFmdGVyIGNvbW1hcy4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIGJp
bmFyeSBleHByZXNzaW9uIG5vZGUgdG8gY2hlY2suCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHBy
b3BlcnR5IFRoZSBwcm9wZXJ0eSBvZiB0aGUgbm9kZS4KLSAgICAgKiBAcHJpdmF0ZQotICAgICAq
IEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIHZhbGlkYXRlQ29tbWFTcGFj
aW5nKG5vZGUsIHByb3BlcnR5KSB7Ci0gICAgICAgIHZhciBpdGVtcyA9IG5vZGVbcHJvcGVydHld
OwotCi0gICAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGggPiAxKSB7Ci0gICAgICAgICAg
ICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHRva2VuQmVmb3JlID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShpdGVtKSwKLSAgICAgICAg
ICAgICAgICAgICAgaXRlbUJlZm9yZSA9IGl0ZW1zW2luZGV4IC0gMV0sCi0gICAgICAgICAgICAg
ICAgICAgIHRva2VuRW5kTGluZTsKLQotICAgICAgICAgICAgICAgIGlmICh0b2tlbkJlZm9yZSAm
JiB0b2tlbkJlZm9yZS52YWx1ZSA9PT0gIiwiKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRva2Vu
RW5kTGluZSA9IHRva2VuQmVmb3JlLmxvYy5lbmQubGluZTsKLQotICAgICAgICAgICAgICAgICAg
ICAvLyBzaW5nbGUgbGluZQotICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5FbmRMaW5lID09
PSBpdGVtQmVmb3JlLmxvYy5lbmQubGluZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW5FbmRMaW5lID09PSBpdGVtLmxvYy5zdGFydC5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAob3B0aW9ucy5iZWZvcmUgJiYgb3B0aW9ucy5hZnRlcikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZWQoaXRlbUJlZm9yZSwgdG9rZW5CZWZvcmUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydChpdGVtLCBnZXRTcGFjZVJl
cU1zZygiYmVmb3JlIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2VkKHRva2VuQmVmb3JlLCBpdGVtKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQoaXRlbSwgZ2V0U3BhY2VSZXFN
c2coImFmdGVyIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5iZWZvcmUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWlzU3BhY2VkKGl0ZW1CZWZvcmUsIHRva2VuQmVmb3JlKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQoaXRlbSwgZ2V0U3BhY2VSZXFN
c2coImJlZm9yZSIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzU3BhY2VkKHRva2VuQmVmb3JlLCBpdGVtKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQoaXRlbSwgZ2V0Tm9TcGFjZU1zZygi
YWZ0ZXIiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmFmdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc1NwYWNlZCh0b2tlbkJlZm9yZSwgaXRlbSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldFNwYWNlUmVxTXNnKCJhZnRlciIp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzU3BhY2VkKGl0ZW1CZWZvcmUsIHRva2VuQmVmb3JlKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQoaXRlbSwgZ2V0Tm9TcGFjZU1zZygiYmVmb3Jl
IikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3BhY2VkKGl0
ZW1CZWZvcmUsIHRva2VuQmVmb3JlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXBvcnQoaXRlbSwgZ2V0Tm9TcGFjZU1zZygiYmVmb3JlIikpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTcGFjZWQo
dG9rZW5CZWZvcmUsIGl0ZW0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cG9ydChpdGVtLCBnZXROb1NwYWNlTXNnKCJhZnRlciIpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMKLSAgICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSAgICByZXR1cm4gewotICAgICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6
IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZhbGlkYXRlQ29tbWFTcGFjaW5nKG5vZGUs
ICJkZWNsYXJhdGlvbnMiKTsKLSAgICAgICAgfSwKLSAgICAgICAgIk9iamVjdEV4cHJlc3Npb24i
OiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YWxpZGF0ZUNvbW1hU3BhY2luZyhub2Rl
LCAicHJvcGVydGllcyIpOwotICAgICAgICB9LAotICAgICAgICAiQXJyYXlFeHByZXNzaW9uIjog
ZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgdmFsaWRhdGVDb21tYVNwYWNpbmcobm9kZSwg
ImVsZW1lbnRzIik7Ci0gICAgICAgIH0sCi0gICAgICAgICJTZXF1ZW5jZUV4cHJlc3Npb24iOiBm
dW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YWxpZGF0ZUNvbW1hU3BhY2luZyhub2RlLCAi
ZXhwcmVzc2lvbnMiKTsKLSAgICAgICAgfSwKLSAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6
IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZhbGlkYXRlQ29tbWFTcGFjaW5nKG5vZGUs
ICJwYXJhbXMiKTsKLSAgICAgICAgfSwKLSAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBm
dW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YWxpZGF0ZUNvbW1hU3BhY2luZyhub2RlLCAi
cGFyYW1zIik7Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSwxNzpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgQ29tbWEgc3R5
bGUgLSBlbmZvcmNlcyBjb21tYSBzdHlsZXMgb2YgdHdvIHR5cGVzOiBsYXN0IGFuZCBmaXJzdAot
ICogQGF1dGhvciBWaWduZXNoIEFuYW5kIGFrYSB2ZWdldGFibGVtYW4KLSAqIEBjb3B5cmlnaHQg
MjAxNCBWaWduZXNoIEFuYW5kLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICovCi0KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBz
dHJpY3QiOwotCi0gICAgdmFyIHN0eWxlID0gY29udGV4dC5vcHRpb25zWzBdIHx8ICJsYXN0IjsK
LQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIHRoZSBjb21tYSBwbGFjZW1lbnQg
d2l0aCByZWdhcmRzIHRvIGEgZGVjbGFyYXRpb24vcHJvcGVydHkvZWxlbWVudAotICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgYmluYXJ5IGV4cHJlc3Npb24gbm9kZSB0byBjaGVjawot
ICAgICAqIEBwcml2YXRlCi0gICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAgZnVu
Y3Rpb24gdmFsaWRhdGVDb21tYShub2RlKSB7Ci0gICAgICAgIHZhciBpdGVtcyA9IG5vZGUuZGVj
bGFyYXRpb25zIHx8IG5vZGUucHJvcGVydGllcyB8fCBub2RlLmVsZW1lbnRzOwotCi0gICAgICAg
IGlmIChpdGVtcy5sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0
aW9uKGl0ZW0sIGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRva2VuQmVmb3JlID0gY29u
dGV4dC5nZXRUb2tlbkJlZm9yZShpdGVtKSwKLSAgICAgICAgICAgICAgICAgICAgaXRlbUJlZm9y
ZSA9IGl0ZW1zW2luZGV4IC0gMV07Ci0KLSAgICAgICAgICAgICAgICBpZiAodG9rZW5CZWZvcmUu
dmFsdWUgPT09ICIsIikgewotICAgICAgICAgICAgICAgICAgICAvLyBpZiBzaW5nbGUgbGluZQot
ICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5CZWZvcmUubG9jLmVuZC5saW5lID09PSBpdGVt
LmxvYy5zdGFydC5saW5lICYmCi0gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZS5s
b2MuZW5kLmxpbmUgPT09IGl0ZW1CZWZvcmUubG9jLmVuZC5saW5lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgLy8gbG9uZSBjb21tYQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0b2tlbkJl
Zm9yZS5sb2MuZW5kLmxpbmUgIT09IGl0ZW0ubG9jLnN0YXJ0LmxpbmUgJiYKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRva2VuQmVmb3JlLmxvYy5lbmQubGluZSAhPT0gaXRlbUJlZm9yZS5sb2Mu
ZW5kLmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGl0ZW0s
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiB0b2tlbkJlZm9yZS5sb2MuZW5k
LmxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0b2tlbkJlZm9yZS5s
b2Muc3RhcnQuY29sdW1uCi0gICAgICAgICAgICAgICAgICAgICAgICB9LCAiQmFkIGxpbmUgYnJl
YWtpbmcgYmVmb3JlIGFuZCBhZnRlciAnLCcuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUgPT09ICJmaXJzdCIgJiYKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuQmVmb3JlLmxvYy5zdGFydC5saW5lICE9PSBpdGVtLmxvYy5z
dGFydC5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpdGVt
LCAiJywnIHNob3VsZCBiZSBwbGFjZWQgZmlyc3QuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUgPT09ICJsYXN0IiAmJgotICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW5CZWZvcmUubG9jLmVuZC5saW5lID09PSBpdGVtLmxvYy5z
dGFydC5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpdGVt
LCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogaXRlbUJlZm9yZS5sb2MuZW5k
LmxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpdGVtQmVmb3JlLmxv
Yy5lbmQuY29sdW1uCi0gICAgICAgICAgICAgICAgICAgICAgICB9LCAiJywnIHNob3VsZCBiZSBw
bGFjZWQgbGFzdC4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotICAgIC8vIFB1YmxpYwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVy
biB7Ci0gICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogdmFsaWRhdGVDb21tYSwKLSAgICAg
ICAgIk9iamVjdEV4cHJlc3Npb24iOiB2YWxpZGF0ZUNvbW1hLAotICAgICAgICAiQXJyYXlFeHBy
ZXNzaW9uIjogdmFsaWRhdGVDb21tYQotICAgIH07Ci0KLX07Ci0KLX0se31dLDE4OltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBDb3VudHMg
dGhlIGN5Y2xvbWF0aWMgY29tcGxleGl0eSBvZiBlYWNoIGZ1bmN0aW9uIG9mIHRoZSBzY3JpcHQu
IFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0N5Y2xvbWF0aWNfY29tcGxleGl0eS4K
LSAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGlmLCBjb25kaXRpb25hbCwgZm9yLCB3aGlsdGUsIHRy
eSwgc3dpdGNoL2Nhc2UsCi0gKiBAYXV0aG9yIFBhdHJpY2sgQnJvc3NldAotICovCi0KLS8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVz
ZSBzdHJpY3QiOwotCi0gICAgdmFyIFRIUkVTSE9MRCA9IGNvbnRleHQub3B0aW9uc1swXTsKLQot
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gICAgLy8gVXNpbmcgYSBzdGFjayB0byBzdG9yZSBjb21wbGV4aXR5IChoYW5k
bGluZyBuZXN0ZWQgZnVuY3Rpb25zKQotICAgIHZhciBmbnMgPSBbXTsKLQotICAgIC8vIFdoZW4g
cGFyc2luZyBhIG5ldyBmdW5jdGlvbiwgc3RvcmUgaXQgaW4gb3VyIGZ1bmN0aW9uIHN0YWNrCi0g
ICAgZnVuY3Rpb24gc3RhcnRGdW5jdGlvbigpIHsKLSAgICAgICAgZm5zLnB1c2goMSk7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gZW5kRnVuY3Rpb24obm9kZSkgewotICAgICAgICB2YXIgY29tcGxl
eGl0eSA9IGZucy5wb3AoKSwgbmFtZSA9ICJhbm9ueW1vdXMiOwotCi0gICAgICAgIGlmIChub2Rl
LmlkKSB7Ci0gICAgICAgICAgICBuYW1lID0gbm9kZS5pZC5uYW1lOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChjb21wbGV4aXR5ID4gVEhSRVNIT0xEKSB7Ci0gICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiRnVuY3Rpb24gJ3t7bmFtZX19JyBoYXMgYSBjb21wbGV4aXR5IG9mIHt7Y29t
cGxleGl0eX19LiIsIHsgbmFtZTogbmFtZSwgY29tcGxleGl0eTogY29tcGxleGl0eSB9KTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGluY3JlYXNlQ29tcGxleGl0eSgpIHsKLSAg
ICAgICAgaWYgKGZucy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGZuc1tmbnMubGVuZ3RoIC0gMV0g
Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpbmNyZWFzZVN3aXRjaENvbXBs
ZXhpdHkobm9kZSkgewotICAgICAgICAvLyBBdm9pZGluZyBgZGVmYXVsdGAKLSAgICAgICAgaWYg
KG5vZGUudGVzdCkgewotICAgICAgICAgICAgaW5jcmVhc2VDb21wbGV4aXR5KG5vZGUpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaW5jcmVhc2VMb2dpY2FsQ29tcGxleGl0eShu
b2RlKSB7Ci0gICAgICAgIC8vIEF2b2lkaW5nICYmCi0gICAgICAgIGlmIChub2RlLm9wZXJhdG9y
ID09PSAifHwiKSB7Ci0gICAgICAgICAgICBpbmNyZWFzZUNvbXBsZXhpdHkobm9kZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljIEFQ
SQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJGdW5j
dGlvbkRlY2xhcmF0aW9uIjogc3RhcnRGdW5jdGlvbiwKLSAgICAgICAgIkZ1bmN0aW9uRXhwcmVz
c2lvbiI6IHN0YXJ0RnVuY3Rpb24sCi0gICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQi
OiBlbmRGdW5jdGlvbiwKLSAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZW5kRnVu
Y3Rpb24sCi0KLSAgICAgICAgIkNhdGNoQ2xhdXNlIjogaW5jcmVhc2VDb21wbGV4aXR5LAotICAg
ICAgICAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIjogaW5jcmVhc2VDb21wbGV4aXR5LAotICAgICAg
ICAiTG9naWNhbEV4cHJlc3Npb24iOiBpbmNyZWFzZUxvZ2ljYWxDb21wbGV4aXR5LAotICAgICAg
ICAiRm9yU3RhdGVtZW50IjogaW5jcmVhc2VDb21wbGV4aXR5LAotICAgICAgICAiRm9ySW5TdGF0
ZW1lbnQiOiBpbmNyZWFzZUNvbXBsZXhpdHksCi0gICAgICAgICJJZlN0YXRlbWVudCI6IGluY3Jl
YXNlQ29tcGxleGl0eSwKLSAgICAgICAgIlN3aXRjaENhc2UiOiBpbmNyZWFzZVN3aXRjaENvbXBs
ZXhpdHksCi0gICAgICAgICJXaGlsZVN0YXRlbWVudCI6IGluY3JlYXNlQ29tcGxleGl0eSwKLSAg
ICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQiOiBpbmNyZWFzZUNvbXBsZXhpdHkKLSAgICB9OwotCi19
OwotCi19LHt9XSwxOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGNvbnNpc3RlbnQgcmV0dXJuIHZhbHVlcwotICog
QGF1dGhvciBOaWNob2xhcyBDLiBaYWthcwotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgdmFyIGZ1
bmN0aW9ucyA9IFtdOwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEhlbHBlcnMK
LSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBmdW5jdGlvbiBlbnRlckZ1bmN0aW9uKCkg
ewotICAgICAgICBmdW5jdGlvbnMucHVzaCh7fSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZXhp
dEZ1bmN0aW9uKCkgewotICAgICAgICBmdW5jdGlvbnMucG9wKCk7Ci0gICAgfQotCi0KLSAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGVudGVy
RnVuY3Rpb24sCi0gICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBlbnRlckZ1bmN0aW9uLAot
ICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0IjogZXhpdEZ1bmN0aW9uLAotICAgICAg
ICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBleGl0RnVuY3Rpb24sCi0KLSAgICAgICAgIlJl
dHVyblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAgICAgdmFyIHJldHVy
bkluZm8gPSBmdW5jdGlvbnNbZnVuY3Rpb25zLmxlbmd0aCAtIDFdLAotICAgICAgICAgICAgICAg
IHJldHVyblR5cGVEZWZpbmVkID0gInR5cGUiIGluIHJldHVybkluZm87Ci0KLSAgICAgICAgICAg
IGlmIChyZXR1cm5UeXBlRGVmaW5lZCkgewotCi0gICAgICAgICAgICAgICAgaWYgKHJldHVybklu
Zm8udHlwZSAhPT0gISFub2RlLmFyZ3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJFeHBlY3RlZCAiICsgKHJldHVybkluZm8udHlwZSA/ICJhIiA6ICJu
byIpICsgIiByZXR1cm4gdmFsdWUuIik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybkluZm8udHlwZSA9ICEhbm9kZS5hcmd1
bWVudDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0s
MjA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gZW5mb3JjZSBjb25zaXN0ZW50IG5hbWluZyBvZiAidGhpcyIgY29udGV4dCB2
YXJpYWJsZXMKLSAqIEBhdXRob3IgUmFwaGFlbCBQaWd1bGxhCi0gKi8KLSJ1c2Ugc3RyaWN0IjsK
LQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0K
LSAgICByZXR1cm4gewotCi0gICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogZnVuY3Rpb24o
bm9kZSkgewotICAgICAgICAgICAgdmFyIGFsaWFzID0gY29udGV4dC5vcHRpb25zWzBdOwotCi0g
ICAgICAgICAgICBub2RlLmRlY2xhcmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGRlY2xhcmF0aW9u
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLmlkLm5hbWUgPT09IGFsaWFzICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAhKGRlY2xhcmF0aW9uLmluaXQgJiYgZGVjbGFyYXRp
b24uaW5pdC50eXBlID09PSAiVGhpc0V4cHJlc3Npb24iKSkgewotCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICJEZXNpZ25hdGVkICd0aGlzJyBhbGlhcyAne3thbGlhc319JyBp
cyBub3QgYXNzaWduZWQgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIHRoZSBj
dXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0LiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB7IGFs
aWFzOiBkZWNsYXJhdGlvbi5pZC5uYW1lIH0KLSAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoZGVjbGFyYXRpb24uaW5pdCAmJgot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24uaW5pdC50eXBlID09PSAiVGhpc0V4
cHJlc3Npb24iICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5pZC5uYW1l
ICE9PSBhbGlhcykgewotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KAotICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJVbmV4
cGVjdGVkIGFsaWFzICd7e2FsaWFzfX0nIGZvciAndGhpcycuIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsgYWxpYXM6IGRlY2xhcmF0aW9uLmlkLm5hbWUgfQotICAgICAgICAgICAgICAgICAg
ICApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAg
fTsKLQotfTsKLQotfSx7fV0sMjE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewot
LyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBzdGF0ZW1lbnRzIHdpdGhvdXQgY3Vy
bHkgYnJhY2VzCi0gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCi0gKi8KLSJ1c2Ugc3RyaWN0
IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
Ci0KLSAgICB2YXIgbXVsdGlPbmx5ID0gKGNvbnRleHQub3B0aW9uc1swXSA9PT0gIm11bHRpIik7
Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycwotICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyB0aGUgYm9keSBvZiBhIG5vZGUg
dG8gc2VlIGlmIGl0J3MgYSBibG9jayBzdGF0ZW1lbnQuIERlcGVuZGluZyBvbgotICAgICAqIHRo
ZSBydWxlIG9wdGlvbnMsIHJlcG9ydHMgdGhlIGFwcHJvcHJpYXRlIHByb2JsZW1zLgotICAgICAq
IEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZXBvcnQgaWYgdGhlcmUncyBhIHBy
b2JsZW0uCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBib2R5IG5vZGUgdG8gY2hl
Y2sgZm9yIGJsb2Nrcy4KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSB0byBy
ZXBvcnQgaWYgdGhlcmUncyBhIHByb2JsZW0uCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHN1ZmZp
eCBBZGRpdGlvbmFsIHN0cmluZyB0byBhZGQgdG8gdGhlIGVuZCBvZiBhIHJlcG9ydC4KLSAgICAg
KiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBjaGVja0JvZHkobm9kZSwg
Ym9keSwgbmFtZSwgc3VmZml4KSB7Ci0gICAgICAgIHZhciBoYXNCbG9jayA9IChib2R5LnR5cGUg
PT09ICJCbG9ja1N0YXRlbWVudCIpOwotCi0gICAgICAgIGlmIChtdWx0aU9ubHkpIHsKLSAgICAg
ICAgICAgIGlmIChoYXNCbG9jayAmJiBib2R5LmJvZHkubGVuZ3RoID09PSAxKSB7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVubmVjZXNzYXJ5IHsgYWZ0ZXIgJ3t7bmFt
ZX19J3t7c3VmZml4fX0uIiwKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZTogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeDogKHN1
ZmZpeCA/ICIgIiArIHN1ZmZpeCA6ICIiKQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmICghaGFzQmxvY2spIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
RXhwZWN0ZWQgeyBhZnRlciAne3tuYW1lfX0ne3tzdWZmaXh9fS4iLAotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgc3VmZml4OiAoc3VmZml4ID8gIiAiICsgc3VmZml4IDogIiIpCi0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYwotICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIklmU3RhdGVt
ZW50IjogZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICBjaGVja0JvZHkobm9kZSwgbm9k
ZS5jb25zZXF1ZW50LCAiaWYiLCAiY29uZGl0aW9uIik7Ci0KLSAgICAgICAgICAgIGlmIChub2Rl
LmFsdGVybmF0ZSAmJiBub2RlLmFsdGVybmF0ZS50eXBlICE9PSAiSWZTdGF0ZW1lbnQiKSB7Ci0g
ICAgICAgICAgICAgICAgY2hlY2tCb2R5KG5vZGUsIG5vZGUuYWx0ZXJuYXRlLCAiZWxzZSIpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgIH0sCi0KLSAgICAgICAgIldoaWxlU3RhdGVtZW50Ijog
ZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgY2hlY2tCb2R5KG5vZGUsIG5vZGUuYm9keSwg
IndoaWxlIiwgImNvbmRpdGlvbiIpOwotICAgICAgICB9LAotCi0gICAgICAgICJEb1doaWxlU3Rh
dGVtZW50IjogZnVuY3Rpb24gKG5vZGUpIHsKLSAgICAgICAgICAgIGNoZWNrQm9keShub2RlLCBu
b2RlLmJvZHksICJkbyIpOwotICAgICAgICB9LAotCi0gICAgICAgICJGb3JTdGF0ZW1lbnQiOiBm
dW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBjaGVja0JvZHkobm9kZSwgbm9kZS5ib2R5LCAi
Zm9yIiwgImNvbmRpdGlvbiIpOwotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sMjI6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3
IHJlcXVpcmUgZGVmYXVsdCBjYXNlIGluIHN3aXRjaCBzdGF0ZW1lbnRzCi0gKiBAYXV0aG9yIEFs
aWFrc2VpIFNoeXRraW4KLSAqLwotInVzZSBzdHJpY3QiOwotCi12YXIgQ09NTUVOVF9WQUxVRSA9
ICJubyBkZWZhdWx0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5p
dGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycwot
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIFNob3J0Y3V0IHRvIGdl
dCBsYXN0IGVsZW1lbnQgb2YgYXJyYXkKLSAgICAgKiBAcGFyYW0gIHsqW119IGNvbGxlY3Rpb24g
QXJyYXkKLSAgICAgKiBAcmV0dXJucyB7Kn0gTGFzdCBlbGVtZW50Ci0gICAgICovCi0gICAgZnVu
Y3Rpb24gbGFzdChjb2xsZWN0aW9uKSB7Ci0gICAgICAgIHJldHVybiBjb2xsZWN0aW9uW2NvbGxl
Y3Rpb24ubGVuZ3RoIC0gMV07Ci0gICAgfQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAg
IC8vIFB1YmxpYwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0KLSAg
ICAgICAgIlN3aXRjaFN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAgICAg
aWYgKCFub2RlLmNhc2VzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIC8vIHNraXAgY2hlY2sg
b2YgZW1wdHkgc3dpdGNoIGJlY2F1c2UgdGhlcmUgaXMgbm8gZWFzeSB3YXkKLSAgICAgICAgICAg
ICAgICAvLyB0byBleHRyYWN0IGNvbW1lbnRzIGluc2lkZSBpdCBub3cKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBoYXNEZWZhdWx0ID0g
bm9kZS5jYXNlcy5zb21lKGZ1bmN0aW9uKHYpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdi50
ZXN0ID09PSBudWxsOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGlmICghaGFzRGVm
YXVsdCkgewotCi0gICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQ7Ci0gICAgICAgICAgICAgICAg
dmFyIGNvbW1lbnRzOwotCi0gICAgICAgICAgICAgICAgdmFyIGxhc3RDYXNlID0gbGFzdChub2Rl
LmNhc2VzKTsKLSAgICAgICAgICAgICAgICBjb21tZW50cyA9IGNvbnRleHQuZ2V0Q29tbWVudHMo
bGFzdENhc2UpLnRyYWlsaW5nOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzLmxlbmd0
aCkgewotICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gbGFzdChjb21tZW50cyk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFjb21tZW50IHx8IGNvbW1lbnQu
dmFsdWUudHJpbSgpICE9PSBDT01NRU5UX1ZBTFVFKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KG5vZGUsICJFeHBlY3RlZCBhIGRlZmF1bHQgY2FzZS4iKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotfTsKLQotfSx7fV0s
MjM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gd2FybiBhYm91dCB1c2luZyBkb3Qgbm90YXRpb24gaW5zdGVhZCBvZiBzcXVh
cmUgYnJhY2tldCBub3RhdGlvbiB3aGVuIHBvc3NpYmxlLgotICogQGF1dGhvciBKb3NoIFBlcmV6
Ci0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUg
RGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdmFyIHZhbGlkSWRlbnRpZmll
ciA9IC9eW2EtekEtWl8kXVthLXpBLVowLTlfJF0qJC87Ci12YXIga2V5d29yZHMgPSBbCi0gICAg
InRoaXMiLAotICAgICJmdW5jdGlvbiIsCi0gICAgImlmIiwKLSAgICAicmV0dXJuIiwKLSAgICAi
dmFyIiwKLSAgICAiZWxzZSIsCi0gICAgImZvciIsCi0gICAgIm5ldyIsCi0gICAgImFyZ3VtZW50
cyIsCi0gICAgImluIiwKLSAgICAidHlwZW9mIiwKLSAgICAid2hpbGUiLAotICAgICJjYXNlIiwK
LSAgICAiYnJlYWsiLAotICAgICJ0cnkiLAotICAgICJjYXRjaCIsCi0gICAgImRlbGV0ZSIsCi0g
ICAgInRocm93IiwKLSAgICAic3dpdGNoIiwKLSAgICAiY29udGludWUiLAotICAgICJkZWZhdWx0
IiwKLSAgICAiaW5zdGFuY2VvZiIsCi0gICAgImRvIiwKLSAgICAidm9pZCIsCi0gICAgImZpbmFs
bHkiLAotICAgICJ3aXRoIiwKLSAgICAiZGVidWdnZXIiLAotICAgICJldmFsIiwKLSAgICAiaW1w
bGVtZW50cyIsCi0gICAgImludGVyZmFjZSIsCi0gICAgInBhY2thZ2UiLAotICAgICJwcml2YXRl
IiwKLSAgICAicHJvdGVjdGVkIiwKLSAgICAicHVibGljIiwKLSAgICAic3RhdGljIiwKLSAgICAi
eWllbGQiLAotICAgICJsZXQiLAotICAgICJjbGFzcyIsCi0gICAgImVudW0iLAotICAgICJleHBv
cnQiLAotICAgICJleHRlbmRzIiwKLSAgICAiaW1wb3J0IiwKLSAgICAic3VwZXIiLAotICAgICJ0
cnVlIiwKLSAgICAiZmFsc2UiLAotICAgICJudWxsIiwKLSAgICAiYWJzdHJhY3QiLAotICAgICJi
b29sZWFuIiwKLSAgICAiYnl0ZSIsCi0gICAgImNoYXIiLAotICAgICJjb25zdCIsCi0gICAgImRv
dWJsZSIsCi0gICAgImZpbmFsIiwKLSAgICAiZmxvYXQiLAotICAgICJnb3RvIiwKLSAgICAiaW50
IiwKLSAgICAibG9uZyIsCi0gICAgIm5hdGl2ZSIsCi0gICAgInNob3J0IiwKLSAgICAic3luY2hy
b25pemVkIiwKLSAgICAidGhyb3dzIiwKLSAgICAidHJhbnNpZW50IiwKLSAgICAidm9sYXRpbGUi
Ci1dOwotCi1mdW5jdGlvbiBjYW5CZVdyaXR0ZW5JbkRvdE5vdGF0aW9uKG5vZGUpIHsKLSAgICBy
ZXR1cm4gbm9kZS5jb21wdXRlZCA9PT0gdHJ1ZSAmJgotICAgICAgICBub2RlLnByb3BlcnR5LnR5
cGUgPT09ICJMaXRlcmFsIiAmJgotICAgICAgICB2YWxpZElkZW50aWZpZXIudGVzdChub2RlLnBy
b3BlcnR5LnZhbHVlKSAmJgotICAgICAgICBrZXl3b3Jkcy5pbmRleE9mKCIiICsgbm9kZS5wcm9w
ZXJ0eS52YWx1ZSkgPT09IC0xOwotfQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKLSAgICByZXR1cm4gewotICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0aW9u
KG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChjYW5CZVdyaXR0ZW5JbkRvdE5vdGF0aW9uKG5vZGUp
KSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlsnIiArIG5vZGUucHJv
cGVydHkudmFsdWUgKyAiJ10gaXMgYmV0dGVyIHdyaXR0ZW4gaW4gZG90IG5vdGF0aW9uLiIpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLX07Ci0KLX0se31dLDI0OltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSZXF1aXJl
IGZpbGUgdG8gZW5kIHdpdGggc2luZ2xlIG5ld2xpbmUuCi0gKiBAYXV0aG9yIE5vZGVjYSBUZWFt
IDxodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhPgotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIlByb2dyYW0iOiBmdW5jdGlvbiBjaGVja0JhZEVP
Rihub2RlKSB7Ci0gICAgICAgICAgICAvLyBHZXQgdGhlIHdob2xlIHNvdXJjZSBjb2RlLCBub3Qg
Zm9yIG5vZGUgb25seS4KLSAgICAgICAgICAgIHZhciBzcmMgPSBjb250ZXh0LmdldFNvdXJjZSgp
LCBsb2NhdGlvbiA9IHtjb2x1bW46IDF9OwotCi0gICAgICAgICAgICBpZiAoc3JjLmxlbmd0aCA9
PT0gMCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHNyY1tzcmMubGVuZ3RoIC0gMV0gIT09ICJcbiIpIHsKLSAgICAgICAgICAgICAg
ICAvLyBmaWxlIGlzIG5vdCBuZXdsaW5lLXRlcm1pbmF0ZWQKLSAgICAgICAgICAgICAgICBsb2Nh
dGlvbi5saW5lID0gc3JjLnNwbGl0KC9cbi9nKS5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgbG9jYXRpb24sICJOZXdsaW5lIHJlcXVpcmVkIGF0IGVuZCBvZiBm
aWxlIGJ1dCBub3QgZm91bmQuIik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKC9cblxzKlxuJC8u
dGVzdChzcmMpKSB7Ci0gICAgICAgICAgICAgICAgLy8gbGFzdCBsaW5lIGlzIGVtcHR5Ci0gICAg
ICAgICAgICAgICAgbG9jYXRpb24ubGluZSA9IHNyYy5zcGxpdCgvXG4vZykubGVuZ3RoIC0gMTsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBsb2NhdGlvbiwgIlVuZXhwZWN0
ZWQgYmxhbmsgbGluZSBhdCBlbmQgb2YgZmlsZS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgfTsKLQotfTsKLQotfSx7fV0sMjU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBzdGF0ZW1lbnRzIHRo
YXQgdXNlICE9IGFuZCA9PSBpbnN0ZWFkIG9mICE9PSBhbmQgPT09Ci0gKiBAYXV0aG9yIE5pY2hv
bGFzIEMuIFpha2FzCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVm
aW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAvKioKLSAgICAgKiBD
aGVja3MgaWYgZWl0aGVyIG9wZXJhbmQgb2YgYSBiaW5hcnkgZXhwcmVzc2lvbiBpcyBhIHR5cGVv
ZiBvcGVyYXRpb24KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hl
Y2sKLSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYgb25lIG9mIHRoZSBvcGVyYW5kcyBpcyB0
eXBlb2YKLSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIGZ1bmN0aW9uIGlzVHlwZU9mKG5v
ZGUpIHsKLSAgICAgICAgcmV0dXJuIFtub2RlLmxlZnQsIG5vZGUucmlnaHRdLnNvbWUoZnVuY3Rp
b24obm9kZSkgewotICAgICAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gIlVuYXJ5RXhwcmVz
c2lvbiIgJiYgbm9kZS5vcGVyYXRvciA9PT0gInR5cGVvZiI7Ci0gICAgICAgIH0pOwotICAgIH0K
LQotICAgIC8qKgotICAgICAqIENoZWNrcyBpZiBvcGVyYW5kcyBhcmUgbGl0ZXJhbHMgb2YgdGhl
IHNhbWUgdHlwZSAodmlhIHR5cGVvZikKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhl
IG5vZGUgdG8gY2hlY2sKLSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYgb3BlcmFuZHMgYXJl
IG9mIHNhbWUgdHlwZQotICAgICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gYXJl
TGl0ZXJhbHNBbmRTYW1lVHlwZShub2RlKSB7Ci0gICAgICAgIHJldHVybiBub2RlLmxlZnQudHlw
ZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUucmlnaHQudHlwZSA9PT0gIkxpdGVyYWwiICYmCi0gICAg
ICAgICAgICAgICAgdHlwZW9mIG5vZGUubGVmdC52YWx1ZSA9PT0gdHlwZW9mIG5vZGUucmlnaHQu
dmFsdWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIGlmIG9uZSBvZiB0aGUgb3Bl
cmFuZHMgaXMgYSBsaXRlcmFsIG51bGwKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhl
IG5vZGUgdG8gY2hlY2sKLSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYgb3BlcmFuZHMgYXJl
IG51bGwKLSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIGZ1bmN0aW9uIGlzTnVsbENoZWNr
KG5vZGUpIHsKLSAgICAgICAgcmV0dXJuIChub2RlLnJpZ2h0LnR5cGUgPT09ICJMaXRlcmFsIiAm
JiBub2RlLnJpZ2h0LnZhbHVlID09PSBudWxsKSB8fAotICAgICAgICAgICAgICAgIChub2RlLmxl
ZnQudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUubGVmdC52YWx1ZSA9PT0gbnVsbCk7Ci0gICAg
fQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgbG9jYXRpb24gKGxpbmUgYW5kIGNvbHVtbikg
b2YgdGhlIGJpbmFyeSBleHByZXNzaW9uJ3Mgb3BlcmF0b3IKLSAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IG5vZGUgVGhlIGJpbmFyeSBleHByZXNzaW9uIG5vZGUgdG8gY2hlY2sKLSAgICAgKiBAcGFy
YW0ge1N0cmluZ30gb3BlcmF0b3IgVGhlIG9wZXJhdG9yIHRvIGZpbmQKLSAgICAgKiBAcmV0dXJu
cyB7T2JqZWN0fSB7IGxpbmUsIGNvbHVtbiB9IGxvY2F0aW9uIG9mIG9wZXJhdG9yCi0gICAgICog
QHByaXZhdGUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBnZXRPcGVyYXRvckxvY2F0aW9uKG5vZGUp
IHsKLSAgICAgICAgdmFyIG9wVG9rZW4gPSBjb250ZXh0LmdldFRva2Vucyhub2RlKVtjb250ZXh0
LmdldFRva2Vucyhub2RlLmxlZnQpLmxlbmd0aF07Ci0gICAgICAgIHJldHVybiB7bGluZTogb3BU
b2tlbi5sb2Muc3RhcnQubGluZSwgY29sdW1uOiBvcFRva2VuLmxvYy5zdGFydC5jb2x1bW59Owot
ICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVuY3Rp
b24obm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgIT09ICI9PSIgJiYgbm9k
ZS5vcGVyYXRvciAhPT0gIiE9IikgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvbnRleHQub3B0aW9uc1swXSA9PT0gInNtYXJ0IiAm
JiAoaXNUeXBlT2Yobm9kZSkgfHwKLSAgICAgICAgICAgICAgICAgICAgYXJlTGl0ZXJhbHNBbmRT
YW1lVHlwZShub2RlKSkgfHwgaXNOdWxsQ2hlY2sobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb250ZXh0Lm9wdGlvbnNb
MF0gPT09ICJhbGxvdy1udWxsIiAmJiBpc051bGxDaGVjayhub2RlKSkgewotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
Ci0gICAgICAgICAgICAgICAgbm9kZSwgZ2V0T3BlcmF0b3JMb2NhdGlvbihub2RlKSwKLSAgICAg
ICAgICAgICAgICAiRXhwZWN0ZWQgJ3t7b3B9fT0nIGFuZCBpbnN0ZWFkIHNhdyAne3tvcH19Jy4i
LAotICAgICAgICAgICAgICAgIHtvcDogbm9kZS5vcGVyYXRvcn0KLSAgICAgICAgICAgICk7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSwyNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byB3YXJuIHdoZW4gYSBm
dW5jdGlvbiBleHByZXNzaW9uIGRvZXMgbm90IGhhdmUgYSBuYW1lLgotICogQGF1dGhvciBLeWxl
IFQuIE51bmVyeQotICovCi0gInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLSAgICByZXR1cm4gewotICAgICAgICAiRnVu
Y3Rpb25FeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICB2YXIgbmFt
ZSA9IG5vZGUuaWQgJiYgbm9kZS5pZC5uYW1lOwotCi0gICAgICAgICAgICBpZiAoIW5hbWUpIHsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiTWlzc2luZyBmdW5jdGlvbiBl
eHByZXNzaW9uIG5hbWUuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotfTsK
LQotfSx7fV0sMjc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZW5mb3JjZSBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gc3R5bGUK
LSAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHZh
ciBzdHlsZSA9IGNvbnRleHQub3B0aW9uc1swXSwKLSAgICAgICAgZW5mb3JjZURlY2xhcmF0aW9u
cyA9IChzdHlsZSA9PT0gImRlY2xhcmF0aW9uIik7Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAg
ICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgaWYg
KCFlbmZvcmNlRGVjbGFyYXRpb25zKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIkV4cGVjdGVkIGEgZnVuY3Rpb24gZXhwcmVzc2lvbi4iKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSwKLQotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICB2YXIgcGFyZW50ID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsK
LQotICAgICAgICAgICAgaWYgKGVuZm9yY2VEZWNsYXJhdGlvbnMgJiYgcGFyZW50LnR5cGUgPT09
ICJWYXJpYWJsZURlY2xhcmF0b3IiKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
cGFyZW50LCAiRXhwZWN0ZWQgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4iKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDI4OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgb3Ig
cmVxdWlyZSBnbG9iYWwgc3RyaWN0IG1vZGUuCi0gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2Fz
Ci0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUg
RGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICB2YXIgbW9kZSA9IGNvbnRleHQub3B0aW9uc1swXTsK
LQotICAgIGlmIChtb2RlID09PSAiYWx3YXlzIikgewotCi0gICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICAiUHJvZ3JhbSI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS5ib2R5Lmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlbWVu
dCA9IG5vZGUuYm9keVswXTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIShzdGF0ZW1lbnQu
dHlwZSA9PT0gIkV4cHJlc3Npb25TdGF0ZW1lbnQiICYmIHN0YXRlbWVudC5leHByZXNzaW9uLnZh
bHVlID09PSAidXNlIHN0cmljdCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCAiVXNlIHRoZSBnbG9iYWwgZm9ybSBvZiBcInVzZSBzdHJpY3RcIi4iKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfTsKLQotICAgIH0gZWxzZSB7IC8vIG1vZGUgPSAibmV2ZXIiCi0KLSAgICAgICAg
cmV0dXJuIHsKLSAgICAgICAgICAgICJFeHByZXNzaW9uU3RhdGVtZW50IjogZnVuY3Rpb24obm9k
ZSkgewotICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjb250ZXh0LmdldEFuY2VzdG9ycygp
LnBvcCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUuZXhwcmVzc2lvbi52YWx1ZSA9PT0g
InVzZSBzdHJpY3QiICYmIHBhcmVudC50eXBlID09PSAiUHJvZ3JhbSIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVzZSB0aGUgZnVuY3Rpb24gZm9ybSBvZiBc
InVzZSBzdHJpY3RcIi4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH07Ci0KLSAgICB9Ci0KLX07Ci0KLX0se31dLDI5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgZm9yLWluIGxv
b3BzIHdpdGhvdXQgaWYgc3RhdGVtZW50cyBpbnNpZGUKLSAqIEBhdXRob3IgTmljaG9sYXMgQy4g
WmFrYXMKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9u
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAg
IkZvckluU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICAvKgotICAg
ICAgICAgICAgICogSWYgdGhlIGZvci1pbiBzdGF0ZW1lbnQgaGFzIHt9LCB0aGVuIHRoZSByZWFs
IGJvZHkgaXMgdGhlIGJvZHkKLSAgICAgICAgICAgICAqIG9mIHRoZSBCbG9ja1N0YXRlbWVudC4g
T3RoZXJ3aXNlLCBqdXN0IHVzZSBib2R5IGFzIHByb3ZpZGVkLgotICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICB2YXIgYm9keSA9IG5vZGUuYm9keS50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQi
ID8gbm9kZS5ib2R5LmJvZHlbMF0gOiBub2RlLmJvZHk7Ci0KLSAgICAgICAgICAgIGlmIChib2R5
ICYmIGJvZHkudHlwZSAhPT0gIklmU3RhdGVtZW50IikgewotICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJUaGUgYm9keSBvZiBhIGZvci1pbiBzaG91bGQgYmUgd3JhcHBlZCBp
biBhbiBpZiBzdGF0ZW1lbnQgdG8gZmlsdGVyIHVud2FudGVkIHByb3BlcnRpZXMgZnJvbSB0aGUg
cHJvdG90eXBlLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQot
fSx7fV0sMzA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmls
ZW92ZXJ2aWV3IEVuc3VyZSBoYW5kbGluZyBvZiBlcnJvcnMgd2hlbiB3ZSBrbm93IHRoZXkgZXhp
c3QuCi0gKiBAYXV0aG9yIEphbXVuZCBGZXJndXNvbgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwot
Ci0gICAgdmFyIGVycm9yQXJndW1lbnQgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwgImVyciI7Ci0g
ICAgdmFyIGNhbGxiYWNrcyA9IFtdOwotICAgIHZhciBzY29wZXMgPSAwOwotCi0gICAgLyoqCi0g
ICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQg
YXMgYSByZWdleHAgcGF0dGVybi4KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nVG9DaGVj
ayBUaGUgc3RyaW5nIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkLgotICAgICAqIEByZXR1cm5zIHti
b29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIHNob3VsZCBiZSBpbnRlcnByZXRlZCBh
cyBhIHBhdHRlcm4uCi0gICAgICovCi0gICAgZnVuY3Rpb24gaXNQYXR0ZXJuKHN0cmluZ1RvQ2hl
Y2spIHsKLSAgICAgICAgdmFyIGZpcnN0Q2hhciA9IHN0cmluZ1RvQ2hlY2tbMF07Ci0gICAgICAg
IHJldHVybiBmaXJzdENoYXIgPT09ICJeIjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVj
a3MgaWYgdGhlIGdpdmVuIG5hbWUgbWF0Y2hlcyB0aGUgY29uZmlndXJlZCBlcnJvciBhcmd1bWVu
dC4KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSB3aGljaCBzaG91bGQgYmUg
Y29tcGFyZWQuCi0gICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBn
aXZlbiBuYW1lIG1hdGNoZXMgdGhlIGNvbmZpZ3VyZWQgZXJyb3IgdmFyaWFibGUgbmFtZS4KLSAg
ICAgKi8KLSAgICBmdW5jdGlvbiBtYXRjaGVzQ29uZmlndXJlZEVycm9yTmFtZShuYW1lKSB7Ci0g
ICAgICAgIGlmIChpc1BhdHRlcm4oZXJyb3JBcmd1bWVudCkpIHsKLSAgICAgICAgICAgIHZhciBy
ZWdleHAgPSBuZXcgUmVnRXhwKGVycm9yQXJndW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIHJl
Z2V4cC50ZXN0KG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuYW1lID09PSBlcnJv
ckFyZ3VtZW50OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrIHRoZSBhcmd1bWVudHMg
dG8gc2VlIGlmIHdlIG5lZWQgdG8gc3RhcnQgdHJhY2tpbmcgdGhlIGVycm9yIG9iamVjdC4KLSAg
ICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRvIGNoZWNrLgotICAgICAq
IEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIHN0YXJ0RnVuY3Rpb24obm9k
ZSkgewotCi0gICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgbmVzdGVkIHNjb3BlcwotICAgICAgICBz
Y29wZXMrKzsKLQotICAgICAgICAvLyBjaGVjayBpZiB0aGUgZmlyc3QgYXJndW1lbnQgbWF0Y2hl
cyBvdXIgYXJndW1lbnQgbmFtZQotICAgICAgICB2YXIgZmlyc3RBcmcgPSBub2RlLnBhcmFtcyAm
JiBub2RlLnBhcmFtc1swXTsKLSAgICAgICAgaWYgKGZpcnN0QXJnICYmIG1hdGNoZXNDb25maWd1
cmVkRXJyb3JOYW1lKGZpcnN0QXJnLm5hbWUpKSB7Ci0gICAgICAgICAgICBjYWxsYmFja3MucHVz
aCh7aGFuZGxlZDogZmFsc2UsIGRlcHRoOiBzY29wZXMsIGVycm9yVmFyaWFibGVOYW1lOiBmaXJz
dEFyZy5uYW1lfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBdCB0aGUg
ZW5kIG9mIGEgZnVuY3Rpb24gY2hlY2sgdG8gc2VlIGlmIHRoZSBlcnJvciB3YXMgaGFuZGxlZC4K
LSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRvIGNoZWNrLgotICAg
ICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIGVuZEZ1bmN0aW9uKG5v
ZGUpIHsKLQotICAgICAgICB2YXIgY2FsbGJhY2sgPSBjYWxsYmFja3NbY2FsbGJhY2tzLmxlbmd0
aCAtIDFdIHx8IHt9OwotCi0gICAgICAgIC8vIGNoZWNrIGlmIGEgY2FsbGJhY2sgaXMgZW5kaW5n
LCBpZiBzbyBwb3AgaXQgb2ZmIHRoZSBzdGFjawotICAgICAgICBpZiAoY2FsbGJhY2suZGVwdGgg
PT09IHNjb3BlcykgewotICAgICAgICAgICAgY2FsbGJhY2tzLnBvcCgpOwotCi0gICAgICAgICAg
ICAvLyBjaGVjayBpZiB0aGVyZSB3ZXJlIG5vIGhhbmRsZWQgZXJyb3JzIHNpbmNlIHRoZSBsYXN0
IGNhbGxiYWNrCi0gICAgICAgICAgICBpZiAoIWNhbGxiYWNrLmhhbmRsZWQpIHsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgZXJyb3IgdG8gYmUgaGFuZGxl
ZC4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGxlc3MgbmVzdGVk
IGZ1bmN0aW9ucwotICAgICAgICBzY29wZXMtLTsKLQotICAgIH0KLQotICAgIC8qKgotICAgICAq
IENoZWNrIHRvIHNlZSBpZiB3ZSdyZSBoYW5kbGluZyB0aGUgZXJyb3Igb2JqZWN0IHByb3Blcmx5
LgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gY2hlY2suCi0g
ICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gY2hlY2tGb3JFcnJv
cihub2RlKSB7Ci0gICAgICAgIGlmIChjYWxsYmFja3MubGVuZ3RoID4gMCkgewotICAgICAgICAg
ICAgdmFyIGNhbGxiYWNrID0gY2FsbGJhY2tzW2NhbGxiYWNrcy5sZW5ndGggLSAxXSB8fCB7fTsK
LQotICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBub2RlJ3MgbmFtZSBtYXRjaGVzIG91ciBl
cnJvciBhcmd1bWVudCBuYW1lCi0gICAgICAgICAgICB2YXIgaXNBYm91dEVycm9yID0gbm9kZS5u
YW1lID09PSBjYWxsYmFjay5lcnJvclZhcmlhYmxlTmFtZTsKLQotICAgICAgICAgICAgLy8gd2Ug
ZG9uJ3QgY29uc2lkZXIgdGhlc2UgdXNlIGNhc2VzIGFzICJoYW5kbGluZyIgdGhlIGVycm9yCi0g
ICAgICAgICAgICB2YXIgZG9Ob3RDb3VudCA9IFsiRnVuY3Rpb25EZWNsYXJhdGlvbiIsICJGdW5j
dGlvbkV4cHJlc3Npb24iLCAiQ2F0Y2hDbGF1c2UiXTsKLQotICAgICAgICAgICAgLy8gbWFrZSBz
dXJlIHRoaXMgaWRlbnRpZmllciBpc24ndCB1c2VkIGFzIHBhcnQgb2Ygb25lIG9mIHRoZW0KLSAg
ICAgICAgICAgIHZhciBpc0hhbmRsZWQgPSBkb05vdENvdW50LmluZGV4T2Yobm9kZS5wYXJlbnQu
dHlwZSkgPT09IC0xOwotCi0gICAgICAgICAgICBpZiAoaXNBYm91dEVycm9yICYmIGlzSGFuZGxl
ZCkgewotICAgICAgICAgICAgICAgIC8vIHJlY29yZCB0aGF0IHRoaXMgY2FsbGJhY2sgaGFuZGxl
ZCBpdHMgZXJyb3IKLSAgICAgICAgICAgICAgICBjYWxsYmFjay5oYW5kbGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJG
dW5jdGlvbkRlY2xhcmF0aW9uIjogc3RhcnRGdW5jdGlvbiwKLSAgICAgICAgIkZ1bmN0aW9uRXhw
cmVzc2lvbiI6IHN0YXJ0RnVuY3Rpb24sCi0gICAgICAgICJJZGVudGlmaWVyIjogY2hlY2tGb3JF
cnJvciwKLSAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGVuZEZ1bmN0aW9uLAot
ICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBlbmRGdW5jdGlvbgotICAgIH07Ci0K
LX07Ci0KLX0se31dLDMxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgot
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIHNwZWNpZnkgc3BhY2luZyBvZiBvYmplY3QgbGl0ZXJh
bCBrZXlzIGFuZCB2YWx1ZXMKLSAqIEBhdXRob3IgQnJhbmRvbiBNaWxscwotICogQGNvcHlyaWdo
dCAyMDE0IEJyYW5kb24gTWlsbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKi8KLSJ1c2Ugc3Ry
aWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEhlbHBlcnMKLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLS8qKgotICogR2V0cyBhbiBvYmplY3QgbGl0ZXJhbCBwcm9wZXJ0eSdz
IGtleSBhcyB0aGUgaWRlbnRpZmllciBuYW1lIG9yIHN0cmluZyB2YWx1ZS4KLSAqIEBwYXJhbSB7
QVNUTm9kZX0gcHJvcGVydHkgUHJvcGVydHkgbm9kZSB3aG9zZSBrZXkgdG8gcmV0cmlldmUuCi0g
KiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcHJvcGVydHkncyBrZXkuCi0gKi8KLWZ1bmN0aW9uIGdl
dEtleShwcm9wZXJ0eSkgewotICAgIHJldHVybiBwcm9wZXJ0eS5rZXkubmFtZSB8fCBwcm9wZXJ0
eS5rZXkudmFsdWU7Ci19Ci0KLS8qKgotICogR2V0cyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMg
aW4gYSBrZXksIGluY2x1ZGluZyBxdW90ZXMgYXJvdW5kIHN0cmluZyBrZXlzLgotICogQHBhcmFt
IHtBU1ROb2RlfSBwcm9wZXJ0eSBQcm9wZXJ0eSBvZiBvbiBvYmplY3QgbGl0ZXJhbC4KLSAqIEBy
ZXR1cm5zIHtpbnR9IFdpZHRoIG9mIHRoZSBrZXksIGluY2x1ZGluZyBzdHJpbmcgcXVvdGVzIHdo
ZXJlIHByZXNlbnQuCi0gKi8KLWZ1bmN0aW9uIGdldEtleVdpZHRoKHByb3BlcnR5KSB7Ci0gICAg
dmFyIGtleSA9IHByb3BlcnR5LmtleTsKLSAgICByZXR1cm4gKGtleS50eXBlID09PSAiSWRlbnRp
ZmllciIgPyBrZXkubmFtZSA6IGtleS5yYXcpLmxlbmd0aDsKLX0KLQotLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
dmFyIG1lc3NhZ2VzID0gewotICAgIGtleTogInt7ZXJyb3J9fSBzcGFjZSBhZnRlciBrZXkgXCJ7
e2tleX19XCIuIiwKLSAgICB2YWx1ZTogInt7ZXJyb3J9fSBzcGFjZSBiZWZvcmUgdmFsdWUgZm9y
IGtleSBcInt7a2V5fX1cIi4iCi19OwotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKLQotICAgIC8qKgotICAgICAqIE9QVElPTlMKLSAgICAgKiAia2V5LXNwYWNpbmciOiBb
MiwgewotICAgICAqICAgICBiZWZvcmVDb2xvbjogZmFsc2UsCi0gICAgICogICAgIGFmdGVyQ29s
b246IHRydWUsCi0gICAgICogICAgIGFsaWduOiAiY29sb24iIC8vIE9wdGlvbmFsLCBvciAidmFs
dWUiCi0gICAgICogfQotICAgICAqLwotCi0gICAgdmFyIG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlv
bnNbMF0gfHwge30sCi0gICAgICAgIGFsaWduID0gb3B0aW9ucy5hbGlnbiwKLSAgICAgICAgYmVm
b3JlQ29sb24gPSArISFvcHRpb25zLmJlZm9yZUNvbG9uLCAvLyBEZWZhdWx0cyB0byBmYWxzZQot
ICAgICAgICBhZnRlckNvbG9uID0gKyEob3B0aW9ucy5hZnRlckNvbG9uID09PSBmYWxzZSk7IC8v
IERlZmF1bHRzIHRvIHRydWUKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHNwYWNpbmcgYXJv
dW5kIHRoZSBjb2xvbiBpbiBhbiBvYmplY3QgbGl0ZXJhbCBwcm9wZXJ0eQotICAgICAqIEBwYXJh
bSB7QVNUTm9kZX0gcHJvcGVydHkgUHJvcGVydHkgbm9kZSBmcm9tIGFuIG9iamVjdCBsaXRlcmFs
Ci0gICAgICogQHJldHVybnMge09iamVjdH0gU3BhY2luZyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBw
cm9wZXJ0eSdzIGNvbG9uCi0gICAgICovCi0gICAgZnVuY3Rpb24gZ2V0UHJvcGVydHlTcGFjaW5n
KHByb3BlcnR5KSB7Ci0gICAgICAgIHZhciB3aGl0ZXNwYWNlID0gL14oXHMqKTooXHMqKS8uZXhl
Yyhjb250ZXh0LmdldFNvdXJjZSgpLnNsaWNlKAotICAgICAgICAgICAgcHJvcGVydHkua2V5LnJh
bmdlWzFdLCBwcm9wZXJ0eS52YWx1ZS5yYW5nZVswXQotICAgICAgICApKTsKLQotICAgICAgICBp
ZiAod2hpdGVzcGFjZSkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBi
ZWZvcmVDb2xvbjogd2hpdGVzcGFjZVsxXS5sZW5ndGgsCi0gICAgICAgICAgICAgICAgYWZ0ZXJD
b2xvbjogd2hpdGVzcGFjZVsyXS5sZW5ndGgKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXBvcnRzIGFuIGFwcHJvcHJpYXRlbHktZm9ybWF0dGVk
IGVycm9yIGlmIHNwYWNpbmcgaXMgaW5jb3JyZWN0IG9uIG9uZQotICAgICAqIHNpZGUgb2YgdGhl
IGNvbG9uLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcHJvcGVydHkgS2V5LXZhbHVlIHBhaXIg
aW4gYW4gb2JqZWN0IGxpdGVyYWwuCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZGUgU2lkZSBi
ZWluZyB2ZXJpZmllZCAtIGVpdGhlciAia2V5IiBvciAidmFsdWUiLgotICAgICAqIEBwYXJhbSB7
aW50fSBkaWZmIERpZmZlcmVuY2UgYmV0d2VlbiBhY3R1YWwgYW5kIGV4cGVjdGVkIHNwYWNpbmcu
Ci0gICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gcmVwb3J0KHBy
b3BlcnR5LCBzaWRlLCBkaWZmKSB7Ci0gICAgICAgIGlmIChkaWZmKSB7Ci0gICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChwcm9wZXJ0eVtzaWRlXSwgbWVzc2FnZXNbc2lkZV0sIHsKLSAgICAgICAg
ICAgICAgICBlcnJvcjogZGlmZiA+IDAgPyAiRXh0cmEiIDogIk1pc3NpbmciLAotICAgICAgICAg
ICAgICAgIGtleTogZ2V0S2V5KHByb3BlcnR5KQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoYWxpZ24pIHsgLy8gVmVyaWZ5IHZlcnRpY2FsIGFsaWdubWVudAot
Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAiT2JqZWN0RXhwcmVzc2lvbiI6IGZ1bmN0
aW9uKG5vZGUpIHsKLSAgICAgICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IG5vZGUucHJvcGVy
dGllcywKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGgsCi0g
ICAgICAgICAgICAgICAgICAgIHdpZHRocyA9IHByb3BlcnRpZXMubWFwKGdldEtleVdpZHRoKSwg
Ly8gV2lkdGggb2Yga2V5cywgaW5jbHVkaW5nIHF1b3RlcwotICAgICAgICAgICAgICAgICAgICB0
YXJnZXRXaWR0aCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHdpZHRocyksCi0gICAgICAgICAgICAg
ICAgICAgIGksIHByb3BlcnR5LCBzcGFjaW5nLCB3aWR0aDsKLQotICAgICAgICAgICAgICAgIC8v
IENvbmRpdGlvbmFsbHkgaW5jbHVkZSBvbmUgc3BhY2UgYmVmb3JlIG9yIGFmdGVyIGNvbG9uCi0g
ICAgICAgICAgICAgICAgdGFyZ2V0V2lkdGggKz0gKGFsaWduID09PSAiY29sb24iID8gYmVmb3Jl
Q29sb24gOiBhZnRlckNvbG9uKTsKLQotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNb
aV07Ci0gICAgICAgICAgICAgICAgICAgIHNwYWNpbmcgPSBnZXRQcm9wZXJ0eVNwYWNpbmcocHJv
cGVydHkpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghc3BhY2luZykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7IC8vIE9iamVjdCBsaXRlcmFsIGdldHRlcnMvc2V0dGVy
cyBsYWNrIGEgY29sb24KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIHdpZHRoID0gd2lkdGhzW2ldOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChhbGlnbiA9
PT0gInZhbHVlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KHByb3BlcnR5LCAi
a2V5Iiwgc3BhY2luZy5iZWZvcmVDb2xvbiAtIGJlZm9yZUNvbG9uKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcG9ydChwcm9wZXJ0eSwgInZhbHVlIiwgKHdpZHRoICsgc3BhY2luZy5hZnRl
ckNvbG9uKSAtIHRhcmdldFdpZHRoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8g
YWxpZ24gPSAiY29sb24iCi0gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQocHJvcGVydHks
ICJrZXkiLCAod2lkdGggKyBzcGFjaW5nLmJlZm9yZUNvbG9uKSAtIHRhcmdldFdpZHRoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydChwcm9wZXJ0eSwgInZhbHVlIiwgc3BhY2luZy5h
ZnRlckNvbG9uIC0gYWZ0ZXJDb2xvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICB9IGVsc2UgeyAvLyBT
dHJpY3RseSBvYmV5IGJlZm9yZUNvbG9uIGFuZCBhZnRlckNvbG9uIGluIGVhY2ggcHJvcGVydHkK
LQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgIlByb3BlcnR5IjogZnVuY3Rpb24gKG5v
ZGUpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3BhY2luZyA9IGdldFByb3BlcnR5U3BhY2luZyhu
b2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoc3BhY2luZykgeyAvLyBPYmplY3QgbGl0ZXJhbCBn
ZXR0ZXJzL3NldHRlcnMgbGFjayBjb2xvbiBzcGFjaW5nCi0gICAgICAgICAgICAgICAgICAgIHJl
cG9ydChub2RlLCAia2V5Iiwgc3BhY2luZy5iZWZvcmVDb2xvbiAtIGJlZm9yZUNvbG9uKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUsICJ2YWx1ZSIsIHNwYWNpbmcuYWZ0ZXJDb2xv
biAtIGFmdGVyQ29sb24pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfTsKLQotICAgIH0KLQotfTsKLQotfSx7fV0sMzI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBzZXQgdGhlIG1heGlt
dW0gZGVwdGggYmxvY2sgY2FuIGJlIG5lc3RlZCBpbiBhIGZ1bmN0aW9uLgotICogQGF1dGhvciBJ
YW4gQ2hyaXN0aWFuIE15ZXJzCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1
bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICAgIHZhciBmdW5jdGlvblN0YWNrID0gW10sCi0gICAgICAgIG1heERlcHRoID0gY29udGV4dC5v
cHRpb25zWzBdIHx8IDQ7Ci0KLSAgICBmdW5jdGlvbiBzdGFydEZ1bmN0aW9uKCkgewotICAgICAg
ICBmdW5jdGlvblN0YWNrLnB1c2goMCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZW5kRnVuY3Rp
b24oKSB7Ci0gICAgICAgIGZ1bmN0aW9uU3RhY2sucG9wKCk7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gcHVzaEJsb2NrKG5vZGUpIHsKLSAgICAgICAgdmFyIGxlbiA9ICsrZnVuY3Rpb25TdGFja1tm
dW5jdGlvblN0YWNrLmxlbmd0aCAtIDFdOwotCi0gICAgICAgIGlmIChsZW4gPiBtYXhEZXB0aCkg
ewotICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkJsb2NrcyBhcmUgbmVzdGVkIHRv
byBkZWVwbHkgKHt7ZGVwdGh9fSkuIiwKLSAgICAgICAgICAgICAgICAgICAgeyBkZXB0aDogbGVu
IH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcG9wQmxvY2soKSB7Ci0gICAg
ICAgIGZ1bmN0aW9uU3RhY2tbZnVuY3Rpb25TdGFjay5sZW5ndGggLSAxXS0tOwotICAgIH0KLQot
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMgQVBJCi0gICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIlByb2dyYW0iOiBzdGFydEZ1bmN0
aW9uLAotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVuY3Rpb24sCi0gICAg
ICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBzdGFydEZ1bmN0aW9uLAotCi0gICAgICAgICJJZlN0
YXRlbWVudCI6IHB1c2hCbG9jaywKLSAgICAgICAgIlN3aXRjaFN0YXRlbWVudCI6IHB1c2hCbG9j
aywKLSAgICAgICAgIlRyeVN0YXRlbWVudCI6IHB1c2hCbG9jaywKLSAgICAgICAgIkRvV2hpbGVT
dGF0ZW1lbnQiOiBwdXNoQmxvY2ssCi0gICAgICAgICJXaGlsZVN0YXRlbWVudCI6IHB1c2hCbG9j
aywKLSAgICAgICAgIldpdGhTdGF0ZW1lbnQiOiBwdXNoQmxvY2ssCi0gICAgICAgICJGb3JTdGF0
ZW1lbnQiOiBwdXNoQmxvY2ssCi0gICAgICAgICJGb3JJblN0YXRlbWVudCI6IHB1c2hCbG9jaywK
LQotICAgICAgICAiSWZTdGF0ZW1lbnQ6ZXhpdCI6IHBvcEJsb2NrLAotICAgICAgICAiU3dpdGNo
U3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKLSAgICAgICAgIlRyeVN0YXRlbWVudDpleGl0Ijog
cG9wQmxvY2ssCi0gICAgICAgICJEb1doaWxlU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKLSAg
ICAgICAgIldoaWxlU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKLSAgICAgICAgIldpdGhTdGF0
ZW1lbnQ6ZXhpdCI6IHBvcEJsb2NrLAotICAgICAgICAiRm9yU3RhdGVtZW50OmV4aXQiOiBwb3BC
bG9jaywKLSAgICAgICAgIkZvckluU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKLQotICAgICAg
ICAiRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0IjogZW5kRnVuY3Rpb24sCi0gICAgICAgICJGdW5j
dGlvbkV4cHJlc3Npb246ZXhpdCI6IGVuZEZ1bmN0aW9uLAotICAgICAgICAiUHJvZ3JhbTpleGl0
IjogZW5kRnVuY3Rpb24KLSAgICB9OwotCi19OwotCi19LHt9XSwzMzpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBjaGVjayBm
b3IgbWF4IGxlbmd0aCBvbiBhIGxpbmUuCi0gKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8v
d3d3Lm1hdHRkdXZhbGwuY29tPgotICogQGNvcHlyaWdodCAyMDEzIE1hdHQgRHVWYWxsLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICovCi0KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAvKioKLSAgICAgKiBD
cmVhdGVzIGEgc3RyaW5nIHRoYXQgaXMgbWFkZSB1cCBvZiByZXBlYXRpbmcgYSBnaXZlbiBzdHJp
bmcgYSBjZXJ0YWluCi0gICAgICogbnVtYmVyIG9mIHRpbWVzLiBUaGlzIHVzZXMgZXhwb25lbnRp
YXRpb24gb2Ygc3F1YXJlcyB0byBhY2hpZXZlIHNpZ25pZmljYW50Ci0gICAgICogcGVyZm9ybWFu
Y2UgZ2FpbnMgb3ZlciB0aGUgbW9yZSB0cmFkaXRpb25hbCBpbXBsZW1lbnRhdGlvbiBvZiBzdWNo
Ci0gICAgICogZnVuY3Rpb25hbGl0eS4KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSBz
dHJpbmcgdG8gcmVwZWF0LgotICAgICAqIEBwYXJhbSB7aW50fSBudW0gVGhlIG51bWJlciBvZiB0
aW1lcyB0byByZXBlYXQgdGhlIHN0cmluZy4KLSAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUg
Y3JlYXRlZCBzdHJpbmcuCi0gICAgICogQHByaXZhdGUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBz
dHJpbmdSZXBlYXQoc3RyLCBudW0pIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9ICIiOwotICAgICAg
ICBmb3IgKG51bSB8PSAwOyBudW0gPiAwOyBudW0gPj4+PSAxLCBzdHIgKz0gc3RyKSB7Ci0gICAg
ICAgICAgICBpZiAobnVtICYgMSkgewotICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0K
LSAgICB2YXIgdGFiV2lkdGggPSBjb250ZXh0Lm9wdGlvbnNbMV07Ci0KLSAgICB2YXIgbWF4TGVu
Z3RoID0gY29udGV4dC5vcHRpb25zWzBdLAotICAgICAgICB0YWJTdHJpbmcgPSBzdHJpbmdSZXBl
YXQoIiAiLCB0YWJXaWR0aCk7Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVs
cGVycwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBmdW5jdGlvbiBjaGVja1Byb2dyYW1G
b3JNYXhMZW5ndGgobm9kZSkgewotICAgICAgICB2YXIgbGluZXMgPSBjb250ZXh0LmdldFNvdXJj
ZUxpbmVzKCk7Ci0KLSAgICAgICAgLy8gUmVwbGFjZSB0aGUgdGFicwotICAgICAgICAvLyBTcGxp
dCAoaG9ub3JzIGxpbmUtZW5kaW5nKQotICAgICAgICAvLyBJdGVyYXRlCi0gICAgICAgIGxpbmVz
LmZvckVhY2goZnVuY3Rpb24obGluZSwgaSkgewotICAgICAgICAgICAgaWYgKGxpbmUucmVwbGFj
ZSgvXHQvZywgdGFiU3RyaW5nKS5sZW5ndGggPiBtYXhMZW5ndGgpIHsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCB7IGxpbmU6IGkgKyAxLCBjb2w6IDEgfSwgIkxpbmUgIiAr
IChpICsgMSkgKyAiIGV4Y2VlZHMgdGhlIG1heGltdW0gbGluZSBsZW5ndGggb2YgIiArIG1heExl
bmd0aCArICIuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0KLQotCi0gICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYyBBUEkKLSAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLSAgICByZXR1cm4gewotICAgICAgICAiUHJvZ3JhbSI6IGNoZWNrUHJvZ3JhbUZv
ck1heExlbmd0aAotICAgIH07Ci0KLX07Ci0KLX0se31dLDM0OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgYSBt
YXhpbXVtIG51bWJlciBvZiBuZXN0ZWQgY2FsbGJhY2tzLgotICogQGF1dGhvciBJYW4gQ2hyaXN0
aWFuIE15ZXJzCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5p
dGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gICAgLy8gQ29uc3RhbnRzCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgdmFy
IFRIUkVTSE9MRCA9IGNvbnRleHQub3B0aW9uc1swXTsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgICAvLyBQdWJsaWMgQVBJCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgdmFy
IGNhbGxiYWNrU3RhY2sgPSBbXTsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIkZ1bmN0aW9u
RXhwcmVzc2lvbiI6IGZ1bmN0aW9uIChub2RlKSB7Ci0gICAgICAgICAgICB2YXIgcGFyZW50ID0g
Y29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsKLQotICAgICAgICAgICAgaWYgKHBhcmVudC50
eXBlID09PSAiQ2FsbEV4cHJlc3Npb24iKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2tTdGFj
ay5wdXNoKG5vZGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY2FsbGJhY2tT
dGFjay5sZW5ndGggPiBUSFJFU0hPTEQpIHsKLSAgICAgICAgICAgICAgICB2YXIgb3B0cyA9IHtu
dW06IGNhbGxiYWNrU3RhY2subGVuZ3RoLCBtYXg6IFRIUkVTSE9MRH07Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRvbyBtYW55IG5lc3RlZCBjYWxsYmFja3MgKHt7bnVt
fX0pLiBNYXhpbXVtIGFsbG93ZWQgaXMge3ttYXh9fS4iLCBvcHRzKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSwKLQotCi0gICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgY2FsbGJhY2tTdGFjay5wb3AoKTsKLSAgICAgICAgfQotCi0g
ICAgfTsKLQotfTsKLQotfSx7fV0sMzU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
ewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIGEgZnVuY3Rpb24gaGFz
IHRvbyBtYW55IHBhcmFtZXRlcnMKLSAqIEBhdXRob3IgSWx5YSBWb2xvZGluCi0gKi8KLQotLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAi
dXNlIHN0cmljdCI7Ci0KLSAgICB2YXIgbnVtUGFyYW1zID0gY29udGV4dC5vcHRpb25zWzBdIHx8
IDM7Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogZnVu
Y3Rpb24obm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUucGFyYW1zLmxlbmd0aCA+IG51bVBh
cmFtcykgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUaGlzIGZ1bmN0
aW9uIGhhcyB0b28gbWFueSBwYXJhbWV0ZXJzICh7e2NvdW50fX0pLiBNYXhpbXVtIGFsbG93ZWQg
aXMge3ttYXh9fS4iLCB7Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50OiBub2RlLnBhcmFtcy5s
ZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgIG1heDogbnVtUGFyYW1zCi0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgIkZ1bmN0aW9uRXhw
cmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLnBhcmFtcy5s
ZW5ndGggPiBudW1QYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiVGhpcyBmdW5jdGlvbiBoYXMgdG9vIG1hbnkgcGFyYW1ldGVycyAoe3tjb3VudH19KS4gTWF4
aW11bSBhbGxvd2VkIGlzIHt7bWF4fX0uIiwgewotICAgICAgICAgICAgICAgICAgICBjb3VudDog
bm9kZS5wYXJhbXMubGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICBtYXg6IG51bVBhcmFtcwot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQot
fTsKLQotfSx7fV0sMzY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0g
KiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBzZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN0YXRl
bWVudHMgaW4gYSBmdW5jdGlvbi4KLSAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycwotICov
Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewot
Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEhl
bHBlcnMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICB2YXIgZnVuY3Rpb25TdGFjayA9
IFtdLAotICAgICAgICBtYXhTdGF0ZW1lbnRzID0gY29udGV4dC5vcHRpb25zWzBdIHx8IDEwOwot
Ci0gICAgZnVuY3Rpb24gc3RhcnRGdW5jdGlvbigpIHsKLSAgICAgICAgZnVuY3Rpb25TdGFjay5w
dXNoKDApOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGVuZEZ1bmN0aW9uKG5vZGUpIHsKLSAgICAg
ICAgdmFyIGNvdW50ID0gZnVuY3Rpb25TdGFjay5wb3AoKTsKLQotICAgICAgICBpZiAoY291bnQg
PiBtYXhTdGF0ZW1lbnRzKSB7Ci0gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhp
cyBmdW5jdGlvbiBoYXMgdG9vIG1hbnkgc3RhdGVtZW50cyAoe3tjb3VudH19KS4gTWF4aW11bSBh
bGxvd2VkIGlzIHt7bWF4fX0uIiwKLSAgICAgICAgICAgICAgICAgICAgeyBjb3VudDogY291bnQs
IG1heDogbWF4U3RhdGVtZW50cyB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9u
IGNvdW50U3RhdGVtZW50cyhub2RlKSB7Ci0gICAgICAgIGZ1bmN0aW9uU3RhY2tbZnVuY3Rpb25T
dGFjay5sZW5ndGggLSAxXSArPSBub2RlLmJvZHkubGVuZ3RoOwotICAgIH0KLQotICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMgQVBJCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBzdGFydEZ1
bmN0aW9uLAotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogc3RhcnRGdW5jdGlvbiwKLQot
ICAgICAgICAiQmxvY2tTdGF0ZW1lbnQiOiBjb3VudFN0YXRlbWVudHMsCi0KLSAgICAgICAgIkZ1
bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGVuZEZ1bmN0aW9uLAotICAgICAgICAiRnVuY3Rpb25F
eHByZXNzaW9uOmV4aXQiOiBlbmRGdW5jdGlvbgotICAgIH07Ci0KLX07Ci0KLX0se31dLDM3Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGZsYWcgdXNlIG9mIGNvbnN0cnVjdG9ycyB3aXRob3V0IGNhcGl0YWwgbGV0dGVycwot
ICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcwotICogQGNvcHlyaWdodCAyMDEzLTIwMTQgTmlj
aG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKi8KLQotInVzZSBzdHJpY3Qi
OwotCi12YXIgQ0FQU19BTExPV0VEID0gWwotICAgICJOdW1iZXIiLAotICAgICJTdHJpbmciLAot
ICAgICJCb29sZWFuIiwKLSAgICAiRGF0ZSIsCi0gICAgIkFycmF5IiwKLSAgICAiU3ltYm9sIiwK
LSAgICAiUmVnRXhwIgotXTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVm
aW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7Ci0KLSAgICB2YXIgY29uZmlnID0gY29udGV4dC5vcHRpb25zWzBdIHx8
IHt9OwotICAgIGNvbmZpZy5uZXdJc0NhcCA9IGNvbmZpZy5uZXdJc0NhcCA9PT0gZmFsc2UgPyBm
YWxzZSA6IHRydWU7Ci0gICAgY29uZmlnLmNhcElzTmV3ID0gY29uZmlnLmNhcElzTmV3ID09PSBm
YWxzZSA/IGZhbHNlIDogdHJ1ZTsKLQotICAgIHZhciBsaXN0ZW5lcnMgPSB7fTsKLQotICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0gICAgLyoqCi0gICAgICogR2V0IGV4YWN0IGNhbGxlZSBuYW1lIGZyb20gZXhwcmVzc2lv
bgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBDYWxsRXhwcmVzc2lvbiBvciBOZXdFeHBy
ZXNzaW9uIG5vZGUKLSAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBuYW1lCi0gICAgICovCi0gICAg
ZnVuY3Rpb24gZXh0cmFjdE5hbWVGcm9tRXhwcmVzc2lvbihub2RlKSB7Ci0KLSAgICAgICAgdmFy
IG5hbWUgPSAiIiwKLSAgICAgICAgICAgIHByb3BlcnR5OwotCi0gICAgICAgIGlmIChub2RlLmNh
bGxlZS50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIpIHsKLSAgICAgICAgICAgIHByb3BlcnR5
ID0gbm9kZS5jYWxsZWUucHJvcGVydHk7Ci0KLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eS50eXBl
ID09PSAiTGl0ZXJhbCIgJiYgKHR5cGVvZiBwcm9wZXJ0eS52YWx1ZSA9PT0gInN0cmluZyIpKSB7
Ci0gICAgICAgICAgICAgICAgbmFtZSA9IHByb3BlcnR5LnZhbHVlOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChwcm9wZXJ0eS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgIW5vZGUuY2FsbGVlLmNv
bXB1dGVkKSB7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IHByb3BlcnR5Lm5hbWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuYW1lID0gbm9kZS5jYWxsZWUu
bmFtZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICB9Ci0KLSAgICAvKioK
LSAgICAgKiBSZXR1cm5zIHRoZSBjYXBpdGFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgc3RyaW5nIC0K
LSAgICAgKiBXaGV0aGVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgdXBwZXJjYXNlLCBsb3dlcmNh
c2UsIG9yIG5vbi1hbHBoYWJldGljCi0gICAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciBTdHJpbmcK
LSAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBjYXBpdGFsaXphdGlvbiBzdGF0ZTogIm5vbi1hbHBo
YSIsICJsb3dlciIsIG9yICJ1cHBlciIKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBnZXRDYXAoc3Ry
KSB7Ci0gICAgICAgIHZhciBmaXJzdENoYXIgPSBzdHIuY2hhckF0KDApOwotCi0gICAgICAgIHZh
ciBmaXJzdENoYXJMb3dlciA9IGZpcnN0Q2hhci50b0xvd2VyQ2FzZSgpOwotICAgICAgICB2YXIg
Zmlyc3RDaGFyVXBwZXIgPSBmaXJzdENoYXIudG9VcHBlckNhc2UoKTsKLQotICAgICAgICBpZiAo
Zmlyc3RDaGFyTG93ZXIgPT09IGZpcnN0Q2hhclVwcGVyKSB7Ci0gICAgICAgICAgICAvLyBjaGFy
IGhhcyBubyB1cHBlcmNhc2UgdmFyaWFudCwgc28gaXQncyBub24tYWxwaGFiZXRpYwotICAgICAg
ICAgICAgcmV0dXJuICJub24tYWxwaGEiOwotICAgICAgICB9IGVsc2UgaWYgKGZpcnN0Q2hhciA9
PT0gZmlyc3RDaGFyTG93ZXIpIHsKLSAgICAgICAgICAgIHJldHVybiAibG93ZXIiOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuICJ1cHBlciI7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBDaGVjayBpZiBjYXBpdGFsaXphdGlvbiBpcyBhbGxvd2VkIGZv
ciBhIENhbGxFeHByZXNzaW9uCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIENhbGxFeHBy
ZXNzaW9uIG5vZGUKLSAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2FsbGVlTmFtZSBDYXBpdGFsaXpl
ZCBjYWxsZWUgbmFtZSBmcm9tIGEgQ2FsbEV4cHJlc3Npb24KLSAgICAgKiBAcmV0dXJucyB7Qm9v
bGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZWUgbWF5IGJlIGNhcGl0YWxpemVkCi0gICAg
ICovCi0gICAgZnVuY3Rpb24gaXNDYXBBbGxvd2VkKG5vZGUsIGNhbGxlZU5hbWUpIHsKLSAgICAg
ICAgaWYgKENBUFNfQUxMT1dFRC5pbmRleE9mKGNhbGxlZU5hbWUpID49IDApIHsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjYWxsZWVOYW1lID09PSAi
VVRDIiAmJiBub2RlLmNhbGxlZS50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIpIHsKLSAgICAg
ICAgICAgIC8vIGFsbG93IGlmIGNhbGxlZSBpcyBEYXRlLlVUQwotICAgICAgICAgICAgcmV0dXJu
IG5vZGUuY2FsbGVlLm9iamVjdC50eXBlID09PSAiSWRlbnRpZmllciIgJiYKLSAgICAgICAgICAg
ICAgICAgICBub2RlLmNhbGxlZS5vYmplY3QubmFtZSA9PT0gIkRhdGUiOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g
ICAgLy8gUHVibGljCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgaWYgKGNvbmZpZy5u
ZXdJc0NhcCkgewotICAgICAgICBsaXN0ZW5lcnMuTmV3RXhwcmVzc2lvbiA9IGZ1bmN0aW9uKG5v
ZGUpIHsKLQotICAgICAgICAgICAgdmFyIGNvbnN0cnVjdG9yTmFtZSA9IGV4dHJhY3ROYW1lRnJv
bUV4cHJlc3Npb24obm9kZSk7Ci0gICAgICAgICAgICBpZiAoY29uc3RydWN0b3JOYW1lICYmIGdl
dENhcChjb25zdHJ1Y3Rvck5hbWUpID09PSAibG93ZXIiKSB7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIkEgY29uc3RydWN0b3IgbmFtZSBzaG91bGQgbm90IHN0YXJ0IHdp
dGggYSBsb3dlcmNhc2UgbGV0dGVyLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAg
IH0KLQotICAgIGlmIChjb25maWcuY2FwSXNOZXcpIHsKLSAgICAgICAgbGlzdGVuZXJzLkNhbGxF
eHByZXNzaW9uID0gZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICB2YXIgY2FsbGVlTmFt
ZSA9IGV4dHJhY3ROYW1lRnJvbUV4cHJlc3Npb24obm9kZSk7Ci0gICAgICAgICAgICBpZiAoY2Fs
bGVlTmFtZSAmJiBnZXRDYXAoY2FsbGVlTmFtZSkgPT09ICJ1cHBlciIgJiYgIWlzQ2FwQWxsb3dl
ZChub2RlLCBjYWxsZWVOYW1lKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJBIGZ1bmN0aW9uIHdpdGggYSBuYW1lIHN0YXJ0aW5nIHdpdGggYW4gdXBwZXJjYXNlIGxl
dHRlciBzaG91bGQgb25seSBiZSB1c2VkIGFzIGEgY29uc3RydWN0b3IuIik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH07Ci0gICAgfQotCi0gICAgcmV0dXJuIGxpc3RlbmVyczsKLX07Ci0KLX0s
e31dLDM4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVv
dmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiB1c2luZyBjb25zdHJ1Y3RvciB3aXRob3V0IHBhcmVu
dGhlc2VzCi0gKiBAYXV0aG9yIElseWEgVm9sb2RpbgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwot
Ci0gICAgcmV0dXJuIHsKLQotICAgICAgICAiTmV3RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKLSAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vucyhub2RlKTsKLSAg
ICAgICAgICAgIHZhciBwcmVudGljZXNUb2tlbnMgPSB0b2tlbnMuZmlsdGVyKGZ1bmN0aW9uKHRv
a2VuKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlID09PSAiKCIgfHwgdG9r
ZW4udmFsdWUgPT09ICIpIjsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKHByZW50
aWNlc1Rva2Vucy5sZW5ndGggPCAyKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIk1pc3NpbmcgJygpJyBpbnZva2luZyBhIGNvbnN0cnVjdG9yIik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSwzOTpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVz
ZSBvZiBhbGVydCwgY29uZmlybSwgcHJvbXB0Ci0gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2Fz
Ci0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEhlbHBl
cnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWZ1bmN0aW9uIG1hdGNoUHJvaGliaXRlZChu
YW1lKSB7Ci0gICAgcmV0dXJuIG5hbWUubWF0Y2goL14oYWxlcnR8Y29uZmlybXxwcm9tcHQpJC8p
OwotfQotCi1mdW5jdGlvbiByZXBvcnQoY29udGV4dCwgbm9kZSwgcmVzdWx0KSB7Ci0gICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQge3tuYW1lfX0uIiwgeyBuYW1lOiByZXN1bHRb
MV0gfSk7Ci19Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlv
bgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1
bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAgICAgdmFyIHJlc3VsdDsKLQotICAgICAgICAgICAg
Ly8gd2l0aG91dCB3aW5kb3cuCi0gICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSA9PT0g
IklkZW50aWZpZXIiKSB7Ci0KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXRjaFByb2hpYml0
ZWQobm9kZS5jYWxsZWUubmFtZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlcG9ydChjb250ZXh0LCBub2RlLCByZXN1bHQpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLmNhbGxlZS50eXBlID09
PSAiTWVtYmVyRXhwcmVzc2lvbiIgJiYgbm9kZS5jYWxsZWUucHJvcGVydHkudHlwZSA9PT0gIklk
ZW50aWZpZXIiKSB7Ci0KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXRjaFByb2hpYml0ZWQo
bm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0
ICYmIG5vZGUuY2FsbGVlLm9iamVjdC5uYW1lID09PSAid2luZG93IikgewotICAgICAgICAgICAg
ICAgICAgICByZXBvcnQoY29udGV4dCwgbm9kZSwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sNDA6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3
IERpc2FsbG93IGNvbnN0cnVjdGlvbiBvZiBkZW5zZSBhcnJheXMgdXNpbmcgdGhlIEFycmF5IGNv
bnN0cnVjdG9yCi0gKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwu
Y29tLz4KLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9u
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGZ1bmN0aW9uIGNoZWNrKG5vZGUp
IHsKLSAgICAgICAgaWYgKAotICAgICAgICAgICAgbm9kZS5hcmd1bWVudHMubGVuZ3RoICE9PSAx
ICYmCi0gICAgICAgICAgICBub2RlLmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYKLSAg
ICAgICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICJBcnJheSIKLSAgICAgICAgKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhlIGFycmF5IGxpdGVyYWwgbm90YXRpb24g
W10gaXMgcHJlZmVycmFibGUuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gewot
ICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBjaGVjaywKLSAgICAgICAgIk5ld0V4cHJlc3Npb24i
OiBjaGVjawotICAgIH07Ci0KLX07Ci0KLX0se31dLDQxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgYml0d2lzZSBp
ZGVudGlmaWVycwotICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcwotICovCi0KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBz
dHJpY3QiOwotCi0gICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHsKLSAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgdXNlIG9mICd7e29wZXJhdG9yfX0nLiIsIHsgb3BlcmF0
b3I6IG5vZGUub3BlcmF0b3IgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIkJp
bmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIC8vIHdhcm4g
Zm9yIF4gfCAmIH4gPDwgPj4gPj4+Ci0gICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvci5tYXRj
aCgvXig/OltcXiZcfH5dfDw8fD4+Pj8pJC8pKSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0KG5v
ZGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0sCi0KLSAgICAgICAgIlVuYXJ5RXhwcmVz
c2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAgICAgLy8gd2FybiBmb3IgfgotICAg
ICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICJ+IikgewotICAgICAgICAgICAgICAgIHJl
cG9ydChub2RlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQot
fSx7fV0sNDI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmls
ZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYXJndW1lbnRzLmNhbGxlZSBhbmQgYXJndW1l
bnRzLmNhbGxlci4KLSAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKLSAqLwotCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ug
c3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIk1lbWJlckV4cHJlc3Npb24iOiBm
dW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YXIgb2JqZWN0TmFtZSA9IG5vZGUub2JqZWN0
Lm5hbWUsCi0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1l
OwotCi0gICAgICAgICAgICBpZiAob2JqZWN0TmFtZSA9PT0gImFyZ3VtZW50cyIgJiYgIW5vZGUu
Y29tcHV0ZWQgJiYgcHJvcGVydHlOYW1lICYmIHByb3BlcnR5TmFtZS5tYXRjaCgvXmNhbGxlW2Vy
XSQvKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJBdm9pZCBhcmd1
bWVudHMue3twcm9wZXJ0eX19LiIsIHsgcHJvcGVydHk6IHByb3BlcnR5TmFtZSB9KTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sNDM6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyB2YXJpYWJsZSBsZWFrIGluIENhdGNoQ2xhdXNlcyBpbiBJRSA4IGFuZCBlYXJsaWVyCi0g
KiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQot
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gICAgZnVuY3Rpb24gcGFyYW1Jc1NoYWRvd2luZyhzY29wZSwgbmFtZSkgewot
ICAgICAgICB2YXIgZm91bmQgPSBzY29wZS52YXJpYWJsZXMuc29tZShmdW5jdGlvbih2YXJpYWJs
ZSkgewotICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLm5hbWUgPT09IG5hbWU7Ci0gICAgICAg
IH0pOwotCi0gICAgICAgIGlmIChmb3VuZCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoc2NvcGUudXBwZXIpIHsKLSAgICAgICAgICAgIHJldHVy
biBwYXJhbUlzU2hhZG93aW5nKHNjb3BlLnVwcGVyLCBuYW1lKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAg
Ly8gUHVibGljIEFQSQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0K
LSAgICAgICAgIkNhdGNoQ2xhdXNlIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgdmFy
IHNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpOwotCi0gICAgICAgICAgICBpZiAocGFyYW1Jc1No
YWRvd2luZyhzY29wZSwgbm9kZS5wYXJhbS5uYW1lKSkgewotICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJWYWx1ZSBvZiAne3tuYW1lfX0nIG1heSBiZSBvdmVyd3JpdHRlbiBp
biBJRSA4IGFuZCBlYXJsaWVyLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6IG5v
ZGUucGFyYW0ubmFtZSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07
Ci0KLX0se31dLDQ0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICog
QGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdHJhaWxpbmcgY29tbWFzIGluIG9iamVjdCBsaXRl
cmFscy4KLSAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycwotICovCi0KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJp
Y3QiOwotCi0gICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAvLyBIZWxwZXJzCi0gICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0gICAgZnVuY3Rpb24gY2hlY2tGb3JUcmFpbGluZ0NvbW1hKG5v
ZGUpIHsKLSAgICAgICAgdmFyIHNlY29uZFRvTGFzdFRva2VuID0gY29udGV4dC5nZXRMYXN0VG9r
ZW5zKG5vZGUsIDIpWzBdOwotCi0gICAgICAgIHZhciBpdGVtcyA9IG5vZGUucHJvcGVydGllcyB8
fCBub2RlLmVsZW1lbnRzLAotICAgICAgICAgICAgbGFzdEl0ZW0gPSBpdGVtc1tpdGVtcy5sZW5n
dGggLSAxXTsKLSAgICAgICAgLy8gVGhlIGxhc3QgdG9rZW4gaW4gYW4gb2JqZWN0L2FycmF5IGxp
dGVyYWwgd2lsbCBhbHdheXMgYmUgYSBjbG9zaW5nCi0gICAgICAgIC8vIGN1cmx5LCBzbyB3ZSBj
aGVjayB0aGUgc2Vjb25kIHRvIGxhc3QgdG9rZW4gZm9yIGEgY29tbWEuCi0gICAgICAgIGlmIChz
ZWNvbmRUb0xhc3RUb2tlbi52YWx1ZSA9PT0gIiwiICYmIGl0ZW1zLmxlbmd0aCAmJiBsYXN0SXRl
bSkgewotICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobGFzdEl0ZW0sIHNlY29uZFRvTGFzdFRv
a2VuLmxvYy5zdGFydCwgIlRyYWlsaW5nIGNvbW1hLiIpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYyBBUEkKLSAgICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSAgICByZXR1cm4gewotICAgICAgICAiT2JqZWN0RXhwcmVzc2lvbiI6IGNo
ZWNrRm9yVHJhaWxpbmdDb21tYSwKLSAgICAgICAgIkFycmF5RXhwcmVzc2lvbiI6IGNoZWNrRm9y
VHJhaWxpbmdDb21tYQotICAgIH07Ci0KLX07Ci0KLX0se31dLDQ1OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgYXNz
aWdubWVudCBpbiBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24KLSAqIEBhdXRob3IgU3RlcGhlbiBN
dXJyYXkgPHNwbXVycmF5enp6PgotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgZnVuY3Rpb24gaXNQ
YXJlbnRoZXNpc2VkKG5vZGUpIHsKLSAgICAgICAgdmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0
LmdldFRva2VuQmVmb3JlKG5vZGUpLAotICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5n
ZXRUb2tlbkFmdGVyKG5vZGUpOwotCi0gICAgICAgIHJldHVybiBwcmV2aW91c1Rva2VuLnZhbHVl
ID09PSAiKCIgJiYgcHJldmlvdXNUb2tlbi5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdICYmCi0g
ICAgICAgICAgICBuZXh0VG9rZW4udmFsdWUgPT09ICIpIiAmJiBuZXh0VG9rZW4ucmFuZ2VbMF0g
Pj0gbm9kZS5yYW5nZVsxXTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpc1BhcmVudGhlc2lzZWRU
d2ljZShub2RlKSB7Ci0gICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tl
bkJlZm9yZShub2RlLCAxKSwKLSAgICAgICAgICAgIG5leHRUb2tlbiA9IGNvbnRleHQuZ2V0VG9r
ZW5BZnRlcihub2RlLCAxKTsKLQotICAgICAgICByZXR1cm4gaXNQYXJlbnRoZXNpc2VkKG5vZGUp
ICYmCi0gICAgICAgICAgICBwcmV2aW91c1Rva2VuLnZhbHVlID09PSAiKCIgJiYgcHJldmlvdXNU
b2tlbi5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdICYmCi0gICAgICAgICAgICBuZXh0VG9rZW4u
dmFsdWUgPT09ICIpIiAmJiBuZXh0VG9rZW4ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXTsKLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiB0ZXN0Rm9yQXNzaWduKG5vZGUpIHsKLSAgICAgICAgaWYgKG5v
ZGUudGVzdCAmJiAobm9kZS50ZXN0LnR5cGUgPT09ICJBc3NpZ25tZW50RXhwcmVzc2lvbiIpICYm
ICFpc1BhcmVudGhlc2lzZWRUd2ljZShub2RlLnRlc3QpKSB7Ci0gICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgYSBjb25kaXRpb25hbCBleHByZXNzaW9uIGFuZCBpbnN0
ZWFkIHNhdyBhbiBhc3NpZ25tZW50LiIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHsKLSAgICAgICAgIklmU3RhdGVtZW50IjogdGVzdEZvckFzc2lnbiwKLSAgICAgICAgIldoaWxl
U3RhdGVtZW50IjogdGVzdEZvckFzc2lnbiwKLSAgICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQiOiB0
ZXN0Rm9yQXNzaWduLAotICAgICAgICAiRm9yU3RhdGVtZW50IjogdGVzdEZvckFzc2lnbgotICAg
IH07Ci0KLX07Ci0KLX0se31dLDQ2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
LS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGNvbnNvbGUgb2JqZWN0
Ci0gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCi0gKi8KLQotCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1t
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsK
LQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIk1lbWJlckV4cHJlc3Npb24iOiBmdW5jdGlvbihu
b2RlKSB7Ci0KLSAgICAgICAgICAgIGlmIChub2RlLm9iamVjdC5uYW1lID09PSAiY29uc29sZSIp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBjb25z
b2xlIHN0YXRlbWVudC4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfTsKLQot
fTsKLQotfSx7fV0sNDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0g
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2UgY29uc3RhbnQgY29uZGl0aW9ucwotICog
QGF1dGhvciBDaHJpc3RpYW4gU2NodWx6IDxodHRwOi8vcm5kbS5kZT4KLSAqLwotCi0KLS8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVz
ZSBzdHJpY3QiOwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEhlbHBlcnMKLSAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgaWYgYSBub2Rl
IGhhcyBhIGNvbnN0YW50IHRydXRoaW5lc3MgdmFsdWUuCi0gICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVjay4KLSAgICAgKiBAcmV0dXJucyB7Qm9vbH0gdHJ1
ZSB3aGVuIG5vZGUncyB0cnV0aGluZXNzIGlzIGNvbnN0YW50Ci0gICAgICogQHByaXZhdGUKLSAg
ICAgKi8KLSAgICBmdW5jdGlvbiBpc0NvbnN0YW50KG5vZGUpIHsKLSAgICAgICAgc3dpdGNoIChu
b2RlLnR5cGUpIHsKLSAgICAgICAgY2FzZSAiTGl0ZXJhbCI6Ci0gICAgICAgIGNhc2UgIkZ1bmN0
aW9uRXhwcmVzc2lvbiI6Ci0gICAgICAgIGNhc2UgIk9iamVjdEV4cHJlc3Npb24iOgotICAgICAg
ICBjYXNlICJBcnJheUV4cHJlc3Npb24iOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGNhc2UgIlVuYXJ5RXhwcmVzc2lvbiI6Ci0gICAgICAgICAgICByZXR1cm4gaXNDb25zdGFu
dChub2RlLmFyZ3VtZW50KTsKLSAgICAgICAgY2FzZSAiQmluYXJ5RXhwcmVzc2lvbiI6Ci0gICAg
ICAgIGNhc2UgIkxvZ2ljYWxFeHByZXNzaW9uIjoKLSAgICAgICAgICAgIHJldHVybiBpc0NvbnN0
YW50KG5vZGUubGVmdCkgJiYgaXNDb25zdGFudChub2RlLnJpZ2h0KTsKLSAgICAgICAgY2FzZSAi
QXNzaWdubWVudEV4cHJlc3Npb24iOgotICAgICAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQobm9k
ZS5yaWdodCk7Ci0gICAgICAgIGNhc2UgIlNlcXVlbmNlRXhwcmVzc2lvbiI6Ci0gICAgICAgICAg
ICByZXR1cm4gaXNDb25zdGFudChub2RlLmV4cHJlc3Npb25zW25vZGUuZXhwcmVzc2lvbnMubGVu
Z3RoIC0gMV0pOwotICAgICAgICAvLyBubyBkZWZhdWx0Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlcG9ydHMgd2hlbiB0aGUgZ2l2
ZW4gbm9kZSBjb250YWlucyBhIGNvbnN0YW50IGNvbmRpdGlvbi4KLSAgICAgKiBAcGFyYW0ge0FT
VE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRvIGNoZWNrLgotICAgICAqIEByZXR1cm5zIHt2b2lk
fQotICAgICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gY2hlY2tDb25zdGFudENv
bmRpdGlvbihub2RlKSB7Ci0gICAgICAgIGlmIChub2RlLnRlc3QgJiYgaXNDb25zdGFudChub2Rl
LnRlc3QpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBj
b25zdGFudCBjb25kaXRpb24uIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gICAgLy8gUHVibGljCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAg
cmV0dXJuIHsKLSAgICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGNoZWNrQ29uc3RhbnRD
b25kaXRpb24sCi0gICAgICAgICJJZlN0YXRlbWVudCI6IGNoZWNrQ29uc3RhbnRDb25kaXRpb24s
Ci0gICAgICAgICJXaGlsZVN0YXRlbWVudCI6IGNoZWNrQ29uc3RhbnRDb25kaXRpb24sCi0gICAg
ICAgICJEb1doaWxlU3RhdGVtZW50IjogY2hlY2tDb25zdGFudENvbmRpdGlvbiwKLSAgICAgICAg
IkZvclN0YXRlbWVudCI6IGNoZWNrQ29uc3RhbnRDb25kaXRpb24KLSAgICB9OwotCi19OwotCi19
LHt9XSw0ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxl
b3ZlcnZpZXcgUnVsZSB0byBmb3JiaWQgY29udHJvbCBjaGFyYWN0ZXMgZnJvbSByZWd1bGFyIGV4
cHJlc3Npb25zLgotICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcwotICovCi0KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBz
dHJpY3QiOwotCi0KLSAgICBmdW5jdGlvbiBnZXRSZWdFeHAobm9kZSkgewotCi0gICAgICAgIGlm
IChub2RlLnZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7Ci0gICAgICAgICAgICByZXR1cm4gbm9k
ZS52YWx1ZTsKLSAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gInN0cmlu
ZyIpIHsKLQotICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCku
cG9wKCk7Ci0gICAgICAgICAgICBpZiAoKHBhcmVudC50eXBlID09PSAiTmV3RXhwcmVzc2lvbiIg
fHwgcGFyZW50LnR5cGUgPT09ICJDYWxsRXhwcmVzc2lvbiIpICYmCi0gICAgICAgICAgICBwYXJl
bnQuY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiBwYXJlbnQuY2FsbGVlLm5hbWUgPT09
ICJSZWdFeHAiKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyB0aGVyZSBjb3VsZCBiZSBhbiBpbnZh
bGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcKLSAgICAgICAgICAgICAgICB0cnkgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChub2RlLnZhbHVlKTsKLSAgICAgICAg
ICAgICAgICB9IGNhdGNoIChleCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICB9Ci0KLQotCi0gICAgcmV0
dXJuIHsKLQotICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAg
ICAgdmFyIGNvbXB1dGVkVmFsdWUsCi0gICAgICAgICAgICAgICAgcmVnZXggPSBnZXRSZWdFeHAo
bm9kZSk7Ci0KLSAgICAgICAgICAgIGlmIChyZWdleCkgewotICAgICAgICAgICAgICAgIGNvbXB1
dGVkVmFsdWUgPSByZWdleC50b1N0cmluZygpOwotICAgICAgICAgICAgICAgIGlmICgvW1x4MDAt
XHgxZl0vLnRlc3QoY29tcHV0ZWRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgY29udHJvbCBjaGFyYWN0ZXIgaW4gcmVndWxhciBl
eHByZXNzaW9uLiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH07Ci0KLX07Ci0KLX0se31dLDQ5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGEgZGVidWdn
ZXIgc3RhdGVtZW50Ci0gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCi0gKi8KLQotCi0vLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1
c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0gICAgICAgICJEZWJ1Z2dlclN0YXRlbWVudCI6
IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4
cGVjdGVkICdkZWJ1Z2dlcicgc3RhdGVtZW50LiIpOwotICAgICAgICB9Ci0gICAgfTsKLQotfTsK
LQotfSx7fV0sNTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIGRlbGV0aW5nIHZhcmlhYmxlcwotICogQGF1
dGhvciBJbHlhIFZvbG9kaW4KLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVs
ZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7
Ci0KLSAgICAgICAgIlVuYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAg
ICAgIGlmIChub2RlLm9wZXJhdG9yID09PSAiZGVsZXRlIiAmJiBub2RlLmFyZ3VtZW50LnR5cGUg
PT09ICJJZGVudGlmaWVyIikgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJWYXJpYWJsZXMgc2hvdWxkIG5vdCBiZSBkZWxldGVkLiIpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sNTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gY2hlY2sgZm9yIGFtYmln
dW91cyBkaXYgb3BlcmF0b3IgaW4gcmVnZXhlcwotICogQGF1dGhvciBNYXR0IER1VmFsbCA8aHR0
cDovL3d3dy5tYXR0ZHV2YWxsLmNvbT4KLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJl
dHVybiB7Ci0KLSAgICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAg
ICB2YXIgdG9rZW4gPSBjb250ZXh0LmdldEZpcnN0VG9rZW5zKG5vZGUsIDEpWzBdLAotICAgICAg
ICAgICAgICAgIG5vZGVUeXBlID0gdG9rZW4udHlwZSwKLSAgICAgICAgICAgICAgICBzb3VyY2U7
Ci0KLSAgICAgICAgICAgIGlmIChub2RlVHlwZSA9PT0gIlJlZ3VsYXJFeHByZXNzaW9uIikgewot
ICAgICAgICAgICAgICAgIHNvdXJjZSA9IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbnMobm9kZSwgMSlb
MF0udmFsdWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc291cmNlWzFdID09PSAiPSIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkEgcmVndWxhciBleHByZXNz
aW9uIGxpdGVyYWwgY2FuIGJlIGNvbmZ1c2VkIHdpdGggJy89Jy4iKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw1Mjpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcg
UnVsZSB0byBmbGFnIHVzZSBvZiBkdXBsaWNhdGUga2V5cyBpbiBhbiBvYmplY3QuCi0gKiBAYXV0
aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJl
dHVybiB7Ci0KLSAgICAgICAgIk9iamVjdEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0K
LSAgICAgICAgICAgIC8vIE9iamVjdCB0aGF0IHdpbGwgYmUgYSBtYXAgb2YgcHJvcGVydGllcy0t
c2FmZSBiZWNhdXNlIHdlIHdpbGwKLSAgICAgICAgICAgIC8vIHByZWZpeCBhbGwgb2YgdGhlIGtl
eXMuCi0gICAgICAgICAgICB2YXIgbm9kZVByb3BzID0ge307Ci0KLSAgICAgICAgICAgIG5vZGUu
cHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGtleU5hbWUgPSBwcm9wZXJ0eS5rZXkubmFtZSB8fCBwcm9wZXJ0eS5rZXkudmFsdWU7Ci0g
ICAgICAgICAgICAgICAgdmFyIGtleSA9IHByb3BlcnR5LmtpbmQgKyAiLSIgKyBrZXlOYW1lOwot
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVQcm9wc1trZXldKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJEdXBsaWNhdGUga2V5ICd7e2tleX19Jy4iLCB7IGtl
eToga2V5TmFtZSB9KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBub2RlUHJvcHNba2V5XSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSk7Ci0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDUzOltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZs
YWcgYGVsc2VgIGFmdGVyIGEgYHJldHVybmAgaW4gYGlmYAotICogQGF1dGhvciBJYW4gQ2hyaXN0
aWFuIE15ZXJzCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5p
dGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gICAgLy8gSGVscGVycwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIGZ1bmN0
aW9uIGNoZWNrRm9yUmV0dXJuU3RhdGVtZW50KG5vZGUsIGFsdGVybmF0ZSkgewotICAgICAgICBp
ZiAobm9kZS50eXBlID09PSAiUmV0dXJuU3RhdGVtZW50IikgewotICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQoYWx0ZXJuYXRlLCAiVW5leHBlY3RlZCAnZWxzZScgYWZ0ZXIgJ3JldHVybicuIik7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVi
bGljIEFQSQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0KLSAgICAg
ICAgIklmU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICAvLyBEb24n
dCBib3RoZXIgZmluZGluZyBhIFJldHVyblN0YXRlbWVudCwgaWYgdGhlcmUncyBubyBgZWxzZWAK
LSAgICAgICAgICAgIC8vIG9yIGlmIHRoZSBhbHRlcm5hdGUgaXMgYWxzbyBhbiBpZiAoaW5kaWNh
dGluZyBhbiBlbHNlIGlmKS4KLSAgICAgICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSAmJiBub2Rl
LmNvbnNlcXVlbnQgJiYgbm9kZS5hbHRlcm5hdGUudHlwZSAhPT0gIklmU3RhdGVtZW50Iikgewot
Ci0gICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIEJsb2NrU3RhdGVtZW50LCBjaGVjayBl
YWNoIGNvbnNlcXVlbnQgYm9keSBub2RlLgotICAgICAgICAgICAgICAgIGlmIChub2RlLmNvbnNl
cXVlbnQudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50IikgewotICAgICAgICAgICAgICAgICAgICBu
b2RlLmNvbnNlcXVlbnQuYm9keS5mb3JFYWNoKGZ1bmN0aW9uIChib2R5Tm9kZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY2hlY2tGb3JSZXR1cm5TdGF0ZW1lbnQoYm9keU5vZGUsIG5vZGUu
YWx0ZXJuYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBJZiBub3QgYSBibG9jayBzdGF0ZW1lbnQsIG1ha2Ugc3VyZSB0aGUgY29uc2VxdWVudCBpc24n
dCBhCi0gICAgICAgICAgICAgICAgLy8gUmV0dXJuU3RhdGVtZW50Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3JSZXR1cm5TdGF0ZW1lbnQobm9k
ZS5jb25zZXF1ZW50LCBub2RlLmFsdGVybmF0ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9OwotCi19OwotCi19LHt9XSw1NDpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBm
bGFnIHRoZSB1c2Ugb2YgZW1wdHkgY2hhcmFjdGVyIGNsYXNzZXMgaW4gcmVndWxhciBleHByZXNz
aW9ucwotICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCi0gKi8KLQotLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmlj
dCI7Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkg
ewotICAgICAgICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKG5vZGUpOwotICAg
ICAgICAgICAgdG9rZW5zLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7Ci0gICAgICAgICAgICAg
ICAgLyoKLSAgICAgICAgICAgICAgICBwbGFpbi1FbmdsaXNoIGRlc2NyaXB0aW9uIG9mIHRoZSBm
b2xsb3dpbmcgcmVnZXhwOgotICAgICAgICAgICAgICAgIDAuIGBeYCBmaXggdGhlIG1hdGNoIGF0
IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZwotICAgICAgICAgICAgICAgIDEuIGBcL2A6IHRo
ZSBgL2AgdGhhdCBiZWdpbnMgdGhlIHJlZ2V4cAotICAgICAgICAgICAgICAgIDIuIGAoW15cXFtd
fFxcLnxcWyhbXlxcXF1dfFxcLikrXF0pKmA6IHJlZ2V4cCBjb250ZW50czsgMCBvciBtb3JlIG9m
IHRoZSBmb2xsb3dpbmcKLSAgICAgICAgICAgICAgICAgIDIuMC4gYFteXFxbXWA6IGFueSBjaGFy
YWN0ZXIgdGhhdCdzIG5vdCBhIGBcYCBvciBhIGBbYCAoYW55dGhpbmcgYnV0IGVzY2FwZSBzZXF1
ZW5jZXMgYW5kIGNoYXJhY3RlciBjbGFzc2VzKQotICAgICAgICAgICAgICAgICAgMi4xLiBgXFwu
YDogYW4gZXNjYXBlIHNlcXVlbmNlCi0gICAgICAgICAgICAgICAgICAyLjIuIGBcWyhbXlxcXF1d
fFxcLikrXF1gOiBhIGNoYXJhY3RlciBjbGFzcyB0aGF0IGlzbid0IGVtcHR5Ci0gICAgICAgICAg
ICAgICAgMy4gYFwvYCB0aGUgYC9gIHRoYXQgZW5kcyB0aGUgcmVnZXhwCi0gICAgICAgICAgICAg
ICAgNC4gYFtnaW15XSpgOiBvcHRpb25hbCByZWdleHAgZmxhZ3MKLSAgICAgICAgICAgICAgICA1
LiBgJGA6IGZpeCB0aGUgbWF0Y2ggYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCi0gICAgICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gIlJlZ3VsYXJFeHBy
ZXNzaW9uIiAmJgotICAgICAgICAgICAgICAgICEvXlwvKFteXFxbXXxcXC58XFsoW15cXFxdXXxc
XC4pK1xdKSpcL1tnaW15XSokLy50ZXN0KHRva2VuLnZhbHVlKSkgewotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRW1wdHkgY2xhc3MuIik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgIH07Ci0KLX07Ci0KLX0se31d
LDU1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVy
dmlldyBSdWxlIHRvIGZsYWcgd2hlbiBsYWJlbCBpcyBub3QgdXNlZCBmb3IgYSBsb29wIG9yIHN3
aXRjaAotICogQGF1dGhvciBJbHlhIFZvbG9kaW4KLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQot
ICAgIHJldHVybiB7Ci0KLSAgICAgICAgIkxhYmVsZWRTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2Rl
KSB7Ci0gICAgICAgICAgICBpZiAobm9kZS5ib2R5LnR5cGUgIT09ICJGb3JTdGF0ZW1lbnQiICYm
IG5vZGUuYm9keS50eXBlICE9PSAiV2hpbGVTdGF0ZW1lbnQiICYmIG5vZGUuYm9keS50eXBlICE9
PSAiRG9XaGlsZVN0YXRlbWVudCIgJiYgbm9kZS5ib2R5LnR5cGUgIT09ICJTd2l0Y2hTdGF0ZW1l
bnQiICYmIG5vZGUuYm9keS50eXBlICE9PSAiRm9ySW5TdGF0ZW1lbnQiKSB7Ci0gICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgbGFiZWwge3tsfX0iLCB7bDog
bm9kZS5sYWJlbC5uYW1lfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19
OwotCi19LHt9XSw1NjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBhbiBlbXB0eSBibG9jayBzdGF0ZW1l
bnQKLSAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKLSAqLwotInVzZSBzdHJpY3QiOwotCi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAg
IHJldHVybiB7Ci0KLSAgICAgICAgIkJsb2NrU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgewot
ICAgICAgICAgICAgdmFyIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCksCi0gICAg
ICAgICAgICAgICAgcGFyZW50ID0gYW5jZXN0b3JzW2FuY2VzdG9ycy5sZW5ndGggLSAxXSwKLSAg
ICAgICAgICAgICAgICBwYXJlbnRUeXBlID0gcGFyZW50LnR5cGUsCi0gICAgICAgICAgICAgICAg
aXNGaW5hbGx5QmxvY2sgPSAocGFyZW50VHlwZSA9PT0gIlRyeVN0YXRlbWVudCIpICYmIChwYXJl
bnQuZmluYWxpemVyID09PSBub2RlKTsKLQotICAgICAgICAgICAgaWYgKC9GdW5jdGlvbkV4cHJl
c3Npb258RnVuY3Rpb25EZWNsYXJhdGlvbnxDYXRjaENsYXVzZS8udGVzdChwYXJlbnRUeXBlKSB8
fAotICAgICAgICAgICAgICAgICAgICAoaXNGaW5hbGx5QmxvY2sgJiYgIXBhcmVudC5oYW5kbGVy
cy5sZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAobm9kZS5ib2R5Lmxlbmd0aCA9PT0gMCkgewotICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJFbXB0eSBibG9jayBzdGF0ZW1lbnQuIik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgIlN3aXRjaFN0YXRlbWVudCI6IGZ1bmN0aW9u
KG5vZGUpIHsKLQotICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlLmNhc2VzID09PSAidW5kZWZp
bmVkIiB8fCBub2RlLmNhc2VzLmxlbmd0aCA9PT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJFbXB0eSBzd2l0Y2ggc3RhdGVtZW50LiIpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sNTc6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBjb21w
YXJpc29ucyB0byBudWxsIHdpdGhvdXQgYSB0eXBlLWNoZWNraW5nCi0gKiBvcGVyYXRvci4KLSAq
IEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycwotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAg
IHJldHVybiB7Ci0KLSAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7
Ci0gICAgICAgICAgICB2YXIgYmFkT3BlcmF0b3IgPSBub2RlLm9wZXJhdG9yID09PSAiPT0iIHx8
IG5vZGUub3BlcmF0b3IgPT09ICIhPSI7Ci0KLSAgICAgICAgICAgIGlmIChub2RlLnJpZ2h0LnR5
cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLnJpZ2h0LnJhdyA9PT0gIm51bGwiICYmIGJhZE9wZXJh
dG9yIHx8Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUubGVmdC50eXBlID09PSAiTGl0ZXJhbCIg
JiYgbm9kZS5sZWZ0LnJhdyA9PT0gIm51bGwiICYmIGJhZE9wZXJhdG9yKSB7Ci0gICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVzZSDigJg9PT3igJkgdG8gY29tcGFyZSB3aXRo
IOKAmG51bGzigJkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19Owot
Ci19LHt9XSw1ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBldmFsKCkgc3RhdGVtZW50Ci0gKiBAYXV0
aG9yIE5pY2hvbGFzIEMuIFpha2FzCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
IFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB2YXIg
SU1QTElFRF9FVkFMID0gL3NldCg/OlRpbWVvdXR8SW50ZXJ2YWwpLzsKLQotICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
ICAgLyoqCi0gICAgICogRGV0ZXJtaW5lcyBpZiBhIG5vZGUgcmVwcmVzZW50cyBhIGNhbGwgdG8g
c2V0VGltZW91dC9zZXRJbnRlcnZhbCB3aXRoCi0gICAgICogYSBzdHJpbmcgYXJndW1lbnQuCi0g
ICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgotICAgICAqIEBy
ZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBub2RlIG1hdGNoZXMsIGZhbHNlIGlmIG5vdC4K
LSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIGZ1bmN0aW9uIGlzSW1wbGllZEV2YWwobm9k
ZSkgewotCi0gICAgICAgIHZhciBpc01lbWJlckV4cHJlc3Npb24gPSAobm9kZS5jYWxsZWUudHlw
ZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSwKLSAgICAgICAgICAgIGlzSWRlbnRpZmllciA9IChu
b2RlLmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIpLAotICAgICAgICAgICAgaXNTZXRNZXRo
b2QgPSAoaXNJZGVudGlmaWVyICYmIElNUExJRURfRVZBTC50ZXN0KG5vZGUuY2FsbGVlLm5hbWUp
KSB8fAotICAgICAgICAgICAgICAgIChpc01lbWJlckV4cHJlc3Npb24gJiYgbm9kZS5jYWxsZWUu
b2JqZWN0Lm5hbWUgPT09ICJ3aW5kb3ciICYmCi0gICAgICAgICAgICAgICAgSU1QTElFRF9FVkFM
LnRlc3Qobm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSkpLAotICAgICAgICAgICAgaGFzU3RyaW5n
QXJndW1lbnQgPSBub2RlLmFyZ3VtZW50cy5sZW5ndGggJiYgKHR5cGVvZiBub2RlLmFyZ3VtZW50
c1swXS52YWx1ZSA9PT0gInN0cmluZyIpOwotCi0gICAgICAgIHJldHVybiBpc1NldE1ldGhvZCAm
JiBoYXNTdHJpbmdBcmd1bWVudDsKLSAgICB9Ci0KLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSAgICAvLyBQdWJsaWMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICByZXR1cm4gewot
ICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBp
ZiAobm9kZS5jYWxsZWUubmFtZSA9PT0gImV2YWwiKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgImV2YWwgY2FuIGJlIGhhcm1mdWwuIik7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKGlzSW1wbGllZEV2YWwobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5h
cmd1bWVudHMubGVuZ3RoICYmICh0eXBlb2Ygbm9kZS5hcmd1bWVudHNbMF0udmFsdWUgPT09ICJz
dHJpbmciKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiSW1w
bGllZCBldmFsIGNhbiBiZSBoYXJtZnVsLiBQYXNzIGEgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHN0
cmluZy4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9OwotCi19OwotCi19LHt9XSw1OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGFzc2lnbm1lbnQgb2YgdGhlIGV4
Y2VwdGlvbiBwYXJhbWV0ZXIKLSAqIEBhdXRob3IgU3RlcGhlbiBNdXJyYXkgPHNwbXVycmF5enp6
PgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgdmFyIGluQ2F0Y2ggPSBmYWxzZSwKLSAg
ICAgICAgZXhjZXB0aW9uTmFtZSA9IG51bGw7Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJD
YXRjaENsYXVzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGluQ2F0Y2ggPSB0cnVl
OwotICAgICAgICAgICAgZXhjZXB0aW9uTmFtZSA9IG5vZGUucGFyYW0ubmFtZTsKLSAgICAgICAg
fSwKLQotICAgICAgICAiQ2F0Y2hDbGF1c2U6ZXhpdCI6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgaW5DYXRjaCA9IGZhbHNlOwotICAgICAgICAgICAgZXhjZXB0aW9uTmFtZSA9IG51bGw7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjogZnVuY3Rpb24obm9k
ZSkgewotCi0gICAgICAgICAgICBpZiAoaW5DYXRjaCkgewotCi0gICAgICAgICAgICAgICAgaWYg
KG5vZGUubGVmdC5uYW1lID09PSBleGNlcHRpb25OYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJEbyBub3QgYXNzaWduIHRvIHRoZSBleGNlcHRpb24gcGFy
YW1ldGVyLiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sNjA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBhZGRpbmcgcHJvcGVydGll
cyB0byBuYXRpdmUgb2JqZWN0J3MgcHJvdG90eXBlcy4KLSAqIEBhdXRob3IgRGF2aWQgTmVsc29u
Ci0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJlcXVpcmVtZW50cwotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotdmFyIEJVSUxUSU5TID0gWwotICAgICJPYmplY3QiLCAiRnVu
Y3Rpb24iLCAiQXJyYXkiLCAiU3RyaW5nIiwgIkJvb2xlYW4iLCAiTnVtYmVyIiwgIkRhdGUiLAot
ICAgICJSZWdFeHAiLCAiRXJyb3IiLCAiRXZhbEVycm9yIiwgIlJhbmdlRXJyb3IiLCAiUmVmZXJl
bmNlRXJyb3IiLAotICAgICJTeW50YXhFcnJvciIsICJUeXBlRXJyb3IiLCAiVVJJRXJyb3IiCi1d
OwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
LQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgLy8gaGFuZGxl
IHRoZSBBcnJheS5wcm90b3R5cGUuZXh0cmEgc3R5bGUgY2FzZQotICAgICAgICAiQXNzaWdubWVu
dEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YXIgbGhzID0gbm9k
ZS5sZWZ0LCBhZmZlY3RzUHJvdG87Ci0KLSAgICAgICAgICAgIGlmIChsaHMudHlwZSAhPT0gIk1l
bWJlckV4cHJlc3Npb24iIHx8IGxocy5vYmplY3QudHlwZSAhPT0gIk1lbWJlckV4cHJlc3Npb24i
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBhZmZlY3RzUHJvdG8gPSBsaHMub2JqZWN0LmNvbXB1dGVkID8KLSAgICAgICAgICAgICAgICBs
aHMub2JqZWN0LnByb3BlcnR5LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBsaHMub2JqZWN0LnByb3Bl
cnR5LnZhbHVlID09PSAicHJvdG90eXBlIiA6Ci0gICAgICAgICAgICAgICAgbGhzLm9iamVjdC5w
cm9wZXJ0eS5uYW1lID09PSAicHJvdG90eXBlIjsKLQotICAgICAgICAgICAgaWYgKCFhZmZlY3Rz
UHJvdG8pIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIEJVSUxUSU5TLmZvckVhY2goZnVuY3Rpb24oYnVpbHRpbikgewotICAgICAgICAgICAg
ICAgIGlmIChsaHMub2JqZWN0Lm9iamVjdC5uYW1lID09PSBidWlsdGluKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGJ1aWx0aW4gKyAiIHByb3RvdHlwZSBpcyBy
ZWFkIG9ubHksIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBiZSBhZGRlZC4iKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBoYW5kbGUg
dGhlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUpIGNhc2UKLSAgICAgICAg
IkNhbGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICB2YXIgY2Fs
bGVlID0gbm9kZS5jYWxsZWUsCi0gICAgICAgICAgICAgICAgc3ViamVjdCwKLSAgICAgICAgICAg
ICAgICBvYmplY3Q7Ci0KLSAgICAgICAgICAgIC8vIG9ubHkgd29ycnkgYWJvdXQgT2JqZWN0LmRl
ZmluZVByb3BlcnR5Ci0gICAgICAgICAgICBpZiAoY2FsbGVlLnR5cGUgPT09ICJNZW1iZXJFeHBy
ZXNzaW9uIiAmJgotICAgICAgICAgICAgICAgIGNhbGxlZS5vYmplY3QubmFtZSA9PT0gIk9iamVj
dCIgJiYKLSAgICAgICAgICAgICAgICBjYWxsZWUucHJvcGVydHkubmFtZSA9PT0gImRlZmluZVBy
b3BlcnR5IikgewotCi0gICAgICAgICAgICAgICAgLy8gdmVyaWZ5IHRoZSBvYmplY3QgYmVpbmcg
YWRkZWQgdG8gaXMgYSBuYXRpdmUgcHJvdG90eXBlCi0gICAgICAgICAgICAgICAgc3ViamVjdCA9
IG5vZGUuYXJndW1lbnRzWzBdOwotICAgICAgICAgICAgICAgIG9iamVjdCA9IHN1YmplY3Qub2Jq
ZWN0OwotCi0gICAgICAgICAgICAgICAgaWYgKG9iamVjdCAmJgotICAgICAgICAgICAgICAgICAg
ICBvYmplY3QudHlwZSA9PT0gIklkZW50aWZpZXIiICYmCi0gICAgICAgICAgICAgICAgICAgIChC
VUlMVElOUy5pbmRleE9mKG9iamVjdC5uYW1lKSA+IC0xKSAmJgotICAgICAgICAgICAgICAgICAg
ICBzdWJqZWN0LnByb3BlcnR5Lm5hbWUgPT09ICJwcm90b3R5cGUiKSB7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgb2JqZWN0Lm5hbWUgKyAiIHByb3RvdHlwZSBp
cyByZWFkIG9ubHksIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBiZSBhZGRlZC4iKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0s
e31dLDYxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVv
dmVydmlldyBSdWxlIHRvIGZsYWcgdW5uZWNlc3NhcnkgYmluZCBjYWxscwotICogQGF1dGhvciBC
ZW5jZSBEw6FueWkgPGJlbmNlQGRhbnlpLm1lPgotICogQGNvcHlyaWdodCAyMDE0IEJlbmNlIETD
oW55aS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHZhciBz
Y29wZSA9IFt7Ci0gICAgICAgIGRlcHRoOiAtMSwKLSAgICAgICAgZm91bmQ6IDAKLSAgICB9XTsK
LQotICAgIC8qKgotICAgICAqIEdldCB0aGUgdG9wbW9zdCBzY29wZQotICAgICAqIEByZXR1cm5z
IHtPYmplY3R9IFRoZSB0b3Btb3N0IHNjb3BlCi0gICAgICovCi0gICAgZnVuY3Rpb24gZ2V0VG9w
U2NvcGUoKSB7Ci0gICAgICAgIHJldHVybiBzY29wZVtzY29wZS5sZW5ndGggLSAxXTsKLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBJbmNyZW1lbnQgdGhlIGRlcHRoIG9mIHRoZSB0b3Agc2NvcGUK
LSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBpbmNyZW1lbnRT
Y29wZURlcHRoKCkgewotICAgICAgICB2YXIgdG9wID0gZ2V0VG9wU2NvcGUoKTsKLSAgICAgICAg
dG9wLmRlcHRoKys7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGVjcmVtZW50IHRoZSBkZXB0
aCBvZiB0aGUgdG9wIHNjb3BlCi0gICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAg
ZnVuY3Rpb24gZGVjcmVtZW50U2NvcGVEZXB0aCgpIHsKLSAgICAgICAgdmFyIHRvcCA9IGdldFRv
cFNjb3BlKCk7Ci0gICAgICAgIHRvcC5kZXB0aC0tOwotICAgIH0KLQotICAgIHJldHVybiB7Ci0g
ICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlm
IChub2RlLmFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYKLSAgICAgICAgICAgICAgICBub2RlLmNh
bGxlZS50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIgJiYKLSAgICAgICAgICAgICAgICBub2Rl
LmNhbGxlZS5wcm9wZXJ0eS5uYW1lID09PSAiYmluZCIgJiYKLSAgICAgICAgICAgICAgICBub2Rl
LmNhbGxlZS5vYmplY3QudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIpIHsKLSAgICAgICAg
ICAgICAgICBzY29wZS5wdXNoKHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbDogbm9kZSwKLSAg
ICAgICAgICAgICAgICAgICAgZGVwdGg6IC0xLAotICAgICAgICAgICAgICAgICAgICBmb3VuZDog
MAotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAg
ICAiQ2FsbEV4cHJlc3Npb246ZXhpdCI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZh
ciB0b3AgPSBnZXRUb3BTY29wZSgpOwotICAgICAgICAgICAgaWYgKHRvcC5jYWxsID09PSBub2Rl
ICYmIHRvcC5mb3VuZCA9PT0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJUaGUgZnVuY3Rpb24gYmluZGluZyBpcyB1bm5lY2Vzc2FyeS4iKTsKLSAgICAgICAgICAg
ICAgICBzY29wZS5wb3AoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkZ1
bmN0aW9uRXhwcmVzc2lvbiI6IGluY3JlbWVudFNjb3BlRGVwdGgsCi0gICAgICAgICJGdW5jdGlv
bkV4cHJlc3Npb246ZXhpdCI6IGRlY3JlbWVudFNjb3BlRGVwdGgsCi0gICAgICAgICJGdW5jdGlv
bkRlY2xhcmF0aW9uIjogaW5jcmVtZW50U2NvcGVEZXB0aCwKLSAgICAgICAgIkZ1bmN0aW9uRGVj
bGFyYXRpb246ZXhpdCI6IGRlY3JlbWVudFNjb3BlRGVwdGgsCi0gICAgICAgICJUaGlzRXhwcmVz
c2lvbiI6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIHRvcCA9IGdldFRvcFNjb3BlKCk7
Ci0gICAgICAgICAgICBpZiAodG9wLmRlcHRoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgdG9w
LmZvdW5kKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9
XSw2MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3Zl
cnZpZXcgUnVsZSB0byBmbGFnIHVubmVjZXNzYXJ5IGRvdWJsZSBuZWdhdGlvbiBpbiBCb29sZWFu
IGNvbnRleHRzCi0gKiBAYXV0aG9yIEJyYW5kb24gTWlsbHMKLSAqLwotCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0
IjsKLQotICAgIHJldHVybiB7Ci0gICAgICAgICJVbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbiAo
bm9kZSkgewotICAgICAgICAgICAgdmFyIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3Jz
KCksCi0gICAgICAgICAgICAgICAgcGFyZW50ID0gYW5jZXN0b3JzLnBvcCgpLAotICAgICAgICAg
ICAgICAgIGdyYW5kcGFyZW50ID0gYW5jZXN0b3JzLnBvcCgpOwotCi0gICAgICAgICAgICAvLyBF
eGl0IGVhcmx5IGlmIGl0J3MgZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2gKLSAgICAgICAgICAgIGlm
IChub2RlLm9wZXJhdG9yICE9PSAiISIgfHwKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50LnR5
cGUgIT09ICJVbmFyeUV4cHJlc3Npb24iIHx8Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudC5v
cGVyYXRvciAhPT0gIiEiKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAvLyBpZiAoPGJvb2w+KSAuLi4KLSAgICAgICAgICAgIGlmIChncmFu
ZHBhcmVudC50eXBlID09PSAiSWZTdGF0ZW1lbnQiKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBkb3VibGUgbmVnYXRpb24gaW4gYW4gaWYgc3RhdGVt
ZW50IGNvbmRpdGlvbi4iKTsKLQotICAgICAgICAgICAgLy8gZG8gLi4uIHdoaWxlICg8Ym9vbD4p
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGdyYW5kcGFyZW50LnR5cGUgPT09ICJEb1doaWxlU3Rh
dGVtZW50IikgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRh
bnQgZG91YmxlIG5lZ2F0aW9uIGluIGEgZG8gd2hpbGUgbG9vcCBjb25kaXRpb24uIik7Ci0KLSAg
ICAgICAgICAgIC8vIHdoaWxlICg8Ym9vbD4pIC4uLgotICAgICAgICAgICAgfSBlbHNlIGlmIChn
cmFuZHBhcmVudC50eXBlID09PSAiV2hpbGVTdGF0ZW1lbnQiKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBkb3VibGUgbmVnYXRpb24gaW4gYSB3aGls
ZSBsb29wIGNvbmRpdGlvbi4iKTsKLQotICAgICAgICAgICAgLy8gPGJvb2w+ID8gLi4uIDogLi4u
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKChncmFuZHBhcmVudC50eXBlID09PSAiQ29uZGl0aW9u
YWxFeHByZXNzaW9uIiAmJgotICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPT09IGdyYW5kcGFy
ZW50LnRlc3QpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVu
ZGFudCBkb3VibGUgbmVnYXRpb24gaW4gYSB0ZXJuYXJ5IGNvbmRpdGlvbi4iKTsKLQotICAgICAg
ICAgICAgLy8gZm9yICguLi47IDxib29sPjsgLi4uKSAuLi4KLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoKGdyYW5kcGFyZW50LnR5cGUgPT09ICJGb3JTdGF0ZW1lbnQiICYmCi0gICAgICAgICAgICAg
ICAgICAgIHBhcmVudCA9PT0gZ3JhbmRwYXJlbnQudGVzdCkpIHsKLSAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiUmVkdW5kYW50IGRvdWJsZSBuZWdhdGlvbiBpbiBhIGZvciBs
b29wIGNvbmRpdGlvbi4iKTsKLQotICAgICAgICAgICAgLy8gITxib29sPgotICAgICAgICAgICAg
fSBlbHNlIGlmICgoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIlVuYXJ5RXhwcmVzc2lvbiIgJiYKLSAg
ICAgICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQub3BlcmF0b3IgPT09ICIhIikpIHsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVkdW5kYW50IG11bHRpcGxlIG5lZ2F0
aW9uLiIpOwotCi0gICAgICAgICAgICAvLyBCb29sZWFuKDxib29sPikKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoKGdyYW5kcGFyZW50LnR5cGUgPT09ICJDYWxsRXhwcmVzc2lvbiIgJiYKLSAgICAg
ICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQuY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIiAm
JgotICAgICAgICAgICAgICAgICAgICBncmFuZHBhcmVudC5jYWxsZWUubmFtZSA9PT0gIkJvb2xl
YW4iKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRhbnQg
ZG91YmxlIG5lZ2F0aW9uIGluIGNhbGwgdG8gQm9vbGVhbigpLiIpOwotCi0gICAgICAgICAgICAv
LyBuZXcgQm9vbGVhbig8Ym9vbD4pCi0gICAgICAgICAgICB9IGVsc2UgaWYgKChncmFuZHBhcmVu
dC50eXBlID09PSAiTmV3RXhwcmVzc2lvbiIgJiYKLSAgICAgICAgICAgICAgICAgICAgZ3JhbmRw
YXJlbnQuY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgotICAgICAgICAgICAgICAgICAg
ICBncmFuZHBhcmVudC5jYWxsZWUubmFtZSA9PT0gIkJvb2xlYW4iKSkgewotICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRhbnQgZG91YmxlIG5lZ2F0aW9uIGluIEJv
b2xlYW4gY29uc3RydWN0b3IgY2FsbC4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH07Ci0KLX07Ci0KLX0se31dLDYzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
LS8qKgotICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBwYXJlbnRoZXNlc2lzbmcgaGlnaGVyIHBy
ZWNlZGVuY2Ugc3ViZXhwcmVzc2lvbnMuCi0gKiBAYXV0aG9yIE1pY2hhZWwgRmljYXJyYQotICov
Ci0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmlu
aXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgewotCi0gICAgZnVuY3Rpb24gaXNQYXJlbnRoZXNpc2VkKG5vZGUpIHsKLSAg
ICAgICAgdmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUpLAot
ICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUpOwotCi0g
ICAgICAgIHJldHVybiBwcmV2aW91c1Rva2VuICYmIG5leHRUb2tlbiAmJgotICAgICAgICAgICAg
cHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYmIHByZXZpb3VzVG9rZW4ucmFuZ2VbMV0gPD0g
bm9kZS5yYW5nZVswXSAmJgotICAgICAgICAgICAgbmV4dFRva2VuLnZhbHVlID09PSAiKSIgJiYg
bmV4dFRva2VuLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV07Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZSkgewotICAgICAgICB2YXIgcHJldmlvdXNUb2tl
biA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSwgMSksCi0gICAgICAgICAgICBuZXh0VG9r
ZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9kZSwgMSk7Ci0KLSAgICAgICAgcmV0dXJuIGlz
UGFyZW50aGVzaXNlZChub2RlKSAmJiBwcmV2aW91c1Rva2VuICYmIG5leHRUb2tlbiAmJgotICAg
ICAgICAgICAgcHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYmIHByZXZpb3VzVG9rZW4ucmFu
Z2VbMV0gPD0gbm9kZS5yYW5nZVswXSAmJgotICAgICAgICAgICAgbmV4dFRva2VuLnZhbHVlID09
PSAiKSIgJiYgbmV4dFRva2VuLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV07Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gcHJlY2VkZW5jZShub2RlKSB7Ci0KLSAgICAgICAgc3dpdGNoIChub2RlLnR5
cGUpIHsKLSAgICAgICAgICAgIGNhc2UgIlNlcXVlbmNlRXhwcmVzc2lvbiI6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIGNhc2UgIkFzc2lnbm1lbnRFeHByZXNzaW9u
IjoKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLQotICAgICAgICAgICAgY2FzZSAiQ29uZGl0
aW9uYWxFeHByZXNzaW9uIjoKLSAgICAgICAgICAgICAgICByZXR1cm4gMzsKLQotICAgICAgICAg
ICAgY2FzZSAiTG9naWNhbEV4cHJlc3Npb24iOgotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5vcGVyYXRvcikgewotICAgICAgICAgICAgICAgICAgICBjYXNlICJ8fCI6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gNDsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiJiYiOgot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDU7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IG5vIGRlZmF1bHQKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvKiBmYWxs
cyB0aHJvdWdoICovCi0gICAgICAgICAgICBjYXNlICJCaW5hcnlFeHByZXNzaW9uIjoKLSAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3BlcmF0b3IpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSAifCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNjsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSAiXiI6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNzsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSAiJiI6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gODsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiPT0iOgotICAgICAgICAgICAgICAgICAg
ICBjYXNlICIhPSI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgIj09PSI6Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgIiE9PSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gOTsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSAiPCI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
Ijw9IjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiPiI6Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgIj49IjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiaW4iOgotICAgICAgICAgICAg
ICAgICAgICBjYXNlICJpbnN0YW5jZW9mIjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAxMDsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiPDwiOgotICAgICAgICAgICAgICAgICAg
ICBjYXNlICI+PiI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgIj4+PiI6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMTE7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgIisiOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlICItIjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAxMjsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiKiI6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgIi8iOgotICAgICAgICAgICAgICAgICAgICBjYXNlICIlIjoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAxMzsKLSAgICAgICAgICAgICAgICAgICAgLy8gbm8gZGVmYXVs
dAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICov
Ci0gICAgICAgICAgICBjYXNlICJVbmFyeUV4cHJlc3Npb24iOgotICAgICAgICAgICAgICAgIHJl
dHVybiAxNDsKLSAgICAgICAgICAgIGNhc2UgIlVwZGF0ZUV4cHJlc3Npb24iOgotICAgICAgICAg
ICAgICAgIHJldHVybiAxNTsKLSAgICAgICAgICAgIGNhc2UgIkNhbGxFeHByZXNzaW9uIjoKLSAg
ICAgICAgICAgICAgICAvLyBJSUZFIGlzIGFsbG93ZWQgdG8gaGF2ZSBwYXJlbnMgaW4gYW55IHBv
c2l0aW9uICgjNjU1KQotICAgICAgICAgICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAi
RnVuY3Rpb25FeHByZXNzaW9uIikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAxNjsKLSAgICAgICAgICAg
IGNhc2UgIk5ld0V4cHJlc3Npb24iOgotICAgICAgICAgICAgICAgIHJldHVybiAxNzsKLSAgICAg
ICAgICAgIC8vIG5vIGRlZmF1bHQKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMTg7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHsKLSAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIkdyYXR1aXRvdXMgcGFyZW50aGVzZXMgYXJvdW5kIGV4cHJlc3Npb24uIik7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gZHJ5VW5hcnlVcGRhdGUobm9kZSkgewotICAgICAgICBpZiAoaXNQ
YXJlbnRoZXNpc2VkKG5vZGUuYXJndW1lbnQpICYmIHByZWNlZGVuY2Uobm9kZS5hcmd1bWVudCkg
Pj0gcHJlY2VkZW5jZShub2RlKSkgewotICAgICAgICAgICAgcmVwb3J0KG5vZGUuYXJndW1lbnQp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZHJ5Q2FsbE5ldyhub2RlKSB7Ci0g
ICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9kZS5jYWxsZWUpICYmIHByZWNlZGVuY2Uobm9k
ZS5jYWxsZWUpID49IHByZWNlZGVuY2Uobm9kZSkgJiYKLSAgICAgICAgIShub2RlLnR5cGUgPT09
ICJDYWxsRXhwcmVzc2lvbiIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVz
c2lvbiIpKSB7Ci0gICAgICAgICAgICByZXBvcnQobm9kZS5jYWxsZWUpOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKLSAgICAgICAgICAgIGlm
IChpc1BhcmVudGhlc2lzZWRUd2ljZShub2RlLmFyZ3VtZW50c1swXSkgJiYgcHJlY2VkZW5jZShu
b2RlLmFyZ3VtZW50c1swXSkgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkFzc2lnbm1lbnRFeHByZXNz
aW9uIn0pKSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuYXJndW1lbnRzWzBdKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFtdLmZvckVhY2guY2Fs
bChub2RlLmFyZ3VtZW50cywgZnVuY3Rpb24oYXJnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlz
UGFyZW50aGVzaXNlZChhcmcpICYmIHByZWNlZGVuY2UoYXJnKSA+PSBwcmVjZWRlbmNlKHt0eXBl
OiAiQXNzaWdubWVudEV4cHJlc3Npb24ifSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwb3J0
KGFyZyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBkcnlCaW5hcnlMb2dpY2FsKG5vZGUpIHsKLSAgICAgICAgdmFy
IHByZWMgPSBwcmVjZWRlbmNlKG5vZGUpOwotICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5v
ZGUubGVmdCkgJiYgcHJlY2VkZW5jZShub2RlLmxlZnQpID49IHByZWMpIHsKLSAgICAgICAgICAg
IHJlcG9ydChub2RlLmxlZnQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc1BhcmVudGhlc2lz
ZWQobm9kZS5yaWdodCkgJiYgcHJlY2VkZW5jZShub2RlLnJpZ2h0KSA+IHByZWMpIHsKLSAgICAg
ICAgICAgIHJlcG9ydChub2RlLnJpZ2h0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biB7Ci0gICAgICAgICJBcnJheUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAg
ICAgICBbXS5mb3JFYWNoLmNhbGwobm9kZS5lbGVtZW50cywgZnVuY3Rpb24oZSkgewotICAgICAg
ICAgICAgICAgIGlmIChlICYmIGlzUGFyZW50aGVzaXNlZChlKSAmJiBwcmVjZWRlbmNlKGUpID49
IHByZWNlZGVuY2Uoe3R5cGU6ICJBc3NpZ25tZW50RXhwcmVzc2lvbiJ9KSkgewotICAgICAgICAg
ICAgICAgICAgICByZXBvcnQoZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0sCi0gICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5v
ZGUpIHsKLSAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9kZS5yaWdodCkgJiYgcHJl
Y2VkZW5jZShub2RlLnJpZ2h0KSA+PSBwcmVjZWRlbmNlKG5vZGUpKSB7Ci0gICAgICAgICAgICAg
ICAgcmVwb3J0KG5vZGUucmlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAg
ICAiQmluYXJ5RXhwcmVzc2lvbiI6IGRyeUJpbmFyeUxvZ2ljYWwsCi0gICAgICAgICJDYWxsRXhw
cmVzc2lvbiI6IGRyeUNhbGxOZXcsCi0gICAgICAgICJDb25kaXRpb25hbEV4cHJlc3Npb24iOiBm
dW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUudGVz
dCkgJiYgcHJlY2VkZW5jZShub2RlLnRlc3QpID49IHByZWNlZGVuY2Uoe3R5cGU6ICJMb2dpY2Fs
RXhwcmVzc2lvbiIsIG9wZXJhdG9yOiAifHwifSkpIHsKLSAgICAgICAgICAgICAgICByZXBvcnQo
bm9kZS50ZXN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lz
ZWQobm9kZS5jb25zZXF1ZW50KSAmJiBwcmVjZWRlbmNlKG5vZGUuY29uc2VxdWVudCkgPj0gcHJl
Y2VkZW5jZSh7dHlwZTogIkFzc2lnbm1lbnRFeHByZXNzaW9uIn0pKSB7Ci0gICAgICAgICAgICAg
ICAgcmVwb3J0KG5vZGUuY29uc2VxdWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUuYWx0ZXJuYXRlKSAmJiBwcmVjZWRlbmNlKG5vZGUuYWx0
ZXJuYXRlKSA+PSBwcmVjZWRlbmNlKHt0eXBlOiAiQXNzaWdubWVudEV4cHJlc3Npb24ifSkpIHsK
LSAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5hbHRlcm5hdGUpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9LAotICAgICAgICAiRG9XaGlsZVN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsK
LSAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWRUd2ljZShub2RlLnRlc3QpKSB7Ci0gICAg
ICAgICAgICAgICAgcmVwb3J0KG5vZGUudGVzdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0s
Ci0gICAgICAgICJFeHByZXNzaW9uU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgewotICAgICAg
ICAgICAgdmFyIGZpcnN0VG9rZW47Ci0gICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5v
ZGUuZXhwcmVzc2lvbikpIHsKLSAgICAgICAgICAgICAgICBmaXJzdFRva2VuID0gY29udGV4dC5n
ZXRGaXJzdFRva2VuKG5vZGUuZXhwcmVzc2lvbik7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0
VG9rZW4udmFsdWUgIT09ICJmdW5jdGlvbiIgJiYgZmlyc3RUb2tlbi52YWx1ZSAhPT0gInsiKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLmV4cHJlc3Npb24pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkZvckluU3RhdGVt
ZW50IjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChu
b2RlLnJpZ2h0KSkgewotICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnJpZ2h0KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkZvclN0YXRlbWVudCI6IGZ1bmN0aW9uKG5v
ZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLmluaXQgJiYgaXNQYXJlbnRoZXNpc2VkKG5vZGUu
aW5pdCkpIHsKLSAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5pbml0KTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKG5vZGUudGVzdCAmJiBpc1BhcmVudGhlc2lzZWQobm9kZS50
ZXN0KSkgewotICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnRlc3QpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAobm9kZS51cGRhdGUgJiYgaXNQYXJlbnRoZXNpc2VkKG5vZGUu
dXBkYXRlKSkgewotICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnVwZGF0ZSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJJZlN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUp
IHsKLSAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWRUd2ljZShub2RlLnRlc3QpKSB7Ci0g
ICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUudGVzdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0sCi0gICAgICAgICJMb2dpY2FsRXhwcmVzc2lvbiI6IGRyeUJpbmFyeUxvZ2ljYWwsCi0gICAg
ICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgaWYg
KAotICAgICAgICAgICAgICAgIGlzUGFyZW50aGVzaXNlZChub2RlLm9iamVjdCkgJiYKLSAgICAg
ICAgICAgICAgICBwcmVjZWRlbmNlKG5vZGUub2JqZWN0KSA+PSBwcmVjZWRlbmNlKG5vZGUpICYm
Ci0gICAgICAgICAgICAgICAgKAotICAgICAgICAgICAgICAgICAgICBub2RlLmNvbXB1dGVkIHx8
Ci0gICAgICAgICAgICAgICAgICAgICEoCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLm9i
amVjdC50eXBlID09PSAiTGl0ZXJhbCIgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVv
ZiBub2RlLm9iamVjdC52YWx1ZSA9PT0gIm51bWJlciIgJiYKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC9eWzAtOV0rJC8udGVzdChjb250ZXh0LmdldEZpcnN0VG9rZW4obm9kZS5vYmplY3QpLnZh
bHVlKQotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAg
ICAgKSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUub2JqZWN0KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSwKLSAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBkcnlDYWxsTmV3LAotICAg
ICAgICAiT2JqZWN0RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIFtd
LmZvckVhY2guY2FsbChub2RlLnByb3BlcnRpZXMsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgdiA9IGUudmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKHYgJiYgaXNQYXJlbnRo
ZXNpc2VkKHYpICYmIHByZWNlZGVuY2UodikgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkFzc2lnbm1l
bnRFeHByZXNzaW9uIn0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcG9ydCh2KTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSwKLSAgICAgICAgIlJldHVy
blN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLmFyZ3Vt
ZW50ICYmIGlzUGFyZW50aGVzaXNlZChub2RlLmFyZ3VtZW50KSkgewotICAgICAgICAgICAgICAg
IHJlcG9ydChub2RlLmFyZ3VtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAg
ICAgIlNlcXVlbmNlRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIFtd
LmZvckVhY2guY2FsbChub2RlLmV4cHJlc3Npb25zLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChlKSAmJiBwcmVjZWRlbmNlKGUpID49IHByZWNlZGVu
Y2Uobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotICAgICAgICAiU3dpdGNoQ2FzZSI6
IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLnRlc3QgJiYgaXNQYXJlbnRo
ZXNpc2VkKG5vZGUudGVzdCkpIHsKLSAgICAgICAgICAgICAgICByZXBvcnQobm9kZS50ZXN0KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIlN3aXRjaFN0YXRlbWVudCI6IGZ1
bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWRUd2ljZShub2Rl
LmRpc2NyaW1pbmFudCkpIHsKLSAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5kaXNjcmltaW5h
bnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiVGhyb3dTdGF0ZW1lbnQi
OiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUu
YXJndW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuYXJndW1lbnQpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiVW5hcnlFeHByZXNzaW9uIjogZHJ5VW5h
cnlVcGRhdGUsCi0gICAgICAgICJVcGRhdGVFeHByZXNzaW9uIjogZHJ5VW5hcnlVcGRhdGUsCi0g
ICAgICAgICJWYXJpYWJsZURlY2xhcmF0b3IiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAg
ICBpZiAobm9kZS5pbml0ICYmIGlzUGFyZW50aGVzaXNlZChub2RlLmluaXQpICYmIHByZWNlZGVu
Y2Uobm9kZS5pbml0KSA+PSBwcmVjZWRlbmNlKHt0eXBlOiAiQXNzaWdubWVudEV4cHJlc3Npb24i
fSkpIHsKLSAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5pbml0KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSwKLSAgICAgICAgIldoaWxlU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgewot
ICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUudGVzdCkpIHsKLSAgICAg
ICAgICAgICAgICByZXBvcnQobm9kZS50ZXN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwK
LSAgICAgICAgIldpdGhTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBp
ZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS5vYmplY3QpKSB7Ci0gICAgICAgICAgICAgICAg
cmVwb3J0KG5vZGUub2JqZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0K
LX07Ci0KLX0se31dLDY0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgot
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIHVubmVjZXNzYXJ5IHNlbWljb2xv
bnMKLSAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1t
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsK
LQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIkVtcHR5U3RhdGVtZW50IjogZnVuY3Rpb24obm9k
ZSkgewotICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVubmVjZXNzYXJ5IHNlbWlj
b2xvbi4iKTsKLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDY1OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZs
YWcgdW5uZWNlc3Nhcnkgc3RyaWN0IGRpcmVjdGl2ZXMuCi0gKiBAYXV0aG9yIElhbiBDaHJpc3Rp
YW4gTXllcnMKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIGZ1bmN0aW9uIGRpcmVjdGl2ZXMoYmxv
Y2spIHsKLSAgICAgICAgdmFyIGRzID0gW10sIGJvZHkgPSBibG9jay5ib2R5LCBlLCBpLCBsOwot
Ci0gICAgICAgIGZvciAoaSA9IDAsIGwgPSBib2R5Lmxlbmd0aDsgaSA8IGw7ICsraSkgewotICAg
ICAgICAgICAgZSA9IGJvZHlbaV07Ci0KLSAgICAgICAgICAgIGlmICgKLSAgICAgICAgICAgICAg
ICBlLnR5cGUgPT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiAmJgotICAgICAgICAgICAgICAgIGUu
ZXhwcmVzc2lvbi50eXBlID09PSAiTGl0ZXJhbCIgJiYKLSAgICAgICAgICAgICAgICB0eXBlb2Yg
ZS5leHByZXNzaW9uLnZhbHVlID09PSAic3RyaW5nIgotICAgICAgICAgICAgKSB7Ci0gICAgICAg
ICAgICAgICAgZHMucHVzaChlLmV4cHJlc3Npb24pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gZHM7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNTdHJpY3QoZGlyZWN0aXZlKSB7Ci0g
ICAgICAgIHJldHVybiBkaXJlY3RpdmUudmFsdWUgPT09ICJ1c2Ugc3RyaWN0IjsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBjaGVja0ZvclVubmVjZXNzYXJ5VXNlU3RyaWN0KG5vZGUpIHsKLSAgICAg
ICAgdmFyIHVzZVN0cmljdERpcmVjdGl2ZXMsIHNjb3BlLCB1cHBlcjsKLSAgICAgICAgdXNlU3Ry
aWN0RGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXMobm9kZSkuZmlsdGVyKGlzU3RyaWN0KTsKLQotICAg
ICAgICBzd2l0Y2ggKHVzZVN0cmljdERpcmVjdGl2ZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBj
YXNlIDA6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgMToKLSAg
ICAgICAgICAgICAgICBzY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKTsKLSAgICAgICAgICAgICAg
ICB1cHBlciA9IHNjb3BlLnVwcGVyOwotCi0gICAgICAgICAgICAgICAgaWYgKHVwcGVyICYmIHVw
cGVyLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3BlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVwcGVy
ID0gdXBwZXIudXBwZXI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHVwcGVyICYmIHVwcGVyLmlzU3RyaWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KHVzZVN0cmljdERpcmVjdGl2ZXNbMF0sICJVbm5lY2Vzc2FyeSAndXNlIHN0cmljdCcu
Iik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHVzZVN0cmljdERp
cmVjdGl2ZXNbMV0sICJNdWx0aXBsZSAndXNlIHN0cmljdCcgZGlyZWN0aXZlcy4iKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIlByb2dyYW0iOiBjaGVja0Zv
clVubmVjZXNzYXJ5VXNlU3RyaWN0LAotCi0gICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBm
dW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBjaGVja0ZvclVubmVjZXNzYXJ5VXNlU3RyaWN0
KG5vZGUuYm9keSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24i
OiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBjaGVja0ZvclVubmVjZXNzYXJ5VXNlU3Ry
aWN0KG5vZGUuYm9keSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw2NjpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBmbGFnIGZhbGwtdGhyb3VnaCBjYXNlcyBpbiBzd2l0Y2ggc3RhdGVtZW50cy4KLSAqIEBh
dXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly9tYXR0ZHV2YWxsLmNvbS8+Ci0gKi8KLSJ1c2Ugc3Ry
aWN0IjsKLQotCi12YXIgRkFMTFRIUk9VR0hfQ09NTUVOVCA9IC9mYWxsc1xzdGhyb3VnaC87Ci0K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0g
ICAgdmFyIHN3aXRjaGVzID0gW107Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJTd2l0Y2hD
YXNlIjogZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICB2YXIgY29uc2VxdWVudCA9IG5v
ZGUuY29uc2VxdWVudCwKLSAgICAgICAgICAgICAgICBzd2l0Y2hEYXRhID0gc3dpdGNoZXNbc3dp
dGNoZXMubGVuZ3RoIC0gMV0sCi0gICAgICAgICAgICAgICAgaSwKLSAgICAgICAgICAgICAgICBj
b21tZW50cywKLSAgICAgICAgICAgICAgICBjb21tZW50OwotCi0gICAgICAgICAgICAvKgotICAg
ICAgICAgICAgICogU29tZSBkZXZlbG9wZXJzIHdyYXAgY2FzZSBib2RpZXMgaW4gYmxvY2tzLCBz
byBpZiB0aGVyZSBpcyBqdXN0IG9uZQotICAgICAgICAgICAgICogbm9kZSBhbmQgaXQncyBhIGJs
b2NrIHN0YXRlbWVudCwgY2hlY2sgaW5zaWRlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICBpZiAoY29uc2VxdWVudC5sZW5ndGggPT09IDEgJiYgY29uc2VxdWVudFswXS50eXBlID09PSAi
QmxvY2tTdGF0ZW1lbnQiKSB7Ci0gICAgICAgICAgICAgICAgY29uc2VxdWVudCA9IGNvbnNlcXVl
bnRbMF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGNoZWNraW5nIG9uIHByZXZp
b3VzIGNhc2UKLSAgICAgICAgICAgIGlmICghc3dpdGNoRGF0YS5sYXN0Q2FzZUNsb3NlZCkgewot
Ci0gICAgICAgICAgICAgICAgLy8gYSBmYWxsIHRocm91Z2ggY29tbWVudCB3aWxsIGJlIHRoZSBs
YXN0IHRyYWlsaW5nIGNvbW1lbnQgb2YgdGhlIGxhc3QgY2FzZQotICAgICAgICAgICAgICAgIGNv
bW1lbnRzID0gY29udGV4dC5nZXRDb21tZW50cyhzd2l0Y2hEYXRhLmxhc3RDYXNlKS50cmFpbGlu
ZzsKLSAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY29tbWVudHMubGVuZ3RoIC0g
MV07Ci0KLSAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgY29tbWVudAotICAgICAgICAgICAg
ICAgIGlmICghY29tbWVudCB8fCAhRkFMTFRIUk9VR0hfQ09NTUVOVC50ZXN0KGNvbW1lbnQudmFs
dWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHN3aXRjaERhdGEubGFz
dENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgYSBcImJyZWFrXCIgc3Rh
dGVtZW50IGJlZm9yZSBcInt7Y29kZX19XCIuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsg
Y29kZTogbm9kZS50ZXN0ID8gImNhc2UiIDogImRlZmF1bHQiIH0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gbm93IGRlYWxpbmcgd2l0aCB0aGUg
Y3VycmVudCBjYXNlCi0gICAgICAgICAgICBzd2l0Y2hEYXRhLmxhc3RDYXNlQ2xvc2VkID0gZmFs
c2U7Ci0gICAgICAgICAgICBzd2l0Y2hEYXRhLmxhc3RDYXNlID0gbm9kZTsKLQotICAgICAgICAg
ICAgLy8gdHJ5IHRvIHZlcmlmeSB1c2luZyBzdGF0ZW1lbnRzIC0gZ28gYmFja3dhcmRzIGFzIGEg
ZmFzdCBwYXRoIGZvciB0aGUgc2VhcmNoCi0gICAgICAgICAgICBpZiAoY29uc2VxdWVudC5sZW5n
dGgpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSBjb25zZXF1ZW50Lmxlbmd0aCAtIDE7IGkg
Pj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgvKD86QnJlYWt8Q29udGludWV8
UmV0dXJufFRocm93KVN0YXRlbWVudC8udGVzdChjb25zZXF1ZW50W2ldLnR5cGUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2hEYXRhLmxhc3RDYXNlQ2xvc2VkID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyB0
aGUgY2FzZSBzdGF0ZW1lbnQgaGFzIG5vIHN0YXRlbWVudHMsIHNvIGl0IG11c3QgbG9naWNhbGx5
IGZhbGwgdGhyb3VnaAotICAgICAgICAgICAgICAgIHN3aXRjaERhdGEubGFzdENhc2VDbG9zZWQg
PSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICog
QW55IHdhcm5pbmdzIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgbmV4dCBTd2l0Y2hDYXNlIG9jY3Vy
cy4KLSAgICAgICAgICAgICAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gd2FybiBvbiB0aGUgbGFzdCBT
d2l0Y2hDYXNlLCBzaW5jZSBpdCBjYW4ndAotICAgICAgICAgICAgICogZmFsbCB0aHJvdWdoIHRv
IGFueXRoaW5nLgotICAgICAgICAgICAgICovCi0gICAgICAgIH0sCi0KLSAgICAgICAgIlN3aXRj
aFN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHN3aXRjaGVzLnB1c2go
ewotICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsCi0gICAgICAgICAgICAgICAgbGFzdENhc2VD
bG9zZWQ6IHRydWUsCi0gICAgICAgICAgICAgICAgbGFzdENhc2U6IG51bGwKLSAgICAgICAgICAg
IH0pOwotICAgICAgICB9LAotCi0gICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQ6ZXhpdCI6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgc3dpdGNoZXMucG9wKCk7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci19OwotCi19LHt9XSw2NzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioK
LSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBhIGxlYWRpbmcvdHJhaWxpbmcg
ZGVjaW1hbCBwb2ludCBpbiBhIG51bWVyaWMgbGl0ZXJhbAotICogQGF1dGhvciBKYW1lcyBBbGxh
cmRpY2UKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9u
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0gICAgICAgICJM
aXRlcmFsIjogZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUu
dmFsdWUgPT09ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmF3LmluZGV4
T2YoIi4iKSA9PT0gMCkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiQSBsZWFkaW5nIGRlY2ltYWwgcG9pbnQgY2FuIGJlIGNvbmZ1c2VkIHdpdGggYSBkb3QuIik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChub2RlLnJhdy5pbmRleE9m
KCIuIikgPT09IG5vZGUucmF3Lmxlbmd0aCAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIkEgdHJhaWxpbmcgZGVjaW1hbCBwb2ludCBjYW4gYmUgY29uZnVz
ZWQgd2l0aCBhIGRvdC4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw2ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBmdW5j
dGlvbiBkZWNsYXJhdGlvbiBpZGVudGlmaWVycyBhcyB2YXJpYWJsZXMuCi0gKiBAYXV0aG9yIElh
biBDaHJpc3RpYW4gTXllcnMKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVs
ZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
ICAgLyoKLSAgICAgKiBXYWxrIHRoZSBzY29wZSBjaGFpbiBsb29raW5nIGZvciBlaXRoZXIgYSBG
dW5jdGlvbkRlY2xhcmF0aW9uIG9yIGEKLSAgICAgKiBWYXJpYWJsZURlY2xhcmF0aW9uIHdpdGgg
dGhlIHNhbWUgbmFtZSBhcyBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUKLSAgICAgKiBBc3NpZ25tZW50
RXhwcmVzc2lvbi4gSWYgd2UgZmluZCB0aGUgRnVuY3Rpb25EZWNsYXJhdGlvbiBmaXJzdCwgdGhl
biB3ZQotICAgICAqIHdhcm4sIGJlY2F1c2UgYSBGdW5jdGlvbkRlY2xhcmF0aW9uIGlzIHRyeWlu
ZyB0byBiZWNvbWUgYSBWYXJpYWJsZSBvciBhCi0gICAgICogRnVuY3Rpb25FeHByZXNzaW9uLiBJ
ZiB3ZSBmaW5kIGEgVmFyaWFibGVEZWNsYXJhdGlvbiBmaXJzdCwgdGhlbiB3ZSBoYXZlCi0gICAg
ICogYSBsZWdpdGltYXRlIHNoYWRvdyB2YXJpYWJsZS4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBj
aGVja0lmSWRlbnRpZmllcklzRnVuY3Rpb24oc2NvcGUsIG5hbWUpIHsKLSAgICAgICAgdmFyIHZh
cmlhYmxlLAotICAgICAgICAgICAgZGVmLAotICAgICAgICAgICAgaSwKLSAgICAgICAgICAgIGo7
Ci0KLSAgICAgICAgLy8gTG9vcCBvdmVyIGFsbCBvZiB0aGUgaWRlbnRpZmllcnMgYXZhaWxhYmxl
IGluIHNjb3BlLgotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2NvcGUudmFyaWFibGVzLmxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXJpYWJsZSA9IHNjb3BlLnZhcmlhYmxlc1tpXTsKLQot
ICAgICAgICAgICAgLy8gRm9yIGVhY2ggaWRlbnRpZmllciwgc2VlIGlmIGl0IHdhcyBkZWZpbmVk
IGluIF90aGlzXyBzY29wZS4KLSAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB2YXJpYWJsZS5k
ZWZzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgZGVmID0gdmFyaWFibGUuZGVmc1tq
XTsKLQotICAgICAgICAgICAgICAgIC8vIElkZW50aWZpZXIgaXMgYSBmdW5jdGlvbiBhbmQgd2Fz
IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKLSAgICAgICAgICAgICAgICBpZiAoZGVmLm5hbWUubmFt
ZSA9PT0gbmFtZSAmJiBkZWYudHlwZSA9PT0gIkZ1bmN0aW9uTmFtZSIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgLy8gSWRlbnRpZmllciBpcyBhIHZhcmlhYmxlIGFuZCB3YXMgZGVjbGFyZWQgaW4gdGhpcyBz
Y29wZS4gVGhpcwotICAgICAgICAgICAgICAgIC8vIGlzIGEgbGVnaXRpbWF0ZSBzaGFkb3cgdmFy
aWFibGUuCi0gICAgICAgICAgICAgICAgaWYgKGRlZi5uYW1lLm5hbWUgPT09IG5hbWUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIENoZWNrIHRoZSB1cHBlciBzY29wZS4K
LSAgICAgICAgaWYgKHNjb3BlLnVwcGVyKSB7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tJZklk
ZW50aWZpZXJJc0Z1bmN0aW9uKHNjb3BlLnVwcGVyLCBuYW1lKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGdsb2JhbCBzY29wZSBhbmQgaGF2ZW4ndCBmb3VuZCBh
bnl0aGluZy4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLSAgICAvLyBQdWJsaWMgQVBJCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
ICAgcmV0dXJuIHsKLQotICAgICAgICAiQXNzaWdubWVudEV4cHJlc3Npb24iOiBmdW5jdGlvbihu
b2RlKSB7Ci0gICAgICAgICAgICB2YXIgc2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCksCi0gICAg
ICAgICAgICAgICAgbmFtZSA9IG5vZGUubGVmdC5uYW1lOwotCi0gICAgICAgICAgICBpZiAoY2hl
Y2tJZklkZW50aWZpZXJJc0Z1bmN0aW9uKHNjb3BlLCBuYW1lKSkgewotICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICIne3tuYW1lfX0nIGlzIGEgZnVuY3Rpb24uIiwgeyBuYW1l
OiBuYW1lIH0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLQotICAgIH07Ci0KLX07Ci0K
LX0se31dLDY5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGltcGxpZWQgZXZhbCB2aWEgc2V0VGltZW91
dCBhbmQgc2V0SW50ZXJ2YWwKLSAqIEBhdXRob3IgSmFtZXMgQWxsYXJkaWNlCi0gKi8KLQotLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAi
dXNlIHN0cmljdCI7Ci0KLSAgICByZXR1cm4gewotICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBm
dW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAi
SWRlbnRpZmllciIpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2FsbGVlID0gbm9kZS5jYWxsZWUu
bmFtZTsKLQotICAgICAgICAgICAgICAgIGlmIChjYWxsZWUgPT09ICJzZXRUaW1lb3V0IiB8fCBj
YWxsZWUgPT09ICJzZXRJbnRlcnZhbCIpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3Vt
ZW50ID0gbm9kZS5hcmd1bWVudHNbMF07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dCAmJiBhcmd1bWVudC50eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9mIGFyZ3VtZW50LnZhbHVl
ID09PSAic3RyaW5nIikgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIkltcGxpZWQgZXZhbC4gQ29uc2lkZXIgcGFzc2luZyBhIGZ1bmN0aW9uIGluc3RlYWQg
b2YgYSBzdHJpbmcuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw3MDpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBlbmZvcmNlIGRlY2xhcmF0aW9ucyBpbiBwcm9ncmFtIG9yIGZ1bmN0aW9uIGJvZHkgcm9v
dC4KLSAqIEBhdXRob3IgQnJhbmRvbiBNaWxscwotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0g
ICAgLyoqCi0gICAgICogRmluZCB0aGUgbmVhcmVzdCBQcm9ncmFtIG9yIEZ1bmN0aW9uIGFuY2Vz
dG9yIG5vZGUuCi0gICAgICogQHJldHVybnMge09iamVjdH0gQW5jZXN0b3IncyB0eXBlIGFuZCBk
aXN0YW5jZSBmcm9tIG5vZGUuCi0gICAgICovCi0gICAgZnVuY3Rpb24gbmVhcmVzdEJvZHkoKSB7
Ci0gICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLAotICAgICAg
ICAgICAgYW5jZXN0b3IgPSBhbmNlc3RvcnMucG9wKCksCi0gICAgICAgICAgICBnZW5lcmF0aW9u
ID0gMTsKLQotICAgICAgICB3aGlsZSAoYW5jZXN0b3IgJiYgWyJQcm9ncmFtIiwgIkZ1bmN0aW9u
RGVjbGFyYXRpb24iLAotICAgICAgICAgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iXS5pbmRl
eE9mKGFuY2VzdG9yLnR5cGUpIDwgMCkgewotICAgICAgICAgICAgZ2VuZXJhdGlvbiArPSAxOwot
ICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3RvcnMucG9wKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgLy8gVHlwZSBvZiBjb250YWluaW5nIGFuY2VzdG9y
Ci0gICAgICAgICAgICB0eXBlOiBhbmNlc3Rvci50eXBlLAotICAgICAgICAgICAgLy8gU2VwYXJh
dGlvbiBiZXR3ZWVuIGFuY2VzdG9yIGFuZCBub2RlCi0gICAgICAgICAgICBkaXN0YW5jZTogZ2Vu
ZXJhdGlvbgotICAgICAgICB9OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEVuc3VyZSB0aGF0
IGEgZ2l2ZW4gbm9kZSBpcyBhdCBhIHByb2dyYW0gb3IgZnVuY3Rpb24gYm9keSdzIHJvb3QuCi0g
ICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIERlY2xhcmF0aW9uIG5vZGUgdG8gY2hlY2suCi0g
ICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gY2hlY2sobm9kZSkg
ewotICAgICAgICB2YXIgYm9keSA9IG5lYXJlc3RCb2R5KG5vZGUpLAotICAgICAgICAgICAgdmFs
aWQgPSAoKGJvZHkudHlwZSA9PT0gIlByb2dyYW0iICYmIGJvZHkuZGlzdGFuY2UgPT09IDEpIHx8
Ci0gICAgICAgICAgICAgICAgYm9keS5kaXN0YW5jZSA9PT0gMik7Ci0KLSAgICAgICAgaWYgKCF2
YWxpZCkgewotICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIk1vdmUge3t0eXBlfX0g
ZGVjbGFyYXRpb24gdG8ge3tib2R5fX0gcm9vdC4iLAotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgdHlwZTogKG5vZGUudHlwZSA9PT0gIkZ1bmN0aW9uRGVjbGFyYXRpb24i
ID8KLSAgICAgICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiIgOiAidmFyaWFibGUiKSwKLSAg
ICAgICAgICAgICAgICAgICAgYm9keTogKGJvZHkudHlwZSA9PT0gIlByb2dyYW0iID8KLSAgICAg
ICAgICAgICAgICAgICAgICAgICJwcm9ncmFtIiA6ICJmdW5jdGlvbiBib2R5IikKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHsKLQotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGNoZWNrLAotICAgICAgICAiVmFy
aWFibGVEZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChjb250
ZXh0Lm9wdGlvbnNbMF0gPT09ICJib3RoIikgewotICAgICAgICAgICAgICAgIGNoZWNrKG5vZGUp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9OwotCi19OwotCi19LHt9XSw3MTpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcg
VmFsaWRhdGUgc3RyaW5ncyBwYXNzZWQgdG8gdGhlIFJlZ0V4cCBjb25zdHJ1Y3RvcgotICogQGF1
dGhvciBNaWNoYWVsIEZpY2FycmEKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIGZ1bmN0aW9uIGlz
U3RyaW5nKG5vZGUpIHsKLSAgICAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS50eXBlID09PSAiTGl0
ZXJhbCIgJiYgdHlwZW9mIG5vZGUudmFsdWUgPT09ICJzdHJpbmciOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIGNoZWNrKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICJJ
ZGVudGlmaWVyIiAmJiBub2RlLmNhbGxlZS5uYW1lID09PSAiUmVnRXhwIiAmJiBpc1N0cmluZyhu
b2RlLmFyZ3VtZW50c1swXSkpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGlzU3RyaW5nKG5vZGUuYXJndW1lbnRzWzFdKSkgewotICAgICAgICAgICAgICAgICAgICB2
b2lkIG5ldyBSZWdFeHAobm9kZS5hcmd1bWVudHNbMF0udmFsdWUsIG5vZGUuYXJndW1lbnRzWzFd
LnZhbHVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB2
b2lkIG5ldyBSZWdFeHAobm9kZS5hcmd1bWVudHNbMF0udmFsdWUpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KG5vZGUsIGUubWVzc2FnZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gewotICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBjaGVjaywKLSAgICAgICAg
Ik5ld0V4cHJlc3Npb24iOiBjaGVjawotICAgIH07Ci0KLX07Ci0KLX0se31dLDcyOltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRv
IGZsYWcgdXNhZ2Ugb2YgX19pdGVyYXRvcl9fIHByb3BlcnR5Ci0gKiBAYXV0aG9yIElhbiBDaHJp
c3RpYW4gTXllcnMKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZp
bml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0
aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0KLSAg
ICAgICAgIk1lbWJlckV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAg
IGlmIChub2RlLnByb3BlcnR5ICYmCi0gICAgICAgICAgICAgICAgICAgIChub2RlLnByb3BlcnR5
LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiBub2RlLnByb3BlcnR5Lm5hbWUgPT09ICJfX2l0ZXJh
dG9yX18iICYmICFub2RlLmNvbXB1dGVkKSB8fAotICAgICAgICAgICAgICAgICAgICAobm9kZS5w
cm9wZXJ0eS50eXBlID09PSAiTGl0ZXJhbCIgJiYgbm9kZS5wcm9wZXJ0eS52YWx1ZSA9PT0gIl9f
aXRlcmF0b3JfXyIpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJl
c2VydmVkIG5hbWUgJ19faXRlcmF0b3JfXycuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9OwotCi19OwotCi19LHt9XSw3MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGxhYmVscyB0aGF0IGFyZSB0
aGUgc2FtZSBhcyBhbiBpZGVudGlmaWVyCi0gKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMK
LSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAv
LyBIZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgZnVuY3Rpb24gZmluZElk
ZW50aWZpZXIoc2NvcGUsIGlkZW50aWZpZXIpIHsKLSAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7
Ci0KLSAgICAgICAgc2NvcGUudmFyaWFibGVzLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHsK
LSAgICAgICAgICAgIGlmICh2YXJpYWJsZS5uYW1lID09PSBpZGVudGlmaWVyKSB7Ci0gICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAg
ICAgICBzY29wZS5yZWZlcmVuY2VzLmZvckVhY2goZnVuY3Rpb24ocmVmZXJlbmNlKSB7Ci0gICAg
ICAgICAgICBpZiAocmVmZXJlbmNlLmlkZW50aWZpZXIubmFtZSA9PT0gaWRlbnRpZmllcikgewot
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgLy8gSWYgd2UgaGF2ZSBub3QgZm91bmQgdGhlIGlkZW50aWZpZXIgaW4gdGhp
cyBzY29wZSwgY2hlY2sgdGhlIHBhcmVudAotICAgICAgICAvLyBzY29wZS4KLSAgICAgICAgaWYg
KHNjb3BlLnVwcGVyICYmICFmb3VuZCkgewotICAgICAgICAgICAgcmV0dXJuIGZpbmRJZGVudGlm
aWVyKHNjb3BlLnVwcGVyLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBmb3VuZDsKLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGlj
IEFQSQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAg
IkxhYmVsZWRTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIC8vIEZl
dGNoIHRoZSBpbm5lcm1vc3Qgc2NvcGUuCi0gICAgICAgICAgICB2YXIgc2NvcGUgPSBjb250ZXh0
LmdldFNjb3BlKCk7Ci0KLSAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZpbmQgdGhlIGlkZW50
aWZpZXIgd2Fsa2luZyB1cCB0aGUgc2NvcGUsIHN0YXJ0aW5nCi0gICAgICAgICAgICAvLyB3aXRo
IHRoZSBpbm5lcm1vc3Qgc2NvcGUuCi0gICAgICAgICAgICBpZiAoZmluZElkZW50aWZpZXIoc2Nv
cGUsIG5vZGUubGFiZWwubmFtZSkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiRm91bmQgaWRlbnRpZmllciB3aXRoIHNhbWUgbmFtZSBhcyBsYWJlbC4iKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgfTsKLQotfTsKLQotfSx7fV0sNzQ6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93
IExhYmVsZWQgU3RhdGVtZW50cwotICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcwotICovCi0i
dXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRp
b24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24o
Y29udGV4dCkgewotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYwotICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIkxhYmVsZWRT
dGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiVW5leHBlY3RlZCBsYWJlbGVkIHN0YXRlbWVudC4iKTsKLSAgICAgICAgfSwKLQotICAg
ICAgICAiQnJlYWtTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIGlm
IChub2RlLmxhYmVsKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVu
ZXhwZWN0ZWQgbGFiZWwgaW4gYnJlYWsgc3RhdGVtZW50LiIpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgIH0sCi0KLSAgICAgICAgIkNvbnRpbnVlU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkg
ewotCi0gICAgICAgICAgICBpZiAobm9kZS5sYWJlbCkgewotICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGxhYmVsIGluIGNvbnRpbnVlIHN0YXRlbWVudC4i
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0KLQotICAgIH07Ci0KLX07Ci0KLX0se31d
LDc1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVy
dmlldyBSdWxlIHRvIGZsYWcgYmxvY2tzIHdpdGggbm8gcmVhc29uIHRvIGV4aXN0Ci0gKiBAYXV0
aG9yIEJyYW5kb24gTWlsbHMKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVs
ZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7
Ci0gICAgICAgICJCbG9ja1N0YXRlbWVudCI6IGZ1bmN0aW9uIChub2RlKSB7Ci0gICAgICAgICAg
ICAvLyBDaGVjayBmb3IgYW55IG9jY3VycmVuY2Ugb2YgQmxvY2tTdGF0ZW1lbnQgPiBCbG9ja1N0
YXRlbWVudCBvcgotICAgICAgICAgICAgLy8gUHJvZ3JhbSA+IEJsb2NrU3RhdGVtZW50Ci0gICAg
ICAgICAgICB2YXIgcGFyZW50ID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsKLSAgICAg
ICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50IiB8fCBwYXJlbnQudHlw
ZSA9PT0gIlByb2dyYW0iKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwg
IkJsb2NrIGlzIG5lc3RlZCBpbnNpZGUgYW5vdGhlciBibG9jay4iKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDc2OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGRpc2FsbG93IGlm
IGFzIHRoZSBvbmx5IHN0YXRtZW5ldCBpbiBhbiBlbHNlIGJsb2NrCi0gKiBAYXV0aG9yIEJyYW5k
b24gTWlsbHMKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHJldHVybiB7Ci0gICAgICAgICJJZlN0
YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBj
b250ZXh0LmdldEFuY2VzdG9ycygpLAotICAgICAgICAgICAgICAgIHBhcmVudCA9IGFuY2VzdG9y
cy5wb3AoKSwKLSAgICAgICAgICAgICAgICBncmFuZHBhcmVudCA9IGFuY2VzdG9ycy5wb3AoKTsK
LQotICAgICAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0gIkJsb2NrU3RhdGVt
ZW50IiAmJgotICAgICAgICAgICAgICAgICAgICBwYXJlbnQuYm9keS5sZW5ndGggPT09IDEgJiYg
Z3JhbmRwYXJlbnQgJiYKLSAgICAgICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQudHlwZSA9PT0g
IklmU3RhdGVtZW50IiAmJgotICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPT09IGdyYW5kcGFy
ZW50LmFsdGVybmF0ZSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJV
bmV4cGVjdGVkIGlmIGFzIHRoZSBvbmx5IHN0YXRlbWVudCBpbiBhbiBlbHNlIGJsb2NrLiIpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sNzc6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gZmxhZyBjcmVhdGlvbiBvZiBmdW5jdGlvbiBpbnNpZGUgYSBsb29wCi0gKiBAYXV0aG9yIEls
eWEgVm9sb2RpbgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmlu
aXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgZnVuY3Rpb24gY2hlY2tG
b3JMb29wcyhub2RlKSB7Ci0gICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2Vz
dG9ycygpOwotCi0gICAgICAgIGlmIChhbmNlc3RvcnMuc29tZShmdW5jdGlvbihhbmNlc3Rvcikg
ewotICAgICAgICAgICAgcmV0dXJuIGFuY2VzdG9yLnR5cGUgPT09ICJGb3JTdGF0ZW1lbnQiIHx8
IGFuY2VzdG9yLnR5cGUgPT09ICJXaGlsZVN0YXRlbWVudCIgfHwgYW5jZXN0b3IudHlwZSA9PT0g
IkRvV2hpbGVTdGF0ZW1lbnQiOwotICAgICAgICB9KSkgewotICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIkRvbid0IG1ha2UgZnVuY3Rpb25zIHdpdGhpbiBhIGxvb3AiKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24i
OiBjaGVja0Zvckxvb3BzLAotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGNoZWNrRm9y
TG9vcHMKLSAgICB9OwotfTsKLQotfSx7fV0sNzg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZW5mb3JjZSBncm91cGVkIHJl
cXVpcmUgc3RhdGVtZW50cyBmb3IgTm9kZS5KUwotICogQGF1dGhvciBSYXBoYWVsIFBpZ3VsbGEK
LSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsaXN0
IG9mIGJ1aWx0LWluIG1vZHVsZXMuCi0gICAgICoKLSAgICAgKiBAcmV0dXJucyB7c3RyaW5nW119
IEFuIGFycmF5IG9mIGJ1aWx0LWluIE5vZGUuanMgbW9kdWxlcy4KLSAgICAgKi8KLSAgICBmdW5j
dGlvbiBnZXRCdWlsdGluTW9kdWxlcygpIHsKLSAgICAgICAgLy8gVGhpcyBsaXN0IGlzIGdlbmVy
YXRlZCB1c2luZyBgcmVxdWlyZSgicmVwbCIpLl9idWlsdGluTGlicy5jb25jYXQoJ3JlcGwnKS5z
b3J0KClgCi0gICAgICAgIC8vIFRoaXMgcGFydGljdWxhciBsaXN0IHdhcyBnZW5lcmF0ZWQgdXNp
bmcgbm9kZSB2MC4xMS45Ci0gICAgICAgIHJldHVybiBbCi0gICAgICAgICAgICAiYXNzZXJ0Iiwg
ImJ1ZmZlciIsICJjaGlsZF9wcm9jZXNzIiwgImNsdXN0ZXIiLCAiY3J5cHRvIiwKLSAgICAgICAg
ICAgICJkZ3JhbSIsICJkbnMiLCAiZG9tYWluIiwgImV2ZW50cyIsICJmcyIsICJodHRwIiwgImh0
dHBzIiwKLSAgICAgICAgICAgICJuZXQiLCAib3MiLCAicGF0aCIsICJwdW55Y29kZSIsICJxdWVy
eXN0cmluZyIsICJyZWFkbGluZSIsCi0gICAgICAgICAgICAicmVwbCIsICJzbWFsbG9jIiwgInN0
cmVhbSIsICJzdHJpbmdfZGVjb2RlciIsICJ0bHMiLCAidHR5IiwKLSAgICAgICAgICAgICJ1cmwi
LCAidXRpbCIsICJ2bSIsICJ6bGliIgotICAgICAgICBdOwotICAgIH0KLQotICAgIHZhciBCVUlM
VElOX01PRFVMRVMgPSBnZXRCdWlsdGluTW9kdWxlcygpOwotCi0gICAgdmFyIERFQ0xfUkVRVUlS
RSA9ICJyZXF1aXJlIiwKLSAgICAgICAgREVDTF9VTklOSVRJQUxJWkVEID0gInVuaW5pdGlhbGl6
ZWQiLAotICAgICAgICBERUNMX09USEVSID0gIm90aGVyIjsKLQotICAgIHZhciBSRVFfQ09SRSA9
ICJjb3JlIiwKLSAgICAgICAgUkVRX0ZJTEUgPSAiZmlsZSIsCi0gICAgICAgIFJFUV9NT0RVTEUg
PSAibW9kdWxlIiwKLSAgICAgICAgUkVRX0NPTVBVVEVEID0gImNvbXB1dGVkIjsKLQotICAgIC8q
KgotICAgICAqIERldGVybWluZXMgdGhlIHR5cGUgb2YgYSBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQu
Ci0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBpbml0RXhwcmVzc2lvbiBUaGUgaW5pdCBub2RlIG9m
IHRoZSBWYXJpYWJsZURlY2xhcmF0b3IuCi0gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHR5
cGUgb2YgZGVjbGFyYXRpb24gcmVwcmVzZW50ZWQgYnkgdGhlIGV4cHJlc3Npb24uCi0gICAgICov
Ci0gICAgZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25UeXBlKGluaXRFeHByZXNzaW9uKSB7Ci0gICAg
ICAgIGlmICghaW5pdEV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgIC8vICJ2YXIgeDsiCi0gICAg
ICAgICAgICByZXR1cm4gREVDTF9VTklOSVRJQUxJWkVEOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGluaXRFeHByZXNzaW9uLnR5cGUgPT09ICJDYWxsRXhwcmVzc2lvbiIgJiYKLSAgICAgICAg
ICAgIGluaXRFeHByZXNzaW9uLmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYKLSAgICAg
ICAgICAgIGluaXRFeHByZXNzaW9uLmNhbGxlZS5uYW1lID09PSAicmVxdWlyZSIKLSAgICAgICAg
KSB7Ci0gICAgICAgICAgICAvLyAidmFyIHggPSByZXF1aXJlKCd1dGlsJyk7IgotICAgICAgICAg
ICAgcmV0dXJuIERFQ0xfUkVRVUlSRTsKLSAgICAgICAgfSBlbHNlIGlmIChpbml0RXhwcmVzc2lv
bi50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIpIHsKLSAgICAgICAgICAgIC8vICJ2YXIgeCA9
IHJlcXVpcmUoJ2dsb2InKS5HbG9iOyIKLSAgICAgICAgICAgIHJldHVybiBnZXREZWNsYXJhdGlv
blR5cGUoaW5pdEV4cHJlc3Npb24ub2JqZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vICJ2
YXIgeCA9IDQyOyIKLSAgICAgICAgcmV0dXJuIERFQ0xfT1RIRVI7Ci0gICAgfQotCi0gICAgLyoq
Ci0gICAgICogRGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiBtb2R1bGUgdGhhdCBpcyBsb2FkZWQgdmlh
IHJlcXVpcmUuCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBpbml0RXhwcmVzc2lvbiBUaGUgaW5p
dCBub2RlIG9mIHRoZSBWYXJpYWJsZURlY2xhcmF0b3IuCi0gICAgICogQHJldHVybnMge3N0cmlu
Z30gVGhlIG1vZHVsZSB0eXBlLgotICAgICAqLwotICAgIGZ1bmN0aW9uIGluZmVyTW9kdWxlVHlw
ZShpbml0RXhwcmVzc2lvbikgewotICAgICAgICBpZiAoaW5pdEV4cHJlc3Npb24udHlwZSA9PT0g
Ik1lbWJlckV4cHJlc3Npb24iKSB7Ci0gICAgICAgICAgICAvLyAidmFyIHggPSByZXF1aXJlKCdn
bG9iJykuR2xvYjsiCi0gICAgICAgICAgICByZXR1cm4gaW5mZXJNb2R1bGVUeXBlKGluaXRFeHBy
ZXNzaW9uLm9iamVjdCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaW5pdEV4cHJlc3Npb25bImFyZ3Vt
ZW50cyJdLmxlbmd0aCA9PT0gMCkgewotICAgICAgICAgICAgLy8gInZhciB4ID0gcmVxdWlyZSgp
OyIKLSAgICAgICAgICAgIHJldHVybiBSRVFfQ09NUFVURUQ7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2YXIgYXJnID0gaW5pdEV4cHJlc3Npb25bImFyZ3VtZW50cyJdWzBdOwotCi0gICAgICAgIGlm
IChhcmcudHlwZSAhPT0gIkxpdGVyYWwiIHx8IHR5cGVvZiBhcmcudmFsdWUgIT09ICJzdHJpbmci
KSB7Ci0gICAgICAgICAgICAvLyAidmFyIHggPSByZXF1aXJlKDQyKTsiCi0gICAgICAgICAgICBy
ZXR1cm4gUkVRX0NPTVBVVEVEOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEJVSUxUSU5fTU9E
VUxFUy5pbmRleE9mKGFyZy52YWx1ZSkgIT09IC0xKSB7Ci0gICAgICAgICAgICAvLyAidmFyIGZz
ID0gcmVxdWlyZSgnZnMnKTsiCi0gICAgICAgICAgICByZXR1cm4gUkVRX0NPUkU7Ci0gICAgICAg
IH0gZWxzZSBpZiAoL15cLnswLDJ9XC8vLnRlc3QoYXJnLnZhbHVlKSkgewotICAgICAgICAgICAg
Ly8gInZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsiCi0gICAgICAgICAgICByZXR1cm4g
UkVRX0ZJTEU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyAidmFyIGFzeW5jID0g
cmVxdWlyZSgnYXN5bmMnKTsiCi0gICAgICAgICAgICByZXR1cm4gUkVRX01PRFVMRTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoZSBsaXN0IG9mIHZhcmlh
YmxlIGRlY2xhcmF0aW9ucyBpcyBtaXhlZCwgaS5lLiB3aGV0aGVyIGl0Ci0gICAgICogY29udGFp
bnMgYm90aCByZXF1aXJlIGFuZCBvdGhlciBkZWNsYXJhdGlvbnMuCi0gICAgICogQHBhcmFtIHtB
U1ROb2RlfSBkZWNsYXJhdGlvbnMgVGhlIGxpc3Qgb2YgVmFyaWFibGVEZWNsYXJhdG9ycy4KLSAg
ICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZGVjbGFyYXRpb25zIGFyZSBtaXhl
ZCwgZmFsc2UgaWYgbm90LgotICAgICAqLwotICAgIGZ1bmN0aW9uIGlzTWl4ZWQoZGVjbGFyYXRp
b25zKSB7Ci0gICAgICAgIHZhciBjb250YWlucyA9IHt9OwotCi0gICAgICAgIGRlY2xhcmF0aW9u
cy5mb3JFYWNoKGZ1bmN0aW9uIChkZWNsYXJhdGlvbikgewotICAgICAgICAgICAgdmFyIHR5cGUg
PSBnZXREZWNsYXJhdGlvblR5cGUoZGVjbGFyYXRpb24uaW5pdCk7Ci0gICAgICAgICAgICBjb250
YWluc1t0eXBlXSA9IHRydWU7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHJldHVybiAhISgKLSAg
ICAgICAgICAgIGNvbnRhaW5zW0RFQ0xfUkVRVUlSRV0gJiYKLSAgICAgICAgICAgIChjb250YWlu
c1tERUNMX1VOSU5JVElBTElaRURdIHx8IGNvbnRhaW5zW0RFQ0xfT1RIRVJdKQotICAgICAgICAp
OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrIGlmIGFsbCByZXF1aXJlIGRlY2xhcmF0
aW9ucyBpbiB0aGUgZ2l2ZW4gbGlzdCBhcmUgb2YgdGhlIHNhbWUKLSAgICAgKiB0eXBlLgotICAg
ICAqIEBwYXJhbSB7QVNUTm9kZX0gZGVjbGFyYXRpb25zIFRoZSBsaXN0IG9mIFZhcmlhYmxlRGVj
bGFyYXRvcnMuCi0gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGRlY2xhcmF0
aW9ucyBhcmUgZ3JvdXBlZCwgZmFsc2UgaWYgbm90LgotICAgICAqLwotICAgIGZ1bmN0aW9uIGlz
R3JvdXBlZChkZWNsYXJhdGlvbnMpIHsKLSAgICAgICAgdmFyIGZvdW5kID0ge307Ci0KLSAgICAg
ICAgZGVjbGFyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKGRlY2xhcmF0aW9uKSB7Ci0gICAgICAg
ICAgICBpZiAoZ2V0RGVjbGFyYXRpb25UeXBlKGRlY2xhcmF0aW9uLmluaXQpID09PSBERUNMX1JF
UVVJUkUpIHsKLSAgICAgICAgICAgICAgICBmb3VuZFtpbmZlck1vZHVsZVR5cGUoZGVjbGFyYXRp
b24uaW5pdCldID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
cmV0dXJuIE9iamVjdC5rZXlzKGZvdW5kKS5sZW5ndGggPD0gMTsKLSAgICB9Ci0KLQotICAgIHJl
dHVybiB7Ci0KLSAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7
Ci0gICAgICAgICAgICB2YXIgZ3JvdXBpbmcgPSAhIWNvbnRleHQub3B0aW9uc1swXTsKLQotICAg
ICAgICAgICAgaWYgKGlzTWl4ZWQobm9kZS5kZWNsYXJhdGlvbnMpKSB7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUsCi0gICAgICAgICAg
ICAgICAgICAgICJEbyBub3QgbWl4ICdyZXF1aXJlJyBhbmQgb3RoZXIgZGVjbGFyYXRpb25zLiIK
LSAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfSBlbHNlIGlmIChncm91cGluZyAmJiAh
aXNHcm91cGVkKG5vZGUuZGVjbGFyYXRpb25zKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KAotICAgICAgICAgICAgICAgICAgICBub2RlLAotICAgICAgICAgICAgICAgICAgICAi
RG8gbm90IG1peCBjb3JlLCBtb2R1bGUsIGZpbGUgYW5kIGNvbXB1dGVkIHJlcXVpcmVzLiIKLSAg
ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotfTsK
LQotfSx7fV0sNzk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBA
ZmlsZW92ZXJ2aWV3IERpc2FsbG93IG1peGVkIHNwYWNlcyBhbmQgdGFicyBmb3IgaW5kZW50YXRp
b24KLSAqIEBhdXRob3IgSmFyeSBOaWVidXIKLSAqIEBjb3B5cmlnaHQgMjAxNCBOaWNob2xhcyBD
LiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIEBjb3B5cmlnaHQgMjAxNCBKYXJ5IE5p
ZWJ1ci4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHZhciBz
bWFydFRhYnMgPSBjb250ZXh0Lm9wdGlvbnNbMF07Ci0KLSAgICB2YXIgQ09NTUVOVF9TVEFSVCA9
IC9eXHMqXC9cKi8sCi0gICAgICAgIE1BWUJFX0NPTU1FTlQgPSAvXlxzKlwqLzsKLQotICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24obm9kZSkgewot
ICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIEF0IGxlYXN0IG9uZSBzcGFjZSBmb2xsb3dl
ZCBieSBhIHRhYgotICAgICAgICAgICAgICogb3IgdGhlIHJldmVyc2UgYmVmb3JlIG5vbi10YWIv
LXNwYWNlCi0gICAgICAgICAgICAgKiBjaGFyYWN0ZXJzIGJlZ2luLgotICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICB2YXIgcmVnZXggPSAvXig/PVtcdCBdKihcdCB8IFx0KSkvLAotICAgICAg
ICAgICAgICAgIG1hdGNoLAotICAgICAgICAgICAgICAgIGxpbmVzID0gY29udGV4dC5nZXRTb3Vy
Y2VMaW5lcygpOwotCi0gICAgICAgICAgICBpZiAoc21hcnRUYWJzKSB7Ci0gICAgICAgICAgICAg
ICAgLyoKLSAgICAgICAgICAgICAgICAgKiBBdCBsZWFzdCBvbmUgc3BhY2UgZm9sbG93ZWQgYnkg
YSB0YWIKLSAgICAgICAgICAgICAgICAgKiBiZWZvcmUgbm9uLXRhYi8tc3BhY2UgY2hhcmFjdGVy
cyBiZWdpbi4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICByZWdleCA9IC9e
KD89W1x0IF0qIFx0KS87Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxpbmVzLmZvckVh
Y2goZnVuY3Rpb24obGluZSwgaSkgewotICAgICAgICAgICAgICAgIG1hdGNoID0gcmVnZXguZXhl
YyhsaW5lKTsKLQotICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgewotCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghTUFZQkVfQ09NTUVOVC50ZXN0KGxpbmUpICYmICFDT01NRU5UX1NUQVJULnRl
c3QobGluZXNbaSAtIDFdKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgeyBsaW5lOiBpICsgMSwgY29sdW1uOiBtYXRjaC5pbmRleCArIDEgfSwgIk1peGVk
IHNwYWNlcyBhbmQgdGFicy4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgIH07Ci0KLX07Ci0KLX0s
e31dLDgwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVv
dmVydmlldyBEaXNhbGxvdyB1c2Ugb2YgbXVsdGlwbGUgc3BhY2VzLgotICogQGF1dGhvciBWaWdu
ZXNoIEFuYW5kIGFrYSB2ZWdldGFibGVtYW4uCi0gKiBAY29weXJpZ2h0IDIwMTQgVmlnbmVzaCBB
bmFuZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHZhciBP
UEVSQVRPUlMgPSBbCi0gICAgICAgICIqIiwgIi8iLCAiJSIsICIrIiwgIi0iLCAiPDwiLCAiPj4i
LCAiPj4+IiwgIjwiLCAiPD0iLCAiPiIsICI+PSIsICJpbiIsCi0gICAgICAgICJpbnN0YW5jZW9m
IiwgIj09IiwgIiE9IiwgIj09PSIsICIhPT0iLCAiJiIsICJeIiwgInwiLCAiJiYiLCAifHwiLCAi
PSIsCi0gICAgICAgICIrPSIsICItPSIsICIqPSIsICIvPSIsICIlPSIsICI8PD0iLCAiPj49Iiwg
Ij4+Pj0iLCAiJj0iLCAiXj0iLCAifD0iLAotICAgICAgICAiPyIsICI6IiwgIiwiCi0gICAgXSwg
ZXJyT3BzID0gW107Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycwot
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIFJlcG9ydHMgYW4gQVNU
IG5vZGUgYXMgYSBydWxlIHZpb2xhdGlvbi4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUg
VGhlIG5vZGUgdG8gcmVwb3J0LgotICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqIEBwcml2
YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHsKLSAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIk11bHRpcGxlIHNwYWNlcyBmb3VuZCBhcm91bmQgJyIgKyBlcnJPcHMu
c2hpZnQoKSArICInLiIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyB3aGV0aGVy
IHRoZSBvcGVyYXRvciBpcyBpbiBzYW1lIGxpbmUgYXMgdHdvIGFkamFjZW50IHRva2Vucy4KLSAg
ICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxlZnQgVGhlIHRva2VuIGxlZnQgdG8gdGhlIG9wZXJhdG9y
LgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcmlnaHQgVGhlIHRva2VuIHJpZ2h0IHRvIHRoZSBv
cGVyYXRvci4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG9wZXJhdG9yIFRoZSBvcGVyYXRvci4K
LSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgb3BlcmF0b3IgaXMgaW4gc2Ft
ZSBsaW5lIGFzIHR3byBhZGphY2VudCB0b2tlbnMuCi0gICAgICogQHByaXZhdGUKLSAgICAgKi8K
LSAgICBmdW5jdGlvbiBpc1NhbWVMaW5lKGxlZnQsIHJpZ2h0LCBvcGVyYXRvcikgewotICAgICAg
ICByZXR1cm4gb3BlcmF0b3IubG9jLmVuZC5saW5lID09PSBsZWZ0LmxvYy5lbmQubGluZSAmJgot
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IubG9jLmVuZC5saW5lID09PSByaWdodC5s
b2Muc3RhcnQubGluZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVjayB3aGV0aGVyIHRo
ZXJlIGFyZSBtdWx0aXBsZSBzcGFjZXMgYXJvdW5kIHRoZSBvcGVyYXRvci4KLSAgICAgKiBAcGFy
YW0ge0FTVE5vZGV9IGxlZnQgVGhlIHRva2VuIGxlZnQgdG8gdGhlIG9wZXJhdG9yLgotICAgICAq
IEBwYXJhbSB7QVNUTm9kZX0gcmlnaHQgVGhlIHRva2VuIHJpZ2h0IHRvIHRoZSBvcGVyYXRvci4K
LSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG9wZXJhdG9yIFRoZSBvcGVyYXRvci4KLSAgICAgKiBA
cmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGVyZSBhcmUgbXVsdGlwbGUgc3BhY2VzLgotICAg
ICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gaXNNdWx0aVNwYWNlZChsZWZ0LCBy
aWdodCwgb3BlcmF0b3IpIHsKLSAgICAgICAgcmV0dXJuIG9wZXJhdG9yLnJhbmdlWzBdIC0gbGVm
dC5yYW5nZVsxXSA+IDEgfHwKLSAgICAgICAgICAgICAgICByaWdodC5yYW5nZVswXSAtIG9wZXJh
dG9yLnJhbmdlWzFdID4gMTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgdG9rZW5zIGFu
ZCB2YWxpZGF0ZSB0aGUgc3BhY2luZy4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxlZnQgVGhl
IHRva2VuIGxlZnQgdG8gdGhlIG9wZXJhdG9yLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcmln
aHQgVGhlIHRva2VuIHJpZ2h0IHRvIHRoZSBvcGVyYXRvci4KLSAgICAgKiBAcmV0dXJucyB7Ym9v
bGVhbn0gV2hldGhlciBtdWx0aXBsZSBzcGFjZXMgd2VyZSBmb3VuZC4KLSAgICAgKiBAcHJpdmF0
ZQotICAgICAqLwotICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3BhY2luZyhsZWZ0LCByaWdodCkgewot
ICAgICAgICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnMoe3JhbmdlOiBbbGVmdC5yYW5n
ZVsxXSwgcmlnaHQucmFuZ2VbMF1dfSwgMSwgMSksCi0gICAgICAgICAgICBvcGVyYXRvcjsKLQot
ICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IHRva2Vucy5sZW5ndGggLSAxOyBpIDwgbDsgKytp
KSB7Ci0gICAgICAgICAgICBsZWZ0ID0gdG9rZW5zW2kgLSAxXTsKLSAgICAgICAgICAgIG9wZXJh
dG9yID0gdG9rZW5zW2ldOwotICAgICAgICAgICAgcmlnaHQgPSB0b2tlbnNbaSArIDFdOwotCi0g
ICAgICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IudHlwZSA9PT0gIlB1bmN0dWF0b3Ii
ICYmIE9QRVJBVE9SUy5pbmRleE9mKG9wZXJhdG9yLnZhbHVlKSA+PSAwICYmCi0gICAgICAgICAg
ICAgICAgaXNTYW1lTGluZShsZWZ0LCByaWdodCwgb3BlcmF0b3IpICYmIGlzTXVsdGlTcGFjZWQo
bGVmdCwgcmlnaHQsIG9wZXJhdG9yKSkgewotICAgICAgICAgICAgICAgIGVyck9wcy5wdXNoKG9w
ZXJhdG9yLnZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLQotICAgIC8q
KgotICAgICAqIFJlcG9ydCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3BhY2VzIG9uIHRoZSBleHBy
ZXNzaW9uLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4K
LSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIGZ1
bmN0aW9uIGNoZWNrRXhwcmVzc2lvbihub2RlKSB7Ci0gICAgICAgIGlmICh2YWxpZGF0ZVNwYWNp
bmcobm9kZS5sZWZ0LCBub2RlLnJpZ2h0KSkgewotICAgICAgICAgICAgcmVwb3J0KG5vZGUpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVwb3J0IGlmIHRoZXJlIGFyZSBt
dWx0aXBsZSBzcGFjZXMgYXJvdW5kIGNvbmRpdGlvbmFsIHRlcm5hcnkgb3BlcmF0b3JzLgotICAg
ICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4KLSAgICAgKiBAcmV0
dXJucyB7dm9pZH0KLSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIGZ1bmN0aW9uIGNoZWNr
Q29uZGl0aW9uYWwobm9kZSkgewotICAgICAgICBpZiAodmFsaWRhdGVTcGFjaW5nKG5vZGUudGVz
dCwgbm9kZS5jb25zZXF1ZW50KSkgewotICAgICAgICAgICAgcmVwb3J0KG5vZGUpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICh2YWxpZGF0ZVNwYWNpbmcobm9kZS5jb25zZXF1ZW50LCBub2RlLmFs
dGVybmF0ZSkpIHsKLSAgICAgICAgICAgIHJlcG9ydChub2RlKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8qKgotICAgICAqIFJlcG9ydCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3BhY2VzIGFy
b3VuZCBlcXVhbCBvcGVyYXRvciBpbiB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KLSAgICAgKiBAcGFy
YW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suCi0gICAgICogQHJldHVybnMge3Zv
aWR9Ci0gICAgICogQHByaXZhdGUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBjaGVja1Zhcihub2Rl
KSB7Ci0gICAgICAgIGlmIChub2RlLmluaXQgJiYgdmFsaWRhdGVTcGFjaW5nKG5vZGUuaWQsIG5v
ZGUuaW5pdCkpIHsKLSAgICAgICAgICAgIHJlcG9ydChub2RlKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8qKgotICAgICAqIFJlcG9ydCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3BhY2VzIGFy
b3VuZCBsaXN0IG9mIGl0ZW1zIGluIG9iamVjdHMsIGFycmF5cywKLSAgICAgKiBmdW5jdGlvbiBw
YXJhbWV0ZXJzLCBzZXF1ZW5jZXMgYW5kIGRlY2xhcmF0aW9ucy4KLSAgICAgKiBAcGFyYW0ge0FT
VE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHBy
b3BlcnR5IFRoZSBwcm9wZXJ0eSBvZiBub2RlLgotICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAg
ICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gY2hlY2tMaXN0KG5vZGUsIHByb3Bl
cnR5KSB7Ci0gICAgICAgIHZhciBpdGVtcyA9IG5vZGVbcHJvcGVydHldOwotCi0gICAgICAgIGZv
ciAodmFyIGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAg
ICB2YXIgbGVmdCA9IGl0ZW1zW2kgLSAxXSwKLSAgICAgICAgICAgICAgICByaWdodCA9IGl0ZW1z
W2ldLAotICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShy
aWdodCk7Ci0KLSAgICAgICAgICAgIGlmIChvcGVyYXRvciAmJiBvcGVyYXRvci50eXBlID09PSAi
UHVuY3R1YXRvciIgJiYgb3BlcmF0b3IudmFsdWUgPT09ICIsIikgewotICAgICAgICAgICAgICAg
IGlmIChpc1NhbWVMaW5lKGxlZnQsIHJpZ2h0LCBvcGVyYXRvcikgJiYgaXNNdWx0aVNwYWNlZChs
ZWZ0LCByaWdodCwgb3BlcmF0b3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVyck9wcy5wdXNo
KG9wZXJhdG9yLnZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgcmVwb3J0KHJpZ2h0KTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjogY2hlY2tF
eHByZXNzaW9uLAotICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGNoZWNrRXhwcmVzc2lvbiwK
LSAgICAgICAgIkxvZ2ljYWxFeHByZXNzaW9uIjogY2hlY2tFeHByZXNzaW9uLAotICAgICAgICAi
Q29uZGl0aW9uYWxFeHByZXNzaW9uIjogY2hlY2tDb25kaXRpb25hbCwKLSAgICAgICAgIlZhcmlh
YmxlRGVjbGFyYXRvciI6IGNoZWNrVmFyLAotICAgICAgICAiQXJyYXlFeHByZXNzaW9uIjogZnVu
Y3Rpb24obm9kZSkgewotICAgICAgICAgICAgY2hlY2tMaXN0KG5vZGUsICJlbGVtZW50cyIpOwot
ICAgICAgICB9LAotICAgICAgICAiT2JqZWN0RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsK
LSAgICAgICAgICAgIGNoZWNrTGlzdChub2RlLCAicHJvcGVydGllcyIpOwotICAgICAgICB9LAot
ICAgICAgICAiU2VxdWVuY2VFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAg
ICAgY2hlY2tMaXN0KG5vZGUsICJleHByZXNzaW9ucyIpOwotICAgICAgICB9LAotICAgICAgICAi
RnVuY3Rpb25FeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgY2hlY2tM
aXN0KG5vZGUsICJwYXJhbXMiKTsKLSAgICAgICAgfSwKLSAgICAgICAgIkZ1bmN0aW9uRGVjbGFy
YXRpb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBjaGVja0xpc3Qobm9kZSwgInBh
cmFtcyIpOwotICAgICAgICB9LAotICAgICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IGZ1bmN0
aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGNoZWNrTGlzdChub2RlLCAiZGVjbGFyYXRpb25zIik7
Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw4MTpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4g
dXNpbmcgbXVsdGlsaW5lIHN0cmluZ3MKLSAqIEBhdXRob3IgSWx5YSBWb2xvZGluCi0gKi8KLQot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0gICAg
InVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0
aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZhciBsaW5lQnJlYWsgPSAvXG4vOwotICAgICAgICAg
ICAgaWYgKGxpbmVCcmVhay50ZXN0KG5vZGUucmF3KSkgewotICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJNdWx0aWxpbmUgc3VwcG9ydCBpcyBsaW1pdGVkIHRvIGJyb3dzZXJz
IHN1cHBvcnRpbmcgRVM1IG9ubHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
OwotCi19OwotCi19LHt9XSw4MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0v
KioKLSAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3dzIG11bHRpcGxlIGJsYW5rIGxpbmVzLgotICog
aW1wbGVtZW50YXRpb24gYWRhcHRlZCBmcm9tIHRoZSBuby10cmFpbGluZy1zcGFjZXMgcnVsZS4K
LSAqIEBhdXRob3IgR3JlZyBDb2NoYXJkCi0gKiBAY29weXJpZ2h0IDIwMTQgR3JlZyBDb2NoYXJk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgLy8gVXNlIG9w
dGlvbnMubWF4IG9yIDIgYXMgZGVmYXVsdAotICAgIHZhciBudW1MaW5lcyA9IDI7Ci0KLSAgICBp
ZiAoY29udGV4dC5vcHRpb25zLmxlbmd0aCkgewotICAgICAgICBudW1MaW5lcyA9IGNvbnRleHQu
b3B0aW9uc1swXS5tYXg7Ci0gICAgfQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8v
IFB1YmxpYwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0KLSAgICAg
ICAgIlByb2dyYW0iOiBmdW5jdGlvbiBjaGVja0JsYW5rTGluZXMobm9kZSkgewotICAgICAgICAg
ICAgdmFyIGxpbmVzID0gY29udGV4dC5nZXRTb3VyY2VMaW5lcygpLAotICAgICAgICAgICAgICAg
IGN1cnJlbnRMb2NhdGlvbiA9IC0xLAotICAgICAgICAgICAgICAgIGxhc3RMb2NhdGlvbiwKLSAg
ICAgICAgICAgICAgICBibGFua0NvdW50ZXIgPSAwLAotICAgICAgICAgICAgICAgIGxvY2F0aW9u
LAotICAgICAgICAgICAgICAgIHRyaW1tZWRMaW5lcyA9IGxpbmVzLm1hcChmdW5jdGlvbihzdHIp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ci50cmltKCk7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0KLSAgICAgICAgICAgIC8vIEFnZ3JlZ2F0ZSBhbmQgY291bnQgYmxhbmsgbGluZXMK
LSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBsYXN0TG9jYXRpb24gPSBjdXJyZW50
TG9jYXRpb247Ci0gICAgICAgICAgICAgICAgY3VycmVudExvY2F0aW9uID0gdHJpbW1lZExpbmVz
LmluZGV4T2YoIiIsY3VycmVudExvY2F0aW9uICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxh
c3RMb2NhdGlvbiA9PT0gY3VycmVudExvY2F0aW9uIC0gMSkgewotICAgICAgICAgICAgICAgICAg
ICBibGFua0NvdW50ZXIrKzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoYmxhbmtDb3VudGVyID49IG51bUxpbmVzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBsb2NhdGlvbiA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBs
YXN0TG9jYXRpb24gKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogbGlu
ZXNbbGFzdExvY2F0aW9uXS5sZW5ndGgKLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBsb2NhdGlvbiwgIk11bHRp
cGxlIGJsYW5rIGxpbmVzIG5vdCBhbGxvd2VkLiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gRmluYWxseSwgcmVzZXQgdGhlIGJsYW5rIGNvdW50ZXIK
LSAgICAgICAgICAgICAgICAgICAgYmxhbmtDb3VudGVyID0gMDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IHdoaWxlIChjdXJyZW50TG9jYXRpb24gIT09IC0xKTsKLSAgICAgICAg
fQotICAgIH07Ci0KLX07Ci0KLX0se31dLDgzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiByZS1hc3NpZ25p
bmcgbmF0aXZlIG9iamVjdHMKLSAqIEBhdXRob3IgSWx5YSBWb2xvZGluCi0gKi8KLQotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNl
IHN0cmljdCI7Ci0KLSAgICB2YXIgbmF0aXZlT2JqZWN0cyA9IFsiQXJyYXkiLCAiQm9vbGVhbiIs
ICJEYXRlIiwgImRlY29kZVVSSSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiZGVjb2RlVVJJ
Q29tcG9uZW50IiwgImVuY29kZVVSSSIsICJlbmNvZGVVUklDb21wb25lbnQiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIkVycm9yIiwgImV2YWwiLCAiRXZhbEVycm9yIiwgIkZ1bmN0aW9uIiwg
ImlzRmluaXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJpc05hTiIsICJKU09OIiwgIk1h
dGgiLCAiTnVtYmVyIiwgIk9iamVjdCIsICJwYXJzZUludCIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAicGFyc2VGbG9hdCIsICJSYW5nZUVycm9yIiwgIlJlZmVyZW5jZUVycm9yIiwgIlJlZ0V4
cCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiU3RyaW5nIiwgIlN5bnRheEVycm9yIiwgIlR5
cGVFcnJvciIsICJVUklFcnJvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiTWFwIiwgIk5h
TiIsICJTZXQiLCAiV2Vha01hcCIsICJJbmZpbml0eSIsICJ1bmRlZmluZWQiXTsKLQotICAgIHJl
dHVybiB7Ci0KLSAgICAgICAgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkg
ewotICAgICAgICAgICAgaWYgKG5hdGl2ZU9iamVjdHMuaW5kZXhPZihub2RlLmxlZnQubmFtZSkg
Pj0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIG5vZGUubGVmdC5u
YW1lICsgIiBpcyBhIHJlYWQtb25seSBuYXRpdmUgb2JqZWN0LiIpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9LAotCi0gICAgICAgICJWYXJpYWJsZURlY2xhcmF0b3IiOiBmdW5jdGlvbihub2Rl
KSB7Ci0gICAgICAgICAgICBpZiAobmF0aXZlT2JqZWN0cy5pbmRleE9mKG5vZGUuaWQubmFtZSkg
Pj0gMCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWRlZmluaXRp
b24gb2YgJ3t7bmF0aXZlT2JqZWN0fX0nLiIsIHsgbmF0aXZlT2JqZWN0OiBub2RlLmlkLm5hbWUg
fSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw4NDpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcg
QSBydWxlIHRvIGRpc2FsbG93IG5lZ2F0ZWQgbGVmdCBvcGVyYW5kcyBvZiB0aGUgYGluYCBvcGVy
YXRvcgotICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1t
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsK
LQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihu
b2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvciA9PT0gImluIiAmJiBub2RlLmxl
ZnQudHlwZSA9PT0gIlVuYXJ5RXhwcmVzc2lvbiIgJiYgbm9kZS5sZWZ0Lm9wZXJhdG9yID09PSAi
ISIpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhlIGBpbmAgZXhw
cmVzc2lvbidzIGxlZnQgb3BlcmFuZCBpcyBuZWdhdGVkIik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw4NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIG5lc3RlZCB0ZXJu
YXJ5IGV4cHJlc3Npb25zCi0gKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKLSAqLwotCi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAg
ICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0gICAgICAgICJDb25kaXRpb25hbEV4cHJl
c3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS5hbHRlcm5hdGUu
dHlwZSA9PT0gIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiIgfHwKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS5jb25zZXF1ZW50LnR5cGUgPT09ICJDb25kaXRpb25hbEV4cHJlc3Npb24iKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkRvIG5vdCBuZXN0IHRlcm5hcnkgZXhw
cmVzc2lvbnMiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci19OwotCi19LHt9
XSw4NjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3Zl
cnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gdXNpbmcgbmV3IEZ1bmN0aW9uCi0gKiBAYXV0aG9yIEls
eWEgVm9sb2RpbgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmlu
aXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQotICAg
ICAgICAiTmV3RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChu
b2RlLmNhbGxlZS5uYW1lID09PSAiRnVuY3Rpb24iKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIlRoZSBGdW5jdGlvbiBjb25zdHJ1Y3RvciBpcyBldmFsLiIpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sODc6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0
byBkaXNhbGxvdyBjYWxscyB0byB0aGUgT2JqZWN0IGNvbnN0cnVjdG9yCi0gKiBAYXV0aG9yIE1h
dHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwuY29tLz4KLSAqLwotCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3Ry
aWN0IjsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBmdW5jdGlv
bihub2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUubmFtZSA9PT0gIk9iamVjdCIp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhlIG9iamVjdCBsaXRl
cmFsIG5vdGF0aW9uIHt9IGlzIHByZWZlcnJhYmxlLiIpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sODg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZGlzYWxsb3cgdXNlIG9mIG5l
dyBvcGVyYXRvciB3aXRoIHRoZSBgcmVxdWlyZWAgZnVuY3Rpb24KLSAqIEBhdXRob3IgV2lsIE1v
b3JlIElJSQotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRp
b24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24o
Y29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQotICAgICAg
ICAiTmV3RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2Rl
LmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5jYWxsZWUubmFtZSA9PT0gInJl
cXVpcmUiKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0
ZWQgdXNlIG9mIG5ldyB3aXRoIHJlcXVpcmUuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9OwotCi19OwotCi19LHt9XSw4OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gdXNpbmcgY29uc3Ry
dWN0b3IgZm9yIHdyYXBwZXIgb2JqZWN0cwotICogQGF1dGhvciBJbHlhIFZvbG9kaW4KLSAqLwot
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQot
ICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIk5ld0V4cHJlc3Np
b24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YXIgd3JhcHBlck9iamVjdHMgPSBb
IlN0cmluZyIsICJOdW1iZXIiLCAiQm9vbGVhbiIsICJNYXRoIiwgIkpTT04iXTsKLSAgICAgICAg
ICAgIGlmICh3cmFwcGVyT2JqZWN0cy5pbmRleE9mKG5vZGUuY2FsbGVlLm5hbWUpID4gLTEpIHsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRG8gbm90IHVzZSB7e2ZufX0g
YXMgYSBjb25zdHJ1Y3Rvci4iLCB7IGZuOiBub2RlLmNhbGxlZS5uYW1lIH0pOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sOTA6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBz
dGF0ZW1lbnRzIHdpdGggZnVuY3Rpb24gaW52b2NhdGlvbiBwcmVjZWRlZCBieQotICogIm5ldyIg
YW5kIG5vdCBwYXJ0IG9mIGFzc2lnbm1lbnQKLSAqIEBhdXRob3IgSWx5YSBWb2xvZGluCi0gKi8K
LQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0K
LSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJFeHByZXNzaW9u
U3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICBpZiAobm9kZS5leHBy
ZXNzaW9uLnR5cGUgPT09ICJOZXdFeHByZXNzaW9uIikgewotICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJEbyBub3QgdXNlICduZXcnIGZvciBzaWRlIGVmZmVjdHMuIik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw5MTpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0
byBmbGFnIHVzZSBvZiBhbiBvYmplY3QgcHJvcGVydHkgb2YgdGhlIGdsb2JhbCBvYmplY3QgKE1h
dGggYW5kIEpTT04pIGFzIGEgZnVuY3Rpb24KLSAqIEBhdXRob3IgSmFtZXMgQWxsYXJkaWNlCi0g
Ki8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1cm4gewotICAgICAgICAiQ2FsbEV4cHJl
c3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIGlmIChub2RlLmNhbGxlZS50
eXBlID09PSAiSWRlbnRpZmllciIpIHsKLSAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG5vZGUu
Y2FsbGVlLm5hbWU7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICJNYXRoIiB8fCBuYW1l
ID09PSAiSlNPTiIpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwg
Iid7e25hbWV9fScgaXMgbm90IGEgZnVuY3Rpb24uIiwgeyBuYW1lOiBuYW1lIH0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0s
e31dLDkyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVv
dmVydmlldyBSdWxlIHRvIGZsYWcgb2N0YWwgZXNjYXBlIHNlcXVlbmNlcyBpbiBzdHJpbmcgbGl0
ZXJhbHMuCi0gKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKLSAqLwotCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3Ry
aWN0IjsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2Rl
KSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUudmFsdWUgIT09ICJzdHJpbmciKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG1h
dGNoID0gbm9kZS5yYXcubWF0Y2goL14oW15cXF18XFxbXjAtN10pKlxcKFswLTddKS8pLAotICAg
ICAgICAgICAgICAgIG9jdGFsRGlnaXQ7Ci0KLSAgICAgICAgICAgIGlmIChtYXRjaCkgewotICAg
ICAgICAgICAgICAgIG9jdGFsRGlnaXQgPSBtYXRjaFsyXTsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiRG9uJ3QgdXNlIG9jdGFsOiAnXFx7e29jdGFsRGlnaXR9fScuIFVz
ZSAnXFx1Li4uLicgaW5zdGVhZC4iLAotICAgICAgICAgICAgICAgICAgICAgICAgeyBvY3RhbERp
Z2l0OiBvY3RhbERpZ2l0IH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9Owot
Ci19OwotCi19LHt9XSw5MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioK
LSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gaW5pdGlhbGl6aW5nIG9jdGFsIGxp
dGVyYWwKLSAqIEBhdXRob3IgSWx5YSBWb2xvZGluCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0K
LSAgICByZXR1cm4gewotCi0gICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgewotICAg
ICAgICAgICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlID09PSAibnVtYmVyIiAmJiAvXjBbMC03XS8u
dGVzdChub2RlLnJhdykpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
T2N0YWwgbGl0ZXJhbHMgc2hvdWxkIG5vdCBiZSB1c2VkLiIpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sOTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93IHN0cmluZyBjb25jYXRl
bmF0aW9uIHdoZW4gdXNpbmcgX19kaXJuYW1lIGFuZCBfX2ZpbGVuYW1lCi0gKiBAYXV0aG9yIE5p
Y2hvbGFzIEMuIFpha2FzCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICB2YXIgTUFUQ0hFUiA9IC9e
X18oPzpkaXJ8ZmlsZSluYW1lJC87Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8g
UHVibGljCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLQotICAgICAg
ICAiQmluYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAgICAgdmFy
IGxlZnQgPSBub2RlLmxlZnQsCi0gICAgICAgICAgICAgICAgcmlnaHQgPSBub2RlLnJpZ2h0Owot
Ci0gICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvciA9PT0gIisiICYmCi0gICAgICAgICAgICAg
ICAgICAgICgobGVmdC50eXBlID09PSAiSWRlbnRpZmllciIgJiYgTUFUQ0hFUi50ZXN0KGxlZnQu
bmFtZSkpIHx8Ci0gICAgICAgICAgICAgICAgICAgIChyaWdodC50eXBlID09PSAiSWRlbnRpZmll
ciIgJiYgTUFUQ0hFUi50ZXN0KHJpZ2h0Lm5hbWUpKSkKLSAgICAgICAgICAgICkgewotCi0gICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVzZSBwYXRoLmpvaW4oKSBvciBwYXRo
LnJlc29sdmUoKSBpbnN0ZWFkIG9mICsgdG8gY3JlYXRlIHBhdGhzLiIpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICB9OwotCi19OwotCi19LHt9XSw5NTpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVz
ZSBvZiB1bmFyeSBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBvcGVyYXRvcnMuCi0gKiBAYXV0aG9y
IElhbiBDaHJpc3RpYW4gTXllcnMKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8g
UnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVy
biB7Ci0KLSAgICAgICAgIlVwZGF0ZUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5hcnkgb3BlcmF0b3IgJyIgKyBub2RlLm9w
ZXJhdG9yICsgIicgdXNlZC4iKTsKLSAgICAgICAgfQotCi0gICAgfTsKLQotfTsKLQotfSx7fV0s
OTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2
aWV3IERpc2FsbG93IHRoZSB1c2Ugb2YgcHJvY2Vzcy5lbnYoKQotICogQGF1dGhvciBWaWduZXNo
IEFuYW5kCi0gKiBAY29weXJpZ2h0IDIwMTQgVmlnbmVzaCBBbmFuZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8g
UnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIk1lbWJl
ckV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YXIgb2JqZWN0TmFt
ZSA9IG5vZGUub2JqZWN0Lm5hbWUsCi0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gbm9k
ZS5wcm9wZXJ0eS5uYW1lOwotCi0gICAgICAgICAgICBpZiAob2JqZWN0TmFtZSA9PT0gInByb2Nl
c3MiICYmICFub2RlLmNvbXB1dGVkICYmIHByb3BlcnR5TmFtZSAmJiBwcm9wZXJ0eU5hbWUgPT09
ICJlbnYiKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0
ZWQgdXNlIG9mIHByb2Nlc3MuZW52LiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLQot
ICAgIH07Ci0KLX07Ci0KLX0se31dLDk3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKLS8qKgotICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyB0aGUgdXNlIG9mIHByb2Nlc3MuZXhp
dCgpCi0gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljCi0gICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlv
bihub2RlKSB7Ci0gICAgICAgICAgICB2YXIgY2FsbGVlID0gbm9kZS5jYWxsZWU7Ci0KLSAgICAg
ICAgICAgIGlmIChjYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iICYmIGNhbGxlZS5v
YmplY3QubmFtZSA9PT0gInByb2Nlc3MiICYmCi0gICAgICAgICAgICAgICAgY2FsbGVlLnByb3Bl
cnR5Lm5hbWUgPT09ICJleGl0IgotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIkRvbid0IHVzZSBwcm9jZXNzLmV4aXQoKTsgdGhyb3cgYW4gZXJy
b3IgaW5zdGVhZC4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgfTsKLQotfTsK
LQotfSx7fV0sOTg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2FnZSBvZiBfX3Byb3RvX18gcHJvcGVydHkKLSAq
IEBhdXRob3IgSWx5YSBWb2xvZGluCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
IFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1
cm4gewotCi0gICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotCi0g
ICAgICAgICAgICBpZiAobm9kZS5wcm9wZXJ0eSAmJgotICAgICAgICAgICAgICAgICAgICAobm9k
ZS5wcm9wZXJ0eS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5wcm9wZXJ0eS5uYW1lID09
PSAiX19wcm90b19fIiAmJiAhbm9kZS5jb21wdXRlZCkgfHwKLSAgICAgICAgICAgICAgICAgICAg
KG5vZGUucHJvcGVydHkudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUucHJvcGVydHkudmFsdWUg
PT09ICJfX3Byb3RvX18iKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJUaGUgJ19fcHJvdG9fXycgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4iKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDk5OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hl
biB0aGUgc2FtZSB2YXJpYWJsZSBpcyBkZWNsYXJlZCBtb3JlIHRoZW4gb25jZS4KLSAqIEBhdXRo
b3IgSWx5YSBWb2xvZGluCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUg
RGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICBmdW5jdGlvbiBm
aW5kVmFyaWFibGVzKCkgewotICAgICAgICB2YXIgc2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCk7
Ci0KLSAgICAgICAgc2NvcGUudmFyaWFibGVzLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHsK
LSAgICAgICAgICAgIGlmICh2YXJpYWJsZS5pZGVudGlmaWVycyAmJiB2YXJpYWJsZS5pZGVudGlm
aWVycy5sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUuaWRlbnRpZmllcnMu
c29ydChmdW5jdGlvbihhLCBiKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnJhbmdl
WzFdIC0gYi5yYW5nZVsxXTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAxLCBsID0gdmFyaWFibGUuaWRlbnRpZmllcnMubGVuZ3RoOyBpIDwgbDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHZhcmlhYmxlLmlkZW50
aWZpZXJzW2ldLCAie3thfX0gaXMgYWxyZWFkeSBkZWZpbmVkIiwge2E6IHZhcmlhYmxlLm5hbWV9
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0K
LQotICAgIHJldHVybiB7Ci0gICAgICAgICJQcm9ncmFtIjogZmluZFZhcmlhYmxlcywKLSAgICAg
ICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZpbmRWYXJpYWJsZXMsCi0gICAgICAgICJGdW5jdGlv
bkRlY2xhcmF0aW9uIjogZmluZFZhcmlhYmxlcwotICAgIH07Ci19OwotCi19LHt9XSwxMDA6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1
bGUgdG8gY291bnQgbXVsdGlwbGUgc3BhY2VzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMKLSAqIEBh
dXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5jb20vPgotICovCi0KLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAg
InVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0
aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IGNvbnRleHQuZ2V0Rmlyc3RUb2tl
bnMobm9kZSwgMSlbMF0sCi0gICAgICAgICAgICAgICAgbm9kZVR5cGUgPSB0b2tlbi50eXBlLAot
ICAgICAgICAgICAgICAgIG5vZGVWYWx1ZSA9IHRva2VuLnZhbHVlLAotICAgICAgICAgICAgICAg
IG11bHRpcGxlU3BhY2VzUmVnZXggPSAvKCB7Mix9KSs/LywKLSAgICAgICAgICAgICAgICByZWdl
eFJlc3VsdHM7Ci0KLSAgICAgICAgICAgIGlmIChub2RlVHlwZSA9PT0gIlJlZ3VsYXJFeHByZXNz
aW9uIikgewotICAgICAgICAgICAgICAgIHJlZ2V4UmVzdWx0cyA9IG11bHRpcGxlU3BhY2VzUmVn
ZXguZXhlYyhub2RlVmFsdWUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlZ2V4UmVzdWx0cyAh
PT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiU3Bh
Y2VzIGFyZSBoYXJkIHRvIGNvdW50LiBVc2UgeyIgKyByZWdleFJlc3VsdHNbMF0ubGVuZ3RoICsg
In0uIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fTsKLQotfTsKLQotfSx7fV0sMTAxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
LS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGRpc2FsbG93IHJlc2VydmVkIHdvcmRzIGJl
aW5nIHVzZWQgYXMga2V5cwotICogQGF1dGhvciBFbWlsIEJheQotICogQGNvcHlyaWdodCAyMDE0
IEVtaWwgQmF5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwot
Ci0gICAgdmFyIE1FU1NBR0UgPSAiUmVzZXJ2ZWQgd29yZCAne3trZXl9fScgdXNlZCBhcyBrZXku
IjsKLQotICAgIHZhciByZXNlcnZlZFdvcmRzID0gWwotICAgICAgICAiYWJzdHJhY3QiLAotICAg
ICAgICAiYm9vbGVhbiIsICJicmVhayIsICJieXRlIiwKLSAgICAgICAgImNhc2UiLCAiY2F0Y2gi
LCAiY2hhciIsICJjbGFzcyIsICJjb25zdCIsICJjb250aW51ZSIsCi0gICAgICAgICJkZWJ1Z2dl
ciIsICJkZWZhdWx0IiwgImRlbGV0ZSIsICJkbyIsICJkb3VibGUiLAotICAgICAgICAiZWxzZSIs
ICJlbnVtIiwgImV4cG9ydCIsICJleHRlbmRzIiwKLSAgICAgICAgImZpbmFsIiwgImZpbmFsbHki
LCAiZmxvYXQiLCAiZm9yIiwgImZ1bmN0aW9uIiwKLSAgICAgICAgImdvdG8iLAotICAgICAgICAi
aWYiLCAiaW1wbGVtZW50cyIsICJpbXBvcnQiLCAiaW4iLCAiaW5zdGFuY2VvZiIsICJpbnQiLCAi
aW50ZXJmYWNlIiwKLSAgICAgICAgImxvbmciLAotICAgICAgICAibmF0aXZlIiwgIm5ldyIsCi0g
ICAgICAgICJwYWNrYWdlIiwgInByaXZhdGUiLCAicHJvdGVjdGVkIiwgInB1YmxpYyIsCi0gICAg
ICAgICJyZXR1cm4iLAotICAgICAgICAic2hvcnQiLCAic3RhdGljIiwgInN1cGVyIiwgInN3aXRj
aCIsICJzeW5jaHJvbml6ZWQiLAotICAgICAgICAidGhpcyIsICJ0aHJvdyIsICJ0aHJvd3MiLCAi
dHJhbnNpZW50IiwgInRyeSIsICJ0eXBlb2YiLAotICAgICAgICAidmFyIiwgInZvaWQiLCAidm9s
YXRpbGUiLAotICAgICAgICAid2hpbGUiLCAid2l0aCIKLSAgICBdOwotCi0gICAgcmV0dXJuIHsK
LQotICAgICAgICAiT2JqZWN0RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAg
ICAgIG5vZGUucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KSB7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAocHJvcGVydHkua2V5LnR5cGUgPT09ICJJZGVudGlmaWVyIikgewotICAg
ICAgICAgICAgICAgICAgICB2YXIga2V5TmFtZSA9IHByb3BlcnR5LmtleS5uYW1lOwotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChyZXNlcnZlZFdvcmRzLmluZGV4T2YoIiIgKyBrZXlOYW1lKSAh
PT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIE1F
U1NBR0UsIHsga2V5OiBrZXlOYW1lIH0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB9KTsKLQotICAgICAgICB9Ci0gICAgfTsKLQotfTsK
LQotfSx7fV0sMTAyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICog
QGZpbGVvdmVydmlldyBSZXN0cmljdCB1c2FnZSBvZiBzcGVjaWZpZWQgbm9kZSBtb2R1bGVzLgot
ICogQGF1dGhvciBDaHJpc3RpYW4gU2NodWx6Ci0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29udGV4dCkgewotICAgIC8vIHRy
aW0gcmVzdHJpY3RlZCBtb2R1bGUgbmFtZXMKLSAgICB2YXIgcmVzdHJpY3RlZE1vZHVsZXMgPSBj
b250ZXh0Lm9wdGlvbnM7Ci0KLSAgICAvLyBpZiBubyBtb2R1bGVzIGFyZSByZXN0cmljdGVkIHdl
IGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIENhbGxFeHByZXNzaW9ucwotICAgIGlmIChyZXN0cmlj
dGVkTW9kdWxlcy5sZW5ndGggPT09IDApIHsKLSAgICAgICAgcmV0dXJuIHt9OwotICAgIH0KLQot
ICAgIC8qKgotICAgICAqIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgbm9kZSBpcyBhIHN0cmluZyBs
aXRlcmFsLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4K
LSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYgdGhlIG5vZGUgaXMgYSBzdHJpbmcgbGl0ZXJh
bC4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBpc1N0cmluZyhub2RlKSB7Ci0gICAgICAgIHJldHVy
biBub2RlICYmIG5vZGUudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBub2RlLnZhbHVlID09
PSAic3RyaW5nIjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGdW5jdGlvbiB0byBjaGVjayBp
ZiBhIG5vZGUgaXMgYSByZXF1aXJlIGNhbGwuCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2Rl
IFRoZSBub2RlIHRvIGNoZWNrLgotICAgICAqIEByZXR1cm5zIHtib29sZWFufSBJZiB0aGUgbm9k
ZSBpcyBhIHJlcXVpcmUgY2FsbC4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBpc1JlcXVpcmVDYWxs
KG5vZGUpIHsKLSAgICAgICAgcmV0dXJuIG5vZGUuY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVy
IiAmJiBub2RlLmNhbGxlZS5uYW1lID09PSAicmVxdWlyZSI7Ci0gICAgfQotCi0gICAgLyoqCi0g
ICAgICogRnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBub2RlIGhhcyBhbiBhcmd1bWVudCB0aGF0IGlz
IGFuIHJlc3RyaWN0ZWQgbW9kdWxlIGFuZCByZXR1cm4gaXRzIG5hbWUuCi0gICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrCi0gICAgICogQHJldHVybnMge3VuZGVm
aW5lZHxTdHJpbmd9IHJlc3RyaWN0ZWQgbW9kdWxlIG5hbWUgb3IgdW5kZWZpbmVkIGlmIG5vZGUg
YXJndW1lbnQgaXNuJ3QgcmVzdHJpY3RlZC4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBnZXRSZXN0
cmljdGVkTW9kdWxlTmFtZShub2RlKSB7Ci0gICAgICAgIHZhciBtb2R1bGVOYW1lOwotCi0gICAg
ICAgIC8vIG5vZGUgaGFzIGFyZ3VtZW50cyBhbmQgZmlyc3QgYXJndW1lbnQgaXMgc3RyaW5nCi0g
ICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggJiYgaXNTdHJpbmcobm9kZS5hcmd1bWVu
dHNbMF0pKSB7Ci0gICAgICAgICAgICB2YXIgYXJndW1lbnRWYWx1ZSA9IG5vZGUuYXJndW1lbnRz
WzBdLnZhbHVlLnRyaW0oKTsKLQotICAgICAgICAgICAgLy8gY2hlY2sgaWYgYXJndW1lbnQgdmFs
dWUgaXMgaW4gcmVzdHJpY3RlZCBtb2R1bGVzIGFycmF5Ci0gICAgICAgICAgICBpZiAocmVzdHJp
Y3RlZE1vZHVsZXMuaW5kZXhPZihhcmd1bWVudFZhbHVlKSAhPT0gLTEpIHsKLSAgICAgICAgICAg
ICAgICBtb2R1bGVOYW1lID0gYXJndW1lbnRWYWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBtb2R1bGVOYW1lOwotICAgIH0KLQotICAgIHJldHVybiB7Ci0g
ICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uIChub2RlKSB7Ci0gICAgICAgICAgICBp
ZiAoaXNSZXF1aXJlQ2FsbChub2RlKSkgewotICAgICAgICAgICAgICAgIHZhciByZXN0cmljdGVk
TW9kdWxlTmFtZSA9IGdldFJlc3RyaWN0ZWRNb2R1bGVOYW1lKG5vZGUpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKHJlc3RyaWN0ZWRNb2R1bGVOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KG5vZGUsICIne3ttb2R1bGVOYW1lfX0nIG1vZHVsZSBpcyByZXN0cmljdGVk
IGZyb20gYmVpbmcgdXNlZC4iLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1l
OiByZXN0cmljdGVkTW9kdWxlTmFtZQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotfTsKLQotfSx7fV0s
MTAzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVy
dmlldyBSdWxlIHRvIGZsYWcgd2hlbiByZXR1cm4gc3RhdGVtZW50IGNvbnRhaW5zIGFzc2lnbm1l
bnQKLSAqIEBhdXRob3IgSWx5YSBWb2xvZGluCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICByZXR1
cm4gewotCi0gICAgICAgICJSZXR1cm5TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAg
ICAgICAgICBpZiAobm9kZS5hcmd1bWVudCAmJiBub2RlLmFyZ3VtZW50LnR5cGUgPT09ICJBc3Np
Z25tZW50RXhwcmVzc2lvbiIpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiUmV0dXJuIHN0YXRlbWVudCBzaG91bGQgbm90IGNvbnRhaW4gYXNzaWdubWVudC4iKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDEwNDpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0
byBmbGFnIHdoZW4gdXNpbmcgamF2YXNjcmlwdDogdXJscwotICogQGF1dGhvciBJbHlhIFZvbG9k
aW4KLSAqLwotLypqc2hpbnQgc2NyaXB0dXJsOiB0cnVlICovCi0vKmVzbGludCBuby1zY3JpcHQt
dXJsOiAwKi8KLQotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8g
UnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIkxpdGVy
YWwiOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIHZhciB2YWx1ZTsKLQotICAgICAg
ICAgICAgaWYgKG5vZGUudmFsdWUgJiYgdHlwZW9mKG5vZGUudmFsdWUpID09PSAic3RyaW5nIikg
ewotICAgICAgICAgICAgICAgIHZhbHVlID0gbm9kZS52YWx1ZS50b0xvd2VyQ2FzZSgpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoImphdmFzY3JpcHQ6IikgPT09IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlNjcmlwdCBVUkwgaXMg
YSBmb3JtIG9mIGV2YWwuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sMTA1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgY29tcGFyaXNv
biB3aGVyZSBsZWZ0IHBhcnQgaXMgdGhlIHNhbWUgYXMgdGhlIHJpZ2h0Ci0gKiBwYXJ0LgotICog
QGF1dGhvciBJbHlhIFZvbG9kaW4KLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8g
UnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1cm4g
ewotCi0gICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAg
ICAgICAgdmFyIG9wZXJhdG9ycyA9IFsiPT09IiwgIj09IiwgIiE9PSIsICIhPSIsICI+IiwgIjwi
LCAiPj0iLCAiPD0iXTsKLSAgICAgICAgICAgIGlmIChvcGVyYXRvcnMuaW5kZXhPZihub2RlLm9w
ZXJhdG9yKSA+IC0xICYmCi0gICAgICAgICAgICAgICAgKG5vZGUubGVmdC50eXBlID09PSAiSWRl
bnRpZmllciIgJiYgbm9kZS5yaWdodC50eXBlID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5sZWZ0
Lm5hbWUgPT09IG5vZGUucmlnaHQubmFtZSB8fAotICAgICAgICAgICAgICAgIG5vZGUubGVmdC50
eXBlID09PSAiTGl0ZXJhbCIgJiYgbm9kZS5yaWdodC50eXBlID09PSAiTGl0ZXJhbCIgJiYgbm9k
ZS5sZWZ0LnZhbHVlID09PSBub2RlLnJpZ2h0LnZhbHVlKSkgewotICAgICAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KG5vZGUsICJDb21wYXJpbmcgdG8gaXRzZWxmIGlzIHBvdGVudGlhbGx5IHBv
aW50bGVzcy4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0s
e31dLDEwNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxl
b3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBjb21tYSBvcGVyYXRvcgotICogQGF1dGhvciBC
cmFuZG9uIE1pbGxzCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVm
aW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAvKioKLSAgICAgKiBQ
YXJ0cyBvZiB0aGUgZ3JhbW1hciB0aGF0IGFyZSByZXF1aXJlZCB0byBoYXZlIHBhcmVucy4KLSAg
ICAgKi8KLSAgICB2YXIgcGFyZW50aGVzaXplZCA9IHsKLSAgICAgICAgIkRvV2hpbGVTdGF0ZW1l
bnQiOiAidGVzdCIsCi0gICAgICAgICJJZlN0YXRlbWVudCI6ICJ0ZXN0IiwKLSAgICAgICAgIlN3
aXRjaFN0YXRlbWVudCI6ICJkaXNjcmltaW5hbnQiLAotICAgICAgICAiV2hpbGVTdGF0ZW1lbnQi
OiAidGVzdCIsCi0gICAgICAgICJXaXRoU3RhdGVtZW50IjogIm9iamVjdCIKLQotICAgICAgICAv
LyBPbWl0dGluZyBDYWxsRXhwcmVzc2lvbiAtIGNvbW1hcyBhcmUgcGFyc2VkIGFzIGFyZ3VtZW50
IHNlcGFyYXRvcnMKLSAgICAgICAgLy8gT21pdHRpbmcgTmV3RXhwcmVzc2lvbiAtIGNvbW1hcyBh
cmUgcGFyc2VkIGFzIGFyZ3VtZW50IHNlcGFyYXRvcnMKLSAgICAgICAgLy8gT21pdHRpbmcgRm9y
SW5TdGF0ZW1lbnQgLSBwYXJ0cyBhcmVuJ3QgaW5kaXZpZHVhbGx5IHBhcmVudGhlc2lzZWQKLSAg
ICAgICAgLy8gT21pdHRpbmcgRm9yU3RhdGVtZW50IC0gcGFydHMgYXJlbid0IGluZGl2aWR1YWxs
eSBwYXJlbnRoZXNpc2VkCi0gICAgfTsKLQotICAgIC8qKgotICAgICAqIERldGVybWluZXMgd2hl
dGhlciBhIG5vZGUgaXMgcmVxdWlyZWQgYnkgdGhlIGdyYW1tYXIgdG8gYmUgd3JhcHBlZCBpbgot
ICAgICAqIHBhcmVucywgZS5nLiB0aGUgdGVzdCBvZiBhbiBpZiBzdGF0ZW1lbnQuCi0gICAgICog
QHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gVGhlIEFTVCBub2RlCi0gICAgICogQHJldHVybnMge2Jv
b2xlYW59IFRydWUgaWYgcGFyZW5zIGFyb3VuZCBub2RlIGJlbG9uZyB0byBwYXJlbnQgbm9kZS4K
LSAgICAgKi8KLSAgICBmdW5jdGlvbiByZXF1aXJlc0V4dHJhUGFyZW5zKG5vZGUpIHsKLSAgICAg
ICAgcmV0dXJuIG5vZGUucGFyZW50ICYmIHBhcmVudGhlc2l6ZWRbbm9kZS5wYXJlbnQudHlwZV0g
IT0gbnVsbCAmJgotICAgICAgICAgICAgICAgIG5vZGUgPT09IG5vZGUucGFyZW50W3BhcmVudGhl
c2l6ZWRbbm9kZS5wYXJlbnQudHlwZV1dOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNr
IGlmIGEgbm9kZSBpcyB3cmFwcGVkIGluIHBhcmVucy4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9
IG5vZGUgLSBUaGUgQVNUIG5vZGUKLSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0
aGUgbm9kZSBoYXMgYSBwYXJlbiBvbiBlYWNoIHNpZGUuCi0gICAgICovCi0gICAgZnVuY3Rpb24g
aXNQYXJlbnRoZXNpc2VkKG5vZGUpIHsKLSAgICAgICAgdmFyIHByZXZpb3VzVG9rZW4gPSBjb250
ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUpLAotICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4
dC5nZXRUb2tlbkFmdGVyKG5vZGUpOwotCi0gICAgICAgIHJldHVybiBwcmV2aW91c1Rva2VuICYm
IG5leHRUb2tlbiAmJgotICAgICAgICAgICAgcHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYm
IHByZXZpb3VzVG9rZW4ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSAmJgotICAgICAgICAgICAg
bmV4dFRva2VuLnZhbHVlID09PSAiKSIgJiYgbmV4dFRva2VuLnJhbmdlWzBdID49IG5vZGUucmFu
Z2VbMV07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2sgaWYgYSBub2RlIGlzIHdyYXBw
ZWQgaW4gdHdvIGxldmVscyBvZiBwYXJlbnMuCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2Rl
IC0gVGhlIEFTVCBub2RlCi0gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdHdvIHBh
cmVucyBzdXJyb3VuZCB0aGUgbm9kZSBvbiBlYWNoIHNpZGUuCi0gICAgICovCi0gICAgZnVuY3Rp
b24gaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZSkgewotICAgICAgICB2YXIgcHJldmlvdXNUb2tl
biA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSwgMSksCi0gICAgICAgICAgICBuZXh0VG9r
ZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9kZSwgMSk7Ci0KLSAgICAgICAgcmV0dXJuIGlz
UGFyZW50aGVzaXNlZChub2RlKSAmJiBwcmV2aW91c1Rva2VuICYmIG5leHRUb2tlbiAmJgotICAg
ICAgICAgICAgcHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYmIHByZXZpb3VzVG9rZW4ucmFu
Z2VbMV0gPD0gbm9kZS5yYW5nZVswXSAmJgotICAgICAgICAgICAgbmV4dFRva2VuLnZhbHVlID09
PSAiKSIgJiYgbmV4dFRva2VuLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV07Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHsKLSAgICAgICAgIlNlcXVlbmNlRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKLSAgICAgICAgICAgIC8vIEFsd2F5cyBhbGxvdyBzZXF1ZW5jZXMgaW4gZm9yIHN0YXRlbWVu
dCB1cGRhdGUKLSAgICAgICAgICAgIGlmIChub2RlLnBhcmVudC50eXBlID09PSAiRm9yU3RhdGVt
ZW50IiAmJgotICAgICAgICAgICAgICAgICAgICAobm9kZSA9PT0gbm9kZS5wYXJlbnQuaW5pdCB8
fCBub2RlID09PSBub2RlLnBhcmVudC51cGRhdGUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBXcmFwcGluZyBhIHNlcXVlbmNlIGlu
IGV4dHJhIHBhcmVucyBpbmRpY2F0ZXMgaW50ZW50Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNF
eHRyYVBhcmVucyhub2RlKSkgewotICAgICAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWRU
d2ljZShub2RlKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNQYXJlbnRo
ZXNpc2VkKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJVbmV4cGVjdGVkIHVzZSBvZiBjb21tYSBvcGVyYXRvci4iKTsKLSAgICAgICAgfQotICAgIH07
Ci0KLX07Ci0KLX0se31dLDEwNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0v
KioKLSAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgc2hhZG93aW5nIG9mIE5hTiwgdW5kZWZpbmVk
LCBhbmQgSW5maW5pdHkgKEVTNSBzZWN0aW9uIDE1LjEuMSkKLSAqIEBhdXRob3IgTWljaGFlbCBG
aWNhcnJhCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
IFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICB2YXIgUkVTVFJJQ1RFRCA9IFsidW5kZWZp
bmVkIiwgIk5hTiIsICJJbmZpbml0eSIsICJhcmd1bWVudHMiLCAiZXZhbCJdOwotCi0gICAgZnVu
Y3Rpb24gY2hlY2tGb3JWaW9sYXRpb24oaWQpIHsKLSAgICAgICAgaWYgKFJFU1RSSUNURUQuaW5k
ZXhPZihpZC5uYW1lKSA+IC0xKSB7Ci0gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpZCwgIlNo
YWRvd2luZyBvZiBnbG9iYWwgcHJvcGVydHkgXCIiICsgaWQubmFtZSArICJcIi4iKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJWYXJpYWJsZURlY2xhcmF0b3Ii
OiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBjaGVja0ZvclZpb2xhdGlvbihub2RlLmlk
KTsKLSAgICAgICAgfSwKLSAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5v
ZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLmlkKSB7Ci0gICAgICAgICAgICAgICAgY2hlY2tG
b3JWaW9sYXRpb24obm9kZS5pZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBbXS5tYXAu
Y2FsbChub2RlLnBhcmFtcywgY2hlY2tGb3JWaW9sYXRpb24pOwotICAgICAgICB9LAotICAgICAg
ICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGNo
ZWNrRm9yVmlvbGF0aW9uKG5vZGUuaWQpOwotICAgICAgICAgICAgW10ubWFwLmNhbGwobm9kZS5w
YXJhbXMsIGNoZWNrRm9yVmlvbGF0aW9uKTsKLSAgICAgICAgfSwKLSAgICAgICAgIkNhdGNoQ2xh
dXNlIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgY2hlY2tGb3JWaW9sYXRpb24obm9k
ZS5wYXJhbSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSwxMDg6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyBvbiBkZWNsYXJpbmcgdmFyaWFibGVzIGFscmVhZHkgZGVjbGFyZWQgaW4gdGhlIG91dGVy
IHNjb3BlCi0gKiBAYXV0aG9yIElseWEgVm9sb2RpbgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwot
Ci0gICAgLyoqCi0gICAgICogQ2hlY2tzIGlmIGEgdmFyaWFibGUgaXMgY29udGFpbmVkIGluIHRo
ZSBsaXN0IG9mIGdpdmVuIHNjb3BlIHZhcmlhYmxlcy4KLSAgICAgKiBAcGFyYW0ge09iamVjdH0g
dmFyaWFibGUgVGhlIHZhcmlhYmxlIHRvIGNoZWNrLgotICAgICAqIEBwYXJhbSB7QXJyYXl9IHNj
b3BlVmFycyBUaGUgc2NvcGUgdmFyaWFibGVzIHRvIGxvb2sgZm9yLgotICAgICAqIEByZXR1cm5z
IHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgdmFyaWFibGUgaXMgY29udGFpbnMgaW4gdGhl
IGxpc3Qgb2Ygc2NvcGUgdmFyaWFibGVzLgotICAgICAqLwotICAgIGZ1bmN0aW9uIGlzQ29udGFp
bmVkSW5TY29wZVZhcnModmFyaWFibGUsIHNjb3BlVmFycykgewotICAgICAgICByZXR1cm4gc2Nv
cGVWYXJzLnNvbWUoZnVuY3Rpb24gKHNjb3BlVmFyKSB7Ci0gICAgICAgICAgICBpZiAoc2NvcGVW
YXIuaWRlbnRpZmllcnMubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiB2YXJp
YWJsZS5uYW1lID09PSBzY29wZVZhci5uYW1lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVj
a3MgaWYgdGhlIGdpdmVuIHZhcmlhYmxlcyBhcmUgc2hhZG93ZWQgaW4gdGhlIGdpdmVuIHNjb3Bl
LgotICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhcmlhYmxlcyBUaGUgdmFyaWFibGVzIHRvIGxvb2sg
Zm9yCi0gICAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIFRoZSBzY29wZSB0byBiZSBjaGVja2Vk
LgotICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIGNoZWNrU2hh
ZG93c0luU2NvcGUodmFyaWFibGVzLCBzY29wZSkgewotICAgICAgICB2YXJpYWJsZXMuZm9yRWFj
aChmdW5jdGlvbiAodmFyaWFibGUpIHsKLSAgICAgICAgICAgIGlmIChpc0NvbnRhaW5lZEluU2Nv
cGVWYXJzKHZhcmlhYmxlLCBzY29wZS52YXJpYWJsZXMpKSB7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQodmFyaWFibGUuaWRlbnRpZmllcnNbMF0sICJ7e2F9fSBpcyBhbHJlYWR5IGRl
Y2xhcmVkIGluIHRoZSB1cHBlciBzY29wZS4iLCB7YTogdmFyaWFibGUubmFtZX0pOwotICAgICAg
ICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGaWx0ZXJzIGFs
bCB2YXJpYWJsZXMgb2YgYSBsaXN0IHdoaWNoIGFscmVhZHkgb2NjdXIgaW4gYW5vdGhlciBsaXN0
LgotICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhcmlhYmxlTGlzdEEgTGlzdCBvZiB2YXJpYWJsZXMg
d2hpY2ggc2hvdWxkIGJlIGZpbHRlcmVkLgotICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhcmlhYmxl
TGlzdEIgTGlzdCBvZiB2YXJpYWJsZXMgd2hpY2ggc2hvdWxkIG5vIG9jY3VyIGluIHZhcmlhYmxl
TGlzdEEuCi0gICAgICogQHJldHVybnMge0FycmF5fSBGaWx0ZXJlZCBsaXN0IG9mIHZhcmlhYmxl
cy4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBmaWx0ZXJWYXJpYWJsZUxpc3QodmFyaWFibGVMaXN0
QSwgdmFyaWFibGVMaXN0QikgewotICAgICAgICByZXR1cm4gdmFyaWFibGVMaXN0QS5maWx0ZXIo
ZnVuY3Rpb24gKHZhcmlhYmxlQSkgewotICAgICAgICAgICAgcmV0dXJuICF2YXJpYWJsZUxpc3RC
LnNvbWUoZnVuY3Rpb24gKHZhcmlhYmxlQikgewotICAgICAgICAgICAgICAgIHJldHVybiB2YXJp
YWJsZUEubmFtZSA9PT0gdmFyaWFibGVCLm5hbWU7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
fSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIHRoZSBnaXZlbiBub2RlIGZvciBz
aGFkb3dlZCB2YXJpYWJsZXMuCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qg
bm9kZSBvZiBhIEZ1bmN0aW9uRGVjbGFyYXRpb24gb3IgRnVuY3Rpb25FeHByZXNzaW9uLgotICAg
ICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIGNoZWNrRm9yU2hhZG93
cyhub2RlKSB7Ci0gICAgICAgIHZhciBzY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKSwKLSAgICAg
ICAgICAgIGFyZ3MgPSBub2RlLnBhcmFtcywKLSAgICAgICAgICAgIHZhcmlhYmxlcyA9IGZpbHRl
clZhcmlhYmxlTGlzdChzY29wZS52YXJpYWJsZXMsIGFyZ3MpOwotCi0gICAgICAgIC8vIGl0ZXJh
dGUgdGhyb3VnaCB0aGUgYXJyYXkgb2YgdmFyaWFibGVzIGFuZCBmaW5kIGR1cGxpY2F0ZXMgd2l0
aCB0aGUgdXBwZXIgc2NvcGUKLSAgICAgICAgdmFyIHVwcGVyID0gc2NvcGUudXBwZXI7Ci0gICAg
ICAgIHdoaWxlICh1cHBlcikgewotICAgICAgICAgICAgY2hlY2tTaGFkb3dzSW5TY29wZSh2YXJp
YWJsZXMsIHVwcGVyKTsKLSAgICAgICAgICAgIHVwcGVyID0gdXBwZXIudXBwZXI7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gewotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6
IGNoZWNrRm9yU2hhZG93cywKLSAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGNoZWNrRm9y
U2hhZG93cwotICAgIH07Ci0KLX07Ci0KLX0se31dLDEwOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byByZXF1aXJlIHZhcmlh
YmxlcyBkZWNsYXJlZCB3aXRob3V0IHdoaXRlc3BhY2UgYmVmb3JlIHRoZSBsaW5lcyBzZW1pY29s
b24KLSAqIEBhdXRob3IgSm9uYXRoYW4gS2luZ3N0b24KLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1t
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsK
LQotICAgIHZhciBzZW1pY29sb25XaGl0ZXNwYWNlID0gL1xzOyQvOwotCi0gICAgcmV0dXJuIHsK
LSAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAg
ICAgICB2YXIgc291cmNlID0gY29udGV4dC5nZXRTb3VyY2Uobm9kZSk7Ci0gICAgICAgICAgICBp
ZiAoc2VtaWNvbG9uV2hpdGVzcGFjZS50ZXN0KHNvdXJjZSkpIHsKLSAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiVmFyaWFibGUgZGVjbGFyZWQgd2l0aCB0cmFpbGluZyB3aGl0
ZXNwYWNlIGJlZm9yZSBzZW1pY29sb24iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAg
ICAgICAgIkV4cHJlc3Npb25TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAg
ICB2YXIgc291cmNlID0gY29udGV4dC5nZXRTb3VyY2Uobm9kZSk7Ci0gICAgICAgICAgICBpZiAo
c2VtaWNvbG9uV2hpdGVzcGFjZS50ZXN0KHNvdXJjZSkpIHsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiRXhwcmVzc2lvbiBjYWxsZWQgd2l0aCB0cmFpbGluZyB3aGl0ZXNw
YWNlIGJlZm9yZSBzZW1pY29sb24iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07
Ci19OwotCi19LHt9XSwxMTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoq
Ci0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gY2hlY2sgdGhhdCBzcGFjZWQgZnVuY3Rpb24gYXBw
bGljYXRpb24KLSAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5j
b20+Ci0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250
ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICBmdW5jdGlvbiBkZXRlY3RPcGVuU3Bh
Y2VzKG5vZGUpIHsKLSAgICAgICAgdmFyIGxhc3RDYWxsZWVUb2tlbiA9IGNvbnRleHQuZ2V0TGFz
dFRva2VuKG5vZGUuY2FsbGVlKTsKLSAgICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0VG9r
ZW5zKG5vZGUpOwotICAgICAgICB2YXIgaSA9IHRva2Vucy5pbmRleE9mKGxhc3RDYWxsZWVUb2tl
biksIGwgPSB0b2tlbnMubGVuZ3RoOwotICAgICAgICB3aGlsZSAoaSA8IGwgJiYgdG9rZW5zW2ld
LnZhbHVlICE9PSAiKCIpIHsKLSAgICAgICAgICAgICsraTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoaSA+PSBsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
bG9vayBmb3IgYSBzcGFjZSBiZXR3ZWVuIHRoZSBjYWxsZWUgYW5kIHRoZSBvcGVuIHBhcmVuCi0g
ICAgICAgIGlmICh0b2tlbnNbaSAtIDFdLnJhbmdlWzFdICE9PSB0b2tlbnNbaV0ucmFuZ2VbMF0p
IHsKLSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHNwYWNlIGJl
dHdlZW4gZnVuY3Rpb24gbmFtZSBhbmQgcGFyZW4uIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gewotICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBkZXRlY3RPcGVuU3BhY2VzLAot
ICAgICAgICAiTmV3RXhwcmVzc2lvbiI6IGRldGVjdE9wZW5TcGFjZXMKLSAgICB9OwotCi19Owot
Ci19LHt9XSwxMTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBA
ZmlsZW92ZXJ2aWV3IERpc2FsbG93IHNwYXJzZSBhcnJheXMKLSAqIEBhdXRob3IgTmljaG9sYXMg
Qy4gWmFrYXMKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgIC8vIFB1YmxpYwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0K
LSAgICAgICAgIkFycmF5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAg
ICAgdmFyIGVtcHR5U3BvdCA9IG5vZGUuZWxlbWVudHMuaW5kZXhPZihudWxsKSA+IC0xOwotCi0g
ICAgICAgICAgICBpZiAoZW1wdHlTcG90KSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIlVuZXhwZWN0ZWQgY29tbWEgaW4gbWlkZGxlIG9mIGFycmF5LiIpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9OwotCi19OwotCi19LHt9XSwxMTI6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
Y2hlY2sgZm9yIHByb3BlcnRpZXMgd2hvc2UgaWRlbnRpZmllciBlbmRzIHdpdGggdGhlIHN0cmlu
ZyBTeW5jCi0gKiBAYXV0aG9yIE1hdHQgRHVWYWxsPGh0dHA6Ly9tYXR0ZHV2YWxsLmNvbS8+Ci0g
Ki8KLQotLypqc2hpbnQgbm9kZTp0cnVlKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
IFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1
cm4gewotCi0gICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAg
ICAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IG5vZGUucHJvcGVydHkubmFtZSwKLSAgICAgICAg
ICAgICAgICBzeW5jUmVnZXggPSAvLipTeW5jJC87Ci0KLSAgICAgICAgICAgIGlmIChzeW5jUmVn
ZXguZXhlYyhwcm9wZXJ0eU5hbWUpICE9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgc3luYyBtZXRob2Q6ICciICsgcHJvcGVydHlOYW1l
ICsgIicuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9
XSwxMTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92
ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgdGVybmFyeSBvcGVyYXRvcnMuCi0gKiBAYXV0aG9y
IElhbiBDaHJpc3RpYW4gTXllcnMKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8g
UnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVy
biB7Ci0KLSAgICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsK
LSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUZXJuYXJ5IG9wZXJhdG9yIHVzZWQu
Iik7Ci0gICAgICAgIH0KLQotICAgIH07Ci0KLX07Ci0KLX0se31dLDExNDpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgdHJh
aWxpbmcgc3BhY2VzIGF0IHRoZSBlbmQgb2YgbGluZXMuCi0gKiBAYXV0aG9yIE5vZGVjYSBUZWFt
IDxodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhPgotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgdmFy
IFRSQUlMRVIgPSAiWyBcdFx1MDBhMFx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1MjAwNFx1MjAw
NVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwYVx1MjAwYlx1MjAyOFx1MjAyOVx1MzAwMF0r
JCI7Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljCi0gICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiUHJvZ3JhbSI6IGZ1bmN0
aW9uIGNoZWNrVHJhaWxpbmdTcGFjZXMobm9kZSkgewotCi0gICAgICAgICAgICAvLyBMZXQncyBo
YWNrLiBTaW5jZSBFc3ByaW1hIGRvZXMgbm90IHJldHVybiB3aGl0ZXNwYWNlIG5vZGVzLAotICAg
ICAgICAgICAgLy8gZmV0Y2ggdGhlIHNvdXJjZSBjb2RlIGFuZCBkbyBibGFjayBtYWdpYyB2aWEg
cmVnZXhwcy4KLQotICAgICAgICAgICAgdmFyIHNyYyA9IGNvbnRleHQuZ2V0U291cmNlKCksCi0g
ICAgICAgICAgICAgICAgcmUgPSBuZXcgUmVnRXhwKFRSQUlMRVIsICJtZyIpLAotICAgICAgICAg
ICAgICAgIG1hdGNoLCBsaW5lcywgbG9jYXRpb247Ci0KLSAgICAgICAgICAgIHdoaWxlICgobWF0
Y2ggPSByZS5leGVjKHNyYykpICE9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbGluZXMgPSBz
cmMuc2xpY2UoMCwgcmUubGFzdEluZGV4KS5zcGxpdCgvXHI/XG4vZyk7Ci0KLSAgICAgICAgICAg
ICAgICBsb2NhdGlvbiA9IHsKLSAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZXMubGVuZ3Ro
LAotICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxl
bmd0aCAtIG1hdGNoWzBdLmxlbmd0aCArIDEKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAg
ICAgICAgICAgLy8gUGFzc2luZyBub2RlIGlzIGEgYml0IGRpcnR5LCBiZWNhdXNlIG1lc3NhZ2Ug
ZGF0YSB3aWxsIGNvbnRhaW4KLSAgICAgICAgICAgICAgICAvLyBiaWcgdGV4dCBpbiBgc291cmNl
YC4gQnV0Li4uIHdobyBjYXJlcyA6KSA/Ci0gICAgICAgICAgICAgICAgLy8gT25lIG1vcmUga2x1
ZGdlIHdpbGwgbm90IG1ha2Ugd29yc2UgdGhlIGJsb29keSB3aXphcmRyeSBvZiB0aGlzIHBsdWdp
bi4KLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBsb2NhdGlvbiwgIlRyYWls
aW5nIHNwYWNlcyBub3QgYWxsb3dlZC4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgfTsKLX07Ci0KLX0se31dLDExNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gaW5pdGlhbGl6aW5nIHRv
IHVuZGVmaW5lZAotICogQGF1dGhvciBJbHlhIFZvbG9kaW4KLSAqLwotCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0
IjsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRvciI6IGZ1bmN0
aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZhciBuYW1lID0gbm9kZS5pZC5uYW1lOwotICAgICAg
ICAgICAgdmFyIGluaXQgPSBub2RlLmluaXQgJiYgbm9kZS5pbml0Lm5hbWU7Ci0KLSAgICAgICAg
ICAgIGlmIChpbml0ID09PSAidW5kZWZpbmVkIikgewotICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJJdCdzIG5vdCBuZWNlc3NhcnkgdG8gaW5pdGlhbGl6ZSAne3tuYW1lfX0n
IHRvIHVuZGVmaW5lZC4iLCB7IG5hbWU6IG5hbWUgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9OwotCi19OwotCi19LHt9XSwxMTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyByZWZlcmVuY2VzIHRv
IHVuZGVjbGFyZWQgdmFyaWFibGVzLgotICogQGF1dGhvciBNYXJrIE1hY2RvbmFsZAotICovCi0i
dXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIZWxwZXJzCi0vLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1mdW5jdGlvbiBpc0ltcGxpY2l0R2xvYmFsKHZhcmlhYmxl
KSB7Ci0gICAgcmV0dXJuIHZhcmlhYmxlLmRlZnMuZXZlcnkoZnVuY3Rpb24oZGVmKSB7Ci0gICAg
ICAgIHJldHVybiBkZWYudHlwZSA9PT0gIkltcGxpY2l0R2xvYmFsVmFyaWFibGUiOwotICAgIH0p
OwotfQotCi0vKioKLSAqIEdldHMgdGhlIGRlY2xhcmVkIHZhcmlhYmxlLCBkZWZpbmVkIGluIGBz
Y29wZWAsIHRoYXQgYHJlZmAgcmVmZXJzIHRvLgotICogQHBhcmFtIHtTY29wZX0gc2NvcGUgVGhl
IHNjb3BlIGluIHdoaWNoIHRvIHNlYXJjaC4KLSAqIEBwYXJhbSB7UmVmZXJlbmNlfSByZWYgVGhl
IHJlZmVyZW5jZSB0byBmaW5kIGluIHRoZSBzY29wZS4KLSAqIEByZXR1cm5zIHtWYXJpYWJsZX0g
VGhlIHZhcmlhYmxlLCBvciBudWxsIGlmIHJlZiByZWZlcnMgdG8gYW4gdW5kZWNsYXJlZCB2YXJp
YWJsZS4KLSAqLwotZnVuY3Rpb24gZ2V0RGVjbGFyZWRHbG9iYWxWYXJpYWJsZShzY29wZSwgcmVm
KSB7Ci0gICAgdmFyIGRlY2xhcmVkR2xvYmFsID0gbnVsbDsKLSAgICBzY29wZS52YXJpYWJsZXMu
c29tZShmdW5jdGlvbih2YXJpYWJsZSkgewotICAgICAgICBpZiAodmFyaWFibGUubmFtZSA9PT0g
cmVmLmlkZW50aWZpZXIubmFtZSkgewotICAgICAgICAgICAgLy8gSWYgaXQncyBhbiBpbXBsaWNp
dCBnbG9iYWwsIGl0IG11c3QgaGF2ZSBhIGB3cml0ZWFibGVgIGZpZWxkIChpbmRpY2F0aW5nIGl0
IHdhcyBkZWNsYXJlZCkKLSAgICAgICAgICAgIGlmICghaXNJbXBsaWNpdEdsb2JhbCh2YXJpYWJs
ZSkgfHwge30uaGFzT3duUHJvcGVydHkuY2FsbCh2YXJpYWJsZSwgIndyaXRlYWJsZSIpKSB7Ci0g
ICAgICAgICAgICAgICAgZGVjbGFyZWRHbG9iYWwgPSB2YXJpYWJsZTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIGRlY2xhcmVkR2xvYmFsOwotfQotCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHJldHVy
biB7Ci0KLSAgICAgICAgIlByb2dyYW0iOiBmdW5jdGlvbigvKm5vZGUqLykgewotCi0gICAgICAg
ICAgICB2YXIgZ2xvYmFsU2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCk7Ci0KLSAgICAgICAgICAg
IGdsb2JhbFNjb3BlLnRocm91Z2guZm9yRWFjaChmdW5jdGlvbihyZWYpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgdmFyaWFibGUgPSBnZXREZWNsYXJlZEdsb2JhbFZhcmlhYmxlKGdsb2JhbFNjb3Bl
LCByZWYpLAotICAgICAgICAgICAgICAgICAgICBuYW1lID0gcmVmLmlkZW50aWZpZXIubmFtZTsK
LSAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KHJlZi5pZGVudGlmaWVyLCAiJ3t7bmFtZX19JyBpcyBub3QgZGVmaW5lZC4i
LCB7IG5hbWU6IG5hbWUgfSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWYuaXNXcml0
ZSgpICYmIHZhcmlhYmxlLndyaXRlYWJsZSA9PT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQocmVmLmlkZW50aWZpZXIsICIne3tuYW1lfX0nIGlzIHJlYWQgb25s
eS4iLCB7IG5hbWU6IG5hbWUgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSwxMTc6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyByZWZl
cmVuY2VzIHRvIHRoZSB1bmRlZmluZWQgdmFyaWFibGUuCi0gKiBAYXV0aG9yIE1pY2hhZWwgRmlj
YXJyYQotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBS
dWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiSWRlbnRp
ZmllciI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLm5hbWUgPT09ICJ1
bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0QW5j
ZXN0b3JzKCkucG9wKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQgfHwgcGFyZW50LnR5
cGUgIT09ICJNZW1iZXJFeHByZXNzaW9uIiB8fCBub2RlICE9PSBwYXJlbnQucHJvcGVydHkgfHwg
cGFyZW50LmNvbXB1dGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJVbmV4cGVjdGVkIHVzZSBvZiB1bmRlZmluZWQuIik7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sMTE4OltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxl
IHRvIGZsYWcgdHJhaWxpbmcgdW5kZXJzY29yZXMgaW4gdmFyaWFibGUgZGVjbGFyYXRpb25zLgot
ICogQGF1dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbT4KLSAqLwot
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQot
ICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEhlbHBl
cnMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIGZ1bmN0aW9uIGhhc1RyYWlsaW5nVW5k
ZXJzY29yZShpZGVudGlmaWVyKSB7Ci0gICAgICAgIHZhciBsZW4gPSBpZGVudGlmaWVyLmxlbmd0
aDsKLQotICAgICAgICByZXR1cm4gaWRlbnRpZmllciAhPT0gIl8iICYmIChpZGVudGlmaWVyWzBd
ID09PSAiXyIgfHwgaWRlbnRpZmllcltsZW4gLSAxXSA9PT0gIl8iKTsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiBpc1NwZWNpYWxDYXNlSWRlbnRpZmllckZvck1lbWJlckV4cHJlc3Npb24oaWRlbnRp
ZmllcikgewotICAgICAgICByZXR1cm4gaWRlbnRpZmllciA9PT0gIl9fcHJvdG9fXyI7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gaXNTcGVjaWFsQ2FzZUlkZW50aWZpZXJJblZhcmlhYmxlRXhwcmVz
c2lvbihpZGVudGlmaWVyKSB7Ci0gICAgICAgIC8vIENoZWNrcyBmb3IgdGhlIHVuZGVyc2NvcmUg
bGlicmFyeSB1c2FnZSBoZXJlCi0gICAgICAgIHJldHVybiBpZGVudGlmaWVyID09PSAiXyI7Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gY2hlY2tGb3JUcmFpbGluZ1VuZGVyc2NvcmVJbkZ1bmN0aW9u
RGVjbGFyYXRpb24obm9kZSkgewotICAgICAgICB2YXIgaWRlbnRpZmllciA9IG5vZGUuaWQubmFt
ZTsKLQotICAgICAgICBpZiAodHlwZW9mIGlkZW50aWZpZXIgIT09ICJ1bmRlZmluZWQiICYmIGhh
c1RyYWlsaW5nVW5kZXJzY29yZShpZGVudGlmaWVyKSkgewotICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgZGFuZ2xpbmcgJ18nIGluICciICsgaWRlbnRpZmllciAr
ICInLiIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gY2hlY2tGb3JUcmFpbGlu
Z1VuZGVyc2NvcmVJblZhcmlhYmxlRXhwcmVzc2lvbihub2RlKSB7Ci0gICAgICAgIHZhciBpZGVu
dGlmaWVyID0gbm9kZS5pZC5uYW1lOwotCi0gICAgICAgIGlmICh0eXBlb2YgaWRlbnRpZmllciAh
PT0gInVuZGVmaW5lZCIgJiYgaGFzVHJhaWxpbmdVbmRlcnNjb3JlKGlkZW50aWZpZXIpICYmCi0g
ICAgICAgICAgICAhaXNTcGVjaWFsQ2FzZUlkZW50aWZpZXJJblZhcmlhYmxlRXhwcmVzc2lvbihp
ZGVudGlmaWVyKSkgewotICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0
ZWQgZGFuZ2xpbmcgJ18nIGluICciICsgaWRlbnRpZmllciArICInLiIpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gY2hlY2tGb3JUcmFpbGluZ1VuZGVyc2NvcmVJbk1lbWJlckV4
cHJlc3Npb24obm9kZSkgewotICAgICAgICB2YXIgaWRlbnRpZmllciA9IG5vZGUucHJvcGVydHku
bmFtZTsKLQotICAgICAgICBpZiAodHlwZW9mIGlkZW50aWZpZXIgIT09ICJ1bmRlZmluZWQiICYm
IGhhc1RyYWlsaW5nVW5kZXJzY29yZShpZGVudGlmaWVyKSAmJgotICAgICAgICAgICAgIWlzU3Bl
Y2lhbENhc2VJZGVudGlmaWVyRm9yTWVtYmVyRXhwcmVzc2lvbihpZGVudGlmaWVyKSkgewotICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgZGFuZ2xpbmcgJ18nIGlu
ICciICsgaWRlbnRpZmllciArICInLiIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYyBBUEkKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSAgICByZXR1cm4gewotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGNoZWNrRm9y
VHJhaWxpbmdVbmRlcnNjb3JlSW5GdW5jdGlvbkRlY2xhcmF0aW9uLAotICAgICAgICAiVmFyaWFi
bGVEZWNsYXJhdG9yIjogY2hlY2tGb3JUcmFpbGluZ1VuZGVyc2NvcmVJblZhcmlhYmxlRXhwcmVz
c2lvbiwKLSAgICAgICAgIk1lbWJlckV4cHJlc3Npb24iOiBjaGVja0ZvclRyYWlsaW5nVW5kZXJz
Y29yZUluTWVtYmVyRXhwcmVzc2lvbgotICAgIH07Ci0KLX07Ci0KLX0se31dLDExOTpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgQ2hlY2tz
IGZvciB1bnJlYWNoYWJsZSBjb2RlIGR1ZSB0byByZXR1cm4sIHRocm93cywgYnJlYWssIGFuZCBj
b250aW51ZS4KLSAqIEBhdXRob3IgSm9lbCBGZWVuc3RyYQotICovCi0idXNlIHN0cmljdCI7Ci0K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIZWxwZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0KLWZ1bmN0aW9uIHJlcG9ydChjb250ZXh0LCBub2RlLCB1bnJlYWNoYWJsZVR5cGUp
IHsKLSAgICB2YXIga2V5d29yZDsKLSAgICBzd2l0Y2ggKHVucmVhY2hhYmxlVHlwZSkgewotICAg
ICAgICBjYXNlICJCcmVha1N0YXRlbWVudCI6Ci0gICAgICAgICAgICBrZXl3b3JkID0gImJyZWFr
IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICJDb250aW51ZVN0YXRlbWVudCI6
Ci0gICAgICAgICAgICBrZXl3b3JkID0gImNvbnRpbnVlIjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlICJSZXR1cm5TdGF0ZW1lbnQiOgotICAgICAgICAgICAga2V5d29yZCA9ICJy
ZXR1cm4iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgIlRocm93U3RhdGVtZW50
IjoKLSAgICAgICAgICAgIGtleXdvcmQgPSAidGhyb3ciOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJGb3VuZCB1bmV4cGVjdGVkIHN0YXRlbWVudCBhZnRlciBhIHt7dHlwZX19
LiIsIHsgdHlwZToga2V5d29yZCB9KTsKLX0KLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIC8qKgotICAgICAqIENoZWNrcyBpZiBh
IG5vZGUgaXMgYW4gZXhjZXB0aW9uIGZvciBuby11bnJlYWNoYWJsZSBiZWNhdXNlIG9mIHZhcmlh
YmxlL2Z1bmN0aW9uIGhvaXN0aW5nCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBB
U1Qgbm9kZSB0byBjaGVjay4KLSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYgdGhlIG5vZGUg
ZG9lc24ndCB0cmlnZ2VyIHVucmVhY2hhYmxlCi0gICAgICogQHByaXZhdGUKLSAgICAgKi8KLSAg
ICBmdW5jdGlvbiBpc1VucmVhY2hhYmxlQWxsb3dlZChub2RlKSB7Ci0gICAgICAgIHJldHVybiBu
b2RlLnR5cGUgPT09ICJGdW5jdGlvbkRlY2xhcmF0aW9uIiB8fAotICAgICAgICAgICAgbm9kZS50
eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdGlvbiIgJiYKLSAgICAgICAgICAgIG5vZGUuZGVjbGFy
YXRpb25zLmV2ZXJ5KGZ1bmN0aW9uKGRlY2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGRlY2xhcmF0aW9uLnR5cGUgPT09ICJWYXJpYWJsZURlY2xhcmF0b3IiICYmIGRlY2xhcmF0
aW9uLmluaXQgPT09IG51bGw7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICAvKgotICAg
ICAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIG5vZGUgaXMgdGhlIGxhc3Qgbm9kZSBvciBmb2xs
b3dlZCBleGNsdXNpdmVseSBieQotICAgICAqIGhvaXN0ZWQgZGVjbGFyYXRpb25zCi0gICAgICog
QHBhcmFtIHtBU1ROb2RlfSBub2RlIE5vZGUgdGhhdCBzaG91bGQgYmUgdGhlIGxhc3Qgbm9kZQot
ICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgZnVu
Y3Rpb24gY2hlY2tOb2RlKG5vZGUpIHsKLSAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0
QW5jZXN0b3JzKCkucG9wKCk7Ci0gICAgICAgIHZhciBmaWVsZCwgaSwgc2libGluZzsKLQotICAg
ICAgICBzd2l0Y2ggKHBhcmVudC50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlICJTd2l0Y2hDYXNl
IjoKLSAgICAgICAgICAgICAgICBmaWVsZCA9ICJjb25zZXF1ZW50IjsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIlByb2dyYW0iOgotICAgICAgICAgICAgY2FzZSAi
QmxvY2tTdGF0ZW1lbnQiOgotICAgICAgICAgICAgICAgIGZpZWxkID0gImJvZHkiOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGkgPSBwYXJlbnRbZmllbGRdLmxlbmd0
aCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBzaWJsaW5nID0gcGFyZW50W2ZpZWxk
XVtpXTsKLSAgICAgICAgICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOyAvLyBGb3VuZCB0aGUgbGFzdCByZWFjaGFibGUgc3RhdGVtZW50LCBhbGwgZG9u
ZQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWlzVW5yZWFjaGFibGVBbGxvd2Vk
KHNpYmxpbmcpKSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0KGNvbnRleHQsIHNpYmxpbmcsIG5v
ZGUudHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
ewotICAgICAgICAiUmV0dXJuU3RhdGVtZW50IjogY2hlY2tOb2RlLAotICAgICAgICAiVGhyb3dT
dGF0ZW1lbnQiOiBjaGVja05vZGUsCi0gICAgICAgICJDb250aW51ZVN0YXRlbWVudCI6IGNoZWNr
Tm9kZSwKLSAgICAgICAgIkJyZWFrU3RhdGVtZW50IjogY2hlY2tOb2RlCi0gICAgfTsKLQotfTsK
LQotfSx7fV0sMTIwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICog
QGZpbGVvdmVydmlldyBGbGFnIGV4cHJlc3Npb25zIGluIHN0YXRlbWVudCBwb3NpdGlvbiB0aGF0
IGRvIG5vdCBzaWRlIGVmZmVjdAotICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEKLSAqLwotInVz
ZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9u
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIGFueSBu
b2RlCi0gICAgICogQHJldHVybnMge0Jvb2xlYW59IHdoZXRoZXIgdGhlIGdpdmVuIG5vZGUgc3Ry
dWN0dXJhbGx5IHJlcHJlc2VudHMgYSBkaXJlY3RpdmUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBs
b29rc0xpa2VEaXJlY3RpdmUobm9kZSkgewotICAgICAgIHJldHVybiBub2RlLnR5cGUgPT09ICJF
eHByZXNzaW9uU3RhdGVtZW50IiAmJgotICAgICAgICAgICBub2RlLmV4cHJlc3Npb24udHlwZSA9
PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBub2RlLmV4cHJlc3Npb24udmFsdWUgPT09ICJzdHJpbmci
OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSAt
IChbYV0gLT4gQm9vbGVhbikgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gbWFrZSB0aGUgZGV0ZXJtaW5h
dGlvbgotICAgICAqIEBwYXJhbSB7YVtdfSBsaXN0IC0gdGhlIGlucHV0IGxpc3QKLSAgICAgKiBA
cmV0dXJucyB7YVtdfSB0aGUgbGVhZGluZyBzZXF1ZW5jZSBvZiBtZW1iZXJzIGluIHRoZSBnaXZl
biBsaXN0IHRoYXQgcGFzcyB0aGUgZ2l2ZW4gcHJlZGljYXRlCi0gICAgICovCi0gICAgZnVuY3Rp
b24gdGFrZVdoaWxlKHByZWRpY2F0ZSwgbGlzdCkgewotICAgICAgICBmb3IgKHZhciBpID0gMCwg
bCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIXByZWRpY2F0
ZShsaXN0W2ldKSkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBbXS5zbGljZS5jYWxsKGxpc3QsIDAsIGkpOwotICAgIH0K
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIGEgUHJvZ3JhbSBvciBC
bG9ja1N0YXRlbWVudCBub2RlCi0gICAgICogQHJldHVybnMge0FTVE5vZGVbXX0gdGhlIGxlYWRp
bmcgc2VxdWVuY2Ugb2YgZGlyZWN0aXZlIG5vZGVzIGluIHRoZSBnaXZlbiBub2RlJ3MgYm9keQot
ICAgICAqLwotICAgIGZ1bmN0aW9uIGRpcmVjdGl2ZXMobm9kZSkgewotICAgICAgICByZXR1cm4g
dGFrZVdoaWxlKGxvb2tzTGlrZURpcmVjdGl2ZSwgbm9kZS5ib2R5KTsKLSAgICB9Ci0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBhbnkgbm9kZQotICAgICAqIEBwYXJh
bSB7QVNUTm9kZVtdfSBhbmNlc3RvcnMgLSB0aGUgZ2l2ZW4gbm9kZSdzIGFuY2VzdG9ycwotICAg
ICAqIEByZXR1cm5zIHtCb29sZWFufSB3aGV0aGVyIHRoZSBnaXZlbiBub2RlIGlzIGNvbnNpZGVy
ZWQgYSBkaXJlY3RpdmUgaW4gaXRzIGN1cnJlbnQgcG9zaXRpb24KLSAgICAgKi8KLSAgICBmdW5j
dGlvbiBpc0RpcmVjdGl2ZShub2RlLCBhbmNlc3RvcnMpIHsKLSAgICAgICAgdmFyIHBhcmVudCA9
IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMV0sCi0gICAgICAgICAgICBncmFuZHBhcmVu
dCA9IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMl07Ci0gICAgICAgIHJldHVybiAocGFy
ZW50LnR5cGUgPT09ICJQcm9ncmFtIiB8fCBwYXJlbnQudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50
IiAmJiAoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIgfHwgZ3JhbmRw
YXJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRGVjbGFyYXRpb24iKSkgJiYKLSAgICAgICAgICAgIGRp
cmVjdGl2ZXMocGFyZW50KS5pbmRleE9mKG5vZGUpID49IDA7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHsKLSAgICAgICAgIkV4cHJlc3Npb25TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAg
ICAgICAgICAgIHZhciB0eXBlID0gbm9kZS5leHByZXNzaW9uLnR5cGUsCi0gICAgICAgICAgICAg
ICAgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKTsKLQotICAgICAgICAgICAgaWYg
KAotICAgICAgICAgICAgICAgICEvXig/OkFzc2lnbm1lbnR8Q2FsbHxOZXd8VXBkYXRlKUV4cHJl
c3Npb24kLy50ZXN0KHR5cGUpICYmCi0gICAgICAgICAgICAgICAgKHR5cGUgIT09ICJVbmFyeUV4
cHJlc3Npb24iIHx8IFsiZGVsZXRlIiwgInZvaWQiXS5pbmRleE9mKG5vZGUuZXhwcmVzc2lvbi5v
cGVyYXRvcikgPCAwKSAmJgotICAgICAgICAgICAgICAgICFpc0RpcmVjdGl2ZShub2RlLCBhbmNl
c3RvcnMpCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiRXhwZWN0ZWQgYW4gYXNzaWdubWVudCBvciBmdW5jdGlvbiBjYWxsIGFuZCBpbnN0ZWFk
IHNhdyBhbiBleHByZXNzaW9uLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsK
LQotfTsKLQotfSx7fV0sMTIxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8q
KgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgZGVjbGFyZWQgYnV0IHVudXNlZCB2YXJp
YWJsZXMKLSAqIEBhdXRob3IgSWx5YSBWb2xvZGluCi0gKi8KLQotInVzZSBzdHJpY3QiOwotCi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAg
IHZhciBjb25maWcgPSB7Ci0gICAgICAgIHZhcnM6ICJhbGwiLAotICAgICAgICBhcmdzOiAiYWZ0
ZXItdXNlZCIKLSAgICB9OwotCi0gICAgaWYgKGNvbnRleHQub3B0aW9uc1swXSkgewotICAgICAg
ICBpZiAodHlwZW9mKGNvbnRleHQub3B0aW9uc1swXSkgPT09ICJzdHJpbmciKSB7Ci0gICAgICAg
ICAgICBjb25maWcudmFycyA9IGNvbnRleHQub3B0aW9uc1swXTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGNvbmZpZy52YXJzID0gY29udGV4dC5vcHRpb25zWzBdLnZhcnMgfHwgY29u
ZmlnLnZhcnM7Ci0gICAgICAgICAgICBjb25maWcuYXJncyA9IGNvbnRleHQub3B0aW9uc1swXS5h
cmdzIHx8IGNvbmZpZy5hcmdzOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmFyIE1FU1NBR0Ug
PSAie3tuYW1lfX0gaXMgZGVmaW5lZCBidXQgbmV2ZXIgdXNlZCI7Ci0KLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge1JlZmVyZW5jZX0gcmVmIC0gYW4gZXNjb3BlIFJlZmVyZW5jZQotICAgICAqIEBy
ZXR1cm5zIHtCb29sZWFufSB3aGV0aGVyIHRoZSBnaXZlbiByZWZlcmVuY2UgcmVwcmVzZW50cyBh
IHJlYWQgb3BlcmF0aW9uCi0gICAgICovCi0gICAgZnVuY3Rpb24gaXNSZWFkUmVmKHJlZikgewot
ICAgICAgICByZXR1cm4gcmVmLmlzUmVhZCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7U2NvcGV9IHNjb3BlIC0gYW4gZXNjb3BlIFNjb3BlIG9iamVjdAotICAgICAqIEByZXR1
cm5zIHtWYXJpYWJsZVtdfSBtb3N0IG9mIHRoZSBsb2NhbCB2YXJpYWJsZXMgd2l0aCBubyByZWFk
IHJlZmVyZW5jZXMKLSAgICAgKi8KLSAgICBmdW5jdGlvbiB1bnVzZWRMb2NhbHMoc2NvcGUpIHsK
LSAgICAgICAgdmFyIHVudXNlZCA9IFtdOwotICAgICAgICB2YXIgdmFyaWFibGVzID0gc2NvcGUu
dmFyaWFibGVzOwotICAgICAgICBpZiAoc2NvcGUudHlwZSAhPT0gImdsb2JhbCIpIHsKLSAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdmFyaWFibGVzLmxlbmd0aDsgaSA8IGw7ICsraSkg
ewotICAgICAgICAgICAgICAgIC8vIHNraXAgZnVuY3Rpb24gZXhwcmVzc2lvbiBuYW1lcwotICAg
ICAgICAgICAgICAgIGlmIChzY29wZS5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSkgewotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgLy8gc2tpcCBpbXBsaWNpdCAiYXJndW1lbnRzIiB2YXJpYWJsZQotICAgICAgICAgICAgICAg
IGlmIChzY29wZS50eXBlID09PSAiZnVuY3Rpb24iICYmIHZhcmlhYmxlc1tpXS5uYW1lID09PSAi
YXJndW1lbnRzIiAmJiB2YXJpYWJsZXNbaV0uaWRlbnRpZmllcnMubGVuZ3RoID09PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB2YXIgdHlwZSA9IHZhcmlhYmxlc1tpXS5kZWZzWzBdLnR5cGU7Ci0gICAgICAgICAg
ICAgICAgLy8gc2tpcCBjYXRjaCB2YXJpYWJsZXMKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9
PT0gIkNhdGNoQ2xhdXNlIikgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gaWYgImFyZ3MiIG9wdGlvbiBpcyAibm9u
ZSIsIHNraXAgYW55IHBhcmFtZXRlcgotICAgICAgICAgICAgICAgIGlmIChjb25maWcuYXJncyA9
PT0gIm5vbmUiICYmIHR5cGUgPT09ICJQYXJhbWV0ZXIiKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBpZiAiYXJn
cyIgb3B0aW9uIGlzICJhZnRlci11c2VkIiwgc2tpcCBhbGwgYnV0IHRoZSBsYXN0IHBhcmFtZXRl
cgotICAgICAgICAgICAgICAgIGlmIChjb25maWcuYXJncyA9PT0gImFmdGVyLXVzZWQiICYmIHR5
cGUgPT09ICJQYXJhbWV0ZXIiICYmIHZhcmlhYmxlc1tpXS5kZWZzWzBdLmluZGV4IDwgdmFyaWFi
bGVzW2ldLmRlZnNbMF0ubm9kZS5wYXJhbXMubGVuZ3RoIC0gMSkgewotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHZh
cmlhYmxlc1tpXS5yZWZlcmVuY2VzLmZpbHRlcihpc1JlYWRSZWYpLmxlbmd0aCA9PT0gMCkgewot
ICAgICAgICAgICAgICAgICAgICB1bnVzZWQucHVzaCh2YXJpYWJsZXNbaV0pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gW10uY29u
Y2F0LmFwcGx5KHVudXNlZCwgW10ubWFwLmNhbGwoc2NvcGUuY2hpbGRTY29wZXMsIHVudXNlZExv
Y2FscykpOwotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJQcm9ncmFtIjogZnVuY3Rp
b24ocHJvZ3JhbU5vZGUpIHsKLSAgICAgICAgICAgIHZhciBnbG9iYWxTY29wZSA9IGNvbnRleHQu
Z2V0U2NvcGUoKTsKLSAgICAgICAgICAgIHZhciB1bnVzZWQgPSB1bnVzZWRMb2NhbHMoZ2xvYmFs
U2NvcGUpOwotICAgICAgICAgICAgdmFyIGksIGw7Ci0KLSAgICAgICAgICAgIC8vIGRldGVybWlu
ZSB1bnVzZWQgZ2xvYmFscwotICAgICAgICAgICAgaWYgKGNvbmZpZy52YXJzID09PSAiYWxsIikg
ewotICAgICAgICAgICAgICAgIHZhciB1bnJlc29sdmVkUmVmcyA9IGdsb2JhbFNjb3BlLnRocm91
Z2guZmlsdGVyKGlzUmVhZFJlZikubWFwKGZ1bmN0aW9uKHJlZikgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVmLmlkZW50aWZpZXIubmFtZTsKLSAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gZ2xvYmFsU2NvcGUudmFyaWFibGVzLmxlbmd0
aDsgaSA8IGw7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodW5yZXNvbHZlZFJlZnMu
aW5kZXhPZihnbG9iYWxTY29wZS52YXJpYWJsZXNbaV0ubmFtZSkgPCAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB1bnVzZWQucHVzaChnbG9iYWxTY29wZS52YXJpYWJsZXNbaV0pOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdW51c2VkLmxlbmd0aDsgaSA8IGw7ICsraSkgewot
ICAgICAgICAgICAgICAgIGlmICh1bnVzZWRbaV0uZXNsaW50RXhwbGljaXRHbG9iYWwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQocHJvZ3JhbU5vZGUsIE1FU1NBR0UsIHVu
dXNlZFtpXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1bnVzZWRbaV0uZGVmcy5sZW5n
dGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHVudXNlZFtpXS5p
ZGVudGlmaWVyc1swXSwgTUVTU0FHRSwgdW51c2VkW2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSwxMjI6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gZmxhZyB1c2Ugb2YgdmFyaWFibGVzIGJlZm9yZSB0aGV5IGFyZSBkZWZpbmVkCi0gKiBAYXV0
aG9yIElseWEgVm9sb2RpbgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb25z
dGFudHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZhciBOT19GVU5DID0gIm5vZnVuYyI7
Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewot
Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgZnVuY3Rpb24gZmluZERlY2xhcmF0aW9uKG5hbWUs
IHNjb3BlKSB7Ci0gICAgICAgIC8vIHRyeSBzZWFyY2hpbmcgaW4gdGhlIGN1cnJlbnQgc2NvcGUg
Zmlyc3QKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzY29wZS52YXJpYWJsZXMubGVuZ3Ro
OyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoc2NvcGUudmFyaWFibGVzW2ldLm5hbWUg
PT09IG5hbWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGUudmFyaWFibGVzW2ldOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlJ3MgdXBw
ZXIgc2NvcGUgYW5kIGNhbGwgcmVjdXJzaXZseSB0aWxsIHdlIGZpbmQgdGhlIHZhcmlhYmxlCi0g
ICAgICAgIGlmIChzY29wZS51cHBlcikgewotICAgICAgICAgICAgcmV0dXJuIGZpbmREZWNsYXJh
dGlvbihuYW1lLCBzY29wZS51cHBlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBmaW5kVmFyaWFibGVzKCkgewotICAgICAgICB2YXIgc2NvcGUgPSBjb250ZXh0LmdldFNjb3Bl
KCk7Ci0gICAgICAgIHZhciB0eXBlT3B0aW9uID0gY29udGV4dC5vcHRpb25zWzBdOwotCi0gICAg
ICAgIGZ1bmN0aW9uIGNoZWNrTG9jYXRpb25BbmRSZXBvcnQocmVmZXJlbmNlLCBkZWNsYXJhdGlv
bikgewotICAgICAgICAgICAgaWYgKHR5cGVPcHRpb24gIT09IE5PX0ZVTkMgfHwgZGVjbGFyYXRp
b24uZGVmc1swXS50eXBlICE9PSAiRnVuY3Rpb25OYW1lIikgewotICAgICAgICAgICAgICAgIGlm
IChkZWNsYXJhdGlvbi5pZGVudGlmaWVyc1swXS5yYW5nZVsxXSA+IHJlZmVyZW5jZS5pZGVudGlm
aWVyLnJhbmdlWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHJlZmVy
ZW5jZS5pZGVudGlmaWVyLCAie3thfX0gd2FzIHVzZWQgYmVmb3JlIGl0IHdhcyBkZWZpbmVkIiwg
e2E6IHJlZmVyZW5jZS5pZGVudGlmaWVyLm5hbWV9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzY29wZS5yZWZlcmVuY2VzLmZvckVhY2go
ZnVuY3Rpb24ocmVmZXJlbmNlKSB7Ci0gICAgICAgICAgICAvLyBpZiB0aGUgcmVmZXJlbmNlIGlz
IHJlc29sdmVkIGNoZWNrIGZvciBkZWNsYXJhdGlvbiBsb2NhdGlvbgotICAgICAgICAgICAgLy8g
aWYgbm90LCBpdCBjb3VsZCBiZSBmdW5jdGlvbiBpbnZvY2F0aW9uLCB0cnkgdG8gZmluZCBtYW51
YWxseQotICAgICAgICAgICAgaWYgKHJlZmVyZW5jZS5yZXNvbHZlZCAmJiByZWZlcmVuY2UucmVz
b2x2ZWQuaWRlbnRpZmllcnMubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAgIGNoZWNrTG9j
YXRpb25BbmRSZXBvcnQocmVmZXJlbmNlLCByZWZlcmVuY2UucmVzb2x2ZWQpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRpb24gPSBmaW5kRGVjbGFy
YXRpb24ocmVmZXJlbmNlLmlkZW50aWZpZXIubmFtZSwgc2NvcGUpOwotICAgICAgICAgICAgICAg
IC8vIGlmIHRoZXJlJ3JlIG5vIGlkZW50aWZpZXJzLCB0aGlzIGlzIGEgZ2xvYmFsIGVudmlyb25t
ZW50IHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uICYmIGRlY2xhcmF0
aW9uLmlkZW50aWZpZXJzLmxlbmd0aCAhPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBjaGVj
a0xvY2F0aW9uQW5kUmVwb3J0KHJlZmVyZW5jZSwgZGVjbGFyYXRpb24pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsK
LSAgICAgICAgIlByb2dyYW0iOiBmaW5kVmFyaWFibGVzLAotICAgICAgICAiRnVuY3Rpb25FeHBy
ZXNzaW9uIjogZmluZFZhcmlhYmxlcywKLSAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBm
aW5kVmFyaWFibGVzCi0gICAgfTsKLX07Ci0KLX0se31dLDEyMzpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBkaXNhbGxvdyB1
c2Ugb2Ygdm9pZCBvcGVyYXRvci4KLSAqIEBhdXRob3IgTWlrZSBTaWRvcm92Ci0gKiBAY29weXJp
Z2h0IDIwMTQgTWlrZSBTaWRvcm92LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICovCi0idXNlIHN0
cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgewotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYwotICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJVbmFyeUV4cHJlc3Npb24i
OiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvciA9PT0gInZv
aWQiKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkICd1
bmRlZmluZWQnIGFuZCBpbnN0ZWFkIHNhdyAndm9pZCcuIik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSwxMjQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdGhhdCB3YXJucyBhYm91dCB1
c2VkIHdhcm5pbmcgY29tbWVudHMKLSAqIEBhdXRob3IgQWxleGFuZGVyIFNjaG1pZHQgPGh0dHBz
Oi8vZ2l0aHViLmNvbS9seGFuZGVycz4KLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgdmFy
IGNvbmZpZ3VyYXRpb24gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge30sCi0gICAgICAgIHdhcm5p
bmdUZXJtcyA9IGNvbmZpZ3VyYXRpb24udGVybXMgfHwgWyJ0b2RvIiwgImZpeG1lIiwgInh4eCJd
LAotICAgICAgICBsb2NhdGlvbiA9IGNvbmZpZ3VyYXRpb24ubG9jYXRpb24gfHwgInN0YXJ0IjsK
LQotICAgIC8qKgotICAgICAqIFByZXBhcmVzIGEgc3BlY2lmaWVkIGNvbW1lbnQgZm9yIGJlaW5n
IGNoZWNrZWQuCi0gICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1lbnQgVGhlIGNvbW1lbnQgdG8g
cHJlcGFyZS4KLSAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgc3BlY2lmaWVkIGNvbW1lbnQg
cHJlcGFyZWQgZm9yIGJlaW5nIGNoZWNrZWQuCi0gICAgICovCi0gICAgZnVuY3Rpb24gcHJlcGFy
ZUNvbW1lbnRGb3JDaGVja2luZyhjb21tZW50KSB7Ci0gICAgICAgIHZhciBjb21tZW50VG9DaGVj
azsKLQotICAgICAgICBjb21tZW50VG9DaGVjayA9IGNvbW1lbnQudG9Mb3dlckNhc2UoKTsKLSAg
ICAgICAgY29tbWVudFRvQ2hlY2sgPSBjb21tZW50VG9DaGVjay50cmltKCk7Ci0KLSAgICAgICAg
cmV0dXJuIGNvbW1lbnRUb0NoZWNrOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyBp
ZiB0aGUgc3BlY2lmaWVkIGNvbW1lbnQgc3RhcnRzIHdpdGggYSBzcGVjaWZpZWQgdGVybS4KLSAg
ICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWVudFRvQ2hlY2sgVGhlIGNvbW1lbnQgdG8gY2hlY2su
Ci0gICAgICogQHBhcmFtIHtTdHJpbmd9IGxvd2VyQ2FzZVRlcm0gVGhlIHRlcm0gdG8gc2VhcmNo
IGZvci4KLSAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgY29tbWVudCBzdGFy
dGVkIHdpdGggdGhlIHNwZWNpZmllZCB0ZXJtLCBlbHNlIGZhbHNlLgotICAgICAqLwotICAgIGZ1
bmN0aW9uIGNvbW1lbnRTdGFydHNXaXRoVGVybShjb21tZW50VG9DaGVjaywgbG93ZXJDYXNlVGVy
bSkgewotICAgICAgICByZXR1cm4gY29tbWVudFRvQ2hlY2suaW5kZXhPZihsb3dlckNhc2VUZXJt
KSA9PT0gMDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgaWYgdGhlIHNwZWNpZmll
ZCBjb21tZW50IGNvbnRhaW5zIGEgc3BlY2lmaWVkIHRlcm0gYXQgYW55IGxvY2F0aW9uLgotICAg
ICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tZW50VG9DaGVjayBUaGUgY29tbWVudCB0byBjaGVjay4K
LSAgICAgKiBAcGFyYW0ge1N0cmluZ30gbG93ZXJDYXNlVGVybSBUaGUgdGVybSB0byBzZWFyY2gg
Zm9yLgotICAgICAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB0ZXJtIHdhcyBjb250
YWluZWQgaW4gdGhlIGNvbW1lbnQsIGVsc2UgZmFsc2UuCi0gICAgICovCi0gICAgZnVuY3Rpb24g
Y29tbWVudENvbnRhaW5zVGVybShjb21tZW50VG9DaGVjaywgbG93ZXJDYXNlVGVybSkgewotICAg
ICAgICByZXR1cm4gY29tbWVudFRvQ2hlY2suaW5kZXhPZihsb3dlckNhc2VUZXJtKSAhPT0gLTE7
Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgdGhlIHNwZWNpZmllZCBjb21tZW50
IGZvciBtYXRjaGVzIG9mIHRoZSBjb25maWd1cmVkIHdhcm5pbmcgdGVybXMgYW5kIHJldHVybnMg
dGhlIG1hdGNoZXMuCi0gICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1lbnQgVGhlIGNvbW1lbnQg
d2hpY2ggaXMgY2hlY2tlZC4KLSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IEFsbCBtYXRjaGVkIHdh
cm5pbmcgdGVybXMgZm9yIHRoaXMgY29tbWVudC4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBjb21t
ZW50Q29udGFpbnNXYXJuaW5nVGVybShjb21tZW50KSB7Ci0gICAgICAgIHZhciBtYXRjaGVzID0g
W107Ci0KLSAgICAgICAgd2FybmluZ1Rlcm1zLmZvckVhY2goZnVuY3Rpb24gKHRlcm0pIHsKLSAg
ICAgICAgICAgIHZhciBsb3dlckNhc2VUZXJtID0gdGVybS50b0xvd2VyQ2FzZSgpLAotICAgICAg
ICAgICAgICAgIGNvbW1lbnRUb0NoZWNrID0gcHJlcGFyZUNvbW1lbnRGb3JDaGVja2luZyhjb21t
ZW50KTsKLQotICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09PSAic3RhcnQiKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGNvbW1lbnRTdGFydHNXaXRoVGVybShjb21tZW50VG9DaGVjaywgbG93ZXJD
YXNlVGVybSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKHRlcm0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYXRpb24gPT09ICJhbnl3
aGVyZSIpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29tbWVudENvbnRhaW5zVGVybShjb21tZW50
VG9DaGVjaywgbG93ZXJDYXNlVGVybSkpIHsKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5w
dXNoKHRlcm0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgcmV0dXJuIG1hdGNoZXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hl
Y2tzIHRoZSBzcGVjaWZpZWQgbm9kZSBmb3IgbWF0Y2hpbmcgd2FybmluZyBjb21tZW50cyBhbmQg
cmVwb3J0cyB0aGVtLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUg
YmVpbmcgY2hlY2tlZC4KLSAgICAgKiBAcmV0dXJucyB7dm9pZH0gdW5kZWZpbmVkLgotICAgICAq
LwotICAgIGZ1bmN0aW9uIGNoZWNrQ29tbWVudChub2RlKSB7Ci0gICAgICAgIHZhciBtYXRjaGVz
ID0gY29tbWVudENvbnRhaW5zV2FybmluZ1Rlcm0obm9kZS52YWx1ZSk7Ci0KLSAgICAgICAgbWF0
Y2hlcy5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaGVkVGVybSkgewotICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgIiArIG1hdGNoZWRUZXJtICsgIiBjb21tZW50LiIp
OwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gewotICAgICAgICAiQmxvY2tDb21t
ZW50IjogY2hlY2tDb21tZW50LAotICAgICAgICAiTGluZUNvbW1lbnQiOiBjaGVja0NvbW1lbnQK
LSAgICB9OwotfTsKLQotfSx7fV0sMTI1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIHdpdGggc3RhdGVt
ZW50Ci0gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCi0gKi8KLQotCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0
IjsKLQotICAgIHJldHVybiB7Ci0gICAgICAgICJXaXRoU3RhdGVtZW50IjogZnVuY3Rpb24obm9k
ZSkgewotICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgdXNlIG9m
ICd3aXRoJyBzdGF0ZW1lbnQuIik7Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSwx
MjY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gZmxhZyB3cmFwcGluZyBub25lLWlmZmUgaW4gcGFyZW5zCi0gKiBAYXV0aG9y
IElseWEgVm9sb2RpbgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERl
ZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQot
ICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAg
ICAgdmFyIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCksCi0gICAgICAgICAgICAg
ICAgcHJldmlvdXNUb2tlbiwgbmV4dFRva2VuOwotCi0gICAgICAgICAgICBpZiAoIS9DYWxsRXhw
cmVzc2lvbnxOZXdFeHByZXNzaW9uLy50ZXN0KGFuY2VzdG9ycy5wb3AoKS50eXBlKSkgewotICAg
ICAgICAgICAgICAgIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUp
OwotICAgICAgICAgICAgICAgIG5leHRUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5BZnRlcihub2Rl
KTsKLSAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYmIG5l
eHRUb2tlbi52YWx1ZSA9PT0gIikiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KG5vZGUsICJXcmFwcGluZyBub24tSUlGRSBmdW5jdGlvbiBsaXRlcmFscyBpbiBwYXJlbnMg
aXMgdW5uZWNlc3NhcnkuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sMTI3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBBIHJ1bGUgdG8gZW5zdXJlIHRoZSB1
c2Ugb2YgYSBzaW5nbGUgdmFyaWFibGUgZGVjbGFyYXRpb24uCi0gKiBAYXV0aG9yIElhbiBDaHJp
c3RpYW4gTXllcnMKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZp
bml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0
aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgdmFy
IGZ1bmN0aW9uU3RhY2sgPSBbXTsKLQotICAgIGZ1bmN0aW9uIHN0YXJ0RnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGZ1bmN0aW9uU3RhY2sucHVzaChmYWxzZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g
ZW5kRnVuY3Rpb24oKSB7Ci0gICAgICAgIGZ1bmN0aW9uU3RhY2sucG9wKCk7Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gY2hlY2tEZWNsYXJhdGlvbnMobm9kZSkgewotICAgICAgICBpZiAoZnVuY3Rp
b25TdGFja1tmdW5jdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7Ci0gICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCAiQ29tYmluZSB0aGlzIHdpdGggdGhlIHByZXZpb3VzICd2YXInIHN0YXRl
bWVudC4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZ1bmN0aW9uU3RhY2tbZnVu
Y3Rpb25TdGFjay5sZW5ndGggLSAxXSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljIEFQSQotICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJQcm9ncmFtIjogc3RhcnRGdW5jdGlvbiwK
LSAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBzdGFydEZ1bmN0aW9uLAotICAgICAgICAi
RnVuY3Rpb25FeHByZXNzaW9uIjogc3RhcnRGdW5jdGlvbiwKLQotICAgICAgICAiVmFyaWFibGVE
ZWNsYXJhdGlvbiI6IGNoZWNrRGVjbGFyYXRpb25zLAotCi0gICAgICAgICJQcm9ncmFtOmV4aXQi
OiBlbmRGdW5jdGlvbiwKLSAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGVuZEZ1
bmN0aW9uLAotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBlbmRGdW5jdGlvbgot
ICAgIH07Ci0KLX07Ci0KLX0se31dLDEyODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgQSBydWxlIHRvIGVuc3VyZSBibGFuayBsaW5lcyB3
aXRoaW4gYmxvY2tzLgotICogQGF1dGhvciBNYXRoaWFzIFNjaHJlY2sgPGh0dHBzOi8vZ2l0aHVi
LmNvbS9sbzF0dW1hPgotICogQGNvcHlyaWdodCAyMDE0IE1hdGhpYXMgU2NocmVjay4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqLwotCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbnRleHQpIHsKLSAgICB2YXIgcmVxdWlyZVBhZGRp
bmcgPSBjb250ZXh0Lm9wdGlvbnNbMF0gIT09ICJuZXZlciI7Ci0KLSAgICAvKioKLSAgICAgKiBD
aGVja3MgaWYgdGhlIGdpdmVuIG5vbiBlbXB0eSBibG9jayBub2RlIGhhcyBhIGJsYW5rIGxpbmUg
YmVmb3JlIGl0cyBmaXJzdCBjaGlsZCBub2RlLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9k
ZSBUaGUgQVNUIG5vZGUgb2YgYSBCbG9ja1N0YXRlbWVudC4KLSAgICAgKiBAcmV0dXJucyB7Ym9v
bGVhbn0gV2hldGhlciBvciBub3QgdGhlIGJsb2NrIHN0YXJ0cyB3aXRoIGEgYmxhbmsgbGluZS4K
LSAgICAgKi8KLSAgICBmdW5jdGlvbiBpc05vbkVtcHR5QmxvY2tUb3BQYWRkZWQobm9kZSkgewot
ICAgICAgICB2YXIgYmxvY2tTdGFydCA9IG5vZGUubG9jLnN0YXJ0LmxpbmUsCi0gICAgICAgICAg
ICBmaXJzdCA9IG5vZGUuYm9keVswXSwKLSAgICAgICAgICAgIGZpcnN0TGluZSA9IGZpcnN0Lmxv
Yy5zdGFydC5saW5lLAotICAgICAgICAgICAgZXhwZWN0ZWRGaXJzdExpbmUgPSBibG9ja1N0YXJ0
ICsgMiwKLSAgICAgICAgICAgIGxlYWRpbmdDb21tZW50cyA9IGNvbnRleHQuZ2V0Q29tbWVudHMo
Zmlyc3QpLmxlYWRpbmc7Ci0KLSAgICAgICAgaWYgKGxlYWRpbmdDb21tZW50cy5sZW5ndGggPiAw
KSB7Ci0gICAgICAgICAgICBmaXJzdExpbmUgPSBsZWFkaW5nQ29tbWVudHNbMF0ubG9jLnN0YXJ0
LmxpbmU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZXhwZWN0ZWRGaXJzdExpbmUgPD0g
Zmlyc3RMaW5lOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4g
bm9uIGVtcHR5IGJsb2NrIG5vZGUgaGFzIGEgYmxhbmsgbGluZSBhZnRlciBpdHMgbGFzdCBjaGls
ZCBub2RlLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgb2YgYSBC
bG9ja1N0YXRlbWVudC4KLSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3Qg
dGhlIGJsb2NrIGVuZHMgd2l0aCBhIGJsYW5rIGxpbmUuCi0gICAgICovCi0gICAgZnVuY3Rpb24g
aXNOb25FbXB0eUJsb2NrQm90dG9tUGFkZGVkKG5vZGUpIHsKLSAgICAgICAgdmFyIGJsb2NrRW5k
ID0gbm9kZS5sb2MuZW5kLmxpbmUsCi0gICAgICAgICAgICBsYXN0ID0gbm9kZS5ib2R5W25vZGUu
Ym9keS5sZW5ndGggLSAxXSwKLSAgICAgICAgICAgIGxhc3RMaW5lID0gbGFzdC5sb2MuZW5kLmxp
bmUsCi0gICAgICAgICAgICBleHBlY3RlZExhc3RMaW5lID0gYmxvY2tFbmQgLSAyLAotICAgICAg
ICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGNvbnRleHQuZ2V0Q29tbWVudHMobGFzdCkudHJhaWxp
bmc7Ci0KLSAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4gMCkgewotICAgICAg
ICAgICAgbGFzdExpbmUgPSB0cmFpbGluZ0NvbW1lbnRzW3RyYWlsaW5nQ29tbWVudHMubGVuZ3Ro
IC0gMV0ubG9jLmVuZC5saW5lOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGxhc3RMaW5l
IDw9IGV4cGVjdGVkTGFzdExpbmU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIGlm
IHRoZSBnaXZlbiBub24gZW1wdHkgYmxvY2sgbm9kZSBzdGFydHMgQU5EIGVuZHMgd2l0aCBhIGJs
YW5rIGxpbmUuCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSBvZiBh
IEJsb2NrU3RhdGVtZW50LgotICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5v
dCB0aGUgYmxvY2sgc3RhcnRzIGFuZCBlbmRzIHdpdGggYSBibGFuayBsaW5lLgotICAgICAqLwot
ICAgIGZ1bmN0aW9uIGlzTm9uRW1wdHlCbG9ja1BhZGRlZChub2RlKSB7Ci0gICAgICAgIHJldHVy
biBpc05vbkVtcHR5QmxvY2tUb3BQYWRkZWQobm9kZSkgJiYgaXNOb25FbXB0eUJsb2NrQm90dG9t
UGFkZGVkKG5vZGUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2
ZW4gbm9uIGVtcHR5IGJsb2NrIG5vZGUgc3RhcnRzIE9SIGVuZHMgd2l0aCBhIGJsYW5rIGxpbmUu
Ci0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSBvZiBhIEJsb2NrU3Rh
dGVtZW50LgotICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgYmxv
Y2sgc3RhcnRzIGFuZCBlbmRzIHdpdGggYSBibGFuayBsaW5lLgotICAgICAqLwotICAgIGZ1bmN0
aW9uIGhhc05vbkVtcHR5QmxvY2tFeHRyYVBhZGRpbmcobm9kZSkgewotICAgICAgICByZXR1cm4g
aXNOb25FbXB0eUJsb2NrVG9wUGFkZGVkKG5vZGUpIHx8IGlzTm9uRW1wdHlCbG9ja0JvdHRvbVBh
ZGRlZChub2RlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgdGhlIGdpdmVuIEJs
b2NrU3RhdGVtZW50IG5vZGUgdG8gYmUgcGFkZGVkIGlmIHRoZSBibG9jayBpcyBub3QgZW1wdHku
Ci0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSBvZiBhIEJsb2NrU3Rh
dGVtZW50LgotICAgICAqIEByZXR1cm5zIHt2b2lkfSB1bmRlZmluZWQuCi0gICAgICovCi0gICAg
ZnVuY3Rpb24gY2hlY2tQYWRkaW5nKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUuYm9keS5sZW5n
dGggPiAwKSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZVBhZGRpbmcpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIWlzTm9uRW1wdHlCbG9ja1BhZGRlZChub2RlKSkgewotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQmxvY2sgbXVzdCBiZSBwYWRkZWQgYnkgYmxhbmsg
bGluZXMuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBpZiAoaGFzTm9uRW1wdHlCbG9ja0V4dHJhUGFkZGluZyhub2RlKSkgewotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQmxvY2sgbXVzdCBub3QgYmUg
cGFkZGVkIGJ5IGJsYW5rIGxpbmVzLiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJCbG9ja1N0YXRl
bWVudCI6IGNoZWNrUGFkZGluZwotICAgIH07Ci0KLX07Ci0KLX0se31dLDEyOTpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBm
bGFnIG5vbi1xdW90ZWQgcHJvcGVydHkgbmFtZXMgaW4gb2JqZWN0IGxpdGVyYWxzLgotICogQGF1
dGhvciBNYXRoaWFzIEJ5bmVucyA8aHR0cDovL21hdGhpYXNieW5lbnMuYmUvPgotICovCi0KLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLXZhciBlc3ByaW1hID0gcmVxdWlyZSgiZXNwcmltYSIpOwotCi1tb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAg
IHZhciBNT0RFID0gY29udGV4dC5vcHRpb25zWzBdOwotCi0gICAgc3dpdGNoIChNT0RFKSB7Ci0K
LSAgICAgICAgY2FzZSAiYXMtbmVlZGVkIjoKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAg
ICAgICAgICAgUHJvcGVydHk6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIGtleSA9IG5vZGUua2V5OwotICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBh
bnkgcXVvdGVkIHByb3BlcnR5IG5hbWVzIHJlcXVpcmVkIHF1b3RpbmcKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGtleS50eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9mIGtleS52YWx1ZSA9PT0g
InN0cmluZyIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGVzcHJpbWEudG9rZW5pemUoa2V5LnZhbHVlKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAhPT0gMSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdG9rZW5z
WzBdOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHQudHlwZSA9PT0gIklkZW50aWZpZXIiIHx8IHQudHlwZSA9
PT0gIk51bGwiIHx8IHQudHlwZSA9PT0gIkJvb2xlYW4iIHx8IHQudHlwZSA9PT0gIk51bWVyaWMi
ICYmICIiICsgK3QudmFsdWUgPT09IHQudmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5uZWNlc3NhcmlseSBxdW90ZWQgcHJvcGVydHkg
YHt7bmFtZX19YCBmb3VuZC4iLCBrZXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBQ
cm9wZXJ0eTogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0g
bm9kZS5rZXk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBhbGwgcHJvcGVydHkgbmFt
ZXMgYXJlIHF1b3RlZAotICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnR5cGUgIT09ICJMaXRl
cmFsIiB8fCB0eXBlb2Yga2V5LnZhbHVlICE9PSAic3RyaW5nIikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVucXVvdGVkIHByb3BlcnR5IGB7e25hbWV9
fWAgZm91bmQuIiwga2V5KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH07Ci0KLSAgICB9Ci0KLX07Ci0KLX0seyJlc3ByaW1hIjo2fV0sMTMw
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmll
dyBBIHJ1bGUgdG8gY2hvb3NlIGJldHdlZW4gc2luZ2xlIGFuZCBkb3VibGUgcXVvdGUgbWFya3MK
LSAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5jb20vPiwgQnJh
bmRvbiBQYXl0b24KLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gQ29uc3RhbnRz
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12YXIgUVVPVEVfU0VUVElOR1MgPSB7Ci0gICAg
ImRvdWJsZSI6IHsKLSAgICAgICAgcXVvdGU6ICJcIiIsCi0gICAgICAgIGFsdGVybmF0ZVF1b3Rl
OiAiJyIsCi0gICAgICAgIGRlc2NyaXB0aW9uOiAiZG91YmxlcXVvdGUiCi0gICAgfSwKLSAgICAi
c2luZ2xlIjogewotICAgICAgICBxdW90ZTogIiciLAotICAgICAgICBhbHRlcm5hdGVRdW90ZTog
IlwiIiwKLSAgICAgICAgZGVzY3JpcHRpb246ICJzaW5nbGVxdW90ZSIKLSAgICB9Ci19OwotCi12
YXIgQVZPSURfRVNDQVBFID0gImF2b2lkLWVzY2FwZSI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0g
ICAgLyoqCi0gICAgICogVmFsaWRhdGUgdGhhdCBhIHN0cmluZyBwYXNzZWQgaW4gaXMgc3Vycm91
bmRlZCBieSB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlcgotICAgICAqIEBwYXJhbSAge3N0cmluZ30g
dmFsIFRoZSB0ZXh0IHRvIGNoZWNrLgotICAgICAqIEBwYXJhbSAge3N0cmluZ30gY2hhcmFjdGVy
IFRoZSBjaGFyYWN0ZXIgdG8gc2VlIGlmIGl0J3Mgc3Vycm91bmRlZCBieS4KLSAgICAgKiBAcmV0
dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdGV4dCBpcyBzdXJyb3VuZGVkIGJ5IHRoZSBjaGFy
YWN0ZXIsIGZhbHNlIGlmIG5vdC4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBpc1N1cnJvdW5kZWRC
eSh2YWwsIGNoYXJhY3RlcikgewotICAgICAgICByZXR1cm4gdmFsWzBdID09PSBjaGFyYWN0ZXIg
JiYgdmFsW3ZhbC5sZW5ndGggLSAxXSA9PT0gY2hhcmFjdGVyOwotICAgIH0KLQotICAgIHJldHVy
biB7Ci0KLSAgICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2
YXIgdmFsID0gbm9kZS52YWx1ZSwKLSAgICAgICAgICAgICAgICByYXdWYWwgPSBub2RlLnJhdywK
LSAgICAgICAgICAgICAgICBxdW90ZU9wdGlvbiA9IGNvbnRleHQub3B0aW9uc1swXSwKLSAgICAg
ICAgICAgICAgICBzZXR0aW5ncyA9IFFVT1RFX1NFVFRJTkdTW3F1b3RlT3B0aW9uXSwKLSAgICAg
ICAgICAgICAgICBhdm9pZEVzY2FwZSA9IGNvbnRleHQub3B0aW9uc1sxXSA9PT0gQVZPSURfRVND
QVBFLAotICAgICAgICAgICAgICAgIGlzVmFsaWQ7Ci0KLSAgICAgICAgICAgIGlmIChzZXR0aW5n
cyAmJiB0eXBlb2YgdmFsID09PSAic3RyaW5nIikgewotICAgICAgICAgICAgICAgIGlzVmFsaWQg
PSBpc1N1cnJvdW5kZWRCeShyYXdWYWwsIHNldHRpbmdzLnF1b3RlKTsKLQotICAgICAgICAgICAg
ICAgIGlmICghaXNWYWxpZCAmJiBhdm9pZEVzY2FwZSkgewotICAgICAgICAgICAgICAgICAgICBp
c1ZhbGlkID0gaXNTdXJyb3VuZGVkQnkocmF3VmFsLCBzZXR0aW5ncy5hbHRlcm5hdGVRdW90ZSkg
JiYgcmF3VmFsLmluZGV4T2Yoc2V0dGluZ3MucXVvdGUpID49IDA7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJTdHJpbmdzIG11c3QgdXNlICIgKyBzZXR0aW5ncy5kZXNj
cmlwdGlvbiArICIuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sMTMxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIHBhcnNl
SW50IHdpdGhvdXQgYSByYWRpeCBhcmd1bWVudAotICogQGF1dGhvciBKYW1lcyBBbGxhcmRpY2UK
LSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0gICAgICAgICJDYWxsRXhw
cmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAgICAgdmFyIHJhZGl4OwotCi0g
ICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUubmFtZSA9PT0gInBhcnNlSW50IikgewotCi0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLmxlbmd0aCA8IDIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIk1pc3NpbmcgcmFkaXggcGFyYW1ldGVyLiIp
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmFkaXgg
PSBub2RlLmFyZ3VtZW50c1sxXTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBhbGxv
dyBub24tbnVtZXJpYyBsaXRlcmFscyBvciB1bmRlZmluZWQKLSAgICAgICAgICAgICAgICAgICAg
aWYgKChyYWRpeC50eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9mIHJhZGl4LnZhbHVlICE9PSAi
bnVtYmVyIikgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIChyYWRpeC50eXBlID09PSAiSWRl
bnRpZmllciIgJiYgcmFkaXgubmFtZSA9PT0gInVuZGVmaW5lZCIpCi0gICAgICAgICAgICAgICAg
ICAgICkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIklu
dmFsaWQgcmFkaXggcGFyYW1ldGVyLiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19
LHt9XSwxMzI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmls
ZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBtaXNzaW5nIHNlbWljb2xvbnMuCi0gKiBAYXV0aG9yIE5p
Y2hvbGFzIEMuIFpha2FzCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW1vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgdmFyIE9QVF9PVVRfUEFUVEVS
TiA9IC9bXFtcKFwvXCtcLV0vOwotCi0gICAgdmFyIGFsd2F5cyA9IGNvbnRleHQub3B0aW9uc1sw
XSAhPT0gIm5ldmVyIjsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJz
Ci0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIGEgbm9k
ZSB0byBzZWUgaWYgaXQncyBmb2xsb3dlZCBieSBhIHNlbWljb2xvbi4KLSAgICAgKiBAcGFyYW0g
e0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suCi0gICAgICogQHJldHVybnMge3ZvaWR9
Ci0gICAgICovCi0gICAgZnVuY3Rpb24gY2hlY2tGb3JTZW1pY29sb24obm9kZSkgewotICAgICAg
ICB2YXIgbGFzdFRva2VuID0gY29udGV4dC5nZXRMYXN0VG9rZW4obm9kZSksCi0gICAgICAgICAg
ICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9kZSk7Ci0KLSAgICAgICAgaWYg
KGFsd2F5cykgewotICAgICAgICAgICAgaWYgKGxhc3RUb2tlbi50eXBlICE9PSAiUHVuY3R1YXRv
ciIgfHwgbGFzdFRva2VuLnZhbHVlICE9PSAiOyIpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCBsYXN0VG9rZW4ubG9jLmVuZCwgIk1pc3Npbmcgc2VtaWNvbG9uLiIpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGxhc3RUb2tl
bi50eXBlID09PSAiUHVuY3R1YXRvciIgJiYgbGFzdFRva2VuLnZhbHVlID09PSAiOyIpIHsKLQot
ICAgICAgICAgICAgICAgIGlmICghbmV4dFRva2VuIHx8ICEoT1BUX09VVF9QQVRURVJOLnRlc3Qo
bmV4dFRva2VuLnZhbHVlKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgbm9kZS5sb2MuZW5kLCAiRXh0cmEgc2VtaWNvbG9uLiIpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog
Q2hlY2tzIHRvIHNlZSBpZiB0aGVyZSdzIGEgc2VtaWNvbG9uIGFmdGVyIGEgdmFyaWFibGUgZGVj
bGFyYXRpb24uCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNr
LgotICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIGNoZWNrRm9y
U2VtaWNvbG9uRm9yVmFyaWFibGVEZWNsYXJhdGlvbihub2RlKSB7Ci0KLSAgICAgICAgdmFyIGFu
Y2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCksCi0gICAgICAgICAgICBwYXJlbnRJbmRl
eCA9IGFuY2VzdG9ycy5sZW5ndGggLSAxLAotICAgICAgICAgICAgcGFyZW50ID0gYW5jZXN0b3Jz
W3BhcmVudEluZGV4XTsKLQotICAgICAgICBpZiAoKHBhcmVudC50eXBlICE9PSAiRm9yU3RhdGVt
ZW50IiB8fCBwYXJlbnQuaW5pdCAhPT0gbm9kZSkgJiYKLSAgICAgICAgICAgIChwYXJlbnQudHlw
ZSAhPT0gIkZvckluU3RhdGVtZW50IiB8fCBwYXJlbnQubGVmdCAhPT0gbm9kZSkKLSAgICAgICAg
KSB7Ci0gICAgICAgICAgICBjaGVja0ZvclNlbWljb2xvbihub2RlKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMgQVBJCi0gICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiVmFyaWFibGVEZWNs
YXJhdGlvbiI6IGNoZWNrRm9yU2VtaWNvbG9uRm9yVmFyaWFibGVEZWNsYXJhdGlvbiwKLSAgICAg
ICAgIkV4cHJlc3Npb25TdGF0ZW1lbnQiOiBjaGVja0ZvclNlbWljb2xvbiwKLSAgICAgICAgIlJl
dHVyblN0YXRlbWVudCI6IGNoZWNrRm9yU2VtaWNvbG9uLAotICAgICAgICAiRGVidWdnZXJTdGF0
ZW1lbnQiOiBjaGVja0ZvclNlbWljb2xvbiwKLSAgICAgICAgIkJyZWFrU3RhdGVtZW50IjogY2hl
Y2tGb3JTZW1pY29sb24sCi0gICAgICAgICJDb250aW51ZVN0YXRlbWVudCI6IGNoZWNrRm9yU2Vt
aWNvbG9uLAotICAgICAgICAiRW1wdHlTdGF0ZW1lbnQiOiBmdW5jdGlvbiAobm9kZSkgewotICAg
ICAgICAgICAgdmFyIG5leHRUb2tlbjsKLQotICAgICAgICAgICAgaWYgKCFhbHdheXMpIHsKLSAg
ICAgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9kZSkgfHwg
Y29udGV4dC5nZXRMYXN0VG9rZW4obm9kZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIShPUFRf
T1VUX1BBVFRFUk4udGVzdChuZXh0VG9rZW4udmFsdWUpKSkgewotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXh0cmEgc2VtaWNvbG9uLiIpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotCi0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9
XSwxMzM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92
ZXJ2aWV3IFJ1bGUgdG8gcmVxdWlyZSBzb3J0aW5nIG9mIHZhcmlhYmxlcyB3aXRoaW4gYSBzaW5n
bGUgVmFyaWFibGUgRGVjbGFyYXRpb24gYmxvY2sKLSAqIEBhdXRob3IgSWx5YSBWb2xvZGluCi0g
Ki8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB2YXIgY29uZmlndXJhdGlvbiA9IGNvbnRleHQu
b3B0aW9uc1swXSB8fCB7fSwKLSAgICAgICAgaWdub3JlQ2FzZSA9IGNvbmZpZ3VyYXRpb24uaWdu
b3JlQ2FzZSB8fCBmYWxzZTsKLQotICAgIHJldHVybiB7Ci0gICAgICAgICJWYXJpYWJsZURlY2xh
cmF0aW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgbm9kZS5kZWNsYXJhdGlvbnMu
cmVkdWNlKGZ1bmN0aW9uKG1lbW8sIGRlY2wpIHsKLSAgICAgICAgICAgICAgICB2YXIgbGFzdFZh
cmlhYmxlTmFtZSA9IG1lbW8uaWQubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgY3VycmVuVmFy
aWFibGVOYW1lID0gZGVjbC5pZC5uYW1lOwotCi0gICAgICAgICAgICAgICAgaWYgKGlnbm9yZUNh
c2UpIHsKLSAgICAgICAgICAgICAgICAgICAgbGFzdFZhcmlhYmxlTmFtZSA9IGxhc3RWYXJpYWJs
ZU5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVuVmFyaWFibGVO
YW1lID0gY3VycmVuVmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgaWYgKGN1cnJlblZhcmlhYmxlTmFtZSA8IGxhc3RWYXJpYWJs
ZU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoZGVjbCwgIlZhcmlh
YmxlcyB3aXRoaW4gdGhlIHNhbWUgZGVjbGFyYXRpb24gYmxvY2sgc2hvdWxkIGJlIHNvcnRlZCBh
bHBoYWJldGljYWxseSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVtbzsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjbDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LCBub2RlLmRlY2xhcmF0aW9uc1swXSk7Ci0g
ICAgICAgIH0KLSAgICB9OwotfTsKLQotfSx7fV0sMTM0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgdGhlIG51
bWJlciBvZiBzcGFjZXMgYWZ0ZXIgY2VydGFpbiBrZXl3b3JkcwotICogQGF1dGhvciBOaWNrIEZp
c2hlcgotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBS
dWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgLy8gdW5sZXNzIHRoZSBmaXJzdCBvcHRpb24g
aXMgYCJuZXZlciJgLCB0aGVuIGEgc3BhY2UgaXMgcmVxdWlyZWQKLSAgICB2YXIgcmVxdWlyZXNT
cGFjZSA9IGNvbnRleHQub3B0aW9uc1swXSAhPT0gIm5ldmVyIiwKLSAgICAgICAgY29uZmlnID0g
Y29udGV4dC5vcHRpb25zWzFdIHx8IHsgY2hlY2tGdW5jdGlvbktleXdvcmQ6IGZhbHNlIH07Ci0K
LSAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGUgc2VwYXJhdGlvbiBvZiB0d28gYWRqYWNlbnQg
dG9rZW5zIG1lZXRzIHRoZSBzcGFjaW5nIHJ1bGVzLCBhbmQgcmVwb3J0IGEgcHJvYmxlbSBpZiBu
b3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgIFRoZSBub2RlIHRvIHdo
aWNoIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSBiZWxvbmdzLgotICAgICAqIEBwYXJhbSB7VG9rZW59
IGxlZnQgICAgVGhlIGZpcnN0IHRva2VuLgotICAgICAqIEBwYXJhbSB7VG9rZW59IHJpZ2h0ICAg
VGhlIHNlY29uZCB0b2tlbgotICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIGZ1
bmN0aW9uIGNoZWNrVG9rZW5zKG5vZGUsIGxlZnQsIHJpZ2h0KSB7Ci0gICAgICAgIHZhciBoYXNT
cGFjZSA9IGxlZnQucmFuZ2VbMV0gPCByaWdodC5yYW5nZVswXSwKLSAgICAgICAgICAgIHZhbHVl
ID0gbGVmdC52YWx1ZTsKLQotICAgICAgICBpZiAoaGFzU3BhY2UgIT09IHJlcXVpcmVzU3BhY2Up
IHsKLSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJLZXl3b3JkIFwie3t2YWx1ZX19
XCIgbXVzdCB7e25vdH19YmUgZm9sbG93ZWQgYnkgd2hpdGVzcGFjZS4iLCB7Ci0gICAgICAgICAg
ICAgICAgdmFsdWU6IHZhbHVlLAotICAgICAgICAgICAgICAgIG5vdDogcmVxdWlyZXNTcGFjZSA/
ICIiIDogIm5vdCAiCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8q
KgotICAgICAqIENoZWNrIGlmIHRoZSBnaXZlbiBub2RlIChgaWZgLCBgZm9yYCwgYHdoaWxlYCwg
ZXRjKSwgaGFzIHRoZSBjb3JyZWN0IHNwYWNpbmcgYWZ0ZXIgaXQuCi0gICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgotICAgICAqIEByZXR1cm5zIHt2b2lkfQot
ICAgICAqLwotICAgIGZ1bmN0aW9uIGNoZWNrKG5vZGUpIHsKLSAgICAgICAgdmFyIHRva2VucyA9
IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbnMobm9kZSwgMik7Ci0gICAgICAgIGNoZWNrVG9rZW5zKG5v
ZGUsIHRva2Vuc1swXSwgdG9rZW5zWzFdKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gewotICAgICAg
ICAiSWZTdGF0ZW1lbnQiOiBmdW5jdGlvbiAobm9kZSkgewotICAgICAgICAgICAgY2hlY2sobm9k
ZSk7Ci0gICAgICAgICAgICAvLyBjaGVjayB0aGUgYGVsc2VgCi0gICAgICAgICAgICBpZiAobm9k
ZS5hbHRlcm5hdGUgJiYgbm9kZS5hbHRlcm5hdGUudHlwZSAhPT0gIklmU3RhdGVtZW50Iikgewot
ICAgICAgICAgICAgICAgIGNoZWNrVG9rZW5zKG5vZGUuYWx0ZXJuYXRlLCBjb250ZXh0LmdldFRv
a2VuQmVmb3JlKG5vZGUuYWx0ZXJuYXRlKSwgY29udGV4dC5nZXRGaXJzdFRva2VuKG5vZGUuYWx0
ZXJuYXRlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJGb3JTdGF0ZW1l
bnQiOiBjaGVjaywKLSAgICAgICAgIkZvck9mU3RhdGVtZW50IjogY2hlY2ssCi0gICAgICAgICJG
b3JJblN0YXRlbWVudCI6IGNoZWNrLAotICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiBjaGVjaywK
LSAgICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQiOiBmdW5jdGlvbiAobm9kZSkgewotICAgICAgICAg
ICAgY2hlY2sobm9kZSk7Ci0gICAgICAgICAgICAvLyBjaGVjayB0aGUgYHdoaWxlYAotICAgICAg
ICAgICAgdmFyIHdoaWxlVG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnNCZWZvcmUobm9kZS50ZXN0
LCAyKTsKLSAgICAgICAgICAgIGNoZWNrVG9rZW5zKG5vZGUsIHdoaWxlVG9rZW5zWzBdLCB3aGls
ZVRva2Vuc1sxXSk7Ci0gICAgICAgIH0sCi0gICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiBjaGVj
aywKLSAgICAgICAgIlRyeVN0YXRlbWVudCI6IGZ1bmN0aW9uIChub2RlKSB7Ci0gICAgICAgICAg
ICBjaGVjayhub2RlKTsKLSAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBgZmluYWxseWAKLSAgICAg
ICAgICAgIGlmIChub2RlLmZpbmFsaXplcikgewotICAgICAgICAgICAgICAgIGNoZWNrVG9rZW5z
KG5vZGUuZmluYWxpemVyLCBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUuZmluYWxpemVyKSwg
Y29udGV4dC5nZXRGaXJzdFRva2VuKG5vZGUuZmluYWxpemVyKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0sCi0gICAgICAgICJDYXRjaFN0YXRlbWVudCI6IGNoZWNrLAotICAgICAgICAiV2l0
aFN0YXRlbWVudCI6IGNoZWNrLAotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZnVuY3Rp
b24gKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChjb25maWcuY2hlY2tGdW5jdGlvbktleXdvcmQp
IHsKLSAgICAgICAgICAgICAgICBjaGVjayhub2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH07Ci19OwotCi19LHt9XSwxMzU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBlbnN1cmUgd2hpdGVzcGFjZSBi
ZWZvcmUgYmxvY2tzLgotICogQGF1dGhvciBNYXRoaWFzIFNjaHJlY2sgPGh0dHBzOi8vZ2l0aHVi
LmNvbS9sbzF0dW1hPgotICogQGNvcHlyaWdodCAyMDE0IE1hdGhpYXMgU2NocmVjay4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqLwotCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbnRleHQpIHsKLSAgICB2YXIgcmVxdWlyZVNwYWNl
ID0gY29udGV4dC5vcHRpb25zWzBdICE9PSAibmV2ZXIiOwotCi0gICAgLyoqCi0gICAgICogRGV0
ZXJtaW5lcyB3aGV0aGVyIHR3byBhZGphY2VudCB0b2tlbnMgYXJlIGhhdmUgd2hpdGVzcGFjZSBi
ZXR3ZWVuIHRoZW0uCi0gICAgICogQHBhcmFtIHtPYmplY3R9IGxlZnQgLSBUaGUgbGVmdCB0b2tl
biBvYmplY3QuCi0gICAgICogQHBhcmFtIHtPYmplY3R9IHJpZ2h0IC0gVGhlIHJpZ2h0IHRva2Vu
IG9iamVjdC4KLSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlcmUg
aXMgc3BhY2UgYmV0d2VlbiB0aGUgdG9rZW5zLgotICAgICAqLwotICAgIGZ1bmN0aW9uIGlzU3Bh
Y2VkKGxlZnQsIHJpZ2h0KSB7Ci0gICAgICAgIHJldHVybiBsZWZ0LnJhbmdlWzFdIDwgcmlnaHQu
cmFuZ2VbMF07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3
byBhZGphY2VudCB0b2tlbnMgYXJlIG9uIHRoZSBzYW1lIGxpbmUuCi0gICAgICogQHBhcmFtIHtP
YmplY3R9IGxlZnQgLSBUaGUgbGVmdCB0b2tlbiBvYmplY3QuCi0gICAgICogQHBhcmFtIHtPYmpl
Y3R9IHJpZ2h0IC0gVGhlIHJpZ2h0IHRva2VuIG9iamVjdC4KLSAgICAgKiBAcmV0dXJucyB7Ym9v
bGVhbn0gV2hldGhlciBvciBub3QgdGhlIHRva2VucyBhcmUgb24gdGhlIHNhbWUgbGluZS4KLSAg
ICAgKi8KLSAgICBmdW5jdGlvbiBpc1NhbWVMaW5lKGxlZnQsIHJpZ2h0KSB7Ci0gICAgICAgIHJl
dHVybiBsZWZ0LmxvYy5zdGFydC5saW5lID09PSByaWdodC5sb2Muc3RhcnQubGluZTsKLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgdGhlIGdpdmVuIEJsb2NrU3RhdGVtZW50IG5vZGUg
aGFzIGEgcHJlY2VkaW5nIHNwYWNlIGlmIGl0IGRvZXNu4oCZdCBzdGFydCBvbiBhIG5ldyBsaW5l
LgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgb2YgYSBCbG9ja1N0
YXRlbWVudC4KLSAgICAgKiBAcmV0dXJucyB7dm9pZH0gdW5kZWZpbmVkLgotICAgICAqLwotICAg
IGZ1bmN0aW9uIGNoZWNrUHJlY2VkaW5nU3BhY2Uobm9kZSkgewotICAgICAgICB2YXIgcHJlY2Vk
aW5nVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUpLAotICAgICAgICAgICAgaGFz
U3BhY2U7Ci0KLSAgICAgICAgaWYgKHByZWNlZGluZ1Rva2VuICYmIGlzU2FtZUxpbmUocHJlY2Vk
aW5nVG9rZW4sIG5vZGUpKSB7Ci0gICAgICAgICAgICBoYXNTcGFjZSA9IGlzU3BhY2VkKHByZWNl
ZGluZ1Rva2VuLCBub2RlKTsKLQotICAgICAgICAgICAgaWYgKHJlcXVpcmVTcGFjZSkgewotICAg
ICAgICAgICAgICAgIGlmICghaGFzU3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIk1pc3Npbmcgc3BhY2UgYmVmb3JlIG9wZW5pbmcgYnJhY2UuIik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAoaGFzU3BhY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwg
IlVuZXhwZWN0ZWQgc3BhY2UgYmVmb3JlIG9wZW5pbmcgYnJhY2UuIik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAg
ICAgICAgIkJsb2NrU3RhdGVtZW50IjogY2hlY2tQcmVjZWRpbmdTcGFjZQotICAgIH07Ci0KLX07
Ci0KLX0se31dLDEzNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAq
IEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3dzIG9yIGVuZm9yY2VzIHNwYWNlcyBpbnNpZGUgb2YgYnJh
Y2tldHMuCi0gKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKLSAqIEBjb3B5cmlnaHQgMjAx
NCBCcmFuZHluIEJlbm5ldHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBAY29weXJpZ2h0IDIw
MTQgTWljaGFlbCBGaWNhcnJhLiBObyByaWdodHMgcmVzZXJ2ZWQuCi0gKi8KLSJ1c2Ugc3RyaWN0
IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
Ci0KLSAgICB2YXIgb3B0aW9ucyA9IHsKLSAgICAgICAgc3BhY2VkOiBjb250ZXh0Lm9wdGlvbnNb
MF0gPT09ICJhbHdheXMiLAotICAgICAgICBzaW5nbGVFbGVtZW50RXhjZXB0aW9uOiBjb250ZXh0
Lm9wdGlvbnNbMV0gIT0gbnVsbCAmJiAhIWNvbnRleHQub3B0aW9uc1sxXS5zaW5nbGVWYWx1ZSwK
LSAgICAgICAgb2JqZWN0c0luQXJyYXlzRXhjZXB0aW9uOiBjb250ZXh0Lm9wdGlvbnNbMV0gIT0g
bnVsbCAmJiAhIWNvbnRleHQub3B0aW9uc1sxXS5vYmplY3RzSW5BcnJheXMsCi0gICAgICAgIGFy
cmF5c0luQXJyYXlzRXhjZXB0aW9uOiBjb250ZXh0Lm9wdGlvbnNbMV0gIT0gbnVsbCAmJiAhIWNv
bnRleHQub3B0aW9uc1sxXS5hcnJheXNJbkFycmF5cywKLSAgICAgICAgcHJvcGVydHlOYW1lOiBj
b250ZXh0Lm9wdGlvbnNbMV0gPT0gbnVsbCB8fCBjb250ZXh0Lm9wdGlvbnNbMV0ucHJvcGVydHlO
YW1lID09IG51bGwgfHwgISFjb250ZXh0Lm9wdGlvbnNbMV0ucHJvcGVydHlOYW1lCi0gICAgfTsK
LQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0gICAgLyoqCi0gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBhZGph
Y2VudCB0b2tlbnMgYXJlIGhhdmUgd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZW0uCi0gICAgICogQHBh
cmFtIHtPYmplY3R9IGxlZnQgLSBUaGUgbGVmdCB0b2tlbiBvYmplY3QuCi0gICAgICogQHBhcmFt
IHtPYmplY3R9IHJpZ2h0IC0gVGhlIHJpZ2h0IHRva2VuIG9iamVjdC4KLSAgICAgKiBAcmV0dXJu
cyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlcmUgaXMgc3BhY2UgYmV0d2VlbiB0aGUgdG9r
ZW5zLgotICAgICAqLwotICAgIGZ1bmN0aW9uIGlzU3BhY2VkKGxlZnQsIHJpZ2h0KSB7Ci0gICAg
ICAgIHJldHVybiBsZWZ0LnJhbmdlWzFdIDwgcmlnaHQucmFuZ2VbMF07Ci0gICAgfQotCi0gICAg
LyoqCi0gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBhZGphY2VudCB0b2tlbnMgYXJlIG9u
IHRoZSBzYW1lIGxpbmUuCi0gICAgICogQHBhcmFtIHtPYmplY3R9IGxlZnQgLSBUaGUgbGVmdCB0
b2tlbiBvYmplY3QuCi0gICAgICogQHBhcmFtIHtPYmplY3R9IHJpZ2h0IC0gVGhlIHJpZ2h0IHRv
a2VuIG9iamVjdC4KLSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhl
IHRva2VucyBhcmUgb24gdGhlIHNhbWUgbGluZS4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBpc1Nh
bWVMaW5lKGxlZnQsIHJpZ2h0KSB7Ci0gICAgICAgIHJldHVybiBsZWZ0LmxvYy5zdGFydC5saW5l
ID09PSByaWdodC5sb2Muc3RhcnQubGluZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFJlcG9y
dHMgdGhhdCB0aGVyZSBzaG91bGRuJ3QgYmUgYSBzcGFjZSBhZnRlciB0aGUgZmlyc3QgdG9rZW4K
LSAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHJlcG9ydCBpbiB0aGUg
ZXZlbnQgb2YgYW4gZXJyb3IuCi0gICAgKiBAcGFyYW0ge09iamVjdFtdfSB0b2tlbnMgLSBUaGUg
dG9rZW5zIHRvIGJlIGNoZWNrZWQgZm9yIHNwYWNpbmcuCi0gICAgKiBAcmV0dXJucyB7dm9pZH0K
LSAgICAqLwotICAgIGZ1bmN0aW9uIHJlcG9ydE5vQmVnaW5uaW5nU3BhY2Uobm9kZSwgdG9rZW5z
KSB7Ci0gICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIHRva2Vuc1swXS5sb2Muc3RhcnQsCi0g
ICAgICAgICAgICAgICAgICAgICJUaGVyZSBzaG91bGQgYmUgbm8gc3BhY2UgYWZ0ZXIgJyIgKyB0
b2tlbnNbMF0udmFsdWUgKyAiJyIpOwotICAgIH0KLQotICAgIC8qKgotICAgICogUmVwb3J0cyB0
aGF0IHRoZXJlIHNob3VsZG4ndCBiZSBhIHNwYWNlIGJlZm9yZSB0aGUgbGFzdCB0b2tlbgotICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gcmVwb3J0IGluIHRoZSBldmVu
dCBvZiBhbiBlcnJvci4KLSAgICAqIEBwYXJhbSB7T2JqZWN0W119IHRva2VucyAtIFRoZSB0b2tl
bnMgdG8gYmUgY2hlY2tlZCBmb3Igc3BhY2luZy4KLSAgICAqIEByZXR1cm5zIHt2b2lkfQotICAg
ICovCi0gICAgZnVuY3Rpb24gcmVwb3J0Tm9FbmRpbmdTcGFjZShub2RlLCB0b2tlbnMpIHsKLSAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS5sb2Mu
c3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICJUaGVyZSBzaG91bGQgYmUgbm8gc3BhY2UgYmVm
b3JlICciICsgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS52YWx1ZSArICInIik7Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgKiBSZXBvcnRzIHRoYXQgdGhlcmUgc2hvdWxkIGJlIGEgc3BhY2UgYWZ0
ZXIgdGhlIGZpcnN0IHRva2VuCi0gICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBUaGUgbm9k
ZSB0byByZXBvcnQgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLgotICAgICogQHBhcmFtIHtPYmpl
Y3RbXX0gdG9rZW5zIC0gVGhlIHRva2VucyB0byBiZSBjaGVja2VkIGZvciBzcGFjaW5nLgotICAg
ICogQHJldHVybnMge3ZvaWR9Ci0gICAgKi8KLSAgICBmdW5jdGlvbiByZXBvcnRSZXF1aXJlZEJl
Z2lubmluZ1NwYWNlKG5vZGUsIHRva2VucykgewotICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCB0b2tlbnNbMF0ubG9jLnN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAiQSBzcGFjZSBpcyBy
ZXF1aXJlZCBhZnRlciAnIiArIHRva2Vuc1swXS52YWx1ZSArICInIik7Ci0gICAgfQotCi0gICAg
LyoqCi0gICAgKiBSZXBvcnRzIHRoYXQgdGhlcmUgc2hvdWxkIGJlIGEgc3BhY2UgYmVmb3JlIHRo
ZSBsYXN0IHRva2VuCi0gICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byBy
ZXBvcnQgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLgotICAgICogQHBhcmFtIHtPYmplY3RbXX0g
dG9rZW5zIC0gVGhlIHRva2VucyB0byBiZSBjaGVja2VkIGZvciBzcGFjaW5nLgotICAgICogQHJl
dHVybnMge3ZvaWR9Ci0gICAgKi8KLSAgICBmdW5jdGlvbiByZXBvcnRSZXF1aXJlZEVuZGluZ1Nw
YWNlKG5vZGUsIHRva2VucykgewotICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCB0b2tlbnNb
dG9rZW5zLmxlbmd0aCAtIDFdLmxvYy5zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgIkEgc3Bh
Y2UgaXMgcmVxdWlyZWQgYmVmb3JlICciICsgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS52YWx1
ZSArICInIik7Ci0gICAgfQotCi0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVi
bGljCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICBN
ZW1iZXJFeHByZXNzaW9uOiBvcHRpb25zLnByb3BlcnR5TmFtZSA/IGZ1bmN0aW9uIGNoZWNrTWVt
YmVyKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLmNvbXB1dGVkKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKG5vZGUucHJvcGVydHksIDEsIDEp
OwotICAgICAgICAgICAgICAgIHZhciB0b2tlbkEgPSB0b2tlbnNbMF0sIHRva2VuQiA9IHRva2Vu
c1sxXSwKLSAgICAgICAgICAgICAgICAgICAgdG9rZW5DID0gdG9rZW5zW3Rva2Vucy5sZW5ndGgg
LSAyXSwgdG9rZW5EID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgICAg
ICBpZiAoaXNTYW1lTGluZSh0b2tlbkEsIHRva2VuQikgfHwgaXNTYW1lTGluZSh0b2tlbkMsIHRv
a2VuRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3BhY2VkKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2VkKHRva2VuQSwgdG9rZW5CKSAmJiBpc1Nh
bWVMaW5lKHRva2VuQSwgdG9rZW5CKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cG9ydFJlcXVpcmVkQmVnaW5uaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZWQodG9rZW5D
LCB0b2tlbkQpICYmIGlzU2FtZUxpbmUodG9rZW5DLCB0b2tlbkQpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwb3J0UmVxdWlyZWRFbmRpbmdTcGFjZShub2RlLCB0b2tlbnMpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3BhY2VkKHRva2VuQSwgdG9rZW5CKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydE5vQmVnaW5uaW5nU3BhY2Uobm9kZSwg
dG9rZW5zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpc1NwYWNlZCh0b2tlbkMsIHRva2VuRCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXBvcnROb0VuZGluZ1NwYWNlKG5vZGUsIHRva2Vucyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gOiBmdW5jdGlvbigpIHt9LAotCi0gICAgICAgIEFycmF5
RXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUuZWxlbWVu
dHMubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKG5vZGUpOwotICAg
ICAgICAgICAgdmFyIHRva2VuQSA9IHRva2Vuc1swXSwgdG9rZW5CID0gdG9rZW5zWzFdLAotICAg
ICAgICAgICAgICAgIHRva2VuQyA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMl0sIHRva2VuRCA9
IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07Ci0KLSAgICAgICAgICAgIHZhciBvcGVuaW5nQnJh
Y2tldE11c3RCZVNwYWNlZCA9Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy5vYmplY3RzSW5BcnJh
eXNFeGNlcHRpb24gJiYgdG9rZW5CLnZhbHVlID09PSAieyIgfHwKLSAgICAgICAgICAgICAgICBv
cHRpb25zLmFycmF5c0luQXJyYXlzRXhjZXB0aW9uICYmIHRva2VuQi52YWx1ZSA9PT0gIlsiIHx8
Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy5zaW5nbGVFbGVtZW50RXhjZXB0aW9uICYmIG5vZGUu
ZWxlbWVudHMubGVuZ3RoID09PSAxCi0gICAgICAgICAgICAgICAgPyAhb3B0aW9ucy5zcGFjZWQg
OiBvcHRpb25zLnNwYWNlZDsKLQotICAgICAgICAgICAgdmFyIGNsb3NpbmdCcmFja2V0TXVzdEJl
U3BhY2VkID0KLSAgICAgICAgICAgICAgICBvcHRpb25zLm9iamVjdHNJbkFycmF5c0V4Y2VwdGlv
biAmJiB0b2tlbkMudmFsdWUgPT09ICJ9IiB8fAotICAgICAgICAgICAgICAgIG9wdGlvbnMuYXJy
YXlzSW5BcnJheXNFeGNlcHRpb24gJiYgdG9rZW5DLnZhbHVlID09PSAiXSIgfHwKLSAgICAgICAg
ICAgICAgICBvcHRpb25zLnNpbmdsZUVsZW1lbnRFeGNlcHRpb24gJiYgbm9kZS5lbGVtZW50cy5s
ZW5ndGggPT09IDEKLSAgICAgICAgICAgICAgICA/ICFvcHRpb25zLnNwYWNlZCA6IG9wdGlvbnMu
c3BhY2VkOwotCi0gICAgICAgICAgICBpZiAoaXNTYW1lTGluZSh0b2tlbkEsIHRva2VuQikgfHwg
aXNTYW1lTGluZSh0b2tlbkMsIHRva2VuRCkpIHsKLSAgICAgICAgICAgICAgICBpZiAob3Blbmlu
Z0JyYWNrZXRNdXN0QmVTcGFjZWQgJiYgIWlzU3BhY2VkKHRva2VuQSwgdG9rZW5CKSkgewotICAg
ICAgICAgICAgICAgICAgICByZXBvcnRSZXF1aXJlZEJlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vu
cyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghb3BlbmluZ0JyYWNrZXRNdXN0QmVTcGFj
ZWQgJiYgaXNTcGFjZWQodG9rZW5BLCB0b2tlbkIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
cG9ydE5vQmVnaW5uaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKGNsb3NpbmdCcmFja2V0TXVzdEJlU3BhY2VkICYmICFpc1NwYWNl
ZCh0b2tlbkMsIHRva2VuRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwb3J0UmVxdWlyZWRF
bmRpbmdTcGFjZShub2RlLCB0b2tlbnMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNs
b3NpbmdCcmFja2V0TXVzdEJlU3BhY2VkICYmIGlzU3BhY2VkKHRva2VuQywgdG9rZW5EKSkgewot
ICAgICAgICAgICAgICAgICAgICByZXBvcnROb0VuZGluZ1NwYWNlKG5vZGUsIHRva2Vucyk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIE9i
amVjdEV4cHJlc3Npb246IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLnBy
b3BlcnRpZXMubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKG5vZGUp
OwotICAgICAgICAgICAgdmFyIHRva2VuQSA9IHRva2Vuc1swXSwgdG9rZW5CID0gdG9rZW5zWzFd
LAotICAgICAgICAgICAgICAgIHRva2VuQyA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMl0sIHRv
a2VuRCA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07Ci0gICAgICAgICAgICBpZiAoaXNTYW1l
TGluZSh0b2tlbkEsIHRva2VuQikgfHwgaXNTYW1lTGluZSh0b2tlbkMsIHRva2VuRCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zcGFjZWQpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFpc1NwYWNlZCh0b2tlbkEsIHRva2VuQikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlcG9ydFJlcXVpcmVkQmVnaW5uaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2VkKHRva2VuQywgdG9r
ZW5EKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UmVxdWlyZWRFbmRpbmdTcGFj
ZShub2RlLCB0b2tlbnMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3BhY2VkKHRva2VuQSwgdG9rZW5C
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0Tm9CZWdpbm5pbmdTcGFjZShub2Rl
LCB0b2tlbnMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChpc1NwYWNlZCh0b2tlbkMsIHRva2VuRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
cG9ydE5vRW5kaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgfTsKLQot
fTsKLQotfSx7fV0sMTM3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgot
ICogQGZpbGVvdmVydmlldyBEaXNhbGxvd3Mgb3IgZW5mb3JjZXMgc3BhY2VzIGluc2lkZSBvZiBw
YXJlbnRoZXNlcy4KLSAqIEBhdXRob3IgSm9uYXRoYW4gUmFqYXZ1b3JpCi0gKiBAY29weXJpZ2h0
IDIwMTQgSm9uYXRoYW4gUmFqYXZ1b3JpLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICovCi0idXNl
IHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgewotCi0gICAgdmFyIFJFLCBNRVNTQUdFOwotCi0gICAgaWYgKGNvbnRleHQub3B0aW9u
c1swXSA9PT0gImFsd2F5cyIpIHsKLSAgICAgICAgUkUgPSAvXChbXiBcKV18W14gXChdXCkvbWc7
Ci0gICAgICAgIE1FU1NBR0UgPSAiVGhlcmUgbXVzdCBiZSBhIHNwYWNlIGluc2lkZSB0aGlzIHBh
cmVuLiI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUkUgPSAvXCggfCBcKS9tZzsKLSAgICAgICAg
TUVTU0FHRSA9ICJUaGVyZSBzaG91bGQgYmUgbm8gc3BhY2VzIGluc2lkZSB0aGlzIHBhcmVuLiI7
Ci0gICAgfQotCi0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycwotICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHZhciBza2lwUmFuZ2VzID0gW107Ci0KLSAgICAv
KioKLSAgICAgKiBBZGRzIHRoZSByYW5nZSBvZiBhIG5vZGUgdG8gdGhlIHNldCB0byBiZSBza2lw
cGVkIHdoZW4gY2hlY2tpbmcgcGFyZW5zCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRo
ZSBub2RlIHRvIHNraXAKLSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKiBAcHJpdmF0ZQot
ICAgICAqLwotICAgIGZ1bmN0aW9uIGFkZFNraXBSYW5nZShub2RlKSB7Ci0gICAgICAgIHNraXBS
YW5nZXMucHVzaChub2RlLnJhbmdlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTb3J0cyB0
aGUgc2tpcFJhbmdlcyBhcnJheS4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHNob3VsZFNraXAKLSAg
ICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIGZ1bmN0
aW9uIHNvcnRTa2lwUmFuZ2VzKCkgewotICAgICAgICBza2lwUmFuZ2VzLnNvcnQoZnVuY3Rpb24g
KGEsIGIpIHsKLSAgICAgICAgICAgIHJldHVybiBhWzBdIC0gYlswXTsKLSAgICAgICAgfSk7Ci0g
ICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIGlmIGEgY2VydGFpbiBwb3NpdGlvbiBpbiB0
aGUgc291cmNlIHNob3VsZCBiZSBza2lwcGVkCi0gICAgICogQHBhcmFtIHtOdW1iZXJ9IHBvcyBU
aGUgMC1iYXNlZCBpbmRleCBpbiB0aGUgc291cmNlCi0gICAgICogQHJldHVybnMge2Jvb2xlYW59
IHdoZXRoZXIgdGhlIHBvc2l0aW9uIHNob3VsZCBiZSBza2lwcGVkCi0gICAgICogQHByaXZhdGUK
LSAgICAgKi8KLSAgICBmdW5jdGlvbiBzaG91bGRTa2lwKHBvcykgewotICAgICAgICB2YXIgaSwg
bGVuLCByYW5nZTsKLSAgICAgICAgZm9yIChpID0gMCwgbGVuID0gc2tpcFJhbmdlcy5sZW5ndGg7
IGkgPCBsZW47IGkgKz0gMSkgewotICAgICAgICAgICAgcmFuZ2UgPSBza2lwUmFuZ2VzW2ldOwot
ICAgICAgICAgICAgaWYgKHBvcyA8IHJhbmdlWzBdKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA8IHJhbmdlWzFdKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMK
LSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJQcm9n
cmFtOmV4aXQiOiBmdW5jdGlvbiBjaGVja1BhcmVuU3BhY2VzKG5vZGUpIHsKLQotICAgICAgICAg
ICAgdmFyIG1hdGNoLAotICAgICAgICAgICAgICAgIG5leHRMaW5lLAotICAgICAgICAgICAgICAg
IGNvbHVtbiwKLSAgICAgICAgICAgICAgICBsaW5lID0gMSwKLSAgICAgICAgICAgICAgICBzb3Vy
Y2UgPSBjb250ZXh0LmdldFNvdXJjZSgpLAotICAgICAgICAgICAgICAgIHBvcyA9IDA7Ci0KLSAg
ICAgICAgICAgIHNvcnRTa2lwUmFuZ2VzKCk7Ci0KLSAgICAgICAgICAgIHdoaWxlICgobWF0Y2gg
PSBSRS5leGVjKHNvdXJjZSkpICE9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJj
ZS5jaGFyQXQobWF0Y2guaW5kZXgpICE9PSAiKCIpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
TWF0Y2hlZCBhIGNsb3NpbmcgcGFyZW4gcGF0dGVybgotICAgICAgICAgICAgICAgICAgICBtYXRj
aC5pbmRleCArPSAxOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICgh
c2hvdWxkU2tpcChtYXRjaC5pbmRleCkpIHsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChu
ZXh0TGluZSA9IHNvdXJjZS5pbmRleE9mKCJcbiIsIHBvcykpICE9PSAtMSAmJiBuZXh0TGluZSA8
IG1hdGNoLmluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBuZXh0TGluZSAr
IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lICs9IDE7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gbWF0Y2guaW5kZXggLSBwb3M7Ci0K
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgeyBsaW5lOiBsaW5lLCBj
b2x1bW46IGNvbHVtbiB9LCBNRVNTQUdFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgfSwKLQotCi0gICAgICAgIC8vIFRoZXNlIG5vZGVzIGNhbiBjb250YWlu
IHBhcmVudGhlc2VzIHRoYXQgdGhpcyBydWxlIGRvZXNuJ3QgY2FyZSBhYm91dAotCi0gICAgICAg
IExpbmVDb21tZW50OiBhZGRTa2lwUmFuZ2UsCi0KLSAgICAgICAgQmxvY2tDb21tZW50OiBhZGRT
a2lwUmFuZ2UsCi0KLSAgICAgICAgTGl0ZXJhbDogYWRkU2tpcFJhbmdlCi0KLSAgICB9OwotCi19
OwotCi19LHt9XSwxMzg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0g
KiBAZmlsZW92ZXJ2aWV3IFJlcXVpcmUgc3BhY2VzIGFyb3VuZCBpbmZpeCBvcGVyYXRvcnMKLSAq
IEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICB2YXIgT1BF
UkFUT1JTID0gWwotICAgICAgICAiKiIsICIvIiwgIiUiLCAiKyIsICItIiwgIjw8IiwgIj4+Iiwg
Ij4+PiIsICI8IiwgIjw9IiwgIj4iLCAiPj0iLCAiaW4iLAotICAgICAgICAiaW5zdGFuY2VvZiIs
ICI9PSIsICIhPSIsICI9PT0iLCAiIT09IiwgIiYiLCAiXiIsICJ8IiwgIiYmIiwgInx8IiwgIj0i
LAotICAgICAgICAiKz0iLCAiLT0iLCAiKj0iLCAiLz0iLCAiJT0iLCAiPDw9IiwgIj4+PSIsICI+
Pj49IiwgIiY9IiwgIl49IiwgInw9IiwKLSAgICAgICAgIj8iLCAiOiIsICIsIgotICAgIF07Ci0K
LSAgICBmdW5jdGlvbiBpc1NwYWNlZChsZWZ0LCByaWdodCkgewotICAgICAgICB2YXIgb3AsIHRv
a2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKHtyYW5nZTogW2xlZnQucmFuZ2VbMV0sIHJpZ2h0LnJh
bmdlWzBdXX0sIDEsIDEpOwotICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IHRva2Vucy5sZW5n
dGggLSAxOyBpIDwgbDsgKytpKSB7Ci0gICAgICAgICAgICBvcCA9IHRva2Vuc1tpXTsKLSAgICAg
ICAgICAgIGlmICgKLSAgICAgICAgICAgICAgICBvcC50eXBlID09PSAiUHVuY3R1YXRvciIgJiYK
LSAgICAgICAgICAgICAgICBPUEVSQVRPUlMuaW5kZXhPZihvcC52YWx1ZSkgPj0gMCAmJgotICAg
ICAgICAgICAgICAgICh0b2tlbnNbaSAtIDFdLnJhbmdlWzFdID49IG9wLnJhbmdlWzBdIHx8IG9w
LnJhbmdlWzFdID49IHRva2Vuc1tpICsgMV0ucmFuZ2VbMF0pCi0gICAgICAgICAgICApIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNSaWdodFNwYWNlZChs
ZWZ0LCByaWdodCkgewotICAgICAgICB2YXIgb3AsIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5z
KHtyYW5nZTogW2xlZnQucmFuZ2VbMV0sIHJpZ2h0LnJhbmdlWzBdXX0sIDEsIDEpOwotICAgICAg
ICBmb3IgKHZhciBpID0gMSwgbCA9IHRva2Vucy5sZW5ndGggLSAxOyBpIDwgbDsgKytpKSB7Ci0g
ICAgICAgICAgICBvcCA9IHRva2Vuc1tpXTsKLSAgICAgICAgICAgIGlmICgKLSAgICAgICAgICAg
ICAgICBvcC50eXBlID09PSAiUHVuY3R1YXRvciIgJiYKLSAgICAgICAgICAgICAgICBPUEVSQVRP
UlMuaW5kZXhPZihvcC52YWx1ZSkgPj0gMCAmJgotICAgICAgICAgICAgICAgIG9wLnJhbmdlWzFd
ID49IHRva2Vuc1tpICsgMV0ucmFuZ2VbMF0KLSAgICAgICAgICAgICkgewotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiByZXBvcnQobm9kZSkgewotICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiSW5maXggb3BlcmF0b3JzIG11c3QgYmUgc3BhY2VkLiIpOwot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIGNoZWNrQmluYXJ5KG5vZGUpIHsKLSAgICAgICAgaWYgKCFp
c1NwYWNlZChub2RlLmxlZnQsIG5vZGUucmlnaHQpKSB7Ci0gICAgICAgICAgICByZXBvcnQobm9k
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjaGVja1NlcXVlbmNlKG5vZGUp
IHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2RlLmV4cHJlc3Npb25zLmxlbmd0aCAt
IDE7IGkgPCBsOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghaXNSaWdodFNwYWNlZChub2RlLmV4
cHJlc3Npb25zW2ldLCBub2RlLmV4cHJlc3Npb25zW2kgKyAxXSkpIHsKLSAgICAgICAgICAgICAg
ICByZXBvcnQobm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjaGVja0NvbmRpdGlvbmFsKG5vZGUpIHsK
LSAgICAgICAgaWYgKCFpc1NwYWNlZChub2RlLnRlc3QsIG5vZGUuY29uc2VxdWVudCkgfHwgIWlz
U3BhY2VkKG5vZGUuY29uc2VxdWVudCwgbm9kZS5hbHRlcm5hdGUpKSB7Ci0gICAgICAgICAgICBy
ZXBvcnQobm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjaGVja1Zhcihu
b2RlKSB7Ci0gICAgICAgIGlmIChub2RlLmluaXQgJiYgIWlzU3BhY2VkKG5vZGUuaWQsIG5vZGUu
aW5pdCkpIHsKLSAgICAgICAgICAgIHJlcG9ydChub2RlKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiB7Ci0gICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6IGNoZWNrQmluYXJ5
LAotICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGNoZWNrQmluYXJ5LAotICAgICAgICAiTG9n
aWNhbEV4cHJlc3Npb24iOiBjaGVja0JpbmFyeSwKLSAgICAgICAgIkNvbmRpdGlvbmFsRXhwcmVz
c2lvbiI6IGNoZWNrQ29uZGl0aW9uYWwsCi0gICAgICAgICJTZXF1ZW5jZUV4cHJlc3Npb24iOiBj
aGVja1NlcXVlbmNlLAotICAgICAgICAiVmFyaWFibGVEZWNsYXJhdG9yIjogY2hlY2tWYXIKLSAg
ICB9OwotCi19OwotCi19LHt9XSwxMzk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
ewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJlcXVpcmUgc3BhY2VzIGZvbGxvd2luZyByZXR1cm4s
IHRocm93LCBhbmQgY2FzZQotICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEKLSAqLwotInVzZSBz
dHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKLQotICAgIGZ1bmN0aW9uIGNoZWNrKG5vZGUpIHsKLSAgICAgICAgdmFyIHRva2VucyA9
IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbnMobm9kZSwgMiksCi0gICAgICAgICAgICB2YWx1ZSA9IHRv
a2Vuc1swXS52YWx1ZTsKLQotICAgICAgICBpZiAodG9rZW5zWzBdLnJhbmdlWzFdID49IHRva2Vu
c1sxXS5yYW5nZVswXSkgewotICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIktleXdv
cmQgXCIiICsgdmFsdWUgKyAiXCIgbXVzdCBiZSBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlLiIpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIlJldHVyblN0YXRlbWVu
dCI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLmFyZ3VtZW50KSB7Ci0g
ICAgICAgICAgICAgICAgY2hlY2sobm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0g
ICAgICAgICJTd2l0Y2hDYXNlIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgaWYgKG5v
ZGUudGVzdCkgewotICAgICAgICAgICAgICAgIGNoZWNrKG5vZGUpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9LAotICAgICAgICAiVGhyb3dTdGF0ZW1lbnQiOiBjaGVjawotICAgIH07Ci0KLX07
Ci0KLX0se31dLDE0MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAq
IEBmaWxlb3ZlcnZpZXcgUmVxdWlyZSBzcGFjZXMgZm9sbG93aW5nIHVuYXJ5IHdvcmQgb3BlcmF0
b3JzCi0gKiBAYXV0aG9yIE1pY2hhZWwgRmljYXJyYQotICovCi0idXNlIHN0cmljdCI7Ci0KLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAg
ZnVuY3Rpb24gY2hlY2sobm9kZSkgewotICAgICAgICB2YXIgdG9rZW5zOwotICAgICAgICB0b2tl
bnMgPSBjb250ZXh0LmdldEZpcnN0VG9rZW5zKG5vZGUsIDIpOwotICAgICAgICBpZiAodG9rZW5z
WzBdLnJhbmdlWzFdID49IHRva2Vuc1sxXS5yYW5nZVswXSkgewotICAgICAgICAgICAgc3dpdGNo
ICh0b2tlbnNbMF0udmFsdWUpIHsKLSAgICAgICAgICAgICAgICBjYXNlICJkZWxldGUiOgotICAg
ICAgICAgICAgICAgIGNhc2UgIm5ldyI6Ci0gICAgICAgICAgICAgICAgY2FzZSAidHlwZW9mIjoK
LSAgICAgICAgICAgICAgICBjYXNlICJ2b2lkIjoKLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIlVuYXJ5IHdvcmQgb3BlcmF0b3IgXCIiICsgdG9rZW5zWzBdLnZhbHVl
ICsgIlwiIG11c3QgYmUgZm9sbG93ZWQgYnkgd2hpdGVzcGFjZS4iKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgLy8gbm8gZGVmYXVsdAotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIk5ld0V4cHJlc3Np
b24iOiBjaGVjaywKLSAgICAgICAgIlVuYXJ5RXhwcmVzc2lvbiI6IGNoZWNrCi0gICAgfTsKLQot
fTsKLQotfSx7fV0sMTQxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgot
ICogQGZpbGVvdmVydmlldyBFbmZvcmNlcyBvciBkaXNhbGxvd3MgYSBzcGFjZSBiZWdpbm5pbmcg
YSBzaW5nbGUtbGluZSBjb21tZW50LgotICogQGF1dGhvciBHcmVnIENvY2hhcmQKLSAqIEBjb3B5
cmlnaHQgMjAxNCBHcmVnIENvY2hhcmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKi8KLSJ1c2Ug
c3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250
ZXh0KSB7Ci0KLSAgICAvLyBVbmxlc3MgdGhlIGZpcnN0IG9wdGlvbiBpcyBuZXZlciwgcmVxdWly
ZSBhIHNwYWNlCi0gICAgdmFyIHJlcXVpcmVTcGFjZSA9IGNvbnRleHQub3B0aW9uc1swXSAhPT0g
Im5ldmVyIjsKLQotICAgIC8vIERlZmF1bHQgdG8gbWF0Y2ggYW55dGhpbmcsIHNvIGFsbCB3aWxs
IGZhaWwgaWYgdGhlcmUgYXJlIG5vIGV4Y2VwdGlvbnMKLSAgICB2YXIgZXhjZXB0aW9uTWF0Y2hl
ciA9IG5ldyBSZWdFeHAoIiAiKTsKLQotICAgIC8vIEdyYWIgdGhlIGV4Y2VwdGlvbnMgYXJyYXkg
YW5kIGJ1aWxkIGEgUmVnRXhwIG1hdGNoZXIgZm9yIGl0Ci0gICAgdmFyIGhhc0V4Y2VwdGlvbnMg
PSBjb250ZXh0Lm9wdGlvbnMubGVuZ3RoID09PSAyOwotICAgIHZhciB1bmVzY2FwZWRFeGNlcHRp
b25zID0gaGFzRXhjZXB0aW9ucyA/IGNvbnRleHQub3B0aW9uc1sxXS5leGNlcHRpb25zIDogW107
Ci0gICAgdmFyIGV4Y2VwdGlvbnM7Ci0KLSAgICBpZiAodW5lc2NhcGVkRXhjZXB0aW9ucy5sZW5n
dGgpIHsKLSAgICAgICAgZXhjZXB0aW9ucyA9IHVuZXNjYXBlZEV4Y2VwdGlvbnMubWFwKGZ1bmN0
aW9uKHMpIHsKLSAgICAgICAgICAgIHJldHVybiBzLnJlcGxhY2UoLyhbLiorPyR7fSgpfFxeXFtc
XVwvXFxdKS9nLCAiXFwkMSIpOwotICAgICAgICB9KTsKLSAgICAgICAgZXhjZXB0aW9uTWF0Y2hl
ciA9IG5ldyBSZWdFeHAoIiheKCIgKyBleGNlcHRpb25zLmpvaW4oIikrJCl8KF4oIikgKyAiKSsk
KSIpOwotICAgIH0KLQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYwot
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIkxpbmVD
b21tZW50IjogZnVuY3Rpb24gY2hlY2tDb21tZW50Rm9yU3BhY2Uobm9kZSkgewotCi0gICAgICAg
ICAgICBpZiAobm9kZS5sb2Muc3RhcnQubGluZSA9PT0gMSAmJiAvXiMhLy50ZXN0KGNvbnRleHQu
Z2V0U291cmNlTGluZXMoKVswXSkpIHsKLQotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAg
ICAgICAgICogSEFDSzogcmV0dXJuIGlmIHdlIGFyZSBvbiB0aGUgZmlyc3QgbGluZSBhbmQKLSAg
ICAgICAgICAgICAgICAgKiBlbmNvdW50ZXIgYSBzaGViYW5nIGF0IHRoZSBiZWdpbm5pbmcuCi0g
ICAgICAgICAgICAgICAgICogSXQgc2VlbXMgdGhlIHBhcnNlciB3aWxsIHJldHVybiB0aGlzIGFz
IGEKLSAgICAgICAgICAgICAgICAgKiBjb21tZW50IGFuZCBmaWx0ZXIgb3V0IHRoZSAjIHNvIHdl
IG11c3QgZmV0Y2gKLSAgICAgICAgICAgICAgICAgKiB0aGUgYWN0dWFsIHNvdXJjZSBsaW5lLiBJ
cyB0aGlzIGJlaW5nIGNhdXNlZAotICAgICAgICAgICAgICAgICAqIGJ5IGVzcHJpbWEgb3IgZXNs
aW50PyBTb21ldGhpbmcgZWxzZT8KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChyZXF1aXJlU3BhY2Up
IHsKLQotICAgICAgICAgICAgICAgIC8vIFNwYWNlIGV4cGVjdGVkIGFuZCBub3QgZm91bmQKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS52YWx1ZS5pbmRleE9mKCIgIikgIT09IDApIHsKLQotICAg
ICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgKiBEbyB0d28gdGVzdHM7
IG9uZSBmb3Igc3BhY2Ugc3RhcnRpbmcgdGhlIGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAq
IGFuZCBvbmUgZm9yIGEgY29tbWVudCBjb21wcmlzZWQgb25seSBvZiBleGNlcHRpb25zCi0gICAg
ICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRXhjZXB0aW9u
cyAmJiAhZXhjZXB0aW9uTWF0Y2hlci50ZXN0KG5vZGUudmFsdWUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgZXhjZXB0aW9uIGJsb2Nr
IG9yIHNwYWNlIGFmdGVyIC8vIGluIGNvbW1lbnQuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIWhhc0V4Y2VwdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJFeHBlY3RlZCBzcGFjZSBhZnRlciAvLyBpbiBjb21tZW50LiIpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB9
IGVsc2UgewotCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUudmFsdWUuaW5kZXhPZigiICIpID09
PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVj
dGVkIHNwYWNlIGFmdGVyIC8vIGluIGNvbW1lbnQuIik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9OwotfTsKLQotfSx7fV0sMTQyOltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRv
IGVuc3VyZSBjb2RlIGlzIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUuCi0gKiBAYXV0aG9yIE5pY2hv
bGFzIEMuIFpha2FzCi0gKiBAY29weXJpZ2h0IDIwMTMtMjAxNCBOaWNob2xhcyBDLiBaYWthcy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHZhciBzY29wZXMg
PSBbXTsKLQotICAgIC8qKgotICAgICAqIERldGVybWluZXMgaWYgYSBnaXZlbiBub2RlIGlzICJ1
c2Ugc3RyaWN0Ii4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hl
Y2suCi0gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG5vZGUgaXMgYSBzdHJp
Y3QgcHJhZ21hLCBmYWxzZSBpZiBub3QuCi0gICAgICogQHZvaWQKLSAgICAgKi8KLSAgICBmdW5j
dGlvbiBpc1N0cmljdFByYWdtYShub2RlKSB7Ci0gICAgICAgIHJldHVybiAobm9kZSAmJiBub2Rl
LnR5cGUgPT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiAmJgotICAgICAgICAgICAgICAgIG5vZGUu
ZXhwcmVzc2lvbi52YWx1ZSA9PT0gInVzZSBzdHJpY3QiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAg
ICAgKiBXaGVuIHlvdSBlbnRlciBhIHNjb3BlLCBwdXNoIHRoZSBzdHJpY3QgdmFsdWUgZnJvbSB0
aGUgcHJldmlvdXMgc2NvcGUKLSAgICAgKiBvbnRvIHRoZSBzdGFjay4KLSAgICAgKiBAcGFyYW0g
e0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIGJlaW5nIGNoZWNrZWQuCi0gICAgICogQHJldHVy
bnMge3ZvaWR9Ci0gICAgICogQHByaXZhdGUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBlbnRlclNj
b3BlKG5vZGUpIHsKLQotICAgICAgICB2YXIgaXNTdHJpY3QgPSBmYWxzZSwKLSAgICAgICAgICAg
IGlzUHJvZ3JhbSA9IChub2RlLnR5cGUgPT09ICJQcm9ncmFtIiksCi0gICAgICAgICAgICBpc1Bh
cmVudEdsb2JhbCA9IHNjb3Blcy5sZW5ndGggPT09IDEsCi0gICAgICAgICAgICBpc1BhcmVudFN0
cmljdCA9IHNjb3Blcy5sZW5ndGggPyBzY29wZXNbc2NvcGVzLmxlbmd0aCAtIDFdIDogZmFsc2U7
Ci0KLSAgICAgICAgLy8gbG9vayBmb3IgdGhlICJ1c2Ugc3RyaWN0IiBwcmFnbWEKLSAgICAgICAg
aWYgKGlzUHJvZ3JhbSkgewotICAgICAgICAgICAgaXNTdHJpY3QgPSBpc1N0cmljdFByYWdtYShu
b2RlLmJvZHlbMF0pIHx8IGlzUGFyZW50U3RyaWN0OwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaXNTdHJpY3QgPSBpc1N0cmljdFByYWdtYShub2RlLmJvZHkuYm9keVswXSkgfHwgaXNQ
YXJlbnRTdHJpY3Q7Ci0gICAgICAgIH0KLQotICAgICAgICBzY29wZXMucHVzaChpc1N0cmljdCk7
Ci0KLSAgICAgICAgLy8gbmV2ZXIgd2FybiBpZiB0aGUgcGFyZW50IGlzIHN0cmljdCBvciB0aGUg
ZnVuY3Rpb24gaXMgc3RyaWN0Ci0gICAgICAgIGlmICghaXNQYXJlbnRTdHJpY3QgJiYgIWlzU3Ry
aWN0ICYmIGlzUGFyZW50R2xvYmFsKSB7Ci0gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiTWlzc2luZyBcInVzZSBzdHJpY3RcIiBzdGF0ZW1lbnQuIik7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBXaGVuIHlvdSBleGl0IGEgc2NvcGUsIHBvcCBvZmYgdGhlIHRv
cCBzY29wZSBhbmQgc2VlIGlmIGl0J3MgdHJ1ZSBvcgotICAgICAqIGZhbHNlLgotICAgICAqIEBy
ZXR1cm5zIHt2b2lkfQotICAgICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gZXhp
dFNjb3BlKCkgewotICAgICAgICBzY29wZXMucG9wKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsK
LQotICAgICAgICAiUHJvZ3JhbSI6IGVudGVyU2NvcGUsCi0gICAgICAgICJGdW5jdGlvbkRlY2xh
cmF0aW9uIjogZW50ZXJTY29wZSwKLSAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGVudGVy
U2NvcGUsCi0KLSAgICAgICAgIlByb2dyYW06ZXhpdCI6IGV4aXRTY29wZSwKLSAgICAgICAgIkZ1
bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGV4aXRTY29wZSwKLSAgICAgICAgIkZ1bmN0aW9uRXhw
cmVzc2lvbjpleGl0IjogZXhpdFNjb3BlCi0gICAgfTsKLQotfTsKLQotfSx7fV0sMTQzOltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxl
IHRvIGZsYWcgY29tcGFyaXNvbnMgdG8gdGhlIHZhbHVlIE5hTgotICogQGF1dGhvciBKYW1lcyBB
bGxhcmRpY2UKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0
aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0gICAgICAg
ICJCaW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICBpZiAo
IS9eW3wmXl0kLy50ZXN0KG5vZGUub3BlcmF0b3IpICYmIG5vZGUubGVmdC5uYW1lID09PSAiTmFO
IiB8fCBub2RlLnJpZ2h0Lm5hbWUgPT09ICJOYU4iKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIlVzZSB0aGUgaXNOYU4gZnVuY3Rpb24gdG8gY29tcGFyZSB3aXRoIE5h
Ti4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDE0
NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZp
ZXcgVmFsaWRhdGVzIEpTRG9jIGNvbW1lbnRzIGFyZSBzeW50YWN0aWNhbGx5IGNvcnJlY3QKLSAq
IEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gUmVxdWlyZW1lbnRzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi12YXIgZG9jdHJpbmUgPSByZXF1aXJlKCJkb2N0cmluZSIpOwotCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHZhciBvcHRpb25z
ID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9LAotICAgICAgICBwcmVmZXIgPSBvcHRpb25zLnBy
ZWZlciB8fCB7fSwKLQotICAgICAgICAvLyB0aGVzZSBib3RoIGRlZmF1bHQgdG8gdHJ1ZSwgc28g
eW91IGhhdmUgdG8gZXhwbGljaXRseSBtYWtlIHRoZW0gZmFsc2UKLSAgICAgICAgcmVxdWlyZVJl
dHVybiA9IG9wdGlvbnMucmVxdWlyZVJldHVybiA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWUsCi0g
ICAgICAgIHJlcXVpcmVQYXJhbURlc2NyaXB0aW9uID0gb3B0aW9ucy5yZXF1aXJlUGFyYW1EZXNj
cmlwdGlvbiA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gICAgLy8gSGVscGVycwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIFVz
aW5nIGEgc3RhY2sgdG8gc3RvcmUgaWYgYSBmdW5jdGlvbiByZXR1cm5zIG9yIG5vdCAoaGFuZGxp
bmcgbmVzdGVkIGZ1bmN0aW9ucykKLSAgICB2YXIgZm5zID0gW107Ci0KLSAgICAvKioKLSAgICAg
KiBXaGVuIHBhcnNpbmcgYSBuZXcgZnVuY3Rpb24sIHN0b3JlIGl0IGluIG91ciBmdW5jdGlvbiBz
dGFjay4KLSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwot
ICAgIGZ1bmN0aW9uIHN0YXJ0RnVuY3Rpb24oKSB7Ci0gICAgICAgIGZucy5wdXNoKHtyZXR1cm5Q
cmVzZW50OiBmYWxzZX0pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluZGljYXRlIHRoYXQg
cmV0dXJuIGhhcyBiZWVuIGZvdW5kIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgotICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgcmV0dXJuIG5vZGUuCi0gICAgICogQHJldHVybnMge3Zv
aWR9Ci0gICAgICogQHByaXZhdGUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBhZGRSZXR1cm4obm9k
ZSkgewotICAgICAgICB2YXIgZnVuY3Rpb25TdGF0ZSA9IGZuc1tmbnMubGVuZ3RoIC0gMV07Ci0K
LSAgICAgICAgaWYgKGZ1bmN0aW9uU3RhdGUgJiYgbm9kZS5hcmd1bWVudCAhPT0gbnVsbCkgewot
ICAgICAgICAgICAgZnVuY3Rpb25TdGF0ZS5yZXR1cm5QcmVzZW50ID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFZhbGlkYXRlIHRoZSBKU0RvYyBub2RlIGFuZCBv
dXRwdXQgd2FybmluZ3MgaWYgYW55dGhpbmcgaXMgd3JvbmcuCi0gICAgICogQHBhcmFtIHtBU1RO
b2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVjay4KLSAgICAgKiBAcmV0dXJucyB7dm9pZH0K
LSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIGZ1bmN0aW9uIGNoZWNrSlNEb2Mobm9kZSkg
ewotICAgICAgICB2YXIganNkb2NOb2RlID0gY29udGV4dC5nZXRKU0RvY0NvbW1lbnQobm9kZSks
Ci0gICAgICAgICAgICBmdW5jdGlvbkRhdGEgPSBmbnMucG9wKCksCi0gICAgICAgICAgICBoYXNS
ZXR1cm5zID0gZmFsc2UsCi0gICAgICAgICAgICBoYXNDb25zdHJ1Y3RvciA9IGZhbHNlLAotICAg
ICAgICAgICAgcGFyYW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKSwKLSAgICAgICAgICAgIGpzZG9j
OwotCi0gICAgICAgIC8vIG1ha2Ugc3VyZSBvbmx5IHRvIHZhbGlkYXRlIEpTRG9jIGNvbW1lbnRz
Ci0gICAgICAgIGlmIChqc2RvY05vZGUpIHsKLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICAgICAgICBqc2RvYyA9IGRvY3RyaW5lLnBhcnNlKGpzZG9jTm9kZS52YWx1ZSwgewotICAgICAg
ICAgICAgICAgICAgICBzdHJpY3Q6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgIHVud3JhcDog
dHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgc2xvcHB5OiB0cnVlCi0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChleCkgewotCi0gICAgICAgICAgICAgICAgaWYgKC9i
cmFjZXMvaS50ZXN0KGV4Lm1lc3NhZ2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KGpzZG9jTm9kZSwgIkpTRG9jIHR5cGUgbWlzc2luZyBicmFjZS4iKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChqc2Rv
Y05vZGUsICJKU0RvYyBzeW50YXggZXJyb3IuIik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBqc2RvYy50
YWdzLmZvckVhY2goZnVuY3Rpb24odGFnKSB7Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHRh
Zy50aXRsZSkgewotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgInBhcmFtIjoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghdGFnLnR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJNaXNzaW5nIEpTRG9jIHBhcmFtZXRlciB0
eXBlIGZvciAne3tuYW1lfX0nLiIsIHsgbmFtZTogdGFnLm5hbWUgfSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFnLmRlc2NyaXB0
aW9uICYmIHJlcXVpcmVQYXJhbURlc2NyaXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiTWlzc2luZyBKU0RvYyBwYXJhbWV0ZXIg
ZGVzY3JpcHRpb24gZm9yICd7e25hbWV9fScuIiwgeyBuYW1lOiB0YWcubmFtZSB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFt
c1t0YWcubmFtZV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChqc2RvY05vZGUsICJEdXBsaWNhdGUgSlNEb2MgcGFyYW1ldGVyICd7e25hbWV9fScuIiwgeyBu
YW1lOiB0YWcubmFtZSB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFn
Lm5hbWUuaW5kZXhPZigiLiIpID09PSAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbXNbdGFnLm5hbWVdID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgInJl
dHVybiI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgInJldHVybnMiOgotICAgICAgICAgICAg
ICAgICAgICAgICAgaGFzUmV0dXJucyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghcmVxdWlyZVJldHVybiAmJiAhZnVuY3Rpb25EYXRhLnJldHVyblByZXNlbnQgJiYgdGFn
LnR5cGUubmFtZSAhPT0gInZvaWQiICYmIHRhZy50eXBlLm5hbWUgIT09ICJ1bmRlZmluZWQiKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAi
VW5leHBlY3RlZCBAIiArIHRhZy50aXRsZSArICIgdGFnOyBmdW5jdGlvbiBoYXMgbm8gcmV0dXJu
IHN0YXRlbWVudC4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWcudHlwZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJNaXNzaW5nIEpTRG9jIHJl
dHVybiB0eXBlLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0YWcudHlwZS5uYW1lICE9PSAidm9pZCIgJiYgIXRhZy5k
ZXNjcmlwdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChqc2RvY05vZGUsICJNaXNzaW5nIEpTRG9jIHJldHVybiBkZXNjcmlwdGlvbi4iKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGNh
c2UgImNvbnN0cnVjdG9yIjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NvbnN0cnVjdG9y
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAg
ICAgICAgIC8vIG5vIGRlZmF1bHQKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAvLyBjaGVjayB0YWcgcHJlZmVyZW5jZXMKLSAgICAgICAgICAgICAgICBpZiAocHJlZmVyLmhh
c093blByb3BlcnR5KHRhZy50aXRsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQoanNkb2NOb2RlLCAiVXNlIEB7e25hbWV9fSBpbnN0ZWFkLiIsIHsgbmFtZTogcHJlZmVy
W3RhZy50aXRsZV0gfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGZ1bmN0aW9ucyBtaXNzaW5nIEByZXR1cm5zCi0gICAg
ICAgICAgICBpZiAoIWhhc1JldHVybnMgJiYgIWhhc0NvbnN0cnVjdG9yKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJlcXVpcmVSZXR1cm4gfHwgZnVuY3Rpb25EYXRhLnJldHVyblByZXNlbnQpIHsK
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiTWlzc2luZyBK
U0RvYyBAcmV0dXJucyBmb3IgZnVuY3Rpb24uIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBjaGVjayB0aGUgcGFyYW1ldGVycwotICAgICAgICAg
ICAgdmFyIGpzZG9jUGFyYW1zID0gT2JqZWN0LmtleXMocGFyYW1zKTsKLQotICAgICAgICAgICAg
bm9kZS5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihwYXJhbSwgaSkgewotICAgICAgICAgICAgICAg
IHZhciBuYW1lID0gcGFyYW0ubmFtZTsKLQotICAgICAgICAgICAgICAgIGlmIChqc2RvY1BhcmFt
c1tpXSAmJiAobmFtZSAhPT0ganNkb2NQYXJhbXNbaV0pKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIkV4cGVjdGVkIEpTRG9jIGZvciAne3tuYW1lfX0n
IGJ1dCBmb3VuZCAne3tqc2RvY05hbWV9fScuIiwgewotICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZTogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGpzZG9jTmFtZToganNkb2NQYXJh
bXNbaV0KLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICghcGFyYW1zW25hbWVdKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpz
ZG9jTm9kZSwgIk1pc3NpbmcgSlNEb2MgZm9yIHBhcmFtZXRlciAne3tuYW1lfX0nLiIsIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUKLSAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgfQotCi0gICAg
fQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYwotICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24i
OiBzdGFydEZ1bmN0aW9uLAotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVu
Y3Rpb24sCi0gICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6IGNoZWNrSlNEb2MsCi0g
ICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBjaGVja0pTRG9jLAotICAgICAgICAi
UmV0dXJuU3RhdGVtZW50IjogYWRkUmV0dXJuCi0gICAgfTsKLQotfTsKLQotfSx7ImRvY3RyaW5l
Ijo0fV0sMTQ1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZp
bGVvdmVydmlldyBFbnN1cmVzIHRoYXQgdGhlIHJlc3VsdHMgb2YgdHlwZW9mIGFyZSBjb21wYXJl
ZCBhZ2FpbnN0IGEgdmFsaWQgc3RyaW5nCi0gKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMK
LSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBE
ZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHZhciBWQUxJRF9UWVBFUyA9IFsic3ltYm9sIiwgInVu
ZGVmaW5lZCIsICJvYmplY3QiLCAiYm9vbGVhbiIsICJudW1iZXIiLCAic3RyaW5nIiwgImZ1bmN0
aW9uIl0sCi0gICAgICAgIE9QRVJBVE9SUyA9IFsiPT0iLCAiPT09IiwgIiE9IiwgIiE9PSJdOwot
Ci0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYwotICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIlVuYXJ5RXhwcmVzc2lvbiI6IGZ1
bmN0aW9uIChub2RlKSB7Ci0gICAgICAgICAgICB2YXIgcGFyZW50LCBzaWJsaW5nOwotCi0gICAg
ICAgICAgICBpZiAobm9kZS5vcGVyYXRvciA9PT0gInR5cGVvZiIpIHsKLSAgICAgICAgICAgICAg
ICBwYXJlbnQgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLnBvcCgpOwotCi0gICAgICAgICAgICAg
ICAgaWYgKHBhcmVudC50eXBlID09PSAiQmluYXJ5RXhwcmVzc2lvbiIgJiYgT1BFUkFUT1JTLmlu
ZGV4T2YocGFyZW50Lm9wZXJhdG9yKSAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgc2li
bGluZyA9IHBhcmVudC5sZWZ0ID09PSBub2RlID8gcGFyZW50LnJpZ2h0IDogcGFyZW50LmxlZnQ7
Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmcudHlwZSA9PT0gIkxpdGVyYWwiICYm
IFZBTElEX1RZUEVTLmluZGV4T2Yoc2libGluZy52YWx1ZSkgPT09IC0xKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChzaWJsaW5nLCAiSW52YWxpZCB0eXBlb2YgY29t
cGFyaXNvbiB2YWx1ZSIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9OwotCi19OwotCi19LHt9XSwxNDY6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3
IFJ1bGUgdG8gZW5mb3JjZSB2YXIgZGVjbGFyYXRpb25zIGFyZSBvbmx5IGF0IHRoZSB0b3Agb2Yg
YSBmdW5jdGlvbi4KLSAqIEBhdXRob3IgRGFubnkgRnJpdHoKLSAqIEBhdXRob3IgR3lhbmRlZXAg
U2luZ2gKLSAqIEBjb3B5cmlnaHQgMjAxNCBEYW5ueSBGcml0ei4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIEBjb3B5cmlnaHQgMjAxNCBHeWFuZGVlcCBTaW5naC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVs
ZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uIChjb250ZXh0KSB7Ci0gICAgdmFyIGVycm9yTWVzc2FnZSA9ICJBbGwgXCJ2YXJc
IiBkZWNsYXJhdGlvbnMgbXVzdCBiZSBhdCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbiBzY29wZS4i
OwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEhlbHBlcnMKLSAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBh
bnkgbm9kZQotICAgICAqIEByZXR1cm5zIHtCb29sZWFufSB3aGV0aGVyIHRoZSBnaXZlbiBub2Rl
IHN0cnVjdHVyYWxseSByZXByZXNlbnRzIGEgZGlyZWN0aXZlCi0gICAgICovCi0gICAgZnVuY3Rp
b24gbG9va3NMaWtlRGlyZWN0aXZlKG5vZGUpIHsKLSAgICAgICByZXR1cm4gbm9kZS50eXBlID09
PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgJiYKLSAgICAgICAgICAgbm9kZS5leHByZXNzaW9uLnR5
cGUgPT09ICJMaXRlcmFsIiAmJiB0eXBlb2Ygbm9kZS5leHByZXNzaW9uLnZhbHVlID09PSAic3Ry
aW5nIjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3Mgd2hldGhlciB0aGlzIHZhcmlh
YmxlIGlzIG9uIHRvcCBvZiB0aGUgYmxvY2sgYm9keQotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0g
bm9kZSAtIFRoZSBub2RlIHRvIGNoZWNrCi0gICAgICogQHBhcmFtIHtBU1ROb2RlW119IHN0YXRl
bWVudHMgLSBjb2xsZWN0aW9uIG9mIEFTVE5vZGVzIGZvciB0aGUgcGFyZW50IG5vZGUgYmxvY2sK
LSAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB2YXIgaXMgb24gdG9wIG90aGVyd2lz
ZSBmYWxzZQotICAgICAqLwotICAgIGZ1bmN0aW9uIGlzVmFyT25Ub3AgKG5vZGUsIHN0YXRlbWVu
dHMpIHsKLSAgICAgICAgdmFyIGkgPSAwLCBsID0gc3RhdGVtZW50cy5sZW5ndGg7Ci0KLSAgICAg
ICAgLy8gc2tpcCBvdmVyIGRpcmVjdGl2ZXMKLSAgICAgICAgZm9yICg7IGkgPCBsOyArK2kpIHsK
LSAgICAgICAgICAgIGlmICghbG9va3NMaWtlRGlyZWN0aXZlKHN0YXRlbWVudHNbaV0pKSB7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBmb3IgKDsgaSA8IGw7ICsraSkgewotICAgICAgICAgICAgaWYgKHN0YXRlbWVudHNbaV0udHlw
ZSAhPT0gIlZhcmlhYmxlRGVjbGFyYXRpb24iKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0YXRlbWVudHNbaV0gPT09IG5v
ZGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyB3aGV0aGVyIHZhcmlhYmxlIGlz
IG9uIHRvcCBhdCB0aGUgZ2xvYmFsIGxldmVsCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2Rl
IC0gVGhlIG5vZGUgdG8gY2hlY2sKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmVudCAtIFBh
cmVudCBvZiB0aGUgbm9kZQotICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIGZ1
bmN0aW9uIGdsb2JhbFZhckNoZWNrIChub2RlLCBwYXJlbnQpIHsKLSAgICAgICAgaWYgKCFpc1Zh
ck9uVG9wKG5vZGUsIHBhcmVudC5ib2R5KSkgewotICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAq
IENoZWNrcyB3aGV0aGVyIHZhcmlhYmxlIGlzIG9uIHRvcCBhdCBmdW5jdGlvbmFsIGJsb2NrIHNj
b3BlIGxldmVsCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gY2hl
Y2sKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmVudCAtIFBhcmVudCBvZiB0aGUgbm9kZQot
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gZ3JhbmRQYXJlbnQgLSBQYXJlbnQgb2YgdGhlIG5vZGUn
cyBwYXJlbnQKLSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBi
bG9ja1Njb3BlVmFyQ2hlY2sgKG5vZGUsIHBhcmVudCwgZ3JhbmRQYXJlbnQpIHsKLSAgICAgICAg
aWYgKCEoKGdyYW5kUGFyZW50LnR5cGUgPT09ICJGdW5jdGlvbkRlY2xhcmF0aW9uIgotICAgICAg
ICAgICAgfHwgZ3JhbmRQYXJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIpCi0gICAg
ICAgICAgICAmJiBwYXJlbnQudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50IgotICAgICAgICAgICAg
JiYgaXNWYXJPblRvcChub2RlLCBwYXJlbnQuYm9keSkpKSB7Ci0gICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYyBBUEkKLSAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSAgICByZXR1cm4gewotICAgICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IGZ1bmN0
aW9uIChub2RlKSB7Ci0gICAgICAgICAgICB2YXIgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNl
c3RvcnMoKTsKLSAgICAgICAgICAgIHZhciBwYXJlbnQgPSBhbmNlc3RvcnMucG9wKCk7Ci0gICAg
ICAgICAgICB2YXIgZ3JhbmRQYXJlbnQgPSBhbmNlc3RvcnMucG9wKCk7Ci0KLSAgICAgICAgICAg
IGlmIChub2RlLmtpbmQgPT09ICJ2YXIiKSB7Ly8gY2hlY2sgdmFyaWFibGUgaXMgYHZhcmAgdHlw
ZSBhbmQgbm90IGBsZXRgIG9yIGBjb25zdGAKLSAgICAgICAgICAgICAgICBpZiAocGFyZW50LnR5
cGUgPT09ICJQcm9ncmFtIikgey8vIFRoYXQgbWVhbnMgaXRzIGEgZ2xvYmFsIHZhcmlhYmxlCi0g
ICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhckNoZWNrKG5vZGUsIHBhcmVudCk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2tTY29wZVZhckNoZWNr
KG5vZGUsIHBhcmVudCwgZ3JhbmRQYXJlbnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDE0NzpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFn
IHdoZW4gSUlGRSBpcyBub3Qgd3JhcHBlZCBpbiBwYXJlbnMKLSAqIEBhdXRob3IgSWx5YSBWb2xv
ZGluCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250
ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIHN0eWxlID0gY29udGV4dC5vcHRp
b25zWzBdIHx8ICJvdXRzaWRlIjsKLQotICAgIGZ1bmN0aW9uIHdyYXBwZWQobm9kZSkgewotICAg
ICAgICB2YXIgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSksCi0g
ICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9kZSk7Ci0gICAg
ICAgIHJldHVybiBwcmV2aW91c1Rva2VuICYmIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAm
JgotICAgICAgICAgICAgbmV4dFRva2VuICYmIG5leHRUb2tlbi52YWx1ZSA9PT0gIikiOwotICAg
IH0KLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZnVuY3Rpb24o
bm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICJGdW5jdGlvbkV4
cHJlc3Npb24iKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNhbGxFeHByZXNzaW9uV3JhcHBlZCA9
IHdyYXBwZWQobm9kZSksCi0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uRXhwcmVzc2lvbldy
YXBwZWQgPSB3cmFwcGVkKG5vZGUuY2FsbGVlKTsKLQotICAgICAgICAgICAgICAgIGlmICghY2Fs
bEV4cHJlc3Npb25XcmFwcGVkICYmICFmdW5jdGlvbkV4cHJlc3Npb25XcmFwcGVkKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJXcmFwIGFuIGltbWVkaWF0ZSBm
dW5jdGlvbiBpbnZvY2F0aW9uIGluIHBhcmVudGhlc2VzLiIpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc3R5bGUgPT09ICJpbnNpZGUiICYmICFmdW5jdGlvbkV4cHJlc3Npb25XcmFwcGVk
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJXcmFwIG9ubHkg
dGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gaW4gcGFyZW5zLiIpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc3R5bGUgPT09ICJvdXRzaWRlIiAmJiAhY2FsbEV4cHJlc3Npb25XcmFwcGVkKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNb3ZlIHRoZSBpbnZv
Y2F0aW9uIGludG8gdGhlIHBhcmVucyB0aGF0IGNvbnRhaW4gdGhlIGZ1bmN0aW9uLiIpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0K
LX0se31dLDE0ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gcmVnZXggbGl0ZXJhbHMgYXJlIG5vdCB3cmFw
cGVkIGluIHBhcmVucwotICogQGF1dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2
YWxsLmNvbT4KLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0
aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0KLSAgICAg
ICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSBj
b250ZXh0LmdldEZpcnN0VG9rZW4obm9kZSksCi0gICAgICAgICAgICAgICAgbm9kZVR5cGUgPSB0
b2tlbi50eXBlLAotICAgICAgICAgICAgICAgIHNvdXJjZSwKLSAgICAgICAgICAgICAgICBncmFu
ZHBhcmVudCwKLSAgICAgICAgICAgICAgICBhbmNlc3RvcnM7Ci0KLSAgICAgICAgICAgIGlmIChu
b2RlVHlwZSA9PT0gIlJlZ3VsYXJFeHByZXNzaW9uIikgewotICAgICAgICAgICAgICAgIHNvdXJj
ZSA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSk7Ci0gICAgICAgICAgICAgICAgYW5jZXN0
b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKTsKLSAgICAgICAgICAgICAgICBncmFuZHBhcmVu
dCA9IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMV07Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iICYmIGdyYW5kcGFyZW50
Lm9iamVjdCA9PT0gbm9kZSAmJgotICAgICAgICAgICAgICAgICAgICAoIXNvdXJjZSB8fCBzb3Vy
Y2UudmFsdWUgIT09ICIoIikpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIldyYXAgdGhlIHJlZ2V4cCBsaXRlcmFsIGluIHBhcmVucyB0byBkaXNhbWJpZ3VhdGUg
dGhlIHNsYXNoLiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH07Ci0KLX07Ci0KLX0se31dLDE0OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byByZXF1aXJlIG9yIGRpc2FsbG93
IHlvZGEgY29tcGFyaXNvbnMKLSAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKLSAqLwotInVz
ZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9u
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChj
b250ZXh0KSB7Ci0KLSAgICAvLyBEZWZhdWx0IHRvICJuZXZlciIgKCFhbHdheXMpIGlmIG5vIG9w
dGlvbgotCi0gICAgdmFyIGFsd2F5cyA9IChjb250ZXh0Lm9wdGlvbnNbMF0gPT09ICJhbHdheXMi
KTsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0gICAgLyoqCi0gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIG9w
ZXJhdG9yIGlzIGEgY29tcGFyaXNvbiBvcGVyYXRvci4KLSAgICAgKiBAcGFyYW0ge1N0cmluZ30g
b3BlcmF0b3IgVGhlIG9wZXJhdG9yIHRvIGNoZWNrLgotICAgICAqIEByZXR1cm5zIHtCb29sZWFu
fSBXaGV0aGVyIG9yIG5vdCBpdCBpcyBhIGNvbXBhcmlzb24gb3BlcmF0b3IuCi0gICAgICovCi0g
ICAgZnVuY3Rpb24gaXNDb21wYXJpc29uT3BlcmF0b3Iob3BlcmF0b3IpIHsKLSAgICAgICAgcmV0
dXJuICgvXig9PXw9PT18IT18IT09fDx8Pnw8PXw+PSkkLykudGVzdChvcGVyYXRvcik7Ci0gICAg
fQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYwotICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24i
OiBmdW5jdGlvbiAobm9kZSkgewotCi0gICAgICAgICAgICBpZiAoYWx3YXlzKSB7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBDb21wYXJpc29ucyBtdXN0IGFsd2F5cyBiZSB5b2RhLXN0eWxlOiBpZiAo
ImJsdWUiID09PSBjb2xvcikKLQotICAgICAgICAgICAgICAgIGlmIChub2RlLnJpZ2h0LnR5cGUg
PT09ICJMaXRlcmFsIiAmJiBpc0NvbXBhcmlzb25PcGVyYXRvcihub2RlLm9wZXJhdG9yKSkgewot
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgbGl0ZXJh
bCB0byBiZSBvbiB0aGUgbGVmdCBzaWRlIG9mICIgKyBub2RlLm9wZXJhdG9yICsgIi4iKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBDb21wYXJpc29ucyBtdXN0IG5ldmVyIGJlIHlvZGEtc3R5bGUgKGRlZmF1bHQpCi0KLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBpc0NvbXBh
cmlzb25PcGVyYXRvcihub2RlLm9wZXJhdG9yKSkgewotICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgbGl0ZXJhbCB0byBiZSBvbiB0aGUgcmlnaHQgc2lk
ZSBvZiAiICsgbm9kZS5vcGVyYXRvciArICIuIik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgfTsKLQotfTsKLQotfSx7fV0sMTUwOltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBDb21t
b24gdXRpbGl0aWVzLgotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBQdWJsaWMgSW50ZXJmYWNlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLyoqCi0g
KiBNZXJnZXMgdHdvIG9iamVjdHMgdG9nZXRoZXIgYW5kIGFzc2lnbnMgdGhlIHJlc3VsdCB0byB0
aGUgaW5pdGlhbCBvYmplY3QuIENhbiBiZSB1c2VkIGZvciBzaGFsbG93IGNsb25pbmcuCi0gKiBA
cGFyYW0ge09iamVjdH0gdGFyZ2V0IG9mIHRoZSBjbG9uaW5nIG9wZXJhdGlvbgotICogQHBhcmFt
IHtPYmplY3R9IHNvdXJjZSBvYmplY3QKLSAqIEByZXR1cm5zIHt2b2lkfQotICovCi1leHBvcnRz
Lm1peGluID0gZnVuY3Rpb24odGFyZ2V0LCBzb3VyY2UpIHsKLSAgICBPYmplY3Qua2V5cyhzb3Vy
Y2UpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgIHRhcmdldFtrZXldID0gc291cmNl
W2tleV07Ci0gICAgfSk7Ci19OwotCi0vKioKLSAqIE1lcmdlcyB0d28gY29uZmlnIG9iamVjdHMu
IFRoaXMgd2lsbCBub3Qgb25seSBhZGQgbWlzc2luZyBrZXlzLCBidXQgd2lsbCBhbHNvIG1vZGlm
eSB2YWx1ZXMgdG8gbWF0Y2guCi0gKiBAcGFyYW0ge09iamVjdH0gYmFzZSBjb25maWcgb2JqZWN0
Ci0gKiBAcGFyYW0ge09iamVjdH0gY3VzdG9tIGNvbmZpZyBvYmplY3QuIE92ZXJyaWRlcyBpbiB0
aGlzIGNvbmZpZyBvYmplY3Qgd2lsbCB0YWtlIHByaW9yaXR5IG92ZXIgYmFzZS4KLSAqIEByZXR1
cm5zIHtPYmplY3R9IG1lcmdlZCBjb25maWcgb2JqZWN0LgotICovCi1leHBvcnRzLm1lcmdlQ29u
ZmlncyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhiYXNlLCBjdXN0b20pIHsKLQotICAgIE9iamVj
dC5rZXlzKGN1c3RvbSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7Ci0gICAgICAgIHZhciBwcm9w
ZXJ0eSA9IGN1c3RvbVtrZXldOwotCi0gICAgICAgIGlmIChrZXkgPT09ICJwbHVnaW5zIikgewot
ICAgICAgICAgICAgaWYgKCFiYXNlW2tleV0pIHsKLSAgICAgICAgICAgICAgICBiYXNlW2tleV0g
PSBbXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvcGVydHkuZm9yRWFjaChmdW5j
dGlvbiAocGx1Z2luKSB7Ci0gICAgICAgICAgICAgICAgLy8gc2tpcCBkdXBsaWNhdGVzCi0gICAg
ICAgICAgICAgICAgaWYgKGJhc2Vba2V5XS5pbmRleE9mKHBsdWdpbikgPT09IC0xKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGJhc2Vba2V5XS5wdXNoKHBsdWdpbik7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoQXJyYXkuaXNBcnJheShiYXNlW2tleV0pICYmICFBcnJheS5pc0FycmF5KHByb3Bl
cnR5KSAmJiB0eXBlb2YgcHJvcGVydHkgPT09ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICAvLyBh
c3N1bWUgdGhhdCB3ZSBhcmUganVzdCBvdmVycmlkaW5nIGZpcnN0IGF0dHJpYnV0ZQotICAgICAg
ICAgICAgYmFzZVtrZXldWzBdID0gY3VzdG9tW2tleV07Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSAib2JqZWN0IiAmJiAh
QXJyYXkuaXNBcnJheShwcm9wZXJ0eSkpIHsKLSAgICAgICAgICAgIC8vIGJhc2Vba2V5XSBtaWdo
dCBub3QgZXhpc3QsIHNvIGJlIGNhcmVmdWwgd2l0aCByZWN1cnNpb24gaGVyZQotICAgICAgICAg
ICAgYmFzZVtrZXldID0gbWVyZ2VDb25maWdzKGJhc2Vba2V5XSB8fCB7fSwgY3VzdG9tW2tleV0p
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYmFzZVtrZXldID0gY3VzdG9tW2tleV07
Ci0gICAgICAgIH0KLSAgICB9KTsKLQotICAgIHJldHVybiBiYXNlOwotfTsKLQotfSx7fV19LHt9
LFs5XSkoOSkKLX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbCBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAppbmRleCA5NzA0NTYxZDA2ZTE5NjQy
YWNmNjg5ZTAxYWE3OTYwMmRlOGRjYTY0Li4zYzliZjk0ZTVkYzI2ZjQ4OTU0NzNhNjBlZWVmNmQ0
ZTk2ODQzZTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9NYWluLmh0bWwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFp
bi5odG1sCkBAIC0zMjEsNyArMzIxLDYgQEAKICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1Njcmlw
dC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9Mb2NhbFNjcmlwdC5qcyI+
PC9zY3JpcHQ+CiAKLSAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0FuYWx5emVyTWVzc2FnZS5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9BcHBsaWNhdGlvbkNhY2hlRnJhbWUu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQXBwbGljYXRpb25DYWNoZU1h
bmlmZXN0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0JhY2tGb3J3YXJk
RW50cnkuanMiPjwvc2NyaXB0PgpAQCAtNzc0LDcgKzc3Myw2IEBACiAgICAgPHNjcmlwdCBzcmM9
IkNvbnRyb2xsZXJzL0Fubm90YXRvci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNv
bnRyb2xsZXJzL0NvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5qcyI+PC9zY3JpcHQ+CiAKLSAg
ICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvQXVkaXRNYW5hZ2VyLmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9CYXNpY0Jsb2NrQW5ub3Rh
dG9yLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01vZGVscy9BbmFseXplck1lc3NhZ2UuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQW5hbHl6ZXJNZXNzYWdlLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5MTI1NjBhY2RiZTE2ODY1Nzg4MjkxOTRjYzEzZjgyNDJlYzFhNjZl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9BbmFseXplck1lc3NhZ2UuanMKKysr
IC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotV0kuQW5hbHl6ZXJNZXNz
YWdlID0gY2xhc3MgQW5hbHl6ZXJNZXNzYWdlCi17Ci0gICAgY29uc3RydWN0b3Ioc291cmNlQ29k
ZUxvY2F0aW9uLCB0ZXh0LCBydWxlSWRlbnRpZmllcikKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUu
YXNzZXJ0KHNvdXJjZUNvZGVMb2NhdGlvbiBpbnN0YW5jZW9mIFdJLlNvdXJjZUNvZGVMb2NhdGlv
bik7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHR5cGVvZiB0ZXh0ID09PSAic3RyaW5nIik7Ci0K
LSAgICAgICAgdGhpcy5fc291cmNlQ29kZUxvY2F0aW9uID0gc291cmNlQ29kZUxvY2F0aW9uOwot
ICAgICAgICB0aGlzLl90ZXh0ID0gdGV4dDsKLSAgICAgICAgdGhpcy5fcnVsZUlkZW50aWZpZXIg
PSBydWxlSWRlbnRpZmllcjsKLSAgICB9Ci0KLSAgICAvLyBQdWJsaWMKLQotICAgIGdldCBzb3Vy
Y2VDb2RlTG9jYXRpb24oKSB7IHJldHVybiB0aGlzLl9zb3VyY2VDb2RlTG9jYXRpb247IH0KLSAg
ICBnZXQgc291cmNlQ29kZSgpIHsgcmV0dXJuIHRoaXMuX3NvdXJjZUNvZGVMb2NhdGlvbi5zb3Vy
Y2VDb2RlOyB9Ci0gICAgZ2V0IHRleHQoKSB7IHJldHVybiB0aGlzLl90ZXh0OyB9Ci0gICAgZ2V0
IHJ1bGVJZGVudGlmaWVyKCkgeyByZXR1cm4gdGhpcy5fcnVsZUlkZW50aWZpZXI7IH0KLX07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351333</attachid>
            <date>2018-10-01 18:31:43 -0700</date>
            <delta_ts>2018-10-01 19:27:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190162-20181001183142.patch</filename>
            <type>text/plain</type>
            <size>637175</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDY2YjI2NjEwNjUxNzFiNWIwNjcyN2NkM2IxOTMw
NThjNDRjYmI4NjMuLjAxNTJmZmRmYjI5N2IxZjQwZGY4YjQ2ZTNlZTg0OWM4ZmQ0NDU1ZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE4LTEwLTAxICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBy
ZW1vdmUgYW5hbHl6ZXIgbWFuYWdlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkwMTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29y
YXJvLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CisgICAgICAgICogVXNl
ckludGVyZmFjZS9CYXNlL01haW4uanM6CisgICAgICAgIChXSS5sb2FkZWQpOgorCisgICAgICAg
ICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFseXplck1hbmFnZXIuanM6IFJlbW92ZWQu
CisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvQW5hbHl6ZXJNZXNzYWdlLmpzOiBSZW1v
dmVkLgorCisgICAgICAgICogU2NyaXB0cy9jb3B5LXVzZXItaW50ZXJmYWNlLXJlc291cmNlcy5w
bDoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0VTTGludC9MSUNFTlNFOiBSZW1v
dmVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRVNMaW50L2VzbGludC5qczog
UmVtb3ZlZC4KKwogMjAxOC0wOS0yOCAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAK
ICAgICAgICAgUkVHUkVTU0lPTiAocjIzNjA5MSk6IENTU0tleXdvcmRDb21wbGV0aW9ucy5qcyBo
YXMgImNoZWNrb3V0IiBpbnN0ZWFkIG9mICJjaGVjay1vdXQiIGFzIGEgdmFsdWUgZm9yIC1hcHBs
ZS1wYXktYnV0dG9uLXR5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOTcxMTM2MTkwNzFmODQ5NDRlMjEwNWY5OWVh
NTAxMTUyMzM4MzNiMy4uMDNlNDY1ZDI5ZmIxYTBiYWRiOGM5M2U1ZjYyNGE4MDY4YTE5NmNkYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxOC0xMC0wMSAgRGV2aW4gUm91c3NvICA8ZHJv
dXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmVtb3ZlIGFuYWx5emVy
IG1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5MDE2MgorCisgICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KKworICAgICAg
ICAqIEluc3BlY3RvckdSZXNvdXJjZXMuY21ha2U6CisgICAgICAgIFJlbW92ZSBlc2xpbnQuCisK
IDIwMTgtMTAtMDEgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAg
IFtpT1NdIFNwZWNpYWwga2V5cyBhcmUgbWlzaWRlbnRpZmllZCBpbiBET00ga2V5Ym9hcmQgZXZl
bnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvU2NyaXB0cy9jb3B5LXVzZXIt
aW50ZXJmYWNlLXJlc291cmNlcy5wbCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL2Nv
cHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBsCmluZGV4IDAwYzM4YzFmMzE5Yzg5NDMxYTc5
NmVlNTU5YmU3YWJiMmQwMzZmZTQuLjI1ZDc1MGM5OTMwYWYzOGFlZDA5YTY4MjNmNjViYTlkMjVh
Y2M4YWUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL2NvcHktdXNl
ci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3Jp
cHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3VyY2VzLnBsCkBAIC0xNjUsMTQgKzE2NSwxMiBA
QCBteSAkcHJvdG9jb2xEaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIoJHRhcmdldFJlc291cmNlUGF0
aCwgJ1Byb3RvY29sJyk7CiBteSAkd29ya2Vyc0RpciA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdGFy
Z2V0UmVzb3VyY2VQYXRoLCAnV29ya2VycycpOwogbXkgJGNvZGVNaXJyb3JQYXRoID0gRmlsZTo6
U3BlYy0+Y2F0ZGlyKCR1aVJvb3QsICdFeHRlcm5hbCcsICdDb2RlTWlycm9yJyk7CiBteSAkZXNw
cmltYVBhdGggPSBGaWxlOjpTcGVjLT5jYXRkaXIoJHVpUm9vdCwgJ0V4dGVybmFsJywgJ0VzcHJp
bWEnKTsKLW15ICRlc2xpbnRQYXRoID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCR1aVJvb3QsICdFeHRl
cm5hbCcsICdFU0xpbnQnKTsKIG15ICR0aHJlZWpzUGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigk
dWlSb290LCAnRXh0ZXJuYWwnLCAndGhyZWUuanMnKTsKIAogJHdlYkluc3BlY3RvclVJQWRkaXRp
b25zRGlyID0gJndlYkluc3BlY3RvclVJQWRkaXRpb25zRGlyKCk7CiAKIG15ICRjb2RlTWlycm9y
TGljZW5zZSA9IHJlYWRMaWNlbnNlRmlsZShGaWxlOjpTcGVjLT5jYXRmaWxlKCRjb2RlTWlycm9y
UGF0aCwgJ0xJQ0VOU0UnKSk7CiBteSAkZXNwcmltYUxpY2Vuc2UgPSByZWFkTGljZW5zZUZpbGUo
RmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZXNwcmltYVBhdGgsICdMSUNFTlNFJykpOwotbXkgJGVzbGlu
dExpY2Vuc2UgPSByZWFkTGljZW5zZUZpbGUoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZXNsaW50UGF0
aCwgJ0xJQ0VOU0UnKSk7CiBteSAkdGhyZWVqc0xpY2Vuc2UgPSByZWFkTGljZW5zZUZpbGUoRmls
ZTo6U3BlYy0+Y2F0ZmlsZSgkdGhyZWVqc1BhdGgsICdMSUNFTlNFJykpOwogbWFrZV9wYXRoKCRw
cm90b2NvbERpciwgJHRhcmdldFJlc291cmNlUGF0aCk7CiAKQEAgLTMxOCwxNSArMzE2LDYgQEAg
aWYgKCRzaG91bGRDb21iaW5lTWFpbikgewogICAgICAgICctLW91dHB1dC1kaXInLCAkZGVyaXZl
ZFNvdXJjZXNEaXIsCiAgICAgICAgJy0tb3V0cHV0LXNjcmlwdC1uYW1lJywgJ0VzcHJpbWEuanMn
KTsKIAotICAgICMgQ29tYmluZSB0aGUgRVNMaW50IEphdmFTY3JpcHQgZmlsZXMgaW4gUHJvZHVj
dGlvbiBidWlsZHMgaW50byBhIHNpbmdsZSBmaWxlIChFU0xpbnQuanMpLgotICAgIHN5c3RlbSgk
cGVybCwgJGNvbWJpbmVSZXNvdXJjZXNDbWQsCi0gICAgICAgJy0taW5wdXQtZGlyJywgJ0V4dGVy
bmFsL0VTTGludCcsCi0gICAgICAgJy0taW5wdXQtaHRtbCcsICRkZXJpdmVkU291cmNlc01haW5I
VE1MLAotICAgICAgICctLWlucHV0LWh0bWwtZGlyJywgJHVpUm9vdCwKLSAgICAgICAnLS1kZXJp
dmVkLXNvdXJjZXMtZGlyJywgJGRlcml2ZWRTb3VyY2VzRGlyLAotICAgICAgICctLW91dHB1dC1k
aXInLCAkZGVyaXZlZFNvdXJjZXNEaXIsCi0gICAgICAgJy0tb3V0cHV0LXNjcmlwdC1uYW1lJywg
J0VTTGludC5qcycpOwotCiAgICAgIyBDb21iaW5lIHRoZSB0aHJlZS5qcyBKYXZhU2NyaXB0IGZp
bGVzIGluIFByb2R1Y3Rpb24gYnVpbGRzIGludG8gYSBzaW5nbGUgZmlsZSAoVGhyZWUuanMpLgog
ICAgIHN5c3RlbSgkcGVybCwgJGNvbWJpbmVSZXNvdXJjZXNDbWQsCiAgICAgICAgJy0taW5wdXQt
ZGlyJywgJ0V4dGVybmFsL3RocmVlLmpzJywKQEAgLTM3MiwxMCArMzYxLDYgQEAgaWYgKCRzaG91
bGRDb21iaW5lTWFpbikgewogICAgIG15ICR0YXJnZXRFc3ByaW1hSlMgPSBGaWxlOjpTcGVjLT5j
YXRmaWxlKCR0YXJnZXRSZXNvdXJjZVBhdGgsICdFc3ByaW1hLmpzJyk7CiAgICAgc2VlZEZpbGUo
JHRhcmdldEVzcHJpbWFKUywgJGVzcHJpbWFMaWNlbnNlKTsKIAotICAgICMgRXhwb3J0IHRoZSBs
aWNlbnNlIGludG8gRVNMaW50LmpzLgotICAgIG15ICR0YXJnZXRFU0xpbnRKUyA9IEZpbGU6OlNw
ZWMtPmNhdGZpbGUoJHRhcmdldFJlc291cmNlUGF0aCwgJ0VTTGludC5qcycpOwotICAgIHNlZWRG
aWxlKCR0YXJnZXRFU0xpbnRKUywgJGVzbGludExpY2Vuc2UpOwotCiAgICAgIyBFeHBvcnQgdGhl
IGxpY2Vuc2UgaW50byBUaHJlZS5qcy4KICAgICBteSAkdGFyZ2V0VGhyZWVqc0pTID0gRmlsZTo6
U3BlYy0+Y2F0ZmlsZSgkdGFyZ2V0UmVzb3VyY2VQYXRoLCAnVGhyZWUuanMnKTsKICAgICBzZWVk
RmlsZSgkdGFyZ2V0VGhyZWVqc0pTLCAkdGhyZWVqc0xpY2Vuc2UpOwpAQCAtMzk2LDEwICszODEs
NiBAQCBpZiAoJHNob3VsZENvbWJpbmVNYWluKSB7CiAgICAgbXkgJGRlcml2ZWRTb3VyY2VzRXNw
cmltYUpTID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZGVyaXZlZFNvdXJjZXNEaXIsICdFc3ByaW1h
LmpzJyk7CiAgICAgc3lzdGVtKHFxKCIkcHl0aG9uIiAiJGpzTWluU2NyaXB0IiA8ICIkZGVyaXZl
ZFNvdXJjZXNFc3ByaW1hSlMiID4+ICIkdGFyZ2V0RXNwcmltYUpTIikpIGFuZCBkaWUgIkZhaWxl
ZCB0byBtaW5pZnkgJGRlcml2ZWRTb3VyY2VzRXNwcmltYUpTOiAkISI7CiAKLSAgICAjIE1pbmlm
eSB0aGUgRVNMaW50LmpzIGZpbGUsIGFwcGVuZGluZyB0byB0aGUgbGljZW5zZSB0aGF0IHdhcyBl
eHBvcnRlZCBhYm92ZS4KLSAgICBteSAkZGVyaXZlZFNvdXJjZXNFU0xpbnRKUyA9IEZpbGU6OlNw
ZWMtPmNhdGZpbGUoJGRlcml2ZWRTb3VyY2VzRGlyLCAnRVNMaW50LmpzJyk7Ci0gICAgc3lzdGVt
KHFxKCIkcHl0aG9uIiAiJGpzTWluU2NyaXB0IiA8ICIkZGVyaXZlZFNvdXJjZXNFU0xpbnRKUyIg
Pj4gIiR0YXJnZXRFU0xpbnRKUyIpKSBhbmQgZGllICJGYWlsZWQgdG8gbWluaWZ5ICRkZXJpdmVk
U291cmNlc0VTTGludEpTOiAkISI7Ci0KICAgICAjIE1pbmlmeSB0aGUgVGhyZWUuanMgZmlsZSwg
YXBwZW5kaW5nIHRvIHRoZSBsaWNlbnNlIHRoYXQgd2FzIGV4cG9ydGVkIGFib3ZlLgogICAgIG15
ICRkZXJpdmVkU291cmNlc1RocmVlanNKUyA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJGRlcml2ZWRT
b3VyY2VzRGlyLCAnVGhyZWUuanMnKTsKICAgICBzeXN0ZW0ocXEoIiRweXRob24iICIkanNNaW5T
Y3JpcHQiIDwgIiRkZXJpdmVkU291cmNlc1RocmVlanNKUyIgPj4gIiR0YXJnZXRUaHJlZWpzSlMi
KSkgYW5kIGRpZSAiRmFpbGVkIHRvIG1pbmlmeSAkZGVyaXZlZFNvdXJjZXNUaHJlZWpzSlM6ICQh
IjsKQEAgLTQwNyw5ICszODgsNiBAQCBpZiAoJHNob3VsZENvbWJpbmVNYWluKSB7CiAgICAgIyBD
b3B5IG92ZXIgdGhlIEltYWdlcyBkaXJlY3RvcnkuCiAgICAgZGl0dG8oRmlsZTo6U3BlYy0+Y2F0
ZGlyKCR1aVJvb3QsICdJbWFnZXMnKSwgRmlsZTo6U3BlYy0+Y2F0ZGlyKCR0YXJnZXRSZXNvdXJj
ZVBhdGgsICdJbWFnZXMnKSk7CiAKLSAgICAjIFJlbW92ZSBFU0xpbnQgdW50aWwgbmVlZGVkOiA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM2NTE1PiBXZWIgSW5zcGVjdG9yOiBKYXZhU2NyaXB0IHNv
dXJjZSB0ZXh0IGVkaXRvciBzaG91bGQgaGF2ZSBhIGxpbnRlcgotICAgIHVubGluayAkdGFyZ2V0
RVNMaW50SlM7Ci0KICAgICAjIENvcHkgdGhlIFByb3RvY29sL0xlZ2FjeSBhbmQgV29ya2VycyBk
aXJlY3Rvcmllcy4KICAgICBkaXR0byhGaWxlOjpTcGVjLT5jYXRmaWxlKCR1aVJvb3QsICdQcm90
b2NvbCcsICdMZWdhY3knKSwgRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkcHJvdG9jb2xEaXIsICdMZWdh
Y3knKSk7CiAgICAgZGl0dG8oRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkdWlSb290LCAnV29ya2Vycycp
LCAkd29ya2Vyc0Rpcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9CYXNlL01haW4uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9CYXNlL01haW4uanMKaW5kZXggMDJlYmM2N2JkZDU1YmM4NzcyNGNjMDkyNjk5ZTQ5MTk4OGYy
YjEwMC4uNWJiZjUwNGUyM2I5NDBhZmM1Y2IwMGQ2MDMyMjkxM2JhMWMzMGVmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCisrKyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwpAQCAtMTE2
LDcgKzExNiw2IEBAIFdJLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLmNzc1N0eWxlTWFu
YWdlciA9IG5ldyBXSS5DU1NTdHlsZU1hbmFnZXI7CiAgICAgdGhpcy5sb2dNYW5hZ2VyID0gbmV3
IFdJLkxvZ01hbmFnZXI7CiAgICAgdGhpcy5pc3N1ZU1hbmFnZXIgPSBuZXcgV0kuSXNzdWVNYW5h
Z2VyOwotICAgIHRoaXMuYW5hbHl6ZXJNYW5hZ2VyID0gbmV3IFdJLkFuYWx5emVyTWFuYWdlcjsK
ICAgICB0aGlzLnJ1bnRpbWVNYW5hZ2VyID0gbmV3IFdJLlJ1bnRpbWVNYW5hZ2VyOwogICAgIHRo
aXMuaGVhcE1hbmFnZXIgPSBuZXcgV0kuSGVhcE1hbmFnZXI7CiAgICAgdGhpcy5tZW1vcnlNYW5h
Z2VyID0gbmV3IFdJLk1lbW9yeU1hbmFnZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFseXplck1hbmFnZXIuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFseXplck1hbmFn
ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZDE3YmM5ZjA5ZGU5Y2QyMzVi
MjE5ZTMzMTZmNjEyNWE5NjM4ZDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxl
cnMvQW5hbHl6ZXJNYW5hZ2VyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi1XSS5BbmFseXplck1hbmFnZXIgPSBjbGFzcyBBbmFseXplck1hbmFnZXIgZXh0
ZW5kcyBXSS5PYmplY3QKLXsKLSAgICBjb25zdHJ1Y3RvcigpCi0gICAgewotICAgICAgICBzdXBl
cigpOwotCi0gICAgICAgIHRoaXMuX2VzbGludENvbmZpZyA9IHsKLSAgICAgICAgICAgIGVudjog
ewotICAgICAgICAgICAgICAgICJicm93c2VyIjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAibm9k
ZSI6IGZhbHNlCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgZ2xvYmFsczogewotICAgICAg
ICAgICAgICAgICJkb2N1bWVudCI6IHRydWUKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBy
dWxlczogewotICAgICAgICAgICAgICAgICJjb25zaXN0ZW50LXJldHVybiI6IDIsCi0gICAgICAg
ICAgICAgICAgImN1cmx5IjogMCwKLSAgICAgICAgICAgICAgICAiZXFlcWVxIjogMCwKLSAgICAg
ICAgICAgICAgICAibmV3LXBhcmVucyI6IDAsCi0gICAgICAgICAgICAgICAgIm5vLWNvbW1hLWRh
bmdsZSI6IDAsCi0gICAgICAgICAgICAgICAgIm5vLWNvbnNvbGUiOiAwLAotICAgICAgICAgICAg
ICAgICJuby1jb25zdGFudC1jb25kaXRpb24iOiAwLAotICAgICAgICAgICAgICAgICJuby1leHRy
YS1iaW5kIjogMiwKLSAgICAgICAgICAgICAgICAibm8tZXh0cmEtc2VtaSI6IDIsCi0gICAgICAg
ICAgICAgICAgIm5vLXByb3RvIjogMCwKLSAgICAgICAgICAgICAgICAibm8tcmV0dXJuLWFzc2ln
biI6IDIsCi0gICAgICAgICAgICAgICAgIm5vLXRyYWlsaW5nLXNwYWNlcyI6IDIsCi0gICAgICAg
ICAgICAgICAgIm5vLXVuZGVyc2NvcmUtZGFuZ2xlIjogMCwKLSAgICAgICAgICAgICAgICAibm8t
dW51c2VkLWV4cHJlc3Npb25zIjogMiwKLSAgICAgICAgICAgICAgICAibm8td3JhcC1mdW5jIjog
MiwKLSAgICAgICAgICAgICAgICAic2VtaSI6IDIsCi0gICAgICAgICAgICAgICAgInNwYWNlLWlu
Zml4LW9wcyI6IDIsCi0gICAgICAgICAgICAgICAgInNwYWNlLXJldHVybi10aHJvdy1jYXNlIjog
MiwKLSAgICAgICAgICAgICAgICAic3RyaWN0IjogMCwKLSAgICAgICAgICAgICAgICAidmFsaWQt
dHlwZW9mIjogMgotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMuX3Nv
dXJjZUNvZGVNZXNzYWdlc01hcCA9IG5ldyBXZWFrTWFwOwotCi0gICAgICAgIFdJLlNvdXJjZUNv
ZGUuYWRkRXZlbnRMaXN0ZW5lcihXSS5Tb3VyY2VDb2RlLkV2ZW50LkNvbnRlbnREaWRDaGFuZ2Us
IHRoaXMuX2hhbmRsZVNvdXJjZUNvZGVDb250ZW50RGlkQ2hhbmdlLCB0aGlzKTsKLSAgICB9Ci0K
LSAgICAvLyBQdWJsaWMKLQotICAgIGdldEFuYWx5emVyTWVzc2FnZXNGb3JTb3VyY2VDb2RlKHNv
dXJjZUNvZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVz
b2x2ZSwgcmVqZWN0KSB7Ci0gICAgICAgICAgICB2YXIgYW5hbHl6ZXIgPSBXSS5BbmFseXplck1h
bmFnZXIuX3R5cGVBbmFseXplck1hcC5nZXQoc291cmNlQ29kZS50eXBlKTsKLSAgICAgICAgICAg
IGlmICghYW5hbHl6ZXIpIHsKLSAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCJUaGlz
IHJlc291cmNlIHR5cGUgY2Fubm90IGJlIGFuYWx5emVkLiIpKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VDb2Rl
TWVzc2FnZXNNYXAuaGFzKHNvdXJjZUNvZGUpKSB7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZSh0
aGlzLl9zb3VyY2VDb2RlTWVzc2FnZXNNYXAuZ2V0KHNvdXJjZUNvZGUpKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJp
ZXZlQW5hbHl6ZXJNZXNzYWdlcyhwcm9wZXJ0aWVzKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHZhciBhbmFseXplck1lc3NhZ2VzID0gW107Ci0gICAgICAgICAgICAgICAgdmFyIHJh
d0FuYWx5emVyTWVzc2FnZXMgPSBhbmFseXplci52ZXJpZnkoc291cmNlQ29kZS5jb250ZW50LCB0
aGlzLl9lc2xpbnRDb25maWcpOwotCi0gICAgICAgICAgICAgICAgLy8gUmF3IGxpbmUgYW5kIGNv
bHVtbiBudW1iZXJzIGFyZSBvbmUtYmFzZWQuIFNvdXJjZUNvZGVMb2NhdGlvbiBleHBlY3RzIHRo
ZW0gdG8gYmUgemVyby1iYXNlZCBzbyB3ZSBzdWJ0cmFjdCAxIGZyb20gZWFjaC4KLSAgICAgICAg
ICAgICAgICBmb3IgKHZhciByYXdBbmFseXplck1lc3NhZ2Ugb2YgcmF3QW5hbHl6ZXJNZXNzYWdl
cykKLSAgICAgICAgICAgICAgICAgICAgYW5hbHl6ZXJNZXNzYWdlcy5wdXNoKG5ldyBXSS5BbmFs
eXplck1lc3NhZ2UobmV3IFdJLlNvdXJjZUNvZGVMb2NhdGlvbihzb3VyY2VDb2RlLCByYXdBbmFs
eXplck1lc3NhZ2UubGluZSAtIDEsIHJhd0FuYWx5emVyTWVzc2FnZS5jb2x1bW4gLSAxKSwgcmF3
QW5hbHl6ZXJNZXNzYWdlLm1lc3NhZ2UsIHJhd0FuYWx5emVyTWVzc2FnZS5ydWxlSWQpKTsKLQot
ICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZUNvZGVNZXNzYWdlc01hcC5zZXQoc291cmNlQ29k
ZSwgYW5hbHl6ZXJNZXNzYWdlcyk7Ci0KLSAgICAgICAgICAgICAgICByZXNvbHZlKGFuYWx5emVy
TWVzc2FnZXMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzb3VyY2VDb2RlLnJlcXVl
c3RDb250ZW50KCkudGhlbihyZXRyaWV2ZUFuYWx5emVyTWVzc2FnZXMuYmluZCh0aGlzKSkuY2F0
Y2goaGFuZGxlUHJvbWlzZUV4Y2VwdGlvbik7Ci0gICAgICAgIH0uYmluZCh0aGlzKSk7Ci0gICAg
fQotCi0gICAgc291cmNlQ29kZUNhbkJlQW5hbHl6ZWQoc291cmNlQ29kZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBzb3VyY2VDb2RlLnR5cGUgPT09IFdJLlJlc291cmNlLlR5cGUuU2NyaXB0Owot
ICAgIH0KLQotICAgIC8vIFByaXZhdGUKLQotICAgIF9oYW5kbGVTb3VyY2VDb2RlQ29udGVudERp
ZENoYW5nZShldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBzb3VyY2VDb2RlID0gZXZlbnQudGFy
Z2V0OwotCi0gICAgICAgIC8vIFNpbmNlIHNvdXJjZUNvZGUgaGFzIGNoYW5nZWQsIHJlbW92ZSBp
dCBhbmQgaXRzIG1lc3NhZ2VzIGZyb20gdGhlIG1hcCBzbyBnZXRBbmFseXplck1lc3NhZ2VzRm9y
U291cmNlQ29kZSB3aWxsIGhhdmUgdG8gcmVhbmFseXplIHRoZSBuZXh0IHRpbWUgaXQgaXMgY2Fs
bGVkLgotICAgICAgICB0aGlzLl9zb3VyY2VDb2RlTWVzc2FnZXNNYXAuZGVsZXRlKHNvdXJjZUNv
ZGUpOwotICAgIH0KLX07Ci0KLVdJLkFuYWx5emVyTWFuYWdlci5fdHlwZUFuYWx5emVyTWFwID0g
bmV3IE1hcDsKLQotLy8gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzNjUxNT4gV2ViIEluc3BlY3Rv
cjogSmF2YVNjcmlwdCBzb3VyY2UgdGV4dCBlZGl0b3Igc2hvdWxkIGhhdmUgYSBsaW50ZXIKLS8v
IFdJLkFuYWx5emVyTWFuYWdlci5fdHlwZUFuYWx5emVyTWFwLnNldChXSS5SZXNvdXJjZS5UeXBl
LlNjcmlwdCwgZXNsaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0VTTGludC9MSUNFTlNFIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRVNMaW50L0xJQ0VOU0UKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQ1ZjA0NmZkY2U1ODJhYWZlNzRhZWRkMmFlNjQwYzZjN2E4NzdjNGUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRVNMaW50L0xJQ0VOU0UKKysrIC9kZXYv
bnVsbApAQCAtMSwxOSArMCwwIEBACi1Db3B5cmlnaHQgKGMpIDIwMTQgVEogSG9sb3dheWNodWsg
PHRqQHZpc2lvbi1tZWRpYS5jYT4KLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl
ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotb2YgdGhpcyBzb2Z0
d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyks
IHRvIGRlYWwKLWluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg
d2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gCi11c2UsIGNvcHksIG1vZGlmeSwgbWVy
Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwot
b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdh
cmUgaXMgZnVybmlzaGVkIHRvIGRvCi1zbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnM6Ci0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g
bm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotY29waWVzIG9yIHN1YnN0YW50aWFsIHBv
cnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJ
UycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLUlNUExJRUQsIElO
Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZLAotRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO
VC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi1BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF
IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi1MSUFCSUxJVFksIFdIRVRI
RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBG
Uk9NLAotT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT
RSBPUiBPVEhFUiBERUFMSU5HUyBJTgotVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRVNMaW50L2VzbGludC5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VTTGludC9lc2xp
bnQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMTIzYTJmNDk5NDhkODYwNDlh
ZGEzMmVhNTRjYjUzYjUxOGFiZTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
RVNMaW50L2VzbGludC5qcworKysgL2Rldi9udWxsCkBAIC0xLDE4MjIzICswLDAgQEAKLSFmdW5j
dGlvbihlKXtpZigib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2Yg
bW9kdWxlKW1vZHVsZS5leHBvcnRzPWUoKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZp
bmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLGUpO2Vsc2V7dmFyIGY7InVuZGVmaW5lZCIhPXR5cGVv
ZiB3aW5kb3c/Zj13aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Zj1nbG9iYWw6InVu
ZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiYoZj1zZWxmKSxmLmVzbGludD1lKCl9fShmdW5jdGlvbigp
e3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBlKHQsbixyKXtmdW5j
dGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09ImZ1
bmN0aW9uIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8s
ITApO3ZhciBmPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK28rIiciKTt0aHJvdyBm
LmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVsw
XS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/
bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBl
b2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28r
KylzKHJbb10pO3JldHVybiBzfSkoezE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
ewotbW9kdWxlLmV4cG9ydHM9ewotICAgICJidWlsdGluIjogewotICAgICAgICAiTmFOIjogZmFs
c2UsCi0gICAgICAgICJJbmZpbml0eSI6IGZhbHNlLAotICAgICAgICAidW5kZWZpbmVkIjogZmFs
c2UsCi0gICAgICAgICJldmFsIjogZmFsc2UsCi0KLSAgICAgICAgInBhcnNlRmxvYXQiOiBmYWxz
ZSwKLSAgICAgICAgInBhcnNlSW50IjogZmFsc2UsCi0gICAgICAgICJpc05hTiI6IGZhbHNlLAot
ICAgICAgICAiaXNGaW5pdGUiOiBmYWxzZSwKLQotICAgICAgICAiZGVjb2RlVVJJIjogZmFsc2Us
Ci0gICAgICAgICJkZWNvZGVVUklDb21wb25lbnQiOiBmYWxzZSwKLSAgICAgICAgImVuY29kZVVS
SSI6IGZhbHNlLAotICAgICAgICAiZW5jb2RlVVJJQ29tcG9uZW50IjogZmFsc2UsCi0KLSAgICAg
ICAgIk9iamVjdCI6IGZhbHNlLAotICAgICAgICAiRnVuY3Rpb24iOiBmYWxzZSwKLSAgICAgICAg
IkFycmF5IjogZmFsc2UsCi0gICAgICAgICJTdHJpbmciOiBmYWxzZSwKLSAgICAgICAgIkJvb2xl
YW4iOiBmYWxzZSwKLSAgICAgICAgIk1hcCI6IGZhbHNlLAotICAgICAgICAiTnVtYmVyIjogZmFs
c2UsCi0gICAgICAgICJEYXRlIjogZmFsc2UsCi0gICAgICAgICJSZWdFeHAiOiBmYWxzZSwKLSAg
ICAgICAgIkVycm9yIjogZmFsc2UsCi0gICAgICAgICJFdmFsRXJyb3IiOiBmYWxzZSwKLSAgICAg
ICAgIlJhbmdlRXJyb3IiOiBmYWxzZSwKLSAgICAgICAgIlJlZmVyZW5jZUVycm9yIjogZmFsc2Us
Ci0gICAgICAgICJTZXQiOiBmYWxzZSwKLSAgICAgICAgIlN5bnRheEVycm9yIjogZmFsc2UsCi0g
ICAgICAgICJUeXBlRXJyb3IiOiBmYWxzZSwKLSAgICAgICAgIlVSSUVycm9yIjogZmFsc2UsCi0g
ICAgICAgICJXZWFrTWFwIjogZmFsc2UsCi0gICAgICAgICJXZWFrU2V0IjogZmFsc2UsCi0KLSAg
ICAgICAgIkFycmF5QnVmZmVyIjogZmFsc2UsCi0gICAgICAgICJGbG9hdDMyQXJyYXkiOiBmYWxz
ZSwKLSAgICAgICAgIkZsb2F0NjRBcnJheSI6IGZhbHNlLAotICAgICAgICAiSW50MTZBcnJheSI6
IGZhbHNlLAotICAgICAgICAiSW50MzJBcnJheSI6IGZhbHNlLAotICAgICAgICAiSW50OEFycmF5
IjogZmFsc2UsCi0gICAgICAgICJVaW50MTZBcnJheSI6IGZhbHNlLAotICAgICAgICAiVWludDMy
QXJyYXkiOiBmYWxzZSwKLSAgICAgICAgIlVpbnQ4QXJyYXkiOiBmYWxzZSwKLSAgICAgICAgIlVp
bnQ4Q2xhbXBlZEFycmF5IjogZmFsc2UsCi0KLSAgICAgICAgIk1hdGgiOiBmYWxzZSwKLSAgICAg
ICAgIkpTT04iOiBmYWxzZSwKLQotICAgICAgICAidG9TdHJpbmciOiBmYWxzZSwKLSAgICAgICAg
Imhhc093blByb3BlcnR5IjogZmFsc2UsCi0gICAgICAgICJ2YWx1ZU9mIjogZmFsc2UsCi0gICAg
ICAgICJwcm9wZXJ0eUlzRW51bWVyYWJsZSI6IGZhbHNlLAotICAgICAgICAiY29uc3RydWN0b3Ii
OiBmYWxzZSwKLSAgICAgICAgImlzUHJvdG90eXBlT2YiOiBmYWxzZSwKLSAgICAgICAgInRvTG9j
YWxlU3RyaW5nIjogZmFsc2UKLSAgICB9LAotCi0gICAgImJyb3dzZXIiOiB7Ci0gICAgICAgICJn
bG9iYWxzIjogewotICAgICAgICAgICAgImFkZEV2ZW50TGlzdGVuZXIiOiBmYWxzZSwKLSAgICAg
ICAgICAgICJhcHBsaWNhdGlvbkNhY2hlIjogZmFsc2UsCi0gICAgICAgICAgICAiYXRvYiI6IGZh
bHNlLAotICAgICAgICAgICAgIkF1ZGlvIjogZmFsc2UsCi0gICAgICAgICAgICAiQmxvYiI6IGZh
bHNlLAotICAgICAgICAgICAgImJsdXIiOiBmYWxzZSwKLSAgICAgICAgICAgICJidG9hIjogZmFs
c2UsCi0gICAgICAgICAgICAiY2FuY2VsQW5pbWF0aW9uRnJhbWUiOiBmYWxzZSwKLSAgICAgICAg
ICAgICJjbGVhckludGVydmFsIjogZmFsc2UsCi0gICAgICAgICAgICAiY2xlYXJUaW1lb3V0Ijog
ZmFsc2UsCi0gICAgICAgICAgICAiY2xvc2UiOiBmYWxzZSwKLSAgICAgICAgICAgICJjbG9zZWQi
OiBmYWxzZSwKLSAgICAgICAgICAgICJjcnlwdG8iOiBmYWxzZSwKLSAgICAgICAgICAgICJEYXRh
VmlldyI6IGZhbHNlLAotICAgICAgICAgICAgImRlZmF1bHRTdGF0dXMiOiBmYWxzZSwKLSAgICAg
ICAgICAgICJkZXZpY2VQaXhlbFJhdGlvIjogZmFsc2UsCi0gICAgICAgICAgICAiZGlzcGF0Y2hF
dmVudCI6IGZhbHNlLAotICAgICAgICAgICAgImRvY3VtZW50IjogZmFsc2UsCi0gICAgICAgICAg
ICAiRE9NUGFyc2VyIjogZmFsc2UsCi0gICAgICAgICAgICAiRWxlbWVudCI6IGZhbHNlLAotICAg
ICAgICAgICAgIkZpbGVSZWFkZXIiOiBmYWxzZSwKLSAgICAgICAgICAgICJmaW5kIjogZmFsc2Us
Ci0gICAgICAgICAgICAiZm9jdXMiOiBmYWxzZSwKLSAgICAgICAgICAgICJGb3JtRGF0YSI6IGZh
bHNlLAotICAgICAgICAgICAgImZyYW1lRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgImZy
YW1lcyI6IGZhbHNlLAotICAgICAgICAgICAgImdldENvbXB1dGVkU3R5bGUiOiBmYWxzZSwKLSAg
ICAgICAgICAgICJnZXRTZWxlY3Rpb24iOiBmYWxzZSwKLSAgICAgICAgICAgICJoaXN0b3J5Ijog
ZmFsc2UsCi0gICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAg
ICAgICJIVE1MQmFzZUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MQm9keUVsZW1l
bnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MQlJFbGVtZW50IjogZmFsc2UsCi0gICAgICAg
ICAgICAiSFRNTEJ1dHRvbkVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MQ2FudmFz
RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxEaXJlY3RvcnlFbGVtZW50IjogZmFs
c2UsCi0gICAgICAgICAgICAiSFRNTERpdkVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJI
VE1MRExpc3RFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTEVsZW1lbnQiOiBmYWxz
ZSwKLSAgICAgICAgICAgICJIVE1MRmllbGRTZXRFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAg
ICAiSFRNTEZvbnRFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTEZvcm1FbGVtZW50
IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTEZyYW1lRWxlbWVudCI6IGZhbHNlLAotICAgICAg
ICAgICAgIkhUTUxGcmFtZVNldEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MSGVh
ZEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MSGVhZGluZ0VsZW1lbnQiOiBmYWxz
ZSwKLSAgICAgICAgICAgICJIVE1MSFJFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRN
TEh0bWxFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTElGcmFtZUVsZW1lbnQiOiBm
YWxzZSwKLSAgICAgICAgICAgICJIVE1MSW1hZ2VFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAg
ICAiSFRNTElucHV0RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxMYWJlbEVsZW1l
bnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MTGVnZW5kRWxlbWVudCI6IGZhbHNlLAotICAg
ICAgICAgICAgIkhUTUxMSUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MTGlua0Vs
ZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MTWFwRWxlbWVudCI6IGZhbHNlLAotICAg
ICAgICAgICAgIkhUTUxNZW51RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxNZXRh
RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxNb2RFbGVtZW50IjogZmFsc2UsCi0g
ICAgICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1M
T0xpc3RFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTE9wdEdyb3VwRWxlbWVudCI6
IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxPcHRpb25FbGVtZW50IjogZmFsc2UsCi0gICAgICAg
ICAgICAiSFRNTFBhcmFncmFwaEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MUGFy
YW1FbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTFByZUVsZW1lbnQiOiBmYWxzZSwK
LSAgICAgICAgICAgICJIVE1MUXVvdGVFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRN
TFNjcmlwdEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MU2VsZWN0RWxlbWVudCI6
IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxTdHlsZUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAg
ICAgICJIVE1MVGFibGVDYXB0aW9uRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxU
YWJsZUNlbGxFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTFRhYmxlQ29sRWxlbWVu
dCI6IGZhbHNlLAotICAgICAgICAgICAgIkhUTUxUYWJsZUVsZW1lbnQiOiBmYWxzZSwKLSAgICAg
ICAgICAgICJIVE1MVGFibGVSb3dFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVt
ZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSFRNTFRpdGxlRWxlbWVudCI6IGZhbHNlLAotICAg
ICAgICAgICAgIkhUTUxVTGlzdEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJIVE1MVmlk
ZW9FbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiSW1hZ2UiOiBmYWxzZSwKLSAgICAgICAg
ICAgICJpbmRleGVkREIiOiBmYWxzZSwKLSAgICAgICAgICAgICJpbm5lckhlaWdodCI6IGZhbHNl
LAotICAgICAgICAgICAgImlubmVyV2lkdGgiOiBmYWxzZSwKLSAgICAgICAgICAgICJJbnRsIjog
ZmFsc2UsCi0gICAgICAgICAgICAibGVuZ3RoIjogZmFsc2UsCi0gICAgICAgICAgICAibG9jYWxT
dG9yYWdlIjogZmFsc2UsCi0gICAgICAgICAgICAibG9jYXRpb24iOiBmYWxzZSwKLSAgICAgICAg
ICAgICJtYXRjaE1lZGlhIjogZmFsc2UsCi0gICAgICAgICAgICAiTWVzc2FnZUNoYW5uZWwiOiBm
YWxzZSwKLSAgICAgICAgICAgICJNZXNzYWdlRXZlbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJN
ZXNzYWdlUG9ydCI6IGZhbHNlLAotICAgICAgICAgICAgIm1vdmVCeSI6IGZhbHNlLAotICAgICAg
ICAgICAgIm1vdmVUbyI6IGZhbHNlLAotICAgICAgICAgICAgIk11dGF0aW9uT2JzZXJ2ZXIiOiBm
YWxzZSwKLSAgICAgICAgICAgICJuYW1lIjogZmFsc2UsCi0gICAgICAgICAgICAibmF2aWdhdG9y
IjogZmFsc2UsCi0gICAgICAgICAgICAiTm9kZSI6IGZhbHNlLAotICAgICAgICAgICAgIk5vZGVG
aWx0ZXIiOiBmYWxzZSwKLSAgICAgICAgICAgICJvbmJlZm9yZXVubG9hZCI6IHRydWUsCi0gICAg
ICAgICAgICAib25ibHVyIjogdHJ1ZSwKLSAgICAgICAgICAgICJvbmVycm9yIjogdHJ1ZSwKLSAg
ICAgICAgICAgICJvbmZvY3VzIjogdHJ1ZSwKLSAgICAgICAgICAgICJvbmxvYWQiOiB0cnVlLAot
ICAgICAgICAgICAgIm9ucmVzaXplIjogdHJ1ZSwKLSAgICAgICAgICAgICJvbnVubG9hZCI6IHRy
dWUsCi0gICAgICAgICAgICAib3BlbiI6IGZhbHNlLAotICAgICAgICAgICAgIm9wZW5EYXRhYmFz
ZSI6IGZhbHNlLAotICAgICAgICAgICAgIm9wZW5lciI6IGZhbHNlLAotICAgICAgICAgICAgIk9w
dGlvbiI6IGZhbHNlLAotICAgICAgICAgICAgIm91dGVySGVpZ2h0IjogZmFsc2UsCi0gICAgICAg
ICAgICAib3V0ZXJXaWR0aCI6IGZhbHNlLAotICAgICAgICAgICAgInBhZ2VYT2Zmc2V0IjogZmFs
c2UsCi0gICAgICAgICAgICAicGFnZVlPZmZzZXQiOiBmYWxzZSwKLSAgICAgICAgICAgICJwYXJl
bnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJwb3N0TWVzc2FnZSI6IGZhbHNlLAotICAgICAgICAg
ICAgInByaW50IjogZmFsc2UsCi0gICAgICAgICAgICAicmVtb3ZlRXZlbnRMaXN0ZW5lciI6IGZh
bHNlLAotICAgICAgICAgICAgInJlcXVlc3RBbmltYXRpb25GcmFtZSI6IGZhbHNlLAotICAgICAg
ICAgICAgInJlc2l6ZUJ5IjogZmFsc2UsCi0gICAgICAgICAgICAicmVzaXplVG8iOiBmYWxzZSwK
LSAgICAgICAgICAgICJzY3JlZW4iOiBmYWxzZSwKLSAgICAgICAgICAgICJzY3JlZW5YIjogZmFs
c2UsCi0gICAgICAgICAgICAic2NyZWVuWSI6IGZhbHNlLAotICAgICAgICAgICAgInNjcm9sbCI6
IGZhbHNlLAotICAgICAgICAgICAgInNjcm9sbGJhcnMiOiBmYWxzZSwKLSAgICAgICAgICAgICJz
Y3JvbGxCeSI6IGZhbHNlLAotICAgICAgICAgICAgInNjcm9sbFRvIjogZmFsc2UsCi0gICAgICAg
ICAgICAic2Nyb2xsWCI6IGZhbHNlLAotICAgICAgICAgICAgInNjcm9sbFkiOiBmYWxzZSwKLSAg
ICAgICAgICAgICJzZWxmIjogZmFsc2UsCi0gICAgICAgICAgICAic2Vzc2lvblN0b3JhZ2UiOiBm
YWxzZSwKLSAgICAgICAgICAgICJzZXRJbnRlcnZhbCI6IGZhbHNlLAotICAgICAgICAgICAgInNl
dFRpbWVvdXQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTaGFyZWRXb3JrZXIiOiBmYWxzZSwKLSAg
ICAgICAgICAgICJzaG93TW9kYWxEaWFsb2ciOiBmYWxzZSwKLSAgICAgICAgICAgICJzdG9wIjog
ZmFsc2UsCi0gICAgICAgICAgICAiU1ZHQUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJT
VkdBbHRHbHlwaERlZkVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdBbHRHbHlwaEVs
ZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdBbHRHbHlwaEl0ZW1FbGVtZW50IjogZmFs
c2UsCi0gICAgICAgICAgICAiU1ZHQW5nbGUiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdBbmlt
YXRlQ29sb3JFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHQW5pbWF0ZWRBbmdsZSI6
IGZhbHNlLAotICAgICAgICAgICAgIlNWR0FuaW1hdGVkQm9vbGVhbiI6IGZhbHNlLAotICAgICAg
ICAgICAgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24iOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdB
bmltYXRlZEludGVnZXIiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdBbmltYXRlZExlbmd0aCI6
IGZhbHNlLAotICAgICAgICAgICAgIlNWR0FuaW1hdGVkTGVuZ3RoTGlzdCI6IGZhbHNlLAotICAg
ICAgICAgICAgIlNWR0FuaW1hdGVkTnVtYmVyIjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHQW5p
bWF0ZWROdW1iZXJMaXN0IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHQW5pbWF0ZWRQcmVzZXJ2
ZUFzcGVjdFJhdGlvIjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHQW5pbWF0ZWRSZWN0IjogZmFs
c2UsCi0gICAgICAgICAgICAiU1ZHQW5pbWF0ZWRTdHJpbmciOiBmYWxzZSwKLSAgICAgICAgICAg
ICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdBbmlt
YXRlRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQiOiBmYWxz
ZSwKLSAgICAgICAgICAgICJTVkdBbmltYXRpb25FbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAg
ICAiU1ZHQ2lyY2xlRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0NsaXBQYXRoRWxl
bWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0NvbG9yIjogZmFsc2UsCi0gICAgICAgICAg
ICAiU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAg
ICAgICJTVkdDdXJzb3JFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRGVmc0VsZW1l
bnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdEZXNjRWxlbWVudCI6IGZhbHNlLAotICAgICAg
ICAgICAgIlNWR0RvY3VtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRWxlbWVudCI6IGZh
bHNlLAotICAgICAgICAgICAgIlNWR0VsZW1lbnRJbnN0YW5jZSI6IGZhbHNlLAotICAgICAgICAg
ICAgIlNWR0VsZW1lbnRJbnN0YW5jZUxpc3QiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdFbGxp
cHNlRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZFQmxlbmRFbGVtZW50IjogZmFs
c2UsCi0gICAgICAgICAgICAiU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQiOiBmYWxzZSwKLSAgICAg
ICAgICAgICJTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAg
ICAgIlNWR0ZFQ29tcG9zaXRlRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50Ijog
ZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRkVGbG9vZEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAg
ICAgICJTVkdGRUZ1bmNBRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZFRnVuY0JF
bGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRkVGdW5jR0VsZW1lbnQiOiBmYWxzZSwK
LSAgICAgICAgICAgICJTVkdGRUZ1bmNSRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZFSW1hZ2VF
bGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRkVNZXJnZUVsZW1lbnQiOiBmYWxzZSwK
LSAgICAgICAgICAgICJTVkdGRU1lcmdlTm9kZUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAg
ICJTVkdGRU1vcnBob2xvZ3lFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRkVPZmZz
ZXRFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRkVQb2ludExpZ2h0RWxlbWVudCI6
IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQiOiBmYWxz
ZSwKLSAgICAgICAgICAgICJTVkdGRVNwb3RMaWdodEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAg
ICAgICJTVkdGRVRpbGVFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHRkVUdXJidWxl
bmNlRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZpbHRlckVsZW1lbnQiOiBmYWxz
ZSwKLSAgICAgICAgICAgICJTVkdGb250RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNW
R0ZvbnRGYWNlRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZvbnRGYWNlRm9ybWF0
RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0ZvbnRGYWNlTmFtZUVsZW1lbnQiOiBm
YWxzZSwKLSAgICAgICAgICAgICJTVkdGb250RmFjZVNyY0VsZW1lbnQiOiBmYWxzZSwKLSAgICAg
ICAgICAgICJTVkdGb250RmFjZVVyaUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdG
b3JlaWduT2JqZWN0RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR0dFbGVtZW50Ijog
ZmFsc2UsCi0gICAgICAgICAgICAiU1ZHR2x5cGhFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAg
ICAiU1ZHR2x5cGhSZWZFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHR3JhZGllbnRF
bGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHSEtlcm5FbGVtZW50IjogZmFsc2UsCi0g
ICAgICAgICAgICAiU1ZHSW1hZ2VFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHTGVu
Z3RoIjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHTGVuZ3RoTGlzdCI6IGZhbHNlLAotICAgICAg
ICAgICAgIlNWR0xpbmVhckdyYWRpZW50RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNW
R0xpbmVFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHTWFya2VyRWxlbWVudCI6IGZh
bHNlLAotICAgICAgICAgICAgIlNWR01hc2tFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAi
U1ZHTWF0cml4IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHTWV0YWRhdGFFbGVtZW50IjogZmFs
c2UsCi0gICAgICAgICAgICAiU1ZHTWlzc2luZ0dseXBoRWxlbWVudCI6IGZhbHNlLAotICAgICAg
ICAgICAgIlNWR01QYXRoRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR051bWJlciI6
IGZhbHNlLAotICAgICAgICAgICAgIlNWR051bWJlckxpc3QiOiBmYWxzZSwKLSAgICAgICAgICAg
ICJTVkdQYWludCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1BhdGhFbGVtZW50IjogZmFsc2Us
Ci0gICAgICAgICAgICAiU1ZHUGF0aFNlZyI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1BhdGhT
ZWdBcmNBYnMiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdQYXRoU2VnQXJjUmVsIjogZmFsc2Us
Ci0gICAgICAgICAgICAiU1ZHUGF0aFNlZ0Nsb3NlUGF0aCI6IGZhbHNlLAotICAgICAgICAgICAg
IlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdQYXRo
U2VnQ3VydmV0b0N1YmljUmVsIjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1Ntb290aEFicyI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNTbW9vdGhSZWwiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY0FicyI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljUmVsIjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGhBYnMiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y1Ntb290aFJlbCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1BhdGhTZWdMaW5ldG9BYnMiOiBm
YWxzZSwKLSAgICAgICAgICAgICJTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyI6IGZhbHNl
LAotICAgICAgICAgICAgIlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsIjogZmFsc2UsCi0g
ICAgICAgICAgICAiU1ZHUGF0aFNlZ0xpbmV0b1JlbCI6IGZhbHNlLAotICAgICAgICAgICAgIlNW
R1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1BhdGhT
ZWdMaW5ldG9WZXJ0aWNhbFJlbCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1BhdGhTZWdMaXN0
IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHUGF0aFNlZ01vdmV0b0FicyI6IGZhbHNlLAotICAg
ICAgICAgICAgIlNWR1BhdGhTZWdNb3ZldG9SZWwiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdQ
YXR0ZXJuRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1BvaW50IjogZmFsc2UsCi0g
ICAgICAgICAgICAiU1ZHUG9pbnRMaXN0IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHUG9seWdv
bkVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdQb2x5bGluZUVsZW1lbnQiOiBmYWxz
ZSwKLSAgICAgICAgICAgICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIjogZmFsc2UsCi0gICAgICAg
ICAgICAiU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZH
UmVjdCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1JlY3RFbGVtZW50IjogZmFsc2UsCi0gICAg
ICAgICAgICAiU1ZHUmVuZGVyaW5nSW50ZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHU2Ny
aXB0RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1NldEVsZW1lbnQiOiBmYWxzZSwK
LSAgICAgICAgICAgICJTVkdTdG9wRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1N0
cmluZ0xpc3QiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdTdHlsZUVsZW1lbnQiOiBmYWxzZSwK
LSAgICAgICAgICAgICJTVkdTVkdFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAiU1ZHU3dp
dGNoRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1N5bWJvbEVsZW1lbnQiOiBmYWxz
ZSwKLSAgICAgICAgICAgICJTVkdUZXh0Q29udGVudEVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAg
ICAgICJTVkdUZXh0RWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1RleHRQYXRoRWxl
bWVudCI6IGZhbHNlLAotICAgICAgICAgICAgIlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQiOiBm
YWxzZSwKLSAgICAgICAgICAgICJTVkdUaXRsZUVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAg
ICJTVkdUcmFuc2Zvcm0iOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdUcmFuc2Zvcm1MaXN0Ijog
ZmFsc2UsCi0gICAgICAgICAgICAiU1ZHVFJlZkVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAg
ICJTVkdUU3BhbkVsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdVbml0VHlwZXMiOiBm
YWxzZSwKLSAgICAgICAgICAgICJTVkdVc2VFbGVtZW50IjogZmFsc2UsCi0gICAgICAgICAgICAi
U1ZHVmlld0VsZW1lbnQiOiBmYWxzZSwKLSAgICAgICAgICAgICJTVkdWaWV3U3BlYyI6IGZhbHNl
LAotICAgICAgICAgICAgIlNWR1ZLZXJuRWxlbWVudCI6IGZhbHNlLAotICAgICAgICAgICAgInRv
cCI6IGZhbHNlLAotICAgICAgICAgICAgIldlYlNvY2tldCI6IGZhbHNlLAotICAgICAgICAgICAg
IndpbmRvdyI6IGZhbHNlLAotICAgICAgICAgICAgIldvcmtlciI6IGZhbHNlLAotICAgICAgICAg
ICAgIlhNTEh0dHBSZXF1ZXN0IjogZmFsc2UsCi0gICAgICAgICAgICAiWE1MU2VyaWFsaXplciI6
IGZhbHNlLAotICAgICAgICAgICAgIlhQYXRoRXZhbHVhdG9yIjogZmFsc2UsCi0gICAgICAgICAg
ICAiWFBhdGhFeHByZXNzaW9uIjogZmFsc2UsCi0gICAgICAgICAgICAiWFBhdGhSZXN1bHQiOiBm
YWxzZQotICAgICAgICB9Ci0gICAgfSwKLQotICAgICJub2RlIjogewotICAgICAgICAiZ2xvYmFs
cyI6IHsKLSAgICAgICAgICAgICJfX2ZpbGVuYW1lIjogZmFsc2UsCi0gICAgICAgICAgICAiX19k
aXJuYW1lIjogZmFsc2UsCi0gICAgICAgICAgICAiQnVmZmVyIjogZmFsc2UsCi0gICAgICAgICAg
ICAiRGF0YVZpZXciOiBmYWxzZSwKLSAgICAgICAgICAgICJjb25zb2xlIjogZmFsc2UsCi0gICAg
ICAgICAgICAiZXhwb3J0cyI6IHRydWUsCi0gICAgICAgICAgICAiR0xPQkFMIjogZmFsc2UsCi0g
ICAgICAgICAgICAiZ2xvYmFsIjogZmFsc2UsCi0gICAgICAgICAgICAibW9kdWxlIjogZmFsc2Us
Ci0gICAgICAgICAgICAicHJvY2VzcyI6IGZhbHNlLAotICAgICAgICAgICAgInJlcXVpcmUiOiBm
YWxzZSwKLSAgICAgICAgICAgICJzZXRUaW1lb3V0IjogZmFsc2UsCi0gICAgICAgICAgICAiY2xl
YXJUaW1lb3V0IjogZmFsc2UsCi0gICAgICAgICAgICAic2V0SW50ZXJ2YWwiOiBmYWxzZSwKLSAg
ICAgICAgICAgICJjbGVhckludGVydmFsIjogZmFsc2UsCi0gICAgICAgICAgICAic2V0SW1tZWRp
YXRlIjogZmFsc2UsCi0gICAgICAgICAgICAiY2xlYXJJbW1lZGlhdGUiOiBmYWxzZQotICAgICAg
ICB9LAotCi0gICAgICAgICJydWxlcyI6IHsKLSAgICAgICAgICAgICJuby1jYXRjaC1zaGFkb3ci
OiAwLAotICAgICAgICAgICAgIm5vLWNvbnNvbGUiOiAwLAotICAgICAgICAgICAgIm5vLW1peGVk
LXJlcXVpcmVzIjogMiwKLSAgICAgICAgICAgICJuby1uZXctcmVxdWlyZSI6IDIsCi0gICAgICAg
ICAgICAibm8tcGF0aC1jb25jYXQiOiAyLAotICAgICAgICAgICAgIm5vLXByb2Nlc3MtZXhpdCI6
IDIsCi0gICAgICAgICAgICAiZ2xvYmFsLXN0cmljdCI6IFswLCAiYWx3YXlzIl0sCi0gICAgICAg
ICAgICAiaGFuZGxlLWNhbGxiYWNrLWVyciI6IFsyLCAiZXJyIl0KLSAgICAgICAgfQotICAgIH0s
Ci0KLSAgICAiYW1kIjogewotICAgICAgICAiZ2xvYmFscyI6IHsKLSAgICAgICAgICAgICJyZXF1
aXJlIjogZmFsc2UsCi0gICAgICAgICAgICAiZGVmaW5lIjogZmFsc2UKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICAibW9jaGEiOiB7Ci0gICAgICAgICJnbG9iYWxzIjogewotICAgICAgICAgICAg
ImRlc2NyaWJlIjogZmFsc2UsCi0gICAgICAgICAgICAiaXQiOiBmYWxzZSwKLSAgICAgICAgICAg
ICJiZWZvcmUiOiBmYWxzZSwKLSAgICAgICAgICAgICJhZnRlciI6IGZhbHNlLAotICAgICAgICAg
ICAgImJlZm9yZUVhY2giOiBmYWxzZSwKLSAgICAgICAgICAgICJhZnRlckVhY2giOiBmYWxzZSwK
LQotICAgICAgICAgICAgInN1aXRlIjogZmFsc2UsCi0gICAgICAgICAgICAidGVzdCI6IGZhbHNl
LAotICAgICAgICAgICAgInNldHVwIjogZmFsc2UsCi0gICAgICAgICAgICAidGVhcmRvd24iOiBm
YWxzZSwKLSAgICAgICAgICAgICJzdWl0ZVNldHVwIjogZmFsc2UsCi0gICAgICAgICAgICAic3Vp
dGVUZWFyZG93biI6IGZhbHNlCi0gICAgICAgIH0KLSAgICB9LAotCi0gICAgImphc21pbmUiOiB7
Ci0gICAgICAgICJnbG9iYWxzIjogewotICAgICAgICAgICAgImFmdGVyRWFjaCI6IGZhbHNlLAot
ICAgICAgICAgICAgImJlZm9yZUVhY2giOiBmYWxzZSwKLSAgICAgICAgICAgICJkZXNjcmliZSI6
IGZhbHNlLAotICAgICAgICAgICAgImV4cGVjdCI6IGZhbHNlLAotICAgICAgICAgICAgIml0Ijog
ZmFsc2UsCi0gICAgICAgICAgICAiamFzbWluZSI6IGZhbHNlLAotICAgICAgICAgICAgInBlbmRp
bmciOiBmYWxzZSwKLSAgICAgICAgICAgICJzcHlPbiI6IGZhbHNlLAotICAgICAgICAgICAgIndh
aXRzIjogZmFsc2UsCi0gICAgICAgICAgICAid2FpdHNGb3IiOiBmYWxzZSwKLSAgICAgICAgICAg
ICJ4ZGVzY3JpYmUiOiBmYWxzZSwKLSAgICAgICAgICAgICJ4aXQiOiBmYWxzZQotICAgICAgICB9
Ci0gICAgfQotfQotCi19LHt9XSwyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
LW1vZHVsZS5leHBvcnRzPXsKLSAgICAiZW52IjogewotICAgICAgICAiYnJvd3NlciI6IGZhbHNl
LAotICAgICAgICAibm9kZSI6IGZhbHNlLAotICAgICAgICAiYW1kIjogZmFsc2UsCi0gICAgICAg
ICJtb2NoYSI6IGZhbHNlLAotICAgICAgICAiamFzbWluZSI6IGZhbHNlCi0gICAgfSwKLQotICAg
ICJydWxlcyI6IHsKLSAgICAgICAgIm5vLWFsZXJ0IjogMiwKLSAgICAgICAgIm5vLWFycmF5LWNv
bnN0cnVjdG9yIjogMiwKLSAgICAgICAgIm5vLWJpdHdpc2UiOiAwLAotICAgICAgICAibm8tY2Fs
bGVyIjogMiwKLSAgICAgICAgIm5vLWNhdGNoLXNoYWRvdyI6IDIsCi0gICAgICAgICJuby1jb21t
YS1kYW5nbGUiOiAyLAotICAgICAgICAibm8tY29uZC1hc3NpZ24iOiAyLAotICAgICAgICAibm8t
Y29uc29sZSI6IDIsCi0gICAgICAgICJuby1jb25zdGFudC1jb25kaXRpb24iOiAyLAotICAgICAg
ICAibm8tY29udHJvbC1yZWdleCI6IDIsCi0gICAgICAgICJuby1kZWJ1Z2dlciI6IDIsCi0gICAg
ICAgICJuby1kZWxldGUtdmFyIjogMiwKLSAgICAgICAgIm5vLWRpdi1yZWdleCI6IDAsCi0gICAg
ICAgICJuby1kdXBlLWtleXMiOiAyLAotICAgICAgICAibm8tZWxzZS1yZXR1cm4iOiAwLAotICAg
ICAgICAibm8tZW1wdHkiOiAyLAotICAgICAgICAibm8tZW1wdHktY2xhc3MiOiAyLAotICAgICAg
ICAibm8tZW1wdHktbGFiZWwiOiAyLAotICAgICAgICAibm8tZXEtbnVsbCI6IDAsCi0gICAgICAg
ICJuby1ldmFsIjogMiwKLSAgICAgICAgIm5vLWV4LWFzc2lnbiI6IDIsCi0gICAgICAgICJuby1l
eHRlbmQtbmF0aXZlIjogMiwKLSAgICAgICAgIm5vLWV4dHJhLWJpbmQiOiAyLAotICAgICAgICAi
bm8tZXh0cmEtYm9vbGVhbi1jYXN0IjogMiwKLSAgICAgICAgIm5vLWV4dHJhLXBhcmVucyI6IDAs
Ci0gICAgICAgICJuby1leHRyYS1zZW1pIjogMiwKLSAgICAgICAgIm5vLWV4dHJhLXN0cmljdCI6
IDIsCi0gICAgICAgICJuby1mYWxsdGhyb3VnaCI6IDIsCi0gICAgICAgICJuby1mbG9hdGluZy1k
ZWNpbWFsIjogMCwKLSAgICAgICAgIm5vLWZ1bmMtYXNzaWduIjogMiwKLSAgICAgICAgIm5vLWlt
cGxpZWQtZXZhbCI6IDIsCi0gICAgICAgICJuby1pbm5lci1kZWNsYXJhdGlvbnMiOiBbMiwgImZ1
bmN0aW9ucyJdLAotICAgICAgICAibm8taW52YWxpZC1yZWdleHAiOiAyLAotICAgICAgICAibm8t
aXRlcmF0b3IiOiAyLAotICAgICAgICAibm8tbGFiZWwtdmFyIjogMiwKLSAgICAgICAgIm5vLWxh
YmVscyI6IDIsCi0gICAgICAgICJuby1sb25lLWJsb2NrcyI6IDIsCi0gICAgICAgICJuby1sb25l
bHktaWYiOiAwLAotICAgICAgICAibm8tbG9vcC1mdW5jIjogMiwKLSAgICAgICAgIm5vLW1peGVk
LXJlcXVpcmVzIjogWzAsIGZhbHNlXSwKLSAgICAgICAgIm5vLW1peGVkLXNwYWNlcy1hbmQtdGFi
cyI6IFsyLCBmYWxzZV0sCi0gICAgICAgICJuby1tdWx0aS1zcGFjZXMiOiAyLAotICAgICAgICAi
bm8tbXVsdGktc3RyIjogMiwKLSAgICAgICAgIm5vLW11bHRpcGxlLWVtcHR5LWxpbmVzIjogWzAs
IHsibWF4IjogMn1dLAotICAgICAgICAibm8tbmF0aXZlLXJlYXNzaWduIjogMiwKLSAgICAgICAg
Im5vLW5lZ2F0ZWQtaW4tbGhzIjogMiwKLSAgICAgICAgIm5vLW5lc3RlZC10ZXJuYXJ5IjogMCwK
LSAgICAgICAgIm5vLW5ldyI6IDIsCi0gICAgICAgICJuby1uZXctZnVuYyI6IDIsCi0gICAgICAg
ICJuby1uZXctb2JqZWN0IjogMiwKLSAgICAgICAgIm5vLW5ldy1yZXF1aXJlIjogMCwKLSAgICAg
ICAgIm5vLW5ldy13cmFwcGVycyI6IDIsCi0gICAgICAgICJuby1vYmotY2FsbHMiOiAyLAotICAg
ICAgICAibm8tb2N0YWwiOiAyLAotICAgICAgICAibm8tb2N0YWwtZXNjYXBlIjogMiwKLSAgICAg
ICAgIm5vLXBhdGgtY29uY2F0IjogMCwKLSAgICAgICAgIm5vLXBsdXNwbHVzIjogMCwKLSAgICAg
ICAgIm5vLXByb2Nlc3MtZW52IjogMCwKLSAgICAgICAgIm5vLXByb2Nlc3MtZXhpdCI6IDIsCi0g
ICAgICAgICJuby1wcm90byI6IDIsCi0gICAgICAgICJuby1yZWRlY2xhcmUiOiAyLAotICAgICAg
ICAibm8tcmVnZXgtc3BhY2VzIjogMiwKLSAgICAgICAgIm5vLXJlc2VydmVkLWtleXMiOiAwLAot
ICAgICAgICAibm8tcmVzdHJpY3RlZC1tb2R1bGVzIjogMCwKLSAgICAgICAgIm5vLXJldHVybi1h
c3NpZ24iOiAyLAotICAgICAgICAibm8tc2NyaXB0LXVybCI6IDIsCi0gICAgICAgICJuby1zZWxm
LWNvbXBhcmUiOiAwLAotICAgICAgICAibm8tc2VxdWVuY2VzIjogMiwKLSAgICAgICAgIm5vLXNo
YWRvdyI6IDIsCi0gICAgICAgICJuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lcyI6IDIsCi0gICAg
ICAgICJuby1zcGFjZS1iZWZvcmUtc2VtaSI6IDIsCi0gICAgICAgICJuby1zcGFjZWQtZnVuYyI6
IDIsCi0gICAgICAgICJuby1zcGFyc2UtYXJyYXlzIjogMiwKLSAgICAgICAgIm5vLXN5bmMiOiAw
LAotICAgICAgICAibm8tdGVybmFyeSI6IDAsCi0gICAgICAgICJuby10cmFpbGluZy1zcGFjZXMi
OiAyLAotICAgICAgICAibm8tdW5kZWYiOiAyLAotICAgICAgICAibm8tdW5kZWYtaW5pdCI6IDIs
Ci0gICAgICAgICJuby11bmRlZmluZWQiOiAwLAotICAgICAgICAibm8tdW5kZXJzY29yZS1kYW5n
bGUiOiAyLAotICAgICAgICAibm8tdW5yZWFjaGFibGUiOiAyLAotICAgICAgICAibm8tdW51c2Vk
LWV4cHJlc3Npb25zIjogMiwKLSAgICAgICAgIm5vLXVudXNlZC12YXJzIjogWzIsIHsidmFycyI6
ICJhbGwiLCAiYXJncyI6ICJhZnRlci11c2VkIn1dLAotICAgICAgICAibm8tdXNlLWJlZm9yZS1k
ZWZpbmUiOiAyLAotICAgICAgICAibm8tdm9pZCI6IDAsCi0gICAgICAgICJuby13YXJuaW5nLWNv
bW1lbnRzIjogWzAsIHsgInRlcm1zIjogWyJ0b2RvIiwgImZpeG1lIiwgInh4eCJdLCAibG9jYXRp
b24iOiAic3RhcnQiIH1dLAotICAgICAgICAibm8td2l0aCI6IDIsCi0gICAgICAgICJuby13cmFw
LWZ1bmMiOiAyLAotCi0gICAgICAgICJibG9jay1zY29wZWQtdmFyIjogMCwKLSAgICAgICAgImJy
YWNlLXN0eWxlIjogWzAsICIxdGJzIl0sCi0gICAgICAgICJjYW1lbGNhc2UiOiAyLAotICAgICAg
ICAiY29tbWEtc3BhY2luZyI6IDIsCi0gICAgICAgICJjb21tYS1zdHlsZSI6IDAsCi0gICAgICAg
ICJjb21wbGV4aXR5IjogWzAsIDExXSwKLSAgICAgICAgImNvbnNpc3RlbnQtcmV0dXJuIjogMiwK
LSAgICAgICAgImNvbnNpc3RlbnQtdGhpcyI6IFswLCAidGhhdCJdLAotICAgICAgICAiY3VybHki
OiBbMiwgImFsbCJdLAotICAgICAgICAiZGVmYXVsdC1jYXNlIjogMCwKLSAgICAgICAgImRvdC1u
b3RhdGlvbiI6IDIsCi0gICAgICAgICJlb2wtbGFzdCI6IDIsCi0gICAgICAgICJlcWVxZXEiOiAy
LAotICAgICAgICAiZnVuYy1uYW1lcyI6IDAsCi0gICAgICAgICJmdW5jLXN0eWxlIjogWzAsICJk
ZWNsYXJhdGlvbiJdLAotICAgICAgICAiZ2xvYmFsLXN0cmljdCI6IFsyLCAibmV2ZXIiXSwKLSAg
ICAgICAgImd1YXJkLWZvci1pbiI6IDAsCi0gICAgICAgICJoYW5kbGUtY2FsbGJhY2stZXJyIjog
MCwKLSAgICAgICAgImtleS1zcGFjaW5nIjogWzIsIHsgImJlZm9yZUNvbG9uIjogZmFsc2UsICJh
ZnRlckNvbG9uIjogdHJ1ZSB9XSwKLSAgICAgICAgIm1heC1kZXB0aCI6IFswLCA0XSwKLSAgICAg
ICAgIm1heC1sZW4iOiBbMCwgODAsIDRdLAotICAgICAgICAibWF4LW5lc3RlZC1jYWxsYmFja3Mi
OiBbMCwgMl0sCi0gICAgICAgICJtYXgtcGFyYW1zIjogWzAsIDNdLAotICAgICAgICAibWF4LXN0
YXRlbWVudHMiOiBbMCwgMTBdLAotICAgICAgICAibmV3LWNhcCI6IDIsCi0gICAgICAgICJuZXct
cGFyZW5zIjogMiwKLSAgICAgICAgIm9uZS12YXIiOiAwLAotICAgICAgICAicGFkZGVkLWJsb2Nr
cyI6IDAsCi0gICAgICAgICJxdW90ZS1wcm9wcyI6IDAsCi0gICAgICAgICJxdW90ZXMiOiBbMiwg
ImRvdWJsZSJdLAotICAgICAgICAicmFkaXgiOiAwLAotICAgICAgICAic2VtaSI6IDIsCi0gICAg
ICAgICJzb3J0LXZhcnMiOiAwLAotICAgICAgICAic3BhY2UtYWZ0ZXIta2V5d29yZHMiOiBbMCwg
ImFsd2F5cyJdLAotICAgICAgICAic3BhY2UtYmVmb3JlLWJsb2NrcyI6IFswLCAiYWx3YXlzIl0s
Ci0gICAgICAgICJzcGFjZS1pbi1icmFja2V0cyI6IFswLCAibmV2ZXIiXSwKLSAgICAgICAgInNw
YWNlLWluLXBhcmVucyI6IFswLCAibmV2ZXIiXSwKLSAgICAgICAgInNwYWNlLWluZml4LW9wcyI6
IDIsCi0gICAgICAgICJzcGFjZS1yZXR1cm4tdGhyb3ctY2FzZSI6IDIsCi0gICAgICAgICJzcGFj
ZS11bmFyeS13b3JkLW9wcyI6IDAsCi0gICAgICAgICJzcGFjZWQtbGluZS1jb21tZW50IjogWzAs
ICJhbHdheXMiXSwKLSAgICAgICAgInN0cmljdCI6IDIsCi0gICAgICAgICJ1c2UtaXNuYW4iOiAy
LAotICAgICAgICAidmFsaWQtanNkb2MiOiAwLAotICAgICAgICAidmFsaWQtdHlwZW9mIjogMiwK
LSAgICAgICAgInZhcnMtb24tdG9wIjogMCwKLSAgICAgICAgIndyYXAtaWlmZSI6IDAsCi0gICAg
ICAgICJ3cmFwLXJlZ2V4IjogMCwKLSAgICAgICAgInlvZGEiOiBbMiwgIm5ldmVyIl0KLSAgICB9
Ci19Ci0KLX0se31dLDM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLy8gQ29w
eXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuCi0vLwotLy8g
UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz
b24gb2J0YWluaW5nIGEKLS8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk
b2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLS8vICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBT
b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLS8vIHdpdGhvdXQgbGltaXRh
dGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLS8v
IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh
cmUsIGFuZCB0byBwZXJtaXQKLS8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVy
bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZQotLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6
Ci0vLwotLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu
b3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKLS8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg
cG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF
RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCi0vLyBPUiBJ
TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0v
LyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO
T05JTkZSSU5HRU1FTlQuIElOCi0vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZ
UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKLS8vIERBTUFHRVMgT1IgT1RI
RVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgot
Ly8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg
VEhFIFNPRlRXQVJFIE9SIFRIRQotLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZU
V0FSRS4KLQotZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkgewotICB0aGlzLl9ldmVudHMgPSB0aGlz
Ll9ldmVudHMgfHwge307Ci0gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVy
cyB8fCB1bmRlZmluZWQ7Ci19Ci1tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjsKLQotLy8g
QmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54Ci1FdmVudEVtaXR0ZXIuRXZlbnRFbWl0
dGVyID0gRXZlbnRFbWl0dGVyOwotCi1FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1
bmRlZmluZWQ7Ci1FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmlu
ZWQ7Ci0KLS8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBp
ZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZQotLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1
c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy4KLUV2ZW50RW1p
dHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7Ci0KLS8vIE9idmlvdXNseSBub3QgYWxsIEVt
aXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93cwotLy8g
dGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuCi1FdmVudEVt
aXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uKG4pIHsKLSAgaWYgKCFp
c051bWJlcihuKSB8fCBuIDwgMCB8fCBpc05hTihuKSkKLSAgICB0aHJvdyBUeXBlRXJyb3IoJ24g
bXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpOwotICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuOwot
ICByZXR1cm4gdGhpczsKLX07Ci0KLUV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0
aW9uKHR5cGUpIHsKLSAgdmFyIGVyLCBoYW5kbGVyLCBsZW4sIGFyZ3MsIGksIGxpc3RlbmVyczsK
LQotICBpZiAoIXRoaXMuX2V2ZW50cykKLSAgICB0aGlzLl9ldmVudHMgPSB7fTsKLQotICAvLyBJ
ZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuCi0gIGlmICh0
eXBlID09PSAnZXJyb3InKSB7Ci0gICAgaWYgKCF0aGlzLl9ldmVudHMuZXJyb3IgfHwKLSAgICAg
ICAgKGlzT2JqZWN0KHRoaXMuX2V2ZW50cy5lcnJvcikgJiYgIXRoaXMuX2V2ZW50cy5lcnJvci5s
ZW5ndGgpKSB7Ci0gICAgICBlciA9IGFyZ3VtZW50c1sxXTsKLSAgICAgIGlmIChlciBpbnN0YW5j
ZW9mIEVycm9yKSB7Ci0gICAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVu
dAotICAgICAgfQotICAgICAgdGhyb3cgVHlwZUVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQg
ImVycm9yIiBldmVudC4nKTsKLSAgICB9Ci0gIH0KLQotICBoYW5kbGVyID0gdGhpcy5fZXZlbnRz
W3R5cGVdOwotCi0gIGlmIChpc1VuZGVmaW5lZChoYW5kbGVyKSkKLSAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHsKLSAgICBzd2l0Y2ggKGFyZ3VtZW50cy5s
ZW5ndGgpIHsKLSAgICAgIC8vIGZhc3QgY2FzZXMKLSAgICAgIGNhc2UgMToKLSAgICAgICAgaGFu
ZGxlci5jYWxsKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMjoKLSAgICAgICAg
aGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSAzOgotICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdLCBhcmd1bWVu
dHNbMl0pOwotICAgICAgICBicmVhazsKLSAgICAgIC8vIHNsb3dlcgotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKLSAgICAgICAgYXJncyA9IG5ldyBBcnJh
eShsZW4gLSAxKTsKLSAgICAgICAgZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKQotICAgICAgICAg
IGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOwotICAgICAgICBoYW5kbGVyLmFwcGx5KHRoaXMs
IGFyZ3MpOwotICAgIH0KLSAgfSBlbHNlIGlmIChpc09iamVjdChoYW5kbGVyKSkgewotICAgIGxl
biA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0gICAgYXJncyA9IG5ldyBBcnJheShsZW4gLSAxKTsKLSAg
ICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspCi0gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50
c1tpXTsKLQotICAgIGxpc3RlbmVycyA9IGhhbmRsZXIuc2xpY2UoKTsKLSAgICBsZW4gPSBsaXN0
ZW5lcnMubGVuZ3RoOwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgIGxpc3Rl
bmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfTsKLQot
RXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3Rl
bmVyKSB7Ci0gIHZhciBtOwotCi0gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpCi0gICAgdGhy
b3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTsKLQotICBpZiAoIXRo
aXMuX2V2ZW50cykKLSAgICB0aGlzLl9ldmVudHMgPSB7fTsKLQotICAvLyBUbyBhdm9pZCByZWN1
cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSAibmV3TGlzdGVuZXIiISBCZWZvcmUKLSAg
Ly8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgIm5ld0xpc3RlbmVyIi4K
LSAgaWYgKHRoaXMuX2V2ZW50cy5uZXdMaXN0ZW5lcikKLSAgICB0aGlzLmVtaXQoJ25ld0xpc3Rl
bmVyJywgdHlwZSwKLSAgICAgICAgICAgICAgaXNGdW5jdGlvbihsaXN0ZW5lci5saXN0ZW5lcikg
PwotICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTsKLQotICBpZiAo
IXRoaXMuX2V2ZW50c1t0eXBlXSkKLSAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlz
dGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC4KLSAgICB0aGlzLl9ldmVu
dHNbdHlwZV0gPSBsaXN0ZW5lcjsKLSAgZWxzZSBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5
cGVdKSkKLSAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQu
Ci0gICAgdGhpcy5fZXZlbnRzW3R5cGVdLnB1c2gobGlzdGVuZXIpOwotICBlbHNlCi0gICAgLy8g
QWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuCi0gICAg
dGhpcy5fZXZlbnRzW3R5cGVdID0gW3RoaXMuX2V2ZW50c1t0eXBlXSwgbGlzdGVuZXJdOwotCi0g
IC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrCi0gIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNb
dHlwZV0pICYmICF0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkKSB7Ci0gICAgdmFyIG07Ci0gICAg
aWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9tYXhMaXN0ZW5lcnMpKSB7Ci0gICAgICBtID0gdGhpcy5f
bWF4TGlzdGVuZXJzOwotICAgIH0gZWxzZSB7Ci0gICAgICBtID0gRXZlbnRFbWl0dGVyLmRlZmF1
bHRNYXhMaXN0ZW5lcnM7Ci0gICAgfQotCi0gICAgaWYgKG0gJiYgbSA+IDAgJiYgdGhpcy5fZXZl
bnRzW3R5cGVdLmxlbmd0aCA+IG0pIHsKLSAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQg
PSB0cnVlOwotICAgICAgY29uc29sZS5lcnJvcignKG5vZGUpIHdhcm5pbmc6IHBvc3NpYmxlIEV2
ZW50RW1pdHRlciBtZW1vcnkgJyArCi0gICAgICAgICAgICAgICAgICAgICdsZWFrIGRldGVjdGVk
LiAlZCBsaXN0ZW5lcnMgYWRkZWQuICcgKwotICAgICAgICAgICAgICAgICAgICAnVXNlIGVtaXR0
ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuJywKLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCk7Ci0gICAgICBpZiAodHlwZW9mIGNvbnNv
bGUudHJhY2UgPT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgLy8gbm90IHN1cHBvcnRlZCBpbiBJ
RSAxMAotICAgICAgICBjb25zb2xlLnRyYWNlKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAg
cmV0dXJuIHRoaXM7Ci19OwotCi1FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0
dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjsKLQotRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNl
ID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHsKLSAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVy
KSkKLSAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpOwot
Ci0gIHZhciBmaXJlZCA9IGZhbHNlOwotCi0gIGZ1bmN0aW9uIGcoKSB7Ci0gICAgdGhpcy5yZW1v
dmVMaXN0ZW5lcih0eXBlLCBnKTsKLQotICAgIGlmICghZmlyZWQpIHsKLSAgICAgIGZpcmVkID0g
dHJ1ZTsKLSAgICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgfQotICB9
Ci0KLSAgZy5saXN0ZW5lciA9IGxpc3RlbmVyOwotICB0aGlzLm9uKHR5cGUsIGcpOwotCi0gIHJl
dHVybiB0aGlzOwotfTsKLQotLy8gZW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmZiB0
aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQKLUV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlz
dGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikgewotICB2YXIgbGlzdCwgcG9zaXRpb24s
IGxlbmd0aCwgaTsKLQotICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKQotICAgIHRocm93IFR5
cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7Ci0KLSAgaWYgKCF0aGlzLl9l
dmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSkKLSAgICByZXR1cm4gdGhpczsKLQotICBsaXN0
ID0gdGhpcy5fZXZlbnRzW3R5cGVdOwotICBsZW5ndGggPSBsaXN0Lmxlbmd0aDsKLSAgcG9zaXRp
b24gPSAtMTsKLQotICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwKLSAgICAgIChpc0Z1bmN0aW9u
KGxpc3QubGlzdGVuZXIpICYmIGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkgewotICAgIGRl
bGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07Ci0gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0
ZW5lcikKLSAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7
Ci0KLSAgfSBlbHNlIGlmIChpc09iamVjdChsaXN0KSkgewotICAgIGZvciAoaSA9IGxlbmd0aDsg
aS0tID4gMDspIHsKLSAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fAotICAgICAgICAg
IChsaXN0W2ldLmxpc3RlbmVyICYmIGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkgewot
ICAgICAgICBwb3NpdGlvbiA9IGk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChwb3NpdGlvbiA8IDApCi0gICAgICByZXR1cm4gdGhpczsKLQotICAgIGlmIChsaXN0
Lmxlbmd0aCA9PT0gMSkgewotICAgICAgbGlzdC5sZW5ndGggPSAwOwotICAgICAgZGVsZXRlIHRo
aXMuX2V2ZW50c1t0eXBlXTsKLSAgICB9IGVsc2UgewotICAgICAgbGlzdC5zcGxpY2UocG9zaXRp
b24sIDEpOwotICAgIH0KLQotICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpCi0g
ICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpOwotICB9Ci0K
LSAgcmV0dXJuIHRoaXM7Ci19OwotCi1FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExp
c3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHsKLSAgdmFyIGtleSwgbGlzdGVuZXJzOwotCi0gIGlm
ICghdGhpcy5fZXZlbnRzKQotICAgIHJldHVybiB0aGlzOwotCi0gIC8vIG5vdCBsaXN0ZW5pbmcg
Zm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXQKLSAgaWYgKCF0aGlzLl9ldmVudHMu
cmVtb3ZlTGlzdGVuZXIpIHsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkKLSAgICAg
IHRoaXMuX2V2ZW50cyA9IHt9OwotICAgIGVsc2UgaWYgKHRoaXMuX2V2ZW50c1t0eXBlXSkKLSAg
ICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQot
ICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHMK
LSAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHsKLSAgICBmb3IgKGtleSBpbiB0aGlzLl9l
dmVudHMpIHsKLSAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlOwot
ICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTsKLSAgICB9Ci0gICAgdGhpcy5yZW1v
dmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7Ci0gICAgdGhpcy5fZXZlbnRzID0ge307
Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlw
ZV07Ci0KLSAgaWYgKGlzRnVuY3Rpb24obGlzdGVuZXJzKSkgewotICAgIHRoaXMucmVtb3ZlTGlz
dGVuZXIodHlwZSwgbGlzdGVuZXJzKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBMSUZPIG9yZGVyCi0g
ICAgd2hpbGUgKGxpc3RlbmVycy5sZW5ndGgpCi0gICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5
cGUsIGxpc3RlbmVyc1tsaXN0ZW5lcnMubGVuZ3RoIC0gMV0pOwotICB9Ci0gIGRlbGV0ZSB0aGlz
Ll9ldmVudHNbdHlwZV07Ci0KLSAgcmV0dXJuIHRoaXM7Ci19OwotCi1FdmVudEVtaXR0ZXIucHJv
dG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHsKLSAgdmFyIHJldDsKLSAgaWYgKCF0
aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSkKLSAgICByZXQgPSBbXTsKLSAgZWxz
ZSBpZiAoaXNGdW5jdGlvbih0aGlzLl9ldmVudHNbdHlwZV0pKQotICAgIHJldCA9IFt0aGlzLl9l
dmVudHNbdHlwZV1dOwotICBlbHNlCi0gICAgcmV0ID0gdGhpcy5fZXZlbnRzW3R5cGVdLnNsaWNl
KCk7Ci0gIHJldHVybiByZXQ7Ci19OwotCi1FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1
bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHsKLSAgdmFyIHJldDsKLSAgaWYgKCFlbWl0dGVyLl9ldmVu
dHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1t0eXBlXSkKLSAgICByZXQgPSAwOwotICBlbHNlIGlmIChp
c0Z1bmN0aW9uKGVtaXR0ZXIuX2V2ZW50c1t0eXBlXSkpCi0gICAgcmV0ID0gMTsKLSAgZWxzZQot
ICAgIHJldCA9IGVtaXR0ZXIuX2V2ZW50c1t0eXBlXS5sZW5ndGg7Ci0gIHJldHVybiByZXQ7Ci19
OwotCi1mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykgewotICByZXR1cm4gdHlwZW9mIGFyZyA9PT0g
J2Z1bmN0aW9uJzsKLX0KLQotZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7Ci0gIHJldHVybiB0eXBl
b2YgYXJnID09PSAnbnVtYmVyJzsKLX0KLQotZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7Ci0gIHJl
dHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7Ci19Ci0KLWZ1bmN0
aW9uIGlzVW5kZWZpbmVkKGFyZykgewotICByZXR1cm4gYXJnID09PSB2b2lkIDA7Ci19Ci0KLX0s
e31dLDQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoKLSAgQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTQgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgotICBD
b3B5cmlnaHQgKEMpIDIwMTQgRGFuIFRhbyA8ZGFuaWVsLnRhb0BnbWFpbC5jb20+Ci0gIENvcHly
aWdodCAoQykgMjAxMyBBbmRyZXcgRWlzZW5iZXJnIDxhbmRyZXdAZWlzZW5iZXJnLmFzPgotCi0g
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
Ci0gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMgIkFTIElTIgotICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCi0gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhP
TERFUj4gQkUgTElBQkxFIEZPUiBBTlkKLSAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0vKmpzbGludCBiaXR3aXNlOnRydWUg
cGx1c3BsdXM6dHJ1ZSBlcWVxOnRydWUgbm9tZW46dHJ1ZSovCi0vKmdsb2JhbCBkb2N0cmluZTp0
cnVlLCBleHBvcnRzOnRydWUsIHBhcnNlVHlwZUV4cHJlc3Npb246dHJ1ZSwgcGFyc2VUb3A6dHJ1
ZSovCi0KLShmdW5jdGlvbiAoZXhwb3J0cykgewotICAgICd1c2Ugc3RyaWN0JzsKLQotICAgIHZh
ciBWRVJTSU9OLAotICAgICAgICBSZWdleCwKLSAgICAgICAgQ2FuQWNjZXNzU3RyaW5nQnlJbmRl
eCwKLSAgICAgICAgdHlwZWQsCi0gICAgICAgIGpzZG9jLAotICAgICAgICBpc0FycmF5LAotICAg
ICAgICBoYXNPd25Qcm9wZXJ0eTsKLQotICAgIC8vIFN5bmMgd2l0aCBwYWNrYWdlLmpzb24uCi0g
ICAgVkVSU0lPTiA9ICcwLjUuMi1kZXYnOwotCi0gICAgLy8gU2VlIGFsc28gdG9vbHMvZ2VuZXJh
dGUtdW5pY29kZS1yZWdleC5weS4KLSAgICBSZWdleCA9IHsKLSAgICAgICAgTm9uQXNjaWlJZGVu
dGlmaWVyU3RhcnQ6IG5ldyBSZWdFeHAoJ1tceGFhXHhiNVx4YmFceGMwLVx4ZDZceGQ4LVx4ZjZc
eGY4LVx1MDJjMVx1MDJjNi1cdTAyZDFcdTAyZTAtXHUwMmU0XHUwMmVjXHUwMmVlXHUwMzcwLVx1
MDM3NFx1MDM3Nlx1MDM3N1x1MDM3YS1cdTAzN2RcdTAzODZcdTAzODgtXHUwMzhhXHUwMzhjXHUw
MzhlLVx1MDNhMVx1MDNhMy1cdTAzZjVcdTAzZjctXHUwNDgxXHUwNDhhLVx1MDUyN1x1MDUzMS1c
dTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNWQwLVx1MDVlYVx1MDVmMC1cdTA1ZjJcdTA2MjAt
XHUwNjRhXHUwNjZlXHUwNjZmXHUwNjcxLVx1MDZkM1x1MDZkNVx1MDZlNVx1MDZlNlx1MDZlZVx1
MDZlZlx1MDZmYS1cdTA2ZmNcdTA2ZmZcdTA3MTBcdTA3MTItXHUwNzJmXHUwNzRkLVx1MDdhNVx1
MDdiMVx1MDdjYS1cdTA3ZWFcdTA3ZjRcdTA3ZjVcdTA3ZmFcdTA4MDAtXHUwODE1XHUwODFhXHUw
ODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhhMFx1MDhhMi1cdTA4YWNcdTA5MDQtXHUwOTM5XHUw
OTNkXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzdcdTA5NzktXHUwOTdmXHUwOTg1LVx1
MDk4Y1x1MDk4Zlx1MDk5MFx1MDk5My1cdTA5YThcdTA5YWEtXHUwOWIwXHUwOWIyXHUwOWI2LVx1
MDliOVx1MDliZFx1MDljZVx1MDlkY1x1MDlkZFx1MDlkZi1cdTA5ZTFcdTA5ZjBcdTA5ZjFcdTBh
MDUtXHUwYTBhXHUwYTBmXHUwYTEwXHUwYTEzLVx1MGEyOFx1MGEyYS1cdTBhMzBcdTBhMzJcdTBh
MzNcdTBhMzVcdTBhMzZcdTBhMzhcdTBhMzlcdTBhNTktXHUwYTVjXHUwYTVlXHUwYTcyLVx1MGE3
NFx1MGE4NS1cdTBhOGRcdTBhOGYtXHUwYTkxXHUwYTkzLVx1MGFhOFx1MGFhYS1cdTBhYjBcdTBh
YjJcdTBhYjNcdTBhYjUtXHUwYWI5XHUwYWJkXHUwYWQwXHUwYWUwXHUwYWUxXHUwYjA1LVx1MGIw
Y1x1MGIwZlx1MGIxMFx1MGIxMy1cdTBiMjhcdTBiMmEtXHUwYjMwXHUwYjMyXHUwYjMzXHUwYjM1
LVx1MGIzOVx1MGIzZFx1MGI1Y1x1MGI1ZFx1MGI1Zi1cdTBiNjFcdTBiNzFcdTBiODNcdTBiODUt
XHUwYjhhXHUwYjhlLVx1MGI5MFx1MGI5Mi1cdTBiOTVcdTBiOTlcdTBiOWFcdTBiOWNcdTBiOWVc
dTBiOWZcdTBiYTNcdTBiYTRcdTBiYTgtXHUwYmFhXHUwYmFlLVx1MGJiOVx1MGJkMFx1MGMwNS1c
dTBjMGNcdTBjMGUtXHUwYzEwXHUwYzEyLVx1MGMyOFx1MGMyYS1cdTBjMzNcdTBjMzUtXHUwYzM5
XHUwYzNkXHUwYzU4XHUwYzU5XHUwYzYwXHUwYzYxXHUwYzg1LVx1MGM4Y1x1MGM4ZS1cdTBjOTBc
dTBjOTItXHUwY2E4XHUwY2FhLVx1MGNiM1x1MGNiNS1cdTBjYjlcdTBjYmRcdTBjZGVcdTBjZTBc
dTBjZTFcdTBjZjFcdTBjZjJcdTBkMDUtXHUwZDBjXHUwZDBlLVx1MGQxMFx1MGQxMi1cdTBkM2Fc
dTBkM2RcdTBkNGVcdTBkNjBcdTBkNjFcdTBkN2EtXHUwZDdmXHUwZDg1LVx1MGQ5Nlx1MGQ5YS1c
dTBkYjFcdTBkYjMtXHUwZGJiXHUwZGJkXHUwZGMwLVx1MGRjNlx1MGUwMS1cdTBlMzBcdTBlMzJc
dTBlMzNcdTBlNDAtXHUwZTQ2XHUwZTgxXHUwZTgyXHUwZTg0XHUwZTg3XHUwZTg4XHUwZThhXHUw
ZThkXHUwZTk0LVx1MGU5N1x1MGU5OS1cdTBlOWZcdTBlYTEtXHUwZWEzXHUwZWE1XHUwZWE3XHUw
ZWFhXHUwZWFiXHUwZWFkLVx1MGViMFx1MGViMlx1MGViM1x1MGViZFx1MGVjMC1cdTBlYzRcdTBl
YzZcdTBlZGMtXHUwZWRmXHUwZjAwXHUwZjQwLVx1MGY0N1x1MGY0OS1cdTBmNmNcdTBmODgtXHUw
ZjhjXHUxMDAwLVx1MTAyYVx1MTAzZlx1MTA1MC1cdTEwNTVcdTEwNWEtXHUxMDVkXHUxMDYxXHUx
MDY1XHUxMDY2XHUxMDZlLVx1MTA3MFx1MTA3NS1cdTEwODFcdTEwOGVcdTEwYTAtXHUxMGM1XHUx
MGM3XHUxMGNkXHUxMGQwLVx1MTBmYVx1MTBmYy1cdTEyNDhcdTEyNGEtXHUxMjRkXHUxMjUwLVx1
MTI1Nlx1MTI1OFx1MTI1YS1cdTEyNWRcdTEyNjAtXHUxMjg4XHUxMjhhLVx1MTI4ZFx1MTI5MC1c
dTEyYjBcdTEyYjItXHUxMmI1XHUxMmI4LVx1MTJiZVx1MTJjMFx1MTJjMi1cdTEyYzVcdTEyYzgt
XHUxMmQ2XHUxMmQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVhXHUxMzgwLVx1MTM4
Zlx1MTNhMC1cdTEzZjRcdTE0MDEtXHUxNjZjXHUxNjZmLVx1MTY3Zlx1MTY4MS1cdTE2OWFcdTE2
YTAtXHUxNmVhXHUxNmVlLVx1MTZmMFx1MTcwMC1cdTE3MGNcdTE3MGUtXHUxNzExXHUxNzIwLVx1
MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZjXHUxNzZlLVx1MTc3MFx1MTc4MC1cdTE3YjNc
dTE3ZDdcdTE3ZGNcdTE4MjAtXHUxODc3XHUxODgwLVx1MThhOFx1MThhYVx1MThiMC1cdTE4ZjVc
dTE5MDAtXHUxOTFjXHUxOTUwLVx1MTk2ZFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOWFiXHUxOWMx
LVx1MTljN1x1MWEwMC1cdTFhMTZcdTFhMjAtXHUxYTU0XHUxYWE3XHUxYjA1LVx1MWIzM1x1MWI0
NS1cdTFiNGJcdTFiODMtXHUxYmEwXHUxYmFlXHUxYmFmXHUxYmJhLVx1MWJlNVx1MWMwMC1cdTFj
MjNcdTFjNGQtXHUxYzRmXHUxYzVhLVx1MWM3ZFx1MWNlOS1cdTFjZWNcdTFjZWUtXHUxY2YxXHUx
Y2Y1XHUxY2Y2XHUxZDAwLVx1MWRiZlx1MWUwMC1cdTFmMTVcdTFmMTgtXHUxZjFkXHUxZjIwLVx1
MWY0NVx1MWY0OC1cdTFmNGRcdTFmNTAtXHUxZjU3XHUxZjU5XHUxZjViXHUxZjVkXHUxZjVmLVx1
MWY3ZFx1MWY4MC1cdTFmYjRcdTFmYjYtXHUxZmJjXHUxZmJlXHUxZmMyLVx1MWZjNFx1MWZjNi1c
dTFmY2NcdTFmZDAtXHUxZmQzXHUxZmQ2LVx1MWZkYlx1MWZlMC1cdTFmZWNcdTFmZjItXHUxZmY0
XHUxZmY2LVx1MWZmY1x1MjA3MVx1MjA3Zlx1MjA5MC1cdTIwOWNcdTIxMDJcdTIxMDdcdTIxMGEt
XHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExZFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyYS1cdTIxMmRc
dTIxMmYtXHUyMTM5XHUyMTNjLVx1MjEzZlx1MjE0NS1cdTIxNDlcdTIxNGVcdTIxNjAtXHUyMTg4
XHUyYzAwLVx1MmMyZVx1MmMzMC1cdTJjNWVcdTJjNjAtXHUyY2U0XHUyY2ViLVx1MmNlZVx1MmNm
Mlx1MmNmM1x1MmQwMC1cdTJkMjVcdTJkMjdcdTJkMmRcdTJkMzAtXHUyZDY3XHUyZDZmXHUyZDgw
LVx1MmQ5Nlx1MmRhMC1cdTJkYTZcdTJkYTgtXHUyZGFlXHUyZGIwLVx1MmRiNlx1MmRiOC1cdTJk
YmVcdTJkYzAtXHUyZGM2XHUyZGM4LVx1MmRjZVx1MmRkMC1cdTJkZDZcdTJkZDgtXHUyZGRlXHUy
ZTJmXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMjlcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzY1x1
MzA0MS1cdTMwOTZcdTMwOWQtXHUzMDlmXHUzMGExLVx1MzBmYVx1MzBmYy1cdTMwZmZcdTMxMDUt
XHUzMTJkXHUzMTMxLVx1MzE4ZVx1MzFhMC1cdTMxYmFcdTMxZjAtXHUzMWZmXHUzNDAwLVx1NGRi
NVx1NGUwMC1cdTlmY2NcdWEwMDAtXHVhNDhjXHVhNGQwLVx1YTRmZFx1YTUwMC1cdWE2MGNcdWE2
MTAtXHVhNjFmXHVhNjJhXHVhNjJiXHVhNjQwLVx1YTY2ZVx1YTY3Zi1cdWE2OTdcdWE2YTAtXHVh
NmVmXHVhNzE3LVx1YTcxZlx1YTcyMi1cdWE3ODhcdWE3OGItXHVhNzhlXHVhNzkwLVx1YTc5M1x1
YTdhMC1cdWE3YWFcdWE3ZjgtXHVhODAxXHVhODAzLVx1YTgwNVx1YTgwNy1cdWE4MGFcdWE4MGMt
XHVhODIyXHVhODQwLVx1YTg3M1x1YTg4Mi1cdWE4YjNcdWE4ZjItXHVhOGY3XHVhOGZiXHVhOTBh
LVx1YTkyNVx1YTkzMC1cdWE5NDZcdWE5NjAtXHVhOTdjXHVhOTg0LVx1YTliMlx1YTljZlx1YWEw
MC1cdWFhMjhcdWFhNDAtXHVhYTQyXHVhYTQ0LVx1YWE0Ylx1YWE2MC1cdWFhNzZcdWFhN2FcdWFh
ODAtXHVhYWFmXHVhYWIxXHVhYWI1XHVhYWI2XHVhYWI5LVx1YWFiZFx1YWFjMFx1YWFjMlx1YWFk
Yi1cdWFhZGRcdWFhZTAtXHVhYWVhXHVhYWYyLVx1YWFmNFx1YWIwMS1cdWFiMDZcdWFiMDktXHVh
YjBlXHVhYjExLVx1YWIxNlx1YWIyMC1cdWFiMjZcdWFiMjgtXHVhYjJlXHVhYmMwLVx1YWJlMlx1
YWMwMC1cdWQ3YTNcdWQ3YjAtXHVkN2M2XHVkN2NiLVx1ZDdmYlx1ZjkwMC1cdWZhNmRcdWZhNzAt
XHVmYWQ5XHVmYjAwLVx1ZmIwNlx1ZmIxMy1cdWZiMTdcdWZiMWRcdWZiMWYtXHVmYjI4XHVmYjJh
LVx1ZmIzNlx1ZmIzOC1cdWZiM2NcdWZiM2VcdWZiNDBcdWZiNDFcdWZiNDNcdWZiNDRcdWZiNDYt
XHVmYmIxXHVmYmQzLVx1ZmQzZFx1ZmQ1MC1cdWZkOGZcdWZkOTItXHVmZGM3XHVmZGYwLVx1ZmRm
Ylx1ZmU3MC1cdWZlNzRcdWZlNzYtXHVmZWZjXHVmZjIxLVx1ZmYzYVx1ZmY0MS1cdWZmNWFcdWZm
NjYtXHVmZmJlXHVmZmMyLVx1ZmZjN1x1ZmZjYS1cdWZmY2ZcdWZmZDItXHVmZmQ3XHVmZmRhLVx1
ZmZkY10nKSwKLSAgICAgICAgTm9uQXNjaWlJZGVudGlmaWVyUGFydDogbmV3IFJlZ0V4cCgnW1x4
YWFceGI1XHhiYVx4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHUwMmMxXHUwMmM2LVx1MDJkMVx1MDJl
MC1cdTAyZTRcdTAyZWNcdTAyZWVcdTAzMDAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdhLVx1MDM3
ZFx1MDM4Nlx1MDM4OC1cdTAzOGFcdTAzOGNcdTAzOGUtXHUwM2ExXHUwM2EzLVx1MDNmNVx1MDNm
Ny1cdTA0ODFcdTA0ODMtXHUwNDg3XHUwNDhhLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1
NjEtXHUwNTg3XHUwNTkxLVx1MDViZFx1MDViZlx1MDVjMVx1MDVjMlx1MDVjNFx1MDVjNVx1MDVj
N1x1MDVkMC1cdTA1ZWFcdTA1ZjAtXHUwNWYyXHUwNjEwLVx1MDYxYVx1MDYyMC1cdTA2NjlcdTA2
NmUtXHUwNmQzXHUwNmQ1LVx1MDZkY1x1MDZkZi1cdTA2ZThcdTA2ZWEtXHUwNmZjXHUwNmZmXHUw
NzEwLVx1MDc0YVx1MDc0ZC1cdTA3YjFcdTA3YzAtXHUwN2Y1XHUwN2ZhXHUwODAwLVx1MDgyZFx1
MDg0MC1cdTA4NWJcdTA4YTBcdTA4YTItXHUwOGFjXHUwOGU0LVx1MDhmZVx1MDkwMC1cdTA5NjNc
dTA5NjYtXHUwOTZmXHUwOTcxLVx1MDk3N1x1MDk3OS1cdTA5N2ZcdTA5ODEtXHUwOTgzXHUwOTg1
LVx1MDk4Y1x1MDk4Zlx1MDk5MFx1MDk5My1cdTA5YThcdTA5YWEtXHUwOWIwXHUwOWIyXHUwOWI2
LVx1MDliOVx1MDliYy1cdTA5YzRcdTA5YzdcdTA5YzhcdTA5Y2ItXHUwOWNlXHUwOWQ3XHUwOWRj
XHUwOWRkXHUwOWRmLVx1MDllM1x1MDllNi1cdTA5ZjFcdTBhMDEtXHUwYTAzXHUwYTA1LVx1MGEw
YVx1MGEwZlx1MGExMFx1MGExMy1cdTBhMjhcdTBhMmEtXHUwYTMwXHUwYTMyXHUwYTMzXHUwYTM1
XHUwYTM2XHUwYTM4XHUwYTM5XHUwYTNjXHUwYTNlLVx1MGE0Mlx1MGE0N1x1MGE0OFx1MGE0Yi1c
dTBhNGRcdTBhNTFcdTBhNTktXHUwYTVjXHUwYTVlXHUwYTY2LVx1MGE3NVx1MGE4MS1cdTBhODNc
dTBhODUtXHUwYThkXHUwYThmLVx1MGE5MVx1MGE5My1cdTBhYThcdTBhYWEtXHUwYWIwXHUwYWIy
XHUwYWIzXHUwYWI1LVx1MGFiOVx1MGFiYy1cdTBhYzVcdTBhYzctXHUwYWM5XHUwYWNiLVx1MGFj
ZFx1MGFkMFx1MGFlMC1cdTBhZTNcdTBhZTYtXHUwYWVmXHUwYjAxLVx1MGIwM1x1MGIwNS1cdTBi
MGNcdTBiMGZcdTBiMTBcdTBiMTMtXHUwYjI4XHUwYjJhLVx1MGIzMFx1MGIzMlx1MGIzM1x1MGIz
NS1cdTBiMzlcdTBiM2MtXHUwYjQ0XHUwYjQ3XHUwYjQ4XHUwYjRiLVx1MGI0ZFx1MGI1Nlx1MGI1
N1x1MGI1Y1x1MGI1ZFx1MGI1Zi1cdTBiNjNcdTBiNjYtXHUwYjZmXHUwYjcxXHUwYjgyXHUwYjgz
XHUwYjg1LVx1MGI4YVx1MGI4ZS1cdTBiOTBcdTBiOTItXHUwYjk1XHUwYjk5XHUwYjlhXHUwYjlj
XHUwYjllXHUwYjlmXHUwYmEzXHUwYmE0XHUwYmE4LVx1MGJhYVx1MGJhZS1cdTBiYjlcdTBiYmUt
XHUwYmMyXHUwYmM2LVx1MGJjOFx1MGJjYS1cdTBiY2RcdTBiZDBcdTBiZDdcdTBiZTYtXHUwYmVm
XHUwYzAxLVx1MGMwM1x1MGMwNS1cdTBjMGNcdTBjMGUtXHUwYzEwXHUwYzEyLVx1MGMyOFx1MGMy
YS1cdTBjMzNcdTBjMzUtXHUwYzM5XHUwYzNkLVx1MGM0NFx1MGM0Ni1cdTBjNDhcdTBjNGEtXHUw
YzRkXHUwYzU1XHUwYzU2XHUwYzU4XHUwYzU5XHUwYzYwLVx1MGM2M1x1MGM2Ni1cdTBjNmZcdTBj
ODJcdTBjODNcdTBjODUtXHUwYzhjXHUwYzhlLVx1MGM5MFx1MGM5Mi1cdTBjYThcdTBjYWEtXHUw
Y2IzXHUwY2I1LVx1MGNiOVx1MGNiYy1cdTBjYzRcdTBjYzYtXHUwY2M4XHUwY2NhLVx1MGNjZFx1
MGNkNVx1MGNkNlx1MGNkZVx1MGNlMC1cdTBjZTNcdTBjZTYtXHUwY2VmXHUwY2YxXHUwY2YyXHUw
ZDAyXHUwZDAzXHUwZDA1LVx1MGQwY1x1MGQwZS1cdTBkMTBcdTBkMTItXHUwZDNhXHUwZDNkLVx1
MGQ0NFx1MGQ0Ni1cdTBkNDhcdTBkNGEtXHUwZDRlXHUwZDU3XHUwZDYwLVx1MGQ2M1x1MGQ2Ni1c
dTBkNmZcdTBkN2EtXHUwZDdmXHUwZDgyXHUwZDgzXHUwZDg1LVx1MGQ5Nlx1MGQ5YS1cdTBkYjFc
dTBkYjMtXHUwZGJiXHUwZGJkXHUwZGMwLVx1MGRjNlx1MGRjYVx1MGRjZi1cdTBkZDRcdTBkZDZc
dTBkZDgtXHUwZGRmXHUwZGYyXHUwZGYzXHUwZTAxLVx1MGUzYVx1MGU0MC1cdTBlNGVcdTBlNTAt
XHUwZTU5XHUwZTgxXHUwZTgyXHUwZTg0XHUwZTg3XHUwZTg4XHUwZThhXHUwZThkXHUwZTk0LVx1
MGU5N1x1MGU5OS1cdTBlOWZcdTBlYTEtXHUwZWEzXHUwZWE1XHUwZWE3XHUwZWFhXHUwZWFiXHUw
ZWFkLVx1MGViOVx1MGViYi1cdTBlYmRcdTBlYzAtXHUwZWM0XHUwZWM2XHUwZWM4LVx1MGVjZFx1
MGVkMC1cdTBlZDlcdTBlZGMtXHUwZWRmXHUwZjAwXHUwZjE4XHUwZjE5XHUwZjIwLVx1MGYyOVx1
MGYzNVx1MGYzN1x1MGYzOVx1MGYzZS1cdTBmNDdcdTBmNDktXHUwZjZjXHUwZjcxLVx1MGY4NFx1
MGY4Ni1cdTBmOTdcdTBmOTktXHUwZmJjXHUwZmM2XHUxMDAwLVx1MTA0OVx1MTA1MC1cdTEwOWRc
dTEwYTAtXHUxMGM1XHUxMGM3XHUxMGNkXHUxMGQwLVx1MTBmYVx1MTBmYy1cdTEyNDhcdTEyNGEt
XHUxMjRkXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1YS1cdTEyNWRcdTEyNjAtXHUxMjg4XHUxMjhh
LVx1MTI4ZFx1MTI5MC1cdTEyYjBcdTEyYjItXHUxMmI1XHUxMmI4LVx1MTJiZVx1MTJjMFx1MTJj
Mi1cdTEyYzVcdTEyYzgtXHUxMmQ2XHUxMmQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUx
MzVhXHUxMzVkLVx1MTM1Zlx1MTM4MC1cdTEzOGZcdTEzYTAtXHUxM2Y0XHUxNDAxLVx1MTY2Y1x1
MTY2Zi1cdTE2N2ZcdTE2ODEtXHUxNjlhXHUxNmEwLVx1MTZlYVx1MTZlZS1cdTE2ZjBcdTE3MDAt
XHUxNzBjXHUxNzBlLVx1MTcxNFx1MTcyMC1cdTE3MzRcdTE3NDAtXHUxNzUzXHUxNzYwLVx1MTc2
Y1x1MTc2ZS1cdTE3NzBcdTE3NzJcdTE3NzNcdTE3ODAtXHUxN2QzXHUxN2Q3XHUxN2RjXHUxN2Rk
XHUxN2UwLVx1MTdlOVx1MTgwYi1cdTE4MGRcdTE4MTAtXHUxODE5XHUxODIwLVx1MTg3N1x1MTg4
MC1cdTE4YWFcdTE4YjAtXHUxOGY1XHUxOTAwLVx1MTkxY1x1MTkyMC1cdTE5MmJcdTE5MzAtXHUx
OTNiXHUxOTQ2LVx1MTk2ZFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOWFiXHUxOWIwLVx1MTljOVx1
MTlkMC1cdTE5ZDlcdTFhMDAtXHUxYTFiXHUxYTIwLVx1MWE1ZVx1MWE2MC1cdTFhN2NcdTFhN2Yt
XHUxYTg5XHUxYTkwLVx1MWE5OVx1MWFhN1x1MWIwMC1cdTFiNGJcdTFiNTAtXHUxYjU5XHUxYjZi
LVx1MWI3M1x1MWI4MC1cdTFiZjNcdTFjMDAtXHUxYzM3XHUxYzQwLVx1MWM0OVx1MWM0ZC1cdTFj
N2RcdTFjZDAtXHUxY2QyXHUxY2Q0LVx1MWNmNlx1MWQwMC1cdTFkZTZcdTFkZmMtXHUxZjE1XHUx
ZjE4LVx1MWYxZFx1MWYyMC1cdTFmNDVcdTFmNDgtXHUxZjRkXHUxZjUwLVx1MWY1N1x1MWY1OVx1
MWY1Ylx1MWY1ZFx1MWY1Zi1cdTFmN2RcdTFmODAtXHUxZmI0XHUxZmI2LVx1MWZiY1x1MWZiZVx1
MWZjMi1cdTFmYzRcdTFmYzYtXHUxZmNjXHUxZmQwLVx1MWZkM1x1MWZkNi1cdTFmZGJcdTFmZTAt
XHUxZmVjXHUxZmYyLVx1MWZmNFx1MWZmNi1cdTFmZmNcdTIwMGNcdTIwMGRcdTIwM2ZcdTIwNDBc
dTIwNTRcdTIwNzFcdTIwN2ZcdTIwOTAtXHUyMDljXHUyMGQwLVx1MjBkY1x1MjBlMVx1MjBlNS1c
dTIwZjBcdTIxMDJcdTIxMDdcdTIxMGEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExZFx1MjEyNFx1
MjEyNlx1MjEyOFx1MjEyYS1cdTIxMmRcdTIxMmYtXHUyMTM5XHUyMTNjLVx1MjEzZlx1MjE0NS1c
dTIxNDlcdTIxNGVcdTIxNjAtXHUyMTg4XHUyYzAwLVx1MmMyZVx1MmMzMC1cdTJjNWVcdTJjNjAt
XHUyY2U0XHUyY2ViLVx1MmNmM1x1MmQwMC1cdTJkMjVcdTJkMjdcdTJkMmRcdTJkMzAtXHUyZDY3
XHUyZDZmXHUyZDdmLVx1MmQ5Nlx1MmRhMC1cdTJkYTZcdTJkYTgtXHUyZGFlXHUyZGIwLVx1MmRi
Nlx1MmRiOC1cdTJkYmVcdTJkYzAtXHUyZGM2XHUyZGM4LVx1MmRjZVx1MmRkMC1cdTJkZDZcdTJk
ZDgtXHUyZGRlXHUyZGUwLVx1MmRmZlx1MmUyZlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDJmXHUz
MDMxLVx1MzAzNVx1MzAzOC1cdTMwM2NcdTMwNDEtXHUzMDk2XHUzMDk5XHUzMDlhXHUzMDlkLVx1
MzA5Zlx1MzBhMS1cdTMwZmFcdTMwZmMtXHUzMGZmXHUzMTA1LVx1MzEyZFx1MzEzMS1cdTMxOGVc
dTMxYTAtXHUzMWJhXHUzMWYwLVx1MzFmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhMDAw
LVx1YTQ4Y1x1YTRkMC1cdWE0ZmRcdWE1MDAtXHVhNjBjXHVhNjEwLVx1YTYyYlx1YTY0MC1cdWE2
NmZcdWE2NzQtXHVhNjdkXHVhNjdmLVx1YTY5N1x1YTY5Zi1cdWE2ZjFcdWE3MTctXHVhNzFmXHVh
NzIyLVx1YTc4OFx1YTc4Yi1cdWE3OGVcdWE3OTAtXHVhNzkzXHVhN2EwLVx1YTdhYVx1YTdmOC1c
dWE4MjdcdWE4NDAtXHVhODczXHVhODgwLVx1YThjNFx1YThkMC1cdWE4ZDlcdWE4ZTAtXHVhOGY3
XHVhOGZiXHVhOTAwLVx1YTkyZFx1YTkzMC1cdWE5NTNcdWE5NjAtXHVhOTdjXHVhOTgwLVx1YTlj
MFx1YTljZi1cdWE5ZDlcdWFhMDAtXHVhYTM2XHVhYTQwLVx1YWE0ZFx1YWE1MC1cdWFhNTlcdWFh
NjAtXHVhYTc2XHVhYTdhXHVhYTdiXHVhYTgwLVx1YWFjMlx1YWFkYi1cdWFhZGRcdWFhZTAtXHVh
YWVmXHVhYWYyLVx1YWFmNlx1YWIwMS1cdWFiMDZcdWFiMDktXHVhYjBlXHVhYjExLVx1YWIxNlx1
YWIyMC1cdWFiMjZcdWFiMjgtXHVhYjJlXHVhYmMwLVx1YWJlYVx1YWJlY1x1YWJlZFx1YWJmMC1c
dWFiZjlcdWFjMDAtXHVkN2EzXHVkN2IwLVx1ZDdjNlx1ZDdjYi1cdWQ3ZmJcdWY5MDAtXHVmYTZk
XHVmYTcwLVx1ZmFkOVx1ZmIwMC1cdWZiMDZcdWZiMTMtXHVmYjE3XHVmYjFkLVx1ZmIyOFx1ZmIy
YS1cdWZiMzZcdWZiMzgtXHVmYjNjXHVmYjNlXHVmYjQwXHVmYjQxXHVmYjQzXHVmYjQ0XHVmYjQ2
LVx1ZmJiMVx1ZmJkMy1cdWZkM2RcdWZkNTAtXHVmZDhmXHVmZDkyLVx1ZmRjN1x1ZmRmMC1cdWZk
ZmJcdWZlMDAtXHVmZTBmXHVmZTIwLVx1ZmUyNlx1ZmUzM1x1ZmUzNFx1ZmU0ZC1cdWZlNGZcdWZl
NzAtXHVmZTc0XHVmZTc2LVx1ZmVmY1x1ZmYxMC1cdWZmMTlcdWZmMjEtXHVmZjNhXHVmZjNmXHVm
ZjQxLVx1ZmY1YVx1ZmY2Ni1cdWZmYmVcdWZmYzItXHVmZmM3XHVmZmNhLVx1ZmZjZlx1ZmZkMi1c
dWZmZDdcdWZmZGEtXHVmZmRjXScpCi0gICAgfTsKLQotICAgIENhbkFjY2Vzc1N0cmluZ0J5SW5k
ZXggPSB0eXBlb2YgJ2RvY3RyaW5lJ1swXSAhPT0gdW5kZWZpbmVkOwotCi0gICAgZnVuY3Rpb24g
c2xpY2VTb3VyY2Uoc291cmNlLCBpbmRleCwgbGFzdCkgewotICAgICAgICB2YXIgb3V0cHV0Owot
ICAgICAgICBpZiAoIUNhbkFjY2Vzc1N0cmluZ0J5SW5kZXgpIHsKLSAgICAgICAgICAgIG91dHB1
dCA9IHNvdXJjZS5zbGljZShpbmRleCwgbGFzdCkuam9pbignJyk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoaW5kZXgsIGxhc3QpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBvdXRwdXQ7Ci0gICAgfQotCi0gICAgaXNBcnJheSA9IEFycmF5
LmlzQXJyYXk7Ci0gICAgaWYgKCFpc0FycmF5KSB7Ci0gICAgICAgIGlzQXJyYXkgPSBmdW5jdGlv
biBpc0FycmF5KGFyeSkgewotICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9T
dHJpbmcuY2FsbChhcnkpID09PSAnW29iamVjdCBBcnJheV0nOwotICAgICAgICB9OwotICAgIH0K
LQotICAgIGhhc093blByb3BlcnR5ID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIGZ1bmMg
PSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwotICAgICAgICByZXR1cm4gZnVuY3Rp
b24gaGFzT3duUHJvcGVydHkob2JqLCBuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gZnVuYy5j
YWxsKG9iaiwgbmFtZSk7Ci0gICAgICAgIH07Ci0gICAgfSgpKTsKLQotICAgIGZ1bmN0aW9uIHNo
YWxsb3dDb3B5KG9iaikgewotICAgICAgICB2YXIgcmV0ID0ge30sIGtleTsKLSAgICAgICAgZm9y
IChrZXkgaW4gb2JqKSB7Ci0gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkp
IHsKLSAgICAgICAgICAgICAgICByZXRba2V5XSA9IG9ialtrZXldOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNM
aW5lVGVybWluYXRvcihjaCkgewotICAgICAgICByZXR1cm4gY2ggPT09ICdcbicgfHwgY2ggPT09
ICdccicgfHwgY2ggPT09ICdcdTIwMjgnIHx8IGNoID09PSAnXHUyMDI5JzsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBpc1doaXRlU3BhY2UoY2gpIHsKLSAgICAgICAgcmV0dXJuIChjaCA9PT0gJyAn
KSB8fCAoY2ggPT09ICdcdTAwMDknKSB8fCAoY2ggPT09ICdcdTAwMEInKSB8fAotICAgICAgICAg
ICAgKGNoID09PSAnXHUwMDBDJykgfHwgKGNoID09PSAnXHUwMEEwJykgfHwKLSAgICAgICAgICAg
IChjaC5jaGFyQ29kZUF0KDApID49IDB4MTY4MCAmJgotICAgICAgICAgICAgICdcdTE2ODBcdTE4
MEVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhc
dTIwMDlcdTIwMEFcdTIwMkZcdTIwNUZcdTMwMDBcdUZFRkYnLmluZGV4T2YoY2gpID49IDApOwot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIGlzRGVjaW1hbERpZ2l0KGNoKSB7Ci0gICAgICAgIHJldHVy
biAnMDEyMzQ1Njc4OScuaW5kZXhPZihjaCkgPj0gMDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBp
c0hleERpZ2l0KGNoKSB7Ci0gICAgICAgIHJldHVybiAnMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRicu
aW5kZXhPZihjaCkgPj0gMDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpc09jdGFsRGlnaXQoY2gp
IHsKLSAgICAgICAgcmV0dXJuICcwMTIzNDU2NycuaW5kZXhPZihjaCkgPj0gMDsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBpc0FTQ0lJQWxwaGFudW1lcmljKGNoKSB7Ci0gICAgICAgIHJldHVybiAo
Y2ggPj0gJ2EnICYmIGNoIDw9ICd6JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8IChj
aCA+PSAnMCcgJiYgY2ggPD0gJzknKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpc0lkZW50aWZp
ZXJTdGFydChjaCkgewotICAgICAgICByZXR1cm4gKGNoID09PSAnJCcpIHx8IChjaCA9PT0gJ18n
KSB8fCAoY2ggPT09ICdcXCcpIHx8Ci0gICAgICAgICAgICAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6
JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8Ci0gICAgICAgICAgICAoKGNoLmNoYXJD
b2RlQXQoMCkgPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQudGVzdChj
aCkpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllclBhcnQoY2gpIHsKLSAgICAg
ICAgcmV0dXJuIChjaCA9PT0gJyQnKSB8fCAoY2ggPT09ICdfJykgfHwgKGNoID09PSAnXFwnKSB8
fAotICAgICAgICAgICAgKGNoID49ICdhJyAmJiBjaCA8PSAneicpIHx8IChjaCA+PSAnQScgJiYg
Y2ggPD0gJ1onKSB8fAotICAgICAgICAgICAgKChjaCA+PSAnMCcpICYmIChjaCA8PSAnOScpKSB8
fAotICAgICAgICAgICAgKChjaC5jaGFyQ29kZUF0KDApID49IDB4ODApICYmIFJlZ2V4Lk5vbkFz
Y2lpSWRlbnRpZmllclBhcnQudGVzdChjaCkpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGlzVHlw
ZU5hbWUoY2gpIHsKLSAgICAgICAgcmV0dXJuICc+PCgpe31bXSw6Knw/IT0nLmluZGV4T2YoY2gp
ID09PSAtMSAmJiAhaXNXaGl0ZVNwYWNlKGNoKSAmJiAhaXNMaW5lVGVybWluYXRvcihjaCk7Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gaXNQYXJhbVRpdGxlKHRpdGxlKSB7Ci0gICAgICAgIHJldHVy
biB0aXRsZSA9PT0gJ3BhcmFtJyB8fCB0aXRsZSA9PT0gJ2FyZ3VtZW50JyB8fCB0aXRsZSA9PT0g
J2FyZyc7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNQcm9wZXJ0eSh0aXRsZSkgewotICAgICAg
ICByZXR1cm4gdGl0bGUgPT09ICdwcm9wZXJ0eScgfHwgdGl0bGUgPT09ICdwcm9wJzsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBpc05hbWVQYXJhbWV0ZXJSZXF1aXJlZCh0aXRsZSkgewotICAgICAg
ICByZXR1cm4gaXNQYXJhbVRpdGxlKHRpdGxlKSB8fCBpc1Byb3BlcnR5KHRpdGxlKSB8fAotICAg
ICAgICAgICAgdGl0bGUgPT09ICdhbGlhcycgfHwgdGl0bGUgPT09ICd0aGlzJyB8fCB0aXRsZSA9
PT0gJ21peGVzJyB8fCB0aXRsZSA9PT0gJ3JlcXVpcmVzJzsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBpc0FsbG93ZWROYW1lKHRpdGxlKSB7Ci0gICAgICAgIHJldHVybiBpc05hbWVQYXJhbWV0ZXJS
ZXF1aXJlZCh0aXRsZSkgfHwgdGl0bGUgPT09ICdjb25zdCcgfHwgdGl0bGUgPT09ICdjb25zdGFu
dCc7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNBbGxvd2VkTmVzdGVkKHRpdGxlKSB7Ci0gICAg
ICAgIHJldHVybiBpc1Byb3BlcnR5KHRpdGxlKSB8fCBpc1BhcmFtVGl0bGUodGl0bGUpOwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIGlzVHlwZVBhcmFtZXRlclJlcXVpcmVkKHRpdGxlKSB7Ci0gICAg
ICAgIHJldHVybiBpc1BhcmFtVGl0bGUodGl0bGUpIHx8IHRpdGxlID09PSAnZGVmaW5lJyB8fCB0
aXRsZSA9PT0gJ2VudW0nIHx8Ci0gICAgICAgICAgICB0aXRsZSA9PT0gJ2ltcGxlbWVudHMnIHx8
IHRpdGxlID09PSAncmV0dXJuJyB8fAotICAgICAgICAgICAgdGl0bGUgPT09ICd0aGlzJyB8fCB0
aXRsZSA9PT0gJ3R5cGUnIHx8IHRpdGxlID09PSAndHlwZWRlZicgfHwKLSAgICAgICAgICAgIHRp
dGxlID09PSAncmV0dXJucycgfHwgaXNQcm9wZXJ0eSh0aXRsZSk7Ci0gICAgfQotCi0gICAgLy8g
Q29uc2lkZXIgZGVwcmVjYXRpb24gaW5zdGVhZCB1c2luZyAnaXNUeXBlUGFyYW1ldGVyUmVxdWly
ZWQnIGFuZCAnUnVsZXMnIGRlY2xhcmF0aW9uIHRvIHBpY2sgd2hlbiBhIHR5cGUgaXMgb3B0aW9u
YWwvcmVxdWlyZWQKLSAgICAvLyBUaGlzIHdvdWxkIHJlcXVpcmUgY2hhbmdlcyB0byAncGFyc2VU
eXBlJwotICAgIGZ1bmN0aW9uIGlzQWxsb3dlZFR5cGUodGl0bGUpIHsKLSAgICAgICAgcmV0dXJu
IGlzVHlwZVBhcmFtZXRlclJlcXVpcmVkKHRpdGxlKSB8fCB0aXRsZSA9PT0gJ3Rocm93cycgfHwg
dGl0bGUgPT09ICdjb25zdCcgfHwgdGl0bGUgPT09ICdjb25zdGFudCcgfHwKLSAgICAgICAgICAg
IHRpdGxlID09PSAnbmFtZXNwYWNlJyB8fCB0aXRsZSA9PT0gJ21lbWJlcicgfHwgdGl0bGUgPT09
ICd2YXInIHx8IHRpdGxlID09PSAnbW9kdWxlJyB8fAotICAgICAgICAgICAgdGl0bGUgPT09ICdj
b25zdHJ1Y3RvcicgfHwgdGl0bGUgPT09ICdjbGFzcycgfHwgdGl0bGUgPT09ICdleHRlbmRzJyB8
fCB0aXRsZSA9PT0gJ2F1Z21lbnRzJyB8fAotICAgICAgICAgICAgdGl0bGUgPT09ICdwdWJsaWMn
IHx8IHRpdGxlID09PSAncHJpdmF0ZScgfHwgdGl0bGUgPT09ICdwcm90ZWN0ZWQnOwotICAgIH0K
LQotICAgIGZ1bmN0aW9uIERvY3RyaW5lRXJyb3IobWVzc2FnZSkgewotICAgICAgICB0aGlzLm5h
bWUgPSAnRG9jdHJpbmVFcnJvcic7Ci0gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0g
ICAgfQotICAgIERvY3RyaW5lRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7Ci0gICAgRG9j
dHJpbmVFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEb2N0cmluZUVycm9yOwotCi0gICAg
ZnVuY3Rpb24gdGhyb3dFcnJvcihtZXNzYWdlKSB7Ci0gICAgICAgIHRocm93IG5ldyBEb2N0cmlu
ZUVycm9yKG1lc3NhZ2UpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGFzc2VydChjb25kLCB0ZXh0
KSB7Ci0gICAgICAgIGlmIChWRVJTSU9OLnNsaWNlKC0zKSA9PT0gJ2RldicpIHsKLSAgICAgICAg
ICAgIGlmICghY29uZCkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3IodGV4dCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB0cmltKHN0cikgewot
ICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL15ccysvLCAnJykucmVwbGFjZSgvXHMrJC8sICcn
KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB1bndyYXBDb21tZW50KGRvYykgewotICAgICAgICAv
LyBKU0RvYyBjb21tZW50IGlzIGZvbGxvd2luZyBmb3JtCi0gICAgICAgIC8vICAgLyoqCi0gICAg
ICAgIC8vICAgICogLi4uLi4uLgotICAgICAgICAvLyAgICAqLwotICAgICAgICAvLyByZW1vdmUg
LyoqLCAqLyBhbmQgKgotICAgICAgICB2YXIgQkVGT1JFX1NUQVIgPSAwLAotICAgICAgICAgICAg
U1RBUiA9IDEsCi0gICAgICAgICAgICBBRlRFUl9TVEFSID0gMiwKLSAgICAgICAgICAgIGluZGV4
LAotICAgICAgICAgICAgbGVuLAotICAgICAgICAgICAgbW9kZSwKLSAgICAgICAgICAgIHJlc3Vs
dCwKLSAgICAgICAgICAgIGNoOwotCi0gICAgICAgIGRvYyA9IGRvYy5yZXBsYWNlKC9eXC9cKlwq
Py8sICcnKS5yZXBsYWNlKC9cKlwvJC8sICcnKTsKLSAgICAgICAgaW5kZXggPSAwOwotICAgICAg
ICBsZW4gPSBkb2MubGVuZ3RoOwotICAgICAgICBtb2RlID0gQkVGT1JFX1NUQVI7Ci0gICAgICAg
IHJlc3VsdCA9ICcnOwotCi0gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbikgewotICAgICAgICAg
ICAgY2ggPSBkb2NbaW5kZXhdOwotICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgICAg
ICAgICBjYXNlIEJFRk9SRV9TVEFSOgotICAgICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5h
dG9yKGNoKSkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2g7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1vZGUg
PSBTVEFSOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzV2hpdGVTcGFjZShjaCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNoOwotICAgICAgICAgICAgICAgICAgICBt
b2RlID0gQUZURVJfU1RBUjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU1RBUjoKLSAgICAgICAgICAgICAgICBpZiAoIWlzV2hp
dGVTcGFjZShjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNoOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtb2RlID0gaXNMaW5lVGVybWluYXRvcihjaCkg
PyBCRUZPUkVfU1RBUiA6IEFGVEVSX1NUQVI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgIGNhc2UgQUZURVJfU1RBUjoKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2g7
Ci0gICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1vZGUgPSBCRUZPUkVfU1RBUjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbmRleCArPSAxOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvLyBUeXBl
IEV4cHJlc3Npb24gUGFyc2VyCi0KLSAgICAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgICAgICAg
dmFyIFN5bnRheCwKLSAgICAgICAgICAgIFRva2VuLAotICAgICAgICAgICAgc291cmNlLAotICAg
ICAgICAgICAgbGVuZ3RoLAotICAgICAgICAgICAgaW5kZXgsCi0gICAgICAgICAgICBwcmV2aW91
cywKLSAgICAgICAgICAgIHRva2VuLAotICAgICAgICAgICAgdmFsdWU7Ci0KLSAgICAgICAgU3lu
dGF4ID0gewotICAgICAgICAgICAgTnVsbGFibGVMaXRlcmFsOiAnTnVsbGFibGVMaXRlcmFsJywK
LSAgICAgICAgICAgIEFsbExpdGVyYWw6ICdBbGxMaXRlcmFsJywKLSAgICAgICAgICAgIE51bGxM
aXRlcmFsOiAnTnVsbExpdGVyYWwnLAotICAgICAgICAgICAgVW5kZWZpbmVkTGl0ZXJhbDogJ1Vu
ZGVmaW5lZExpdGVyYWwnLAotICAgICAgICAgICAgVm9pZExpdGVyYWw6ICdWb2lkTGl0ZXJhbCcs
Ci0gICAgICAgICAgICBVbmlvblR5cGU6ICdVbmlvblR5cGUnLAotICAgICAgICAgICAgQXJyYXlU
eXBlOiAnQXJyYXlUeXBlJywKLSAgICAgICAgICAgIFJlY29yZFR5cGU6ICdSZWNvcmRUeXBlJywK
LSAgICAgICAgICAgIEZpZWxkVHlwZTogJ0ZpZWxkVHlwZScsCi0gICAgICAgICAgICBGdW5jdGlv
blR5cGU6ICdGdW5jdGlvblR5cGUnLAotICAgICAgICAgICAgUGFyYW1ldGVyVHlwZTogJ1BhcmFt
ZXRlclR5cGUnLAotICAgICAgICAgICAgUmVzdFR5cGU6ICdSZXN0VHlwZScsCi0gICAgICAgICAg
ICBOb25OdWxsYWJsZVR5cGU6ICdOb25OdWxsYWJsZVR5cGUnLAotICAgICAgICAgICAgT3B0aW9u
YWxUeXBlOiAnT3B0aW9uYWxUeXBlJywKLSAgICAgICAgICAgIE51bGxhYmxlVHlwZTogJ051bGxh
YmxlVHlwZScsCi0gICAgICAgICAgICBOYW1lRXhwcmVzc2lvbjogJ05hbWVFeHByZXNzaW9uJywK
LSAgICAgICAgICAgIFR5cGVBcHBsaWNhdGlvbjogJ1R5cGVBcHBsaWNhdGlvbicKLSAgICAgICAg
fTsKLQotICAgICAgICBUb2tlbiA9IHsKLSAgICAgICAgICAgIElMTEVHQUw6IDAsICAgIC8vIElM
TEVHQUwKLSAgICAgICAgICAgIERPVDogMSwgICAgICAgIC8vIC4KLSAgICAgICAgICAgIERPVF9M
VDogMiwgICAgIC8vIC48Ci0gICAgICAgICAgICBSRVNUOiAzLCAgICAgICAvLyAuLi4KLSAgICAg
ICAgICAgIExUOiA0LCAgICAgICAgIC8vIDwKLSAgICAgICAgICAgIEdUOiA1LCAgICAgICAgIC8v
ID4KLSAgICAgICAgICAgIExQQVJFTjogNiwgICAgIC8vICgKLSAgICAgICAgICAgIFJQQVJFTjog
NywgICAgIC8vICkKLSAgICAgICAgICAgIExCUkFDRTogOCwgICAgIC8vIHsKLSAgICAgICAgICAg
IFJCUkFDRTogOSwgICAgIC8vIH0KLSAgICAgICAgICAgIExCUkFDSzogMTAsICAgIC8vIFsKLSAg
ICAgICAgICAgIFJCUkFDSzogMTEsICAgIC8vIF0KLSAgICAgICAgICAgIENPTU1BOiAxMiwgICAg
IC8vICwKLSAgICAgICAgICAgIENPTE9OOiAxMywgICAgIC8vIDoKLSAgICAgICAgICAgIFNUQVI6
IDE0LCAgICAgIC8vICoKLSAgICAgICAgICAgIFBJUEU6IDE1LCAgICAgIC8vIHwKLSAgICAgICAg
ICAgIFFVRVNUSU9OOiAxNiwgIC8vID8KLSAgICAgICAgICAgIEJBTkc6IDE3LCAgICAgIC8vICEK
LSAgICAgICAgICAgIEVRVUFMOiAxOCwgICAgIC8vID0KLSAgICAgICAgICAgIE5BTUU6IDE5LCAg
ICAgIC8vIG5hbWUgdG9rZW4KLSAgICAgICAgICAgIFNUUklORzogMjAsICAgIC8vIHN0cmluZwot
ICAgICAgICAgICAgTlVNQkVSOiAyMSwgICAgLy8gbnVtYmVyCi0gICAgICAgICAgICBFT0Y6IDIy
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gQ29udGV4dChwcmV2aW91cywgaW5kZXgs
IHRva2VuLCB2YWx1ZSkgewotICAgICAgICAgICAgdGhpcy5fcHJldmlvdXMgPSBwcmV2aW91czsK
LSAgICAgICAgICAgIHRoaXMuX2luZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgICB0aGlzLl90b2tl
biA9IHRva2VuOwotICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIENvbnRleHQucHJvdG90eXBlLnJlc3RvcmUgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICBwcmV2aW91cyA9IHRoaXMuX3ByZXZpb3VzOwotICAgICAgICAgICAgaW5kZXggPSB0
aGlzLl9pbmRleDsKLSAgICAgICAgICAgIHRva2VuID0gdGhpcy5fdG9rZW47Ci0gICAgICAgICAg
ICB2YWx1ZSA9IHRoaXMuX3ZhbHVlOwotICAgICAgICB9OwotCi0gICAgICAgIENvbnRleHQuc2F2
ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ29udGV4dChwcmV2aW91
cywgaW5kZXgsIHRva2VuLCB2YWx1ZSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24g
YWR2YW5jZSgpIHsKLSAgICAgICAgICAgIHZhciBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAg
ICAgICBpbmRleCArPSAxOwotICAgICAgICAgICAgcmV0dXJuIGNoOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZnVuY3Rpb24gc2NhbkhleEVzY2FwZShwcmVmaXgpIHsKLSAgICAgICAgICAgIHZhciBp
LCBsZW4sIGNoLCBjb2RlID0gMDsKLQotICAgICAgICAgICAgbGVuID0gKHByZWZpeCA9PT0gJ3Un
KSA/IDQgOiAyOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzSGV4RGlnaXQoc291cmNlW2luZGV4
XSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2ggPSBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyAnMDEyMzQ1Njc4OWFiY2RlZicuaW5kZXhPZihjaC50
b0xvd2VyQ2FzZSgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gJyc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiBzY2FuU3RyaW5nKCkgewotICAgICAgICAgICAgdmFyIHN0ciA9ICcnLCBx
dW90ZSwgY2gsIGNvZGUsIHVuZXNjYXBlZCwgcmVzdG9yZTsgLy9UT0RPIHJldmlldyByZW1vdmFs
IG9jdGFsID0gZmFsc2UKLSAgICAgICAgICAgIHF1b3RlID0gc291cmNlW2luZGV4XTsKLSAgICAg
ICAgICAgICsraW5kZXg7Ci0KLSAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewot
ICAgICAgICAgICAgICAgIGNoID0gYWR2YW5jZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNo
ID09PSBxdW90ZSkgewotICAgICAgICAgICAgICAgICAgICBxdW90ZSA9ICcnOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFwn
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gYWR2YW5jZSgpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlzTGluZVRlcm1pbmF0b3IoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICduJzoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHInOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcdCc7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3RvcmUgPSBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmVzY2FwZWQgPSBz
Y2FuSGV4RXNjYXBlKGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2Nh
cGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSB1bmVzY2FwZWQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gY2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnYic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcYic7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICdmJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xmJzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J3YnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHYnOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAnMDEyMzQ1NjcnLmluZGV4
T2YoY2gpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFwwIGlzIG5vdCBv
Y3RhbCBlc2NhcGUgc2VxdWVuY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RGVwcmVjYXRpbmcgdW51c2VkIGNvZGUuIFRPRE8gcmV2aWV3IHJlbW92YWwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy9pZiAoY29kZSAhPT0gMCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICBvY3RhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
bmRleCA8IGxlbmd0aCAmJiBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVE9ETyBSZXZpZXcgUmVtb3ZhbCBvY3RhbCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAq
IDggKyAnMDEyMzQ1NjcnLmluZGV4T2YoYWR2YW5jZSgpKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gMyBkaWdpdHMgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHN0cmlu
ZyBzdGFydHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggMCwg
MSwgMiwgMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCcwMTIzJy5p
bmRleE9mKGNoKSA+PSAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4IDwgbGVuZ3RoICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2Nycu
aW5kZXhPZihhZHZhbmNlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ciArPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2gg
PT09ICAnXHInICYmIHNvdXJjZVtpbmRleF0gPT09ICdcbicpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9y
KGNoKSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocXVvdGUgIT09ICcnKSB7Ci0gICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCBxdW90ZScpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB2YWx1ZSA9IHN0cjsKLSAgICAgICAgICAgIHJldHVybiBUb2tlbi5TVFJJ
Tkc7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzY2FuTnVtYmVyKCkgewotICAgICAg
ICAgICAgdmFyIG51bWJlciwgY2g7Ci0KLSAgICAgICAgICAgIG51bWJlciA9ICcnOwotICAgICAg
ICAgICAgaWYgKGNoICE9PSAnLicpIHsKLSAgICAgICAgICAgICAgICBudW1iZXIgPSBhZHZhbmNl
KCk7Ci0gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOwotCi0gICAgICAgICAgICAg
ICAgaWYgKG51bWJlciA9PT0gJzAnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0g
J3gnIHx8IGNoID09PSAnWCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBh
ZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0hleERpZ2l0KGNoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51
bWJlci5sZW5ndGggPD0gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkg
MHgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRv
a2VuJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
ID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNJZGVu
dGlmaWVyU3RhcnQoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93
RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IHBhcnNlSW50KG51bWJlciwgMTYpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFRva2VuLk5VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBudW1i
ZXIgKz0gYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwg
bGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhd
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPY3RhbERpZ2l0KGNoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFu
Y2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2gg
PSBzb3VyY2VbaW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lkZW50
aWZpZXJTdGFydChjaCkgfHwgaXNEZWNpbWFsRGlnaXQoY2gpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KG51bWJlciwgOCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gVG9rZW4uTlVNQkVSOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KGNoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgd2hp
bGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2lu
ZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0RlY2ltYWxEaWdpdChjaCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY2ggPT09ICcuJykgewotICAgICAgICAg
ICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4
IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpc0RlY2ltYWxEaWdpdChjaCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7Ci0gICAg
ICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKLQotICAgICAgICAgICAgICAgIGNoID0g
c291cmNlW2luZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcrJyB8fCBjaCA9PT0g
Jy0nKSB7Ci0gICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOwotICAgICAg
ICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
bnVtYmVyICs9IGFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwg
bGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRGVjaW1hbERpZ2l0KGNoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAg
ICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoaXNJZGVudGlm
aWVyU3RhcnQoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0
ZWQgdG9rZW4nKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHZhbHVlID0gcGFyc2VGbG9hdChudW1iZXIpOwotICAgICAgICAgICAgcmV0dXJuIFRva2Vu
Lk5VTUJFUjsKLSAgICAgICAgfQotCi0KLSAgICAgICAgZnVuY3Rpb24gc2NhblR5cGVOYW1lKCkg
ewotICAgICAgICAgICAgdmFyIGNoLCBjaDI7Ci0KLSAgICAgICAgICAgIHZhbHVlID0gYWR2YW5j
ZSgpOwotICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIGlzVHlwZU5hbWUoc291
cmNlW2luZGV4XSkpIHsKLSAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAg
ICAgICAgICAgICAgaWYgKGNoID09PSAnLicpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChp
bmRleCArIDEpIDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaDIgPSBzb3Vy
Y2VbaW5kZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaDIgPT09ICc8Jykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHZhbHVlICs9IGFkdmFuY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiBUb2tlbi5OQU1FOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gbmV4dCgp
IHsKLSAgICAgICAgICAgIHZhciBjaDsKLQotICAgICAgICAgICAgcHJldmlvdXMgPSBpbmRleDsK
LQotICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIGlzV2hpdGVTcGFjZShzb3Vy
Y2VbaW5kZXhdKSkgewotICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICB0b2tl
biA9IFRva2VuLkVPRjsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgICAgIHN3aXRj
aCAoY2gpIHsKLSAgICAgICAgICAgIGNhc2UgJyInOgotICAgICAgICAgICAgICAgIHRva2VuID0g
c2NhblN0cmluZygpOwotICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKLQotICAgICAgICAg
ICAgY2FzZSAnOic6Ci0gICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAg
IHRva2VuID0gVG9rZW4uQ09MT047Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotCi0g
ICAgICAgICAgICBjYXNlICcsJzoKLSAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAg
ICAgICAgICAgdG9rZW4gPSBUb2tlbi5DT01NQTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9r
ZW47Ci0KLSAgICAgICAgICAgIGNhc2UgJygnOgotICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsK
LSAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkxQQVJFTjsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9rZW47Ci0KLSAgICAgICAgICAgIGNhc2UgJyknOgotICAgICAgICAgICAgICAgIGFk
dmFuY2UoKTsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlJQQVJFTjsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdG9rZW47Ci0KLSAgICAgICAgICAgIGNhc2UgJ1snOgotICAgICAgICAg
ICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkxCUkFDSzsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0KLSAgICAgICAgICAgIGNhc2UgJ10nOgot
ICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2Vu
LlJCUkFDSzsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0KLSAgICAgICAgICAgIGNh
c2UgJ3snOgotICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICB0b2tl
biA9IFRva2VuLkxCUkFDRTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0KLSAgICAg
ICAgICAgIGNhc2UgJ30nOgotICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAg
ICAgICB0b2tlbiA9IFRva2VuLlJCUkFDRTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47
Ci0KLSAgICAgICAgICAgIGNhc2UgJy4nOgotICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y2ggPSBzb3VyY2VbaW5kZXhdOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICc8Jykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4gPSBUb2tlbi5ET1RfTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdG9rZW47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBp
ZiAoY2ggPT09ICcuJyAmJiBpbmRleCArIDEgPCBsZW5ndGggJiYgc291cmNlW2luZGV4ICsgMV0g
PT09ICcuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4g
PSBUb2tlbi5SRVNUOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERp
Z2l0KGNoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzY2FuTnVtYmVyKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5E
T1Q7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotCi0gICAgICAgICAgICBjYXNlICc8
JzoKLSAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBU
b2tlbi5MVDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0KLSAgICAgICAgICAgIGNh
c2UgJz4nOgotICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICB0b2tl
biA9IFRva2VuLkdUOwotICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKLQotICAgICAgICAg
ICAgY2FzZSAnKic6Ci0gICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAg
IHRva2VuID0gVG9rZW4uU1RBUjsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0KLSAg
ICAgICAgICAgIGNhc2UgJ3wnOgotICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAg
ICAgICAgICB0b2tlbiA9IFRva2VuLlBJUEU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2Vu
OwotCi0gICAgICAgICAgICBjYXNlICc/JzoKLSAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0g
ICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5RVUVTVElPTjsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9rZW47Ci0KLSAgICAgICAgICAgIGNhc2UgJyEnOgotICAgICAgICAgICAgICAgIGFk
dmFuY2UoKTsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkJBTkc7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRva2VuOwotCi0gICAgICAgICAgICBjYXNlICc9JzoKLSAgICAgICAgICAg
ICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5FUVVBTDsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KGNoKSkgewotICAgICAgICAgICAgICAgICAg
ICB0b2tlbiA9IHNjYW5OdW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2Vu
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHR5cGUgc3RyaW5nIHBl
cm1pdHMgZm9sbG93aW5nIGNhc2UsCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAg
ICAvLyBuYW1lc3BhY2UubW9kdWxlLk15Q2xhc3MKLSAgICAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgICAgIC8vIHRoaXMgcmVkdWNlZCAxIHRva2VuIFRLX05BTUUKLSAgICAgICAgICAgICAg
ICBpZiAoaXNUeXBlTmFtZShjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzY2Fu
VHlwZU5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uSUxMRUdBTDsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiBjb25zdW1lKHRhcmdldCwgdGV4dCkgewotICAgICAgICAgICAgYXNzZXJ0
KHRva2VuID09PSB0YXJnZXQsIHRleHQgfHwgJ2NvbnN1bWVkIHRva2VuIG5vdCBtYXRjaGVkJyk7
Ci0gICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBleHBl
Y3QodGFyZ2V0KSB7Ci0gICAgICAgICAgICBpZiAodG9rZW4gIT09IHRhcmdldCkgewotICAgICAg
ICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVuaW9uVHlwZSA6
PSAnKCcgVHlwZVVuaW9uTGlzdCAnKScKLSAgICAgICAgLy8KLSAgICAgICAgLy8gVHlwZVVuaW9u
TGlzdCA6PQotICAgICAgICAvLyAgICAgPDxlbXB0eT4+Ci0gICAgICAgIC8vICAgfCBOb25lbXB0
eVR5cGVVbmlvbkxpc3QKLSAgICAgICAgLy8KLSAgICAgICAgLy8gTm9uZW1wdHlUeXBlVW5pb25M
aXN0IDo9Ci0gICAgICAgIC8vICAgICBUeXBlRXhwcmVzc2lvbgotICAgICAgICAvLyAgIHwgVHlw
ZUV4cHJlc3Npb24gJ3wnIE5vbmVtcHR5VHlwZVVuaW9uTGlzdAotICAgICAgICBmdW5jdGlvbiBw
YXJzZVVuaW9uVHlwZSgpIHsKLSAgICAgICAgICAgIHZhciBlbGVtZW50czsKLSAgICAgICAgICAg
IGNvbnN1bWUoVG9rZW4uTFBBUkVOLCAnVW5pb25UeXBlIHNob3VsZCBzdGFydCB3aXRoICgnKTsK
LSAgICAgICAgICAgIGVsZW1lbnRzID0gW107Ci0gICAgICAgICAgICBpZiAodG9rZW4gIT09IFRv
a2VuLlJQQVJFTikgewotICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUeXBlRXhwcmVzc2lvbigpKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5SUEFSRU4pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGV4cGVjdChUb2tlbi5QSVBFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjb25zdW1lKFRva2VuLlJQQVJFTiwgJ1VuaW9uVHlwZSBzaG91bGQgZW5k
IHdpdGggKScpOwotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguVW5pb25UeXBlLAotICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cwotICAg
ICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFycmF5VHlwZSA6PSAnWycgRWxl
bWVudFR5cGVMaXN0ICddJwotICAgICAgICAvLwotICAgICAgICAvLyBFbGVtZW50VHlwZUxpc3Qg
Oj0KLSAgICAgICAgLy8gICAgIDw8ZW1wdHk+PgotICAgICAgICAvLyAgfCBUeXBlRXhwcmVzc2lv
bgotICAgICAgICAvLyAgfCAnLi4uJyBUeXBlRXhwcmVzc2lvbgotICAgICAgICAvLyAgfCBUeXBl
RXhwcmVzc2lvbiAnLCcgRWxlbWVudFR5cGVMaXN0Ci0gICAgICAgIGZ1bmN0aW9uIHBhcnNlQXJy
YXlUeXBlKCkgewotICAgICAgICAgICAgdmFyIGVsZW1lbnRzOwotICAgICAgICAgICAgY29uc3Vt
ZShUb2tlbi5MQlJBQ0ssICdBcnJheVR5cGUgc2hvdWxkIHN0YXJ0IHdpdGggWycpOwotICAgICAg
ICAgICAgZWxlbWVudHMgPSBbXTsKLSAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPT0gVG9rZW4u
UkJSQUNLKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5SRVNUKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUkVTVCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnRzLnB1c2goewotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4
LlJlc3RUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcGFyc2VUeXBl
RXhwcmVzc2lvbigpCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBl
bGVtZW50cy5wdXNoKHBhcnNlVHlwZUV4cHJlc3Npb24oKSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUkJSQUNLKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGV4cGVjdChUb2tlbi5DT01NQSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZXhwZWN0KFRva2VuLlJCUkFDSyk7Ci0gICAgICAgICAgICBy
ZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5BcnJheVR5cGUsCi0gICAgICAg
ICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRzCi0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0K
LSAgICAgICAgZnVuY3Rpb24gcGFyc2VGaWVsZE5hbWUoKSB7Ci0gICAgICAgICAgICB2YXIgdiA9
IHZhbHVlOwotICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OQU1FIHx8IHRva2VuID09
PSBUb2tlbi5TVFJJTkcpIHsKLSAgICAgICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHY7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0b2tlbiA9PT0g
VG9rZW4uTlVNQkVSKSB7Ci0gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5OVU1CRVIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIEZpZWxkVHlwZSA6PQotICAgICAgICAvLyAgICAgRmllbGROYW1lCi0gICAgICAgIC8v
ICAgfCBGaWVsZE5hbWUgJzonIFR5cGVFeHByZXNzaW9uCi0gICAgICAgIC8vCi0gICAgICAgIC8v
IEZpZWxkTmFtZSA6PQotICAgICAgICAvLyAgICAgTmFtZUV4cHJlc3Npb24KLSAgICAgICAgLy8g
ICB8IFN0cmluZ0xpdGVyYWwKLSAgICAgICAgLy8gICB8IE51bWJlckxpdGVyYWwKLSAgICAgICAg
Ly8gICB8IFJlc2VydmVkSWRlbnRpZmllcgotICAgICAgICBmdW5jdGlvbiBwYXJzZUZpZWxkVHlw
ZSgpIHsKLSAgICAgICAgICAgIHZhciBrZXk7Ci0KLSAgICAgICAgICAgIGtleSA9IHBhcnNlRmll
bGROYW1lKCk7Ci0gICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkNPTE9OKSB7Ci0gICAg
ICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT0xPTik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkZpZWxkVHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAga2V5OiBrZXksCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwYXJzZVR5
cGVFeHByZXNzaW9uKCkKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRmllbGRUeXBlLAot
ICAgICAgICAgICAgICAgIGtleToga2V5LAotICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsCi0g
ICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVjb3JkVHlwZSA6PSAneycg
RmllbGRUeXBlTGlzdCAnfScKLSAgICAgICAgLy8KLSAgICAgICAgLy8gRmllbGRUeXBlTGlzdCA6
PQotICAgICAgICAvLyAgICAgPDxlbXB0eT4+Ci0gICAgICAgIC8vICAgfCBGaWVsZFR5cGUKLSAg
ICAgICAgLy8gICB8IEZpZWxkVHlwZSAnLCcgRmllbGRUeXBlTGlzdAotICAgICAgICBmdW5jdGlv
biBwYXJzZVJlY29yZFR5cGUoKSB7Ci0gICAgICAgICAgICB2YXIgZmllbGRzOwotCi0gICAgICAg
ICAgICBjb25zdW1lKFRva2VuLkxCUkFDRSwgJ1JlY29yZFR5cGUgc2hvdWxkIHN0YXJ0IHdpdGgg
eycpOwotICAgICAgICAgICAgZmllbGRzID0gW107Ci0gICAgICAgICAgICBpZiAodG9rZW4gPT09
IFRva2VuLkNPTU1BKSB7Ci0gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT01NQSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPT0gVG9r
ZW4uUkJSQUNFKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHBhcnNlRmllbGRU
eXBlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJCUkFDRSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLkNPTU1BKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGV4cGVjdChUb2tlbi5SQlJBQ0UpOwotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguUmVjb3JkVHlwZSwKLSAgICAgICAgICAgICAgICBmaWVsZHM6
IGZpZWxkcwotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHBh
cnNlTmFtZUV4cHJlc3Npb24oKSB7Ci0gICAgICAgICAgICB2YXIgbmFtZSA9IHZhbHVlOwotICAg
ICAgICAgICAgZXhwZWN0KFRva2VuLk5BTUUpOwotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAg
ICAgICAgICAgICB0eXBlOiBTeW50YXguTmFtZUV4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAg
bmFtZTogbmFtZQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFR5cGVF
eHByZXNzaW9uTGlzdCA6PQotICAgICAgICAvLyAgICAgVG9wTGV2ZWxUeXBlRXhwcmVzc2lvbgot
ICAgICAgICAvLyAgIHwgVG9wTGV2ZWxUeXBlRXhwcmVzc2lvbiAnLCcgVHlwZUV4cHJlc3Npb25M
aXN0Ci0gICAgICAgIGZ1bmN0aW9uIHBhcnNlVHlwZUV4cHJlc3Npb25MaXN0KCkgewotICAgICAg
ICAgICAgdmFyIGVsZW1lbnRzID0gW107Ci0KLSAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFy
c2VUb3AoKSk7Ci0gICAgICAgICAgICB3aGlsZSAodG9rZW4gPT09IFRva2VuLkNPTU1BKSB7Ci0g
ICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT01NQSk7Ci0gICAgICAgICAgICAgICAgZWxl
bWVudHMucHVzaChwYXJzZVRvcCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biBlbGVtZW50czsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFR5cGVOYW1lIDo9Ci0gICAgICAg
IC8vICAgICBOYW1lRXhwcmVzc2lvbgotICAgICAgICAvLyAgIHwgTmFtZUV4cHJlc3Npb24gVHlw
ZUFwcGxpY2F0aW9uCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFR5cGVBcHBsaWNhdGlvbiA6PQot
ICAgICAgICAvLyAgICAgJy48JyBUeXBlRXhwcmVzc2lvbkxpc3QgJz4nCi0gICAgICAgIC8vICAg
fCAnPCcgVHlwZUV4cHJlc3Npb25MaXN0ICc+JyAgIC8vIHRoaXMgaXMgZXh0ZW5zaW9uIG9mIGRv
Y3RyaW5lCi0gICAgICAgIGZ1bmN0aW9uIHBhcnNlVHlwZU5hbWUoKSB7Ci0gICAgICAgICAgICB2
YXIgZXhwciwgYXBwbGljYXRpb25zOwotCi0gICAgICAgICAgICBleHByID0gcGFyc2VOYW1lRXhw
cmVzc2lvbigpOwotICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5ET1RfTFQgfHwgdG9r
ZW4gPT09IFRva2VuLkxUKSB7Ci0gICAgICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAg
ICAgIGFwcGxpY2F0aW9ucyA9IHBhcnNlVHlwZUV4cHJlc3Npb25MaXN0KCk7Ci0gICAgICAgICAg
ICAgICAgZXhwZWN0KFRva2VuLkdUKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAg
ICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVHlwZUFwcGxpY2F0aW9uLAotICAgICAgICAgICAg
ICAgICAgICBleHByZXNzaW9uOiBleHByLAotICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlv
bnM6IGFwcGxpY2F0aW9ucwotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gZXhwcjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlc3VsdFR5cGUg
Oj0KLSAgICAgICAgLy8gICAgIDw8ZW1wdHk+PgotICAgICAgICAvLyAgIHwgJzonIHZvaWQKLSAg
ICAgICAgLy8gICB8ICc6JyBUeXBlRXhwcmVzc2lvbgotICAgICAgICAvLwotICAgICAgICAvLyBC
TkYgaXMgYWJvdmUKLSAgICAgICAgLy8gYnV0LCB3ZSByZW1vdmUgPDxlbXB0eT4+IHBhdHRlcm4s
IHNvIHRva2VuIGlzIGFsd2F5cyBUeXBlVG9rZW46OkNPTE9OCi0gICAgICAgIGZ1bmN0aW9uIHBh
cnNlUmVzdWx0VHlwZSgpIHsKLSAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQ09MT04sICdSZXN1
bHRUeXBlIHNob3VsZCBzdGFydCB3aXRoIDonKTsKLSAgICAgICAgICAgIGlmICh0b2tlbiA9PT0g
VG9rZW4uTkFNRSAmJiB2YWx1ZSA9PT0gJ3ZvaWQnKSB7Ci0gICAgICAgICAgICAgICAgY29uc3Vt
ZShUb2tlbi5OQU1FKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAg
ICAgICB0eXBlOiBTeW50YXguVm9pZExpdGVyYWwKLSAgICAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlVHlwZUV4cHJlc3Npb24oKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIFBhcmFtZXRlcnNUeXBlIDo9Ci0gICAgICAgIC8vICAgICBSZXN0
UGFyYW1ldGVyVHlwZQotICAgICAgICAvLyAgIHwgTm9uUmVzdFBhcmFtZXRlcnNUeXBlCi0gICAg
ICAgIC8vICAgfCBOb25SZXN0UGFyYW1ldGVyc1R5cGUgJywnIFJlc3RQYXJhbWV0ZXJUeXBlCi0g
ICAgICAgIC8vCi0gICAgICAgIC8vIFJlc3RQYXJhbWV0ZXJUeXBlIDo9Ci0gICAgICAgIC8vICAg
ICAnLi4uJwotICAgICAgICAvLyAgICAgJy4uLicgSWRlbnRpZmllcgotICAgICAgICAvLwotICAg
ICAgICAvLyBOb25SZXN0UGFyYW1ldGVyc1R5cGUgOj0KLSAgICAgICAgLy8gICAgIFBhcmFtZXRl
clR5cGUgJywnIE5vblJlc3RQYXJhbWV0ZXJzVHlwZQotICAgICAgICAvLyAgIHwgUGFyYW1ldGVy
VHlwZQotICAgICAgICAvLyAgIHwgT3B0aW9uYWxQYXJhbWV0ZXJzVHlwZQotICAgICAgICAvLwot
ICAgICAgICAvLyBPcHRpb25hbFBhcmFtZXRlcnNUeXBlIDo9Ci0gICAgICAgIC8vICAgICBPcHRp
b25hbFBhcmFtZXRlclR5cGUKLSAgICAgICAgLy8gICB8IE9wdGlvbmFsUGFyYW1ldGVyVHlwZSwg
T3B0aW9uYWxQYXJhbWV0ZXJzVHlwZQotICAgICAgICAvLwotICAgICAgICAvLyBPcHRpb25hbFBh
cmFtZXRlclR5cGUgOj0gUGFyYW1ldGVyVHlwZT0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gUGFy
YW1ldGVyVHlwZSA6PSBUeXBlRXhwcmVzc2lvbiB8IElkZW50aWZpZXIgJzonIFR5cGVFeHByZXNz
aW9uCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElkZW50aWZpZXIgaXMgIm5ldyIgb3IgInRoaXMi
Ci0gICAgICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVyc1R5cGUoKSB7Ci0gICAgICAgICAgICB2
YXIgcGFyYW1zID0gW10sIG5vcm1hbCA9IHRydWUsIGV4cHIsIHJlc3QgPSBmYWxzZTsKLQotICAg
ICAgICAgICAgd2hpbGUgKHRva2VuICE9PSBUb2tlbi5SUEFSRU4pIHsKLSAgICAgICAgICAgICAg
ICBpZiAodG9rZW4gPT09IFRva2VuLlJFU1QpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUmVz
dFBhcmFtZXRlclR5cGUKLSAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5SRVNUKTsK
LSAgICAgICAgICAgICAgICAgICAgcmVzdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgZXhwciA9IHBhcnNlVHlwZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAg
ICAgICBpZiAoZXhwci50eXBlID09PSBTeW50YXguTmFtZUV4cHJlc3Npb24gJiYgdG9rZW4gPT09
IFRva2VuLkNPTE9OKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElkZW50aWZpZXIgJzonIFR5
cGVFeHByZXNzaW9uCi0gICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQ09MT04pOwot
ICAgICAgICAgICAgICAgICAgICBleHByID0gewotICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LlBhcmFtZXRlclR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBl
eHByLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBwYXJzZVR5cGVF
eHByZXNzaW9uKCkKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5FUVVBTCkgewotICAgICAgICAgICAg
ICAgICAgICBjb25zdW1lKFRva2VuLkVRVUFMKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwciA9
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5PcHRpb25hbFR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByCi0gICAgICAgICAgICAgICAg
ICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIG5vcm1hbCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9ybWFsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHJl
c3QpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhwciA9IHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGU6IFN5bnRheC5SZXN0VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJl
c3Npb246IGV4cHIKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goZXhwcik7Ci0gICAgICAgICAgICAgICAgaWYgKHRv
a2VuICE9PSBUb2tlbi5SUEFSRU4pIHsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFRva2Vu
LkNPTU1BKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gcGFyYW1zOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRnVuY3Rpb25UeXBlIDo9ICdm
dW5jdGlvbicgRnVuY3Rpb25TaWduYXR1cmVUeXBlCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEZ1
bmN0aW9uU2lnbmF0dXJlVHlwZSA6PQotICAgICAgICAvLyAgIHwgVHlwZVBhcmFtZXRlcnMgJygn
ICcpJyBSZXN1bHRUeXBlCi0gICAgICAgIC8vICAgfCBUeXBlUGFyYW1ldGVycyAnKCcgUGFyYW1l
dGVyc1R5cGUgJyknIFJlc3VsdFR5cGUKLSAgICAgICAgLy8gICB8IFR5cGVQYXJhbWV0ZXJzICco
JyAndGhpcycgJzonIFR5cGVOYW1lICcpJyBSZXN1bHRUeXBlCi0gICAgICAgIC8vICAgfCBUeXBl
UGFyYW1ldGVycyAnKCcgJ3RoaXMnICc6JyBUeXBlTmFtZSAnLCcgUGFyYW1ldGVyc1R5cGUgJykn
IFJlc3VsdFR5cGUKLSAgICAgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvblR5cGUoKSB7Ci0gICAg
ICAgICAgICB2YXIgaXNOZXcsIHRoaXNCaW5kaW5nLCBwYXJhbXMsIHJlc3VsdCwgZm5UeXBlOwot
ICAgICAgICAgICAgYXNzZXJ0KHRva2VuID09PSBUb2tlbi5OQU1FICYmIHZhbHVlID09PSAnZnVu
Y3Rpb24nLCAnRnVuY3Rpb25UeXBlIHNob3VsZCBzdGFydCB3aXRoIFwnZnVuY3Rpb25cJycpOwot
ICAgICAgICAgICAgY29uc3VtZShUb2tlbi5OQU1FKTsKLQotICAgICAgICAgICAgLy8gR29vZ2xl
IENsb3N1cmUgQ29tcGlsZXIgaXMgbm90IGltcGxlbWVudGluZyBUeXBlUGFyYW1ldGVycy4KLSAg
ICAgICAgICAgIC8vIFNvIHdlIGRvIG5vdC4gaWYgd2UgZG9uJ3QgZ2V0ICcoJywgd2Ugc2VlIGl0
IGFzIGVycm9yLgotICAgICAgICAgICAgZXhwZWN0KFRva2VuLkxQQVJFTik7Ci0KLSAgICAgICAg
ICAgIGlzTmV3ID0gZmFsc2U7Ci0gICAgICAgICAgICBwYXJhbXMgPSBbXTsKLSAgICAgICAgICAg
IHRoaXNCaW5kaW5nID0gbnVsbDsKLSAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUlBB
UkVOKSB7Ci0gICAgICAgICAgICAgICAgLy8gUGFyYW1ldGVyc1R5cGUgb3IgJ3RoaXMnCi0gICAg
ICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OQU1FICYmCi0gICAgICAgICAgICAgICAg
ICAgICAgICAodmFsdWUgPT09ICd0aGlzJyB8fCB2YWx1ZSA9PT0gJ25ldycpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vICd0aGlzJyBvciAnbmV3JwotICAgICAgICAgICAgICAgICAgICAvLyAn
bmV3JyBpcyBDbG9zdXJlIENvbXBpbGVyIGV4dGVuc2lvbgotICAgICAgICAgICAgICAgICAgICBp
c05ldyA9IHZhbHVlID09PSAnbmV3JzsKLSAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tl
bi5OQU1FKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLkNPTE9OKTsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpc0JpbmRpbmcgPSBwYXJzZVR5cGVOYW1lKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09NTUEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN1bWUoVG9rZW4uQ09NTUEpOwotICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zID0gcGFyc2VQYXJhbWV0ZXJzVHlwZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyc2VQ
YXJhbWV0ZXJzVHlwZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZXhwZWN0KFRva2VuLlJQQVJFTik7Ci0KLSAgICAgICAgICAgIHJlc3VsdCA9IG51
bGw7Ci0gICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkNPTE9OKSB7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gcGFyc2VSZXN1bHRUeXBlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZuVHlwZSA9IHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRnVuY3Rpb25U
eXBlLAotICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLAotICAgICAgICAgICAgICAgIHJl
c3VsdDogcmVzdWx0Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgaWYgKHRoaXNCaW5kaW5n
KSB7Ci0gICAgICAgICAgICAgICAgLy8gYXZvaWQgYWRkaW5nIG51bGwgJ25ldycgYW5kICd0aGlz
JyBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgZm5UeXBlWyd0aGlzJ10gPSB0aGlzQmluZGlu
ZzsKLSAgICAgICAgICAgICAgICBpZiAoaXNOZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgZm5U
eXBlWyduZXcnXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIGZuVHlwZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEJhc2ljVHlw
ZUV4cHJlc3Npb24gOj0KLSAgICAgICAgLy8gICAgICcqJwotICAgICAgICAvLyAgIHwgJ251bGwn
Ci0gICAgICAgIC8vICAgfCAndW5kZWZpbmVkJwotICAgICAgICAvLyAgIHwgVHlwZU5hbWUKLSAg
ICAgICAgLy8gICB8IEZ1bmN0aW9uVHlwZQotICAgICAgICAvLyAgIHwgVW5pb25UeXBlCi0gICAg
ICAgIC8vICAgfCBSZWNvcmRUeXBlCi0gICAgICAgIC8vICAgfCBBcnJheVR5cGUKLSAgICAgICAg
ZnVuY3Rpb24gcGFyc2VCYXNpY1R5cGVFeHByZXNzaW9uKCkgewotICAgICAgICAgICAgdmFyIGNv
bnRleHQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgICAgICBjYXNlIFRv
a2VuLlNUQVI6Ci0gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5TVEFSKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQWxsTGl0
ZXJhbAotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGNhc2UgVG9rZW4uTFBBUkVO
OgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVVuaW9uVHlwZSgpOwotCi0gICAgICAgICAg
ICBjYXNlIFRva2VuLkxCUkFDSzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJheVR5
cGUoKTsKLQotICAgICAgICAgICAgY2FzZSBUb2tlbi5MQlJBQ0U6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHBhcnNlUmVjb3JkVHlwZSgpOwotCi0gICAgICAgICAgICBjYXNlIFRva2VuLk5BTUU6
Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnbnVsbCcpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3VtZShUb2tlbi5OQU1FKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxsTGl0ZXJhbAotICAgICAg
ICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3VtZShU
b2tlbi5OQU1FKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmRlZmluZWRMaXRlcmFsCi0gICAgICAgICAgICAgICAg
ICAgIH07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY29udGV4dCA9IENv
bnRleHQuc2F2ZSgpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykg
ewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHBhcnNlRnVuY3Rpb25UeXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHBhcnNlVHlwZU5hbWUoKTsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBUeXBlRXhwcmVzc2lvbiA6PQotICAgICAgICAvLyAgICAgQmFzaWNU
eXBlRXhwcmVzc2lvbgotICAgICAgICAvLyAgIHwgJz8nIEJhc2ljVHlwZUV4cHJlc3Npb24KLSAg
ICAgICAgLy8gICB8ICchJyBCYXNpY1R5cGVFeHByZXNzaW9uCi0gICAgICAgIC8vICAgfCBCYXNp
Y1R5cGVFeHByZXNzaW9uICc/JwotICAgICAgICAvLyAgIHwgQmFzaWNUeXBlRXhwcmVzc2lvbiAn
IScKLSAgICAgICAgLy8gICB8ICc/JwotICAgICAgICAvLyAgIHwgQmFzaWNUeXBlRXhwcmVzc2lv
biAnW10nCi0gICAgICAgIGZ1bmN0aW9uIHBhcnNlVHlwZUV4cHJlc3Npb24oKSB7Ci0gICAgICAg
ICAgICB2YXIgZXhwcjsKLQotICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5RVUVTVElP
TikgewotICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUVVFU1RJT04pOwotICAgICAgICAg
ICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09NTUEgfHwgdG9rZW4gPT09IFRva2VuLkVRVUFM
IHx8IHRva2VuID09PSBUb2tlbi5SQlJBQ0UgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2VuID09PSBUb2tlbi5SUEFSRU4gfHwgdG9rZW4gPT09IFRva2VuLlBJUEUgfHwgdG9rZW4gPT09
IFRva2VuLkVPRiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPT09IFRva2VuLlJC
UkFDSykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4Lk51bGxhYmxlTGl0ZXJhbAotICAgICAgICAgICAgICAgICAgICB9
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAg
ICAgICAgICAgICB0eXBlOiBTeW50YXguTnVsbGFibGVUeXBlLAotICAgICAgICAgICAgICAgICAg
ICBleHByZXNzaW9uOiBwYXJzZUJhc2ljVHlwZUV4cHJlc3Npb24oKSwKLSAgICAgICAgICAgICAg
ICAgICAgcHJlZml4OiB0cnVlCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5CQU5HKSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3VtZShUb2tlbi5CQU5HKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAg
ICAgICAgICAgICB0eXBlOiBTeW50YXguTm9uTnVsbGFibGVUeXBlLAotICAgICAgICAgICAgICAg
ICAgICBleHByZXNzaW9uOiBwYXJzZUJhc2ljVHlwZUV4cHJlc3Npb24oKSwKLSAgICAgICAgICAg
ICAgICAgICAgcHJlZml4OiB0cnVlCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZXhwciA9IHBhcnNlQmFzaWNUeXBlRXhwcmVzc2lvbigpOwotICAgICAg
ICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5CQU5HKSB7Ci0gICAgICAgICAgICAgICAgY29uc3Vt
ZShUb2tlbi5CQU5HKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAg
ICAgICB0eXBlOiBTeW50YXguTm9uTnVsbGFibGVUeXBlLAotICAgICAgICAgICAgICAgICAgICBl
eHByZXNzaW9uOiBleHByLAotICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IGZhbHNlCi0gICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRva2VuID09
PSBUb2tlbi5RVUVTVElPTikgewotICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUVVFU1RJ
T04pOwotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5OdWxsYWJsZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4
cHIsCi0gICAgICAgICAgICAgICAgICAgIHByZWZpeDogZmFsc2UKLSAgICAgICAgICAgICAgICB9
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkxCUkFD
SykgewotICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTEJSQUNLKTsKLSAgICAgICAgICAg
ICAgICBjb25zdW1lKFRva2VuLlJCUkFDSywgJ2V4cGVjdGVkIGFuIGFycmF5LXN0eWxlIHR5cGUg
ZGVjbGFyYXRpb24gKCcgKyB2YWx1ZSArICdbXSknKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ewotICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVHlwZUFwcGxpY2F0aW9uLAotICAg
ICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguTmFtZUV4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1l
OiAnQXJyYXknCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIGFw
cGxpY2F0aW9uczogW2V4cHJdCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUb3BMZXZl
bFR5cGVFeHByZXNzaW9uIDo9Ci0gICAgICAgIC8vICAgICAgVHlwZUV4cHJlc3Npb24KLSAgICAg
ICAgLy8gICAgfCBUeXBlVW5pb25MaXN0Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoaXMgcnVs
ZSBpcyBHb29nbGUgQ2xvc3VyZSBDb21waWxlciBleHRlbnNpb24sIG5vdCBFUzQKLSAgICAgICAg
Ly8gbGlrZSwKLSAgICAgICAgLy8gICB7IG51bWJlciB8IHN0cmluZyB9Ci0gICAgICAgIC8vIElm
IHN0cmljdCB0byBFUzQsIHdlIHNob3VsZCB3cml0ZSBpdCBhcwotICAgICAgICAvLyAgIHsgKG51
bWJlcnxzdHJpbmcpIH0KLSAgICAgICAgZnVuY3Rpb24gcGFyc2VUb3AoKSB7Ci0gICAgICAgICAg
ICB2YXIgZXhwciwgZWxlbWVudHM7Ci0KLSAgICAgICAgICAgIGV4cHIgPSBwYXJzZVR5cGVFeHBy
ZXNzaW9uKCk7Ci0gICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlBJUEUpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXhwcjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxl
bWVudHMgPSBbIGV4cHIgXTsKLSAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUElQRSk7Ci0gICAg
ICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFy
c2VUeXBlRXhwcmVzc2lvbigpKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2Vu
LlBJUEUpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUElQRSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlVuaW9uVHlw
ZSwKLSAgICAgICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHMKLSAgICAgICAgICAgIH07Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBwYXJzZVRvcFBhcmFtVHlwZSgpIHsKLSAgICAg
ICAgICAgIHZhciBleHByOwotCi0gICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLlJFU1Qp
IHsKLSAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLlJFU1QpOwotICAgICAgICAgICAgICAg
IHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZXN0VHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcGFyc2VUb3AoKQotICAgICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGV4cHIgPSBwYXJzZVRvcCgpOwotICAg
ICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5FUVVBTCkgewotICAgICAgICAgICAgICAgIGNv
bnN1bWUoVG9rZW4uRVFVQUwpOwotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5PcHRpb25hbFR5cGUsCi0gICAgICAgICAgICAgICAgICAg
IGV4cHJlc3Npb246IGV4cHIKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZXR1cm4gZXhwcjsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHBh
cnNlVHlwZShzcmMsIG9wdCkgewotICAgICAgICAgICAgdmFyIGV4cHI7Ci0KLSAgICAgICAgICAg
IHNvdXJjZSA9IHNyYzsKLSAgICAgICAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7Ci0gICAg
ICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgICAgICBwcmV2aW91cyA9IDA7Ci0KLSAgICAgICAg
ICAgIGlmICghQ2FuQWNjZXNzU3RyaW5nQnlJbmRleCkgewotICAgICAgICAgICAgICAgIHNvdXJj
ZSA9IHNvdXJjZS5zcGxpdCgnJyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5leHQo
KTsKLSAgICAgICAgICAgIGV4cHIgPSBwYXJzZVRvcCgpOwotCi0gICAgICAgICAgICBpZiAob3B0
ICYmIG9wdC5taWRzdHJlYW0pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAg
ICAgICAgICAgICBleHByZXNzaW9uOiBleHByLAotICAgICAgICAgICAgICAgICAgICBpbmRleDog
cHJldmlvdXMKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAodG9rZW4gIT09IFRva2VuLkVPRikgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
J25vdCByZWFjaCB0byBFT0YnKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJu
IGV4cHI7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBwYXJzZVBhcmFtVHlwZShzcmMs
IG9wdCkgewotICAgICAgICAgICAgdmFyIGV4cHI7Ci0KLSAgICAgICAgICAgIHNvdXJjZSA9IHNy
YzsKLSAgICAgICAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7Ci0gICAgICAgICAgICBpbmRl
eCA9IDA7Ci0gICAgICAgICAgICBwcmV2aW91cyA9IDA7Ci0KLSAgICAgICAgICAgIGlmICghQ2Fu
QWNjZXNzU3RyaW5nQnlJbmRleCkgewotICAgICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5z
cGxpdCgnJyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAg
ICAgIGV4cHIgPSBwYXJzZVRvcFBhcmFtVHlwZSgpOwotCi0gICAgICAgICAgICBpZiAob3B0ICYm
IG9wdC5taWRzdHJlYW0pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAg
ICAgICAgICBleHByZXNzaW9uOiBleHByLAotICAgICAgICAgICAgICAgICAgICBpbmRleDogcHJl
dmlvdXMKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAodG9rZW4gIT09IFRva2VuLkVPRikgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ25v
dCByZWFjaCB0byBFT0YnKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGV4
cHI7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzdHJpbmdpZnlJbXBsKG5vZGUsIGNv
bXBhY3QsIHRvcExldmVsKSB7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0LCBpLCBpejsKLQotICAg
ICAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgU3ludGF4Lk51
bGxhYmxlTGl0ZXJhbDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAnPyc7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU3ludGF4LkFsbExpdGVyYWw6Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gJyonOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgICAgICBjYXNlIFN5bnRheC5OdWxsTGl0ZXJhbDoKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSAnbnVsbCc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU3lu
dGF4LlVuZGVmaW5lZExpdGVyYWw6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gJ3VuZGVmaW5l
ZCc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU3ludGF4LlZv
aWRMaXRlcmFsOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9ICd2b2lkJzsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTeW50YXguVW5pb25UeXBlOgotICAgICAg
ICAgICAgICAgIGlmICghdG9wTGV2ZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
JygnOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9ICcnOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZvciAoaSA9IDAs
IGl6ID0gbm9kZS5lbGVtZW50cy5sZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSBzdHJpbmdpZnlJbXBsKG5vZGUuZWxlbWVudHNbaV0sIGNvbXBhY3Qp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAhPT0gaXopIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSAnfCc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRvcExldmVsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSAnKSc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFN5bnRheC5BcnJheVR5cGU6Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gJ1snOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6
ID0gbm9kZS5lbGVtZW50cy5sZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSBzdHJpbmdpZnlJbXBsKG5vZGUuZWxlbWVudHNbaV0sIGNvbXBhY3QpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAhPT0gaXopIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJzsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ10n
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFN5bnRheC5SZWNv
cmRUeXBlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9ICd7JzsKLSAgICAgICAgICAgICAgICBm
b3IgKGkgPSAwLCBpeiA9IG5vZGUuZmllbGRzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5maWVsZHNbaV0sIGNv
bXBhY3QpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAhPT0gaXopIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJzsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXN1
bHQgKz0gJ30nOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFN5
bnRheC5GaWVsZFR5cGU6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUudmFsdWUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS5rZXkgKyAoY29tcGFjdCA/ICc6JyA6ICc6ICcp
ICsgc3RyaW5naWZ5SW1wbChub2RlLnZhbHVlLCBjb21wYWN0KTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBub2RlLmtleTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU3lu
dGF4LkZ1bmN0aW9uVHlwZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wYWN0ID8gJ2Z1
bmN0aW9uKCcgOiAnZnVuY3Rpb24gKCc7Ci0KLSAgICAgICAgICAgICAgICBpZiAobm9kZVsndGhp
cyddKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlWyduZXcnXSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ICs9IChjb21wYWN0ID8gJ25ldzonIDogJ25ldzogJyk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgKz0gKGNvbXBhY3QgPyAndGhpczonIDogJ3RoaXM6ICcpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZVsn
dGhpcyddLCBjb21wYWN0KTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5wYXJhbXMu
bGVuZ3RoICE9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGFj
dCA/ICcsJyA6ICcsICc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUucGFyYW1zLmxlbmd0aDsg
aSA8IGl6OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUlt
cGwobm9kZS5wYXJhbXNbaV0sIGNvbXBhY3QpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKGkg
KyAxKSAhPT0gaXopIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0
ID8gJywnIDogJywgJzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnKSc7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS5yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IChjb21wYWN0ID8g
JzonIDogJzogJykgKyBzdHJpbmdpZnlJbXBsKG5vZGUucmVzdWx0LCBjb21wYWN0KTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2Ug
U3ludGF4LlBhcmFtZXRlclR5cGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS5uYW1l
ICsgKGNvbXBhY3QgPyAnOicgOiAnOiAnKSArIHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9u
LCBjb21wYWN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBT
eW50YXguUmVzdFR5cGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gJy4uLic7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUuZXhwcmVzc2lvbikgewotICAgICAgICAgICAgICAgICAgICByZXN1
bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTeW50
YXguTm9uTnVsbGFibGVUeXBlOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnByZWZpeCkgewot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAnIScgKyBzdHJpbmdpZnlJbXBsKG5vZGUuZXhw
cmVzc2lvbiwgY29tcGFjdCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3Qp
ICsgJyEnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgY2FzZSBTeW50YXguT3B0aW9uYWxUeXBlOgotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KSArICc9JzsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTeW50YXguTnVsbGFibGVUeXBl
OgotICAgICAgICAgICAgICAgIGlmIChub2RlLnByZWZpeCkgewotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSAnPycgKyBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
c3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpICsgJz8nOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTeW50
YXguTmFtZUV4cHJlc3Npb246Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS5uYW1lOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFN5bnRheC5UeXBlQXBw
bGljYXRpb246Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4
cHJlc3Npb24sIGNvbXBhY3QpICsgJy48JzsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBp
eiA9IG5vZGUuYXBwbGljYXRpb25zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5hcHBsaWNhdGlvbnNbaV0sIGNv
bXBhY3QpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAhPT0gaXopIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJzsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXN1
bHQgKz0gJz4nOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ1Vua25vd24gdHlwZSAnICsgbm9kZS50eXBl
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
fQotCi0gICAgICAgIGZ1bmN0aW9uIHN0cmluZ2lmeShub2RlLCBvcHRpb25zKSB7Ci0gICAgICAg
ICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUltcGwobm9kZSwg
b3B0aW9ucy5jb21wYWN0LCBvcHRpb25zLnRvcExldmVsKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGV4cG9ydHMucGFyc2VUeXBlID0gcGFyc2VUeXBlOwotICAgICAgICBleHBvcnRzLnBhcnNlUGFy
YW1UeXBlID0gcGFyc2VQYXJhbVR5cGU7Ci0gICAgICAgIGV4cG9ydHMuc3RyaW5naWZ5ID0gc3Ry
aW5naWZ5OwotICAgICAgICBleHBvcnRzLlN5bnRheCA9IFN5bnRheDsKLSAgICB9KHR5cGVkID0g
e30pKTsKLQotICAgIC8vIEpTRG9jIFRhZyBQYXJzZXIKLQotICAgIChmdW5jdGlvbiAoZXhwb3J0
cykgewotICAgICAgICB2YXIgUnVsZXMsCi0gICAgICAgICAgICBpbmRleCwKLSAgICAgICAgICAg
IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICBsZW5ndGgsCi0gICAgICAgICAgICBzb3VyY2UsCi0g
ICAgICAgICAgICByZWNvdmVyYWJsZSwKLSAgICAgICAgICAgIHNsb3BweSwKLSAgICAgICAgICAg
IHN0cmljdDsKLQotICAgICAgICBmdW5jdGlvbiBhZHZhbmNlKCkgewotICAgICAgICAgICAgdmFy
IGNoID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgICAgIGluZGV4ICs9IDE7Ci0gICAgICAgICAg
ICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVy
ICs9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gY2g7Ci0gICAgICAgIH0K
LQotICAgICAgICBmdW5jdGlvbiBzY2FuVGl0bGUoKSB7Ci0gICAgICAgICAgICB2YXIgdGl0bGUg
PSAnJzsKLSAgICAgICAgICAgIC8vIHdhc3RlICdAJwotICAgICAgICAgICAgYWR2YW5jZSgpOwot
Ci0gICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgaXNBU0NJSUFscGhhbnVtZXJp
Yyhzb3VyY2VbaW5kZXhdKSkgewotICAgICAgICAgICAgICAgIHRpdGxlICs9IGFkdmFuY2UoKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRpdGxlOwotICAgICAgICB9Ci0K
LSAgICAgICAgZnVuY3Rpb24gc2Vla0NvbnRlbnQoKSB7Ci0gICAgICAgICAgICB2YXIgY2gsIHdh
aXRpbmcsIGxhc3QgPSBpbmRleDsKLQotICAgICAgICAgICAgd2FpdGluZyA9IGZhbHNlOwotICAg
ICAgICAgICAgd2hpbGUgKGxhc3QgPCBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBjaCA9IHNv
dXJjZVtsYXN0XTsKLSAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlciArPSAxOwotICAgICAgICAgICAgICAgICAg
ICB3YWl0aW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdhaXRpbmcpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnQCcpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghaXNXaGl0ZVNwYWNlKGNoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGlu
ZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGxhc3QgKz0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biBsYXN0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdHlwZSBleHByZXNzaW9uIG1heSBoYXZl
IG5lc3QgYnJhY2UsIHN1Y2ggYXMsCi0gICAgICAgIC8vIHsgeyBvazogc3RyaW5nIH0gfQotICAg
ICAgICAvLwotICAgICAgICAvLyB0aGVyZWZvcmUsIHNjYW5uaW5nIHR5cGUgZXhwcmVzc2lvbiB3
aXRoIGJhbGFuY2luZyBicmFjZXMuCi0gICAgICAgIGZ1bmN0aW9uIHBhcnNlVHlwZSh0aXRsZSwg
bGFzdCkgewotICAgICAgICAgICAgdmFyIGNoLCBicmFjZSwgdHlwZSwgZGlyZWN0ID0gZmFsc2U7
Ci0KLSAgICAgICAgICAgIC8vIHNlYXJjaCAneycKLSAgICAgICAgICAgIHdoaWxlIChpbmRleCA8
IGxhc3QpIHsKLSAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzV2hpdGVTcGFjZShjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5j
ZSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICd7JykgewotICAgICAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgZGlyZWN0
IHBhdHRlcm4KLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoIWRpcmVjdCkgewotICAgICAgICAgICAgICAgIC8vIHR5cGUgZXhwcmVzc2lv
biB7IGlzIGZvdW5kCi0gICAgICAgICAgICAgICAgYnJhY2UgPSAxOwotICAgICAgICAgICAgICAg
IHR5cGUgPSAnJzsKLSAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsYXN0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZHZh
bmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY2ggPT09ICd9JykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNl
IC09IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyYWNlID09PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ3snKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJhY2UgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgKz0gYWR2YW5jZSgpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGJy
YWNlICE9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGJyYWNlcyBpcyBub3QgYmFsYW5j
ZWQKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ0JyYWNlcyBhcmUgbm90
IGJhbGFuY2VkJyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdHJ5IHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGFyYW1UaXRsZSh0aXRsZSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0eXBlZC5wYXJzZVBhcmFtVHlwZSh0eXBlKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZWQucGFyc2VU
eXBlKHR5cGUpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUxKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIHBhcnNlIGZhaWxlZAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gc2NhbklkZW50aWZpZXIobGFzdCkgewotICAgICAgICAgICAgdmFyIGlkZW50aWZpZXI7Ci0g
ICAgICAgICAgICBpZiAoIWlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZVtpbmRleF0pKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZGVu
dGlmaWVyID0gYWR2YW5jZSgpOwotICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCAmJiBp
c0lkZW50aWZpZXJQYXJ0KHNvdXJjZVtpbmRleF0pKSB7Ci0gICAgICAgICAgICAgICAgaWRlbnRp
ZmllciArPSBhZHZhbmNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gaWRl
bnRpZmllcjsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNraXBXaGl0ZVNwYWNlKGxh
c3QpIHsKLSAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxhc3QgJiYgKGlzV2hpdGVTcGFjZShz
b3VyY2VbaW5kZXhdKSB8fCBpc0xpbmVUZXJtaW5hdG9yKHNvdXJjZVtpbmRleF0pKSkgewotICAg
ICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGZ1bmN0aW9uIHBhcnNlTmFtZShsYXN0LCBhbGxvd0JyYWNrZXRzLCBhbGxvd05lc3RlZFBh
cmFtcykgewotICAgICAgICAgICAgdmFyIG5hbWUgPSAnJywgdXNlQnJhY2tldHM7Ci0KLSAgICAg
ICAgICAgIHNraXBXaGl0ZVNwYWNlKGxhc3QpOwotCi0gICAgICAgICAgICBpZiAoaW5kZXggPj0g
bGFzdCkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoYWxsb3dCcmFja2V0cyAmJiBzb3VyY2VbaW5kZXhdID09PSAnWycpIHsK
LSAgICAgICAgICAgICAgICB1c2VCcmFja2V0cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbmFt
ZSA9IGFkdmFuY2UoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFpc0lkZW50
aWZpZXJTdGFydChzb3VyY2VbaW5kZXhdKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxs
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuYW1lICs9IHNjYW5JZGVudGlmaWVyKGxh
c3QpOwotCi0gICAgICAgICAgICBpZiAoYWxsb3dOZXN0ZWRQYXJhbXMpIHsKLSAgICAgICAgICAg
ICAgICB3aGlsZSAoc291cmNlW2luZGV4XSA9PT0gJy4nKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG5hbWUgKz0gJy4nOwotICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAxOwotICAgICAgICAg
ICAgICAgICAgICBuYW1lICs9IHNjYW5JZGVudGlmaWVyKGxhc3QpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHVzZUJyYWNrZXRzKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gZG8gd2UgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXM/Ci0gICAg
ICAgICAgICAgICAgaWYgKHNvdXJjZVtpbmRleF0gPT09ICc9JykgewotCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGNvbnN1bWUgdGhlICc9Jycgc3ltYm9sCi0gICAgICAgICAgICAgICAgICAgIG5h
bWUgKz0gYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgICAgICAvLyBzY2FuIGluIHRoZSBkZWZh
dWx0IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxhc3QgJiYgc291
cmNlW2luZGV4XSAhPT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICs9IGFk
dmFuY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmIChpbmRleCA+PSBsYXN0ICB8fCBzb3VyY2VbaW5kZXhdICE9PSAnXScp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmV2ZXIgZm91bmQgYSBjbG9zaW5nICddJwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAvLyBjb2xsZWN0IHRoZSBsYXN0ICddJwotICAgICAgICAgICAgICAgIG5h
bWUgKz0gYWR2YW5jZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbmFt
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHNraXBUb1RhZygpIHsKLSAgICAgICAg
ICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBzb3VyY2VbaW5kZXhdICE9PSAnQCcpIHsKLSAg
ICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
aW5kZXggPj0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYXNzZXJ0KHNvdXJjZVtpbmRleF0gPT09ICdAJyk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIFRhZ1Bh
cnNlcihvcHRpb25zLCB0aXRsZSkgewotICAgICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlv
bnM7Ci0gICAgICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlOwotICAgICAgICAgICAgdGhpcy5f
dGFnID0gewotICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSwKLSAgICAgICAgICAgICAgICBk
ZXNjcmlwdGlvbjogbnVsbAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGlmICh0aGlzLl9v
cHRpb25zLmxpbmVOdW1iZXJzKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fdGFnLmxpbmVOdW1i
ZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5fbGFzdCA9
IDA7Ci0gICAgICAgICAgICAvLyBzcGFjZSB0byBzYXZlIHNwZWNpYWwgaW5mb3JtYXRpb24gZm9y
IHRpdGxlIHBhcnNlcnMuCi0gICAgICAgICAgICB0aGlzLl9leHRyYSA9IHsgfTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIGFkZEVycm9yKGVyciwgLi4uKQotICAgICAgICBUYWdQYXJzZXIucHJv
dG90eXBlLmFkZEVycm9yID0gZnVuY3Rpb24gYWRkRXJyb3IoZXJyb3JUZXh0KSB7Ci0gICAgICAg
ICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSks
Ci0gICAgICAgICAgICAgICAgbXNnID0gZXJyb3JUZXh0LnJlcGxhY2UoCi0gICAgICAgICAgICAg
ICAgICAgIC8lKFxkKS9nLAotICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAod2hvbGUsIGlu
ZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoaW5kZXggPCBhcmdzLmxlbmd0
aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UnKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBhcmdzW2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICk7Ci0KLSAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLmVycm9ycykgewot
ICAgICAgICAgICAgICAgIHRoaXMuX3RhZy5lcnJvcnMgPSBbXTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChzdHJpY3QpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKG1zZyk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLl90YWcuZXJyb3JzLnB1c2gobXNnKTsK
LSAgICAgICAgICAgIHJldHVybiByZWNvdmVyYWJsZTsKLSAgICAgICAgfTsKLQotICAgICAgICBU
YWdQYXJzZXIucHJvdG90eXBlLnBhcnNlVHlwZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAg
IC8vIHR5cGUgcmVxdWlyZWQgdGl0bGVzCi0gICAgICAgICAgICBpZiAoaXNUeXBlUGFyYW1ldGVy
UmVxdWlyZWQodGhpcy5fdGl0bGUpKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSBwYXJzZVR5cGUodGhpcy5fdGl0bGUsIHRoaXMu
X2xhc3QpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3RhZy50eXBlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3Ig
aW52YWxpZCB0YWcgdHlwZScpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGNh
dGNoIChlcnJvcikgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IG51bGw7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcihlcnJvci5tZXNzYWdlKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChpc0FsbG93
ZWRUeXBlKHRoaXMuX3RpdGxlKSkgewotICAgICAgICAgICAgICAgIC8vIG9wdGlvbmFsIHR5cGVz
Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLnR5
cGUgPSBwYXJzZVR5cGUodGhpcy5fdGl0bGUsIHRoaXMuX2xhc3QpOwotICAgICAgICAgICAgICAg
IH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy9Gb3Igb3B0aW9uYWwgdHlwZXMs
IGxldHMgZHJvcCB0aGUgdGhyb3duIGVycm9yIHdoZW4gd2UgaGl0IHRoZSBlbmQgb2YgdGhlIGZp
bGUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfTsKLQotICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLl9wYXJzZU5h
bWVQYXRoID0gZnVuY3Rpb24gKG9wdGlvbmFsKSB7Ci0gICAgICAgICAgICB2YXIgbmFtZTsKLSAg
ICAgICAgICAgIG5hbWUgPSBwYXJzZU5hbWUodGhpcy5fbGFzdCwgc2xvcHB5ICYmIGlzUGFyYW1U
aXRsZSh0aGlzLl90aXRsZSksIHRydWUpOwotICAgICAgICAgICAgaWYgKCFuYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFvcHRpb25hbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXRo
aXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCB0YWcgbmFtZScpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLl90YWcubmFtZSA9
IG5hbWU7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfTsKLQotICAgICAgICBU
YWdQYXJzZXIucHJvdG90eXBlLnBhcnNlTmFtZVBhdGggPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5fcGFyc2VOYW1lUGF0aChmYWxzZSk7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZU5hbWVQYXRoT3B0aW9uYWwgPSBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2VOYW1lUGF0aCh0cnVlKTsKLSAg
ICAgICAgfTsKLQotCi0gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VOYW1lID0gZnVu
Y3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGFzc2lnbiwgbmFtZTsKLQotICAgICAgICAgICAg
Ly8gcGFyYW0sIHByb3BlcnR5IHJlcXVpcmVzIG5hbWUKLSAgICAgICAgICAgIGlmIChpc0FsbG93
ZWROYW1lKHRoaXMuX3RpdGxlKSkgewotICAgICAgICAgICAgICAgIHRoaXMuX3RhZy5uYW1lID0g
cGFyc2VOYW1lKHRoaXMuX2xhc3QsIHNsb3BweSAmJiBpc1BhcmFtVGl0bGUodGhpcy5fdGl0bGUp
LCBpc0FsbG93ZWROZXN0ZWQodGhpcy5fdGl0bGUpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRo
aXMuX3RhZy5uYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNOYW1lUGFyYW1ldGVy
UmVxdWlyZWQodGhpcy5fdGl0bGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIGl0
J3MgcG9zc2libGUgdGhlIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBwYXJzZWQgYnV0IGludGVycHJl
dGVkIGFzIGEgdHlwZQotICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIGFsc28gcG9zc2libGUg
dGhpcyBpcyBhIHNsb3BweSBkZWNsYXJhdGlvbiwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJlCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGZpeGVkIGF0IHRoZSBlbmQKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSkgJiYgdGhpcy5fdGFnLnR5cGUubmFtZSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXh0cmEubmFtZSA9IHRoaXMuX3RhZy50
eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSB0aGlzLl90YWcu
dHlwZS5uYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSBudWxs
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgdGFnIG5hbWUnKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLl90YWcubmFtZTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSAnWycgJiYgbmFtZS5jaGFyQXQobmFtZS5s
ZW5ndGggLSAxKSA9PT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBleHRyYWN0
IHRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoZXJlIGlzIG9uZQotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gZXhhbXBsZTogQHBhcmFtIHtzdHJpbmd9IFtzb21lYm9keT1Kb2huIERvZV0gZGVzY3Jp
cHRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbiA9IG5hbWUuc3Vic3RyaW5nKDEs
IG5hbWUubGVuZ3RoIC0gMSkuc3BsaXQoJz0nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChhc3NpZ25bMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWdbJ2Rl
ZmF1bHQnXSA9IGFzc2lnblsxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX3RhZy5uYW1lID0gYXNzaWduWzBdOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBjb252ZXJ0IHRvIGFuIG9wdGlvbmFsIHR5cGUKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl90YWcudHlwZS50eXBlICE9PSAnT3B0aW9uYWxUeXBlJykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhZy50eXBlID0gewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnT3B0aW9uYWxUeXBlJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogdGhpcy5fdGFnLnR5cGUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfTsKLQotICAgICAgICBUYWdQYXJzZXIu
cHJvdG90eXBlLnBhcnNlRGVzY3JpcHRpb24gPSBmdW5jdGlvbiBwYXJzZURlc2NyaXB0aW9uKCkg
ewotICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2Us
IGluZGV4LCB0aGlzLl9sYXN0KSk7Ci0gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24pIHsKLSAg
ICAgICAgICAgICAgICBpZiAoKC9eLVxzKy8pLnRlc3QoZGVzY3JpcHRpb24pKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24uc3Vic3RyaW5nKDIpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLl90YWcuZGVzY3JpcHRpb24gPSBk
ZXNjcmlwdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9OwotCi0gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VLaW5kID0gZnVuY3Rp
b24gcGFyc2VLaW5kKCkgewotICAgICAgICAgICAgdmFyIGtpbmQsIGtpbmRzOwotICAgICAgICAg
ICAga2luZHMgPSB7Ci0gICAgICAgICAgICAgICAgJ2NsYXNzJzogdHJ1ZSwKLSAgICAgICAgICAg
ICAgICAnY29uc3RhbnQnOiB0cnVlLAotICAgICAgICAgICAgICAgICdldmVudCc6IHRydWUsCi0g
ICAgICAgICAgICAgICAgJ2V4dGVybmFsJzogdHJ1ZSwKLSAgICAgICAgICAgICAgICAnZmlsZSc6
IHRydWUsCi0gICAgICAgICAgICAgICAgJ2Z1bmN0aW9uJzogdHJ1ZSwKLSAgICAgICAgICAgICAg
ICAnbWVtYmVyJzogdHJ1ZSwKLSAgICAgICAgICAgICAgICAnbWl4aW4nOiB0cnVlLAotICAgICAg
ICAgICAgICAgICdtb2R1bGUnOiB0cnVlLAotICAgICAgICAgICAgICAgICduYW1lc3BhY2UnOiB0
cnVlLAotICAgICAgICAgICAgICAgICd0eXBlZGVmJzogdHJ1ZQotICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgIGtpbmQgPSB0cmltKHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xh
c3QpKTsKLSAgICAgICAgICAgIHRoaXMuX3RhZy5raW5kID0ga2luZDsKLSAgICAgICAgICAgIGlm
ICghaGFzT3duUHJvcGVydHkoa2luZHMsIGtpbmQpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0
aGlzLmFkZEVycm9yKCdJbnZhbGlkIGtpbmQgbmFtZSBcJyUwXCcnLCBraW5kKSkgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgVGFn
UGFyc2VyLnByb3RvdHlwZS5wYXJzZUFjY2VzcyA9IGZ1bmN0aW9uIHBhcnNlQWNjZXNzKCkgewot
ICAgICAgICAgICAgdmFyIGFjY2VzczsKLSAgICAgICAgICAgIGFjY2VzcyA9IHRyaW0oc2xpY2VT
b3VyY2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpOwotICAgICAgICAgICAgdGhpcy5fdGFn
LmFjY2VzcyA9IGFjY2VzczsKLSAgICAgICAgICAgIGlmIChhY2Nlc3MgIT09ICdwcml2YXRlJyAm
JiBhY2Nlc3MgIT09ICdwcm90ZWN0ZWQnICYmIGFjY2VzcyAhPT0gJ3B1YmxpYycpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ0ludmFsaWQgYWNjZXNzIG5hbWUgXCclMFwn
JywgYWNjZXNzKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZVZhcmlhdGlvbiA9IGZ1
bmN0aW9uIHBhcnNlVmFyaWF0aW9uKCkgewotICAgICAgICAgICAgdmFyIHZhcmlhdGlvbiwgdGV4
dDsKLSAgICAgICAgICAgIHRleHQgPSB0cmltKHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRo
aXMuX2xhc3QpKTsKLSAgICAgICAgICAgIHZhcmlhdGlvbiA9IHBhcnNlRmxvYXQodGV4dCwgMTAp
OwotICAgICAgICAgICAgdGhpcy5fdGFnLnZhcmlhdGlvbiA9IHZhcmlhdGlvbjsKLSAgICAgICAg
ICAgIGlmIChpc05hTih2YXJpYXRpb24pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFk
ZEVycm9yKCdJbnZhbGlkIHZhcmlhdGlvbiBcJyUwXCcnLCB0ZXh0KSkgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgVGFnUGFyc2Vy
LnByb3RvdHlwZS5lbnN1cmVFbmQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgc2hv
dWxkQmVFbXB0eSA9IHRyaW0oc2xpY2VTb3VyY2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkp
OwotICAgICAgICAgICAgaWYgKHNob3VsZEJlRW1wdHkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IXRoaXMuYWRkRXJyb3IoJ1Vua25vd24gY29udGVudCBcJyUwXCcnLCBzaG91bGRCZUVtcHR5KSkg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5lcGlsb2d1ZSA9IGZ1bmN0aW9uIGVwaWxvZ3VlKCkg
ewotICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uOwotCi0gICAgICAgICAgICBkZXNjcmlwdGlv
biA9IHRoaXMuX3RhZy5kZXNjcmlwdGlvbjsKLSAgICAgICAgICAgIC8vIHVuLWZpeCBwb3RlbnRp
YWxseSBzbG9wcHkgZGVjbGFyYXRpb24KLSAgICAgICAgICAgIGlmIChpc1BhcmFtVGl0bGUodGhp
cy5fdGl0bGUpICYmICF0aGlzLl90YWcudHlwZSAmJiBkZXNjcmlwdGlvbiAmJiBkZXNjcmlwdGlv
bi5jaGFyQXQoMCkgPT09ICdbJykgewotICAgICAgICAgICAgICAgIHRoaXMuX3RhZy50eXBlID0g
dGhpcy5fZXh0cmEubmFtZTsKLSAgICAgICAgICAgICAgICB0aGlzLl90YWcubmFtZSA9IHVuZGVm
aW5lZDsKLQotICAgICAgICAgICAgICAgIGlmICghc2xvcHB5KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyBuYW1lJykpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgUnVsZXMgPSB7Ci0gICAgICAgICAgICAv
LyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtYWNjZXNzLmh0bWwKLSAgICAgICAgICAgICdhY2Nl
c3MnOiBbJ3BhcnNlQWNjZXNzJ10sCi0gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3Jn
L3RhZ3MtYWxpYXMuaHRtbAotICAgICAgICAgICAgJ2FsaWFzJzogWydwYXJzZU5hbWVQYXRoJywg
J2Vuc3VyZUVuZCddLAotICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWF1
Z21lbnRzLmh0bWwKLSAgICAgICAgICAgICdhdWdtZW50cyc6IFsncGFyc2VUeXBlJywgJ3BhcnNl
TmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91
c2Vqc2RvYy5vcmcvdGFncy1jb25zdHJ1Y3Rvci5odG1sCi0gICAgICAgICAgICAnY29uc3RydWN0
b3InOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10s
Ci0gICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtY29uc3Ry
dWN0b3IuaHRtbAotICAgICAgICAgICAgJ2NsYXNzJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1l
UGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAotICAgICAgICAgICAgLy8gU3lub255bTogaHR0
cDovL3VzZWpzZG9jLm9yZy90YWdzLWV4dGVuZHMuaHRtbAotICAgICAgICAgICAgJ2V4dGVuZHMn
OiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCi0g
ICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtZGVwcmVjYXRlZC5odG1sCi0g
ICAgICAgICAgICAnZGVwcmVjYXRlZCc6IFsncGFyc2VEZXNjcmlwdGlvbiddLAotICAgICAgICAg
ICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWdsb2JhbC5odG1sCi0gICAgICAgICAgICAn
Z2xvYmFsJzogWydlbnN1cmVFbmQnXSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5v
cmcvdGFncy1pbm5lci5odG1sCi0gICAgICAgICAgICAnaW5uZXInOiBbJ2Vuc3VyZUVuZCddLAot
ICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWluc3RhbmNlLmh0bWwKLSAg
ICAgICAgICAgICdpbnN0YW5jZSc6IFsnZW5zdXJlRW5kJ10sCi0gICAgICAgICAgICAvLyBodHRw
Oi8vdXNlanNkb2Mub3JnL3RhZ3Mta2luZC5odG1sCi0gICAgICAgICAgICAna2luZCc6IFsncGFy
c2VLaW5kJ10sCi0gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWl4ZXMu
aHRtbAotICAgICAgICAgICAgJ21peGVzJzogWydwYXJzZU5hbWVQYXRoJywgJ2Vuc3VyZUVuZCdd
LAotICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLW1peGluLmh0bWwKLSAg
ICAgICAgICAgICdtaXhpbic6IFsncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCdd
LAotICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLW1lbWJlci5odG1sCi0g
ICAgICAgICAgICAnbWVtYmVyJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFs
JywgJ2Vuc3VyZUVuZCddLAotICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdz
LW1ldGhvZC5odG1sCi0gICAgICAgICAgICAnbWV0aG9kJzogWydwYXJzZU5hbWVQYXRoT3B0aW9u
YWwnLCAnZW5zdXJlRW5kJ10sCi0gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3Rh
Z3MtbW9kdWxlLmh0bWwKLSAgICAgICAgICAgICdtb2R1bGUnOiBbJ3BhcnNlVHlwZScsICdwYXJz
ZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCi0gICAgICAgICAgICAvLyBTeW5vbnlt
OiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWV0aG9kLmh0bWwKLSAgICAgICAgICAgICdmdW5j
JzogWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCi0gICAgICAgICAgICAv
LyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWV0aG9kLmh0bWwKLSAgICAgICAg
ICAgICdmdW5jdGlvbic6IFsncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAot
ICAgICAgICAgICAgLy8gU3lub255bTogaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLW1lbWJlci5o
dG1sCi0gICAgICAgICAgICAndmFyJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlv
bmFsJywgJ2Vuc3VyZUVuZCddLAotICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90
YWdzLW5hbWUuaHRtbAotICAgICAgICAgICAgJ25hbWUnOiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5z
dXJlRW5kJ10sCi0gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbmFtZXNw
YWNlLmh0bWwKLSAgICAgICAgICAgICduYW1lc3BhY2UnOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5h
bWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCi0gICAgICAgICAgICAvLyBodHRwOi8vdXNl
anNkb2Mub3JnL3RhZ3MtcHJpdmF0ZS5odG1sCi0gICAgICAgICAgICAncHJpdmF0ZSc6IFsncGFy
c2VUeXBlJywgJ3BhcnNlRGVzY3JpcHRpb24nXSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vq
c2RvYy5vcmcvdGFncy1wcm90ZWN0ZWQuaHRtbAotICAgICAgICAgICAgJ3Byb3RlY3RlZCc6IFsn
cGFyc2VUeXBlJywgJ3BhcnNlRGVzY3JpcHRpb24nXSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91
c2Vqc2RvYy5vcmcvdGFncy1wdWJsaWMuaHRtbAotICAgICAgICAgICAgJ3B1YmxpYyc6IFsncGFy
c2VUeXBlJywgJ3BhcnNlRGVzY3JpcHRpb24nXSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vq
c2RvYy5vcmcvdGFncy1yZWFkb25seS5odG1sCi0gICAgICAgICAgICAncmVhZG9ubHknOiBbJ2Vu
c3VyZUVuZCddLAotICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXJlcXVp
cmVzLmh0bWwKLSAgICAgICAgICAgICdyZXF1aXJlcyc6IFsncGFyc2VOYW1lUGF0aCcsICdlbnN1
cmVFbmQnXSwKLSAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1zaW5jZS5o
dG1sCi0gICAgICAgICAgICAnc2luY2UnOiBbJ3BhcnNlRGVzY3JpcHRpb24nXSwKLSAgICAgICAg
ICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1zdGF0aWMuaHRtbAotICAgICAgICAgICAg
J3N0YXRpYyc6IFsnZW5zdXJlRW5kJ10sCi0gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mu
b3JnL3RhZ3Mtc3VtbWFyeS5odG1sCi0gICAgICAgICAgICAnc3VtbWFyeSc6IFsncGFyc2VEZXNj
cmlwdGlvbiddLAotICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXRoaXMu
aHRtbAotICAgICAgICAgICAgJ3RoaXMnOiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10s
Ci0gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdG9kby5odG1sCi0gICAg
ICAgICAgICAndG9kbyc6IFsncGFyc2VEZXNjcmlwdGlvbiddLAotICAgICAgICAgICAgLy8gaHR0
cDovL3VzZWpzZG9jLm9yZy90YWdzLXZhcmlhdGlvbi5odG1sCi0gICAgICAgICAgICAndmFyaWF0
aW9uJzogWydwYXJzZVZhcmlhdGlvbiddLAotICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9j
Lm9yZy90YWdzLXZlcnNpb24uaHRtbAotICAgICAgICAgICAgJ3ZlcnNpb24nOiBbJ3BhcnNlRGVz
Y3JpcHRpb24nXQotICAgICAgICB9OwotCi0gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFy
c2UgPSBmdW5jdGlvbiBwYXJzZSgpIHsKLSAgICAgICAgICAgIHZhciBpLCBpeiwgc2VxdWVuY2Vz
LCBtZXRob2Q7Ci0KLSAgICAgICAgICAgIC8vIGVtcHR5IHRpdGxlCi0gICAgICAgICAgICBpZiAo
IXRoaXMuX3RpdGxlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNz
aW5nIG9yIGludmFsaWQgdGl0bGUnKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFNl
ZWsgdG8gY29udGVudCBsYXN0IGluZGV4LgotICAgICAgICAgICAgdGhpcy5fbGFzdCA9IHNlZWtD
b250ZW50KHRoaXMuX3RpdGxlKTsKLQotICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5KFJ1
bGVzLCB0aGlzLl90aXRsZSkpIHsKLSAgICAgICAgICAgICAgICBzZXF1ZW5jZXMgPSBSdWxlc1t0
aGlzLl90aXRsZV07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIGRl
ZmF1bHQgc2VxdWVuY2VzCi0gICAgICAgICAgICAgICAgc2VxdWVuY2VzID0gWydwYXJzZVR5cGUn
LCAncGFyc2VOYW1lJywgJ3BhcnNlRGVzY3JpcHRpb24nLCAnZXBpbG9ndWUnXTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBzZXF1ZW5jZXMubGVuZ3RoOyBp
IDwgaXo7ICsraSkgewotICAgICAgICAgICAgICAgIG1ldGhvZCA9IHNlcXVlbmNlc1tpXTsKLSAg
ICAgICAgICAgICAgICBpZiAoIXRoaXNbbWV0aG9kXSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gU2VlayBnbG9iYWwgaW5kZXggdG8gZW5kIG9mIHRoaXMgdGFnLgotICAgICAgICAg
ICAgaW5kZXggPSB0aGlzLl9sYXN0OwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RhZzsKLSAg
ICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBwYXJzZVRhZyhvcHRpb25zKSB7Ci0gICAgICAg
ICAgICB2YXIgdGl0bGUsIHBhcnNlcjsKLQotICAgICAgICAgICAgLy8gc2tpcCB0byB0YWcKLSAg
ICAgICAgICAgIGlmICghc2tpcFRvVGFnKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gc2NhbiB0aXRsZQotICAgICAgICAg
ICAgdGl0bGUgPSBzY2FuVGl0bGUoKTsKLQotICAgICAgICAgICAgLy8gY29uc3RydWN0IHRhZyBw
YXJzZXIKLSAgICAgICAgICAgIHBhcnNlciA9IG5ldyBUYWdQYXJzZXIob3B0aW9ucywgdGl0bGUp
OwotICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZSgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8KLSAgICAgICAgLy8gUGFyc2UgSlNEb2MKLSAgICAgICAgLy8KLQotICAgICAgICBmdW5j
dGlvbiBzY2FuSlNEb2NEZXNjcmlwdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBkZXNjcmlwdGlv
biA9ICcnLCBjaCwgYXRBbGxvd2VkOwotCi0gICAgICAgICAgICBhdEFsbG93ZWQgPSB0cnVlOwot
ICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgY2gg
PSBzb3VyY2VbaW5kZXhdOwotCi0gICAgICAgICAgICAgICAgaWYgKGF0QWxsb3dlZCAmJiBjaCA9
PT0gJ0AnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgewotICAgICAgICAg
ICAgICAgICAgICBhdEFsbG93ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
YXRBbGxvd2VkICYmICFpc1doaXRlU3BhY2UoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF0
QWxsb3dlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGRl
c2NyaXB0aW9uICs9IGFkdmFuY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biB0cmltKGRlc2NyaXB0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHBhcnNl
KGNvbW1lbnQsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciB0YWdzID0gW10sIHRhZywgZGVz
Y3JpcHRpb24sIGludGVyZXN0aW5nVGFncywgaSwgaXo7Ci0KLSAgICAgICAgICAgIGlmIChvcHRp
b25zID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICBvcHRpb25zID0ge307Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy51bndyYXAgPT09ICdi
b29sZWFuJyAmJiBvcHRpb25zLnVud3JhcCkgewotICAgICAgICAgICAgICAgIHNvdXJjZSA9IHVu
d3JhcENvbW1lbnQoY29tbWVudCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIHNvdXJjZSA9IGNvbW1lbnQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGFy
cmF5IG9mIHJlbGV2YW50IHRhZ3MKLSAgICAgICAgICAgIGlmIChvcHRpb25zLnRhZ3MpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoaXNBcnJheShvcHRpb25zLnRhZ3MpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGludGVyZXN0aW5nVGFncyA9IHsgfTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChp
ID0gMCwgaXogPSBvcHRpb25zLnRhZ3MubGVuZ3RoOyBpIDwgaXo7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRhZ3NbaV0gPT09ICdzdHJpbmcnKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RpbmdUYWdzW29wdGlvbnMudGFn
c1tpXV0gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCdJbnZhbGlkICJ0YWdzIiBwYXJhbWV0ZXI6
ICcgKyBvcHRpb25zLnRhZ3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcignSW52YWxpZCAidGFncyIgcGFyYW1ldGVyOiAnICsgb3B0aW9ucy50YWdz
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgh
Q2FuQWNjZXNzU3RyaW5nQnlJbmRleCkgewotICAgICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJj
ZS5zcGxpdCgnJyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxlbmd0aCA9IHNvdXJj
ZS5sZW5ndGg7Ci0gICAgICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgICAgICBsaW5lTnVtYmVy
ID0gMDsKLSAgICAgICAgICAgIHJlY292ZXJhYmxlID0gb3B0aW9ucy5yZWNvdmVyYWJsZTsKLSAg
ICAgICAgICAgIHNsb3BweSA9IG9wdGlvbnMuc2xvcHB5OwotICAgICAgICAgICAgc3RyaWN0ID0g
b3B0aW9ucy5zdHJpY3Q7Ci0KLSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gc2NhbkpTRG9jRGVz
Y3JpcHRpb24oKTsKLQotICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAg
ICB0YWcgPSBwYXJzZVRhZyhvcHRpb25zKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRhZykgewot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWYgKCFpbnRlcmVzdGluZ1RhZ3MgfHwgaW50ZXJlc3RpbmdUYWdzLmhhc093blByb3Bl
cnR5KHRhZy50aXRsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGFncy5wdXNoKHRhZyk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAg
ICB0YWdzOiB0YWdzCi0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgICAgIGV4cG9ydHMu
cGFyc2UgPSBwYXJzZTsKLSAgICB9KGpzZG9jID0ge30pKTsKLQotICAgIGV4cG9ydHMudmVyc2lv
biA9IFZFUlNJT047Ci0gICAgZXhwb3J0cy5wYXJzZSA9IGpzZG9jLnBhcnNlOwotICAgIGV4cG9y
dHMucGFyc2VUeXBlID0gdHlwZWQucGFyc2VUeXBlOwotICAgIGV4cG9ydHMucGFyc2VQYXJhbVR5
cGUgPSB0eXBlZC5wYXJzZVBhcmFtVHlwZTsKLSAgICBleHBvcnRzLnVud3JhcENvbW1lbnQgPSB1
bndyYXBDb21tZW50OwotICAgIGV4cG9ydHMuU3ludGF4ID0gc2hhbGxvd0NvcHkodHlwZWQuU3lu
dGF4KTsKLSAgICBleHBvcnRzLkVycm9yID0gRG9jdHJpbmVFcnJvcjsKLSAgICBleHBvcnRzLnR5
cGUgPSB7Ci0gICAgICAgIFN5bnRheDogZXhwb3J0cy5TeW50YXgsCi0gICAgICAgIHBhcnNlVHlw
ZTogdHlwZWQucGFyc2VUeXBlLAotICAgICAgICBwYXJzZVBhcmFtVHlwZTogdHlwZWQucGFyc2VQ
YXJhbVR5cGUsCi0gICAgICAgIHN0cmluZ2lmeTogdHlwZWQuc3RyaW5naWZ5Ci0gICAgfTsKLX0o
dHlwZW9mIGV4cG9ydHMgPT09ICd1bmRlZmluZWQnID8gKGRvY3RyaW5lID0ge30pIDogZXhwb3J0
cykpOwotLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi8KLQotfSx7fV0sNTpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKgotICBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxMyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Ci0gIENvcHlyaWdodCAo
QykgMjAxMyBBbGV4IFNldmlsbGUgPGhpQGFsZXhhbmRlcnNldmlsbGUuY29tPgotCi0gIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMgIkFTIElTIgotICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
Ci0gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4g
QkUgTElBQkxFIEZPUiBBTlkKLSAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0vKioKLSAqIEVzY29wZSAoPGEgaHJlZj0iaHR0
cDovL2dpdGh1Yi5jb20vQ29uc3RlbGxhdGlvbi9lc2NvcGUiPmVzY29wZTwvYT4pIGlzIGFuIDxh
Ci0gKiBocmVmPSJodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25z
L3N0YW5kYXJkcy9FY21hLTI2Mi5odG0iPkVDTUFTY3JpcHQ8L2E+Ci0gKiBzY29wZSBhbmFseXpl
ciBleHRyYWN0ZWQgZnJvbSB0aGUgPGEKLSAqIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL0NvbnN0
ZWxsYXRpb24vZXNtYW5nbGUiPmVzbWFuZ2xlIHByb2plY3Q8L2EvPi4KLSAqIDxwPgotICogPGVt
PmVzY29wZTwvZW0+IGZpbmRzIGxleGljYWwgc2NvcGVzIGluIGEgc291cmNlIHByb2dyYW0sIGku
ZS4gYXJlYXMgb2YgdGhhdAotICogcHJvZ3JhbSB3aGVyZSBkaWZmZXJlbnQgb2NjdXJyZW5jZXMg
b2YgdGhlIHNhbWUgaWRlbnRpZmllciByZWZlciB0byB0aGUgc2FtZQotICogdmFyaWFibGUuIFdp
dGggZWFjaCBzY29wZSB0aGUgY29udGFpbmVkIHZhcmlhYmxlcyBhcmUgY29sbGVjdGVkLCBhbmQg
ZWFjaAotICogaWRlbnRpZmllciByZWZlcmVuY2UgaW4gY29kZSBpcyBsaW5rZWQgdG8gaXRzIGNv
cnJlc3BvbmRpbmcgdmFyaWFibGUgKGlmCi0gKiBwb3NzaWJsZSkuCi0gKiA8cD4KLSAqIDxlbT5l
c2NvcGU8L2VtPiB3b3JrcyBvbiBhIHN5bnRheCB0cmVlIG9mIHRoZSBwYXJzZWQgc291cmNlIGNv
ZGUgd2hpY2ggaGFzCi0gKiB0byBhZGhlcmUgdG8gdGhlIDxhCi0gKiBocmVmPSJodHRwczovL2Rl
dmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1NwaWRlck1vbmtleS9QYXJzZXJfQVBJIj4K
LSAqIE1vemlsbGEgUGFyc2VyIEFQSTwvYT4uIEUuZy4gPGEgaHJlZj0iaHR0cDovL2VzcHJpbWEu
b3JnIj5lc3ByaW1hPC9hPiBpcyBhIHBhcnNlcgotICogdGhhdCBwcm9kdWNlcyBzdWNoIHN5bnRh
eCB0cmVlcy4KLSAqIDxwPgotICogVGhlIG1haW4gaW50ZXJmYWNlIGlzIHRoZSB7QGxpbmsgYW5h
bHl6ZX0gZnVuY3Rpb24uCi0gKiBAbW9kdWxlCi0gKi8KLQotLypqc2xpbnQgYml0d2lzZTp0cnVl
ICovCi0vKmdsb2JhbCBleHBvcnRzOnRydWUsIGRlZmluZTp0cnVlLCByZXF1aXJlOnRydWUqLwot
KGZ1bmN0aW9uIChmYWN0b3J5LCBnbG9iYWwpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICBm
dW5jdGlvbiBuYW1lc3BhY2Uoc3RyLCBvYmopIHsKLSAgICAgICAgdmFyIGksIGl6LCBuYW1lcywg
bmFtZTsKLSAgICAgICAgbmFtZXMgPSBzdHIuc3BsaXQoJy4nKTsKLSAgICAgICAgZm9yIChpID0g
MCwgaXogPSBuYW1lcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAgICBuYW1lID0g
bmFtZXNbaV07Ci0gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KG5hbWUpKSB7Ci0g
ICAgICAgICAgICAgICAgb2JqID0gb2JqW25hbWVdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBvYmogPSAob2JqW25hbWVdID0ge30pOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBvYmo7Ci0gICAgfQotCi0gICAgLy8gVW5pdmVyc2FsIE1v
ZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLAot
ICAgIC8vIGFuZCBwbGFpbiBicm93c2VyIGxvYWRpbmcsCi0gICAgaWYgKHR5cGVvZiBkZWZpbmUg
PT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgewotICAgICAgICBkZWZpbmUoJ2VzY29wZScs
IFsnZXhwb3J0cycsICdlc3RyYXZlcnNlJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBlc3RyYXZlcnNl
KSB7Ci0gICAgICAgICAgICBmYWN0b3J5KGV4cG9ydHMsIGdsb2JhbCwgZXN0cmF2ZXJzZSk7Ci0g
ICAgICAgIH0pOwotICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQn
KSB7Ci0gICAgICAgIGZhY3RvcnkoZXhwb3J0cywgZ2xvYmFsLCByZXF1aXJlKCdlc3RyYXZlcnNl
JykpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZhY3RvcnkobmFtZXNwYWNlKCdlc2NvcGUnLCBn
bG9iYWwpLCBnbG9iYWwsIGdsb2JhbC5lc3RyYXZlcnNlKTsKLSAgICB9Ci19KGZ1bmN0aW9uIChl
eHBvcnRzLCBnbG9iYWwsIGVzdHJhdmVyc2UpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICB2
YXIgU3ludGF4LAotICAgICAgICBNYXAsCi0gICAgICAgIGN1cnJlbnRTY29wZSwKLSAgICAgICAg
Z2xvYmFsU2NvcGUsCi0gICAgICAgIHNjb3BlcywKLSAgICAgICAgb3B0aW9uczsKLQotICAgIFN5
bnRheCA9IGVzdHJhdmVyc2UuU3ludGF4OwotCi0gICAgaWYgKHR5cGVvZiBnbG9iYWwuTWFwICE9
PSAndW5kZWZpbmVkJykgewotICAgICAgICAvLyBFUzYgTWFwCi0gICAgICAgIE1hcCA9IGdsb2Jh
bC5NYXA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTWFwID0gZnVuY3Rpb24gTWFwKCkgewotICAg
ICAgICAgICAgdGhpcy5fX2RhdGEgPSB7fTsKLSAgICAgICAgfTsKLQotICAgICAgICBNYXAucHJv
dG90eXBlLmdldCA9IGZ1bmN0aW9uIE1hcEdldChrZXkpIHsKLSAgICAgICAgICAgIGtleSA9ICck
JyArIGtleTsKLSAgICAgICAgICAgIGlmICh0aGlzLl9fZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkp
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19kYXRhW2tleV07Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgICAgICB9OwotCi0gICAgICAg
IE1hcC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gTWFwSGFzKGtleSkgewotICAgICAgICAgICAg
a2V5ID0gJyQnICsga2V5OwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19kYXRhLmhhc093blBy
b3BlcnR5KGtleSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgTWFwLnByb3RvdHlwZS5zZXQgPSBm
dW5jdGlvbiBNYXBTZXQoa2V5LCB2YWwpIHsKLSAgICAgICAgICAgIGtleSA9ICckJyArIGtleTsK
LSAgICAgICAgICAgIHRoaXMuX19kYXRhW2tleV0gPSB2YWw7Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgTWFwLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbiBNYXBEZWxldGUoa2V5KSB7Ci0g
ICAgICAgICAgICBrZXkgPSAnJCcgKyBrZXk7Ci0gICAgICAgICAgICByZXR1cm4gZGVsZXRlIHRo
aXMuX19kYXRhW2tleV07Ci0gICAgICAgIH07Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYXNzZXJ0
KGNvbmQsIHRleHQpIHsKLSAgICAgICAgaWYgKCFjb25kKSB7Ci0gICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IodGV4dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBkZWZhdWx0
T3B0aW9ucygpIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIG9wdGltaXN0aWM6IGZh
bHNlLAotICAgICAgICAgICAgZGlyZWN0aXZlOiBmYWxzZQotICAgICAgICB9OwotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIHVwZGF0ZURlZXBseSh0YXJnZXQsIG92ZXJyaWRlKSB7Ci0gICAgICAgIHZh
ciBrZXksIHZhbDsKLQotICAgICAgICBmdW5jdGlvbiBpc0hhc2hPYmplY3QodGFyZ2V0KSB7Ci0g
ICAgICAgICAgICByZXR1cm4gdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcgJiYgdGFyZ2V0IGlu
c3RhbmNlb2YgT2JqZWN0ICYmICEodGFyZ2V0IGluc3RhbmNlb2YgUmVnRXhwKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZvciAoa2V5IGluIG92ZXJyaWRlKSB7Ci0gICAgICAgICAgICBpZiAob3Zl
cnJpZGUuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgICAgIHZhbCA9IG92ZXJy
aWRlW2tleV07Ci0gICAgICAgICAgICAgICAgaWYgKGlzSGFzaE9iamVjdCh2YWwpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChpc0hhc2hPYmplY3QodGFyZ2V0W2tleV0pKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB1cGRhdGVEZWVwbHkodGFyZ2V0W2tleV0sIHZhbCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5
XSA9IHVwZGF0ZURlZXBseSh7fSwgdmFsKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdmFs
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdGFyZ2V0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEEgUmVmZXJlbmNlIHJlcHJl
c2VudHMgYSBzaW5nbGUgb2NjdXJyZW5jZSBvZiBhbiBpZGVudGlmaWVyIGluIGNvZGUuCi0gICAg
ICogQGNsYXNzIFJlZmVyZW5jZQotICAgICAqLwotICAgIGZ1bmN0aW9uIFJlZmVyZW5jZShpZGVu
dCwgc2NvcGUsIGZsYWcsIHdyaXRlRXhwciwgbWF5YmVJbXBsaWNpdEdsb2JhbCkgewotICAgICAg
ICAvKiogCi0gICAgICAgICAqIElkZW50aWZpZXIgc3ludGF4IG5vZGUuCi0gICAgICAgICAqIEBt
ZW1iZXIge2VzcHJpbWEjSWRlbnRpZmllcn0gUmVmZXJlbmNlI2lkZW50aWZpZXIgCi0gICAgICAg
ICAqLwotICAgICAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudDsKLSAgICAgICAgLyoqIAotICAg
ICAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGVuY2xvc2luZyBTY29wZS4KLSAgICAgICAgICogQG1l
bWJlciB7U2NvcGV9IFJlZmVyZW5jZSNmcm9tIAotICAgICAgICAgKi8KLSAgICAgICAgdGhpcy5m
cm9tID0gc2NvcGU7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBXaGV0aGVyIHRoZSByZWZlcmVu
Y2UgY29tZXMgZnJvbSBhIGR5bmFtaWMgc2NvcGUgKHN1Y2ggYXMgJ2V2YWwnLAotICAgICAgICAg
KiAnd2l0aCcsIGV0Yy4pLCBhbmQgbWF5IGJlIHRyYXBwZWQgYnkgZHluYW1pYyBzY29wZXMuCi0g
ICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IFJlZmVyZW5jZSN0YWludGVkCi0gICAgICAgICAq
LwotICAgICAgICB0aGlzLnRhaW50ZWQgPSBmYWxzZTsKLSAgICAgICAgLyoqIAotICAgICAgICAg
KiBUaGUgdmFyaWFibGUgdGhpcyByZWZlcmVuY2UgaXMgcmVzb2x2ZWQgd2l0aC4KLSAgICAgICAg
ICogQG1lbWJlciB7VmFyaWFibGV9IFJlZmVyZW5jZSNyZXNvbHZlZCAKLSAgICAgICAgICovCi0g
ICAgICAgIHRoaXMucmVzb2x2ZWQgPSBudWxsOwotICAgICAgICAvKiogCi0gICAgICAgICAqIFRo
ZSByZWFkLXdyaXRlIG1vZGUgb2YgdGhlIHJlZmVyZW5jZS4gKFZhbHVlIGlzIG9uZSBvZiB7QGxp
bmsKLSAgICAgICAgICogUmVmZXJlbmNlLlJFQUR9LCB7QGxpbmsgUmVmZXJlbmNlLlJXfSwge0Bs
aW5rIFJlZmVyZW5jZS5XUklURX0pLgotICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFJlZmVy
ZW5jZSNmbGFnIAotICAgICAgICAgKiBAcHJpdmF0ZQotICAgICAgICAgKi8KLSAgICAgICAgdGhp
cy5mbGFnID0gZmxhZzsKLSAgICAgICAgaWYgKHRoaXMuaXNXcml0ZSgpKSB7Ci0gICAgICAgICAg
ICAvKiogCi0gICAgICAgICAgICAgKiBJZiByZWZlcmVuY2UgaXMgd3JpdGVhYmxlLCB0aGlzIGlz
IHRoZSB0cmVlIGJlaW5nIHdyaXR0ZW4gdG8gaXQuCi0gICAgICAgICAgICAgKiBAbWVtYmVyIHtl
c3ByaW1hI05vZGV9IFJlZmVyZW5jZSN3cml0ZUV4cHIgCi0gICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIHRoaXMud3JpdGVFeHByID0gd3JpdGVFeHByOwotICAgICAgICB9Ci0gICAgICAgIC8q
KiAKLSAgICAgICAgICogV2hldGhlciB0aGUgUmVmZXJlbmNlIG1pZ2h0IHJlZmVyIHRvIGEgZ2xv
YmFsIHZhcmlhYmxlLgotICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBSZWZlcmVuY2UjX19t
YXliZUltcGxpY2l0R2xvYmFsIAotICAgICAgICAgKiBAcHJpdmF0ZQotICAgICAgICAgKi8KLSAg
ICAgICAgdGhpcy5fX21heWJlSW1wbGljaXRHbG9iYWwgPSBtYXliZUltcGxpY2l0R2xvYmFsOwot
ICAgIH0KLQotICAgIC8qKiAKLSAgICAgKiBAY29uc3RhbnQgUmVmZXJlbmNlLlJFQUQgCi0gICAg
ICogQHByaXZhdGUKLSAgICAgKi8KLSAgICBSZWZlcmVuY2UuUkVBRCA9IDB4MTsKLSAgICAvKiog
Ci0gICAgICogQGNvbnN0YW50IFJlZmVyZW5jZS5XUklURSAKLSAgICAgKiBAcHJpdmF0ZQotICAg
ICAqLwotICAgIFJlZmVyZW5jZS5XUklURSA9IDB4MjsKLSAgICAvKiogCi0gICAgICogQGNvbnN0
YW50IFJlZmVyZW5jZS5SVyAKLSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIFJlZmVyZW5j
ZS5SVyA9IDB4MzsKLQotICAgIC8qKgotICAgICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBz
dGF0aWMuCi0gICAgICogQG1ldGhvZCBSZWZlcmVuY2UjaXNTdGF0aWMKLSAgICAgKiBAcmV0dXJu
IHtib29sZWFufQotICAgICAqLwotICAgIFJlZmVyZW5jZS5wcm90b3R5cGUuaXNTdGF0aWMgPSBm
dW5jdGlvbiBpc1N0YXRpYygpIHsKLSAgICAgICAgcmV0dXJuICF0aGlzLnRhaW50ZWQgJiYgdGhp
cy5yZXNvbHZlZCAmJiB0aGlzLnJlc29sdmVkLnNjb3BlLmlzU3RhdGljKCk7Ci0gICAgfTsKLQot
ICAgIC8qKgotICAgICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyB3cml0ZWFibGUuCi0gICAg
ICogQG1ldGhvZCBSZWZlcmVuY2UjaXNXcml0ZQotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0g
ICAgICovCi0gICAgUmVmZXJlbmNlLnByb3RvdHlwZS5pc1dyaXRlID0gZnVuY3Rpb24gaXNXcml0
ZSgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZmxhZyAmIFJlZmVyZW5jZS5XUklURTsKLSAgICB9
OwotCi0gICAgLyoqCi0gICAgICogV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIHJlYWRhYmxlLgot
ICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lzUmVhZAotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59
Ci0gICAgICovCi0gICAgUmVmZXJlbmNlLnByb3RvdHlwZS5pc1JlYWQgPSBmdW5jdGlvbiBpc1Jl
YWQoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmZsYWcgJiBSZWZlcmVuY2UuUkVBRDsKLSAgICB9
OwotCi0gICAgLyoqCi0gICAgICogV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIHJlYWQtb25seS4K
LSAgICAgKiBAbWV0aG9kIFJlZmVyZW5jZSNpc1JlYWRPbmx5Ci0gICAgICogQHJldHVybiB7Ym9v
bGVhbn0KLSAgICAgKi8KLSAgICBSZWZlcmVuY2UucHJvdG90eXBlLmlzUmVhZE9ubHkgPSBmdW5j
dGlvbiBpc1JlYWRPbmx5KCkgewotICAgICAgICByZXR1cm4gdGhpcy5mbGFnID09PSBSZWZlcmVu
Y2UuUkVBRDsKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogV2hldGhlciB0aGUgcmVmZXJlbmNl
IGlzIHdyaXRlLW9ubHkuCi0gICAgICogQG1ldGhvZCBSZWZlcmVuY2UjaXNXcml0ZU9ubHkKLSAg
ICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIFJlZmVyZW5jZS5wcm90b3R5cGUu
aXNXcml0ZU9ubHkgPSBmdW5jdGlvbiBpc1dyaXRlT25seSgpIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuZmxhZyA9PT0gUmVmZXJlbmNlLldSSVRFOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBX
aGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgcmVhZC13cml0ZS4KLSAgICAgKiBAbWV0aG9kIFJlZmVy
ZW5jZSNpc1JlYWRXcml0ZQotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAg
UmVmZXJlbmNlLnByb3RvdHlwZS5pc1JlYWRXcml0ZSA9IGZ1bmN0aW9uIGlzUmVhZFdyaXRlKCkg
ewotICAgICAgICByZXR1cm4gdGhpcy5mbGFnID09PSBSZWZlcmVuY2UuUlc7Ci0gICAgfTsKLQot
ICAgIC8qKgotICAgICAqIEEgVmFyaWFibGUgcmVwcmVzZW50cyBhIGxvY2FsbHkgc2NvcGVkIGlk
ZW50aWZpZXIuIFRoZXNlIGluY2x1ZGUgYXJndW1lbnRzIHRvCi0gICAgICogZnVuY3Rpb25zLgot
ICAgICAqIEBjbGFzcyBWYXJpYWJsZQotICAgICAqLwotICAgIGZ1bmN0aW9uIFZhcmlhYmxlKG5h
bWUsIHNjb3BlKSB7Ci0gICAgICAgIC8qKiAgCi0gICAgICAgICAqIFRoZSB2YXJpYWJsZSBuYW1l
LCBhcyBnaXZlbiBpbiB0aGUgc291cmNlIGNvZGUuCi0gICAgICAgICAqIEBtZW1iZXIge1N0cmlu
Z30gVmFyaWFibGUjbmFtZSAKLSAgICAgICAgICovCi0gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7
Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBMaXN0IG9mIGRlZmluaW5nIG9jY3VycmVuY2VzIG9m
IHRoaXMgdmFyaWFibGUgKGxpa2UgaW4gJ3ZhciAuLi4nCi0gICAgICAgICAqIHN0YXRlbWVudHMg
b3IgYXMgcGFyYW1ldGVyKSwgYXMgQVNUIG5vZGVzLgotICAgICAgICAgKiBAbWVtYmVyIHtlc3By
aW1hLklkZW50aWZpZXJbXX0gVmFyaWFibGUjaWRlbnRpZmllcnMKLSAgICAgICAgICovCi0gICAg
ICAgIHRoaXMuaWRlbnRpZmllcnMgPSBbXTsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIExpc3Qg
b2Yge0BsaW5rIFJlZmVyZW5jZXxyZWZlcmVuY2VzfSBvZiB0aGlzIHZhcmlhYmxlIChleGNsdWRp
bmcgcGFyYW1ldGVyIGVudHJpZXMpCi0gICAgICAgICAqIGluIGl0cyBkZWZpbmluZyBzY29wZSBh
bmQgYWxsIG5lc3RlZCBzY29wZXMuIEZvciBkZWZpbmluZwotICAgICAgICAgKiBvY2N1cnJlbmNl
cyBvbmx5IHNlZSB7QGxpbmsgVmFyaWFibGUjZGVmc30uCi0gICAgICAgICAqIEBtZW1iZXIge1Jl
ZmVyZW5jZVtdfSBWYXJpYWJsZSNyZWZlcmVuY2VzCi0gICAgICAgICAqLwotICAgICAgICB0aGlz
LnJlZmVyZW5jZXMgPSBbXTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogTGlzdCBvZiBkZWZp
bmluZyBvY2N1cnJlbmNlcyBvZiB0aGlzIHZhcmlhYmxlIChsaWtlIGluICd2YXIgLi4uJwotICAg
ICAgICAgKiBzdGF0ZW1lbnRzIG9yIGFzIHBhcmFtZXRlciksIGFzIGN1c3RvbSBvYmplY3RzLgot
ICAgICAgICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBEZWZFbnRyeQotICAgICAgICAgKiBAcHJvcGVy
dHkge1N0cmluZ30gRGVmRW50cnkudHlwZSAtIHRoZSB0eXBlIG9mIHRoZSBvY2N1cnJlbmNlIChl
LmcuCi0gICAgICAgICAqICAgICAgIlBhcmFtZXRlciIsICJWYXJpYWJsZSIsIC4uLikKLSAgICAg
ICAgICogQHByb3BlcnR5IHtlc3ByaW1hLklkZW50aWZpZXJ9IERlZkVudHJ5Lm5hbWUgLSB0aGUg
aWRlbnRpZmllciBBU1Qgbm9kZSBvZiB0aGUgb2NjdXJyZW5jZQotICAgICAgICAgKiBAcHJvcGVy
dHkge2VzcHJpbWEuTm9kZX0gRGVmRW50cnkubm9kZSAtIHRoZSBlbmNsb3Npbmcgbm9kZSBvZiB0
aGUKLSAgICAgICAgICogICAgICBpZGVudGlmaWVyCi0gICAgICAgICAqIEBwcm9wZXJ0eSB7ZXNw
cmltYS5Ob2RlfSBbRGVmRW50cnkucGFyZW50XSAtIHRoZSBlbmNsb3Npbmcgc3RhdGVtZW50Ci0g
ICAgICAgICAqICAgICAgbm9kZSBvZiB0aGUgaWRlbnRpZmllcgotICAgICAgICAgKiBAbWVtYmVy
IHtEZWZFbnRyeVtdfSBWYXJpYWJsZSNkZWZzCi0gICAgICAgICAqLwotICAgICAgICB0aGlzLmRl
ZnMgPSBbXTsKLQotICAgICAgICB0aGlzLnRhaW50ZWQgPSBmYWxzZTsKLSAgICAgICAgLyoqCi0g
ICAgICAgICAqIFdoZXRoZXIgdGhpcyBpcyBhIHN0YWNrIHZhcmlhYmxlLgotICAgICAgICAgKiBA
bWVtYmVyIHtib29sZWFufSBWYXJpYWJsZSNzdGFjawotICAgICAgICAgKi8KLSAgICAgICAgdGhp
cy5zdGFjayA9IHRydWU7Ci0gICAgICAgIC8qKiAKLSAgICAgICAgICogUmVmZXJlbmNlIHRvIHRo
ZSBlbmNsb3NpbmcgU2NvcGUuCi0gICAgICAgICAqIEBtZW1iZXIge1Njb3BlfSBWYXJpYWJsZSNz
Y29wZSAKLSAgICAgICAgICovCi0gICAgICAgIHRoaXMuc2NvcGUgPSBzY29wZTsKLSAgICB9Ci0K
LSAgICBWYXJpYWJsZS5DYXRjaENsYXVzZSA9ICdDYXRjaENsYXVzZSc7Ci0gICAgVmFyaWFibGUu
UGFyYW1ldGVyID0gJ1BhcmFtZXRlcic7Ci0gICAgVmFyaWFibGUuRnVuY3Rpb25OYW1lID0gJ0Z1
bmN0aW9uTmFtZSc7Ci0gICAgVmFyaWFibGUuVmFyaWFibGUgPSAnVmFyaWFibGUnOwotICAgIFZh
cmlhYmxlLkltcGxpY2l0R2xvYmFsVmFyaWFibGUgPSAnSW1wbGljaXRHbG9iYWxWYXJpYWJsZSc7
Ci0KLSAgICBmdW5jdGlvbiBpc1N0cmljdFNjb3BlKHNjb3BlLCBibG9jaykgewotICAgICAgICB2
YXIgYm9keSwgaSwgaXosIHN0bXQsIGV4cHI7Ci0KLSAgICAgICAgLy8gV2hlbiB1cHBlciBzY29w
ZSBpcyBleGlzdHMgYW5kIHN0cmljdCwgaW5uZXIgc2NvcGUgaXMgYWxzbyBzdHJpY3QuCi0gICAg
ICAgIGlmIChzY29wZS51cHBlciAmJiBzY29wZS51cHBlci5pc1N0cmljdCkgewotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2NvcGUudHlwZSA9PT0g
J2Z1bmN0aW9uJykgewotICAgICAgICAgICAgYm9keSA9IGJsb2NrLmJvZHk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoc2NvcGUudHlwZSA9PT0gJ2dsb2JhbCcpIHsKLSAgICAgICAgICAgIGJvZHkgPSBi
bG9jazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChvcHRpb25zLmRpcmVjdGl2ZSkgewotICAgICAgICAgICAgZm9y
IChpID0gMCwgaXogPSBib2R5LmJvZHkubGVuZ3RoOyBpIDwgaXo7ICsraSkgewotICAgICAgICAg
ICAgICAgIHN0bXQgPSBib2R5LmJvZHlbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHN0bXQudHlw
ZSAhPT0gJ0RpcmVjdGl2ZVN0YXRlbWVudCcpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdG10LnJhdyA9PT0gJyJ1
c2Ugc3RyaWN0IicgfHwgc3RtdC5yYXcgPT09ICdcJ3VzZSBzdHJpY3RcJycpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBib2R5LmJv
ZHkubGVuZ3RoOyBpIDwgaXo7ICsraSkgewotICAgICAgICAgICAgICAgIHN0bXQgPSBib2R5LmJv
ZHlbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHN0bXQudHlwZSAhPT0gU3ludGF4LkV4cHJlc3Np
b25TdGF0ZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGV4cHIgPSBzdG10LmV4cHJlc3Npb247Ci0gICAgICAgICAg
ICAgICAgaWYgKGV4cHIudHlwZSAhPT0gU3ludGF4LkxpdGVyYWwgfHwgdHlwZW9mIGV4cHIudmFs
dWUgIT09ICdzdHJpbmcnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZXhwci5yYXcgIT0gbnVsbCkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoZXhwci5yYXcgPT09ICcidXNlIHN0cmljdCInIHx8IGV4cHIucmF3
ID09PSAnXCd1c2Ugc3RyaWN0XCcnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChleHByLnZhbHVlID09PSAndXNlIHN0cmljdCcpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAY2xhc3MgU2NvcGUKLSAgICAg
Ki8KLSAgICBmdW5jdGlvbiBTY29wZShibG9jaywgb3B0KSB7Ci0gICAgICAgIHZhciB2YXJpYWJs
ZSwgYm9keTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogT25lIG9mICdjYXRjaCcsICd3aXRo
JywgJ2Z1bmN0aW9uJyBvciAnZ2xvYmFsJy4KLSAgICAgICAgICogQG1lbWJlciB7U3RyaW5nfSBT
Y29wZSN0eXBlCi0gICAgICAgICAqLwotICAgICAgICB0aGlzLnR5cGUgPQotICAgICAgICAgICAg
KGJsb2NrLnR5cGUgPT09IFN5bnRheC5DYXRjaENsYXVzZSkgPyAnY2F0Y2gnIDoKLSAgICAgICAg
ICAgIChibG9jay50eXBlID09PSBTeW50YXguV2l0aFN0YXRlbWVudCkgPyAnd2l0aCcgOgotICAg
ICAgICAgICAgKGJsb2NrLnR5cGUgPT09IFN5bnRheC5Qcm9ncmFtKSA/ICdnbG9iYWwnIDogJ2Z1
bmN0aW9uJzsKLSAgICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgc2NvcGVkIHtAbGluayBWYXJp
YWJsZX1zIG9mIHRoaXMgc2NvcGUsIGFzIDxjb2RlPnsgVmFyaWFibGUubmFtZQotICAgICAgICAg
KiA6IFZhcmlhYmxlIH08L2NvZGU+LgotICAgICAgICAgKiBAbWVtYmVyIHtNYXB9IFNjb3BlI3Nl
dAotICAgICAgICAgKi8KLSAgICAgICAgdGhpcy5zZXQgPSBuZXcgTWFwKCk7Ci0gICAgICAgIC8q
KgotICAgICAgICAgKiBUaGUgdGFpbnRlZCB2YXJpYWJsZXMgb2YgdGhpcyBzY29wZSwgYXMgPGNv
ZGU+eyBWYXJpYWJsZS5uYW1lIDoKLSAgICAgICAgICogYm9vbGVhbiB9PC9jb2RlPi4KLSAgICAg
ICAgICogQG1lbWJlciB7TWFwfSBTY29wZSN0YWludHMgKi8KLSAgICAgICAgdGhpcy50YWludHMg
PSBuZXcgTWFwKCk7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBHZW5lcmFsbHksIHRocm91Z2gg
dGhlIGxleGljYWwgc2NvcGluZyBvZiBKUyB5b3UgY2FuIGFsd2F5cyBrbm93Ci0gICAgICAgICAq
IHdoaWNoIHZhcmlhYmxlIGFuIGlkZW50aWZpZXIgaW4gdGhlIHNvdXJjZSBjb2RlIHJlZmVycyB0
by4gVGhlcmUgYXJlCi0gICAgICAgICAqIGEgZmV3IGV4Y2VwdGlvbnMgdG8gdGhpcyBydWxlLiBX
aXRoICdnbG9iYWwnIGFuZCAnd2l0aCcgc2NvcGVzIHlvdQotICAgICAgICAgKiBjYW4gb25seSBk
ZWNpZGUgYXQgcnVudGltZSB3aGljaCB2YXJpYWJsZSBhIHJlZmVyZW5jZSByZWZlcnMgdG8uCi0g
ICAgICAgICAqIE1vcmVvdmVyLCBpZiAnZXZhbCgpJyBpcyB1c2VkIGluIGEgc2NvcGUsIGl0IG1p
Z2h0IGludHJvZHVjZSBuZXcKLSAgICAgICAgICogYmluZGluZ3MgaW4gdGhpcyBvciBpdHMgcHJh
cmVudCBzY29wZXMuCi0gICAgICAgICAqIEFsbCB0aG9zZSBzY29wZXMgYXJlIGNvbnNpZGVyZWQg
J2R5bmFtaWMnLgotICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBTY29wZSNkeW5hbWljCi0g
ICAgICAgICAqLwotICAgICAgICB0aGlzLmR5bmFtaWMgPSB0aGlzLnR5cGUgPT09ICdnbG9iYWwn
IHx8IHRoaXMudHlwZSA9PT0gJ3dpdGgnOwotICAgICAgICAvKioKLSAgICAgICAgICogQSByZWZl
cmVuY2UgdG8gdGhlIHNjb3BlLWRlZmluaW5nIHN5bnRheCBub2RlLgotICAgICAgICAgKiBAbWVt
YmVyIHtlc3ByaW1hLk5vZGV9IFNjb3BlI2Jsb2NrCi0gICAgICAgICAqLwotICAgICAgICB0aGlz
LmJsb2NrID0gYmxvY2s7Ci0gICAgICAgICAvKioKLSAgICAgICAgICogVGhlIHtAbGluayBSZWZl
cmVuY2V8cmVmZXJlbmNlc30gdGhhdCBhcmUgbm90IHJlc29sdmVkIHdpdGggdGhpcyBzY29wZS4K
LSAgICAgICAgICogQG1lbWJlciB7UmVmZXJlbmNlW119IFNjb3BlI3Rocm91Z2gKLSAgICAgICAg
ICovCi0gICAgICAgIHRoaXMudGhyb3VnaCA9IFtdOwotICAgICAgICAgLyoqCi0gICAgICAgICAq
IFRoZSBzY29wZWQge0BsaW5rIFZhcmlhYmxlfXMgb2YgdGhpcyBzY29wZS4gSW4gdGhlIGNhc2Ug
b2YgYQotICAgICAgICAgKiAnZnVuY3Rpb24nIHNjb3BlIHRoaXMgaW5jbHVkZXMgdGhlIGF1dG9t
YXRpYyBhcmd1bWVudCA8ZW0+YXJndW1lbnRzPC9lbT4gYXMKLSAgICAgICAgICogaXRzIGZpcnN0
IGVsZW1lbnQsIGFzIHdlbGwgYXMgYWxsIGZ1cnRoZXIgZm9ybWFsIGFyZ3VtZW50cy4KLSAgICAg
ICAgICogQG1lbWJlciB7VmFyaWFibGVbXX0gU2NvcGUjdmFyaWFibGVzCi0gICAgICAgICAqLwot
ICAgICAgICB0aGlzLnZhcmlhYmxlcyA9IFtdOwotICAgICAgICAgLyoqCi0gICAgICAgICAqIEFu
eSB2YXJpYWJsZSB7QGxpbmsgUmVmZXJlbmNlfHJlZmVyZW5jZX0gZm91bmQgaW4gdGhpcyBzY29w
ZS4gVGhpcwotICAgICAgICAgKiBpbmNsdWRlcyBvY2N1cnJlbmNlcyBvZiBsb2NhbCB2YXJpYWJs
ZXMgYXMgd2VsbCBhcyB2YXJpYWJsZXMgZnJvbQotICAgICAgICAgKiBwYXJlbnQgc2NvcGVzIChp
bmNsdWRpbmcgdGhlIGdsb2JhbCBzY29wZSkuIEZvciBsb2NhbCB2YXJpYWJsZXMKLSAgICAgICAg
ICogdGhpcyBhbHNvIGluY2x1ZGVzIGRlZmluaW5nIG9jY3VycmVuY2VzIChsaWtlIGluIGEgJ3Zh
cicgc3RhdGVtZW50KS4KLSAgICAgICAgICogSW4gYSAnZnVuY3Rpb24nIHNjb3BlIHRoaXMgZG9l
cyBub3QgaW5jbHVkZSB0aGUgb2NjdXJyZW5jZXMgb2YgdGhlCi0gICAgICAgICAqIGZvcm1hbCBw
YXJhbWV0ZXIgaW4gdGhlIHBhcmFtZXRlciBsaXN0LgotICAgICAgICAgKiBAbWVtYmVyIHtSZWZl
cmVuY2VbXX0gU2NvcGUjcmVmZXJlbmNlcwotICAgICAgICAgKi8KLSAgICAgICAgdGhpcy5yZWZl
cmVuY2VzID0gW107Ci0gICAgICAgICAvKioKLSAgICAgICAgICogTGlzdCBvZiB7QGxpbmsgUmVm
ZXJlbmNlfXMgdGhhdCBhcmUgbGVmdCB0byBiZSByZXNvbHZlZCAoaS5lLiB3aGljaAotICAgICAg
ICAgKiBuZWVkIHRvIGJlIGxpbmtlZCB0byB0aGUgdmFyaWFibGUgdGhleSByZWZlciB0bykuIFVz
ZWQgaW50ZXJuYWxseSB0bwotICAgICAgICAgKiByZXNvbHZlIGJpbmRpbmdzIGR1cmluZyBzY29w
ZSBhbmFseXNpcy4gT24gYSBmaW5hbGl6ZWQgc2NvcGUKLSAgICAgICAgICogYW5hbHlzaXMsIGFs
bCBzb3BlcyBoYXZlIDxlbT5sZWZ0PC9lbT4gdmFsdWUgPHN0cm9uZz5udWxsPC9zdHJvbmc+Lgot
ICAgICAgICAgKiBAbWVtYmVyIHtSZWZlcmVuY2VbXX0gU2NvcGUjbGVmdAotICAgICAgICAgKi8K
LSAgICAgICAgdGhpcy5sZWZ0ID0gW107Ci0gICAgICAgICAvKioKLSAgICAgICAgICogRm9yICdn
bG9iYWwnIGFuZCAnZnVuY3Rpb24nIHNjb3BlcywgdGhpcyBpcyBhIHNlbGYtcmVmZXJlbmNlLiBG
b3IKLSAgICAgICAgICogb3RoZXIgc2NvcGUgdHlwZXMgdGhpcyBpcyB0aGUgPGVtPnZhcmlhYmxl
U2NvcGU8L2VtPiB2YWx1ZSBvZiB0aGUKLSAgICAgICAgICogcGFyZW50IHNjb3BlLgotICAgICAg
ICAgKiBAbWVtYmVyIHtTY29wZX0gU2NvcGUjdmFyaWFibGVTY29wZQotICAgICAgICAgKi8KLSAg
ICAgICAgdGhpcy52YXJpYWJsZVNjb3BlID0KLSAgICAgICAgICAgICh0aGlzLnR5cGUgPT09ICdn
bG9iYWwnIHx8IHRoaXMudHlwZSA9PT0gJ2Z1bmN0aW9uJykgPyB0aGlzIDogY3VycmVudFNjb3Bl
LnZhcmlhYmxlU2NvcGU7Ci0gICAgICAgICAvKioKLSAgICAgICAgICogV2hldGhlciB0aGlzIHNj
b3BlIGlzIGNyZWF0ZWQgYnkgYSBGdW5jdGlvbkV4cHJlc3Npb24uCi0gICAgICAgICAqIEBtZW1i
ZXIge2Jvb2xlYW59IFNjb3BlI2Z1bmN0aW9uRXhwcmVzc2lvblNjb3BlCi0gICAgICAgICAqLwot
ICAgICAgICB0aGlzLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3BlID0gZmFsc2U7Ci0gICAgICAgICAv
KioKLSAgICAgICAgICogV2hldGhlciB0aGlzIGlzIGEgc2NvcGUgdGhhdCBjb250YWlucyBhbiAn
ZXZhbCgpJyBpbnZvY2F0aW9uLgotICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBTY29wZSNk
aXJlY3RDYWxsVG9FdmFsU2NvcGUKLSAgICAgICAgICovCi0gICAgICAgIHRoaXMuZGlyZWN0Q2Fs
bFRvRXZhbFNjb3BlID0gZmFsc2U7Ci0gICAgICAgICAvKioKLSAgICAgICAgICogQG1lbWJlciB7
Ym9vbGVhbn0gU2NvcGUjdGhpc0ZvdW5kCi0gICAgICAgICAqLwotICAgICAgICB0aGlzLnRoaXNG
b3VuZCA9IGZhbHNlOwotICAgICAgICBib2R5ID0gdGhpcy50eXBlID09PSAnZnVuY3Rpb24nID8g
YmxvY2suYm9keSA6IGJsb2NrOwotICAgICAgICBpZiAob3B0Lm5hbWluZykgewotICAgICAgICAg
ICAgdGhpcy5fX2RlZmluZShibG9jay5pZCwgewotICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlh
YmxlLkZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICBuYW1lOiBibG9jay5pZCwKLSAgICAg
ICAgICAgICAgICBub2RlOiBibG9jawotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB0aGlz
LmZ1bmN0aW9uRXhwcmVzc2lvblNjb3BlID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgICAgICB2
YXJpYWJsZSA9IG5ldyBWYXJpYWJsZSgnYXJndW1lbnRzJywgdGhpcyk7Ci0gICAgICAgICAgICAg
ICAgdGhpcy50YWludHMuc2V0KCdhcmd1bWVudHMnLCB0cnVlKTsKLSAgICAgICAgICAgICAgICB0
aGlzLnNldC5zZXQoJ2FyZ3VtZW50cycsIHZhcmlhYmxlKTsKLSAgICAgICAgICAgICAgICB0aGlz
LnZhcmlhYmxlcy5wdXNoKHZhcmlhYmxlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKGJsb2NrLnR5cGUgPT09IFN5bnRheC5GdW5jdGlvbkV4cHJlc3Npb24gJiYgYmxvY2suaWQp
IHsKLSAgICAgICAgICAgICAgICBuZXcgU2NvcGUoYmxvY2ssIHsgbmFtaW5nOiB0cnVlIH0pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgIC8qKgotICAgICAgICAgKiBSZWZl
cmVuY2UgdG8gdGhlIHBhcmVudCB7QGxpbmsgU2NvcGV8c2NvcGV9LgotICAgICAgICAgKiBAbWVt
YmVyIHtTY29wZX0gU2NvcGUjdXBwZXIKLSAgICAgICAgICovCi0gICAgICAgIHRoaXMudXBwZXIg
PSBjdXJyZW50U2NvcGU7Ci0gICAgICAgICAvKioKLSAgICAgICAgICogV2hldGhlciAndXNlIHN0
cmljdCcgaXMgaW4gZWZmZWN0IGluIHRoaXMgc2NvcGUuCi0gICAgICAgICAqIEBtZW1iZXIge2Jv
b2xlYW59IFNjb3BlI2lzU3RyaWN0Ci0gICAgICAgICAqLwotICAgICAgICB0aGlzLmlzU3RyaWN0
ID0gaXNTdHJpY3RTY29wZSh0aGlzLCBibG9jayk7Ci0KLSAgICAgICAgIC8qKgotICAgICAgICAg
KiBMaXN0IG9mIG5lc3RlZCB7QGxpbmsgU2NvcGV9cy4KLSAgICAgICAgICogQG1lbWJlciB7U2Nv
cGVbXX0gU2NvcGUjY2hpbGRTY29wZXMKLSAgICAgICAgICovCi0gICAgICAgIHRoaXMuY2hpbGRT
Y29wZXMgPSBbXTsKLSAgICAgICAgaWYgKGN1cnJlbnRTY29wZSkgewotICAgICAgICAgICAgY3Vy
cmVudFNjb3BlLmNoaWxkU2NvcGVzLnB1c2godGhpcyk7Ci0gICAgICAgIH0KLQotCi0gICAgICAg
IC8vIFJBSUkKLSAgICAgICAgY3VycmVudFNjb3BlID0gdGhpczsKLSAgICAgICAgaWYgKHRoaXMu
dHlwZSA9PT0gJ2dsb2JhbCcpIHsKLSAgICAgICAgICAgIGdsb2JhbFNjb3BlID0gdGhpczsKLSAg
ICAgICAgICAgIGdsb2JhbFNjb3BlLmltcGxpY2l0ID0gewotICAgICAgICAgICAgICAgIHNldDog
bmV3IE1hcCgpLAotICAgICAgICAgICAgICAgIHZhcmlhYmxlczogW10KLSAgICAgICAgICAgIH07
Ci0gICAgICAgIH0KLSAgICAgICAgc2NvcGVzLnB1c2godGhpcyk7Ci0gICAgfQotCi0gICAgU2Nv
cGUucHJvdG90eXBlLl9fY2xvc2UgPSBmdW5jdGlvbiBfX2Nsb3NlKCkgewotICAgICAgICB2YXIg
aSwgaXosIHJlZiwgY3VycmVudCwgbm9kZSwgaW1wbGljaXQ7Ci0KLSAgICAgICAgLy8gQmVjYXVz
ZSBpZiB0aGlzIGlzIGdsb2JhbCBlbnZpcm9ubWVudCwgdXBwZXIgaXMgbnVsbAotICAgICAgICBp
ZiAoIXRoaXMuZHluYW1pYyB8fCBvcHRpb25zLm9wdGltaXN0aWMpIHsKLSAgICAgICAgICAgIC8v
IHN0YXRpYyByZXNvbHZlCi0gICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHRoaXMubGVmdC5s
ZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAgICAgICAgcmVmID0gdGhpcy5sZWZ0W2ld
OwotICAgICAgICAgICAgICAgIGlmICghdGhpcy5fX3Jlc29sdmUocmVmKSkgewotICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9fZGVsZWdhdGVUb1VwcGVyU2NvcGUocmVmKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyB0
aGlzIGlzICJnbG9iYWwiIC8gIndpdGgiIC8gImZ1bmN0aW9uIHdpdGggZXZhbCIgZW52aXJvbm1l
bnQKLSAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICd3aXRoJykgewotICAgICAgICAgICAg
ICAgIGZvciAoaSA9IDAsIGl6ID0gdGhpcy5sZWZ0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmVmID0gdGhpcy5sZWZ0W2ldOwotICAgICAgICAgICAgICAgICAg
ICByZWYudGFpbnRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX19kZWxlZ2F0
ZVRvVXBwZXJTY29wZShyZWYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSB0aGlzLmxlZnQubGVuZ3RoOyBp
IDwgaXo7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAvLyBub3RpZnkgYWxsIG5hbWVzIGFy
ZSB0aHJvdWdoIHRvIGdsb2JhbAotICAgICAgICAgICAgICAgICAgICByZWYgPSB0aGlzLmxlZnRb
aV07Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0aGlzOwotICAgICAgICAgICAgICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRocm91Z2gucHVzaChy
ZWYpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQudXBwZXI7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJlbnQpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdn
bG9iYWwnKSB7Ci0gICAgICAgICAgICBpbXBsaWNpdCA9IFtdOwotICAgICAgICAgICAgZm9yIChp
ID0gMCwgaXogPSB0aGlzLmxlZnQubGVuZ3RoOyBpIDwgaXo7ICsraSkgewotICAgICAgICAgICAg
ICAgIHJlZiA9IHRoaXMubGVmdFtpXTsKLSAgICAgICAgICAgICAgICBpZiAocmVmLl9fbWF5YmVJ
bXBsaWNpdEdsb2JhbCAmJiAhdGhpcy5zZXQuaGFzKHJlZi5pZGVudGlmaWVyLm5hbWUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGltcGxpY2l0LnB1c2gocmVmLl9fbWF5YmVJbXBsaWNpdEdsb2Jh
bCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBj
cmVhdGUgYW4gaW1wbGljaXQgZ2xvYmFsIHZhcmlhYmxlIGZyb20gYXNzaWdubWVudCBleHByZXNz
aW9uCi0gICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IGltcGxpY2l0Lmxlbmd0aDsgaSA8IGl6
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBub2RlID0gaW1wbGljaXRbaV07Ci0gICAgICAgICAg
ICAgICAgdGhpcy5fX2RlZmluZUltcGxpY2l0KG5vZGUubGVmdCwgewotICAgICAgICAgICAgICAg
ICAgICB0eXBlOiBWYXJpYWJsZS5JbXBsaWNpdEdsb2JhbFZhcmlhYmxlLAotICAgICAgICAgICAg
ICAgICAgICBuYW1lOiBub2RlLmxlZnQsCi0gICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUK
LSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IHRoaXMubGVmdCA9IG51bGw7Ci0gICAgICAgIGN1cnJlbnRTY29wZSA9IHRoaXMudXBwZXI7Ci0g
ICAgfTsKLQotICAgIFNjb3BlLnByb3RvdHlwZS5fX3Jlc29sdmUgPSBmdW5jdGlvbiBfX3Jlc29s
dmUocmVmKSB7Ci0gICAgICAgIHZhciB2YXJpYWJsZSwgbmFtZTsKLSAgICAgICAgbmFtZSA9IHJl
Zi5pZGVudGlmaWVyLm5hbWU7Ci0gICAgICAgIGlmICh0aGlzLnNldC5oYXMobmFtZSkpIHsKLSAg
ICAgICAgICAgIHZhcmlhYmxlID0gdGhpcy5zZXQuZ2V0KG5hbWUpOwotICAgICAgICAgICAgdmFy
aWFibGUucmVmZXJlbmNlcy5wdXNoKHJlZik7Ci0gICAgICAgICAgICB2YXJpYWJsZS5zdGFjayA9
IHZhcmlhYmxlLnN0YWNrICYmIHJlZi5mcm9tLnZhcmlhYmxlU2NvcGUgPT09IHRoaXMudmFyaWFi
bGVTY29wZTsKLSAgICAgICAgICAgIGlmIChyZWYudGFpbnRlZCkgewotICAgICAgICAgICAgICAg
IHZhcmlhYmxlLnRhaW50ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHRoaXMudGFpbnRzLnNl
dCh2YXJpYWJsZS5uYW1lLCB0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlZi5y
ZXNvbHZlZCA9IHZhcmlhYmxlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07Ci0KLSAgICBTY29wZS5wcm90b3R5cGUuX19k
ZWxlZ2F0ZVRvVXBwZXJTY29wZSA9IGZ1bmN0aW9uIF9fZGVsZWdhdGVUb1VwcGVyU2NvcGUocmVm
KSB7Ci0gICAgICAgIGlmICh0aGlzLnVwcGVyKSB7Ci0gICAgICAgICAgICB0aGlzLnVwcGVyLmxl
ZnQucHVzaChyZWYpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMudGhyb3VnaC5wdXNoKHJlZik7
Ci0gICAgfTsKLQotICAgIFNjb3BlLnByb3RvdHlwZS5fX2RlZmluZUltcGxpY2l0ID0gZnVuY3Rp
b24gX19kZWZpbmVJbXBsaWNpdChub2RlLCBpbmZvKSB7Ci0gICAgICAgIHZhciBuYW1lLCB2YXJp
YWJsZTsKLSAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS50eXBlID09PSBTeW50YXguSWRlbnRpZmll
cikgewotICAgICAgICAgICAgbmFtZSA9IG5vZGUubmFtZTsKLSAgICAgICAgICAgIGlmICghdGhp
cy5pbXBsaWNpdC5zZXQuaGFzKG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUgPSBu
ZXcgVmFyaWFibGUobmFtZSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUuaWRlbnRp
ZmllcnMucHVzaChub2RlKTsKLSAgICAgICAgICAgICAgICB2YXJpYWJsZS5kZWZzLnB1c2goaW5m
byk7Ci0gICAgICAgICAgICAgICAgdGhpcy5pbXBsaWNpdC5zZXQuc2V0KG5hbWUsIHZhcmlhYmxl
KTsKLSAgICAgICAgICAgICAgICB0aGlzLmltcGxpY2l0LnZhcmlhYmxlcy5wdXNoKHZhcmlhYmxl
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUgPSB0aGlz
LmltcGxpY2l0LnNldC5nZXQobmFtZSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUuaWRlbnRp
ZmllcnMucHVzaChub2RlKTsKLSAgICAgICAgICAgICAgICB2YXJpYWJsZS5kZWZzLnB1c2goaW5m
byk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgU2NvcGUucHJvdG90
eXBlLl9fZGVmaW5lID0gZnVuY3Rpb24gX19kZWZpbmUobm9kZSwgaW5mbykgewotICAgICAgICB2
YXIgbmFtZSwgdmFyaWFibGU7Ci0gICAgICAgIGlmIChub2RlICYmIG5vZGUudHlwZSA9PT0gU3lu
dGF4LklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIG5hbWUgPSBub2RlLm5hbWU7Ci0gICAgICAg
ICAgICBpZiAoIXRoaXMuc2V0LmhhcyhuYW1lKSkgewotICAgICAgICAgICAgICAgIHZhcmlhYmxl
ID0gbmV3IFZhcmlhYmxlKG5hbWUsIHRoaXMpOwotICAgICAgICAgICAgICAgIHZhcmlhYmxlLmlk
ZW50aWZpZXJzLnB1c2gobm9kZSk7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGUuZGVmcy5wdXNo
KGluZm8pOwotICAgICAgICAgICAgICAgIHRoaXMuc2V0LnNldChuYW1lLCB2YXJpYWJsZSk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gdGhpcy5zZXQuZ2V0KG5hbWUp
OwotICAgICAgICAgICAgICAgIHZhcmlhYmxlLmlkZW50aWZpZXJzLnB1c2gobm9kZSk7Ci0gICAg
ICAgICAgICAgICAgdmFyaWFibGUuZGVmcy5wdXNoKGluZm8pOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIFNjb3BlLnByb3RvdHlwZS5fX3JlZmVyZW5jaW5nID0gZnVu
Y3Rpb24gX19yZWZlcmVuY2luZyhub2RlLCBhc3NpZ24sIHdyaXRlRXhwciwgbWF5YmVJbXBsaWNp
dEdsb2JhbCkgewotICAgICAgICB2YXIgcmVmOwotICAgICAgICAvLyBiZWNhdXNlIEFycmF5IGVs
ZW1lbnQgbWF5IGJlIG51bGwKLSAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS50eXBlID09PSBTeW50
YXguSWRlbnRpZmllcikgewotICAgICAgICAgICAgcmVmID0gbmV3IFJlZmVyZW5jZShub2RlLCB0
aGlzLCBhc3NpZ24gfHwgUmVmZXJlbmNlLlJFQUQsIHdyaXRlRXhwciwgbWF5YmVJbXBsaWNpdEds
b2JhbCk7Ci0gICAgICAgICAgICB0aGlzLnJlZmVyZW5jZXMucHVzaChyZWYpOwotICAgICAgICAg
ICAgdGhpcy5sZWZ0LnB1c2gocmVmKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBTY29wZS5w
cm90b3R5cGUuX19kZXRlY3RFdmFsID0gZnVuY3Rpb24gX19kZXRlY3RFdmFsKCkgewotICAgICAg
ICB2YXIgY3VycmVudDsKLSAgICAgICAgY3VycmVudCA9IHRoaXM7Ci0gICAgICAgIHRoaXMuZGly
ZWN0Q2FsbFRvRXZhbFNjb3BlID0gdHJ1ZTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgY3Vy
cmVudC5keW5hbWljID0gdHJ1ZTsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnVwcGVy
OwotICAgICAgICB9IHdoaWxlIChjdXJyZW50KTsKLSAgICB9OwotCi0gICAgU2NvcGUucHJvdG90
eXBlLl9fZGV0ZWN0VGhpcyA9IGZ1bmN0aW9uIF9fZGV0ZWN0VGhpcygpIHsKLSAgICAgICAgdGhp
cy50aGlzRm91bmQgPSB0cnVlOwotICAgIH07Ci0KLSAgICBTY29wZS5wcm90b3R5cGUuX19pc0Ns
b3NlZCA9IGZ1bmN0aW9uIGlzQ2xvc2VkKCkgewotICAgICAgICByZXR1cm4gdGhpcy5sZWZ0ID09
PSBudWxsOwotICAgIH07Ci0KLSAgICAvLyBBUEkgU2NvcGUjcmVzb2x2ZShuYW1lKQotICAgIC8v
IHJldHVybnMgcmVzb2x2ZWQgcmVmZXJlbmNlCi0gICAgU2NvcGUucHJvdG90eXBlLnJlc29sdmUg
PSBmdW5jdGlvbiByZXNvbHZlKGlkZW50KSB7Ci0gICAgICAgIHZhciByZWYsIGksIGl6OwotICAg
ICAgICBhc3NlcnQodGhpcy5fX2lzQ2xvc2VkKCksICdzY29wZSBzaG91bGQgYmUgY2xvc2VkJyk7
Ci0gICAgICAgIGFzc2VydChpZGVudC50eXBlID09PSBTeW50YXguSWRlbnRpZmllciwgJ3Rhcmdl
dCBzaG91bGQgYmUgaWRlbnRpZmllcicpOwotICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHRoaXMu
cmVmZXJlbmNlcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAgICByZWYgPSB0aGlz
LnJlZmVyZW5jZXNbaV07Ci0gICAgICAgICAgICBpZiAocmVmLmlkZW50aWZpZXIgPT09IGlkZW50
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9OwotCi0gICAgLy8gQVBJIFNjb3BlI2lzU3Rh
dGljCi0gICAgLy8gcmV0dXJucyB0aGlzIHNjb3BlIGlzIHN0YXRpYwotICAgIFNjb3BlLnByb3Rv
dHlwZS5pc1N0YXRpYyA9IGZ1bmN0aW9uIGlzU3RhdGljKCkgewotICAgICAgICByZXR1cm4gIXRo
aXMuZHluYW1pYzsKLSAgICB9OwotCi0gICAgLy8gQVBJIFNjb3BlI2lzQXJndW1lbnRzTWF0ZXJp
YWxpemVkCi0gICAgLy8gcmV0dXJuIHRoaXMgc2NvcGUgaGFzIG1hdGVyaWFsaXplZCBhcmd1bWVu
dHMKLSAgICBTY29wZS5wcm90b3R5cGUuaXNBcmd1bWVudHNNYXRlcmlhbGl6ZWQgPSBmdW5jdGlv
biBpc0FyZ3VtZW50c01hdGVyaWFsaXplZCgpIHsKLSAgICAgICAgLy8gVE9ETyhDb25zdGVsbGF0
aW9uKQotICAgICAgICAvLyBXZSBjYW4gbW9yZSBhZ2dyZXNzaXZlIG9uIHRoaXMgY29uZGl0aW9u
IGxpa2UgdGhpcy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gZnVuY3Rpb24gdCgpIHsKLSAgICAg
ICAgLy8gICAgIC8vIGFyZ3VtZW50cyBvZiB0IGlzIGFsd2F5cyBoaWRkZW4uCi0gICAgICAgIC8v
ICAgICBmdW5jdGlvbiBhcmd1bWVudHMoKSB7Ci0gICAgICAgIC8vICAgICB9Ci0gICAgICAgIC8v
IH0KLSAgICAgICAgdmFyIHZhcmlhYmxlOwotCi0gICAgICAgIC8vIFRoaXMgaXMgbm90IGZ1bmN0
aW9uIHNjb3BlCi0gICAgICAgIGlmICh0aGlzLnR5cGUgIT09ICdmdW5jdGlvbicpIHsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF0aGlzLmlzU3Rh
dGljKCkpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmFyaWFibGUgPSB0aGlzLnNldC5nZXQoJ2FyZ3VtZW50cycpOwotICAgICAgICBhc3NlcnQodmFy
aWFibGUsICdhbHdheXMgaGF2ZSBhcmd1bWVudHMgdmFyaWFibGUnKTsKLSAgICAgICAgcmV0dXJu
IHZhcmlhYmxlLnRhaW50ZWQgfHwgdmFyaWFibGUucmVmZXJlbmNlcy5sZW5ndGggICE9PSAwOwot
ICAgIH07Ci0KLSAgICAvLyBBUEkgU2NvcGUjaXNUaGlzTWF0ZXJpYWxpemVkCi0gICAgLy8gcmV0
dXJuIHRoaXMgc2NvcGUgaGFzIG1hdGVyaWFsaXplZCBgdGhpc2AgcmVmZXJlbmNlCi0gICAgU2Nv
cGUucHJvdG90eXBlLmlzVGhpc01hdGVyaWFsaXplZCA9IGZ1bmN0aW9uIGlzVGhpc01hdGVyaWFs
aXplZCgpIHsKLSAgICAgICAgLy8gVGhpcyBpcyBub3QgZnVuY3Rpb24gc2NvcGUKLSAgICAgICAg
aWYgKHRoaXMudHlwZSAhPT0gJ2Z1bmN0aW9uJykgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF0aGlzLmlzU3RhdGljKCkpIHsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzLnRoaXNGb3VuZDsK
LSAgICB9OwotCi0gICAgU2NvcGUubWFuZ2xlZE5hbWUgPSAnX18kZXNjb3BlJF9fJzsKLQotICAg
IFNjb3BlLnByb3RvdHlwZS5hdHRhY2ggPSBmdW5jdGlvbiBhdHRhY2goKSB7Ci0gICAgICAgIGlm
ICghdGhpcy5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSkgewotICAgICAgICAgICAgdGhpcy5ibG9j
a1tTY29wZS5tYW5nbGVkTmFtZV0gPSB0aGlzOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIFNj
b3BlLnByb3RvdHlwZS5kZXRhY2ggPSBmdW5jdGlvbiBkZXRhY2goKSB7Ci0gICAgICAgIGlmICgh
dGhpcy5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSkgewotICAgICAgICAgICAgZGVsZXRlIHRoaXMu
YmxvY2tbU2NvcGUubWFuZ2xlZE5hbWVdOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIFNjb3Bl
LnByb3RvdHlwZS5pc1VzZWROYW1lID0gZnVuY3Rpb24gKG5hbWUpIHsKLSAgICAgICAgaWYgKHRo
aXMuc2V0LmhhcyhuYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGl6ID0gdGhpcy50aHJvdWdoLmxlbmd0aDsgaSA8IGl6
OyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLnRocm91Z2hbaV0uaWRlbnRpZmllci5uYW1l
ID09PSBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07Ci0KLSAgICAvKioKLSAg
ICAgKiBAY2xhc3MgU2NvcGVNYW5hZ2VyCi0gICAgICovCi0gICAgZnVuY3Rpb24gU2NvcGVNYW5h
Z2VyKHNjb3BlcykgewotICAgICAgICB0aGlzLnNjb3BlcyA9IHNjb3BlczsKLSAgICAgICAgdGhp
cy5hdHRhY2hlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJldHVybnMgYXBwcm9wbGlhdGUg
c2NvcGUgZm9yIHRoaXMgbm9kZQotICAgIFNjb3BlTWFuYWdlci5wcm90b3R5cGUuX19nZXQgPSBm
dW5jdGlvbiBfX2dldChub2RlKSB7Ci0gICAgICAgIHZhciBpLCBpeiwgc2NvcGU7Ci0gICAgICAg
IGlmICh0aGlzLmF0dGFjaGVkKSB7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZVtTY29wZS5tYW5n
bGVkTmFtZV0gfHwgbnVsbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoU2NvcGUuaXNTY29wZVJl
cXVpcmVkKG5vZGUpKSB7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHRoaXMuc2NvcGVz
Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKLSAgICAgICAgICAgICAgICBzY29wZSA9IHRoaXMuc2Nv
cGVzW2ldOwotICAgICAgICAgICAgICAgIGlmICghc2NvcGUuZnVuY3Rpb25FeHByZXNzaW9uU2Nv
cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmJsb2NrID09PSBub2RlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGU7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgfTsKLQotICAgIFNjb3BlTWFuYWdlci5wcm90b3R5cGUuYWNxdWly
ZSA9IGZ1bmN0aW9uIGFjcXVpcmUobm9kZSkgewotICAgICAgICByZXR1cm4gdGhpcy5fX2dldChu
b2RlKTsKLSAgICB9OwotCi0gICAgU2NvcGVNYW5hZ2VyLnByb3RvdHlwZS5yZWxlYXNlID0gZnVu
Y3Rpb24gcmVsZWFzZShub2RlKSB7Ci0gICAgICAgIHZhciBzY29wZSA9IHRoaXMuX19nZXQobm9k
ZSk7Ci0gICAgICAgIGlmIChzY29wZSkgewotICAgICAgICAgICAgc2NvcGUgPSBzY29wZS51cHBl
cjsKLSAgICAgICAgICAgIHdoaWxlIChzY29wZSkgewotICAgICAgICAgICAgICAgIGlmICghc2Nv
cGUuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHNjb3BlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzY29wZSA9IHNjb3Bl
LnVwcGVyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwot
ICAgIH07Ci0KLSAgICBTY29wZU1hbmFnZXIucHJvdG90eXBlLmF0dGFjaCA9IGZ1bmN0aW9uIGF0
dGFjaCgpIHsKLSAgICAgICAgdmFyIGksIGl6OwotICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHRo
aXMuc2NvcGVzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKLSAgICAgICAgICAgIHRoaXMuc2NvcGVz
W2ldLmF0dGFjaCgpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuYXR0YWNoZWQgPSB0cnVlOwot
ICAgIH07Ci0KLSAgICBTY29wZU1hbmFnZXIucHJvdG90eXBlLmRldGFjaCA9IGZ1bmN0aW9uIGRl
dGFjaCgpIHsKLSAgICAgICAgdmFyIGksIGl6OwotICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHRo
aXMuc2NvcGVzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKLSAgICAgICAgICAgIHRoaXMuc2NvcGVz
W2ldLmRldGFjaCgpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuYXR0YWNoZWQgPSBmYWxzZTsK
LSAgICB9OwotCi0gICAgU2NvcGUuaXNTY29wZVJlcXVpcmVkID0gZnVuY3Rpb24gaXNTY29wZVJl
cXVpcmVkKG5vZGUpIHsKLSAgICAgICAgcmV0dXJuIFNjb3BlLmlzVmFyaWFibGVTY29wZVJlcXVp
cmVkKG5vZGUpIHx8IG5vZGUudHlwZSA9PT0gU3ludGF4LldpdGhTdGF0ZW1lbnQgfHwgbm9kZS50
eXBlID09PSBTeW50YXguQ2F0Y2hDbGF1c2U7Ci0gICAgfTsKLQotICAgIFNjb3BlLmlzVmFyaWFi
bGVTY29wZVJlcXVpcmVkID0gZnVuY3Rpb24gaXNWYXJpYWJsZVNjb3BlUmVxdWlyZWQobm9kZSkg
ewotICAgICAgICByZXR1cm4gbm9kZS50eXBlID09PSBTeW50YXguUHJvZ3JhbSB8fCBub2RlLnR5
cGUgPT09IFN5bnRheC5GdW5jdGlvbkV4cHJlc3Npb24gfHwgbm9kZS50eXBlID09PSBTeW50YXgu
RnVuY3Rpb25EZWNsYXJhdGlvbjsKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogTWFpbiBpbnRl
cmZhY2UgZnVuY3Rpb24uIFRha2VzIGFuIEVzcHJpbWEgc3ludGF4IHRyZWUgYW5kIHJldHVybnMg
dGhlCi0gICAgICogYW5hbHl6ZWQgc2NvcGVzLgotICAgICAqIEBmdW5jdGlvbiBhbmFseXplCi0g
ICAgICogQHBhcmFtIHtlc3ByaW1hLlRyZWV9IHRyZWUKLSAgICAgKiBAcGFyYW0ge09iamVjdH0g
cHJvdmlkZWRPcHRpb25zIC0gT3B0aW9ucyB0aGF0IHRhaWxvciB0aGUgc2NvcGUgYW5hbHlzaXMK
LSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm92aWRlZE9wdGlvbnMub3B0aW1pc3RpYz1mYWxz
ZV0gLSB0aGUgb3B0aW1pc3RpYyBmbGFnCi0gICAgICogQHBhcmFtIHtib29sZWFufSBbcHJvdmlk
ZWRPcHRpb25zLmRpcmVjdGl2ZT1mYWxzZV0tIHRoZSBkaXJlY3RpdmUgZmxhZwotICAgICAqIEBw
YXJhbSB7Ym9vbGVhbn0gW3Byb3ZpZGVkT3B0aW9ucy5pZ25vcmVFdmFsPWZhbHNlXS0gd2hldGhl
ciB0byBjaGVjayAnZXZhbCgpJyBjYWxscwotICAgICAqIEByZXR1cm4ge1Njb3BlTWFuYWdlcn0K
LSAgICAgKi8KLSAgICBmdW5jdGlvbiBhbmFseXplKHRyZWUsIHByb3ZpZGVkT3B0aW9ucykgewot
ICAgICAgICB2YXIgcmVzdWx0U2NvcGVzOwotCi0gICAgICAgIG9wdGlvbnMgPSB1cGRhdGVEZWVw
bHkoZGVmYXVsdE9wdGlvbnMoKSwgcHJvdmlkZWRPcHRpb25zKTsKLSAgICAgICAgcmVzdWx0U2Nv
cGVzID0gc2NvcGVzID0gW107Ci0gICAgICAgIGN1cnJlbnRTY29wZSA9IG51bGw7Ci0gICAgICAg
IGdsb2JhbFNjb3BlID0gbnVsbDsKLQotICAgICAgICAvLyBhdHRhY2ggc2NvcGUgYW5kIGNvbGxl
Y3QgLyByZXNvbHZlIG5hbWVzCi0gICAgICAgIGVzdHJhdmVyc2UudHJhdmVyc2UodHJlZSwgewot
ICAgICAgICAgICAgZW50ZXI6IGZ1bmN0aW9uIGVudGVyKG5vZGUpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgaSwgaXosIGRlY2w7Ci0gICAgICAgICAgICAgICAgaWYgKFNjb3BlLmlzU2NvcGVSZXF1
aXJlZChub2RlKSkgewotICAgICAgICAgICAgICAgICAgICBuZXcgU2NvcGUobm9kZSwge30pOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQXNzaWdubWVudEV4cHJlc3Npb246Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLm9wZXJhdG9yID09PSAnPScpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUubGVmdCwgUmVmZXJl
bmNlLldSSVRFLCBub2RlLnJpZ2h0LCAoIWN1cnJlbnRTY29wZS5pc1N0cmljdCAmJiBub2RlLmxl
ZnQubmFtZSAhPSBudWxsKSAmJiBub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUu
bGVmdCwgUmVmZXJlbmNlLlJXLCBub2RlLnJpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnJpZ2h0
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5
bnRheC5BcnJheUV4cHJlc3Npb246Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6
ID0gbm9kZS5lbGVtZW50cy5sZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmVsZW1lbnRzW2ldKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgICAgIGNhc2UgU3ludGF4LkJsb2NrU3RhdGVtZW50OgotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkJpbmFyeUV4cHJlc3Npb246
Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUubGVm
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUu
cmlnaHQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNh
c2UgU3ludGF4LkJyZWFrU3RhdGVtZW50OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkNhbGxFeHByZXNzaW9uOgotICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmNhbGxlZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZVsnYXJndW1lbnRzJ10ubGVuZ3RoOyBp
IDwgaXo7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVm
ZXJlbmNpbmcobm9kZVsnYXJndW1lbnRzJ11baV0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhpcyBpcyBkaXJlY3QgY2FsbCB0byBldmFs
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5pZ25vcmVFdmFsICYmIG5vZGUuY2Fs
bGVlLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdl
dmFsJykgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLnZhcmlhYmxlU2Nv
cGUuX19kZXRlY3RFdmFsKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5DYXRjaENsYXVzZToK
LSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fZGVmaW5lKG5vZGUucGFyYW0sIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlhYmxlLkNhdGNoQ2xhdXNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZTogbm9kZS5wYXJhbSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGU6IG5vZGUKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQ29uZGl0aW9uYWxF
eHByZXNzaW9uOgotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2lu
Zyhub2RlLnRlc3QpOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVu
Y2luZyhub2RlLmNvbnNlcXVlbnQpOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUu
X19yZWZlcmVuY2luZyhub2RlLmFsdGVybmF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQ29udGludWVTdGF0ZW1lbnQ6Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguRGly
ZWN0aXZlU3RhdGVtZW50OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgICAgIGNhc2UgU3ludGF4LkRvV2hpbGVTdGF0ZW1lbnQ6Ci0gICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUudGVzdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguRGVidWdnZXJTdGF0ZW1l
bnQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBT
eW50YXguRW1wdHlTdGF0ZW1lbnQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgICAgICAgICAgY2FzZSBTeW50YXguRXhwcmVzc2lvblN0YXRlbWVudDoKLSAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5leHByZXNzaW9uKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5G
b3JTdGF0ZW1lbnQ6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5j
aW5nKG5vZGUuaW5pdCk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVy
ZW5jaW5nKG5vZGUudGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3Jl
ZmVyZW5jaW5nKG5vZGUudXBkYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgICAgICBjYXNlIFN5bnRheC5Gb3JJblN0YXRlbWVudDoKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUubGVmdC50eXBlID09PSBTeW50YXguVmFyaWFibGVEZWNsYXJhdGlvbikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9k
ZS5sZWZ0LmRlY2xhcmF0aW9uc1swXS5pZCwgUmVmZXJlbmNlLldSSVRFLCBudWxsLCBmYWxzZSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
dXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmxlZnQsIFJlZmVyZW5jZS5XUklURSwgbnVs
bCwgKCFjdXJyZW50U2NvcGUuaXNTdHJpY3QgJiYgbm9kZS5sZWZ0Lm5hbWUgIT0gbnVsbCkgJiYg
bm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5yaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbjoK
LSAgICAgICAgICAgICAgICAgICAgLy8gRnVuY3Rpb25EZWNsYXJhdGlvbiBuYW1lIGlzIGRlZmlu
ZWQgaW4gdXBwZXIgc2NvcGUKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLnVwcGVy
Ll9fZGVmaW5lKG5vZGUuaWQsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlh
YmxlLkZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUuaWQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlCi0gICAgICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUucGFyYW1zLmxl
bmd0aDsgaSA8IGl6OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29w
ZS5fX2RlZmluZShub2RlLnBhcmFtc1tpXSwgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGU6IFZhcmlhYmxlLlBhcmFtZXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lOiBub2RlLnBhcmFtc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBu
b2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lv
bjoKLSAgICAgICAgICAgICAgICAgICAgLy8gaWQgaXMgZGVmaW5lZCBpbiB1cHBlciBzY29wZQot
ICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUucGFyYW1zLmxlbmd0aDsg
aSA8IGl6OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX2Rl
ZmluZShub2RlLnBhcmFtc1tpXSwgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6
IFZhcmlhYmxlLlBhcmFtZXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBu
b2RlLnBhcmFtc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LklkZW50aWZpZXI6Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguSWZTdGF0ZW1l
bnQ6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUu
dGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2Fz
ZSBTeW50YXguTGl0ZXJhbDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgICAgICBjYXNlIFN5bnRheC5MYWJlbGVkU3RhdGVtZW50OgotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkxvZ2ljYWxFeHByZXNzaW9u
OgotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmxl
ZnQpOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2Rl
LnJpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBj
YXNlIFN5bnRheC5NZW1iZXJFeHByZXNzaW9uOgotICAgICAgICAgICAgICAgICAgICBjdXJyZW50
U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLm9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLmNvbXB1dGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUu
X19yZWZlcmVuY2luZyhub2RlLnByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4Lk5l
d0V4cHJlc3Npb246Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5j
aW5nKG5vZGUuY2FsbGVlKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBu
b2RlWydhcmd1bWVudHMnXS5sZW5ndGg7IGkgPCBpejsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlWydhcmd1bWVudHMnXVtpXSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgICAgICBjYXNlIFN5bnRheC5PYmplY3RFeHByZXNzaW9uOgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlByb2dyYW06Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXgu
UHJvcGVydHk6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5n
KG5vZGUudmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAg
ICAgIGNhc2UgU3ludGF4LlJldHVyblN0YXRlbWVudDoKLSAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5hcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguU2VxdWVuY2VFeHByZXNz
aW9uOgotICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUuZXhwcmVzc2lv
bnMubGVuZ3RoOyBpIDwgaXo7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5leHByZXNzaW9uc1tpXSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBj
YXNlIFN5bnRheC5Td2l0Y2hTdGF0ZW1lbnQ6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRT
Y29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuZGlzY3JpbWluYW50KTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5Td2l0Y2hDYXNlOgotICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnRlc3QpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4
LlRoaXNFeHByZXNzaW9uOgotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUudmFyaWFi
bGVTY29wZS5fX2RldGVjdFRoaXMoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgICAgICBjYXNlIFN5bnRheC5UaHJvd1N0YXRlbWVudDoKLSAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5hcmd1bWVudCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVHJ5U3Rh
dGVtZW50OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNh
c2UgU3ludGF4LlVuYXJ5RXhwcmVzc2lvbjoKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNj
b3BlLl9fcmVmZXJlbmNpbmcobm9kZS5hcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVXBkYXRlRXhwcmVzc2lvbjoKLSAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5hcmd1bWVu
dCwgUmVmZXJlbmNlLlJXLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgICAgICBjYXNlIFN5bnRheC5WYXJpYWJsZURlY2xhcmF0aW9uOgotICAgICAgICAg
ICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUuZGVjbGFyYXRpb25zLmxlbmd0aDsgaSA8
IGl6OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlY2wgPSBub2RlLmRlY2xhcmF0
aW9uc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS52YXJpYWJsZVNj
b3BlLl9fZGVmaW5lKGRlY2wuaWQsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
OiBWYXJpYWJsZS5WYXJpYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBk
ZWNsLmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IGRlY2wsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyZW50OiBub2RlCi0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChkZWNsLmluaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpbml0aWFsaXplciBpcyBmb3VuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKGRlY2wuaWQsIFJlZmVyZW5jZS5XUklURSwgZGVjbC5p
bml0LCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9f
cmVmZXJlbmNpbmcoZGVjbC5pbml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgICAgIGNhc2UgU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRvcjoKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5XaGlsZVN0YXRlbWVudDoK
LSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS50ZXN0
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFN5
bnRheC5XaXRoU3RhdGVtZW50OgotICAgICAgICAgICAgICAgICAgICAvLyBXaXRoU3RhdGVtZW50
IG9iamVjdCBpcyByZWZlcmVuY2VkIGF0IHVwcGVyIHNjb3BlCi0gICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRTY29wZS51cHBlci5fX3JlZmVyZW5jaW5nKG5vZGUub2JqZWN0KTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgbGVhdmU6IGZ1bmN0aW9uIGxlYXZlKG5vZGUpIHsKLSAgICAgICAgICAgICAg
ICB3aGlsZSAoY3VycmVudFNjb3BlICYmIG5vZGUgPT09IGN1cnJlbnRTY29wZS5ibG9jaykgewot
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19jbG9zZSgpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgYXNzZXJ0KGN1cnJl
bnRTY29wZSA9PT0gbnVsbCk7Ci0gICAgICAgIGdsb2JhbFNjb3BlID0gbnVsbDsKLSAgICAgICAg
c2NvcGVzID0gbnVsbDsKLSAgICAgICAgb3B0aW9ucyA9IG51bGw7Ci0KLSAgICAgICAgcmV0dXJu
IG5ldyBTY29wZU1hbmFnZXIocmVzdWx0U2NvcGVzKTsKLSAgICB9Ci0KLSAgICAvKiogQG5hbWUg
bW9kdWxlOmVzY29wZS52ZXJzaW9uICovCi0gICAgZXhwb3J0cy52ZXJzaW9uID0gJzEuMC4xJzsK
LSAgICAvKiogQG5hbWUgbW9kdWxlOmVzY29wZS5SZWZlcmVuY2UgKi8KLSAgICBleHBvcnRzLlJl
ZmVyZW5jZSA9IFJlZmVyZW5jZTsKLSAgICAvKiogQG5hbWUgbW9kdWxlOmVzY29wZS5WYXJpYWJs
ZSAqLwotICAgIGV4cG9ydHMuVmFyaWFibGUgPSBWYXJpYWJsZTsKLSAgICAvKiogQG5hbWUgbW9k
dWxlOmVzY29wZS5TY29wZSAqLwotICAgIGV4cG9ydHMuU2NvcGUgPSBTY29wZTsKLSAgICAvKiog
QG5hbWUgbW9kdWxlOmVzY29wZS5TY29wZU1hbmFnZXIgKi8KLSAgICBleHBvcnRzLlNjb3BlTWFu
YWdlciA9IFNjb3BlTWFuYWdlcjsKLSAgICAvKiogQG5hbWUgbW9kdWxlOmVzY29wZS5hbmFseXpl
ICovCi0gICAgZXhwb3J0cy5hbmFseXplID0gYW5hbHl6ZTsKLX0sIHRoaXMpKTsKLS8qIHZpbTog
c2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovCi0KLX0seyJlc3RyYXZlcnNlIjo3fV0sNjpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKgotICBDb3B5cmlnaHQgKEMpIDIwMTMg
QXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+Ci0gIENvcHlyaWdodCAoQykg
MjAxMyBUaGFkZGVlIFR5bCA8dGhhZGRlZS50eWxAZ21haWwuY29tPgotICBDb3B5cmlnaHQgKEMp
IDIwMTMgTWF0aGlhcyBCeW5lbnMgPG1hdGhpYXNAcWl3aS5iZT4KLSAgQ29weXJpZ2h0IChDKSAy
MDEyIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgotICBDb3B5cmlnaHQg
KEMpIDIwMTIgTWF0aGlhcyBCeW5lbnMgPG1hdGhpYXNAcWl3aS5iZT4KLSAgQ29weXJpZ2h0IChD
KSAyMDEyIEpvb3N0LVdpbSBCb2VrZXN0ZWlqbiA8am9vc3Qtd2ltQGJvZWtlc3RlaWpuLm5sPgot
ICBDb3B5cmlnaHQgKEMpIDIwMTIgS3JpcyBLb3dhbCA8a3Jpcy5rb3dhbEBjaXhhci5jb20+Ci0g
IENvcHlyaWdodCAoQykgMjAxMiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
Ci0gIENvcHlyaWdodCAoQykgMjAxMiBBcnBhZCBCb3Jzb3MgPGFycGFkLmJvcnNvc0Bnb29nbGVt
YWlsLmNvbT4KLSAgQ29weXJpZ2h0IChDKSAyMDExIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5
YXRAZ21haWwuY29tPgotCi0gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotCi0gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgotICBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTlkKLSAgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0vKmpz
bGludCBiaXR3aXNlOnRydWUgcGx1c3BsdXM6dHJ1ZSAqLwotLypnbG9iYWwgZXNwcmltYTp0cnVl
LCBkZWZpbmU6dHJ1ZSwgZXhwb3J0czp0cnVlLCB3aW5kb3c6IHRydWUsCi10aHJvd0Vycm9yVG9s
ZXJhbnQ6IHRydWUsCi10aHJvd0Vycm9yOiB0cnVlLCBnZW5lcmF0ZVN0YXRlbWVudDogdHJ1ZSwg
cGVlazogdHJ1ZSwKLXBhcnNlQXNzaWdubWVudEV4cHJlc3Npb246IHRydWUsIHBhcnNlQmxvY2s6
IHRydWUsIHBhcnNlRXhwcmVzc2lvbjogdHJ1ZSwKLXBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbjog
dHJ1ZSwgcGFyc2VGdW5jdGlvbkV4cHJlc3Npb246IHRydWUsCi1wYXJzZUZ1bmN0aW9uU291cmNl
RWxlbWVudHM6IHRydWUsIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyOiB0cnVlLAotcGFyc2VMZWZ0
SGFuZFNpZGVFeHByZXNzaW9uOiB0cnVlLAotcGFyc2VVbmFyeUV4cHJlc3Npb246IHRydWUsCi1w
YXJzZVN0YXRlbWVudDogdHJ1ZSwgcGFyc2VTb3VyY2VFbGVtZW50OiB0cnVlICovCi0KLShmdW5j
dGlvbiAocm9vdCwgZmFjdG9yeSkgewotICAgICd1c2Ugc3RyaWN0JzsKLQotICAgIC8vIFVuaXZl
cnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9k
ZS5qcywKLSAgICAvLyBSaGlubywgYW5kIHBsYWluIGJyb3dzZXIgbG9hZGluZy4KLQotICAgIC8q
IGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCi0gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5j
dGlvbicgJiYgZGVmaW5lLmFtZCkgewotICAgICAgICBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3Rv
cnkpOwotICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7Ci0g
ICAgICAgIGZhY3RvcnkoZXhwb3J0cyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmFjdG9yeSgo
cm9vdC5lc3ByaW1hID0ge30pKTsKLSAgICB9Ci19KHRoaXMsIGZ1bmN0aW9uIChleHBvcnRzKSB7
Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgdmFyIFRva2VuLAotICAgICAgICBUb2tlbk5hbWUs
Ci0gICAgICAgIEZuRXhwclRva2VucywKLSAgICAgICAgU3ludGF4LAotICAgICAgICBQcm9wZXJ0
eUtpbmQsCi0gICAgICAgIE1lc3NhZ2VzLAotICAgICAgICBSZWdleCwKLSAgICAgICAgU3ludGF4
VHJlZURlbGVnYXRlLAotICAgICAgICBzb3VyY2UsCi0gICAgICAgIHN0cmljdCwKLSAgICAgICAg
aW5kZXgsCi0gICAgICAgIGxpbmVOdW1iZXIsCi0gICAgICAgIGxpbmVTdGFydCwKLSAgICAgICAg
bGVuZ3RoLAotICAgICAgICBkZWxlZ2F0ZSwKLSAgICAgICAgbG9va2FoZWFkLAotICAgICAgICBz
dGF0ZSwKLSAgICAgICAgZXh0cmE7Ci0KLSAgICBUb2tlbiA9IHsKLSAgICAgICAgQm9vbGVhbkxp
dGVyYWw6IDEsCi0gICAgICAgIEVPRjogMiwKLSAgICAgICAgSWRlbnRpZmllcjogMywKLSAgICAg
ICAgS2V5d29yZDogNCwKLSAgICAgICAgTnVsbExpdGVyYWw6IDUsCi0gICAgICAgIE51bWVyaWNM
aXRlcmFsOiA2LAotICAgICAgICBQdW5jdHVhdG9yOiA3LAotICAgICAgICBTdHJpbmdMaXRlcmFs
OiA4LAotICAgICAgICBSZWd1bGFyRXhwcmVzc2lvbjogOQotICAgIH07Ci0KLSAgICBUb2tlbk5h
bWUgPSB7fTsKLSAgICBUb2tlbk5hbWVbVG9rZW4uQm9vbGVhbkxpdGVyYWxdID0gJ0Jvb2xlYW4n
OwotICAgIFRva2VuTmFtZVtUb2tlbi5FT0ZdID0gJzxlbmQ+JzsKLSAgICBUb2tlbk5hbWVbVG9r
ZW4uSWRlbnRpZmllcl0gPSAnSWRlbnRpZmllcic7Ci0gICAgVG9rZW5OYW1lW1Rva2VuLktleXdv
cmRdID0gJ0tleXdvcmQnOwotICAgIFRva2VuTmFtZVtUb2tlbi5OdWxsTGl0ZXJhbF0gPSAnTnVs
bCc7Ci0gICAgVG9rZW5OYW1lW1Rva2VuLk51bWVyaWNMaXRlcmFsXSA9ICdOdW1lcmljJzsKLSAg
ICBUb2tlbk5hbWVbVG9rZW4uUHVuY3R1YXRvcl0gPSAnUHVuY3R1YXRvcic7Ci0gICAgVG9rZW5O
YW1lW1Rva2VuLlN0cmluZ0xpdGVyYWxdID0gJ1N0cmluZyc7Ci0gICAgVG9rZW5OYW1lW1Rva2Vu
LlJlZ3VsYXJFeHByZXNzaW9uXSA9ICdSZWd1bGFyRXhwcmVzc2lvbic7Ci0KLSAgICAvLyBBIGZ1
bmN0aW9uIGZvbGxvd2luZyBvbmUgb2YgdGhvc2UgdG9rZW5zIGlzIGFuIGV4cHJlc3Npb24uCi0g
ICAgRm5FeHByVG9rZW5zID0gWycoJywgJ3snLCAnWycsICdpbicsICd0eXBlb2YnLCAnaW5zdGFu
Y2VvZicsICduZXcnLAotICAgICAgICAgICAgICAgICAgICAncmV0dXJuJywgJ2Nhc2UnLCAnZGVs
ZXRlJywgJ3Rocm93JywgJ3ZvaWQnLAotICAgICAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50
IG9wZXJhdG9ycwotICAgICAgICAgICAgICAgICAgICAnPScsICcrPScsICctPScsICcqPScsICcv
PScsICclPScsICc8PD0nLCAnPj49JywgJz4+Pj0nLAotICAgICAgICAgICAgICAgICAgICAnJj0n
LCAnfD0nLCAnXj0nLCAnLCcsCi0gICAgICAgICAgICAgICAgICAgIC8vIGJpbmFyeS91bmFyeSBv
cGVyYXRvcnMKLSAgICAgICAgICAgICAgICAgICAgJysnLCAnLScsICcqJywgJy8nLCAnJScsICcr
KycsICctLScsICc8PCcsICc+PicsICc+Pj4nLCAnJicsCi0gICAgICAgICAgICAgICAgICAgICd8
JywgJ14nLCAnIScsICd+JywgJyYmJywgJ3x8JywgJz8nLCAnOicsICc9PT0nLCAnPT0nLCAnPj0n
LAotICAgICAgICAgICAgICAgICAgICAnPD0nLCAnPCcsICc+JywgJyE9JywgJyE9PSddOwotCi0g
ICAgU3ludGF4ID0gewotICAgICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRF
eHByZXNzaW9uJywKLSAgICAgICAgQXJyYXlFeHByZXNzaW9uOiAnQXJyYXlFeHByZXNzaW9uJywK
LSAgICAgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsCi0gICAgICAgIEJpbmFy
eUV4cHJlc3Npb246ICdCaW5hcnlFeHByZXNzaW9uJywKLSAgICAgICAgQnJlYWtTdGF0ZW1lbnQ6
ICdCcmVha1N0YXRlbWVudCcsCi0gICAgICAgIENhbGxFeHByZXNzaW9uOiAnQ2FsbEV4cHJlc3Np
b24nLAotICAgICAgICBDYXRjaENsYXVzZTogJ0NhdGNoQ2xhdXNlJywKLSAgICAgICAgQ29uZGl0
aW9uYWxFeHByZXNzaW9uOiAnQ29uZGl0aW9uYWxFeHByZXNzaW9uJywKLSAgICAgICAgQ29udGlu
dWVTdGF0ZW1lbnQ6ICdDb250aW51ZVN0YXRlbWVudCcsCi0gICAgICAgIERvV2hpbGVTdGF0ZW1l
bnQ6ICdEb1doaWxlU3RhdGVtZW50JywKLSAgICAgICAgRGVidWdnZXJTdGF0ZW1lbnQ6ICdEZWJ1
Z2dlclN0YXRlbWVudCcsCi0gICAgICAgIEVtcHR5U3RhdGVtZW50OiAnRW1wdHlTdGF0ZW1lbnQn
LAotICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50OiAnRXhwcmVzc2lvblN0YXRlbWVudCcsCi0g
ICAgICAgIEZvclN0YXRlbWVudDogJ0ZvclN0YXRlbWVudCcsCi0gICAgICAgIEZvckluU3RhdGVt
ZW50OiAnRm9ySW5TdGF0ZW1lbnQnLAotICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVu
Y3Rpb25EZWNsYXJhdGlvbicsCi0gICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9u
RXhwcmVzc2lvbicsCi0gICAgICAgIElkZW50aWZpZXI6ICdJZGVudGlmaWVyJywKLSAgICAgICAg
SWZTdGF0ZW1lbnQ6ICdJZlN0YXRlbWVudCcsCi0gICAgICAgIExpdGVyYWw6ICdMaXRlcmFsJywK
LSAgICAgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLAotICAgICAgICBM
b2dpY2FsRXhwcmVzc2lvbjogJ0xvZ2ljYWxFeHByZXNzaW9uJywKLSAgICAgICAgTWVtYmVyRXhw
cmVzc2lvbjogJ01lbWJlckV4cHJlc3Npb24nLAotICAgICAgICBOZXdFeHByZXNzaW9uOiAnTmV3
RXhwcmVzc2lvbicsCi0gICAgICAgIE9iamVjdEV4cHJlc3Npb246ICdPYmplY3RFeHByZXNzaW9u
JywKLSAgICAgICAgUHJvZ3JhbTogJ1Byb2dyYW0nLAotICAgICAgICBQcm9wZXJ0eTogJ1Byb3Bl
cnR5JywKLSAgICAgICAgUmV0dXJuU3RhdGVtZW50OiAnUmV0dXJuU3RhdGVtZW50JywKLSAgICAg
ICAgU2VxdWVuY2VFeHByZXNzaW9uOiAnU2VxdWVuY2VFeHByZXNzaW9uJywKLSAgICAgICAgU3dp
dGNoU3RhdGVtZW50OiAnU3dpdGNoU3RhdGVtZW50JywKLSAgICAgICAgU3dpdGNoQ2FzZTogJ1N3
aXRjaENhc2UnLAotICAgICAgICBUaGlzRXhwcmVzc2lvbjogJ1RoaXNFeHByZXNzaW9uJywKLSAg
ICAgICAgVGhyb3dTdGF0ZW1lbnQ6ICdUaHJvd1N0YXRlbWVudCcsCi0gICAgICAgIFRyeVN0YXRl
bWVudDogJ1RyeVN0YXRlbWVudCcsCi0gICAgICAgIFVuYXJ5RXhwcmVzc2lvbjogJ1VuYXJ5RXhw
cmVzc2lvbicsCi0gICAgICAgIFVwZGF0ZUV4cHJlc3Npb246ICdVcGRhdGVFeHByZXNzaW9uJywK
LSAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjogJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLAotICAg
ICAgICBWYXJpYWJsZURlY2xhcmF0b3I6ICdWYXJpYWJsZURlY2xhcmF0b3InLAotICAgICAgICBX
aGlsZVN0YXRlbWVudDogJ1doaWxlU3RhdGVtZW50JywKLSAgICAgICAgV2l0aFN0YXRlbWVudDog
J1dpdGhTdGF0ZW1lbnQnCi0gICAgfTsKLQotICAgIFByb3BlcnR5S2luZCA9IHsKLSAgICAgICAg
RGF0YTogMSwKLSAgICAgICAgR2V0OiAyLAotICAgICAgICBTZXQ6IDQKLSAgICB9OwotCi0gICAg
Ly8gRXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBWOC4KLSAgICBNZXNzYWdl
cyA9IHsKLSAgICAgICAgVW5leHBlY3RlZFRva2VuOiAgJ1VuZXhwZWN0ZWQgdG9rZW4gJTAnLAot
ICAgICAgICBVbmV4cGVjdGVkTnVtYmVyOiAgJ1VuZXhwZWN0ZWQgbnVtYmVyJywKLSAgICAgICAg
VW5leHBlY3RlZFN0cmluZzogICdVbmV4cGVjdGVkIHN0cmluZycsCi0gICAgICAgIFVuZXhwZWN0
ZWRJZGVudGlmaWVyOiAgJ1VuZXhwZWN0ZWQgaWRlbnRpZmllcicsCi0gICAgICAgIFVuZXhwZWN0
ZWRSZXNlcnZlZDogICdVbmV4cGVjdGVkIHJlc2VydmVkIHdvcmQnLAotICAgICAgICBVbmV4cGVj
dGVkRU9TOiAgJ1VuZXhwZWN0ZWQgZW5kIG9mIGlucHV0JywKLSAgICAgICAgTmV3bGluZUFmdGVy
VGhyb3c6ICAnSWxsZWdhbCBuZXdsaW5lIGFmdGVyIHRocm93JywKLSAgICAgICAgSW52YWxpZFJl
Z0V4cDogJ0ludmFsaWQgcmVndWxhciBleHByZXNzaW9uJywKLSAgICAgICAgVW50ZXJtaW5hdGVk
UmVnRXhwOiAgJ0ludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiBtaXNzaW5nIC8nLAotICAgICAg
ICBJbnZhbGlkTEhTSW5Bc3NpZ25tZW50OiAgJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gYXNz
aWdubWVudCcsCi0gICAgICAgIEludmFsaWRMSFNJbkZvckluOiAgJ0ludmFsaWQgbGVmdC1oYW5k
IHNpZGUgaW4gZm9yLWluJywKLSAgICAgICAgTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoOiAnTW9y
ZSB0aGFuIG9uZSBkZWZhdWx0IGNsYXVzZSBpbiBzd2l0Y2ggc3RhdGVtZW50JywKLSAgICAgICAg
Tm9DYXRjaE9yRmluYWxseTogICdNaXNzaW5nIGNhdGNoIG9yIGZpbmFsbHkgYWZ0ZXIgdHJ5JywK
LSAgICAgICAgVW5rbm93bkxhYmVsOiAnVW5kZWZpbmVkIGxhYmVsIFwnJTBcJycsCi0gICAgICAg
IFJlZGVjbGFyYXRpb246ICclMCBcJyUxXCcgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZCcsCi0g
ICAgICAgIElsbGVnYWxDb250aW51ZTogJ0lsbGVnYWwgY29udGludWUgc3RhdGVtZW50JywKLSAg
ICAgICAgSWxsZWdhbEJyZWFrOiAnSWxsZWdhbCBicmVhayBzdGF0ZW1lbnQnLAotICAgICAgICBJ
bGxlZ2FsUmV0dXJuOiAnSWxsZWdhbCByZXR1cm4gc3RhdGVtZW50JywKLSAgICAgICAgU3RyaWN0
TW9kZVdpdGg6ICAnU3RyaWN0IG1vZGUgY29kZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRl
bWVudCcsCi0gICAgICAgIFN0cmljdENhdGNoVmFyaWFibGU6ICAnQ2F0Y2ggdmFyaWFibGUgbWF5
IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZScsCi0gICAgICAgIFN0cmlj
dFZhck5hbWU6ICAnVmFyaWFibGUgbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGlu
IHN0cmljdCBtb2RlJywKLSAgICAgICAgU3RyaWN0UGFyYW1OYW1lOiAgJ1BhcmFtZXRlciBuYW1l
IGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKLSAgICAg
ICAgU3RyaWN0UGFyYW1EdXBlOiAnU3RyaWN0IG1vZGUgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGR1
cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMnLAotICAgICAgICBTdHJpY3RGdW5jdGlvbk5hbWU6ICAn
RnVuY3Rpb24gbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2Rl
JywKLSAgICAgICAgU3RyaWN0T2N0YWxMaXRlcmFsOiAgJ09jdGFsIGxpdGVyYWxzIGFyZSBub3Qg
YWxsb3dlZCBpbiBzdHJpY3QgbW9kZS4nLAotICAgICAgICBTdHJpY3REZWxldGU6ICAnRGVsZXRl
IG9mIGFuIHVucXVhbGlmaWVkIGlkZW50aWZpZXIgaW4gc3RyaWN0IG1vZGUuJywKLSAgICAgICAg
U3RyaWN0RHVwbGljYXRlUHJvcGVydHk6ICAnRHVwbGljYXRlIGRhdGEgcHJvcGVydHkgaW4gb2Jq
ZWN0IGxpdGVyYWwgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUnLAotICAgICAgICBBY2Nlc3Nv
ckRhdGFQcm9wZXJ0eTogICdPYmplY3QgbGl0ZXJhbCBtYXkgbm90IGhhdmUgZGF0YSBhbmQgYWNj
ZXNzb3IgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBuYW1lJywKLSAgICAgICAgQWNjZXNzb3JHZXRT
ZXQ6ICAnT2JqZWN0IGxpdGVyYWwgbWF5IG5vdCBoYXZlIG11bHRpcGxlIGdldC9zZXQgYWNjZXNz
b3JzIHdpdGggdGhlIHNhbWUgbmFtZScsCi0gICAgICAgIFN0cmljdExIU0Fzc2lnbm1lbnQ6ICAn
QXNzaWdubWVudCB0byBldmFsIG9yIGFyZ3VtZW50cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJpY3Qg
bW9kZScsCi0gICAgICAgIFN0cmljdExIU1Bvc3RmaXg6ICAnUG9zdGZpeCBpbmNyZW1lbnQvZGVj
cmVtZW50IG1heSBub3QgaGF2ZSBldmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBt
b2RlJywKLSAgICAgICAgU3RyaWN0TEhTUHJlZml4OiAgJ1ByZWZpeCBpbmNyZW1lbnQvZGVjcmVt
ZW50IG1heSBub3QgaGF2ZSBldmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2Rl
JywKLSAgICAgICAgU3RyaWN0UmVzZXJ2ZWRXb3JkOiAgJ1VzZSBvZiBmdXR1cmUgcmVzZXJ2ZWQg
d29yZCBpbiBzdHJpY3QgbW9kZScKLSAgICB9OwotCi0gICAgLy8gU2VlIGFsc28gdG9vbHMvZ2Vu
ZXJhdGUtdW5pY29kZS1yZWdleC5weS4KLSAgICBSZWdleCA9IHsKLSAgICAgICAgTm9uQXNjaWlJ
ZGVudGlmaWVyU3RhcnQ6IG5ldyBSZWdFeHAoJ1tceEFBXHhCNVx4QkFceEMwLVx4RDZceEQ4LVx4
RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcw
LVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhD
XHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUz
MS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1RjJcdTA2
MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZF
RVx1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdB
NVx1MDdCMVx1MDdDQS1cdTA3RUFcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFB
XHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMFx1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5
XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzdcdTA5NzktXHUwOTdGXHUwOTg1
LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2
LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFc
dTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJc
dTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1
MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBc
dTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1
MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUw
QjM1LVx1MEIzOVx1MEIzRFx1MEI1Q1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBC
ODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBC
OUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMFx1MEMw
NS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUw
QzM5XHUwQzNEXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBD
OTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBD
RTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMFx1MEQxMi1cdTBE
M0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5
QS1cdTBEQjFcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBF
MzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThB
XHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXHUwRUE1XHUwRUE3
XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRc
dTBFQzZcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgt
XHUwRjhDXHUxMDAwLVx1MTAyQVx1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYx
XHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFcdTEwOEVcdTEwQTAtXHUxMEM1
XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUw
LVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5
MC1cdTEyQjBcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEy
QzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1
MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFc
dTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGMFx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXHUxNzIw
LVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3
QjNcdTE3RDdcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4
RjVcdTE5MDAtXHUxOTFDXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUx
OUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1
MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXHUxQkJBLVx1MUJFNVx1MUMwMC1c
dTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0Yx
XHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIw
LVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVG
LVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZD
Ni1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUx
RkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIx
MEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIx
MkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxNjAtXHUy
MTg4XHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1
MkNGMlx1MkNGM1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUy
RDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1c
dTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERF
XHUyRTJGXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMjlcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAz
Q1x1MzA0MS1cdTMwOTZcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMx
MDUtXHUzMTJEXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1
NERCNVx1NEUwMC1cdTlGQ0NcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENc
dUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAt
XHVBNkVGXHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5
M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODAxXHVBODAzLVx1QTgwNVx1QTgwNy1cdUE4MEFcdUE4
MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXHVB
OTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1
QUEwMC1cdUFBMjhcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0Fc
dUFBODAtXHVBQUFGXHVBQUIxXHVBQUI1XHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1
QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNFx1QUIwMS1cdUFCMDZcdUFCMDkt
XHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXHVBQkMwLVx1QUJF
Mlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZB
NzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVG
QjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZC
NDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1
RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFc
dUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRB
LVx1RkZEQ10nKSwKLSAgICAgICAgTm9uQXNjaWlJZGVudGlmaWVyUGFydDogbmV3IFJlZ0V4cCgn
W1x4QUFceEI1XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1
MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzMDAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1
MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1
MDNGNy1cdTA0ODFcdTA0ODMtXHUwNDg3XHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlc
dTA1NjEtXHUwNTg3XHUwNTkxLVx1MDVCRFx1MDVCRlx1MDVDMVx1MDVDMlx1MDVDNFx1MDVDNVx1
MDVDN1x1MDVEMC1cdTA1RUFcdTA1RjAtXHUwNUYyXHUwNjEwLVx1MDYxQVx1MDYyMC1cdTA2Njlc
dTA2NkUtXHUwNkQzXHUwNkQ1LVx1MDZEQ1x1MDZERi1cdTA2RThcdTA2RUEtXHUwNkZDXHUwNkZG
XHUwNzEwLVx1MDc0QVx1MDc0RC1cdTA3QjFcdTA3QzAtXHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgy
RFx1MDg0MC1cdTA4NUJcdTA4QTBcdTA4QTItXHUwOEFDXHUwOEU0LVx1MDhGRVx1MDkwMC1cdTA5
NjNcdTA5NjYtXHUwOTZGXHUwOTcxLVx1MDk3N1x1MDk3OS1cdTA5N0ZcdTA5ODEtXHUwOTgzXHUw
OTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUw
OUI2LVx1MDlCOVx1MDlCQy1cdTA5QzRcdTA5QzdcdTA5QzhcdTA5Q0ItXHUwOUNFXHUwOUQ3XHUw
OURDXHUwOUREXHUwOURGLVx1MDlFM1x1MDlFNi1cdTA5RjFcdTBBMDEtXHUwQTAzXHUwQTA1LVx1
MEEwQVx1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUw
QTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUwQTNDXHUwQTNFLVx1MEE0Mlx1MEE0N1x1MEE0OFx1MEE0
Qi1cdTBBNERcdTBBNTFcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTY2LVx1MEE3NVx1MEE4MS1cdTBB
ODNcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUw
QUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCQy1cdTBBQzVcdTBBQzctXHUwQUM5XHUwQUNCLVx1
MEFDRFx1MEFEMFx1MEFFMC1cdTBBRTNcdTBBRTYtXHUwQUVGXHUwQjAxLVx1MEIwM1x1MEIwNS1c
dTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1
MEIzNS1cdTBCMzlcdTBCM0MtXHUwQjQ0XHUwQjQ3XHUwQjQ4XHUwQjRCLVx1MEI0RFx1MEI1Nlx1
MEI1N1x1MEI1Q1x1MEI1RFx1MEI1Ri1cdTBCNjNcdTBCNjYtXHUwQjZGXHUwQjcxXHUwQjgyXHUw
QjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUw
QjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBC
QkUtXHUwQkMyXHUwQkM2LVx1MEJDOFx1MEJDQS1cdTBCQ0RcdTBCRDBcdTBCRDdcdTBCRTYtXHUw
QkVGXHUwQzAxLVx1MEMwM1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1
MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNELVx1MEM0NFx1MEM0Ni1cdTBDNDhcdTBDNEEt
XHUwQzREXHUwQzU1XHUwQzU2XHUwQzU4XHUwQzU5XHUwQzYwLVx1MEM2M1x1MEM2Ni1cdTBDNkZc
dTBDODJcdTBDODNcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEt
XHUwQ0IzXHUwQ0I1LVx1MENCOVx1MENCQy1cdTBDQzRcdTBDQzYtXHUwQ0M4XHUwQ0NBLVx1MEND
RFx1MENENVx1MENENlx1MENERVx1MENFMC1cdTBDRTNcdTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0Yy
XHUwRDAyXHUwRDAzXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNE
LVx1MEQ0NFx1MEQ0Ni1cdTBENDhcdTBENEEtXHUwRDRFXHUwRDU3XHUwRDYwLVx1MEQ2M1x1MEQ2
Ni1cdTBENkZcdTBEN0EtXHUwRDdGXHUwRDgyXHUwRDgzXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBE
QjFcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MERDQVx1MERDRi1cdTBERDRcdTBE
RDZcdTBERDgtXHUwRERGXHUwREYyXHUwREYzXHUwRTAxLVx1MEUzQVx1MEU0MC1cdTBFNEVcdTBF
NTAtXHUwRTU5XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0
LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFC
XHUwRUFELVx1MEVCOVx1MEVCQi1cdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XHUwRUM4LVx1MEVD
RFx1MEVEMC1cdTBFRDlcdTBFREMtXHUwRURGXHUwRjAwXHUwRjE4XHUwRjE5XHUwRjIwLVx1MEYy
OVx1MEYzNVx1MEYzN1x1MEYzOVx1MEYzRS1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjcxLVx1MEY4
NFx1MEY4Ni1cdTBGOTdcdTBGOTktXHUwRkJDXHUwRkM2XHUxMDAwLVx1MTA0OVx1MTA1MC1cdTEw
OURcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEy
NEEtXHUxMjREXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUx
MjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1
MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgt
XHUxMzVBXHUxMzVELVx1MTM1Rlx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2
Q1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTZFRS1cdTE2RjBcdTE3
MDAtXHUxNzBDXHUxNzBFLVx1MTcxNFx1MTcyMC1cdTE3MzRcdTE3NDAtXHUxNzUzXHUxNzYwLVx1
MTc2Q1x1MTc2RS1cdTE3NzBcdTE3NzJcdTE3NzNcdTE3ODAtXHUxN0QzXHUxN0Q3XHUxN0RDXHUx
N0REXHUxN0UwLVx1MTdFOVx1MTgwQi1cdTE4MERcdTE4MTAtXHUxODE5XHUxODIwLVx1MTg3N1x1
MTg4MC1cdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ1x1MTkyMC1cdTE5MkJcdTE5MzAt
XHUxOTNCXHUxOTQ2LVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUIwLVx1MTlD
OVx1MTlEMC1cdTE5RDlcdTFBMDAtXHUxQTFCXHUxQTIwLVx1MUE1RVx1MUE2MC1cdTFBN0NcdTFB
N0YtXHUxQTg5XHUxQTkwLVx1MUE5OVx1MUFBN1x1MUIwMC1cdTFCNEJcdTFCNTAtXHUxQjU5XHUx
QjZCLVx1MUI3M1x1MUI4MC1cdTFCRjNcdTFDMDAtXHUxQzM3XHUxQzQwLVx1MUM0OVx1MUM0RC1c
dTFDN0RcdTFDRDAtXHUxQ0QyXHUxQ0Q0LVx1MUNGNlx1MUQwMC1cdTFERTZcdTFERkMtXHUxRjE1
XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1
OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZC
RVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM1x1MUZENi1cdTFGREJcdTFG
RTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwMENcdTIwMERcdTIwM0ZcdTIw
NDBcdTIwNTRcdTIwNzFcdTIwN0ZcdTIwOTAtXHUyMDlDXHUyMEQwLVx1MjBEQ1x1MjBFMVx1MjBF
NS1cdTIwRjBcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEy
NFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0
NS1cdTIxNDlcdTIxNEVcdTIxNjAtXHUyMTg4XHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJD
NjAtXHUyQ0U0XHUyQ0VCLVx1MkNGM1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUy
RDY3XHUyRDZGXHUyRDdGLVx1MkQ5Nlx1MkRBMC1cdTJEQTZcdTJEQTgtXHUyREFFXHUyREIwLVx1
MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZc
dTJERDgtXHUyRERFXHUyREUwLVx1MkRGRlx1MkUyRlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDJG
XHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0NcdTMwNDEtXHUzMDk2XHUzMDk5XHUzMDlBXHUzMDlE
LVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRFx1MzEzMS1cdTMx
OEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXHVB
MDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYyQlx1QTY0MC1c
dUE2NkZcdUE2NzQtXHVBNjdEXHVBNjdGLVx1QTY5N1x1QTY5Ri1cdUE2RjFcdUE3MTctXHVBNzFG
XHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdG
OC1cdUE4MjdcdUE4NDAtXHVBODczXHVBODgwLVx1QThDNFx1QThEMC1cdUE4RDlcdUE4RTAtXHVB
OEY3XHVBOEZCXHVBOTAwLVx1QTkyRFx1QTkzMC1cdUE5NTNcdUE5NjAtXHVBOTdDXHVBOTgwLVx1
QTlDMFx1QTlDRi1cdUE5RDlcdUFBMDAtXHVBQTM2XHVBQTQwLVx1QUE0RFx1QUE1MC1cdUFBNTlc
dUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdCXHVBQTgwLVx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAt
XHVBQUVGXHVBQUYyLVx1QUFGNlx1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIx
Nlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXHVBQkMwLVx1QUJFQVx1QUJFQ1x1QUJFRFx1QUJG
MC1cdUFCRjlcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVG
QTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFELVx1RkIyOFx1
RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVG
QjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1c
dUZERkJcdUZFMDAtXHVGRTBGXHVGRTIwLVx1RkUyNlx1RkUzM1x1RkUzNFx1RkU0RC1cdUZFNEZc
dUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ1x1RkYxMC1cdUZGMTlcdUZGMjEtXHVGRjNBXHVGRjNG
XHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZE
Mi1cdUZGRDdcdUZGREEtXHVGRkRDXScpCi0gICAgfTsKLQotICAgIC8vIEVuc3VyZSB0aGUgY29u
ZGl0aW9uIGlzIHRydWUsIG90aGVyd2lzZSB0aHJvdyBhbiBlcnJvci4KLSAgICAvLyBUaGlzIGlz
IG9ubHkgdG8gaGF2ZSBhIGJldHRlciBjb250cmFjdCBzZW1hbnRpYywgaS5lLiBhbm90aGVyIHNh
ZmV0eSBuZXQKLSAgICAvLyB0byBjYXRjaCBhIGxvZ2ljIGVycm9yLiBUaGUgY29uZGl0aW9uIHNo
YWxsIGJlIGZ1bGZpbGxlZCBpbiBub3JtYWwgY2FzZS4KLSAgICAvLyBEbyBOT1QgdXNlIHRoaXMg
dG8gZW5mb3JjZSBhIGNlcnRhaW4gY29uZGl0aW9uIG9uIGFueSB1c2VyIGlucHV0LgotCi0gICAg
ZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnZSkgewotICAgICAgICAvKiBpc3RhbmJ1
bCBpZ25vcmUgaWYgKi8KLSAgICAgICAgaWYgKCFjb25kaXRpb24pIHsKLSAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcignQVNTRVJUOiAnICsgbWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChjaCkgewotICAgICAgICByZXR1cm4gKGNoID49
IDQ4ICYmIGNoIDw9IDU3KTsgICAvLyAwLi45Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNIZXhE
aWdpdChjaCkgewotICAgICAgICByZXR1cm4gJzAxMjM0NTY3ODlhYmNkZWZBQkNERUYnLmluZGV4
T2YoY2gpID49IDA7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNPY3RhbERpZ2l0KGNoKSB7Ci0g
ICAgICAgIHJldHVybiAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpID49IDA7Ci0gICAgfQotCi0KLSAg
ICAvLyA3LjIgV2hpdGUgU3BhY2UKLQotICAgIGZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjaCkgewot
ICAgICAgICByZXR1cm4gKGNoID09PSAweDIwKSB8fCAoY2ggPT09IDB4MDkpIHx8IChjaCA9PT0g
MHgwQikgfHwgKGNoID09PSAweDBDKSB8fCAoY2ggPT09IDB4QTApIHx8Ci0gICAgICAgICAgICAo
Y2ggPj0gMHgxNjgwICYmIFsweDE2ODAsIDB4MTgwRSwgMHgyMDAwLCAweDIwMDEsIDB4MjAwMiwg
MHgyMDAzLCAweDIwMDQsIDB4MjAwNSwgMHgyMDA2LCAweDIwMDcsIDB4MjAwOCwgMHgyMDA5LCAw
eDIwMEEsIDB4MjAyRiwgMHgyMDVGLCAweDMwMDAsIDB4RkVGRl0uaW5kZXhPZihjaCkgPj0gMCk7
Ci0gICAgfQotCi0gICAgLy8gNy4zIExpbmUgVGVybWluYXRvcnMKLQotICAgIGZ1bmN0aW9uIGlz
TGluZVRlcm1pbmF0b3IoY2gpIHsKLSAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgwQSkgfHwgKGNo
ID09PSAweDBEKSB8fCAoY2ggPT09IDB4MjAyOCkgfHwgKGNoID09PSAweDIwMjkpOwotICAgIH0K
LQotICAgIC8vIDcuNiBJZGVudGlmaWVyIE5hbWVzIGFuZCBJZGVudGlmaWVycwotCi0gICAgZnVu
Y3Rpb24gaXNJZGVudGlmaWVyU3RhcnQoY2gpIHsKLSAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgy
NCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSkK
LSAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4u
WgotICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBh
Li56Ci0gICAgICAgICAgICAoY2ggPT09IDB4NUMpIHx8ICAgICAgICAgICAgICAgICAgICAgIC8v
IFwgKGJhY2tzbGFzaCkKLSAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNj
aWlJZGVudGlmaWVyU3RhcnQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkpOwotICAgIH0K
LQotICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllclBhcnQoY2gpIHsKLSAgICAgICAgcmV0dXJuIChj
aCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5k
ZXJzY29yZSkKLSAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAg
ICAgLy8gQS4uWgotICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAg
ICAgICAvLyBhLi56Ci0gICAgICAgICAgICAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB8fCAg
ICAgICAgIC8vIDAuLjkKLSAgICAgICAgICAgIChjaCA9PT0gMHg1QykgfHwgICAgICAgICAgICAg
ICAgICAgICAgLy8gXCAoYmFja3NsYXNoKQotICAgICAgICAgICAgKChjaCA+PSAweDgwKSAmJiBS
ZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJQYXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkp
KTsKLSAgICB9Ci0KLSAgICAvLyA3LjYuMS4yIEZ1dHVyZSBSZXNlcnZlZCBXb3JkcwotCi0gICAg
ZnVuY3Rpb24gaXNGdXR1cmVSZXNlcnZlZFdvcmQoaWQpIHsKLSAgICAgICAgc3dpdGNoIChpZCkg
ewotICAgICAgICBjYXNlICdjbGFzcyc6Ci0gICAgICAgIGNhc2UgJ2VudW0nOgotICAgICAgICBj
YXNlICdleHBvcnQnOgotICAgICAgICBjYXNlICdleHRlbmRzJzoKLSAgICAgICAgY2FzZSAnaW1w
b3J0JzoKLSAgICAgICAgY2FzZSAnc3VwZXInOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoaWQpIHsKLSAgICAg
ICAgc3dpdGNoIChpZCkgewotICAgICAgICBjYXNlICdpbXBsZW1lbnRzJzoKLSAgICAgICAgY2Fz
ZSAnaW50ZXJmYWNlJzoKLSAgICAgICAgY2FzZSAncGFja2FnZSc6Ci0gICAgICAgIGNhc2UgJ3By
aXZhdGUnOgotICAgICAgICBjYXNlICdwcm90ZWN0ZWQnOgotICAgICAgICBjYXNlICdwdWJsaWMn
OgotICAgICAgICBjYXNlICdzdGF0aWMnOgotICAgICAgICBjYXNlICd5aWVsZCc6Ci0gICAgICAg
IGNhc2UgJ2xldCc6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0
aW9uIGlzUmVzdHJpY3RlZFdvcmQoaWQpIHsKLSAgICAgICAgcmV0dXJuIGlkID09PSAnZXZhbCcg
fHwgaWQgPT09ICdhcmd1bWVudHMnOwotICAgIH0KLQotICAgIC8vIDcuNi4xLjEgS2V5d29yZHMK
LQotICAgIGZ1bmN0aW9uIGlzS2V5d29yZChpZCkgewotICAgICAgICBpZiAoc3RyaWN0ICYmIGlz
U3RyaWN0TW9kZVJlc2VydmVkV29yZChpZCkpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gJ2NvbnN0JyBpcyBzcGVjaWFsaXplZCBhcyBLZXl3b3Jk
IGluIFY4LgotICAgICAgICAvLyAneWllbGQnIGFuZCAnbGV0JyBhcmUgZm9yIGNvbXBhdGlibGl0
eSB3aXRoIFNwaWRlck1vbmtleSBhbmQgRVMubmV4dC4KLSAgICAgICAgLy8gU29tZSBvdGhlcnMg
YXJlIGZyb20gZnV0dXJlIHJlc2VydmVkIHdvcmRzLgotCi0gICAgICAgIHN3aXRjaCAoaWQubGVu
Z3RoKSB7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdpZicp
IHx8IChpZCA9PT0gJ2luJykgfHwgKGlkID09PSAnZG8nKTsKLSAgICAgICAgY2FzZSAzOgotICAg
ICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3ZhcicpIHx8IChpZCA9PT0gJ2ZvcicpIHx8IChpZCA9
PT0gJ25ldycpIHx8Ci0gICAgICAgICAgICAgICAgKGlkID09PSAndHJ5JykgfHwgKGlkID09PSAn
bGV0Jyk7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd0aGlz
JykgfHwgKGlkID09PSAnZWxzZScpIHx8IChpZCA9PT0gJ2Nhc2UnKSB8fAotICAgICAgICAgICAg
ICAgIChpZCA9PT0gJ3ZvaWQnKSB8fCAoaWQgPT09ICd3aXRoJykgfHwgKGlkID09PSAnZW51bScp
OwotICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnd2hpbGUnKSB8
fCAoaWQgPT09ICdicmVhaycpIHx8IChpZCA9PT0gJ2NhdGNoJykgfHwKLSAgICAgICAgICAgICAg
ICAoaWQgPT09ICd0aHJvdycpIHx8IChpZCA9PT0gJ2NvbnN0JykgfHwgKGlkID09PSAneWllbGQn
KSB8fAotICAgICAgICAgICAgICAgIChpZCA9PT0gJ2NsYXNzJykgfHwgKGlkID09PSAnc3VwZXIn
KTsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3JldHVybicp
IHx8IChpZCA9PT0gJ3R5cGVvZicpIHx8IChpZCA9PT0gJ2RlbGV0ZScpIHx8Ci0gICAgICAgICAg
ICAgICAgKGlkID09PSAnc3dpdGNoJykgfHwgKGlkID09PSAnZXhwb3J0JykgfHwgKGlkID09PSAn
aW1wb3J0Jyk7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdk
ZWZhdWx0JykgfHwgKGlkID09PSAnZmluYWxseScpIHx8IChpZCA9PT0gJ2V4dGVuZHMnKTsKLSAg
ICAgICAgY2FzZSA4OgotICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2Z1bmN0aW9uJykgfHwg
KGlkID09PSAnY29udGludWUnKSB8fCAoaWQgPT09ICdkZWJ1Z2dlcicpOwotICAgICAgICBjYXNl
IDEwOgotICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2luc3RhbmNlb2YnKTsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIDcuNCBDb21tZW50cwotCi0gICAgZnVuY3Rpb24gYWRkQ29tbWVudCh0eXBlLCB2YWx1
ZSwgc3RhcnQsIGVuZCwgbG9jKSB7Ci0gICAgICAgIHZhciBjb21tZW50LCBhdHRhY2hlcjsKLQot
ICAgICAgICBhc3NlcnQodHlwZW9mIHN0YXJ0ID09PSAnbnVtYmVyJywgJ0NvbW1lbnQgbXVzdCBo
YXZlIHZhbGlkIHBvc2l0aW9uJyk7Ci0KLSAgICAgICAgLy8gQmVjYXVzZSB0aGUgd2F5IHRoZSBh
Y3R1YWwgdG9rZW4gaXMgc2Nhbm5lZCwgb2Z0ZW4gdGhlIGNvbW1lbnRzCi0gICAgICAgIC8vIChp
ZiBhbnkpIGFyZSBza2lwcGVkIHR3aWNlIGR1cmluZyB0aGUgbGV4aWNhbCBhbmFseXNpcy4KLSAg
ICAgICAgLy8gVGh1cywgd2UgbmVlZCB0byBza2lwIGFkZGluZyBhIGNvbW1lbnQgaWYgdGhlIGNv
bW1lbnQgYXJyYXkgYWxyZWFkeQotICAgICAgICAvLyBoYW5kbGVkIGl0LgotICAgICAgICBpZiAo
c3RhdGUubGFzdENvbW1lbnRTdGFydCA+PSBzdGFydCkgewotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIHN0YXRlLmxhc3RDb21tZW50U3RhcnQgPSBzdGFydDsKLQotICAg
ICAgICBjb21tZW50ID0gewotICAgICAgICAgICAgdHlwZTogdHlwZSwKLSAgICAgICAgICAgIHZh
bHVlOiB2YWx1ZQotICAgICAgICB9OwotICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHsKLSAgICAg
ICAgICAgIGNvbW1lbnQucmFuZ2UgPSBbc3RhcnQsIGVuZF07Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGV4dHJhLmxvYykgewotICAgICAgICAgICAgY29tbWVudC5sb2MgPSBsb2M7Ci0gICAgICAg
IH0KLSAgICAgICAgZXh0cmEuY29tbWVudHMucHVzaChjb21tZW50KTsKLSAgICAgICAgaWYgKGV4
dHJhLmF0dGFjaENvbW1lbnQpIHsKLSAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cy5w
dXNoKGNvbW1lbnQpOwotICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cy5wdXNoKGNv
bW1lbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2tpcFNpbmdsZUxpbmVD
b21tZW50KG9mZnNldCkgewotICAgICAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7Ci0K
LSAgICAgICAgc3RhcnQgPSBpbmRleCAtIG9mZnNldDsKLSAgICAgICAgbG9jID0gewotICAgICAg
ICAgICAgc3RhcnQ6IHsKLSAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAotICAgICAg
ICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSBvZmZzZXQKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfTsKLQotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAg
ICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwotICAgICAgICAgICAgKytpbmRl
eDsKLSAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgewotICAgICAgICAgICAg
ICAgIGlmIChleHRyYS5jb21tZW50cykgewotICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0g
c291cmNlLnNsaWNlKHN0YXJ0ICsgb2Zmc2V0LCBpbmRleCAtIDEpOwotICAgICAgICAgICAgICAg
ICAgICBsb2MuZW5kID0gewotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAx
Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIGFkZENvbW1lbnQo
J0xpbmUnLCBjb21tZW50LCBzdGFydCwgaW5kZXggLSAxLCBsb2MpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDEzICYmIHNvdXJjZS5jaGFyQ29kZUF0KGlu
ZGV4KSA9PT0gMTApIHsKLSAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOwotICAgICAgICAgICAgICAgIGxp
bmVTdGFydCA9IGluZGV4OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChleHRyYS5jb21tZW50cykgewotICAgICAgICAgICAg
Y29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIG9mZnNldCwgaW5kZXgpOwotICAgICAgICAg
ICAgbG9jLmVuZCA9IHsKLSAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAotICAgICAg
ICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICBhZGRDb21tZW50KCdMaW5lJywgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2tpcE11bHRpTGluZUNvbW1lbnQoKSB7
Ci0gICAgICAgIHZhciBzdGFydCwgbG9jLCBjaCwgY29tbWVudDsKLQotICAgICAgICBpZiAoZXh0
cmEuY29tbWVudHMpIHsKLSAgICAgICAgICAgIHN0YXJ0ID0gaW5kZXggLSAyOwotICAgICAgICAg
ICAgbG9jID0gewotICAgICAgICAgICAgICAgIHN0YXJ0OiB7Ci0gICAgICAgICAgICAgICAgICAg
IGxpbmU6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBs
aW5lU3RhcnQgLSAyCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLSAgICAgICAg
fQotCi0gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgY2ggPSBz
b3VyY2UuY2hhckNvZGVBdChpbmRleCk7Ci0gICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRv
cihjaCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQgJiYgc291cmNlLmNoYXJD
b2RlQXQoaW5kZXggKyAxKSA9PT0gMHgwQSkgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7Ci0gICAg
ICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsK
LSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7
Ci0gICAgICAgICAgICAgICAgLy8gQmxvY2sgY29tbWVudCBlbmRzIHdpdGggJyovJy4KLSAgICAg
ICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgyRikgewot
ICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgICAgICArK2luZGV4
OwotICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyAyLCBpbmRleCAtIDIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhZGRDb21tZW50KCdCbG9jaycsIGNvbW1lbnQsIHN0YXJ0
LCBpbmRleCwgbG9jKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVj
dGVkVG9rZW4sICdJTExFR0FMJyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2tpcENvbW1lbnQo
KSB7Ci0gICAgICAgIHZhciBjaCwgc3RhcnQ7Ci0KLSAgICAgICAgc3RhcnQgPSAoaW5kZXggPT09
IDApOwotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGNoID0g
c291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwotCi0gICAgICAgICAgICBpZiAoaXNXaGl0ZVNwYWNl
KGNoKSkgewotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7Ci0gICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAg
ICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09
PSAweDBBKSB7Ci0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICBsaW5lU3Rh
cnQgPSBpbmRleDsKLSAgICAgICAgICAgICAgICBzdGFydCA9IHRydWU7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKGNoID09PSAweDJGKSB7IC8vIFUrMDAyRiBpcyAnLycKLSAgICAgICAgICAgICAg
ICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYg
KGNoID09PSAweDJGKSB7Ci0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAg
ICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29t
bWVudCgyKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEpIHsgIC8vIFUrMDAyQSBpcyAnKicKLSAgICAgICAg
ICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAg
ICAgICAgICAgICAgICAgc2tpcE11bHRpTGluZUNvbW1lbnQoKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ICYmIGNoID09PSAweDJEKSB7IC8vIFUrMDAyRCBp
cyAnLScKLSAgICAgICAgICAgICAgICAvLyBVKzAwM0UgaXMgJz4nCi0gICAgICAgICAgICAgICAg
aWYgKChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDJEKSAmJiAoc291cmNlLmNo
YXJDb2RlQXQoaW5kZXggKyAyKSA9PT0gMHgzRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
Jy0tPicgaXMgYSBzaW5nbGUtbGluZSBjb21tZW50Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4
ICs9IDM7Ci0gICAgICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCgzKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDNDKSB7IC8vIFUr
MDAzQyBpcyAnPCcKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlLnNsaWNlKGluZGV4ICsgMSwg
aW5kZXggKyA0KSA9PT0gJyEtLScpIHsKLSAgICAgICAgICAgICAgICAgICAgKytpbmRleDsgLy8g
YDxgCi0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAhYAotICAgICAgICAgICAgICAg
ICAgICArK2luZGV4OyAvLyBgLWAKLSAgICAgICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYC1g
Ci0gICAgICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCg0KTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2NhbkhleEVzY2Fw
ZShwcmVmaXgpIHsKLSAgICAgICAgdmFyIGksIGxlbiwgY2gsIGNvZGUgPSAwOwotCi0gICAgICAg
IGxlbiA9IChwcmVmaXggPT09ICd1JykgPyA0IDogMjsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8
IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaXNIZXhEaWdp
dChzb3VyY2VbaW5kZXhdKSkgewotICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4Kytd
OwotICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyAnMDEyMzQ1Njc4OWFiY2RlZicu
aW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICcnOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGdl
dEVzY2FwZWRJZGVudGlmaWVyKCkgewotICAgICAgICB2YXIgY2gsIGlkOwotCi0gICAgICAgIGNo
ID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgrKyk7Ci0gICAgICAgIGlkID0gU3RyaW5nLmZyb21D
aGFyQ29kZShjaCk7Ci0KLSAgICAgICAgLy8gJ1x1JyAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMg
YW4gZXNjYXBlZCBjaGFyYWN0ZXIuCi0gICAgICAgIGlmIChjaCA9PT0gMHg1QykgewotICAgICAg
ICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkgewotICAgICAgICAg
ICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwn
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICBjaCA9
IHNjYW5IZXhFc2NhcGUoJ3UnKTsKLSAgICAgICAgICAgIGlmICghY2ggfHwgY2ggPT09ICdcXCcg
fHwgIWlzSWRlbnRpZmllclN0YXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7Ci0gICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWQgPSBjaDsKLSAgICAgICAgfQotCi0gICAgICAg
IHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNv
ZGVBdChpbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWlzSWRlbnRpZmllclBhcnQoY2gpKSB7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICArK2luZGV4
OwotICAgICAgICAgICAgaWQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7Ci0KLSAgICAgICAg
ICAgIC8vICdcdScgKFUrMDA1QywgVSswMDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVy
LgotICAgICAgICAgICAgaWYgKGNoID09PSAweDVDKSB7Ci0gICAgICAgICAgICAgICAgaWQgPSBp
ZC5zdWJzdHIoMCwgaWQubGVuZ3RoIC0gMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5j
aGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgY2ggPSBz
Y2FuSGV4RXNjYXBlKCd1Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xc
JyB8fCAhaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FM
Jyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlkICs9IGNoOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGlkOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIGdldElkZW50aWZpZXIoKSB7Ci0gICAgICAgIHZhciBzdGFydCwgY2g7Ci0KLSAgICAg
ICAgc3RhcnQgPSBpbmRleCsrOwotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAg
ICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwotICAgICAgICAgICAgaWYg
KGNoID09PSAweDVDKSB7Ci0gICAgICAgICAgICAgICAgLy8gQmxhY2tzbGFzaCAoVSswMDVDKSBt
YXJrcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS4KLSAgICAgICAgICAgICAgICBpbmRleCA9IHN0
YXJ0OwotICAgICAgICAgICAgICAgIHJldHVybiBnZXRFc2NhcGVkSWRlbnRpZmllcigpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclBhcnQoY2gpKSB7Ci0gICAg
ICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc291
cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2NhbklkZW50
aWZpZXIoKSB7Ci0gICAgICAgIHZhciBzdGFydCwgaWQsIHR5cGU7Ci0KLSAgICAgICAgc3RhcnQg
PSBpbmRleDsKLQotICAgICAgICAvLyBCYWNrc2xhc2ggKFUrMDA1Qykgc3RhcnRzIGFuIGVzY2Fw
ZWQgY2hhcmFjdGVyLgotICAgICAgICBpZCA9IChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09
IDB4NUMpID8gZ2V0RXNjYXBlZElkZW50aWZpZXIoKSA6IGdldElkZW50aWZpZXIoKTsKLQotICAg
ICAgICAvLyBUaGVyZSBpcyBubyBrZXl3b3JkIG9yIGxpdGVyYWwgd2l0aCBvbmx5IG9uZSBjaGFy
YWN0ZXIuCi0gICAgICAgIC8vIFRodXMsIGl0IG11c3QgYmUgYW4gaWRlbnRpZmllci4KLSAgICAg
ICAgaWYgKGlkLmxlbmd0aCA9PT0gMSkgewotICAgICAgICAgICAgdHlwZSA9IFRva2VuLklkZW50
aWZpZXI7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNLZXl3b3JkKGlkKSkgewotICAgICAgICAgICAg
dHlwZSA9IFRva2VuLktleXdvcmQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoaWQgPT09ICdudWxsJykg
ewotICAgICAgICAgICAgdHlwZSA9IFRva2VuLk51bGxMaXRlcmFsOwotICAgICAgICB9IGVsc2Ug
aWYgKGlkID09PSAndHJ1ZScgfHwgaWQgPT09ICdmYWxzZScpIHsKLSAgICAgICAgICAgIHR5cGUg
PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHR5
cGUgPSBUb2tlbi5JZGVudGlmaWVyOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHsKLSAg
ICAgICAgICAgIHR5cGU6IHR5cGUsCi0gICAgICAgICAgICB2YWx1ZTogaWQsCi0gICAgICAgICAg
ICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3Rh
cnQsCi0gICAgICAgICAgICBzdGFydDogc3RhcnQsCi0gICAgICAgICAgICBlbmQ6IGluZGV4Ci0g
ICAgICAgIH07Ci0gICAgfQotCi0KLSAgICAvLyA3LjcgUHVuY3R1YXRvcnMKLQotICAgIGZ1bmN0
aW9uIHNjYW5QdW5jdHVhdG9yKCkgewotICAgICAgICB2YXIgc3RhcnQgPSBpbmRleCwKLSAgICAg
ICAgICAgIGNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCksCi0gICAgICAgICAgICBjb2Rl
MiwKLSAgICAgICAgICAgIGNoMSA9IHNvdXJjZVtpbmRleF0sCi0gICAgICAgICAgICBjaDIsCi0g
ICAgICAgICAgICBjaDMsCi0gICAgICAgICAgICBjaDQ7Ci0KLSAgICAgICAgc3dpdGNoIChjb2Rl
KSB7Ci0KLSAgICAgICAgLy8gQ2hlY2sgZm9yIG1vc3QgY29tbW9uIHNpbmdsZS1jaGFyYWN0ZXIg
cHVuY3R1YXRvcnMuCi0gICAgICAgIGNhc2UgMHgyRTogIC8vIC4gZG90Ci0gICAgICAgIGNhc2Ug
MHgyODogIC8vICggb3BlbiBicmFja2V0Ci0gICAgICAgIGNhc2UgMHgyOTogIC8vICkgY2xvc2Ug
YnJhY2tldAotICAgICAgICBjYXNlIDB4M0I6ICAvLyA7IHNlbWljb2xvbgotICAgICAgICBjYXNl
IDB4MkM6ICAvLyAsIGNvbW1hCi0gICAgICAgIGNhc2UgMHg3QjogIC8vIHsgb3BlbiBjdXJseSBi
cmFjZQotICAgICAgICBjYXNlIDB4N0Q6ICAvLyB9IGNsb3NlIGN1cmx5IGJyYWNlCi0gICAgICAg
IGNhc2UgMHg1QjogIC8vIFsKLSAgICAgICAgY2FzZSAweDVEOiAgLy8gXQotICAgICAgICBjYXNl
IDB4M0E6ICAvLyA6Ci0gICAgICAgIGNhc2UgMHgzRjogIC8vID8KLSAgICAgICAgY2FzZSAweDdF
OiAgLy8gfgotICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgIGlmIChleHRyYS50b2tl
bml6ZSkgewotICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAweDI4KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0gZXh0cmEudG9rZW5zLmxlbmd0aDsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDB4N0IpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZXh0cmEub3BlbkN1cmx5VG9rZW4gPSBleHRyYS50b2tlbnMubGVuZ3RoOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAg
ICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKLSAgICAgICAgICAgICAgICB2YWx1ZTog
U3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSwKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBs
aW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAg
ICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAgICAgICBlbmQ6IGluZGV4Ci0gICAg
ICAgICAgICB9OwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBjb2RlMiA9IHNvdXJj
ZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7Ci0KLSAgICAgICAgICAgIC8vICc9JyAoVSswMDNEKSBt
YXJrcyBhbiBhc3NpZ25tZW50IG9yIGNvbXBhcmlzb24gb3BlcmF0b3IuCi0gICAgICAgICAgICBp
ZiAoY29kZTIgPT09IDB4M0QpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKLSAg
ICAgICAgICAgICAgICBjYXNlIDB4MkI6ICAvLyArCi0gICAgICAgICAgICAgICAgY2FzZSAweDJE
OiAgLy8gLQotICAgICAgICAgICAgICAgIGNhc2UgMHgyRjogIC8vIC8KLSAgICAgICAgICAgICAg
ICBjYXNlIDB4M0M6ICAvLyA8Ci0gICAgICAgICAgICAgICAgY2FzZSAweDNFOiAgLy8gPgotICAg
ICAgICAgICAgICAgIGNhc2UgMHg1RTogIC8vIF4KLSAgICAgICAgICAgICAgICBjYXNlIDB4N0M6
ICAvLyB8Ci0gICAgICAgICAgICAgICAgY2FzZSAweDI1OiAgLy8gJQotICAgICAgICAgICAgICAg
IGNhc2UgMHgyNjogIC8vICYKLSAgICAgICAgICAgICAgICBjYXNlIDB4MkE6ICAvLyAqCi0gICAg
ICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkgKyBTdHJp
bmcuZnJvbUNoYXJDb2RlKGNvZGUyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1i
ZXI6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVT
dGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVuZDogaW5kZXgKLSAgICAgICAgICAgICAgICAgICAgfTsKLQotICAgICAg
ICAgICAgICAgIGNhc2UgMHgyMTogLy8gIQotICAgICAgICAgICAgICAgIGNhc2UgMHgzRDogLy8g
PQotICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyOwotCi0gICAgICAgICAgICAgICAgICAg
IC8vICE9PSBhbmQgPT09Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVB
dChpbmRleCkgPT09IDB4M0QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCi0gICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZTogc291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGFy
dDogc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGluZGV4Ci0gICAgICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gNC1jaGFyYWN0ZXIgcHVuY3R1YXRvcjogPj4+PQotCi0gICAgICAgIGNo
NCA9IHNvdXJjZS5zdWJzdHIoaW5kZXgsIDQpOwotCi0gICAgICAgIGlmIChjaDQgPT09ICc+Pj49
JykgewotICAgICAgICAgICAgaW5kZXggKz0gNDsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKLSAgICAgICAgICAgICAgICB2YWx1
ZTogY2g0LAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAgICAg
ICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAgICAgICAgc3RhcnQ6IHN0
YXJ0LAotICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKLSAgICAgICAgICAgIH07Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyAzLWNoYXJhY3RlciBwdW5jdHVhdG9yczogPT09ICE9PSA+Pj4gPDw9
ID4+PQotCi0gICAgICAgIGNoMyA9IGNoNC5zdWJzdHIoMCwgMyk7Ci0KLSAgICAgICAgaWYgKGNo
MyA9PT0gJz4+PicgfHwgY2gzID09PSAnPDw9JyB8fCBjaDMgPT09ICc+Pj0nKSB7Ci0gICAgICAg
ICAgICBpbmRleCArPSAzOwotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0
eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAotICAgICAgICAgICAgICAgIHZhbHVlOiBjaDMsCi0gICAg
ICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBsaW5l
U3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCi0gICAgICAg
ICAgICAgICAgZW5kOiBpbmRleAotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIE90aGVyIDItY2hhcmFjdGVyIHB1bmN0dWF0b3JzOiArKyAtLSA8PCA+PiAmJiB8fAotICAg
ICAgICBjaDIgPSBjaDMuc3Vic3RyKDAsIDIpOwotCi0gICAgICAgIGlmICgoY2gxID09PSBjaDJb
MV0gJiYgKCcrLTw+JnwnLmluZGV4T2YoY2gxKSA+PSAwKSkgfHwgY2gyID09PSAnPT4nKSB7Ci0g
ICAgICAgICAgICBpbmRleCArPSAyOwotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAg
ICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAotICAgICAgICAgICAgICAgIHZhbHVlOiBjaDIs
Ci0gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKLSAgICAgICAgICAgICAg
ICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCi0g
ICAgICAgICAgICAgICAgZW5kOiBpbmRleAotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIDEtY2hhcmFjdGVyIHB1bmN0dWF0b3JzOiA8ID4gPSAhICsgLSAqICUgJiB8IF4g
LwotICAgICAgICBpZiAoJzw+PSErLSolJnxeLycuaW5kZXhPZihjaDEpID49IDApIHsKLSAgICAg
ICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5
cGU6IFRva2VuLlB1bmN0dWF0b3IsCi0gICAgICAgICAgICAgICAgdmFsdWU6IGNoMSwKLSAgICAg
ICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGxpbmVT
dGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAg
ICAgICAgICBlbmQ6IGluZGV4Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOwotICAg
IH0KLQotICAgIC8vIDcuOC4zIE51bWVyaWMgTGl0ZXJhbHMKLQotICAgIGZ1bmN0aW9uIHNjYW5I
ZXhMaXRlcmFsKHN0YXJ0KSB7Ci0gICAgICAgIHZhciBudW1iZXIgPSAnJzsKLQotICAgICAgICB3
aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGlmICghaXNIZXhEaWdpdChzb3Vy
Y2VbaW5kZXhdKSkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChudW1iZXIubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBN
ZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgewotICAg
ICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdB
TCcpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHR5cGU6IFRv
a2VuLk51bWVyaWNMaXRlcmFsLAotICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KCcweCcgKyBu
dW1iZXIsIDE2KSwKLSAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAgICAg
ICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAg
ICAgICAgICAgIGVuZDogaW5kZXgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBz
Y2FuT2N0YWxMaXRlcmFsKHN0YXJ0KSB7Ci0gICAgICAgIHZhciBudW1iZXIgPSAnMCcgKyBzb3Vy
Y2VbaW5kZXgrK107Ci0gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAg
ICAgaWYgKCFpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgr
K107Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNo
YXJDb2RlQXQoaW5kZXgpKSB8fCBpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCkpKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9r
ZW4sICdJTExFR0FMJyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gewotICAgICAgICAg
ICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsCi0gICAgICAgICAgICB2YWx1ZTogcGFyc2VJ
bnQobnVtYmVyLCA4KSwKLSAgICAgICAgICAgIG9jdGFsOiB0cnVlLAotICAgICAgICAgICAgbGlu
ZU51bWJlcjogbGluZU51bWJlciwKLSAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAot
ICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAotICAgICAgICAgICAgZW5kOiBpbmRleAotICAgICAg
ICB9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNjYW5OdW1lcmljTGl0ZXJhbCgpIHsKLSAgICAg
ICAgdmFyIG51bWJlciwgc3RhcnQsIGNoOwotCi0gICAgICAgIGNoID0gc291cmNlW2luZGV4XTsK
LSAgICAgICAgYXNzZXJ0KGlzRGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpIHx8IChjaCA9
PT0gJy4nKSwKLSAgICAgICAgICAgICdOdW1lcmljIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEg
ZGVjaW1hbCBkaWdpdCBvciBhIGRlY2ltYWwgcG9pbnQnKTsKLQotICAgICAgICBzdGFydCA9IGlu
ZGV4OwotICAgICAgICBudW1iZXIgPSAnJzsKLSAgICAgICAgaWYgKGNoICE9PSAnLicpIHsKLSAg
ICAgICAgICAgIG51bWJlciA9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAgICAgICAgIGNoID0gc291
cmNlW2luZGV4XTsKLQotICAgICAgICAgICAgLy8gSGV4IG51bWJlciBzdGFydHMgd2l0aCAnMHgn
LgotICAgICAgICAgICAgLy8gT2N0YWwgbnVtYmVyIHN0YXJ0cyB3aXRoICcwJy4KLSAgICAgICAg
ICAgIGlmIChudW1iZXIgPT09ICcwJykgewotICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3gn
IHx8IGNoID09PSAnWCcpIHsKLSAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNjYW5PY3RhbExpdGVyYWwoc3RhcnQpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIC8vIGRlY2ltYWwgbnVtYmVyIHN0YXJ0cyB3aXRoICcwJyBz
dWNoIGFzICcwOScgaXMgaWxsZWdhbC4KLSAgICAgICAgICAgICAgICBpZiAoY2ggJiYgaXNEZWNp
bWFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dF
cnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgd2hpbGUgKGlzRGVjaW1hbERp
Z2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKLSAgICAgICAgICAgICAgICBudW1iZXIg
Kz0gc291cmNlW2luZGV4KytdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2ggPSBzb3Vy
Y2VbaW5kZXhdOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNoID09PSAnLicpIHsKLSAgICAg
ICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107Ci0gICAgICAgICAgICB3aGlsZSAoaXNE
ZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgewotICAgICAgICAgICAgICAg
IG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
aCA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY2ggPT09ICdlJyB8
fCBjaCA9PT0gJ0UnKSB7Ci0gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOwot
Ci0gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAgICAgICBpZiAoY2ggPT09
ICcrJyB8fCBjaCA9PT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtp
bmRleCsrXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChz
b3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGlzRGVj
aW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVu
ZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7
Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJ
TExFR0FMJyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgdHlw
ZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsCi0gICAgICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdChu
dW1iZXIpLAotICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKLSAgICAgICAgICAg
IGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAotICAgICAg
ICAgICAgZW5kOiBpbmRleAotICAgICAgICB9OwotICAgIH0KLQotICAgIC8vIDcuOC40IFN0cmlu
ZyBMaXRlcmFscwotCi0gICAgZnVuY3Rpb24gc2NhblN0cmluZ0xpdGVyYWwoKSB7Ci0gICAgICAg
IHZhciBzdHIgPSAnJywgcXVvdGUsIHN0YXJ0LCBjaCwgY29kZSwgdW5lc2NhcGVkLCByZXN0b3Jl
LCBvY3RhbCA9IGZhbHNlLCBzdGFydExpbmVOdW1iZXIsIHN0YXJ0TGluZVN0YXJ0OwotICAgICAg
ICBzdGFydExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICBzdGFydExpbmVTdGFydCA9
IGxpbmVTdGFydDsKLQotICAgICAgICBxdW90ZSA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAgIGFz
c2VydCgocXVvdGUgPT09ICdcJycgfHwgcXVvdGUgPT09ICciJyksCi0gICAgICAgICAgICAnU3Ry
aW5nIGxpdGVyYWwgbXVzdCBzdGFydHMgd2l0aCBhIHF1b3RlJyk7Ci0KLSAgICAgICAgc3RhcnQg
PSBpbmRleDsKLSAgICAgICAgKytpbmRleDsKLQotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5n
dGgpIHsKLSAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOwotCi0gICAgICAgICAgICBp
ZiAoY2ggPT09IHF1b3RlKSB7Ci0gICAgICAgICAgICAgICAgcXVvdGUgPSAnJzsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXCcpIHsKLSAg
ICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAgICAgICAgICAgICBpZiAo
IWNoIHx8ICFpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dG9yZSA9IGluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgdW5lc2NhcGVkID0gc2Nhbkhl
eEVzY2FwZShjaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2NhcGVkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHVuZXNjYXBlZDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgg
PSByZXN0b3JlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlICduJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSAnXG4nOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ3InOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdccic7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1x0JzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ciArPSAnXGInOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgICAgICAgICAgICAg
c3RyICs9ICdcZic7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSAndic6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1x4MEIn
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9ICcwMTIzNDU2NycuaW5kZXhPZihj
aCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBcMCBpcyBub3Qgb2N0YWwgZXNj
YXBlIHNlcXVlbmNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgIT09IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2N0YWwgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpbmRleCA8IGxlbmd0aCAmJiBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2N0YWwgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yoc291
cmNlW2luZGV4KytdKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIGRp
Z2l0cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0cwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB3aXRoIDAsIDEsIDIsIDMKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCcwMTIzJy5pbmRleE9mKGNoKSA+PSAwICYmCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGggJiYKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCAr
ICcwMTIzNDU2NycuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHIgKz0gY2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoID09PSAgJ1xyJyAmJiBzb3VyY2VbaW5kZXhdID09PSAnXG4nKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkg
ewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBzdHIgKz0gY2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAocXVvdGUgIT09ICcnKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5V
bmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
ewotICAgICAgICAgICAgdHlwZTogVG9rZW4uU3RyaW5nTGl0ZXJhbCwKLSAgICAgICAgICAgIHZh
bHVlOiBzdHIsCi0gICAgICAgICAgICBvY3RhbDogb2N0YWwsCi0gICAgICAgICAgICBzdGFydExp
bmVOdW1iZXI6IHN0YXJ0TGluZU51bWJlciwKLSAgICAgICAgICAgIHN0YXJ0TGluZVN0YXJ0OiBz
dGFydExpbmVTdGFydCwKLSAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAg
ICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwK
LSAgICAgICAgICAgIGVuZDogaW5kZXgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biB0ZXN0UmVnRXhwKHBhdHRlcm4sIGZsYWdzKSB7Ci0gICAgICAgIHZhciB2YWx1ZTsKLSAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgIHZhbHVlID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7
Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLkludmFsaWRSZWdFeHApOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBzY2FuUmVnRXhwQm9keSgpIHsKLSAgICAgICAgdmFyIGNoLCBz
dHIsIGNsYXNzTWFya2VyLCB0ZXJtaW5hdGVkLCBib2R5OwotCi0gICAgICAgIGNoID0gc291cmNl
W2luZGV4XTsKLSAgICAgICAgYXNzZXJ0KGNoID09PSAnLycsICdSZWd1bGFyIGV4cHJlc3Npb24g
bGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBzbGFzaCcpOwotICAgICAgICBzdHIgPSBzb3VyY2Vb
aW5kZXgrK107Ci0KLSAgICAgICAgY2xhc3NNYXJrZXIgPSBmYWxzZTsKLSAgICAgICAgdGVybWlu
YXRlZCA9IGZhbHNlOwotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAg
ICAgIGNoID0gc291cmNlW2luZGV4KytdOwotICAgICAgICAgICAgc3RyICs9IGNoOwotICAgICAg
ICAgICAgaWYgKGNoID09PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5k
ZXgrK107Ci0gICAgICAgICAgICAgICAgLy8gRUNNQS0yNjIgNy44LjUKLSAgICAgICAgICAgICAg
ICBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzdHIgKz0gY2g7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChjbGFzc01hcmtlcikgewotICAgICAgICAgICAgICAgIGlmIChj
aCA9PT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY2ggPT09ICcvJykgewotICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChj
aCA9PT0gJ1snKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsYXNzTWFya2VyID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
IXRlcm1pbmF0ZWQpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVy
bWluYXRlZFJlZ0V4cCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBFeGNsdWRlIGxlYWRpbmcg
YW5kIHRyYWlsaW5nIHNsYXNoLgotICAgICAgICBib2R5ID0gc3RyLnN1YnN0cigxLCBzdHIubGVu
Z3RoIC0gMik7Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICB2YWx1ZTogYm9keSwKLSAg
ICAgICAgICAgIGxpdGVyYWw6IHN0cgotICAgICAgICB9OwotICAgIH0KLQotICAgIGZ1bmN0aW9u
IHNjYW5SZWdFeHBGbGFncygpIHsKLSAgICAgICAgdmFyIGNoLCBzdHIsIGZsYWdzLCByZXN0b3Jl
OwotCi0gICAgICAgIHN0ciA9ICcnOwotICAgICAgICBmbGFncyA9ICcnOwotICAgICAgICB3aGls
ZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLSAg
ICAgICAgICAgIGlmICghaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkgewotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICArK2luZGV4
OwotICAgICAgICAgICAgaWYgKGNoID09PSAnXFwnICYmIGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAg
ICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOwotICAgICAgICAgICAgICAgIGlmIChjaCA9
PT0gJ3UnKSB7Ci0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlc3RvcmUgPSBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNj
YXBlKCd1Jyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZmxhZ3MgKz0gY2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHN0ciAr
PSAnXFx1JzsgcmVzdG9yZSA8IGluZGV4OyArK3Jlc3RvcmUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHIgKz0gc291cmNlW3Jlc3RvcmVdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXggPSByZXN0b3JlOwotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gJ3Un
OwotICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXHUnOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFwnOwotICAgICAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwn
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGZsYWdzICs9IGNoOwotICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICB2YWx1ZTogZmxh
Z3MsCi0gICAgICAgICAgICBsaXRlcmFsOiBzdHIKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiBzY2FuUmVnRXhwKCkgewotICAgICAgICB2YXIgc3RhcnQsIGJvZHksIGZsYWdzLCBw
YXR0ZXJuLCB2YWx1ZTsKLQotICAgICAgICBsb29rYWhlYWQgPSBudWxsOwotICAgICAgICBza2lw
Q29tbWVudCgpOwotICAgICAgICBzdGFydCA9IGluZGV4OwotCi0gICAgICAgIGJvZHkgPSBzY2Fu
UmVnRXhwQm9keSgpOwotICAgICAgICBmbGFncyA9IHNjYW5SZWdFeHBGbGFncygpOwotICAgICAg
ICB2YWx1ZSA9IHRlc3RSZWdFeHAoYm9keS52YWx1ZSwgZmxhZ3MudmFsdWUpOwotCi0gICAgICAg
IGlmIChleHRyYS50b2tlbml6ZSkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAg
ICAgICB0eXBlOiBUb2tlbi5SZWd1bGFyRXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICB2YWx1
ZTogdmFsdWUsCi0gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKLSAgICAg
ICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgICAgICBzdGFydDog
c3RhcnQsCi0gICAgICAgICAgICAgICAgZW5kOiBpbmRleAotICAgICAgICAgICAgfTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBsaXRlcmFsOiBib2R5LmxpdGVy
YWwgKyBmbGFncy5saXRlcmFsLAotICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAotICAgICAgICAg
ICAgc3RhcnQ6IHN0YXJ0LAotICAgICAgICAgICAgZW5kOiBpbmRleAotICAgICAgICB9OwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIGNvbGxlY3RSZWdleCgpIHsKLSAgICAgICAgdmFyIHBvcywgbG9j
LCByZWdleCwgdG9rZW47Ci0KLSAgICAgICAgc2tpcENvbW1lbnQoKTsKLQotICAgICAgICBwb3Mg
PSBpbmRleDsKLSAgICAgICAgbG9jID0gewotICAgICAgICAgICAgc3RhcnQ6IHsKLSAgICAgICAg
ICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXgg
LSBsaW5lU3RhcnQKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICByZWdleCA9
IHNjYW5SZWdFeHAoKTsKLSAgICAgICAgbG9jLmVuZCA9IHsKLSAgICAgICAgICAgIGxpbmU6IGxp
bmVOdW1iZXIsCi0gICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KLSAgICAgICAgaWYgKCFl
eHRyYS50b2tlbml6ZSkgewotICAgICAgICAgICAgLy8gUG9wIHRoZSBwcmV2aW91cyB0b2tlbiwg
d2hpY2ggaXMgbGlrZWx5ICcvJyBvciAnLz0nCi0gICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5z
Lmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9IGV4dHJhLnRva2Vuc1tleHRy
YS50b2tlbnMubGVuZ3RoIC0gMV07Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuLnJhbmdlWzBd
ID09PSBwb3MgJiYgdG9rZW4udHlwZSA9PT0gJ1B1bmN0dWF0b3InKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJy8nIHx8IHRva2VuLnZhbHVlID09PSAnLz0nKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tlbnMucG9wKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGV4dHJhLnRva2Vucy5wdXNoKHsKLSAgICAgICAgICAgICAgICB0eXBlOiAnUmVndWxhckV4
cHJlc3Npb24nLAotICAgICAgICAgICAgICAgIHZhbHVlOiByZWdleC5saXRlcmFsLAotICAgICAg
ICAgICAgICAgIHJhbmdlOiBbcG9zLCBpbmRleF0sCi0gICAgICAgICAgICAgICAgbG9jOiBsb2MK
LSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlZ2V4OwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllck5hbWUodG9rZW4pIHsKLSAgICAgICAgcmV0
dXJuIHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgfHwKLSAgICAgICAgICAgIHRva2Vu
LnR5cGUgPT09IFRva2VuLktleXdvcmQgfHwKLSAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRv
a2VuLkJvb2xlYW5MaXRlcmFsIHx8Ci0gICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5O
dWxsTGl0ZXJhbDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBhZHZhbmNlU2xhc2goKSB7Ci0gICAg
ICAgIHZhciBwcmV2VG9rZW4sCi0gICAgICAgICAgICBjaGVja1Rva2VuOwotICAgICAgICAvLyBV
c2luZyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobToKLSAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIu
Y29tL21vemlsbGEvc3dlZXQuanMvd2lraS9kZXNpZ24KLSAgICAgICAgcHJldlRva2VuID0gZXh0
cmEudG9rZW5zW2V4dHJhLnRva2Vucy5sZW5ndGggLSAxXTsKLSAgICAgICAgaWYgKCFwcmV2VG9r
ZW4pIHsKLSAgICAgICAgICAgIC8vIE5vdGhpbmcgYmVmb3JlIHRoYXQ6IGl0IGNhbm5vdCBiZSBh
IGRpdmlzaW9uLgotICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0gJ1B1bmN0dWF0b3InKSB7Ci0gICAgICAg
ICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSAnXScpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gc2NhblB1bmN0dWF0b3IoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwcmV2
VG9rZW4udmFsdWUgPT09ICcpJykgewotICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRy
YS50b2tlbnNbZXh0cmEub3BlblBhcmVuVG9rZW4gLSAxXTsKLSAgICAgICAgICAgICAgICBpZiAo
Y2hlY2tUb2tlbiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi50eXBlID09
PSAnS2V5d29yZCcgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIChjaGVja1Rva2VuLnZhbHVl
ID09PSAnaWYnIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9
PT0gJ3doaWxlJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUg
PT09ICdmb3InIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9
PT0gJ3dpdGgnKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRv
cigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0g
J30nKSB7Ci0gICAgICAgICAgICAgICAgLy8gRGl2aWRpbmcgYSBmdW5jdGlvbiBieSBhbnl0aGlu
ZyBtYWtlcyBsaXR0bGUgc2Vuc2UsCi0gICAgICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUgdG8g
Y2hlY2sgZm9yIHRoYXQuCi0gICAgICAgICAgICAgICAgaWYgKGV4dHJhLnRva2Vuc1tleHRyYS5v
cGVuQ3VybHlUb2tlbiAtIDNdICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tl
bnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSAzXS50eXBlID09PSAnS2V5d29yZCcpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gQW5vbnltb3VzIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgICAg
ICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghY2hlY2tUb2tlbikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tl
biAtIDRdICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tlbnNbZXh0cmEub3Bl
bkN1cmx5VG9rZW4gLSA0XS50eXBlID09PSAnS2V5d29yZCcpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gTmFtZWQgZnVuY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBl
eHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA1XTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjaGVja1Rva2VuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29s
bGVjdFJlZ2V4KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gY2hlY2tUb2tlbiBkZXRlcm1pbmVzIHdo
ZXRoZXIgdGhlIGZ1bmN0aW9uIGlzCi0gICAgICAgICAgICAgICAgLy8gYSBkZWNsYXJhdGlvbiBv
ciBhbiBleHByZXNzaW9uLgotICAgICAgICAgICAgICAgIGlmIChGbkV4cHJUb2tlbnMuaW5kZXhP
ZihjaGVja1Rva2VuLnZhbHVlKSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEl0IGlz
IGFuIGV4cHJlc3Npb24uCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRv
cigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBJdCBpcyBhIGRlY2xh
cmF0aW9uLgotICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAocHJldlRva2VuLnR5cGUgPT09ICdLZXl3b3JkJykgewotICAgICAgICAgICAgcmV0
dXJuIGNvbGxlY3RSZWdleCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzY2FuUHVuY3R1
YXRvcigpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGFkdmFuY2UoKSB7Ci0gICAgICAgIHZhciBj
aDsKLQotICAgICAgICBza2lwQ29tbWVudCgpOwotCi0gICAgICAgIGlmIChpbmRleCA+PSBsZW5n
dGgpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4u
RU9GLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAgICAgICAg
ICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAgICAgICAgc3RhcnQ6IGluZGV4
LAotICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0K
LQotICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKLQotICAgICAgICBpZiAo
aXNJZGVudGlmaWVyU3RhcnQoY2gpKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2NhbklkZW50aWZp
ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFZlcnkgY29tbW9uOiAoIGFuZCApIGFuZCA7
Ci0gICAgICAgIGlmIChjaCA9PT0gMHgyOCB8fCBjaCA9PT0gMHgyOSB8fCBjaCA9PT0gMHgzQikg
ewotICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBTdHJpbmcgbGl0ZXJhbCBzdGFydHMgd2l0aCBzaW5nbGUgcXVvdGUgKFUrMDAyNykg
b3IgZG91YmxlIHF1b3RlIChVKzAwMjIpLgotICAgICAgICBpZiAoY2ggPT09IDB4MjcgfHwgY2gg
PT09IDB4MjIpIHsKLSAgICAgICAgICAgIHJldHVybiBzY2FuU3RyaW5nTGl0ZXJhbCgpOwotICAg
ICAgICB9Ci0KLQotICAgICAgICAvLyBEb3QgKC4pIFUrMDAyRSBjYW4gYWxzbyBzdGFydCBhIGZs
b2F0aW5nLXBvaW50IG51bWJlciwgaGVuY2UgdGhlIG5lZWQKLSAgICAgICAgLy8gdG8gY2hlY2sg
dGhlIG5leHQgY2hhcmFjdGVyLgotICAgICAgICBpZiAoY2ggPT09IDB4MkUpIHsKLSAgICAgICAg
ICAgIGlmIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpKSkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBzY2FuTnVtZXJpY0xpdGVyYWwoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KGNoKSkgewotICAgICAgICAgICAgcmV0dXJuIHNjYW5O
dW1lcmljTGl0ZXJhbCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2xhc2ggKC8pIFUrMDAy
RiBjYW4gYWxzbyBzdGFydCBhIHJlZ2V4LgotICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUgJiYg
Y2ggPT09IDB4MkYpIHsKLSAgICAgICAgICAgIHJldHVybiBhZHZhbmNlU2xhc2goKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIGNvbGxlY3RUb2tlbigpIHsKLSAgICAgICAgdmFyIGxvYywgdG9rZW4sIHJhbmdlLCB2
YWx1ZTsKLQotICAgICAgICBza2lwQ29tbWVudCgpOwotICAgICAgICBsb2MgPSB7Ci0gICAgICAg
ICAgICBzdGFydDogewotICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCi0gICAgICAg
ICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAotICAgICAgICAgICAgfQotICAgICAg
ICB9OwotCi0gICAgICAgIHRva2VuID0gYWR2YW5jZSgpOwotICAgICAgICBsb2MuZW5kID0gewot
ICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKLSAgICAgICAgICAgIGNvbHVtbjogaW5kZXgg
LSBsaW5lU3RhcnQKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9r
ZW4uRU9GKSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCwg
dG9rZW4uZW5kKTsKLSAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wdXNoKHsKLSAgICAgICAgICAg
ICAgICB0eXBlOiBUb2tlbk5hbWVbdG9rZW4udHlwZV0sCi0gICAgICAgICAgICAgICAgdmFsdWU6
IHZhbHVlLAotICAgICAgICAgICAgICAgIHJhbmdlOiBbdG9rZW4uc3RhcnQsIHRva2VuLmVuZF0s
Ci0gICAgICAgICAgICAgICAgbG9jOiBsb2MKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHRva2VuOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGxleCgpIHsKLSAg
ICAgICAgdmFyIHRva2VuOwotCi0gICAgICAgIHRva2VuID0gbG9va2FoZWFkOwotICAgICAgICBp
bmRleCA9IHRva2VuLmVuZDsKLSAgICAgICAgbGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7
Ci0gICAgICAgIGxpbmVTdGFydCA9IHRva2VuLmxpbmVTdGFydDsKLQotICAgICAgICBsb29rYWhl
YWQgPSAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpID8gY29sbGVjdFRva2Vu
KCkgOiBhZHZhbmNlKCk7Ci0KLSAgICAgICAgaW5kZXggPSB0b2tlbi5lbmQ7Ci0gICAgICAgIGxp
bmVOdW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyOwotICAgICAgICBsaW5lU3RhcnQgPSB0b2tlbi5s
aW5lU3RhcnQ7Ci0KLSAgICAgICAgcmV0dXJuIHRva2VuOwotICAgIH0KLQotICAgIGZ1bmN0aW9u
IHBlZWsoKSB7Ci0gICAgICAgIHZhciBwb3MsIGxpbmUsIHN0YXJ0OwotCi0gICAgICAgIHBvcyA9
IGluZGV4OwotICAgICAgICBsaW5lID0gbGluZU51bWJlcjsKLSAgICAgICAgc3RhcnQgPSBsaW5l
U3RhcnQ7Ci0gICAgICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5k
ZWZpbmVkJykgPyBjb2xsZWN0VG9rZW4oKSA6IGFkdmFuY2UoKTsKLSAgICAgICAgaW5kZXggPSBw
b3M7Ci0gICAgICAgIGxpbmVOdW1iZXIgPSBsaW5lOwotICAgICAgICBsaW5lU3RhcnQgPSBzdGFy
dDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBQb3NpdGlvbihsaW5lLCBjb2x1bW4pIHsKLSAgICAg
ICAgdGhpcy5saW5lID0gbGluZTsKLSAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gU291cmNlTG9jYXRpb24oc3RhcnRMaW5lLCBzdGFydENvbHVtbiwg
bGluZSwgY29sdW1uKSB7Ci0gICAgICAgIHRoaXMuc3RhcnQgPSBuZXcgUG9zaXRpb24oc3RhcnRM
aW5lLCBzdGFydENvbHVtbik7Ci0gICAgICAgIHRoaXMuZW5kID0gbmV3IFBvc2l0aW9uKGxpbmUs
IGNvbHVtbik7Ci0gICAgfQotCi0gICAgU3ludGF4VHJlZURlbGVnYXRlID0gewotCi0gICAgICAg
IG5hbWU6ICdTeW50YXhUcmVlJywKLQotICAgICAgICBwcm9jZXNzQ29tbWVudDogZnVuY3Rpb24g
KG5vZGUpIHsKLSAgICAgICAgICAgIHZhciBsYXN0Q2hpbGQsIHRyYWlsaW5nQ29tbWVudHM7Ci0K
LSAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IFN5bnRheC5Qcm9ncmFtKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUuYm9keS5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAg
ICBpZiAoZXh0cmEudHJhaWxpbmdDb21tZW50c1swXS5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFd
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBleHRyYS50cmFpbGlu
Z0NvbW1lbnRzOwotICAgICAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0g
W107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZXh0cmEu
dHJhaWxpbmdDb21tZW50cy5sZW5ndGggPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2su
bGVuZ3RoID4gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYm90dG9tUmlnaHRT
dGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHMg
JiYKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEu
Ym90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdlWzBd
ID49IG5vZGUucmFuZ2VbMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50
cyA9IGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGgg
LSAxXS50cmFpbGluZ0NvbW1lbnRzOwotICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXh0cmEu
Ym90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWls
aW5nQ29tbWVudHM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAvLyBFYXRpbmcgdGhlIHN0YWNrLgotICAgICAgICAgICAgd2hpbGUgKGV4dHJhLmJvdHRv
bVJpZ2h0U3RhY2subGVuZ3RoID4gMCAmJiBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJv
dHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVswXSkgewot
ICAgICAgICAgICAgICAgIGxhc3RDaGlsZCA9IGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sucG9wKCk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobGFzdENoaWxkLmxlYWRpbmdDb21tZW50cyAmJiBsYXN0Q2hpbGQubGVhZGlu
Z0NvbW1lbnRzW2xhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMV0ucmFuZ2VbMV0g
PD0gbm9kZS5yYW5nZVswXSkgewotICAgICAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21t
ZW50cyA9IGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHM7Ci0gICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDAgJiYgZXh0
cmEubGVhZGluZ0NvbW1lbnRzW2V4dHJhLmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxXS5yYW5n
ZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29t
bWVudHMgPSBleHRyYS5sZWFkaW5nQ29tbWVudHM7Ci0gICAgICAgICAgICAgICAgZXh0cmEubGVh
ZGluZ0NvbW1lbnRzID0gW107Ci0gICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAgaWYgKHRy
YWlsaW5nQ29tbWVudHMpIHsKLSAgICAgICAgICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMg
PSB0cmFpbGluZ0NvbW1lbnRzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBleHRyYS5i
b3R0b21SaWdodFN0YWNrLnB1c2gobm9kZSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgbWFya0Vu
ZDogZnVuY3Rpb24gKG5vZGUsIHN0YXJ0VG9rZW4pIHsKLSAgICAgICAgICAgIGlmIChleHRyYS5y
YW5nZSkgewotICAgICAgICAgICAgICAgIG5vZGUucmFuZ2UgPSBbc3RhcnRUb2tlbi5zdGFydCwg
aW5kZXhdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4dHJhLmxvYykgewotICAg
ICAgICAgICAgICAgIG5vZGUubG9jID0gbmV3IFNvdXJjZUxvY2F0aW9uKAotICAgICAgICAgICAg
ICAgICAgICBzdGFydFRva2VuLnN0YXJ0TGluZU51bWJlciA9PT0gdW5kZWZpbmVkID8gIHN0YXJ0
VG9rZW4ubGluZU51bWJlciA6IHN0YXJ0VG9rZW4uc3RhcnRMaW5lTnVtYmVyLAotICAgICAgICAg
ICAgICAgICAgICBzdGFydFRva2VuLnN0YXJ0IC0gKHN0YXJ0VG9rZW4uc3RhcnRMaW5lU3RhcnQg
PT09IHVuZGVmaW5lZCA/ICBzdGFydFRva2VuLmxpbmVTdGFydCA6IHN0YXJ0VG9rZW4uc3RhcnRM
aW5lU3RhcnQpLAotICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyLAotICAgICAgICAgICAg
ICAgICAgICBpbmRleCAtIGxpbmVTdGFydAotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5wb3N0UHJvY2Vzcyhub2RlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnByb2Nl
c3NDb21tZW50KG5vZGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5vZGU7
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcG9zdFByb2Nlc3M6IGZ1bmN0aW9uIChub2RlKSB7Ci0g
ICAgICAgICAgICBpZiAoZXh0cmEuc291cmNlKSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5sb2Mu
c291cmNlID0gZXh0cmEuc291cmNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IG5vZGU7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlQXJyYXlFeHByZXNzaW9uOiBmdW5j
dGlvbiAoZWxlbWVudHMpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LkFycmF5RXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICBlbGVtZW50czog
ZWxlbWVudHMKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlQXNz
aWdubWVudEV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHsKLSAg
ICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkFzc2lnbm1l
bnRFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKLSAgICAg
ICAgICAgICAgICBsZWZ0OiBsZWZ0LAotICAgICAgICAgICAgICAgIHJpZ2h0OiByaWdodAotICAg
ICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVCaW5hcnlFeHByZXNzaW9u
OiBmdW5jdGlvbiAob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSB7Ci0gICAgICAgICAgICB2YXIgdHlw
ZSA9IChvcGVyYXRvciA9PT0gJ3x8JyB8fCBvcGVyYXRvciA9PT0gJyYmJykgPyBTeW50YXguTG9n
aWNhbEV4cHJlc3Npb24gOgotICAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4LkJpbmFyeUV4
cHJlc3Npb247Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IHR5
cGUsCi0gICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAotICAgICAgICAgICAgICAg
IGxlZnQ6IGxlZnQsCi0gICAgICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0Ci0gICAgICAgICAgICB9
OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZUJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbiAo
Ym9keSkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50
YXguQmxvY2tTdGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgYm9keTogYm9keQotICAgICAgICAg
ICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVCcmVha1N0YXRlbWVudDogZnVuY3Rp
b24gKGxhYmVsKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5CcmVha1N0YXRlbWVudCwKLSAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwKLSAg
ICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlQ2FsbEV4cHJlc3Npb246
IGZ1bmN0aW9uIChjYWxsZWUsIGFyZ3MpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4LkNhbGxFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgIGNh
bGxlZTogY2FsbGVlLAotICAgICAgICAgICAgICAgICdhcmd1bWVudHMnOiBhcmdzCi0gICAgICAg
ICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZUNhdGNoQ2xhdXNlOiBmdW5jdGlv
biAocGFyYW0sIGJvZHkpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LkNhdGNoQ2xhdXNlLAotICAgICAgICAgICAgICAgIHBhcmFtOiBwYXJhbSwK
LSAgICAgICAgICAgICAgICBib2R5OiBib2R5Ci0gICAgICAgICAgICB9OwotICAgICAgICB9LAot
Ci0gICAgICAgIGNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbjogZnVuY3Rpb24gKHRlc3QsIGNv
bnNlcXVlbnQsIGFsdGVybmF0ZSkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAg
ICAgICB0eXBlOiBTeW50YXguQ29uZGl0aW9uYWxFeHByZXNzaW9uLAotICAgICAgICAgICAgICAg
IHRlc3Q6IHRlc3QsCi0gICAgICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCwKLSAg
ICAgICAgICAgICAgICBhbHRlcm5hdGU6IGFsdGVybmF0ZQotICAgICAgICAgICAgfTsKLSAgICAg
ICAgfSwKLQotICAgICAgICBjcmVhdGVDb250aW51ZVN0YXRlbWVudDogZnVuY3Rpb24gKGxhYmVs
KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5D
b250aW51ZVN0YXRlbWVudCwKLSAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwKLSAgICAgICAg
ICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlRGVidWdnZXJTdGF0ZW1lbnQ6IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LkRlYnVnZ2VyU3RhdGVtZW50Ci0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0g
ICAgICAgIGNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChib2R5LCB0ZXN0KSB7Ci0g
ICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Eb1doaWxl
U3RhdGVtZW50LAotICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksCi0gICAgICAgICAgICAgICAg
dGVzdDogdGVzdAotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVF
bXB0eVN0YXRlbWVudDogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAg
ICAgICAgICAgICB0eXBlOiBTeW50YXguRW1wdHlTdGF0ZW1lbnQKLSAgICAgICAgICAgIH07Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudDogZnVuY3Rpb24g
KGV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LkV4cHJlc3Npb25TdGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgZXhwcmVzc2lv
bjogZXhwcmVzc2lvbgotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVh
dGVGb3JTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChpbml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpIHsKLSAg
ICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkZvclN0YXRl
bWVudCwKLSAgICAgICAgICAgICAgICBpbml0OiBpbml0LAotICAgICAgICAgICAgICAgIHRlc3Q6
IHRlc3QsCi0gICAgICAgICAgICAgICAgdXBkYXRlOiB1cGRhdGUsCi0gICAgICAgICAgICAgICAg
Ym9keTogYm9keQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVG
b3JJblN0YXRlbWVudDogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCBib2R5KSB7Ci0gICAgICAgICAg
ICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Gb3JJblN0YXRlbWVudCwK
LSAgICAgICAgICAgICAgICBsZWZ0OiBsZWZ0LAotICAgICAgICAgICAgICAgIHJpZ2h0OiByaWdo
dCwKLSAgICAgICAgICAgICAgICBib2R5OiBib2R5LAotICAgICAgICAgICAgICAgIGVhY2g6IGZh
bHNlCi0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZUZ1bmN0aW9u
RGVjbGFyYXRpb246IGZ1bmN0aW9uIChpZCwgcGFyYW1zLCBkZWZhdWx0cywgYm9keSkgewotICAg
ICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRnVuY3Rpb25E
ZWNsYXJhdGlvbiwKLSAgICAgICAgICAgICAgICBpZDogaWQsCi0gICAgICAgICAgICAgICAgcGFy
YW1zOiBwYXJhbXMsCi0gICAgICAgICAgICAgICAgZGVmYXVsdHM6IGRlZmF1bHRzLAotICAgICAg
ICAgICAgICAgIGJvZHk6IGJvZHksCi0gICAgICAgICAgICAgICAgcmVzdDogbnVsbCwKLSAgICAg
ICAgICAgICAgICBnZW5lcmF0b3I6IGZhbHNlLAotICAgICAgICAgICAgICAgIGV4cHJlc3Npb246
IGZhbHNlCi0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZUZ1bmN0
aW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gKGlkLCBwYXJhbXMsIGRlZmF1bHRzLCBib2R5KSB7Ci0g
ICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5GdW5jdGlv
bkV4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgaWQ6IGlkLAotICAgICAgICAgICAgICAgIHBh
cmFtczogcGFyYW1zLAotICAgICAgICAgICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0cywKLSAgICAg
ICAgICAgICAgICBib2R5OiBib2R5LAotICAgICAgICAgICAgICAgIHJlc3Q6IG51bGwsCi0gICAg
ICAgICAgICAgICAgZ2VuZXJhdG9yOiBmYWxzZSwKLSAgICAgICAgICAgICAgICBleHByZXNzaW9u
OiBmYWxzZQotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVJZGVu
dGlmaWVyOiBmdW5jdGlvbiAobmFtZSkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguSWRlbnRpZmllciwKLSAgICAgICAgICAgICAgICBuYW1lOiBu
YW1lCi0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZUlmU3RhdGVt
ZW50OiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5JZlN0YXRlbWVudCwKLSAg
ICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAotICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IGNv
bnNlcXVlbnQsCi0gICAgICAgICAgICAgICAgYWx0ZXJuYXRlOiBhbHRlcm5hdGUKLSAgICAgICAg
ICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlTGFiZWxlZFN0YXRlbWVudDogZnVu
Y3Rpb24gKGxhYmVsLCBib2R5KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAg
ICAgIHR5cGU6IFN5bnRheC5MYWJlbGVkU3RhdGVtZW50LAotICAgICAgICAgICAgICAgIGxhYmVs
OiBsYWJlbCwKLSAgICAgICAgICAgICAgICBib2R5OiBib2R5Ci0gICAgICAgICAgICB9OwotICAg
ICAgICB9LAotCi0gICAgICAgIGNyZWF0ZUxpdGVyYWw6IGZ1bmN0aW9uICh0b2tlbikgewotICAg
ICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTGl0ZXJhbCwK
LSAgICAgICAgICAgICAgICB2YWx1ZTogdG9rZW4udmFsdWUsCi0gICAgICAgICAgICAgICAgcmF3
OiBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCkKLSAgICAgICAgICAgIH07Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlTWVtYmVyRXhwcmVzc2lvbjogZnVuY3Rpb24gKGFj
Y2Vzc29yLCBvYmplY3QsIHByb3BlcnR5KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5NZW1iZXJFeHByZXNzaW9uLAotICAgICAgICAgICAgICAg
IGNvbXB1dGVkOiBhY2Nlc3NvciA9PT0gJ1snLAotICAgICAgICAgICAgICAgIG9iamVjdDogb2Jq
ZWN0LAotICAgICAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eQotICAgICAgICAgICAgfTsK
LSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVOZXdFeHByZXNzaW9uOiBmdW5jdGlvbiAoY2Fs
bGVlLCBhcmdzKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5OZXdFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgIGNhbGxlZTogY2FsbGVlLAot
ICAgICAgICAgICAgICAgICdhcmd1bWVudHMnOiBhcmdzCi0gICAgICAgICAgICB9OwotICAgICAg
ICB9LAotCi0gICAgICAgIGNyZWF0ZU9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uIChwcm9wZXJ0
aWVzKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRh
eC5PYmplY3RFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRp
ZXMKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlUG9zdGZpeEV4
cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgYXJndW1lbnQpIHsKLSAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlVwZGF0ZUV4cHJlc3Npb24sCi0g
ICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAotICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50OiBhcmd1bWVudCwKLSAgICAgICAgICAgICAgICBwcmVmaXg6IGZhbHNlCi0gICAgICAgICAg
ICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZVByb2dyYW06IGZ1bmN0aW9uIChib2R5
KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Q
cm9ncmFtLAotICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgY3JlYXRlUHJvcGVydHk6IGZ1bmN0aW9uIChraW5kLCBrZXksIHZh
bHVlKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRh
eC5Qcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICBrZXk6IGtleSwKLSAgICAgICAgICAgICAgICB2
YWx1ZTogdmFsdWUsCi0gICAgICAgICAgICAgICAga2luZDoga2luZAotICAgICAgICAgICAgfTsK
LSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uIChh
cmd1bWVudCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguUmV0dXJuU3RhdGVtZW50LAotICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVu
dAotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVTZXF1ZW5jZUV4
cHJlc3Npb246IGZ1bmN0aW9uIChleHByZXNzaW9ucykgewotICAgICAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguU2VxdWVuY2VFeHByZXNzaW9uLAotICAgICAg
ICAgICAgICAgIGV4cHJlc3Npb25zOiBleHByZXNzaW9ucwotICAgICAgICAgICAgfTsKLSAgICAg
ICAgfSwKLQotICAgICAgICBjcmVhdGVTd2l0Y2hDYXNlOiBmdW5jdGlvbiAodGVzdCwgY29uc2Vx
dWVudCkgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50
YXguU3dpdGNoQ2FzZSwKLSAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAotICAgICAgICAgICAg
ICAgIGNvbnNlcXVlbnQ6IGNvbnNlcXVlbnQKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgY3JlYXRlU3dpdGNoU3RhdGVtZW50OiBmdW5jdGlvbiAoZGlzY3JpbWluYW50LCBj
YXNlcykgewotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50
YXguU3dpdGNoU3RhdGVtZW50LAotICAgICAgICAgICAgICAgIGRpc2NyaW1pbmFudDogZGlzY3Jp
bWluYW50LAotICAgICAgICAgICAgICAgIGNhc2VzOiBjYXNlcwotICAgICAgICAgICAgfTsKLSAg
ICAgICAgfSwKLQotICAgICAgICBjcmVhdGVUaGlzRXhwcmVzc2lvbjogZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVGhpc0V4
cHJlc3Npb24KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlVGhy
b3dTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChhcmd1bWVudCkgewotICAgICAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVGhyb3dTdGF0ZW1lbnQsCi0gICAgICAgICAg
ICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50Ci0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0g
ICAgICAgIGNyZWF0ZVRyeVN0YXRlbWVudDogZnVuY3Rpb24gKGJsb2NrLCBndWFyZGVkSGFuZGxl
cnMsIGhhbmRsZXJzLCBmaW5hbGl6ZXIpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4LlRyeVN0YXRlbWVudCwKLSAgICAgICAgICAgICAgICBibG9j
azogYmxvY2ssCi0gICAgICAgICAgICAgICAgZ3VhcmRlZEhhbmRsZXJzOiBndWFyZGVkSGFuZGxl
cnMsCi0gICAgICAgICAgICAgICAgaGFuZGxlcnM6IGhhbmRsZXJzLAotICAgICAgICAgICAgICAg
IGZpbmFsaXplcjogZmluYWxpemVyCi0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAg
ICAgIGNyZWF0ZVVuYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBhcmd1bWVudCkg
ewotICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSAnKysnIHx8IG9wZXJhdG9yID09PSAnLS0n
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LlVwZGF0ZUV4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBv
cGVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LAotICAgICAg
ICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
VW5hcnlFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKLSAg
ICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsCi0gICAgICAgICAgICAgICAgcHJlZml4
OiB0cnVlCi0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZVZhcmlh
YmxlRGVjbGFyYXRpb246IGZ1bmN0aW9uIChkZWNsYXJhdGlvbnMsIGtpbmQpIHsKLSAgICAgICAg
ICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlZhcmlhYmxlRGVjbGFy
YXRpb24sCi0gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBkZWNsYXJhdGlvbnMsCi0gICAg
ICAgICAgICAgICAga2luZDoga2luZAotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAg
ICAgICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0b3I6IGZ1bmN0aW9uIChpZCwgaW5pdCkgewotICAg
ICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVmFyaWFibGVE
ZWNsYXJhdG9yLAotICAgICAgICAgICAgICAgIGlkOiBpZCwKLSAgICAgICAgICAgICAgICBpbml0
OiBpbml0Ci0gICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZVdoaWxl
U3RhdGVtZW50OiBmdW5jdGlvbiAodGVzdCwgYm9keSkgewotICAgICAgICAgICAgcmV0dXJuIHsK
LSAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguV2hpbGVTdGF0ZW1lbnQsCi0gICAgICAgICAg
ICAgICAgdGVzdDogdGVzdCwKLSAgICAgICAgICAgICAgICBib2R5OiBib2R5Ci0gICAgICAgICAg
ICB9OwotICAgICAgICB9LAotCi0gICAgICAgIGNyZWF0ZVdpdGhTdGF0ZW1lbnQ6IGZ1bmN0aW9u
IChvYmplY3QsIGJvZHkpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LldpdGhTdGF0ZW1lbnQsCi0gICAgICAgICAgICAgICAgb2JqZWN0OiBvYmpl
Y3QsCi0gICAgICAgICAgICAgICAgYm9keTogYm9keQotICAgICAgICAgICAgfTsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGxpbmUgdGVybWlu
YXRvciBiZWZvcmUgdGhlIG5leHQgdG9rZW4uCi0KLSAgICBmdW5jdGlvbiBwZWVrTGluZVRlcm1p
bmF0b3IoKSB7Ci0gICAgICAgIHZhciBwb3MsIGxpbmUsIHN0YXJ0LCBmb3VuZDsKLQotICAgICAg
ICBwb3MgPSBpbmRleDsKLSAgICAgICAgbGluZSA9IGxpbmVOdW1iZXI7Ci0gICAgICAgIHN0YXJ0
ID0gbGluZVN0YXJ0OwotICAgICAgICBza2lwQ29tbWVudCgpOwotICAgICAgICBmb3VuZCA9IGxp
bmVOdW1iZXIgIT09IGxpbmU7Ci0gICAgICAgIGluZGV4ID0gcG9zOwotICAgICAgICBsaW5lTnVt
YmVyID0gbGluZTsKLSAgICAgICAgbGluZVN0YXJ0ID0gc3RhcnQ7Ci0KLSAgICAgICAgcmV0dXJu
IGZvdW5kOwotICAgIH0KLQotICAgIC8vIFRocm93IGFuIGV4Y2VwdGlvbgotCi0gICAgZnVuY3Rp
b24gdGhyb3dFcnJvcih0b2tlbiwgbWVzc2FnZUZvcm1hdCkgewotICAgICAgICB2YXIgZXJyb3Is
Ci0gICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRz
LCAyKSwKLSAgICAgICAgICAgIG1zZyA9IG1lc3NhZ2VGb3JtYXQucmVwbGFjZSgKLSAgICAgICAg
ICAgICAgICAvJShcZCkvZywKLSAgICAgICAgICAgICAgICBmdW5jdGlvbiAod2hvbGUsIGluZGV4
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChpbmRleCA8IGFyZ3MubGVuZ3RoLCAnTWVz
c2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZScpOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYXJnc1tpbmRleF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgKTsKLQot
ICAgICAgICBpZiAodHlwZW9mIHRva2VuLmxpbmVOdW1iZXIgPT09ICdudW1iZXInKSB7Ci0gICAg
ICAgICAgICBlcnJvciA9IG5ldyBFcnJvcignTGluZSAnICsgdG9rZW4ubGluZU51bWJlciArICc6
ICcgKyBtc2cpOwotICAgICAgICAgICAgZXJyb3IuaW5kZXggPSB0b2tlbi5zdGFydDsKLSAgICAg
ICAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyOwotICAgICAgICAgICAg
ZXJyb3IuY29sdW1uID0gdG9rZW4uc3RhcnQgLSBsaW5lU3RhcnQgKyAxOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ0xpbmUgJyArIGxpbmVOdW1iZXIg
KyAnOiAnICsgbXNnKTsKLSAgICAgICAgICAgIGVycm9yLmluZGV4ID0gaW5kZXg7Ci0gICAgICAg
ICAgICBlcnJvci5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICAgICAgICAgIGVycm9yLmNv
bHVtbiA9IGluZGV4IC0gbGluZVN0YXJ0ICsgMTsKLSAgICAgICAgfQotCi0gICAgICAgIGVycm9y
LmRlc2NyaXB0aW9uID0gbXNnOwotICAgICAgICB0aHJvdyBlcnJvcjsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiB0aHJvd0Vycm9yVG9sZXJhbnQoKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICB0aHJvd0Vycm9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gICAgICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgICAgIGlmIChleHRyYS5lcnJvcnMpIHsKLSAgICAgICAgICAgICAgICBleHRy
YS5lcnJvcnMucHVzaChlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
dGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgLy8gVGhy
b3cgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgdGhlIHRva2VuLgotCi0gICAgZnVuY3Rpb24gdGhy
b3dVbmV4cGVjdGVkKHRva2VuKSB7Ci0gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5F
T0YpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRF
T1MpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLk51bWVy
aWNMaXRlcmFsKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4
cGVjdGVkTnVtYmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBU
b2tlbi5TdHJpbmdMaXRlcmFsKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNz
YWdlcy5VbmV4cGVjdGVkU3RyaW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0b2tlbi50
eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHRva2Vu
LCBNZXNzYWdlcy5VbmV4cGVjdGVkSWRlbnRpZmllcik7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgewotICAgICAgICAgICAgaWYgKGlzRnV0
dXJlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJy
b3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRSZXNlcnZlZCk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKHN0cmljdCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7
Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJp
Y3RSZXNlcnZlZFdvcmQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwg
dG9rZW4udmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQm9vbGVhbkxpdGVyYWwsIE51
bGxMaXRlcmFsLCBvciBQdW5jdHVhdG9yLgotICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNz
YWdlcy5VbmV4cGVjdGVkVG9rZW4sIHRva2VuLnZhbHVlKTsKLSAgICB9Ci0KLSAgICAvLyBFeHBl
Y3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgotICAg
IC8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgotCi0gICAgZnVuY3Rpb24g
ZXhwZWN0KHZhbHVlKSB7Ci0gICAgICAgIHZhciB0b2tlbiA9IGxleCgpOwotICAgICAgICBpZiAo
dG9rZW4udHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvciB8fCB0b2tlbi52YWx1ZSAhPT0gdmFsdWUp
IHsKLSAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBr
ZXl3b3JkLgotICAgIC8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgotCi0g
ICAgZnVuY3Rpb24gZXhwZWN0S2V5d29yZChrZXl3b3JkKSB7Ci0gICAgICAgIHZhciB0b2tlbiA9
IGxleCgpOwotICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCB8fCB0b2tl
bi52YWx1ZSAhPT0ga2V5d29yZCkgewotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2Vu
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRv
a2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgotCi0gICAgZnVuY3Rpb24gbWF0
Y2godmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5j
dHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gdmFsdWU7Ci0gICAgfQotCi0gICAgLy8gUmV0
dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGtleXdvcmQK
LQotICAgIGZ1bmN0aW9uIG1hdGNoS2V5d29yZChrZXl3b3JkKSB7Ci0gICAgICAgIHJldHVybiBs
b29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCAmJiBsb29rYWhlYWQudmFsdWUgPT09IGtl
eXdvcmQ7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gaXMg
YW4gYXNzaWdubWVudCBvcGVyYXRvcgotCi0gICAgZnVuY3Rpb24gbWF0Y2hBc3NpZ24oKSB7Ci0g
ICAgICAgIHZhciBvcDsKLQotICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlB1
bmN0dWF0b3IpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBvcCA9IGxvb2thaGVhZC52YWx1ZTsKLSAgICAgICAgcmV0dXJuIG9wID09PSAnPScgfHwKLSAg
ICAgICAgICAgIG9wID09PSAnKj0nIHx8Ci0gICAgICAgICAgICBvcCA9PT0gJy89JyB8fAotICAg
ICAgICAgICAgb3AgPT09ICclPScgfHwKLSAgICAgICAgICAgIG9wID09PSAnKz0nIHx8Ci0gICAg
ICAgICAgICBvcCA9PT0gJy09JyB8fAotICAgICAgICAgICAgb3AgPT09ICc8PD0nIHx8Ci0gICAg
ICAgICAgICBvcCA9PT0gJz4+PScgfHwKLSAgICAgICAgICAgIG9wID09PSAnPj4+PScgfHwKLSAg
ICAgICAgICAgIG9wID09PSAnJj0nIHx8Ci0gICAgICAgICAgICBvcCA9PT0gJ149JyB8fAotICAg
ICAgICAgICAgb3AgPT09ICd8PSc7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gY29uc3VtZVNlbWlj
b2xvbigpIHsKLSAgICAgICAgdmFyIGxpbmU7Ci0KLSAgICAgICAgLy8gQ2F0Y2ggdGhlIHZlcnkg
Y29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0IpLgotICAg
ICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNCIHx8IG1hdGNoKCc7Jykp
IHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgbGluZSA9IGxpbmVOdW1iZXI7Ci0gICAgICAgIHNraXBDb21tZW50KCk7Ci0gICAg
ICAgIGlmIChsaW5lTnVtYmVyICE9PSBsaW5lKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRiAmJiAhbWF0
Y2goJ30nKSkgewotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBwcm92aWRlZCBleHByZXNzaW9u
IGlzIExlZnRIYW5kU2lkZUV4cHJlc3Npb24KLQotICAgIGZ1bmN0aW9uIGlzTGVmdEhhbmRTaWRl
KGV4cHIpIHsKLSAgICAgICAgcmV0dXJuIGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIg
fHwgZXhwci50eXBlID09PSBTeW50YXguTWVtYmVyRXhwcmVzc2lvbjsKLSAgICB9Ci0KLSAgICAv
LyAxMS4xLjQgQXJyYXkgSW5pdGlhbGlzZXIKLQotICAgIGZ1bmN0aW9uIHBhcnNlQXJyYXlJbml0
aWFsaXNlcigpIHsKLSAgICAgICAgdmFyIGVsZW1lbnRzID0gW10sIHN0YXJ0VG9rZW47Ci0KLSAg
ICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgZXhwZWN0KCdbJyk7Ci0KLSAg
ICAgICAgd2hpbGUgKCFtYXRjaCgnXScpKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2goJywnKSkg
ewotICAgICAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2go
bnVsbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1
c2gocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpKTsKLQotICAgICAgICAgICAgICAgIGlmICgh
bWF0Y2goJ10nKSkgewotICAgICAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBsZXgoKTsKLQot
ICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVBcnJheUV4cHJl
c3Npb24oZWxlbWVudHMpLCBzdGFydFRva2VuKTsKLSAgICB9Ci0KLSAgICAvLyAxMS4xLjUgT2Jq
ZWN0IEluaXRpYWxpc2VyCi0KLSAgICBmdW5jdGlvbiBwYXJzZVByb3BlcnR5RnVuY3Rpb24ocGFy
YW0sIGZpcnN0KSB7Ci0gICAgICAgIHZhciBwcmV2aW91c1N0cmljdCwgYm9keSwgc3RhcnRUb2tl
bjsKLQotICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDsKLSAgICAgICAgc3RhcnRUb2tl
biA9IGxvb2thaGVhZDsKLSAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50
cygpOwotICAgICAgICBpZiAoZmlyc3QgJiYgc3RyaWN0ICYmIGlzUmVzdHJpY3RlZFdvcmQocGFy
YW1bMF0ubmFtZSkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdCwgTWVz
c2FnZXMuU3RyaWN0UGFyYW1OYW1lKTsKLSAgICAgICAgfQotICAgICAgICBzdHJpY3QgPSBwcmV2
aW91c1N0cmljdDsKLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3Jl
YXRlRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIHBhcmFtLCBbXSwgYm9keSksIHN0YXJ0VG9rZW4p
OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKSB7Ci0gICAg
ICAgIHZhciB0b2tlbiwgc3RhcnRUb2tlbjsKLQotICAgICAgICBzdGFydFRva2VuID0gbG9va2Fo
ZWFkOwotICAgICAgICB0b2tlbiA9IGxleCgpOwotCi0gICAgICAgIC8vIE5vdGU6IFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIG9ubHkgZnJvbSBwYXJzZU9iamVjdFByb3BlcnR5KCksIHdoZXJlCi0g
ICAgICAgIC8vIEVPRiBhbmQgUHVuY3R1YXRvciB0b2tlbnMgYXJlIGFscmVhZHkgZmlsdGVyZWQg
b3V0LgotCi0gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsIHx8
IHRva2VuLnR5cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFsKSB7Ci0gICAgICAgICAgICBpZiAo
c3RyaWN0ICYmIHRva2VuLm9jdGFsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVy
YW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlTGl0ZXJh
bCh0b2tlbiksIHN0YXJ0VG9rZW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1ZSksIHN0YXJ0
VG9rZW4pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVydHkoKSB7Ci0g
ICAgICAgIHZhciB0b2tlbiwga2V5LCBpZCwgdmFsdWUsIHBhcmFtLCBzdGFydFRva2VuOwotCi0g
ICAgICAgIHRva2VuID0gbG9va2FoZWFkOwotICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFk
OwotCi0gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0KLSAg
ICAgICAgICAgIGlkID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOwotCi0gICAgICAgICAgICAv
LyBQcm9wZXJ0eSBBc3NpZ25tZW50OiBHZXR0ZXIgYW5kIFNldHRlci4KLQotICAgICAgICAgICAg
aWYgKHRva2VuLnZhbHVlID09PSAnZ2V0JyAmJiAhbWF0Y2goJzonKSkgewotICAgICAgICAgICAg
ICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKLSAgICAgICAgICAgICAgICBleHBl
Y3QoJygnKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoJyknKTsKLSAgICAgICAgICAgICAgICB2
YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihbXSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2dldCcsIGtleSwgdmFs
dWUpLCBzdGFydFRva2VuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0b2tlbi52
YWx1ZSA9PT0gJ3NldCcgJiYgIW1hdGNoKCc6JykpIHsKLSAgICAgICAgICAgICAgICBrZXkgPSBw
YXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KCcoJyk7Ci0g
ICAgICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgICAgICAgICAgaWYgKHRv
a2VuLnR5cGUgIT09IFRva2VuLklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0KCcpJyk7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwg
TWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCB0b2tlbi52YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKFtdKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwYXJhbSA9IFsgcGFyc2VWYXJpYWJsZUlkZW50
aWZpZXIoKSBdOwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoJyknKTsKLSAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24ocGFyYW0sIHRva2VuKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQo
ZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ3NldCcsIGtleSwgdmFsdWUpLCBzdGFydFRva2VuKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV4cGVjdCgnOicpOwotICAgICAgICAgICAgdmFs
dWUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gZGVs
ZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQcm9wZXJ0eSgnaW5pdCcsIGlkLCB2YWx1ZSks
IHN0YXJ0VG9rZW4pOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tl
bi5FT0YgfHwgdG9rZW4udHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikgewotICAgICAgICAgICAg
dGhyb3dVbmV4cGVjdGVkKHRva2VuKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGtl
eSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKLSAgICAgICAgICAgIGV4cGVjdCgnOicpOwot
ICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQcm9wZXJ0eSgnaW5p
dCcsIGtleSwgdmFsdWUpLCBzdGFydFRva2VuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1
bmN0aW9uIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKSB7Ci0gICAgICAgIHZhciBwcm9wZXJ0aWVz
ID0gW10sIHByb3BlcnR5LCBuYW1lLCBrZXksIGtpbmQsIG1hcCA9IHt9LCB0b1N0cmluZyA9IFN0
cmluZywgc3RhcnRUb2tlbjsKLQotICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwotCi0g
ICAgICAgIGV4cGVjdCgneycpOwotCi0gICAgICAgIHdoaWxlICghbWF0Y2goJ30nKSkgewotICAg
ICAgICAgICAgcHJvcGVydHkgPSBwYXJzZU9iamVjdFByb3BlcnR5KCk7Ci0KLSAgICAgICAgICAg
IGlmIChwcm9wZXJ0eS5rZXkudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsKLSAgICAgICAg
ICAgICAgICBuYW1lID0gcHJvcGVydHkua2V5Lm5hbWU7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIG5hbWUgPSB0b1N0cmluZyhwcm9wZXJ0eS5rZXkudmFsdWUpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAga2luZCA9IChwcm9wZXJ0eS5raW5kID09PSAnaW5pdCcp
ID8gUHJvcGVydHlLaW5kLkRhdGEgOiAocHJvcGVydHkua2luZCA9PT0gJ2dldCcpID8gUHJvcGVy
dHlLaW5kLkdldCA6IFByb3BlcnR5S2luZC5TZXQ7Ci0KLSAgICAgICAgICAgIGtleSA9ICckJyAr
IG5hbWU7Ci0gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j
YWxsKG1hcCwga2V5KSkgewotICAgICAgICAgICAgICAgIGlmIChtYXBba2V5XSA9PT0gUHJvcGVy
dHlLaW5kLkRhdGEpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBraW5kID09
PSBQcm9wZXJ0eUtpbmQuRGF0YSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3REdXBsaWNhdGVQcm9wZXJ0eSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCAhPT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNj
ZXNzb3JEYXRhUHJvcGVydHkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09IFByb3BlcnR5S2lu
ZC5EYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30s
IE1lc3NhZ2VzLkFjY2Vzc29yRGF0YVByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChtYXBba2V5XSAmIGtpbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93
RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JHZXRTZXQpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1hcFtrZXldIHw9
IGtpbmQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1hcFtrZXldID0g
a2luZDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3Bl
cnR5KTsKLQotICAgICAgICAgICAgaWYgKCFtYXRjaCgnfScpKSB7Ci0gICAgICAgICAgICAgICAg
ZXhwZWN0KCcsJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBleHBlY3Qo
J30nKTsKLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVP
YmplY3RFeHByZXNzaW9uKHByb3BlcnRpZXMpLCBzdGFydFRva2VuKTsKLSAgICB9Ci0KLSAgICAv
LyAxMS4xLjYgVGhlIEdyb3VwaW5nIE9wZXJhdG9yCi0KLSAgICBmdW5jdGlvbiBwYXJzZUdyb3Vw
RXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIGV4cHI7Ci0KLSAgICAgICAgZXhwZWN0KCcoJyk7
Ci0KLSAgICAgICAgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpOwotCi0gICAgICAgIGV4cGVjdCgn
KScpOwotCi0gICAgICAgIHJldHVybiBleHByOwotICAgIH0KLQotCi0gICAgLy8gMTEuMSBQcmlt
YXJ5IEV4cHJlc3Npb25zCi0KLSAgICBmdW5jdGlvbiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCkg
ewotICAgICAgICB2YXIgdHlwZSwgdG9rZW4sIGV4cHIsIHN0YXJ0VG9rZW47Ci0KLSAgICAgICAg
aWYgKG1hdGNoKCcoJykpIHsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUdyb3VwRXhwcmVzc2lv
bigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hdGNoKCdbJykpIHsKLSAgICAgICAgICAg
IHJldHVybiBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtYXRjaCgneycpKSB7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VPYmplY3RJbml0aWFsaXNl
cigpOwotICAgICAgICB9Ci0KLSAgICAgICAgdHlwZSA9IGxvb2thaGVhZC50eXBlOwotICAgICAg
ICBzdGFydFRva2VuID0gbG9va2FoZWFkOwotCi0gICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5J
ZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBleHByID0gIGRlbGVnYXRlLmNyZWF0ZUlkZW50aWZp
ZXIobGV4KCkudmFsdWUpOwotICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlN0cmlu
Z0xpdGVyYWwgfHwgdHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHsKLSAgICAgICAgICAg
IGlmIChzdHJpY3QgJiYgbG9va2FoZWFkLm9jdGFsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dF
cnJvclRvbGVyYW50KGxvb2thaGVhZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKGxl
eCgpKTsKLSAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7Ci0gICAg
ICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAobWF0Y2hLZXl3b3JkKCd0aGlzJykpIHsKLSAgICAgICAgICAgICAgICBsZXgoKTsK
LSAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlVGhpc0V4cHJlc3Npb24oKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxl
eCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5C
b29sZWFuTGl0ZXJhbCkgewotICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKLSAgICAgICAgICAg
IHRva2VuLnZhbHVlID0gKHRva2VuLnZhbHVlID09PSAndHJ1ZScpOwotICAgICAgICAgICAgZXhw
ciA9IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwodG9rZW4pOwotICAgICAgICB9IGVsc2UgaWYgKHR5
cGUgPT09IFRva2VuLk51bGxMaXRlcmFsKSB7Ci0gICAgICAgICAgICB0b2tlbiA9IGxleCgpOwot
ICAgICAgICAgICAgdG9rZW4udmFsdWUgPSBudWxsOwotICAgICAgICAgICAgZXhwciA9IGRlbGVn
YXRlLmNyZWF0ZUxpdGVyYWwodG9rZW4pOwotICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcvJykg
fHwgbWF0Y2goJy89JykpIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9
PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVM
aXRlcmFsKGNvbGxlY3RSZWdleCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwoc2NhblJlZ0V4cCgpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHBlZWsoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
ZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFydFRva2VuKTsKLSAgICB9Ci0KLSAgICAvLyAxMS4y
IExlZnQtSGFuZC1TaWRlIEV4cHJlc3Npb25zCi0KLSAgICBmdW5jdGlvbiBwYXJzZUFyZ3VtZW50
cygpIHsKLSAgICAgICAgdmFyIGFyZ3MgPSBbXTsKLQotICAgICAgICBleHBlY3QoJygnKTsKLQot
ICAgICAgICBpZiAoIW1hdGNoKCcpJykpIHsKLSAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxl
bmd0aCkgewotICAgICAgICAgICAgICAgIGFyZ3MucHVzaChwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKCkpOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBleHBlY3Qo
JywnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGV4cGVjdCgnKScpOwot
Ci0gICAgICAgIHJldHVybiBhcmdzOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlTm9uQ29t
cHV0ZWRQcm9wZXJ0eSgpIHsKLSAgICAgICAgdmFyIHRva2VuLCBzdGFydFRva2VuOwotCi0gICAg
ICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgIHRva2VuID0gbGV4KCk7Ci0KLSAg
ICAgICAgaWYgKCFpc0lkZW50aWZpZXJOYW1lKHRva2VuKSkgewotICAgICAgICAgICAgdGhyb3dV
bmV4cGVjdGVkKHRva2VuKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5t
YXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUlkZW50aWZpZXIodG9rZW4udmFsdWUpLCBzdGFydFRva2Vu
KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkgewotICAg
ICAgICBleHBlY3QoJy4nKTsKLQotICAgICAgICByZXR1cm4gcGFyc2VOb25Db21wdXRlZFByb3Bl
cnR5KCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VDb21wdXRlZE1lbWJlcigpIHsKLSAg
ICAgICAgdmFyIGV4cHI7Ci0KLSAgICAgICAgZXhwZWN0KCdbJyk7Ci0KLSAgICAgICAgZXhwciA9
IHBhcnNlRXhwcmVzc2lvbigpOwotCi0gICAgICAgIGV4cGVjdCgnXScpOwotCi0gICAgICAgIHJl
dHVybiBleHByOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlTmV3RXhwcmVzc2lvbigpIHsK
LSAgICAgICAgdmFyIGNhbGxlZSwgYXJncywgc3RhcnRUb2tlbjsKLQotICAgICAgICBzdGFydFRv
a2VuID0gbG9va2FoZWFkOwotICAgICAgICBleHBlY3RLZXl3b3JkKCduZXcnKTsKLSAgICAgICAg
Y2FsbGVlID0gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKCk7Ci0gICAgICAgIGFyZ3MgPSBt
YXRjaCgnKCcpID8gcGFyc2VBcmd1bWVudHMoKSA6IFtdOwotCi0gICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZU5ld0V4cHJlc3Npb24oY2FsbGVlLCBhcmdzKSwg
c3RhcnRUb2tlbik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VMZWZ0SGFuZFNpZGVFeHBy
ZXNzaW9uQWxsb3dDYWxsKCkgewotICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0luLCBleHByLCBh
cmdzLCBwcm9wZXJ0eSwgc3RhcnRUb2tlbjsKLQotICAgICAgICBzdGFydFRva2VuID0gbG9va2Fo
ZWFkOwotCi0gICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47Ci0gICAgICAg
IHN0YXRlLmFsbG93SW4gPSB0cnVlOwotICAgICAgICBleHByID0gbWF0Y2hLZXl3b3JkKCduZXcn
KSA/IHBhcnNlTmV3RXhwcmVzc2lvbigpIDogcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpOwotICAg
ICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOwotCi0gICAgICAgIGZvciAoOzsp
IHsKLSAgICAgICAgICAgIGlmIChtYXRjaCgnLicpKSB7Ci0gICAgICAgICAgICAgICAgcHJvcGVy
dHkgPSBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IGRl
bGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oJy4nLCBleHByLCBwcm9wZXJ0eSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcoJykpIHsKLSAgICAgICAgICAgICAgICBhcmdzID0g
cGFyc2VBcmd1bWVudHMoKTsKLSAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRl
Q2FsbEV4cHJlc3Npb24oZXhwciwgYXJncyk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNo
KCdbJykpIHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlQ29tcHV0ZWRNZW1iZXIo
KTsKLSAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lv
bignWycsIGV4cHIsIHByb3BlcnR5KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWxlZ2F0ZS5tYXJrRW5k
KGV4cHIsIHN0YXJ0VG9rZW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGV4cHI7Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKCkgewotICAg
ICAgICB2YXIgcHJldmlvdXNBbGxvd0luLCBleHByLCBwcm9wZXJ0eSwgc3RhcnRUb2tlbjsKLQot
ICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwotCi0gICAgICAgIHByZXZpb3VzQWxsb3dJ
biA9IHN0YXRlLmFsbG93SW47Ci0gICAgICAgIGV4cHIgPSBtYXRjaEtleXdvcmQoJ25ldycpID8g
cGFyc2VOZXdFeHByZXNzaW9uKCkgOiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCk7Ci0gICAgICAg
IHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47Ci0KLSAgICAgICAgd2hpbGUgKG1hdGNo
KCcuJykgfHwgbWF0Y2goJ1snKSkgewotICAgICAgICAgICAgaWYgKG1hdGNoKCdbJykpIHsKLSAg
ICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlQ29tcHV0ZWRNZW1iZXIoKTsKLSAgICAgICAg
ICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbignWycsIGV4cHIs
IHByb3BlcnR5KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJvcGVy
dHkgPSBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IGRl
bGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Npb24oJy4nLCBleHByLCBwcm9wZXJ0eSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4p
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgfQotCi0gICAgLy8gMTEu
MyBQb3N0Zml4IEV4cHJlc3Npb25zCi0KLSAgICBmdW5jdGlvbiBwYXJzZVBvc3RmaXhFeHByZXNz
aW9uKCkgewotICAgICAgICB2YXIgZXhwciwgdG9rZW4sIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7
Ci0KLSAgICAgICAgZXhwciA9IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgp
OwotCi0gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikgewot
ICAgICAgICAgICAgaWYgKChtYXRjaCgnKysnKSB8fCBtYXRjaCgnLS0nKSkgJiYgIXBlZWtMaW5l
VGVybWluYXRvcigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMTEuMy4xLCAxMS4zLjIKLSAgICAg
ICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIg
JiYgaXNSZXN0cmljdGVkV29yZChleHByLm5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRo
cm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0TEhTUG9zdGZpeCk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFpc0xlZnRIYW5kU2lkZShleHByKSkg
ewotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklu
dmFsaWRMSFNJbkFzc2lnbm1lbnQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHRva2VuID0gbGV4KCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLm1hcmtF
bmQoZGVsZWdhdGUuY3JlYXRlUG9zdGZpeEV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpLCBz
dGFydFRva2VuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBl
eHByOwotICAgIH0KLQotICAgIC8vIDExLjQgVW5hcnkgT3BlcmF0b3JzCi0KLSAgICBmdW5jdGlv
biBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIHRva2VuLCBleHByLCBzdGFy
dFRva2VuOwotCi0gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRv
ciAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uS2V5d29yZCkgewotICAgICAgICAgICAgZXhw
ciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKTsKLSAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgn
KysnKSB8fCBtYXRjaCgnLS0nKSkgewotICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVh
ZDsKLSAgICAgICAgICAgIHRva2VuID0gbGV4KCk7Ci0gICAgICAgICAgICBleHByID0gcGFyc2VV
bmFyeUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIC8vIDExLjQuNCwgMTEuNC41Ci0gICAgICAg
ICAgICBpZiAoc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNS
ZXN0cmljdGVkV29yZChleHByLm5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRv
bGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RMSFNQcmVmaXgpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoIWlzTGVmdEhhbmRTaWRlKGV4cHIpKSB7Ci0gICAgICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVVuYXJ5
RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7Ci0gICAgICAgICAgICBleHByID0gZGVsZWdh
dGUubWFya0VuZChleHByLCBzdGFydFRva2VuKTsKLSAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgn
KycpIHx8IG1hdGNoKCctJykgfHwgbWF0Y2goJ34nKSB8fCBtYXRjaCgnIScpKSB7Ci0gICAgICAg
ICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwotICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsK
LSAgICAgICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOwotICAgICAgICAgICAg
ZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7
Ci0gICAgICAgICAgICBleHByID0gZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFydFRva2VuKTsK
LSAgICAgICAgfSBlbHNlIGlmIChtYXRjaEtleXdvcmQoJ2RlbGV0ZScpIHx8IG1hdGNoS2V5d29y
ZCgndm9pZCcpIHx8IG1hdGNoS2V5d29yZCgndHlwZW9mJykpIHsKLSAgICAgICAgICAgIHN0YXJ0
VG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgICAgICB0b2tlbiA9IGxleCgpOwotICAgICAgICAg
ICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICBleHByID0gZGVs
ZWdhdGUuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTsKLSAgICAgICAg
ICAgIGV4cHIgPSBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOwotICAgICAgICAg
ICAgaWYgKHN0cmljdCAmJiBleHByLm9wZXJhdG9yID09PSAnZGVsZXRlJyAmJiBleHByLmFyZ3Vt
ZW50LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dF
cnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3REZWxldGUpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXhwciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Np
b24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBleHByOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIGFsbG93SW4pIHsKLSAgICAgICAgdmFyIHBy
ZWMgPSAwOwotCi0gICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yICYm
IHRva2VuLnR5cGUgIT09IFRva2VuLktleXdvcmQpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkgewotICAgICAgICBjYXNl
ICd8fCc6Ci0gICAgICAgICAgICBwcmVjID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgJyYmJzoKLSAgICAgICAgICAgIHByZWMgPSAyOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSAnfCc6Ci0gICAgICAgICAgICBwcmVjID0gMzsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgJ14nOgotICAgICAgICAgICAgcHJlYyA9IDQ7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICcmJzoKLSAgICAgICAgICAgIHByZWMgPSA1
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSAnPT0nOgotICAgICAgICBjYXNl
ICchPSc6Ci0gICAgICAgIGNhc2UgJz09PSc6Ci0gICAgICAgIGNhc2UgJyE9PSc6Ci0gICAgICAg
ICAgICBwcmVjID0gNjsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJzwnOgot
ICAgICAgICBjYXNlICc+JzoKLSAgICAgICAgY2FzZSAnPD0nOgotICAgICAgICBjYXNlICc+PSc6
Ci0gICAgICAgIGNhc2UgJ2luc3RhbmNlb2YnOgotICAgICAgICAgICAgcHJlYyA9IDc7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICdpbic6Ci0gICAgICAgICAgICBwcmVjID0g
YWxsb3dJbiA/IDcgOiAwOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSAnPDwn
OgotICAgICAgICBjYXNlICc+Pic6Ci0gICAgICAgIGNhc2UgJz4+Pic6Ci0gICAgICAgICAgICBw
cmVjID0gODsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJysnOgotICAgICAg
ICBjYXNlICctJzoKLSAgICAgICAgICAgIHByZWMgPSA5OwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSAnKic6Ci0gICAgICAgIGNhc2UgJy8nOgotICAgICAgICBjYXNlICclJzoK
LSAgICAgICAgICAgIHByZWMgPSAxMTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBw
cmVjOwotICAgIH0KLQotICAgIC8vIDExLjUgTXVsdGlwbGljYXRpdmUgT3BlcmF0b3JzCi0gICAg
Ly8gMTEuNiBBZGRpdGl2ZSBPcGVyYXRvcnMKLSAgICAvLyAxMS43IEJpdHdpc2UgU2hpZnQgT3Bl
cmF0b3JzCi0gICAgLy8gMTEuOCBSZWxhdGlvbmFsIE9wZXJhdG9ycwotICAgIC8vIDExLjkgRXF1
YWxpdHkgT3BlcmF0b3JzCi0gICAgLy8gMTEuMTAgQmluYXJ5IEJpdHdpc2UgT3BlcmF0b3JzCi0g
ICAgLy8gMTEuMTEgQmluYXJ5IExvZ2ljYWwgT3BlcmF0b3JzCi0KLSAgICBmdW5jdGlvbiBwYXJz
ZUJpbmFyeUV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciBtYXJrZXIsIG1hcmtlcnMsIGV4cHIs
IHRva2VuLCBwcmVjLCBzdGFjaywgcmlnaHQsIG9wZXJhdG9yLCBsZWZ0LCBpOwotCi0gICAgICAg
IG1hcmtlciA9IGxvb2thaGVhZDsKLSAgICAgICAgbGVmdCA9IHBhcnNlVW5hcnlFeHByZXNzaW9u
KCk7Ci0KLSAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgIHByZWMgPSBiaW5hcnlQ
cmVjZWRlbmNlKHRva2VuLCBzdGF0ZS5hbGxvd0luKTsKLSAgICAgICAgaWYgKHByZWMgPT09IDAp
IHsKLSAgICAgICAgICAgIHJldHVybiBsZWZ0OwotICAgICAgICB9Ci0gICAgICAgIHRva2VuLnBy
ZWMgPSBwcmVjOwotICAgICAgICBsZXgoKTsKLQotICAgICAgICBtYXJrZXJzID0gW21hcmtlciwg
bG9va2FoZWFkXTsKLSAgICAgICAgcmlnaHQgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOwotCi0g
ICAgICAgIHN0YWNrID0gW2xlZnQsIHRva2VuLCByaWdodF07Ci0KLSAgICAgICAgd2hpbGUgKChw
cmVjID0gYmluYXJ5UHJlY2VkZW5jZShsb29rYWhlYWQsIHN0YXRlLmFsbG93SW4pKSA+IDApIHsK
LQotICAgICAgICAgICAgLy8gUmVkdWNlOiBtYWtlIGEgYmluYXJ5IGV4cHJlc3Npb24gZnJvbSB0
aGUgdGhyZWUgdG9wbW9zdCBlbnRyaWVzLgotICAgICAgICAgICAgd2hpbGUgKChzdGFjay5sZW5n
dGggPiAyKSAmJiAocHJlYyA8PSBzdGFja1tzdGFjay5sZW5ndGggLSAyXS5wcmVjKSkgewotICAg
ICAgICAgICAgICAgIHJpZ2h0ID0gc3RhY2sucG9wKCk7Ci0gICAgICAgICAgICAgICAgb3BlcmF0
b3IgPSBzdGFjay5wb3AoKS52YWx1ZTsKLSAgICAgICAgICAgICAgICBsZWZ0ID0gc3RhY2sucG9w
KCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUJpbmFyeUV4cHJlc3Np
b24ob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgICAgICBtYXJrZXJzLnBvcCgp
OwotICAgICAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlcnNbbWFya2Vycy5sZW5ndGggLSAxXTsK
LSAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIG1hcmtlcik7Ci0gICAgICAg
ICAgICAgICAgc3RhY2sucHVzaChleHByKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gU2hpZnQuCi0gICAgICAgICAgICB0b2tlbiA9IGxleCgpOwotICAgICAgICAgICAgdG9rZW4u
cHJlYyA9IHByZWM7Ci0gICAgICAgICAgICBzdGFjay5wdXNoKHRva2VuKTsKLSAgICAgICAgICAg
IG1hcmtlcnMucHVzaChsb29rYWhlYWQpOwotICAgICAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlF
eHByZXNzaW9uKCk7Ci0gICAgICAgICAgICBzdGFjay5wdXNoKGV4cHIpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gRmluYWwgcmVkdWNlIHRvIGNsZWFuLXVwIHRoZSBzdGFjay4KLSAgICAgICAg
aSA9IHN0YWNrLmxlbmd0aCAtIDE7Ci0gICAgICAgIGV4cHIgPSBzdGFja1tpXTsKLSAgICAgICAg
bWFya2Vycy5wb3AoKTsKLSAgICAgICAgd2hpbGUgKGkgPiAxKSB7Ci0gICAgICAgICAgICBleHBy
ID0gZGVsZWdhdGUuY3JlYXRlQmluYXJ5RXhwcmVzc2lvbihzdGFja1tpIC0gMV0udmFsdWUsIHN0
YWNrW2kgLSAyXSwgZXhwcik7Ci0gICAgICAgICAgICBpIC09IDI7Ci0gICAgICAgICAgICBtYXJr
ZXIgPSBtYXJrZXJzLnBvcCgpOwotICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBt
YXJrZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgfQotCi0KLSAg
ICAvLyAxMS4xMiBDb25kaXRpb25hbCBPcGVyYXRvcgotCi0gICAgZnVuY3Rpb24gcGFyc2VDb25k
aXRpb25hbEV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciBleHByLCBwcmV2aW91c0FsbG93SW4s
IGNvbnNlcXVlbnQsIGFsdGVybmF0ZSwgc3RhcnRUb2tlbjsKLQotICAgICAgICBzdGFydFRva2Vu
ID0gbG9va2FoZWFkOwotCi0gICAgICAgIGV4cHIgPSBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKTsK
LQotICAgICAgICBpZiAobWF0Y2goJz8nKSkgewotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAg
ICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luOwotICAgICAgICAgICAgc3RhdGUu
YWxsb3dJbiA9IHRydWU7Ci0gICAgICAgICAgICBjb25zZXF1ZW50ID0gcGFyc2VBc3NpZ25tZW50
RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJ
bjsKLSAgICAgICAgICAgIGV4cGVjdCgnOicpOwotICAgICAgICAgICAgYWx0ZXJuYXRlID0gcGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwotCi0gICAgICAgICAgICBleHByID0gZGVsZWdhdGUu
Y3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uKGV4cHIsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSk7
Ci0gICAgICAgICAgICBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgfQotCi0gICAgLy8gMTEuMTMgQXNzaWdu
bWVudCBPcGVyYXRvcnMKLQotICAgIGZ1bmN0aW9uIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24o
KSB7Ci0gICAgICAgIHZhciB0b2tlbiwgbGVmdCwgcmlnaHQsIG5vZGUsIHN0YXJ0VG9rZW47Ci0K
LSAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhl
YWQ7Ci0KLSAgICAgICAgbm9kZSA9IGxlZnQgPSBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigp
OwotCi0gICAgICAgIGlmIChtYXRjaEFzc2lnbigpKSB7Ci0gICAgICAgICAgICAvLyBMZWZ0SGFu
ZFNpZGVFeHByZXNzaW9uCi0gICAgICAgICAgICBpZiAoIWlzTGVmdEhhbmRTaWRlKGxlZnQpKSB7
Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlk
TEhTSW5Bc3NpZ25tZW50KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gMTEuMTMu
MQotICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBsZWZ0LnR5cGUgPT09IFN5bnRheC5JZGVudGlm
aWVyICYmIGlzUmVzdHJpY3RlZFdvcmQobGVmdC5uYW1lKSkgewotICAgICAgICAgICAgICAgIHRo
cm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0TEhTQXNzaWdubWVudCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRva2VuID0gbGV4KCk7Ci0gICAgICAgICAgICBy
aWdodCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIG5vZGUgPSBk
ZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uKHRva2Vu
LnZhbHVlLCBsZWZ0LCByaWdodCksIHN0YXJ0VG9rZW4pOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIG5vZGU7Ci0gICAgfQotCi0gICAgLy8gMTEuMTQgQ29tbWEgT3BlcmF0b3IKLQotICAg
IGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIGV4cHIsIHN0YXJ0VG9r
ZW4gPSBsb29rYWhlYWQ7Ci0KLSAgICAgICAgZXhwciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24oKTsKLQotICAgICAgICBpZiAobWF0Y2goJywnKSkgewotICAgICAgICAgICAgZXhwciA9IGRl
bGVnYXRlLmNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbihbIGV4cHIgXSk7Ci0KLSAgICAgICAgICAg
IHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJywn
KSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICAgICAgZXhwci5leHByZXNzaW9ucy5wdXNo
KHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gZXhwcjsKLSAgICB9Ci0KLSAgICAvLyAxMi4xIEJsb2NrCi0KLSAgICBmdW5j
dGlvbiBwYXJzZVN0YXRlbWVudExpc3QoKSB7Ci0gICAgICAgIHZhciBsaXN0ID0gW10sCi0gICAg
ICAgICAgICBzdGF0ZW1lbnQ7Ci0KLSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0g
ICAgICAgICAgICBpZiAobWF0Y2goJ30nKSkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7
Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHN0YXRlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpc3QucHVz
aChzdGF0ZW1lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQot
Ci0gICAgZnVuY3Rpb24gcGFyc2VCbG9jaygpIHsKLSAgICAgICAgdmFyIGJsb2NrLCBzdGFydFRv
a2VuOwotCi0gICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgIGV4cGVjdCgn
eycpOwotCi0gICAgICAgIGJsb2NrID0gcGFyc2VTdGF0ZW1lbnRMaXN0KCk7Ci0KLSAgICAgICAg
ZXhwZWN0KCd9Jyk7Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUu
Y3JlYXRlQmxvY2tTdGF0ZW1lbnQoYmxvY2spLCBzdGFydFRva2VuKTsKLSAgICB9Ci0KLSAgICAv
LyAxMi4yIFZhcmlhYmxlIFN0YXRlbWVudAotCi0gICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZUlk
ZW50aWZpZXIoKSB7Ci0gICAgICAgIHZhciB0b2tlbiwgc3RhcnRUb2tlbjsKLQotICAgICAgICBz
dGFydFRva2VuID0gbG9va2FoZWFkOwotICAgICAgICB0b2tlbiA9IGxleCgpOwotCi0gICAgICAg
IGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICB0aHJv
d1VuZXhwZWN0ZWQodG9rZW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRl
Lm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1ZSksIHN0YXJ0VG9r
ZW4pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihraW5k
KSB7Ci0gICAgICAgIHZhciBpbml0ID0gbnVsbCwgaWQsIHN0YXJ0VG9rZW47Ci0KLSAgICAgICAg
c3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRp
ZmllcigpOwotCi0gICAgICAgIC8vIDEyLjIuMQotICAgICAgICBpZiAoc3RyaWN0ICYmIGlzUmVz
dHJpY3RlZFdvcmQoaWQubmFtZSkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7
fSwgTWVzc2FnZXMuU3RyaWN0VmFyTmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa2lu
ZCA9PT0gJ2NvbnN0JykgewotICAgICAgICAgICAgZXhwZWN0KCc9Jyk7Ci0gICAgICAgICAgICBp
bml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwotICAgICAgICB9IGVsc2UgaWYgKG1h
dGNoKCc9JykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgaW5pdCA9IHBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCks
IHN0YXJ0VG9rZW4pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJh
dGlvbkxpc3Qoa2luZCkgewotICAgICAgICB2YXIgbGlzdCA9IFtdOwotCi0gICAgICAgIGRvIHsK
LSAgICAgICAgICAgIGxpc3QucHVzaChwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oa2luZCkpOwot
ICAgICAgICAgICAgaWYgKCFtYXRjaCgnLCcpKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgfSB3aGlsZSAoaW5kZXgg
PCBsZW5ndGgpOwotCi0gICAgICAgIHJldHVybiBsaXN0OwotICAgIH0KLQotICAgIGZ1bmN0aW9u
IHBhcnNlVmFyaWFibGVTdGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZhciBkZWNsYXJhdGlvbnM7Ci0K
LSAgICAgICAgZXhwZWN0S2V5d29yZCgndmFyJyk7Ci0KLSAgICAgICAgZGVjbGFyYXRpb25zID0g
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOwotCi0gICAgICAgIGNvbnN1bWVTZW1pY29s
b24oKTsKLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlv
bihkZWNsYXJhdGlvbnMsICd2YXInKTsKLSAgICB9Ci0KLSAgICAvLyBraW5kIG1heSBiZSBgY29u
c3RgIG9yIGBsZXRgCi0gICAgLy8gQm90aCBhcmUgZXhwZXJpbWVudGFsIGFuZCBub3QgaW4gdGhl
IHNwZWNpZmljYXRpb24geWV0LgotICAgIC8vIHNlZSBodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9y
Zy9kb2t1LnBocD9pZD1oYXJtb255OmNvbnN0Ci0gICAgLy8gYW5kIGh0dHA6Ly93aWtpLmVjbWFz
Y3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6bGV0Ci0gICAgZnVuY3Rpb24gcGFyc2VDb25z
dExldERlY2xhcmF0aW9uKGtpbmQpIHsKLSAgICAgICAgdmFyIGRlY2xhcmF0aW9ucywgc3RhcnRU
b2tlbjsKLQotICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwotCi0gICAgICAgIGV4cGVj
dEtleXdvcmQoa2luZCk7Ci0KLSAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURl
Y2xhcmF0aW9uTGlzdChraW5kKTsKLQotICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0KLSAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlVmFyaWFibGVEZWNs
YXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpLCBzdGFydFRva2VuKTsKLSAgICB9Ci0KLSAgICAv
LyAxMi4zIEVtcHR5IFN0YXRlbWVudAotCi0gICAgZnVuY3Rpb24gcGFyc2VFbXB0eVN0YXRlbWVu
dCgpIHsKLSAgICAgICAgZXhwZWN0KCc7Jyk7Ci0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVh
dGVFbXB0eVN0YXRlbWVudCgpOwotICAgIH0KLQotICAgIC8vIDEyLjQgRXhwcmVzc2lvbiBTdGF0
ZW1lbnQKLQotICAgIGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpIHsKLSAgICAg
ICAgdmFyIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgY29uc3VtZVNlbWljb2xv
bigpOwotICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChl
eHByKTsKLSAgICB9Ci0KLSAgICAvLyAxMi41IElmIHN0YXRlbWVudAotCi0gICAgZnVuY3Rpb24g
cGFyc2VJZlN0YXRlbWVudCgpIHsKLSAgICAgICAgdmFyIHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVy
bmF0ZTsKLQotICAgICAgICBleHBlY3RLZXl3b3JkKCdpZicpOwotCi0gICAgICAgIGV4cGVjdCgn
KCcpOwotCi0gICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKLQotICAgICAgICBleHBl
Y3QoJyknKTsKLQotICAgICAgICBjb25zZXF1ZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKLQotICAg
ICAgICBpZiAobWF0Y2hLZXl3b3JkKCdlbHNlJykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAg
ICAgICAgICAgYWx0ZXJuYXRlID0gcGFyc2VTdGF0ZW1lbnQoKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGFsdGVybmF0ZSA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gZGVsZWdhdGUuY3JlYXRlSWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRl
KTsKLSAgICB9Ci0KLSAgICAvLyAxMi42IEl0ZXJhdGlvbiBTdGF0ZW1lbnRzCi0KLSAgICBmdW5j
dGlvbiBwYXJzZURvV2hpbGVTdGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZhciBib2R5LCB0ZXN0LCBv
bGRJbkl0ZXJhdGlvbjsKLQotICAgICAgICBleHBlY3RLZXl3b3JkKCdkbycpOwotCi0gICAgICAg
IG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247Ci0gICAgICAgIHN0YXRlLmluSXRl
cmF0aW9uID0gdHJ1ZTsKLQotICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKLQotICAg
ICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uOwotCi0gICAgICAgIGV4cGVj
dEtleXdvcmQoJ3doaWxlJyk7Ci0KLSAgICAgICAgZXhwZWN0KCcoJyk7Ci0KLSAgICAgICAgdGVz
dCA9IHBhcnNlRXhwcmVzc2lvbigpOwotCi0gICAgICAgIGV4cGVjdCgnKScpOwotCi0gICAgICAg
IGlmIChtYXRjaCgnOycpKSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVEb1doaWxlU3RhdGVtZW50KGJvZHksIHRlc3QpOwot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlV2hpbGVTdGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZh
ciB0ZXN0LCBib2R5LCBvbGRJbkl0ZXJhdGlvbjsKLQotICAgICAgICBleHBlY3RLZXl3b3JkKCd3
aGlsZScpOwotCi0gICAgICAgIGV4cGVjdCgnKCcpOwotCi0gICAgICAgIHRlc3QgPSBwYXJzZUV4
cHJlc3Npb24oKTsKLQotICAgICAgICBleHBlY3QoJyknKTsKLQotICAgICAgICBvbGRJbkl0ZXJh
dGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uOwotICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRy
dWU7Ci0KLSAgICAgICAgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7Ci0KLSAgICAgICAgc3RhdGUu
aW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjsKLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUu
Y3JlYXRlV2hpbGVTdGF0ZW1lbnQodGVzdCwgYm9keSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g
cGFyc2VGb3JWYXJpYWJsZURlY2xhcmF0aW9uKCkgewotICAgICAgICB2YXIgdG9rZW4sIGRlY2xh
cmF0aW9ucywgc3RhcnRUb2tlbjsKLQotICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwot
ICAgICAgICB0b2tlbiA9IGxleCgpOwotICAgICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlh
YmxlRGVjbGFyYXRpb25MaXN0KCk7Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQo
ZGVsZWdhdGUuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIHRva2VuLnZh
bHVlKSwgc3RhcnRUb2tlbik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VGb3JTdGF0ZW1l
bnQoKSB7Ci0gICAgICAgIHZhciBpbml0LCB0ZXN0LCB1cGRhdGUsIGxlZnQsIHJpZ2h0LCBib2R5
LCBvbGRJbkl0ZXJhdGlvbjsKLQotICAgICAgICBpbml0ID0gdGVzdCA9IHVwZGF0ZSA9IG51bGw7
Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgnZm9yJyk7Ci0KLSAgICAgICAgZXhwZWN0KCcoJyk7
Ci0KLSAgICAgICAgaWYgKG1hdGNoKCc7JykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgndmFyJykgfHwgbWF0Y2hL
ZXl3b3JkKCdsZXQnKSkgewotICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICBpbml0ID0gcGFyc2VGb3JWYXJpYWJsZURlY2xhcmF0aW9uKCk7Ci0g
ICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoaW5pdC5kZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIG1hdGNoS2V5d29yZCgnaW4nKSkg
ewotICAgICAgICAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9
IGluaXQ7Ci0gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgIGluaXQgPSBwYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAg
ICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIGlmIChtYXRjaEtleXdv
cmQoJ2luJykpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTGVmdEhhbmRTaWRlRXhwcmVzc2lv
bgotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTGVmdEhhbmRTaWRlKGluaXQpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFs
aWRMSFNJbkZvckluKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGxleCgpOwotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKLSAgICAgICAgICAg
ICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAgICAgICAg
aW5pdCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAodHlwZW9mIGxlZnQgPT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICAgICAg
ZXhwZWN0KCc7Jyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHlw
ZW9mIGxlZnQgPT09ICd1bmRlZmluZWQnKSB7Ci0KLSAgICAgICAgICAgIGlmICghbWF0Y2goJzsn
KSkgewotICAgICAgICAgICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGV4cGVjdCgnOycpOwotCi0gICAgICAgICAgICBpZiAoIW1hdGNo
KCcpJykpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGUgPSBwYXJzZUV4cHJlc3Npb24oKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGV4cGVjdCgnKScpOwotCi0gICAgICAg
IG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247Ci0gICAgICAgIHN0YXRlLmluSXRl
cmF0aW9uID0gdHJ1ZTsKLQotICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKLQotICAg
ICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uOwotCi0gICAgICAgIHJldHVy
biAodHlwZW9mIGxlZnQgPT09ICd1bmRlZmluZWQnKSA/Ci0gICAgICAgICAgICAgICAgZGVsZWdh
dGUuY3JlYXRlRm9yU3RhdGVtZW50KGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkgOgotICAgICAg
ICAgICAgICAgIGRlbGVnYXRlLmNyZWF0ZUZvckluU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5
KTsKLSAgICB9Ci0KLSAgICAvLyAxMi43IFRoZSBjb250aW51ZSBzdGF0ZW1lbnQKLQotICAgIGZ1
bmN0aW9uIHBhcnNlQ29udGludWVTdGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZhciBsYWJlbCA9IG51
bGwsIGtleTsKLQotICAgICAgICBleHBlY3RLZXl3b3JkKCdjb250aW51ZScpOwotCi0gICAgICAg
IC8vIE9wdGltaXplIHRoZSBtb3N0IGNvbW1vbiBmb3JtOiAnY29udGludWU7Jy4KLSAgICAgICAg
aWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzQikgewotICAgICAgICAgICAgbGV4
KCk7Ci0KLSAgICAgICAgICAgIGlmICghc3RhdGUuaW5JdGVyYXRpb24pIHsKLSAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQ29udGludWVTdGF0ZW1l
bnQobnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkp
IHsKLSAgICAgICAgICAgIGlmICghc3RhdGUuaW5JdGVyYXRpb24pIHsKLSAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQo
bnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2Vu
LklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIGxhYmVsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZp
ZXIoKTsKLQotICAgICAgICAgICAga2V5ID0gJyQnICsgbGFiZWwubmFtZTsKLSAgICAgICAgICAg
IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0
LCBrZXkpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5rbm93
bkxhYmVsLCBsYWJlbC5uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGNvbnN1bWVTZW1pY29sb24oKTsKLQotICAgICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIXN0
YXRlLmluSXRlcmF0aW9uKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5J
bGxlZ2FsQ29udGludWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNy
ZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxhYmVsKTsKLSAgICB9Ci0KLSAgICAvLyAxMi44IFRoZSBi
cmVhayBzdGF0ZW1lbnQKLQotICAgIGZ1bmN0aW9uIHBhcnNlQnJlYWtTdGF0ZW1lbnQoKSB7Ci0g
ICAgICAgIHZhciBsYWJlbCA9IG51bGwsIGtleTsKLQotICAgICAgICBleHBlY3RLZXl3b3JkKCdi
cmVhaycpOwotCi0gICAgICAgIC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBp
bW1lZGlhdGVseSBhIHNlbWljb2xvbiAoVSswMDNCKS4KLSAgICAgICAgaWYgKHNvdXJjZS5jaGFy
Q29kZUF0KGluZGV4KSA9PT0gMHgzQikgewotICAgICAgICAgICAgbGV4KCk7Ci0KLSAgICAgICAg
ICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkgewotICAgICAg
ICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVCcmVha1N0YXRlbWVu
dChudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkg
ewotICAgICAgICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gp
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFr
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUJy
ZWFrU3RhdGVtZW50KG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvb2thaGVhZC50
eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBsYWJlbCA9IHBhcnNlVmFy
aWFibGVJZGVudGlmaWVyKCk7Ci0KLSAgICAgICAgICAgIGtleSA9ICckJyArIGxhYmVsLm5hbWU7
Ci0gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChz
dGF0ZS5sYWJlbFNldCwga2V5KSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1l
c3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0KLSAgICAgICAgaWYgKGxhYmVsID09
PSBudWxsICYmICEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7Ci0gICAg
ICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUJyZWFrU3RhdGVtZW50KGxhYmVsKTsK
LSAgICB9Ci0KLSAgICAvLyAxMi45IFRoZSByZXR1cm4gc3RhdGVtZW50Ci0KLSAgICBmdW5jdGlv
biBwYXJzZVJldHVyblN0YXRlbWVudCgpIHsKLSAgICAgICAgdmFyIGFyZ3VtZW50ID0gbnVsbDsK
LQotICAgICAgICBleHBlY3RLZXl3b3JkKCdyZXR1cm4nKTsKLQotICAgICAgICBpZiAoIXN0YXRl
LmluRnVuY3Rpb25Cb2R5KSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1l
c3NhZ2VzLklsbGVnYWxSZXR1cm4pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gJ3JldHVybicg
Zm9sbG93ZWQgYnkgYSBzcGFjZSBhbmQgYW4gaWRlbnRpZmllciBpcyB2ZXJ5IGNvbW1vbi4KLSAg
ICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgyMCkgewotICAgICAgICAg
ICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkpKSB7
Ci0gICAgICAgICAgICAgICAgYXJndW1lbnQgPSBwYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAg
ICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLmNyZWF0ZVJldHVyblN0YXRlbWVudChhcmd1bWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKLSAgICAgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQobnVsbCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIW1hdGNoKCc7JykpIHsKLSAgICAgICAgICAgIGlmICghbWF0Y2goJ30n
KSAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7Ci0gICAgICAgICAgICAgICAgYXJn
dW1lbnQgPSBwYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3Jl
YXRlUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTsKLSAgICB9Ci0KLSAgICAvLyAxMi4xMCBUaGUg
d2l0aCBzdGF0ZW1lbnQKLQotICAgIGZ1bmN0aW9uIHBhcnNlV2l0aFN0YXRlbWVudCgpIHsKLSAg
ICAgICAgdmFyIG9iamVjdCwgYm9keTsKLQotICAgICAgICBpZiAoc3RyaWN0KSB7Ci0gICAgICAg
ICAgICAvLyBUT0RPKGlrYXJpZW5hdG9yKTogU2hvdWxkIHdlIHVwZGF0ZSB0aGUgdGVzdCBjYXNl
cyBpbnN0ZWFkPwotICAgICAgICAgICAgc2tpcENvbW1lbnQoKTsKLSAgICAgICAgICAgIHRocm93
RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0TW9kZVdpdGgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZXhwZWN0S2V5d29yZCgnd2l0aCcpOwotCi0gICAgICAgIGV4cGVjdCgnKCcpOwot
Ci0gICAgICAgIG9iamVjdCA9IHBhcnNlRXhwcmVzc2lvbigpOwotCi0gICAgICAgIGV4cGVjdCgn
KScpOwotCi0gICAgICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOwotCi0gICAgICAgIHJldHVy
biBkZWxlZ2F0ZS5jcmVhdGVXaXRoU3RhdGVtZW50KG9iamVjdCwgYm9keSk7Ci0gICAgfQotCi0g
ICAgLy8gMTIuMTAgVGhlIHN3aXRoIHN0YXRlbWVudAotCi0gICAgZnVuY3Rpb24gcGFyc2VTd2l0
Y2hDYXNlKCkgewotICAgICAgICB2YXIgdGVzdCwgY29uc2VxdWVudCA9IFtdLCBzdGF0ZW1lbnQs
IHN0YXJ0VG9rZW47Ci0KLSAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAg
aWYgKG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAg
ICAgICAgIHRlc3QgPSBudWxsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXhwZWN0
S2V5d29yZCgnY2FzZScpOwotICAgICAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOwot
ICAgICAgICB9Ci0gICAgICAgIGV4cGVjdCgnOicpOwotCi0gICAgICAgIHdoaWxlIChpbmRleCA8
IGxlbmd0aCkgewotICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykgfHwgbWF0Y2hLZXl3b3JkKCdk
ZWZhdWx0JykgfHwgbWF0Y2hLZXl3b3JkKCdjYXNlJykpIHsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50
KCk7Ci0gICAgICAgICAgICBjb25zZXF1ZW50LnB1c2goc3RhdGVtZW50KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVN3aXRjaENh
c2UodGVzdCwgY29uc2VxdWVudCksIHN0YXJ0VG9rZW4pOwotICAgIH0KLQotICAgIGZ1bmN0aW9u
IHBhcnNlU3dpdGNoU3RhdGVtZW50KCkgewotICAgICAgICB2YXIgZGlzY3JpbWluYW50LCBjYXNl
cywgY2xhdXNlLCBvbGRJblN3aXRjaCwgZGVmYXVsdEZvdW5kOwotCi0gICAgICAgIGV4cGVjdEtl
eXdvcmQoJ3N3aXRjaCcpOwotCi0gICAgICAgIGV4cGVjdCgnKCcpOwotCi0gICAgICAgIGRpc2Ny
aW1pbmFudCA9IHBhcnNlRXhwcmVzc2lvbigpOwotCi0gICAgICAgIGV4cGVjdCgnKScpOwotCi0g
ICAgICAgIGV4cGVjdCgneycpOwotCi0gICAgICAgIGNhc2VzID0gW107Ci0KLSAgICAgICAgaWYg
KG1hdGNoKCd9JykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLmNyZWF0ZVN3aXRjaFN0YXRlbWVudChkaXNjcmltaW5hbnQsIGNhc2VzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG9sZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7Ci0gICAgICAgIHN0
YXRlLmluU3dpdGNoID0gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdEZvdW5kID0gZmFsc2U7Ci0KLSAg
ICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2goJ30n
KSkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2xhdXNlID0gcGFyc2VTd2l0Y2hDYXNlKCk7Ci0gICAgICAgICAgICBpZiAoY2xhdXNlLnRlc3Qg
PT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdEZvdW5kKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk11bHRpcGxlRGVmYXVsdHNJblN3
aXRjaCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHRGb3VuZCA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlcy5wdXNoKGNsYXVzZSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IG9sZEluU3dpdGNoOwotCi0gICAg
ICAgIGV4cGVjdCgnfScpOwotCi0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVTd2l0Y2hT
dGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNlcyk7Ci0gICAgfQotCi0gICAgLy8gMTIuMTMgVGhl
IHRocm93IHN0YXRlbWVudAotCi0gICAgZnVuY3Rpb24gcGFyc2VUaHJvd1N0YXRlbWVudCgpIHsK
LSAgICAgICAgdmFyIGFyZ3VtZW50OwotCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ3Rocm93Jyk7
Ci0KLSAgICAgICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7Ci0gICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5OZXdsaW5lQWZ0ZXJUaHJvdyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpOwotCi0gICAgICAgIGNvbnN1bWVTZW1p
Y29sb24oKTsKLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlVGhyb3dTdGF0ZW1lbnQo
YXJndW1lbnQpOwotICAgIH0KLQotICAgIC8vIDEyLjE0IFRoZSB0cnkgc3RhdGVtZW50Ci0KLSAg
ICBmdW5jdGlvbiBwYXJzZUNhdGNoQ2xhdXNlKCkgewotICAgICAgICB2YXIgcGFyYW0sIGJvZHks
IHN0YXJ0VG9rZW47Ci0KLSAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAg
ZXhwZWN0S2V5d29yZCgnY2F0Y2gnKTsKLQotICAgICAgICBleHBlY3QoJygnKTsKLSAgICAgICAg
aWYgKG1hdGNoKCcpJykpIHsKLSAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigp
OwotICAgICAgICAvLyAxMi4xNC4xCi0gICAgICAgIGlmIChzdHJpY3QgJiYgaXNSZXN0cmljdGVk
V29yZChwYXJhbS5uYW1lKSkgewotICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBN
ZXNzYWdlcy5TdHJpY3RDYXRjaFZhcmlhYmxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGV4cGVj
dCgnKScpOwotICAgICAgICBib2R5ID0gcGFyc2VCbG9jaygpOwotICAgICAgICByZXR1cm4gZGVs
ZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVDYXRjaENsYXVzZShwYXJhbSwgYm9keSksIHN0
YXJ0VG9rZW4pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlVHJ5U3RhdGVtZW50KCkgewot
ICAgICAgICB2YXIgYmxvY2ssIGhhbmRsZXJzID0gW10sIGZpbmFsaXplciA9IG51bGw7Ci0KLSAg
ICAgICAgZXhwZWN0S2V5d29yZCgndHJ5Jyk7Ci0KLSAgICAgICAgYmxvY2sgPSBwYXJzZUJsb2Nr
KCk7Ci0KLSAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnY2F0Y2gnKSkgewotICAgICAgICAgICAg
aGFuZGxlcnMucHVzaChwYXJzZUNhdGNoQ2xhdXNlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1hdGNoS2V5d29yZCgnZmluYWxseScpKSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAg
ICAgICAgIGZpbmFsaXplciA9IHBhcnNlQmxvY2soKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChoYW5kbGVycy5sZW5ndGggPT09IDAgJiYgIWZpbmFsaXplcikgewotICAgICAgICAgICAgdGhy
b3dFcnJvcih7fSwgTWVzc2FnZXMuTm9DYXRjaE9yRmluYWxseSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlVHJ5U3RhdGVtZW50KGJsb2NrLCBbXSwgaGFuZGxl
cnMsIGZpbmFsaXplcik7Ci0gICAgfQotCi0gICAgLy8gMTIuMTUgVGhlIGRlYnVnZ2VyIHN0YXRl
bWVudAotCi0gICAgZnVuY3Rpb24gcGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgpIHsKLSAgICAgICAg
ZXhwZWN0S2V5d29yZCgnZGVidWdnZXInKTsKLQotICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7
Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZURlYnVnZ2VyU3RhdGVtZW50KCk7Ci0g
ICAgfQotCi0gICAgLy8gMTIgU3RhdGVtZW50cwotCi0gICAgZnVuY3Rpb24gcGFyc2VTdGF0ZW1l
bnQoKSB7Ci0gICAgICAgIHZhciB0eXBlID0gbG9va2FoZWFkLnR5cGUsCi0gICAgICAgICAgICBl
eHByLAotICAgICAgICAgICAgbGFiZWxlZEJvZHksCi0gICAgICAgICAgICBrZXksCi0gICAgICAg
ICAgICBzdGFydFRva2VuOwotCi0gICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5FT0YpIHsKLSAg
ICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09PSAn
eycpIHsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUJsb2NrKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwotCi0gICAgICAgIGlmICh0eXBlID09PSBUb2tl
bi5QdW5jdHVhdG9yKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkgewot
ICAgICAgICAgICAgY2FzZSAnOyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1h
cmtFbmQocGFyc2VFbXB0eVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKLSAgICAgICAgICAgIGNh
c2UgJygnOgotICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRXhw
cmVzc2lvblN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAodHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgewotICAgICAgICAgICAgc3dpdGNoIChsb29r
YWhlYWQudmFsdWUpIHsKLSAgICAgICAgICAgIGNhc2UgJ2JyZWFrJzoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUJyZWFrU3RhdGVtZW50KCksIHN0YXJ0VG9r
ZW4pOwotICAgICAgICAgICAgY2FzZSAnY29udGludWUnOgotICAgICAgICAgICAgICAgIHJldHVy
biBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlQ29udGludWVTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7
Ci0gICAgICAgICAgICBjYXNlICdkZWJ1Z2dlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLm1hcmtFbmQocGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKLSAg
ICAgICAgICAgIGNhc2UgJ2RvJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFy
a0VuZChwYXJzZURvV2hpbGVTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7Ci0gICAgICAgICAgICBj
YXNlICdmb3InOgotICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNl
Rm9yU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOwotICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24n
OgotICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRnVuY3Rpb25E
ZWNsYXJhdGlvbigpLCBzdGFydFRva2VuKTsKLSAgICAgICAgICAgIGNhc2UgJ2lmJzoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUlmU3RhdGVtZW50KCksIHN0
YXJ0VG9rZW4pOwotICAgICAgICAgICAgY2FzZSAncmV0dXJuJzoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVJldHVyblN0YXRlbWVudCgpLCBzdGFydFRva2Vu
KTsKLSAgICAgICAgICAgIGNhc2UgJ3N3aXRjaCc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLm1hcmtFbmQocGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7Ci0gICAg
ICAgICAgICBjYXNlICd0aHJvdyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1h
cmtFbmQocGFyc2VUaHJvd1N0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKLSAgICAgICAgICAgIGNh
c2UgJ3RyeSc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VU
cnlTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7Ci0gICAgICAgICAgICBjYXNlICd2YXInOgotICAg
ICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlVmFyaWFibGVTdGF0ZW1l
bnQoKSwgc3RhcnRUb2tlbik7Ci0gICAgICAgICAgICBjYXNlICd3aGlsZSc6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VXaGlsZVN0YXRlbWVudCgpLCBzdGFy
dFRva2VuKTsKLSAgICAgICAgICAgIGNhc2UgJ3dpdGgnOgotICAgICAgICAgICAgICAgIHJldHVy
biBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlV2l0aFN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKLSAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7Ci0KLSAgICAg
ICAgLy8gMTIuMTIgTGFiZWxsZWQgU3RhdGVtZW50cwotICAgICAgICBpZiAoKGV4cHIudHlwZSA9
PT0gU3ludGF4LklkZW50aWZpZXIpICYmIG1hdGNoKCc6JykpIHsKLSAgICAgICAgICAgIGxleCgp
OwotCi0gICAgICAgICAgICBrZXkgPSAnJCcgKyBleHByLm5hbWU7Ci0gICAgICAgICAgICBpZiAo
T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkp
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuUmVkZWNsYXJhdGlv
biwgJ0xhYmVsJywgZXhwci5uYW1lKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3Rh
dGUubGFiZWxTZXRba2V5XSA9IHRydWU7Ci0gICAgICAgICAgICBsYWJlbGVkQm9keSA9IHBhcnNl
U3RhdGVtZW50KCk7Ci0gICAgICAgICAgICBkZWxldGUgc3RhdGUubGFiZWxTZXRba2V5XTsKLSAg
ICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUxhYmVsZWRT
dGF0ZW1lbnQoZXhwciwgbGFiZWxlZEJvZHkpLCBzdGFydFRva2VuKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKLQotICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFy
a0VuZChkZWxlZ2F0ZS5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpLCBzdGFydFRva2Vu
KTsKLSAgICB9Ci0KLSAgICAvLyAxMyBGdW5jdGlvbiBEZWZpbml0aW9uCi0KLSAgICBmdW5jdGlv
biBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKSB7Ci0gICAgICAgIHZhciBzb3VyY2VFbGVt
ZW50LCBzb3VyY2VFbGVtZW50cyA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0
ZWQsCi0gICAgICAgICAgICBvbGRMYWJlbFNldCwgb2xkSW5JdGVyYXRpb24sIG9sZEluU3dpdGNo
LCBvbGRJbkZ1bmN0aW9uQm9keSwgc3RhcnRUb2tlbjsKLQotICAgICAgICBzdGFydFRva2VuID0g
bG9va2FoZWFkOwotICAgICAgICBleHBlY3QoJ3snKTsKLQotICAgICAgICB3aGlsZSAoaW5kZXgg
PCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uU3Ry
aW5nTGl0ZXJhbCkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7Ci0KLSAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQg
PSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKLSAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2go
c291cmNlRWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoc291cmNlRWxlbWVudC5leHByZXNzaW9u
LnR5cGUgIT09IFN5bnRheC5MaXRlcmFsKSB7Ci0gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBu
b3QgZGlyZWN0aXZlCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBkaXJlY3RpdmUgPSBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQgKyAxLCB0b2tlbi5l
bmQgLSAxKTsKLSAgICAgICAgICAgIGlmIChkaXJlY3RpdmUgPT09ICd1c2Ugc3RyaWN0Jykgewot
ICAgICAgICAgICAgICAgIHN0cmljdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0
UmVzdHJpY3RlZCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoZmly
c3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJl
c3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0
cmljdGVkID0gdG9rZW47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgb2xkTGFiZWxTZXQgPSBzdGF0ZS5sYWJlbFNldDsKLSAgICAgICAgb2xk
SW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjsKLSAgICAgICAgb2xkSW5Td2l0Y2ggPSBz
dGF0ZS5pblN3aXRjaDsKLSAgICAgICAgb2xkSW5GdW5jdGlvbkJvZHkgPSBzdGF0ZS5pbkZ1bmN0
aW9uQm9keTsKLQotICAgICAgICBzdGF0ZS5sYWJlbFNldCA9IHt9OwotICAgICAgICBzdGF0ZS5p
bkl0ZXJhdGlvbiA9IGZhbHNlOwotICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IGZhbHNlOwotICAg
ICAgICBzdGF0ZS5pbkZ1bmN0aW9uQm9keSA9IHRydWU7Ci0KLSAgICAgICAgd2hpbGUgKGluZGV4
IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2goJ30nKSkgewotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBh
cnNlU291cmNlRWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VFbGVtZW50
ID09PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGV4cGVjdCgnfScpOwotCi0gICAgICAgIHN0YXRlLmxhYmVsU2V0ID0g
b2xkTGFiZWxTZXQ7Ci0gICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247
Ci0gICAgICAgIHN0YXRlLmluU3dpdGNoID0gb2xkSW5Td2l0Y2g7Ci0gICAgICAgIHN0YXRlLmlu
RnVuY3Rpb25Cb2R5ID0gb2xkSW5GdW5jdGlvbkJvZHk7Ci0KLSAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlQmxvY2tTdGF0ZW1lbnQoc291cmNlRWxlbWVudHMp
LCBzdGFydFRva2VuKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZVBhcmFtcyhmaXJzdFJl
c3RyaWN0ZWQpIHsKLSAgICAgICAgdmFyIHBhcmFtLCBwYXJhbXMgPSBbXSwgdG9rZW4sIHN0cmlj
dGVkLCBwYXJhbVNldCwga2V5LCBtZXNzYWdlOwotICAgICAgICBleHBlY3QoJygnKTsKLQotICAg
ICAgICBpZiAoIW1hdGNoKCcpJykpIHsKLSAgICAgICAgICAgIHBhcmFtU2V0ID0ge307Ci0gICAg
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9
IGxvb2thaGVhZDsKLSAgICAgICAgICAgICAgICBwYXJhbSA9IHBhcnNlVmFyaWFibGVJZGVudGlm
aWVyKCk7Ci0gICAgICAgICAgICAgICAga2V5ID0gJyQnICsgdG9rZW4udmFsdWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKHN0cmljdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmlj
dGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmljdGVk
ID0gdG9rZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3Ry
aWN0UGFyYW1OYW1lOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyYW1TZXQsIGtleSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmljdGVkID0gdG9rZW47Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZmlyc3RSZXN0cmlj
dGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZh
bHVlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1O
YW1lOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0TW9kZVJlc2VydmVk
V29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJp
Y3RlZCA9IHRva2VuOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2Vz
LlN0cmljdFJlc2VydmVkV29yZDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChPYmpl
Y3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyYW1TZXQsIGtleSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYXJhbXMu
cHVzaChwYXJhbSk7Ci0gICAgICAgICAgICAgICAgcGFyYW1TZXRba2V5XSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1hdGNoKCcpJykpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZXhwZWN0KCcpJyk7Ci0KLSAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLAotICAgICAgICAgICAgc3RyaWN0ZWQ6
IHN0cmljdGVkLAotICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBmaXJzdFJlc3RyaWN0ZWQs
Ci0gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlCi0gICAgICAgIH07Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCkgewotICAgICAgICB2YXIgaWQsIHBh
cmFtcyA9IFtdLCBib2R5LCB0b2tlbiwgc3RyaWN0ZWQsIHRtcCwgZmlyc3RSZXN0cmljdGVkLCBt
ZXNzYWdlLCBwcmV2aW91c1N0cmljdCwgc3RhcnRUb2tlbjsKLQotICAgICAgICBzdGFydFRva2Vu
ID0gbG9va2FoZWFkOwotCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7Ci0gICAg
ICAgIHRva2VuID0gbG9va2FoZWFkOwotICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlm
aWVyKCk7Ci0gICAgICAgIGlmIChzdHJpY3QpIHsKLSAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0
ZWRXb3JkKHRva2VuLnZhbHVlKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFu
dCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZh
bHVlKSkgewotICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOwotICAgICAg
ICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsK
LSAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKLSAgICAgICAgICAgICAg
ICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgdG1wID0gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKTsK
LSAgICAgICAgcGFyYW1zID0gdG1wLnBhcmFtczsKLSAgICAgICAgc3RyaWN0ZWQgPSB0bXAuc3Ry
aWN0ZWQ7Ci0gICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRtcC5maXJzdFJlc3RyaWN0ZWQ7Ci0g
ICAgICAgIGlmICh0bXAubWVzc2FnZSkgewotICAgICAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNz
YWdlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7Ci0gICAg
ICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTsKLSAgICAgICAgaWYgKHN0
cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoZmlyc3RS
ZXN0cmljdGVkLCBtZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RyaWN0ICYmIHN0
cmljdGVkKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoc3RyaWN0ZWQsIG1lc3Nh
Z2UpOwotICAgICAgICB9Ci0gICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OwotCi0gICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oaWQsIHBhcmFtcywgW10sIGJvZHkpLCBzdGFydFRva2VuKTsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIHRva2VuLCBp
ZCA9IG51bGwsIHN0cmljdGVkLCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHRtcCwgcGFyYW1z
ID0gW10sIGJvZHksIHByZXZpb3VzU3RyaWN0LCBzdGFydFRva2VuOwotCi0gICAgICAgIHN0YXJ0
VG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7Ci0K
LSAgICAgICAgaWYgKCFtYXRjaCgnKCcpKSB7Ci0gICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVh
ZDsKLSAgICAgICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLSAgICAgICAg
ICAgIGlmIChzdHJpY3QpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0
b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRv
a2VuLCBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQo
dG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRv
a2VuOwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0RnVuY3Rp
b25OYW1lOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRX
b3JkKHRva2VuLnZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQg
PSB0b2tlbjsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJl
c2VydmVkV29yZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICB0bXAgPSBwYXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpOwotICAgICAgICBw
YXJhbXMgPSB0bXAucGFyYW1zOwotICAgICAgICBzdHJpY3RlZCA9IHRtcC5zdHJpY3RlZDsKLSAg
ICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDsKLSAgICAgICAgaWYg
KHRtcC5tZXNzYWdlKSB7Ci0gICAgICAgICAgICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDsKLSAgICAgICAgYm9keSA9
IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpOwotICAgICAgICBpZiAoc3RyaWN0ICYmIGZp
cnN0UmVzdHJpY3RlZCkgewotICAgICAgICAgICAgdGhyb3dFcnJvcihmaXJzdFJlc3RyaWN0ZWQs
IG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdHJpY3QgJiYgc3RyaWN0ZWQpIHsK
LSAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChzdHJpY3RlZCwgbWVzc2FnZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7Ci0KLSAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKGlkLCBw
YXJhbXMsIFtdLCBib2R5KSwgc3RhcnRUb2tlbik7Ci0gICAgfQotCi0gICAgLy8gMTQgUHJvZ3Jh
bQotCi0gICAgZnVuY3Rpb24gcGFyc2VTb3VyY2VFbGVtZW50KCkgewotICAgICAgICBpZiAobG9v
a2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobG9v
a2FoZWFkLnZhbHVlKSB7Ci0gICAgICAgICAgICBjYXNlICdjb25zdCc6Ci0gICAgICAgICAgICBj
YXNlICdsZXQnOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbnN0TGV0RGVjbGFyYXRp
b24obG9va2FoZWFkLnZhbHVlKTsKLSAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVN0YXRlbWVudCgpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBU
b2tlbi5FT0YpIHsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVN0YXRlbWVudCgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VTb3VyY2VFbGVtZW50cygpIHsKLSAgICAg
ICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJjZUVsZW1lbnRzID0gW10sIHRva2VuLCBkaXJlY3Rp
dmUsIGZpcnN0UmVzdHJpY3RlZDsKLQotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsK
LSAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOwotICAgICAgICAgICAgaWYgKHRva2VuLnR5
cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxl
bWVudCgpOwotICAgICAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsK
LSAgICAgICAgICAgIGlmIChzb3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gU3ludGF4
LkxpdGVyYWwpIHsKLSAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmUKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRpcmVjdGl2
ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCArIDEsIHRva2VuLmVuZCAtIDEpOwotICAgICAg
ICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gJ3VzZSBzdHJpY3QnKSB7Ci0gICAgICAgICAgICAgICAg
c3RyaWN0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1l
c3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tl
bi5vY3RhbCkgewotICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB3
aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJz
ZVNvdXJjZUVsZW1lbnQoKTsKLSAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLwot
ICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VFbGVtZW50ID09PSAndW5kZWZpbmVkJykgewot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc291cmNl
RWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
c291cmNlRWxlbWVudHM7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VQcm9ncmFtKCkgewot
ICAgICAgICB2YXIgYm9keSwgc3RhcnRUb2tlbjsKLQotICAgICAgICBza2lwQ29tbWVudCgpOwot
ICAgICAgICBwZWVrKCk7Ci0gICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAg
IHN0cmljdCA9IGZhbHNlOwotCi0gICAgICAgIGJvZHkgPSBwYXJzZVNvdXJjZUVsZW1lbnRzKCk7
Ci0gICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVByb2dyYW0o
Ym9keSksIHN0YXJ0VG9rZW4pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGZpbHRlclRva2VuTG9j
YXRpb24oKSB7Ci0gICAgICAgIHZhciBpLCBlbnRyeSwgdG9rZW4sIHRva2VucyA9IFtdOwotCi0g
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBleHRyYS50b2tlbnMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIGVudHJ5ID0gZXh0cmEudG9rZW5zW2ldOwotICAgICAgICAgICAgdG9rZW4gPSB7Ci0g
ICAgICAgICAgICAgICAgdHlwZTogZW50cnkudHlwZSwKLSAgICAgICAgICAgICAgICB2YWx1ZTog
ZW50cnkudmFsdWUKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBpZiAoZXh0cmEucmFuZ2Up
IHsKLSAgICAgICAgICAgICAgICB0b2tlbi5yYW5nZSA9IGVudHJ5LnJhbmdlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGV4dHJhLmxvYykgewotICAgICAgICAgICAgICAgIHRva2Vu
LmxvYyA9IGVudHJ5LmxvYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRva2Vucy5wdXNo
KHRva2VuKTsKLSAgICAgICAgfQotCi0gICAgICAgIGV4dHJhLnRva2VucyA9IHRva2VuczsKLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiB0b2tlbml6ZShjb2RlLCBvcHRpb25zKSB7Ci0gICAgICAgIHZh
ciB0b1N0cmluZywKLSAgICAgICAgICAgIHRva2VuLAotICAgICAgICAgICAgdG9rZW5zOwotCi0g
ICAgICAgIHRvU3RyaW5nID0gU3RyaW5nOwotICAgICAgICBpZiAodHlwZW9mIGNvZGUgIT09ICdz
dHJpbmcnICYmICEoY29kZSBpbnN0YW5jZW9mIFN0cmluZykpIHsKLSAgICAgICAgICAgIGNvZGUg
PSB0b1N0cmluZyhjb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlID0gU3ludGF4
VHJlZURlbGVnYXRlOwotICAgICAgICBzb3VyY2UgPSBjb2RlOwotICAgICAgICBpbmRleCA9IDA7
Ci0gICAgICAgIGxpbmVOdW1iZXIgPSAoc291cmNlLmxlbmd0aCA+IDApID8gMSA6IDA7Ci0gICAg
ICAgIGxpbmVTdGFydCA9IDA7Ci0gICAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7Ci0gICAg
ICAgIGxvb2thaGVhZCA9IG51bGw7Ci0gICAgICAgIHN0YXRlID0gewotICAgICAgICAgICAgYWxs
b3dJbjogdHJ1ZSwKLSAgICAgICAgICAgIGxhYmVsU2V0OiB7fSwKLSAgICAgICAgICAgIGluRnVu
Y3Rpb25Cb2R5OiBmYWxzZSwKLSAgICAgICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSwKLSAgICAg
ICAgICAgIGluU3dpdGNoOiBmYWxzZSwKLSAgICAgICAgICAgIGxhc3RDb21tZW50U3RhcnQ6IC0x
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZXh0cmEgPSB7fTsKLQotICAgICAgICAvLyBPcHRpb25z
IG1hdGNoaW5nLgotICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgICAgICAv
LyBPZiBjb3Vyc2Ugd2UgY29sbGVjdCB0b2tlbnMgaGVyZS4KLSAgICAgICAgb3B0aW9ucy50b2tl
bnMgPSB0cnVlOwotICAgICAgICBleHRyYS50b2tlbnMgPSBbXTsKLSAgICAgICAgZXh0cmEudG9r
ZW5pemUgPSB0cnVlOwotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIHR3byBmaWVsZHMgYXJlIG5l
Y2Vzc2FyeSB0byBjb21wdXRlIHRoZSBSZWdleCB0b2tlbnMuCi0gICAgICAgIGV4dHJhLm9wZW5Q
YXJlblRva2VuID0gLTE7Ci0gICAgICAgIGV4dHJhLm9wZW5DdXJseVRva2VuID0gLTE7Ci0KLSAg
ICAgICAgZXh0cmEucmFuZ2UgPSAodHlwZW9mIG9wdGlvbnMucmFuZ2UgPT09ICdib29sZWFuJykg
JiYgb3B0aW9ucy5yYW5nZTsKLSAgICAgICAgZXh0cmEubG9jID0gKHR5cGVvZiBvcHRpb25zLmxv
YyA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLmxvYzsKLQotICAgICAgICBpZiAodHlwZW9mIG9w
dGlvbnMuY29tbWVudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCkgewotICAgICAg
ICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHlwZW9m
IG9wdGlvbnMudG9sZXJhbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRvbGVyYW50KSB7Ci0g
ICAgICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICBwZWVrKCk7Ci0gICAgICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09
IFRva2VuLkVPRikgewotICAgICAgICAgICAgICAgIHJldHVybiBleHRyYS50b2tlbnM7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRva2VuID0gbGV4KCk7Ci0gICAgICAgICAgICB3aGls
ZSAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikgewotICAgICAgICAgICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRva2VuID0gbGV4KCk7Ci0gICAgICAgICAgICAgICAgfSBj
YXRjaCAobGV4RXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChleHRyYS5lcnJvcnMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGV4dHJhLmVycm9ycy5wdXNoKGxleEVycm9yKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIGhhdmUgdG8gYnJlYWsgb24gdGhlIGZpcnN0IGVycm9yCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0byBhdm9pZCBpbmZpbml0ZSBsb29wcy4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbGV4RXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbHRlclRva2Vu
TG9jYXRpb24oKTsKLSAgICAgICAgICAgIHRva2VucyA9IGV4dHJhLnRva2VuczsKLSAgICAgICAg
ICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAg
ICAgICAgICAgdG9rZW5zLmNvbW1lbnRzID0gZXh0cmEuY29tbWVudHM7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmVycm9ycyAhPT0gJ3VuZGVmaW5lZCcpIHsK
LSAgICAgICAgICAgICAgICB0b2tlbnMuZXJyb3JzID0gZXh0cmEuZXJyb3JzOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICB0aHJvdyBlOwotICAgICAg
ICB9IGZpbmFsbHkgewotICAgICAgICAgICAgZXh0cmEgPSB7fTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gdG9rZW5zOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlKGNvZGUsIG9wdGlv
bnMpIHsKLSAgICAgICAgdmFyIHByb2dyYW0sIHRvU3RyaW5nOwotCi0gICAgICAgIHRvU3RyaW5n
ID0gU3RyaW5nOwotICAgICAgICBpZiAodHlwZW9mIGNvZGUgIT09ICdzdHJpbmcnICYmICEoY29k
ZSBpbnN0YW5jZW9mIFN0cmluZykpIHsKLSAgICAgICAgICAgIGNvZGUgPSB0b1N0cmluZyhjb2Rl
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGRlbGVnYXRlID0gU3ludGF4VHJlZURlbGVnYXRlOwot
ICAgICAgICBzb3VyY2UgPSBjb2RlOwotICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgIGxpbmVO
dW1iZXIgPSAoc291cmNlLmxlbmd0aCA+IDApID8gMSA6IDA7Ci0gICAgICAgIGxpbmVTdGFydCA9
IDA7Ci0gICAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7Ci0gICAgICAgIGxvb2thaGVhZCA9
IG51bGw7Ci0gICAgICAgIHN0YXRlID0gewotICAgICAgICAgICAgYWxsb3dJbjogdHJ1ZSwKLSAg
ICAgICAgICAgIGxhYmVsU2V0OiB7fSwKLSAgICAgICAgICAgIGluRnVuY3Rpb25Cb2R5OiBmYWxz
ZSwKLSAgICAgICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSwKLSAgICAgICAgICAgIGluU3dpdGNo
OiBmYWxzZSwKLSAgICAgICAgICAgIGxhc3RDb21tZW50U3RhcnQ6IC0xCi0gICAgICAgIH07Ci0K
LSAgICAgICAgZXh0cmEgPSB7fTsKLSAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAndW5k
ZWZpbmVkJykgewotICAgICAgICAgICAgZXh0cmEucmFuZ2UgPSAodHlwZW9mIG9wdGlvbnMucmFu
Z2UgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5yYW5nZTsKLSAgICAgICAgICAgIGV4dHJhLmxv
YyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5sb2M7Ci0g
ICAgICAgICAgICBleHRyYS5hdHRhY2hDb21tZW50ID0gKHR5cGVvZiBvcHRpb25zLmF0dGFjaENv
bW1lbnQgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5hdHRhY2hDb21tZW50OwotCi0gICAgICAg
ICAgICBpZiAoZXh0cmEubG9jICYmIG9wdGlvbnMuc291cmNlICE9PSBudWxsICYmIG9wdGlvbnMu
c291cmNlICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICBleHRyYS5zb3VyY2UgPSB0
b1N0cmluZyhvcHRpb25zLnNvdXJjZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICh0eXBlb2Ygb3B0aW9ucy50b2tlbnMgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRva2Vucykg
ewotICAgICAgICAgICAgICAgIGV4dHJhLnRva2VucyA9IFtdOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbW1lbnQgPT09ICdib29sZWFuJyAmJiBvcHRp
b25zLmNvbW1lbnQpIHsKLSAgICAgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSAn
Ym9vbGVhbicgJiYgb3B0aW9ucy50b2xlcmFudCkgewotICAgICAgICAgICAgICAgIGV4dHJhLmVy
cm9ycyA9IFtdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4dHJhLmF0dGFjaENv
bW1lbnQpIHsKLSAgICAgICAgICAgICAgICBleHRyYS5yYW5nZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTsKLSAgICAgICAgICAgICAgICBleHRyYS5ib3R0b21S
aWdodFN0YWNrID0gW107Ci0gICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cyA9
IFtdOwotICAgICAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9IFtdOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHByb2dyYW0g
PSBwYXJzZVByb2dyYW0oKTsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMg
IT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICAgICAgcHJvZ3JhbS5jb21tZW50cyA9IGV4
dHJhLmNvbW1lbnRzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRy
YS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICAgICAgZmlsdGVyVG9rZW5M
b2NhdGlvbigpOwotICAgICAgICAgICAgICAgIHByb2dyYW0udG9rZW5zID0gZXh0cmEudG9rZW5z
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09
ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICAgICAgcHJvZ3JhbS5lcnJvcnMgPSBleHRyYS5l
cnJvcnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAg
IHRocm93IGU7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBleHRyYSA9IHt9Owot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHByb2dyYW07Ci0gICAgfQotCi0gICAgLy8gU3lu
YyB3aXRoICouanNvbiBtYW5pZmVzdHMuCi0gICAgZXhwb3J0cy52ZXJzaW9uID0gJzEuMi4yJzsK
LQotICAgIGV4cG9ydHMudG9rZW5pemUgPSB0b2tlbml6ZTsKLQotICAgIGV4cG9ydHMucGFyc2Ug
PSBwYXJzZTsKLQotICAgIC8vIERlZXAgY29weS4KLSAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0
ICovCi0gICAgZXhwb3J0cy5TeW50YXggPSAoZnVuY3Rpb24gKCkgewotICAgICAgICB2YXIgbmFt
ZSwgdHlwZXMgPSB7fTsKLQotICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdm
dW5jdGlvbicpIHsKLSAgICAgICAgICAgIHR5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZvciAobmFtZSBpbiBTeW50YXgpIHsKLSAgICAgICAgICAgIGlm
IChTeW50YXguaGFzT3duUHJvcGVydHkobmFtZSkpIHsKLSAgICAgICAgICAgICAgICB0eXBlc1tu
YW1lXSA9IFN5bnRheFtuYW1lXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmICh0eXBlb2YgT2JqZWN0LmZyZWV6ZSA9PT0gJ2Z1bmN0aW9uJykgewotICAgICAgICAgICAg
T2JqZWN0LmZyZWV6ZSh0eXBlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHlwZXM7
Ci0gICAgfSgpKTsKLQotfSkpOwotLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi8K
LQotfSx7fV0sNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKgotICBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxMyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
Ci0gIENvcHlyaWdodCAoQykgMjAxMiBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWls
LmNvbT4KLQotICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLSAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLQotICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLSAgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQotICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENP
UFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZCi0gIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLS8qanNsaW50IHZhcnM6
ZmFsc2UsIGJpdHdpc2U6dHJ1ZSovCi0vKmpzaGludCBpbmRlbnQ6NCovCi0vKmdsb2JhbCBleHBv
cnRzOnRydWUsIGRlZmluZTp0cnVlKi8KLShmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkgewotICAg
ICd1c2Ugc3RyaWN0JzsKLQotICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1E
KSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywKLSAgICAvLyBhbmQgcGxhaW4gYnJv
d3NlciBsb2FkaW5nLAotICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRl
ZmluZS5hbWQpIHsKLSAgICAgICAgZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KTsKLSAgICB9
IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykgewotICAgICAgICBmYWN0
b3J5KGV4cG9ydHMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZhY3RvcnkoKHJvb3QuZXN0cmF2
ZXJzZSA9IHt9KSk7Ci0gICAgfQotfSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cykgewotICAgICd1
c2Ugc3RyaWN0JzsKLQotICAgIHZhciBTeW50YXgsCi0gICAgICAgIGlzQXJyYXksCi0gICAgICAg
IFZpc2l0b3JPcHRpb24sCi0gICAgICAgIFZpc2l0b3JLZXlzLAotICAgICAgICBCUkVBSywKLSAg
ICAgICAgU0tJUDsKLQotICAgIFN5bnRheCA9IHsKLSAgICAgICAgQXNzaWdubWVudEV4cHJlc3Np
b246ICdBc3NpZ25tZW50RXhwcmVzc2lvbicsCi0gICAgICAgIEFycmF5RXhwcmVzc2lvbjogJ0Fy
cmF5RXhwcmVzc2lvbicsCi0gICAgICAgIEFycmF5UGF0dGVybjogJ0FycmF5UGF0dGVybicsCi0g
ICAgICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24n
LAotICAgICAgICBCbG9ja1N0YXRlbWVudDogJ0Jsb2NrU3RhdGVtZW50JywKLSAgICAgICAgQmlu
YXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Npb24nLAotICAgICAgICBCcmVha1N0YXRlbWVu
dDogJ0JyZWFrU3RhdGVtZW50JywKLSAgICAgICAgQ2FsbEV4cHJlc3Npb246ICdDYWxsRXhwcmVz
c2lvbicsCi0gICAgICAgIENhdGNoQ2xhdXNlOiAnQ2F0Y2hDbGF1c2UnLAotICAgICAgICBDbGFz
c0JvZHk6ICdDbGFzc0JvZHknLAotICAgICAgICBDbGFzc0RlY2xhcmF0aW9uOiAnQ2xhc3NEZWNs
YXJhdGlvbicsCi0gICAgICAgIENsYXNzRXhwcmVzc2lvbjogJ0NsYXNzRXhwcmVzc2lvbicsCi0g
ICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbicsCi0g
ICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQnLAotICAgICAgICBE
ZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JywKLSAgICAgICAgRGlyZWN0aXZl
U3RhdGVtZW50OiAnRGlyZWN0aXZlU3RhdGVtZW50JywKLSAgICAgICAgRG9XaGlsZVN0YXRlbWVu
dDogJ0RvV2hpbGVTdGF0ZW1lbnQnLAotICAgICAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3Rh
dGVtZW50JywKLSAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudDogJ0V4cHJlc3Npb25TdGF0ZW1l
bnQnLAotICAgICAgICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLAotICAgICAgICBGb3JJ
blN0YXRlbWVudDogJ0ZvckluU3RhdGVtZW50JywKLSAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlv
bjogJ0Z1bmN0aW9uRGVjbGFyYXRpb24nLAotICAgICAgICBGdW5jdGlvbkV4cHJlc3Npb246ICdG
dW5jdGlvbkV4cHJlc3Npb24nLAotICAgICAgICBJZGVudGlmaWVyOiAnSWRlbnRpZmllcicsCi0g
ICAgICAgIElmU3RhdGVtZW50OiAnSWZTdGF0ZW1lbnQnLAotICAgICAgICBMaXRlcmFsOiAnTGl0
ZXJhbCcsCi0gICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6ICdMYWJlbGVkU3RhdGVtZW50JywKLSAg
ICAgICAgTG9naWNhbEV4cHJlc3Npb246ICdMb2dpY2FsRXhwcmVzc2lvbicsCi0gICAgICAgIE1l
bWJlckV4cHJlc3Npb246ICdNZW1iZXJFeHByZXNzaW9uJywKLSAgICAgICAgTWV0aG9kRGVmaW5p
dGlvbjogJ01ldGhvZERlZmluaXRpb24nLAotICAgICAgICBOZXdFeHByZXNzaW9uOiAnTmV3RXhw
cmVzc2lvbicsCi0gICAgICAgIE9iamVjdEV4cHJlc3Npb246ICdPYmplY3RFeHByZXNzaW9uJywK
LSAgICAgICAgT2JqZWN0UGF0dGVybjogJ09iamVjdFBhdHRlcm4nLAotICAgICAgICBQcm9ncmFt
OiAnUHJvZ3JhbScsCi0gICAgICAgIFByb3BlcnR5OiAnUHJvcGVydHknLAotICAgICAgICBSZXR1
cm5TdGF0ZW1lbnQ6ICdSZXR1cm5TdGF0ZW1lbnQnLAotICAgICAgICBTZXF1ZW5jZUV4cHJlc3Np
b246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLAotICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0
Y2hTdGF0ZW1lbnQnLAotICAgICAgICBTd2l0Y2hDYXNlOiAnU3dpdGNoQ2FzZScsCi0gICAgICAg
IFRoaXNFeHByZXNzaW9uOiAnVGhpc0V4cHJlc3Npb24nLAotICAgICAgICBUaHJvd1N0YXRlbWVu
dDogJ1Rocm93U3RhdGVtZW50JywKLSAgICAgICAgVHJ5U3RhdGVtZW50OiAnVHJ5U3RhdGVtZW50
JywKLSAgICAgICAgVW5hcnlFeHByZXNzaW9uOiAnVW5hcnlFeHByZXNzaW9uJywKLSAgICAgICAg
VXBkYXRlRXhwcmVzc2lvbjogJ1VwZGF0ZUV4cHJlc3Npb24nLAotICAgICAgICBWYXJpYWJsZURl
Y2xhcmF0aW9uOiAnVmFyaWFibGVEZWNsYXJhdGlvbicsCi0gICAgICAgIFZhcmlhYmxlRGVjbGFy
YXRvcjogJ1ZhcmlhYmxlRGVjbGFyYXRvcicsCi0gICAgICAgIFdoaWxlU3RhdGVtZW50OiAnV2hp
bGVTdGF0ZW1lbnQnLAotICAgICAgICBXaXRoU3RhdGVtZW50OiAnV2l0aFN0YXRlbWVudCcsCi0g
ICAgICAgIFlpZWxkRXhwcmVzc2lvbjogJ1lpZWxkRXhwcmVzc2lvbicKLSAgICB9OwotCi0gICAg
ZnVuY3Rpb24gaWdub3JlSlNIaW50RXJyb3IoKSB7IH0KLQotICAgIGlzQXJyYXkgPSBBcnJheS5p
c0FycmF5OwotICAgIGlmICghaXNBcnJheSkgewotICAgICAgICBpc0FycmF5ID0gZnVuY3Rpb24g
aXNBcnJheShhcnJheSkgewotICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9T
dHJpbmcuY2FsbChhcnJheSkgPT09ICdbb2JqZWN0IEFycmF5XSc7Ci0gICAgICAgIH07Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7Ci0gICAgICAgIHZhciByZXQgPSB7fSwg
a2V5LCB2YWw7Ci0gICAgICAgIGZvciAoa2V5IGluIG9iaikgewotICAgICAgICAgICAgaWYgKG9i
ai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgICAgICAgICAgdmFsID0gb2JqW2tleV07
Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0g
bnVsbCkgewotICAgICAgICAgICAgICAgICAgICByZXRba2V5XSA9IGRlZXBDb3B5KHZhbCk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0W2tleV0gPSB2
YWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2hhbGxvd0NvcHkob2JqKSB7Ci0g
ICAgICAgIHZhciByZXQgPSB7fSwga2V5OwotICAgICAgICBmb3IgKGtleSBpbiBvYmopIHsKLSAg
ICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgICAg
IHJldFtrZXldID0gb2JqW2tleV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHJldDsKLSAgICB9Ci0gICAgaWdub3JlSlNIaW50RXJyb3Ioc2hhbGxvd0NvcHkpOwot
Ci0gICAgLy8gYmFzZWQgb24gTExWTSBsaWJjKysgdXBwZXJfYm91bmQgLyBsb3dlcl9ib3VuZAot
ICAgIC8vIE1JVCBMaWNlbnNlCi0KLSAgICBmdW5jdGlvbiB1cHBlckJvdW5kKGFycmF5LCBmdW5j
KSB7Ci0gICAgICAgIHZhciBkaWZmLCBsZW4sIGksIGN1cnJlbnQ7Ci0KLSAgICAgICAgbGVuID0g
YXJyYXkubGVuZ3RoOwotICAgICAgICBpID0gMDsKLQotICAgICAgICB3aGlsZSAobGVuKSB7Ci0g
ICAgICAgICAgICBkaWZmID0gbGVuID4+PiAxOwotICAgICAgICAgICAgY3VycmVudCA9IGkgKyBk
aWZmOwotICAgICAgICAgICAgaWYgKGZ1bmMoYXJyYXlbY3VycmVudF0pKSB7Ci0gICAgICAgICAg
ICAgICAgbGVuID0gZGlmZjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aSA9IGN1cnJlbnQgKyAxOwotICAgICAgICAgICAgICAgIGxlbiAtPSBkaWZmICsgMTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBsb3dlckJvdW5kKGFycmF5LCBmdW5jKSB7Ci0gICAgICAgIHZhciBkaWZmLCBsZW4sIGks
IGN1cnJlbnQ7Ci0KLSAgICAgICAgbGVuID0gYXJyYXkubGVuZ3RoOwotICAgICAgICBpID0gMDsK
LQotICAgICAgICB3aGlsZSAobGVuKSB7Ci0gICAgICAgICAgICBkaWZmID0gbGVuID4+PiAxOwot
ICAgICAgICAgICAgY3VycmVudCA9IGkgKyBkaWZmOwotICAgICAgICAgICAgaWYgKGZ1bmMoYXJy
YXlbY3VycmVudF0pKSB7Ci0gICAgICAgICAgICAgICAgaSA9IGN1cnJlbnQgKyAxOwotICAgICAg
ICAgICAgICAgIGxlbiAtPSBkaWZmICsgMTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgbGVuID0gZGlmZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gaTsKLSAgICB9Ci0gICAgaWdub3JlSlNIaW50RXJyb3IobG93ZXJCb3VuZCk7Ci0KLSAg
ICBWaXNpdG9yS2V5cyA9IHsKLSAgICAgICAgQXNzaWdubWVudEV4cHJlc3Npb246IFsnbGVmdCcs
ICdyaWdodCddLAotICAgICAgICBBcnJheUV4cHJlc3Npb246IFsnZWxlbWVudHMnXSwKLSAgICAg
ICAgQXJyYXlQYXR0ZXJuOiBbJ2VsZW1lbnRzJ10sCi0gICAgICAgIEFycm93RnVuY3Rpb25FeHBy
ZXNzaW9uOiBbJ3BhcmFtcycsICdkZWZhdWx0cycsICdyZXN0JywgJ2JvZHknXSwKLSAgICAgICAg
QmxvY2tTdGF0ZW1lbnQ6IFsnYm9keSddLAotICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiBbJ2xl
ZnQnLCAncmlnaHQnXSwKLSAgICAgICAgQnJlYWtTdGF0ZW1lbnQ6IFsnbGFiZWwnXSwKLSAgICAg
ICAgQ2FsbEV4cHJlc3Npb246IFsnY2FsbGVlJywgJ2FyZ3VtZW50cyddLAotICAgICAgICBDYXRj
aENsYXVzZTogWydwYXJhbScsICdib2R5J10sCi0gICAgICAgIENsYXNzQm9keTogWydib2R5J10s
Ci0gICAgICAgIENsYXNzRGVjbGFyYXRpb246IFsnaWQnLCAnYm9keScsICdzdXBlckNsYXNzJ10s
Ci0gICAgICAgIENsYXNzRXhwcmVzc2lvbjogWydpZCcsICdib2R5JywgJ3N1cGVyQ2xhc3MnXSwK
LSAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiBbJ3Rlc3QnLCAnY29uc2VxdWVudCcsICdh
bHRlcm5hdGUnXSwKLSAgICAgICAgQ29udGludWVTdGF0ZW1lbnQ6IFsnbGFiZWwnXSwKLSAgICAg
ICAgRGVidWdnZXJTdGF0ZW1lbnQ6IFtdLAotICAgICAgICBEaXJlY3RpdmVTdGF0ZW1lbnQ6IFtd
LAotICAgICAgICBEb1doaWxlU3RhdGVtZW50OiBbJ2JvZHknLCAndGVzdCddLAotICAgICAgICBF
bXB0eVN0YXRlbWVudDogW10sCi0gICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6IFsnZXhwcmVz
c2lvbiddLAotICAgICAgICBGb3JTdGF0ZW1lbnQ6IFsnaW5pdCcsICd0ZXN0JywgJ3VwZGF0ZScs
ICdib2R5J10sCi0gICAgICAgIEZvckluU3RhdGVtZW50OiBbJ2xlZnQnLCAncmlnaHQnLCAnYm9k
eSddLAotICAgICAgICBGb3JPZlN0YXRlbWVudDogWydsZWZ0JywgJ3JpZ2h0JywgJ2JvZHknXSwK
LSAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogWydpZCcsICdwYXJhbXMnLCAnZGVmYXVsdHMn
LCAncmVzdCcsICdib2R5J10sCi0gICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogWydpZCcsICdw
YXJhbXMnLCAnZGVmYXVsdHMnLCAncmVzdCcsICdib2R5J10sCi0gICAgICAgIElkZW50aWZpZXI6
IFtdLAotICAgICAgICBJZlN0YXRlbWVudDogWyd0ZXN0JywgJ2NvbnNlcXVlbnQnLCAnYWx0ZXJu
YXRlJ10sCi0gICAgICAgIExpdGVyYWw6IFtdLAotICAgICAgICBMYWJlbGVkU3RhdGVtZW50OiBb
J2xhYmVsJywgJ2JvZHknXSwKLSAgICAgICAgTG9naWNhbEV4cHJlc3Npb246IFsnbGVmdCcsICdy
aWdodCddLAotICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiBbJ29iamVjdCcsICdwcm9wZXJ0eSdd
LAotICAgICAgICBNZXRob2REZWZpbml0aW9uOiBbJ2tleScsICd2YWx1ZSddLAotICAgICAgICBO
ZXdFeHByZXNzaW9uOiBbJ2NhbGxlZScsICdhcmd1bWVudHMnXSwKLSAgICAgICAgT2JqZWN0RXhw
cmVzc2lvbjogWydwcm9wZXJ0aWVzJ10sCi0gICAgICAgIE9iamVjdFBhdHRlcm46IFsncHJvcGVy
dGllcyddLAotICAgICAgICBQcm9ncmFtOiBbJ2JvZHknXSwKLSAgICAgICAgUHJvcGVydHk6IFsn
a2V5JywgJ3ZhbHVlJ10sCi0gICAgICAgIFJldHVyblN0YXRlbWVudDogWydhcmd1bWVudCddLAot
ICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246IFsnZXhwcmVzc2lvbnMnXSwKLSAgICAgICAgU3dp
dGNoU3RhdGVtZW50OiBbJ2Rpc2NyaW1pbmFudCcsICdjYXNlcyddLAotICAgICAgICBTd2l0Y2hD
YXNlOiBbJ3Rlc3QnLCAnY29uc2VxdWVudCddLAotICAgICAgICBUaGlzRXhwcmVzc2lvbjogW10s
Ci0gICAgICAgIFRocm93U3RhdGVtZW50OiBbJ2FyZ3VtZW50J10sCi0gICAgICAgIFRyeVN0YXRl
bWVudDogWydibG9jaycsICdoYW5kbGVycycsICdoYW5kbGVyJywgJ2d1YXJkZWRIYW5kbGVycycs
ICdmaW5hbGl6ZXInXSwKLSAgICAgICAgVW5hcnlFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10sCi0g
ICAgICAgIFVwZGF0ZUV4cHJlc3Npb246IFsnYXJndW1lbnQnXSwKLSAgICAgICAgVmFyaWFibGVE
ZWNsYXJhdGlvbjogWydkZWNsYXJhdGlvbnMnXSwKLSAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9y
OiBbJ2lkJywgJ2luaXQnXSwKLSAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6IFsndGVzdCcsICdib2R5
J10sCi0gICAgICAgIFdpdGhTdGF0ZW1lbnQ6IFsnb2JqZWN0JywgJ2JvZHknXSwKLSAgICAgICAg
WWllbGRFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10KLSAgICB9OwotCi0gICAgLy8gdW5pcXVlIGlk
Ci0gICAgQlJFQUsgPSB7fTsKLSAgICBTS0lQID0ge307Ci0KLSAgICBWaXNpdG9yT3B0aW9uID0g
ewotICAgICAgICBCcmVhazogQlJFQUssCi0gICAgICAgIFNraXA6IFNLSVAKLSAgICB9OwotCi0g
ICAgZnVuY3Rpb24gUmVmZXJlbmNlKHBhcmVudCwga2V5KSB7Ci0gICAgICAgIHRoaXMucGFyZW50
ID0gcGFyZW50OwotICAgICAgICB0aGlzLmtleSA9IGtleTsKLSAgICB9Ci0KLSAgICBSZWZlcmVu
Y2UucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlKG5vZGUpIHsKLSAgICAgICAg
dGhpcy5wYXJlbnRbdGhpcy5rZXldID0gbm9kZTsKLSAgICB9OwotCi0gICAgZnVuY3Rpb24gRWxl
bWVudChub2RlLCBwYXRoLCB3cmFwLCByZWYpIHsKLSAgICAgICAgdGhpcy5ub2RlID0gbm9kZTsK
LSAgICAgICAgdGhpcy5wYXRoID0gcGF0aDsKLSAgICAgICAgdGhpcy53cmFwID0gd3JhcDsKLSAg
ICAgICAgdGhpcy5yZWYgPSByZWY7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gQ29udHJvbGxlcigp
IHsgfQotCi0gICAgLy8gQVBJOgotICAgIC8vIHJldHVybiBwcm9wZXJ0eSBwYXRoIGFycmF5IGZy
b20gcm9vdCB0byBjdXJyZW50IG5vZGUKLSAgICBDb250cm9sbGVyLnByb3RvdHlwZS5wYXRoID0g
ZnVuY3Rpb24gcGF0aCgpIHsKLSAgICAgICAgdmFyIGksIGl6LCBqLCBqeiwgcmVzdWx0LCBlbGVt
ZW50OwotCi0gICAgICAgIGZ1bmN0aW9uIGFkZFRvUGF0aChyZXN1bHQsIHBhdGgpIHsKLSAgICAg
ICAgICAgIGlmIChpc0FycmF5KHBhdGgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChqID0gMCwg
anogPSBwYXRoLmxlbmd0aDsgaiA8IGp6OyArK2opIHsKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnB1c2gocGF0aFtqXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXRoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIHJvb3Qgbm9kZQotICAgICAgICBpZiAoIXRoaXMuX19jdXJy
ZW50LnBhdGgpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gZmlyc3Qgbm9kZSBpcyBzZW50aW5lbCwgc2Vjb25kIG5vZGUgaXMgcm9vdCBlbGVtZW50
Ci0gICAgICAgIHJlc3VsdCA9IFtdOwotICAgICAgICBmb3IgKGkgPSAyLCBpeiA9IHRoaXMuX19s
ZWF2ZWxpc3QubGVuZ3RoOyBpIDwgaXo7ICsraSkgewotICAgICAgICAgICAgZWxlbWVudCA9IHRo
aXMuX19sZWF2ZWxpc3RbaV07Ci0gICAgICAgICAgICBhZGRUb1BhdGgocmVzdWx0LCBlbGVtZW50
LnBhdGgpOwotICAgICAgICB9Ci0gICAgICAgIGFkZFRvUGF0aChyZXN1bHQsIHRoaXMuX19jdXJy
ZW50LnBhdGgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH07Ci0KLSAgICAvLyBBUEk6
Ci0gICAgLy8gcmV0dXJuIGFycmF5IG9mIHBhcmVudCBlbGVtZW50cwotICAgIENvbnRyb2xsZXIu
cHJvdG90eXBlLnBhcmVudHMgPSBmdW5jdGlvbiBwYXJlbnRzKCkgewotICAgICAgICB2YXIgaSwg
aXosIHJlc3VsdDsKLQotICAgICAgICAvLyBmaXJzdCBub2RlIGlzIHNlbnRpbmVsCi0gICAgICAg
IHJlc3VsdCA9IFtdOwotICAgICAgICBmb3IgKGkgPSAxLCBpeiA9IHRoaXMuX19sZWF2ZWxpc3Qu
bGVuZ3RoOyBpIDwgaXo7ICsraSkgewotICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5fX2xl
YXZlbGlzdFtpXS5ub2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfTsKLQotICAgIC8vIEFQSToKLSAgICAvLyByZXR1cm4gY3VycmVudCBub2RlCi0gICAgQ29u
dHJvbGxlci5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIGN1cnJlbnQoKSB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9fY3VycmVudC5ub2RlOwotICAgIH07Ci0KLSAgICBDb250cm9sbGVyLnBy
b3RvdHlwZS5fX2V4ZWN1dGUgPSBmdW5jdGlvbiBfX2V4ZWN1dGUoY2FsbGJhY2ssIGVsZW1lbnQp
IHsKLSAgICAgICAgdmFyIHByZXZpb3VzLCByZXN1bHQ7Ci0KLSAgICAgICAgcmVzdWx0ID0gdW5k
ZWZpbmVkOwotCi0gICAgICAgIHByZXZpb3VzICA9IHRoaXMuX19jdXJyZW50OwotICAgICAgICB0
aGlzLl9fY3VycmVudCA9IGVsZW1lbnQ7Ci0gICAgICAgIHRoaXMuX19zdGF0ZSA9IG51bGw7Ci0g
ICAgICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2suY2Fs
bCh0aGlzLCBlbGVtZW50Lm5vZGUsIHRoaXMuX19sZWF2ZWxpc3RbdGhpcy5fX2xlYXZlbGlzdC5s
ZW5ndGggLSAxXS5ub2RlKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9fY3VycmVudCA9IHBy
ZXZpb3VzOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfTsKLQotICAgIC8vIEFQSToK
LSAgICAvLyBub3RpZnkgY29udHJvbCBza2lwIC8gYnJlYWsKLSAgICBDb250cm9sbGVyLnByb3Rv
dHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoZmxhZykgewotICAgICAgICB0aGlzLl9fc3Rh
dGUgPSBmbGFnOwotICAgIH07Ci0KLSAgICAvLyBBUEk6Ci0gICAgLy8gc2tpcCBjaGlsZCBub2Rl
cyBvZiBjdXJyZW50IG5vZGUKLSAgICBDb250cm9sbGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rp
b24gKCkgewotICAgICAgICB0aGlzLm5vdGlmeShTS0lQKTsKLSAgICB9OwotCi0gICAgLy8gQVBJ
OgotICAgIC8vIGJyZWFrIHRyYXZlcnNhbHMKLSAgICBDb250cm9sbGVyLnByb3RvdHlwZVsnYnJl
YWsnXSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdGhpcy5ub3RpZnkoQlJFQUspOwotICAgIH07
Ci0KLSAgICBDb250cm9sbGVyLnByb3RvdHlwZS5fX2luaXRpYWxpemUgPSBmdW5jdGlvbihyb290
LCB2aXNpdG9yKSB7Ci0gICAgICAgIHRoaXMudmlzaXRvciA9IHZpc2l0b3I7Ci0gICAgICAgIHRo
aXMucm9vdCA9IHJvb3Q7Ci0gICAgICAgIHRoaXMuX193b3JrbGlzdCA9IFtdOwotICAgICAgICB0
aGlzLl9fbGVhdmVsaXN0ID0gW107Ci0gICAgICAgIHRoaXMuX19jdXJyZW50ID0gbnVsbDsKLSAg
ICAgICAgdGhpcy5fX3N0YXRlID0gbnVsbDsKLSAgICB9OwotCi0gICAgQ29udHJvbGxlci5wcm90
b3R5cGUudHJhdmVyc2UgPSBmdW5jdGlvbiB0cmF2ZXJzZShyb290LCB2aXNpdG9yKSB7Ci0gICAg
ICAgIHZhciB3b3JrbGlzdCwKLSAgICAgICAgICAgIGxlYXZlbGlzdCwKLSAgICAgICAgICAgIGVs
ZW1lbnQsCi0gICAgICAgICAgICBub2RlLAotICAgICAgICAgICAgbm9kZVR5cGUsCi0gICAgICAg
ICAgICByZXQsCi0gICAgICAgICAgICBrZXksCi0gICAgICAgICAgICBjdXJyZW50LAotICAgICAg
ICAgICAgY3VycmVudDIsCi0gICAgICAgICAgICBjYW5kaWRhdGVzLAotICAgICAgICAgICAgY2Fu
ZGlkYXRlLAotICAgICAgICAgICAgc2VudGluZWw7Ci0KLSAgICAgICAgdGhpcy5fX2luaXRpYWxp
emUocm9vdCwgdmlzaXRvcik7Ci0KLSAgICAgICAgc2VudGluZWwgPSB7fTsKLQotICAgICAgICAv
LyByZWZlcmVuY2UKLSAgICAgICAgd29ya2xpc3QgPSB0aGlzLl9fd29ya2xpc3Q7Ci0gICAgICAg
IGxlYXZlbGlzdCA9IHRoaXMuX19sZWF2ZWxpc3Q7Ci0KLSAgICAgICAgLy8gaW5pdGlhbGl6ZQot
ICAgICAgICB3b3JrbGlzdC5wdXNoKG5ldyBFbGVtZW50KHJvb3QsIG51bGwsIG51bGwsIG51bGwp
KTsKLSAgICAgICAgbGVhdmVsaXN0LnB1c2gobmV3IEVsZW1lbnQobnVsbCwgbnVsbCwgbnVsbCwg
bnVsbCkpOwotCi0gICAgICAgIHdoaWxlICh3b3JrbGlzdC5sZW5ndGgpIHsKLSAgICAgICAgICAg
IGVsZW1lbnQgPSB3b3JrbGlzdC5wb3AoKTsKLQotICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09
IHNlbnRpbmVsKSB7Ci0gICAgICAgICAgICAgICAgZWxlbWVudCA9IGxlYXZlbGlzdC5wb3AoKTsK
LQotICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IubGVhdmUsIGVs
ZW1lbnQpOwotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwg
cmV0ID09PSBCUkVBSykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoZWxlbWVudC5ub2RlKSB7Ci0KLSAgICAgICAgICAgICAgICByZXQgPSB0aGlz
Ll9fZXhlY3V0ZSh2aXNpdG9yLmVudGVyLCBlbGVtZW50KTsKLQotICAgICAgICAgICAgICAgIGlm
ICh0aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHJldCA9PT0gQlJFQUspIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHdv
cmtsaXN0LnB1c2goc2VudGluZWwpOwotICAgICAgICAgICAgICAgIGxlYXZlbGlzdC5wdXNoKGVs
ZW1lbnQpOwotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gU0tJUCB8fCBy
ZXQgPT09IFNLSVApIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgbm9kZSA9IGVsZW1lbnQubm9kZTsKLSAgICAgICAg
ICAgICAgICBub2RlVHlwZSA9IGVsZW1lbnQud3JhcCB8fCBub2RlLnR5cGU7Ci0gICAgICAgICAg
ICAgICAgY2FuZGlkYXRlcyA9IFZpc2l0b3JLZXlzW25vZGVUeXBlXTsKLQotICAgICAgICAgICAg
ICAgIGN1cnJlbnQgPSBjYW5kaWRhdGVzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICB3aGlsZSAo
KGN1cnJlbnQgLT0gMSkgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBrZXkgPSBjYW5kaWRh
dGVzW2N1cnJlbnRdOwotICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBub2RlW2tleV07
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghaXNBcnJheShjYW5kaWRhdGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB3b3JrbGlzdC5wdXNoKG5ldyBFbGVtZW50KGNhbmRpZGF0ZSwga2V5LCBudWxsLCBudWxsKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQyID0gY2FuZGlkYXRlLmxlbmd0aDsKLSAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKChjdXJyZW50MiAtPSAxKSA+PSAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZVtjdXJyZW50Ml0pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgobm9kZVR5cGUgPT09IFN5bnRheC5PYmplY3RFeHBy
ZXNzaW9uIHx8IG5vZGVUeXBlID09PSBTeW50YXguT2JqZWN0UGF0dGVybikgJiYgJ3Byb3BlcnRp
ZXMnID09PSBjYW5kaWRhdGVzW2N1cnJlbnRdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJl
bnQyXSwgJ1Byb3BlcnR5JywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5k
aWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sIG51bGwsIG51bGwpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChl
bGVtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBDb250cm9sbGVyLnByb3RvdHlwZS5y
ZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZShyb290LCB2aXNpdG9yKSB7Ci0gICAgICAgIHZhciB3
b3JrbGlzdCwKLSAgICAgICAgICAgIGxlYXZlbGlzdCwKLSAgICAgICAgICAgIG5vZGUsCi0gICAg
ICAgICAgICBub2RlVHlwZSwKLSAgICAgICAgICAgIHRhcmdldCwKLSAgICAgICAgICAgIGVsZW1l
bnQsCi0gICAgICAgICAgICBjdXJyZW50LAotICAgICAgICAgICAgY3VycmVudDIsCi0gICAgICAg
ICAgICBjYW5kaWRhdGVzLAotICAgICAgICAgICAgY2FuZGlkYXRlLAotICAgICAgICAgICAgc2Vu
dGluZWwsCi0gICAgICAgICAgICBvdXRlciwKLSAgICAgICAgICAgIGtleTsKLQotICAgICAgICB0
aGlzLl9faW5pdGlhbGl6ZShyb290LCB2aXNpdG9yKTsKLQotICAgICAgICBzZW50aW5lbCA9IHt9
OwotCi0gICAgICAgIC8vIHJlZmVyZW5jZQotICAgICAgICB3b3JrbGlzdCA9IHRoaXMuX193b3Jr
bGlzdDsKLSAgICAgICAgbGVhdmVsaXN0ID0gdGhpcy5fX2xlYXZlbGlzdDsKLQotICAgICAgICAv
LyBpbml0aWFsaXplCi0gICAgICAgIG91dGVyID0gewotICAgICAgICAgICAgcm9vdDogcm9vdAot
ICAgICAgICB9OwotICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQocm9vdCwgbnVsbCwgbnVs
bCwgbmV3IFJlZmVyZW5jZShvdXRlciwgJ3Jvb3QnKSk7Ci0gICAgICAgIHdvcmtsaXN0LnB1c2go
ZWxlbWVudCk7Ci0gICAgICAgIGxlYXZlbGlzdC5wdXNoKGVsZW1lbnQpOwotCi0gICAgICAgIHdo
aWxlICh3b3JrbGlzdC5sZW5ndGgpIHsKLSAgICAgICAgICAgIGVsZW1lbnQgPSB3b3JrbGlzdC5w
b3AoKTsKLQotICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IHNlbnRpbmVsKSB7Ci0gICAgICAg
ICAgICAgICAgZWxlbWVudCA9IGxlYXZlbGlzdC5wb3AoKTsKLQotICAgICAgICAgICAgICAgIHRh
cmdldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IubGVhdmUsIGVsZW1lbnQpOwotCi0gICAgICAg
ICAgICAgICAgLy8gbm9kZSBtYXkgYmUgcmVwbGFjZWQgd2l0aCBudWxsLAotICAgICAgICAgICAg
ICAgIC8vIHNvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdW5kZWZpbmVkIGFuZCBudWxsIGluIHRoaXMg
cGxhY2UKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0
ICE9PSBCUkVBSyAmJiB0YXJnZXQgIT09IFNLSVApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
cmVwbGFjZQotICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJlZi5yZXBsYWNlKHRhcmdldCk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9
PT0gQlJFQUsgfHwgdGFyZ2V0ID09PSBCUkVBSykgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gb3V0ZXIucm9vdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRhcmdldCA9IHRoaXMuX19leGVjdXRl
KHZpc2l0b3IuZW50ZXIsIGVsZW1lbnQpOwotCi0gICAgICAgICAgICAvLyBub2RlIG1heSBiZSBy
ZXBsYWNlZCB3aXRoIG51bGwsCi0gICAgICAgICAgICAvLyBzbyBkaXN0aW5ndWlzaCBiZXR3ZWVu
IHVuZGVmaW5lZCBhbmQgbnVsbCBpbiB0aGlzIHBsYWNlCi0gICAgICAgICAgICBpZiAodGFyZ2V0
ICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0ICE9PSBCUkVBSyAmJiB0YXJnZXQgIT09IFNLSVApIHsK
LSAgICAgICAgICAgICAgICAvLyByZXBsYWNlCi0gICAgICAgICAgICAgICAgZWxlbWVudC5yZWYu
cmVwbGFjZSh0YXJnZXQpOwotICAgICAgICAgICAgICAgIGVsZW1lbnQubm9kZSA9IHRhcmdldDsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsg
fHwgdGFyZ2V0ID09PSBCUkVBSykgewotICAgICAgICAgICAgICAgIHJldHVybiBvdXRlci5yb290
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBub2RlIG1heSBiZSBudWxsCi0gICAg
ICAgICAgICBub2RlID0gZWxlbWVudC5ub2RlOwotICAgICAgICAgICAgaWYgKCFub2RlKSB7Ci0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHdv
cmtsaXN0LnB1c2goc2VudGluZWwpOwotICAgICAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVu
dCk7Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFNLSVAgfHwgdGFyZ2V0ID09
PSBTS0lQKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53cmFwIHx8IG5vZGUudHlwZTsKLSAgICAgICAg
ICAgIGNhbmRpZGF0ZXMgPSBWaXNpdG9yS2V5c1tub2RlVHlwZV07Ci0KLSAgICAgICAgICAgIGN1
cnJlbnQgPSBjYW5kaWRhdGVzLmxlbmd0aDsKLSAgICAgICAgICAgIHdoaWxlICgoY3VycmVudCAt
PSAxKSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAga2V5ID0gY2FuZGlkYXRlc1tjdXJyZW50XTsK
LSAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBub2RlW2tleV07Ci0gICAgICAgICAgICAgICAg
aWYgKCFjYW5kaWRhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFpc0FycmF5KGNhbmRpZGF0ZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChuZXcgRWxlbWVudChjYW5kaWRhdGUs
IGtleSwgbnVsbCwgbmV3IFJlZmVyZW5jZShub2RlLCBrZXkpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGN1cnJl
bnQyID0gY2FuZGlkYXRlLmxlbmd0aDsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQy
IC09IDEpID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGVbY3VycmVu
dDJdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT09IFN5bnRheC5PYmpl
Y3RFeHByZXNzaW9uICYmICdwcm9wZXJ0aWVzJyA9PT0gY2FuZGlkYXRlc1tjdXJyZW50XSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtj
dXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgJ1Byb3BlcnR5JywgbmV3IFJlZmVyZW5jZShjYW5k
aWRhdGUsIGN1cnJlbnQyKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQy
XSwgW2tleSwgY3VycmVudDJdLCBudWxsLCBuZXcgUmVmZXJlbmNlKGNhbmRpZGF0ZSwgY3VycmVu
dDIpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB3b3JrbGlz
dC5wdXNoKGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBvdXRlci5yb290OwotICAgIH07Ci0KLSAgICBmdW5jdGlv
biB0cmF2ZXJzZShyb290LCB2aXNpdG9yKSB7Ci0gICAgICAgIHZhciBjb250cm9sbGVyID0gbmV3
IENvbnRyb2xsZXIoKTsKLSAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIudHJhdmVyc2Uocm9vdCwg
dmlzaXRvcik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcmVwbGFjZShyb290LCB2aXNpdG9yKSB7
Ci0gICAgICAgIHZhciBjb250cm9sbGVyID0gbmV3IENvbnRyb2xsZXIoKTsKLSAgICAgICAgcmV0
dXJuIGNvbnRyb2xsZXIucmVwbGFjZShyb290LCB2aXNpdG9yKTsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBleHRlbmRDb21tZW50UmFuZ2UoY29tbWVudCwgdG9rZW5zKSB7Ci0gICAgICAgIHZhciB0
YXJnZXQ7Ci0KLSAgICAgICAgdGFyZ2V0ID0gdXBwZXJCb3VuZCh0b2tlbnMsIGZ1bmN0aW9uIHNl
YXJjaCh0b2tlbikgewotICAgICAgICAgICAgcmV0dXJuIHRva2VuLnJhbmdlWzBdID4gY29tbWVu
dC5yYW5nZVswXTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdl
ID0gW2NvbW1lbnQucmFuZ2VbMF0sIGNvbW1lbnQucmFuZ2VbMV1dOwotCi0gICAgICAgIGlmICh0
YXJnZXQgIT09IHRva2Vucy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGNvbW1lbnQuZXh0ZW5kZWRS
YW5nZVsxXSA9IHRva2Vuc1t0YXJnZXRdLnJhbmdlWzBdOwotICAgICAgICB9Ci0KLSAgICAgICAg
dGFyZ2V0IC09IDE7Ci0gICAgICAgIGlmICh0YXJnZXQgPj0gMCkgewotICAgICAgICAgICAgY29t
bWVudC5leHRlbmRlZFJhbmdlWzBdID0gdG9rZW5zW3RhcmdldF0ucmFuZ2VbMV07Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gY29tbWVudDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBhdHRh
Y2hDb21tZW50cyh0cmVlLCBwcm92aWRlZENvbW1lbnRzLCB0b2tlbnMpIHsKLSAgICAgICAgLy8g
QXQgZmlyc3QsIHdlIHNob3VsZCBjYWxjdWxhdGUgZXh0ZW5kZWQgY29tbWVudCByYW5nZXMuCi0g
ICAgICAgIHZhciBjb21tZW50cyA9IFtdLCBjb21tZW50LCBsZW4sIGksIGN1cnNvcjsKLQotICAg
ICAgICBpZiAoIXRyZWUucmFuZ2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYXR0
YWNoQ29tbWVudHMgbmVlZHMgcmFuZ2UgaW5mb3JtYXRpb24nKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIHRva2VucyBhcnJheSBpcyBlbXB0eSwgd2UgYXR0YWNoIGNvbW1lbnRzIHRvIHRyZWUg
YXMgJ2xlYWRpbmdDb21tZW50cycKLSAgICAgICAgaWYgKCF0b2tlbnMubGVuZ3RoKSB7Ci0gICAg
ICAgICAgICBpZiAocHJvdmlkZWRDb21tZW50cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBm
b3IgKGkgPSAwLCBsZW4gPSBwcm92aWRlZENvbW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAx
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBkZWVwQ29weShwcm92aWRlZENvbW1l
bnRzW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlID0gWzAs
IHRyZWUucmFuZ2VbMF1dOwotICAgICAgICAgICAgICAgICAgICBjb21tZW50cy5wdXNoKGNvbW1l
bnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0cmVlLmxlYWRpbmdDb21t
ZW50cyA9IGNvbW1lbnRzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRyZWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwcm92aWRlZENvbW1lbnRz
Lmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7Ci0gICAgICAgICAgICBjb21tZW50cy5wdXNoKGV4
dGVuZENvbW1lbnRSYW5nZShkZWVwQ29weShwcm92aWRlZENvbW1lbnRzW2ldKSwgdG9rZW5zKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGlzIGlzIGJhc2VkIG9uIEpvaG4gRnJlZW1hbidz
IGltcGxlbWVudGF0aW9uLgotICAgICAgICBjdXJzb3IgPSAwOwotICAgICAgICB0cmF2ZXJzZSh0
cmVlLCB7Ci0gICAgICAgICAgICBlbnRlcjogZnVuY3Rpb24gKG5vZGUpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgY29tbWVudDsKLQotICAgICAgICAgICAgICAgIHdoaWxlIChjdXJzb3IgPCBjb21t
ZW50cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzW2N1
cnNvcl07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50LmV4dGVuZGVkUmFuZ2VbMV0g
PiBub2RlLnJhbmdlWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50LmV4dGVu
ZGVkUmFuZ2VbMV0gPT09IG5vZGUucmFuZ2VbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghbm9kZS5sZWFkaW5nQ29tbWVudHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLmxlYWRpbmdDb21tZW50cyA9IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMucHVzaChjb21tZW50
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLnNwbGljZShjdXJzb3IsIDEpOwot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
c29yICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAvLyBhbHJlYWR5IG91dCBvZiBvd25lZCBub2RlCi0gICAgICAgICAgICAg
ICAgaWYgKGN1cnNvciA9PT0gY29tbWVudHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBWaXNpdG9yT3B0aW9uLkJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmIChjb21tZW50c1tjdXJzb3JdLmV4dGVuZGVkUmFuZ2VbMF0gPiBub2RlLnJh
bmdlWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpdG9yT3B0aW9uLlNraXA7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAg
ICBjdXJzb3IgPSAwOwotICAgICAgICB0cmF2ZXJzZSh0cmVlLCB7Ci0gICAgICAgICAgICBsZWF2
ZTogZnVuY3Rpb24gKG5vZGUpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29tbWVudDsKLQotICAg
ICAgICAgICAgICAgIHdoaWxlIChjdXJzb3IgPCBjb21tZW50cy5sZW5ndGgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzW2N1cnNvcl07Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLnJhbmdlWzFdIDwgY29tbWVudC5leHRlbmRlZFJhbmdlWzBdKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLnJhbmdlWzFdID09PSBjb21tZW50LmV4dGVuZGVkUmFu
Z2VbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS50cmFpbGluZ0NvbW1l
bnRzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50cmFpbGluZ0NvbW1lbnRz
ID0gW107Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLnRyYWlsaW5nQ29tbWVudHMucHVzaChjb21tZW50KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbW1lbnRzLnNwbGljZShjdXJzb3IsIDEpOwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDE7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBhbHJl
YWR5IG91dCBvZiBvd25lZCBub2RlCi0gICAgICAgICAgICAgICAgaWYgKGN1cnNvciA9PT0gY29t
bWVudHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpdG9yT3B0aW9u
LkJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChjb21tZW50
c1tjdXJzb3JdLmV4dGVuZGVkUmFuZ2VbMF0gPiBub2RlLnJhbmdlWzFdKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBWaXNpdG9yT3B0aW9uLlNraXA7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm4gdHJlZTsKLSAgICB9
Ci0KLSAgICBleHBvcnRzLnZlcnNpb24gPSAnMS41LjEtZGV2JzsKLSAgICBleHBvcnRzLlN5bnRh
eCA9IFN5bnRheDsKLSAgICBleHBvcnRzLnRyYXZlcnNlID0gdHJhdmVyc2U7Ci0gICAgZXhwb3J0
cy5yZXBsYWNlID0gcmVwbGFjZTsKLSAgICBleHBvcnRzLmF0dGFjaENvbW1lbnRzID0gYXR0YWNo
Q29tbWVudHM7Ci0gICAgZXhwb3J0cy5WaXNpdG9yS2V5cyA9IFZpc2l0b3JLZXlzOwotICAgIGV4
cG9ydHMuVmlzaXRvck9wdGlvbiA9IFZpc2l0b3JPcHRpb247Ci0gICAgZXhwb3J0cy5Db250cm9s
bGVyID0gQ29udHJvbGxlcjsKLX0pKTsKLS8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6
ICovCi0KLX0se31dLDg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotJ3VzZSBz
dHJpY3QnOwotCi1mdW5jdGlvbiBUb09iamVjdCh2YWwpIHsKLQlpZiAodmFsID09IG51bGwpIHsK
LQkJdGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdp
dGggbnVsbCBvciB1bmRlZmluZWQnKTsKLQl9Ci0KLQlyZXR1cm4gT2JqZWN0KHZhbCk7Ci19Ci0K
LW1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3Vy
Y2UpIHsKLQl2YXIgcGVuZGluZ0V4Y2VwdGlvbjsKLQl2YXIgZnJvbTsKLQl2YXIga2V5czsKLQl2
YXIgdG8gPSBUb09iamVjdCh0YXJnZXQpOwotCi0JZm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVu
dHMubGVuZ3RoOyBzKyspIHsKLQkJZnJvbSA9IGFyZ3VtZW50c1tzXTsKLQkJa2V5cyA9IE9iamVj
dC5rZXlzKE9iamVjdChmcm9tKSk7Ci0KLQkJZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0
aDsgaSsrKSB7Ci0JCQl0cnkgewotCQkJCXRvW2tleXNbaV1dID0gZnJvbVtrZXlzW2ldXTsKLQkJ
CX0gY2F0Y2ggKGVycikgewotCQkJCWlmIChwZW5kaW5nRXhjZXB0aW9uID09PSB1bmRlZmluZWQp
IHsKLQkJCQkJcGVuZGluZ0V4Y2VwdGlvbiA9IGVycjsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0K
LQlpZiAocGVuZGluZ0V4Y2VwdGlvbikgewotCQl0aHJvdyBwZW5kaW5nRXhjZXB0aW9uOwotCX0K
LQotCXJldHVybiB0bzsKLX07Ci0KLX0se31dLDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IE1haW4gRVNMaW50IG9iamVjdC4KLSAqIEBh
dXRob3IgTmljaG9sYXMgQy4gWmFrYXMKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gUmVxdWlyZW1lbnRzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci12YXIgZXNwcmltYSA9IHJlcXVpcmUoImVzcHJpbWEiKSwKLSAgICBlc3RyYXZlcnNlID0gcmVx
dWlyZSgiZXN0cmF2ZXJzZSIpLAotICAgIGVzY29wZSA9IHJlcXVpcmUoImVzY29wZSIpLAotICAg
IGVudmlyb25tZW50cyA9IHJlcXVpcmUoIi4uL2NvbmYvZW52aXJvbm1lbnRzLmpzb24iKSwKLSAg
ICBhc3NpZ24gPSByZXF1aXJlKCJvYmplY3QtYXNzaWduIiksCi0gICAgcnVsZXMgPSByZXF1aXJl
KCIuL3J1bGVzIiksCi0gICAgdXRpbCA9IHJlcXVpcmUoIi4vdXRpbCIpLAotICAgIFJ1bGVDb250
ZXh0ID0gcmVxdWlyZSgiLi9ydWxlLWNvbnRleHQiKSwKLSAgICBFdmVudEVtaXR0ZXIgPSByZXF1
aXJlKCJldmVudHMiKS5FdmVudEVtaXR0ZXI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBIZWxwZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1mdW5jdGlvbiBlc2NhcGVSZWdF
eHAocngpIHsKLSAgICByZXR1cm4gcngucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9c
LlxcXF5cJFx8XS9nLCAiXFwkJiIpOwotfQotCi0vKioKLSAqIFBhcnNlcyBhIGxpc3Qgb2YgIm5h
bWU6Ym9vbGVhbl92YWx1ZSIgb3IvYW5kICJuYW1lIiBvcHRpb25zIGRpdmlkZWQgYnkgY29tbWEg
b3IKLSAqIHdoaXRlc3BhY2UuCi0gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcg
dG8gcGFyc2UuCi0gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgbWFwIG9iamVjdCBvZiBuYW1l
cyBhbmQgYm9vbGVhbiB2YWx1ZXMKLSAqLwotZnVuY3Rpb24gcGFyc2VCb29sZWFuQ29uZmlnKHN0
cmluZykgewotICAgIHZhciBpdGVtcyA9IHt9OwotICAgIC8vIENvbGxhcHNlIHdoaXRlc3BhY2Ug
YXJvdW5kIDogdG8gbWFrZSBwYXJzaW5nIGVhc2llcgotICAgIHN0cmluZyA9IHN0cmluZy5yZXBs
YWNlKC9ccyo6XHMqL2csICI6Iik7Ci0gICAgLy8gQ29sbGFwc2Ugd2hpdGVzcGFjZSBhcm91bmQg
LAotICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9ccyosXHMqL2csICIsIik7Ci0gICAgc3Ry
aW5nLnNwbGl0KC9cc3wsKy8pLmZvckVhY2goZnVuY3Rpb24obmFtZSkgewotICAgICAgICBpZiAo
IW5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB2YXIgcG9z
ID0gbmFtZS5pbmRleE9mKCI6IiksCi0gICAgICAgICAgICB2YWx1ZTsKLSAgICAgICAgaWYgKHBv
cyAhPT0gLTEpIHsKLSAgICAgICAgICAgIHZhbHVlID0gbmFtZS5zdWJzdHJpbmcocG9zICsgMSwg
bmFtZS5sZW5ndGgpOwotICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIHBvcyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpdGVtc1tuYW1lXSA9ICh2YWx1ZSA9PT0gInRydWUiKTsK
LQotICAgIH0pOwotICAgIHJldHVybiBpdGVtczsKLX0KLQotLyoqCi0gKiBQYXJzZXMgYSBKU09O
LWxpa2UgY29uZmlnLgotICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHBh
cnNlLgotICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG1hcCBvYmplY3QKLSAqLwotZnVuY3Rp
b24gcGFyc2VKc29uQ29uZmlnKHN0cmluZykgewotICAgIHZhciBpdGVtcyA9IHt9OwotICAgIHN0
cmluZyA9IHN0cmluZy5yZXBsYWNlKC8oW2EtejAtOVwtXC9dKyk6L2csICJcIiQxXCI6IikucmVw
bGFjZSgvKFxdfFswLTldKVxzKyg/PSIpLywgIiQxLCIpOwotICAgIHRyeSB7Ci0gICAgICAgIGl0
ZW1zID0gSlNPTi5wYXJzZSgieyIgKyBzdHJpbmcgKyAifSIpOwotICAgIH0gY2F0Y2goZSkgeyB9
Ci0KLSAgICByZXR1cm4gaXRlbXM7Ci19Ci0KLS8qKgotICogUGFyc2VzIGEgY29uZmlnIG9mIHZh
bHVlcyBzZXBhcmF0ZWQgYnkgY29tbWEuCi0gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBz
dHJpbmcgdG8gcGFyc2UuCi0gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgbWFwIG9mIHZhbHVl
cyBhbmQgdHJ1ZSB2YWx1ZXMKLSAqLwotZnVuY3Rpb24gcGFyc2VMaXN0Q29uZmlnKHN0cmluZykg
ewotICAgIHZhciBpdGVtcyA9IHt9OwotICAgIC8vIENvbGxhcHNlIHdoaXRlc3BhY2UgYXJvdW5k
ICwKLSAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXHMqLFxzKi9nLCAiLCIpOwotICAgIHN0
cmluZy5zcGxpdCgvLCsvKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgbmFtZSA9
IG5hbWUudHJpbSgpOwotICAgICAgICBpZiAoIW5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBpdGVtc1tuYW1lXSA9IHRydWU7Ci0gICAgfSk7Ci0gICAgcmV0
dXJuIGl0ZW1zOwotfQotCi0vKioKLSAqIEBwYXJhbSB7U2NvcGV9IHNjb3BlIFRoZSBzY29wZSBv
YmplY3QgdG8gY2hlY2suCi0gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUg
dmFyaWFibGUgdG8gbG9vayB1cC4KLSAqIEByZXR1cm5zIHtWYXJpYWJsZX0gVGhlIHZhcmlhYmxl
IG9iamVjdCBpZiBmb3VuZCBvciBudWxsIGlmIG5vdC4KLSAqLwotZnVuY3Rpb24gZ2V0VmFyaWFi
bGUoc2NvcGUsIG5hbWUpIHsKLSAgICB2YXIgdmFyaWFibGUgPSBudWxsOwotICAgIHNjb3BlLnZh
cmlhYmxlcy5zb21lKGZ1bmN0aW9uKHYpIHsKLSAgICAgICAgaWYgKHYubmFtZSA9PT0gbmFtZSkg
ewotICAgICAgICAgICAgdmFyaWFibGUgPSB2OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQot
ICAgIH0pOwotICAgIHJldHVybiB2YXJpYWJsZTsKLX0KLQotLyoqCi0gKiBFbnN1cmVzIHRoYXQg
dmFyaWFibGVzIHJlcHJlc2VudGluZyBidWlsdC1pbiBwcm9wZXJ0aWVzIG9mIHRoZSBHbG9iYWwg
T2JqZWN0LAotICogYW5kIGFueSBnbG9iYWxzIGRlY2xhcmVkIGJ5IHNwZWNpYWwgYmxvY2sgY29t
bWVudHMsIGFyZSBwcmVzZW50IGluIHRoZSBnbG9iYWwKLSAqIHNjb3BlLgotICogQHBhcmFtIHtB
U1ROb2RlfSBwcm9ncmFtIFRoZSB0b3Agbm9kZSBvZiB0aGUgQVNULgotICogQHBhcmFtIHtTY29w
ZX0gZ2xvYmFsU2NvcGUgVGhlIGdsb2JhbCBzY29wZS4KLSAqIEBwYXJhbSB7T2JqZWN0fSBjb25m
aWcgVGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZGF0YS4KLSAqIEByZXR1cm5zIHt2b2lkfQot
ICovCi1mdW5jdGlvbiBhZGREZWNsYXJlZEdsb2JhbHMocHJvZ3JhbSwgZ2xvYmFsU2NvcGUsIGNv
bmZpZykgewotICAgIHZhciBkZWNsYXJlZEdsb2JhbHMgPSB7fSwKLSAgICAgICAgZXhwbGljaXRH
bG9iYWxzID0ge30sCi0gICAgICAgIGJ1aWx0aW4gPSBlbnZpcm9ubWVudHMuYnVpbHRpbjsKLQot
ICAgIGFzc2lnbihkZWNsYXJlZEdsb2JhbHMsIGJ1aWx0aW4pOwotCi0gICAgT2JqZWN0LmtleXMo
Y29uZmlnLmVudikuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkgewotICAgICAgICBpZiAoY29uZmln
LmVudltuYW1lXSkgewotICAgICAgICAgICAgdmFyIGVudmlyb25tZW50R2xvYmFscyA9IGVudmly
b25tZW50c1tuYW1lXSAmJiBlbnZpcm9ubWVudHNbbmFtZV0uZ2xvYmFsczsKLSAgICAgICAgICAg
IGlmIChlbnZpcm9ubWVudEdsb2JhbHMpIHsKLSAgICAgICAgICAgICAgICBhc3NpZ24oZGVjbGFy
ZWRHbG9iYWxzLCBlbnZpcm9ubWVudEdsb2JhbHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfSk7Ci0KLSAgICBhc3NpZ24oZGVjbGFyZWRHbG9iYWxzLCBjb25maWcuZ2xvYmFscyk7
Ci0gICAgYXNzaWduKGV4cGxpY2l0R2xvYmFscywgY29uZmlnLmFzdEdsb2JhbHMpOwotCi0gICAg
T2JqZWN0LmtleXMoZGVjbGFyZWRHbG9iYWxzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKLSAg
ICAgICAgdmFyIHZhcmlhYmxlID0gZ2V0VmFyaWFibGUoZ2xvYmFsU2NvcGUsIG5hbWUpOwotICAg
ICAgICBpZiAoIXZhcmlhYmxlKSB7Ci0gICAgICAgICAgICB2YXJpYWJsZSA9IG5ldyBlc2NvcGUu
VmFyaWFibGUobmFtZSwgZ2xvYmFsU2NvcGUpOwotICAgICAgICAgICAgdmFyaWFibGUuZXNsaW50
RXhwbGljaXRHbG9iYWwgPSBmYWxzZTsKLSAgICAgICAgICAgIGdsb2JhbFNjb3BlLnZhcmlhYmxl
cy5wdXNoKHZhcmlhYmxlKTsKLSAgICAgICAgfQotICAgICAgICB2YXJpYWJsZS53cml0ZWFibGUg
PSBkZWNsYXJlZEdsb2JhbHNbbmFtZV07Ci0gICAgfSk7Ci0KLSAgICBPYmplY3Qua2V5cyhleHBs
aWNpdEdsb2JhbHMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkgewotICAgICAgICB2YXIgdmFyaWFi
bGUgPSBnZXRWYXJpYWJsZShnbG9iYWxTY29wZSwgbmFtZSk7Ci0gICAgICAgIGlmICghdmFyaWFi
bGUpIHsKLSAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3IGVzY29wZS5WYXJpYWJsZShuYW1lLCBn
bG9iYWxTY29wZSk7Ci0gICAgICAgICAgICB2YXJpYWJsZS5lc2xpbnRFeHBsaWNpdEdsb2JhbCA9
IHRydWU7Ci0gICAgICAgICAgICBnbG9iYWxTY29wZS52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgdmFyaWFibGUud3JpdGVhYmxlID0gZXhwbGljaXRHbG9iYWxz
W25hbWVdOwotICAgIH0pOwotfQotCi0vKioKLSAqIEFkZCBkYXRhIHRvIHJlcG9ydGluZyBjb25m
aWd1cmF0aW9uIHRvIGRpc2FibGUgcmVwb3J0aW5nIGZvciBsaXN0IG9mIHJ1bGVzCi0gKiBzdGFy
dGluZyBmcm9tIHN0YXJ0IGxvY2F0aW9uCi0gKiBAcGFyYW0gIHtPYmplY3RbXX0gcmVwb3J0aW5n
Q29uZmlnIEN1cnJlbnQgcmVwb3J0aW5nIGNvbmZpZ3VyYXRpb24KLSAqIEBwYXJhbSAge09iamVj
dH0gc3RhcnQgUG9zaXRpb24gdG8gc3RhcnQKLSAqIEBwYXJhbSAge3N0cmluZ1tdfSBydWxlcyBM
aXN0IG9mIHJ1bGVzCi0gKiBAcmV0dXJucyB7dm9pZH0KLSAqLwotZnVuY3Rpb24gZGlzYWJsZVJl
cG9ydGluZyhyZXBvcnRpbmdDb25maWcsIHN0YXJ0LCBydWxlcykgewotCi0gICAgaWYgKHJ1bGVz
Lmxlbmd0aCkgewotICAgICAgICBydWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGUpIHsKLSAgICAg
ICAgICAgIHJlcG9ydGluZ0NvbmZpZy5wdXNoKHsKLSAgICAgICAgICAgICAgICBzdGFydDogc3Rh
cnQsCi0gICAgICAgICAgICAgICAgZW5kOiBudWxsLAotICAgICAgICAgICAgICAgIHJ1bGU6IHJ1
bGUKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9IGVsc2UgewotICAgICAgICBy
ZXBvcnRpbmdDb25maWcucHVzaCh7Ci0gICAgICAgICAgICBzdGFydDogc3RhcnQsCi0gICAgICAg
ICAgICBlbmQ6IG51bGwsCi0gICAgICAgICAgICBydWxlOiBudWxsCi0gICAgICAgIH0pOwotICAg
IH0KLX0KLQotLyoqCi0gKiBBZGQgZGF0YSB0byByZXBvcnRpbmcgY29uZmlndXJhdGlvbiB0byBl
bmFibGUgcmVwb3J0aW5nIGZvciBsaXN0IG9mIHJ1bGVzCi0gKiBzdGFydGluZyBmcm9tIHN0YXJ0
IGxvY2F0aW9uCi0gKiBAcGFyYW0gIHtPYmplY3RbXX0gcmVwb3J0aW5nQ29uZmlnIEN1cnJlbnQg
cmVwb3J0aW5nIGNvbmZpZ3VyYXRpb24KLSAqIEBwYXJhbSAge09iamVjdH0gc3RhcnQgUG9zaXRp
b24gdG8gc3RhcnQKLSAqIEBwYXJhbSAge3N0cmluZ1tdfSBydWxlcyBMaXN0IG9mIHJ1bGVzCi0g
KiBAcmV0dXJucyB7dm9pZH0KLSAqLwotZnVuY3Rpb24gZW5hYmxlUmVwb3J0aW5nKHJlcG9ydGlu
Z0NvbmZpZywgc3RhcnQsIHJ1bGVzKSB7Ci0gICAgdmFyIGk7Ci0KLSAgICBpZiAocnVsZXMubGVu
Z3RoKSB7Ci0gICAgICAgIHJ1bGVzLmZvckVhY2goZnVuY3Rpb24ocnVsZSkgewotICAgICAgICAg
ICAgZm9yIChpID0gcmVwb3J0aW5nQ29uZmlnLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFyZXBvcnRpbmdDb25maWdbaV0uZW5kICYmIHJlcG9ydGluZ0Nv
bmZpZ1tpXS5ydWxlID09PSBydWxlICkgewotICAgICAgICAgICAgICAgICAgICByZXBvcnRpbmdD
b25maWdbaV0uZW5kID0gc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gZmluZCBhbGwgcHJldmlvdXMgZGlzYWJsZWQgbG9jYXRpb25zIGlmIHRoZXkgd2Fz
IHN0YXJ0ZWQgYXMgbGlzdCBvZiBydWxlcwotICAgICAgICB2YXIgcHJldlN0YXJ0OwotICAgICAg
ICBmb3IgKGkgPSByZXBvcnRpbmdDb25maWcubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAg
ICAgICAgICAgIGlmIChwcmV2U3RhcnQgJiYgcHJldlN0YXJ0ICE9PSByZXBvcnRpbmdDb25maWdb
aV0uc3RhcnQpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKCFyZXBvcnRpbmdDb25maWdbaV0uZW5kKSB7Ci0gICAgICAgICAgICAgICAg
cmVwb3J0aW5nQ29uZmlnW2ldLmVuZCA9IHN0YXJ0OwotICAgICAgICAgICAgICAgIHByZXZTdGFy
dCA9IHJlcG9ydGluZ0NvbmZpZ1tpXS5zdGFydDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KLQotCi0vKioKLSAqIFBhcnNlcyBjb21tZW50cyBpbiBmaWxlIHRvIGV4dHJhY3Qg
ZmlsZS1zcGVjaWZpYyBjb25maWcgb2YgcnVsZXMsIGdsb2JhbHMKLSAqIGFuZCBlbnZpcm9ubWVu
dHMgYW5kIG1lcmdlcyB0aGVtIHdpdGggZ2xvYmFsIGNvbmZpZzsgYWxzbyBjb2RlIGJsb2Nrcwot
ICogd2hlcmUgcmVwb3J0aW5nIGlzIGRpc2FibGVkIG9yIGVuYWJsZWQgYW5kIG1lcmdlcyB0aGVt
IHdpdGggcmVwb3J0aW5nIGNvbmZpZy4KLSAqIEBwYXJhbSB7QVNUTm9kZX0gYXN0IFRoZSB0b3Ag
bm9kZSBvZiB0aGUgQVNULgotICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgZXhpc3Rpbmcg
Y29uZmlndXJhdGlvbiBkYXRhLgotICogQHBhcmFtIHtPYmplY3RbXX0gcmVwb3J0aW5nQ29uZmln
IFRoZSBleGlzdGluZyByZXBvcnRpbmcgY29uZmlndXJhdGlvbiBkYXRhLgotICogQHJldHVybnMg
e3ZvaWR9Ci0gKi8KLWZ1bmN0aW9uIG1vZGlmeUNvbmZpZ3NGcm9tQ29tbWVudHMoYXN0LCBjb25m
aWcsIHJlcG9ydGluZ0NvbmZpZykgewotCi0gICAgdmFyIGNvbW1lbnRDb25maWcgPSB7Ci0gICAg
ICAgIGFzdEdsb2JhbHM6IHt9LAotICAgICAgICBydWxlczoge30sCi0gICAgICAgIGVudjoge30K
LSAgICB9OwotICAgIHZhciBjb21tZW50UnVsZXMgPSB7fTsKLQotICAgIGFzdC5jb21tZW50cy5m
b3JFYWNoKGZ1bmN0aW9uKGNvbW1lbnQpIHsKLSAgICAgICAgaWYgKGNvbW1lbnQudHlwZSA9PT0g
IkJsb2NrIikgewotCi0gICAgICAgICAgICB2YXIgdmFsdWUgPSBjb21tZW50LnZhbHVlLnRyaW0o
KTsKLSAgICAgICAgICAgIHZhciBtYXRjaCA9IC9eKGVzbGludC1cdyt8ZXNsaW50fGdsb2JhbHM/
KShcc3wkKS8uZXhlYyh2YWx1ZSk7Ci0KLSAgICAgICAgICAgIGlmIChtYXRjaCkgewotICAgICAg
ICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKG1hdGNoLmluZGV4ICsgbWF0Y2hbMV0u
bGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgIHN3aXRjaCAobWF0Y2hbMV0pIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSAiZ2xvYmFscyI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgImds
b2JhbCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB1dGlsLm1peGluKGNvbW1lbnRDb25maWcu
YXN0R2xvYmFscywgcGFyc2VCb29sZWFuQ29uZmlnKHZhbHVlKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlICJlc2xpbnQtZW52IjoK
LSAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwubWl4aW4oY29tbWVudENvbmZpZy5lbnYsIHBh
cnNlTGlzdENvbmZpZyh2YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXNsaW50LWRpc2FibGUiOgotICAgICAgICAgICAg
ICAgICAgICAgICAgZGlzYWJsZVJlcG9ydGluZyhyZXBvcnRpbmdDb25maWcsIGNvbW1lbnQubG9j
LnN0YXJ0LCBPYmplY3Qua2V5cyhwYXJzZUxpc3RDb25maWcodmFsdWUpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlICJlc2xpbnQt
ZW5hYmxlIjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZVJlcG9ydGluZyhyZXBvcnRp
bmdDb25maWcsIGNvbW1lbnQubG9jLnN0YXJ0LCBPYmplY3Qua2V5cyhwYXJzZUxpc3RDb25maWco
dmFsdWUpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAg
ICAgICAgICBjYXNlICJlc2xpbnQiOgotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1z
ID0gcGFyc2VKc29uQ29uZmlnKHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE9iamVj
dC5rZXlzKGl0ZW1zKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcnVsZVZhbHVlID0gaXRlbXNbbmFtZV07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlVmFsdWUgPT09ICJudW1iZXIiIHx8IChBcnJheS5p
c0FycmF5KHJ1bGVWYWx1ZSkgJiYgdHlwZW9mIHJ1bGVWYWx1ZVswXSA9PT0gIm51bWJlciIpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRSdWxlc1tuYW1lXSA9IHJ1
bGVWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICAgICAgICAgIC8vIG5vIGRlZmF1bHQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9KTsKLQotICAgIC8vIGFwcGx5IGVudmlyb25tZW50IHJ1bGVzIGJl
Zm9yZSB1c2VyIHJ1bGVzCi0gICAgT2JqZWN0LmtleXMoY29tbWVudENvbmZpZy5lbnYpLmZvckVh
Y2goZnVuY3Rpb24gKG5hbWUpIHsKLSAgICAgICAgdmFyIGVudmlyb25tZW50UnVsZXMgPSBlbnZp
cm9ubWVudHNbbmFtZV0gJiYgZW52aXJvbm1lbnRzW25hbWVdLnJ1bGVzOwotICAgICAgICBpZiAo
Y29tbWVudENvbmZpZy5lbnZbbmFtZV0gJiYgZW52aXJvbm1lbnRSdWxlcykgewotICAgICAgICAg
ICAgdXRpbC5taXhpbihjb21tZW50Q29uZmlnLnJ1bGVzLCBlbnZpcm9ubWVudFJ1bGVzKTsKLSAg
ICAgICAgfQotICAgIH0pOwotICAgIHV0aWwubWl4aW4oY29tbWVudENvbmZpZy5ydWxlcywgY29t
bWVudFJ1bGVzKTsKLQotICAgIHV0aWwubWVyZ2VDb25maWdzKGNvbmZpZywgY29tbWVudENvbmZp
Zyk7Ci19Ci0KLS8qKgotICogQ2hlY2sgaWYgbWVzc2FnZSBvZiBydWxlIHdpdGggcnVsZUlkIHNo
b3VsZCBiZSBpZ25vcmVkIGluIGxvY2F0aW9uCi0gKiBAcGFyYW0gIHtPYmplY3RbXX0gcmVwb3J0
aW5nQ29uZmlnICBDb2xsZWN0aW9uIG9mIGlnbm9yZSByZWNvcmRzCi0gKiBAcGFyYW0gIHtzdHJp
bmd9IHJ1bGVJZCAgIElkIG9mIHJ1bGUKLSAqIEBwYXJhbSAge09iamVjdH0gbG9jYXRpb24gTG9j
YXRpb24gb2YgbWVzc2FnZQotICogQHJldHVybnMge2Jvb2xlYW59ICAgICAgICAgIFRydWUgaWYg
bWVzc2FnZSBzaG91bGQgYmUgaWdub3JlZCwgZmFsc2Ugb3RoZXJ3aXNlCi0gKi8KLWZ1bmN0aW9u
IGlzRGlzYWJsZWRCeVJlcG9ydGluZ0NvbmZpZyhyZXBvcnRpbmdDb25maWcsIHJ1bGVJZCwgbG9j
YXRpb24pIHsKLQotICAgIGZvciAodmFyIGkgPSAwLCBjID0gcmVwb3J0aW5nQ29uZmlnLmxlbmd0
aDsgaSA8IGM7IGkrKykgewotCi0gICAgICAgIHZhciBpZ25vcmUgPSByZXBvcnRpbmdDb25maWdb
aV07Ci0gICAgICAgIGlmICgoIWlnbm9yZS5ydWxlIHx8IGlnbm9yZS5ydWxlID09PSBydWxlSWQp
ICYmCi0gICAgICAgICAgICAobG9jYXRpb24ubGluZSA+IGlnbm9yZS5zdGFydC5saW5lIHx8IChs
b2NhdGlvbi5saW5lID09PSBpZ25vcmUuc3RhcnQubGluZSAmJiBsb2NhdGlvbi5jb2x1bW4gPj0g
aWdub3JlLnN0YXJ0LmNvbHVtbikpICYmCi0gICAgICAgICAgICAoIWlnbm9yZS5lbmQgfHwgKGxv
Y2F0aW9uLmxpbmUgPCBpZ25vcmUuZW5kLmxpbmUgfHwgKGxvY2F0aW9uLmxpbmUgPT09IGlnbm9y
ZS5lbmQubGluZSAmJiBsb2NhdGlvbi5jb2x1bW4gPD0gaWdub3JlLmVuZC5jb2x1bW4pKSkpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotLyoqCi0gKiBQcm9jZXNzIGluaXRpYWwgY29uZmlnIHRvIG1ha2Ug
aXQgc2FmZSB0byBleHRlbmQgYnkgZmlsZSBjb21tZW50IGNvbmZpZwotICogQHBhcmFtICB7T2Jq
ZWN0fSBjb25maWcgSW5pdGlhbCBjb25maWcKLSAqIEByZXR1cm5zIHtPYmplY3R9ICAgICAgICBQ
cm9jZXNzZWQgY29uZmlnCi0gKi8KLWZ1bmN0aW9uIHByZXBhcmVDb25maWcoY29uZmlnKSB7Ci0K
LSAgICBjb25maWcuZ2xvYmFscyA9IGNvbmZpZy5nbG9iYWxzIHx8IGNvbmZpZy5nbG9iYWwgfHwg
e307Ci0gICAgZGVsZXRlIGNvbmZpZy5nbG9iYWw7Ci0KLSAgICB2YXIgY29waWVkUnVsZXMgPSB7
fTsKLSAgICBpZiAodHlwZW9mIGNvbmZpZy5ydWxlcyA9PT0gIm9iamVjdCIpIHsKLSAgICAgICAg
T2JqZWN0LmtleXMoY29uZmlnLnJ1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsKLSAgICAgICAg
ICAgIHZhciBydWxlID0gY29uZmlnLnJ1bGVzW2tdOwotICAgICAgICAgICAgaWYgKEFycmF5Lmlz
QXJyYXkocnVsZSkpIHsKLSAgICAgICAgICAgICAgICBjb3BpZWRSdWxlc1trXSA9IHJ1bGUuc2xp
Y2UoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29waWVkUnVsZXNb
a10gPSBydWxlOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gewotICAgICAgICBydWxlczogY29waWVkUnVsZXMsCi0gICAgICAgIGdsb2JhbHM6IHV0aWwu
bWVyZ2VDb25maWdzKHt9LCBjb25maWcuZ2xvYmFscyksCi0gICAgICAgIGVudjogdXRpbC5tZXJn
ZUNvbmZpZ3Moe30sIGNvbmZpZy5lbnYgfHwge30pLAotICAgICAgICBzZXR0aW5nczogdXRpbC5t
ZXJnZUNvbmZpZ3Moe30sIGNvbmZpZy5zZXR0aW5ncyB8fCB7fSkKLSAgICB9OwotfQotCi0vLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUHVibGljIEludGVyZmFjZQotLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotLyoqCi0gKiBPYmplY3QgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdmVyaWZ5
aW5nIEphdmFTY3JpcHQgdGV4dAotICogQG5hbWUgZXNsaW50Ci0gKi8KLW1vZHVsZS5leHBvcnRz
ID0gKGZ1bmN0aW9uKCkgewotCi0gICAgdmFyIGFwaSA9IE9iamVjdC5jcmVhdGUobmV3IEV2ZW50
RW1pdHRlcigpKSwKLSAgICAgICAgbWVzc2FnZXMgPSBbXSwKLSAgICAgICAgY3VycmVudFRleHQg
PSBudWxsLAotICAgICAgICBjdXJyZW50VGV4dExpbmVzID0gW10sCi0gICAgICAgIGN1cnJlbnRD
b25maWcgPSBudWxsLAotICAgICAgICBjdXJyZW50VG9rZW5zID0gbnVsbCwKLSAgICAgICAgY3Vy
cmVudFNjb3BlcyA9IG51bGwsCi0gICAgICAgIHNjb3BlTWFwID0gbnVsbCwKLSAgICAgICAgY3Vy
cmVudEZpbGVuYW1lID0gbnVsbCwKLSAgICAgICAgY29udHJvbGxlciA9IG51bGwsCi0gICAgICAg
IHJlcG9ydGluZ0NvbmZpZyA9IFtdLAotICAgICAgICBjb21tZW50TG9jc0VudGVyID0gW10sCi0g
ICAgICAgIGNvbW1lbnRMb2NzRXhpdCA9IFtdOwotCi0gICAgLyoqCi0gICAgICogUGFyc2VzIHRl
eHQgaW50byBhbiBBU1QuIE1vdmVkIG91dCBoZXJlIGJlY2F1c2UgdGhlIHRyeS1jYXRjaCBwcmV2
ZW50cwotICAgICAqIG9wdGltaXphdGlvbiBvZiBmdW5jdGlvbnMsIHNvIGl0J3MgYmVzdCB0byBr
ZWVwIHRoZSB0cnktY2F0Y2ggYXMgaXNvbGF0ZWQKLSAgICAgKiBhcyBwb3NzaWJsZQotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRoZSB0ZXh0IHRvIHBhcnNlLgotICAgICAqIEByZXR1cm5z
IHtBU1ROb2RlfSBUaGUgQVNUIGlmIHN1Y2Nlc3NmdWwgb3IgbnVsbCBpZiBub3QuCi0gICAgICog
QHByaXZhdGUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBwYXJzZSh0ZXh0KSB7Ci0gICAgICAgIC8q
Ci0gICAgICAgICAqIENoZWNrIGZvciBwYXJzaW5nIGVycm9ycyBmaXJzdC4gSWYgdGhlcmUncyBh
IHBhcnNpbmcgZXJyb3IsIG5vdGhpbmcKLSAgICAgICAgICogZWxzZSBjYW4gaGFwcGVuLiBIb3dl
dmVyLCBhIHBhcnNpbmcgZXJyb3IgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IKLSAgICAgICAgICog
ZnJvbSB0aGlzIG1ldGhvZCAtIGl0J3MganVzdCBjb25zaWRlcmVkIGEgZmF0YWwgZXJyb3IgbWVz
c2FnZSwgYQotICAgICAgICAgKiBwcm9ibGVtIHRoYXQgRVNMaW50IGlkZW50aWZpZWQganVzdCBs
aWtlIGFueSBvdGhlci4KLSAgICAgICAgICovCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZXNwcmltYS5wYXJzZSh0ZXh0LCB7Ci0gICAgICAgICAgICAgICAgbG9jOiB0cnVlLAot
ICAgICAgICAgICAgICAgIHJhbmdlOiB0cnVlLAotICAgICAgICAgICAgICAgIHJhdzogdHJ1ZSwK
LSAgICAgICAgICAgICAgICB0b2tlbnM6IHRydWUsCi0gICAgICAgICAgICAgICAgY29tbWVudDog
dHJ1ZSwKLSAgICAgICAgICAgICAgICBhdHRhY2hDb21tZW50OiB0cnVlCi0gICAgICAgICAgICB9
KTsKLSAgICAgICAgfSBjYXRjaCAoZXgpIHsKLQotICAgICAgICAgICAgbWVzc2FnZXMucHVzaCh7
Ci0gICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsCi0gICAgICAgICAgICAgICAgc2V2ZXJpdHk6
IDIsCi0KLSAgICAgICAgICAgICAgICAvLyBtZXNzYWdlcyBjb21lIGFzICJMaW5lIFg6IFVuZXhw
ZWN0ZWQgdG9rZW4gZm9vIiwgc28gc3RyaXAgb2ZmIGxlYWRpbmcgcGFydAotICAgICAgICAgICAg
ICAgIG1lc3NhZ2U6IGV4Lm1lc3NhZ2Uuc3Vic3RyaW5nKGV4Lm1lc3NhZ2UuaW5kZXhPZigiOiIp
ICsgMSkudHJpbSgpLAotCi0gICAgICAgICAgICAgICAgbGluZTogZXgubGluZU51bWJlciwKLSAg
ICAgICAgICAgICAgICBjb2x1bW46IGV4LmNvbHVtbgotICAgICAgICAgICAgfSk7Ci0KLSAgICAg
ICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog
Q2hlY2sgY29sbGVjdGlvbiBvZiBjb21tZW50cyB0byBwcmV2ZW50IGRvdWJsZSBldmVudCBmb3Ig
Y29tbWVudCBhcwotICAgICAqIGxlYWRpbmcgYW5kIHRyYWlsaW5nLCB0aGVuIGVtaXQgZXZlbnQg
aWYgcGFzc2luZwotICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBjb21tZW50cyBDb2xsZWN0aW9u
IG9mIGNvbW1lbnQgbm9kZXMKLSAgICAgKiBAcGFyYW0ge09iamVjdFtdfSBsb2NzIExpc3Qgb2Yg
bG9jYXRpb25zIG9mIHByZXZpb3VzIGNvbW1lbnQgbm9kZXMKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gZXZlbnROYW1lIEV2ZW50IG5hbWUgcG9zdGZpeAotICAgICAqIEByZXR1cm5zIHt2b2lkfQot
ICAgICAqLwotICAgIGZ1bmN0aW9uIGVtaXRDb21tZW50cyhjb21tZW50cywgbG9jcywgZXZlbnRO
YW1lKSB7Ci0KLSAgICAgICAgaWYgKGNvbW1lbnRzLmxlbmd0aCkgewotICAgICAgICAgICAgY29t
bWVudHMuZm9yRWFjaChmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxvY3Mu
aW5kZXhPZihub2RlLmxvYykgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBsb2NzLnNwbGlj
ZShsb2NzLmluZGV4T2Yobm9kZS5sb2MpLCAxKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBsb2NzLnB1c2gobm9kZS5sb2MpOwotICAgICAgICAgICAgICAg
ICAgICBhcGkuZW1pdChub2RlLnR5cGUgKyBldmVudE5hbWUsIG5vZGUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAg
ICogU2hvcnRjdXQgdG8gY2hlY2sgYW5kIGVtaXQgZW50ZXIgb2YgY29tbWVudCBub2RlcwotICAg
ICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBjb21tZW50cyBDb2xsZWN0aW9uIG9mIGNvbW1lbnQgbm9k
ZXMKLSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBlbWl0Q29t
bWVudHNFbnRlcihjb21tZW50cykgewotICAgICAgICBlbWl0Q29tbWVudHMoY29tbWVudHMsIGNv
bW1lbnRMb2NzRW50ZXIsICJDb21tZW50Iik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2hv
cnRjdXQgdG8gY2hlY2sgYW5kIGVtaXQgZXhpdCBvZiBjb21tZW50IG5vZGVzCi0gICAgICogQHBh
cmFtIHtBU1ROb2RlW119IGNvbW1lbnRzIENvbGxlY3Rpb24gb2YgY29tbWVudCBub2RlcwotICAg
ICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIGVtaXRDb21tZW50c0V4
aXQoY29tbWVudHMpIHsKLSAgICAgICAgZW1pdENvbW1lbnRzKGNvbW1lbnRzLCBjb21tZW50TG9j
c0V4aXQsICJDb21tZW50OmV4aXQiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgdGhl
IHNldmVyaXR5IGxldmVsIG9mIGEgcnVsZSAoMCAtIG5vbmUsIDEgLSB3YXJuaW5nLCAyIC0gZXJy
b3IpCi0gICAgICogUmV0dXJucyAwIGlmIHRoZSBydWxlIGNvbmZpZyBpcyBub3QgdmFsaWQgKGFu
IEFycmF5IG9yIGEgbnVtYmVyKQotICAgICAqIEBwYXJhbSB7QXJyYXl8bnVtYmVyfSBydWxlQ29u
ZmlnIHJ1bGUgY29uZmlndXJhdGlvbgotICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IDAsIDEsIG9y
IDIsIGluZGljYXRpbmcgcnVsZSBzZXZlcml0eQotICAgICAqLwotICAgIGZ1bmN0aW9uIGdldFJ1
bGVTZXZlcml0eShydWxlQ29uZmlnKSB7Ci0gICAgICAgIGlmICh0eXBlb2YgcnVsZUNvbmZpZyA9
PT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgIHJldHVybiBydWxlQ29uZmlnOwotICAgICAgICB9
IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocnVsZUNvbmZpZykpIHsKLSAgICAgICAgICAgIHJldHVy
biBydWxlQ29uZmlnWzBdOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgdGhlIG9wdGlvbnMgZm9y
IGEgcnVsZSAobm90IGluY2x1ZGluZyBzZXZlcml0eSksIGlmIGFueQotICAgICAqIEBwYXJhbSB7
QXJyYXl8bnVtYmVyfSBydWxlQ29uZmlnIHJ1bGUgY29uZmlndXJhdGlvbgotICAgICAqIEByZXR1
cm5zIHtBcnJheX0gb2YgcnVsZSBvcHRpb25zLCBlbXB0eSBBcnJheSBpZiBub25lCi0gICAgICov
Ci0gICAgZnVuY3Rpb24gZ2V0UnVsZU9wdGlvbnMocnVsZUNvbmZpZykgewotICAgICAgICBpZiAo
QXJyYXkuaXNBcnJheShydWxlQ29uZmlnKSkgewotICAgICAgICAgICAgcmV0dXJuIHJ1bGVDb25m
aWcuc2xpY2UoMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gW107Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBzZXQgdW5saW1pdGVkIGxpc3RlbmVycyAoc2VlIGh0
dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy81MjQpCi0gICAgYXBpLnNldE1h
eExpc3RlbmVycygwKTsKLQotICAgIC8qKgotICAgICAqIFJlc2V0cyB0aGUgaW50ZXJuYWwgc3Rh
dGUgb2YgdGhlIG9iamVjdC4KLSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKi8KLSAgICBh
cGkucmVzZXQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMo
KTsKLSAgICAgICAgbWVzc2FnZXMgPSBbXTsKLSAgICAgICAgY3VycmVudENvbmZpZyA9IG51bGw7
Ci0gICAgICAgIGN1cnJlbnRUZXh0ID0gbnVsbDsKLSAgICAgICAgY3VycmVudFRleHRMaW5lcyA9
IFtdOwotICAgICAgICBjdXJyZW50VG9rZW5zID0gbnVsbDsKLSAgICAgICAgY3VycmVudFNjb3Bl
cyA9IG51bGw7Ci0gICAgICAgIHNjb3BlTWFwID0gbnVsbDsKLSAgICAgICAgY29udHJvbGxlciA9
IG51bGw7Ci0gICAgICAgIHJlcG9ydGluZ0NvbmZpZyA9IFtdOwotICAgICAgICBjb21tZW50TG9j
c0VudGVyID0gW107Ci0gICAgICAgIGNvbW1lbnRMb2NzRXhpdCA9IFtdOwotICAgIH07Ci0KLSAg
ICAvKioKLSAgICAgKiBWZXJpZmllcyB0aGUgdGV4dCBhZ2FpbnN0IHRoZSBydWxlcyBzcGVjaWZp
ZWQgYnkgdGhlIHNlY29uZCBhcmd1bWVudC4KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBU
aGUgSmF2YVNjcmlwdCB0ZXh0IHRvIHZlcmlmeS4KLSAgICAgKiBAcGFyYW0ge09iamVjdH0gY29u
ZmlnIEFuIG9iamVjdCB3aG9zZSBrZXlzIHNwZWNpZnkgdGhlIHJ1bGVzIHRvIHVzZS4KLSAgICAg
KiBAcGFyYW0ge3N0cmluZz19IGZpbGVuYW1lIFRoZSBvcHRpb25hbCBmaWxlbmFtZSBvZiB0aGUg
ZmlsZSBiZWluZyBjaGVja2VkLgotICAgICAqICAgICAgSWYgdGhpcyBpcyBub3Qgc2V0LCB0aGUg
ZmlsZW5hbWUgd2lsbCBkZWZhdWx0IHRvICc8aW5wdXQ+JyBpbiB0aGUgcnVsZSBjb250ZXh0Lgot
ICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHNhdmVTdGF0ZSBJbmRpY2F0ZXMgaWYgdGhlIHN0YXRl
IGZyb20gdGhlIGxhc3QgcnVuIHNob3VsZCBiZSBzYXZlZC4KLSAgICAgKiAgICAgIE1vc3RseSB1
c2VmdWwgZm9yIHRlc3RpbmcgcHVycG9zZXMuCi0gICAgICogQHJldHVybnMge09iamVjdFtdfSBU
aGUgcmVzdWx0cyBhcyBhbiBhcnJheSBvZiBtZXNzYWdlcyBvciBudWxsIGlmIG5vIG1lc3NhZ2Vz
LgotICAgICAqLwotICAgIGFwaS52ZXJpZnkgPSBmdW5jdGlvbih0ZXh0LCBjb25maWcsIGZpbGVu
YW1lLCBzYXZlU3RhdGUpIHsKLQotICAgICAgICB2YXIgYXN0OwotCi0gICAgICAgIC8vIHNldCB0
aGUgY3VycmVudCBwYXJzZWQgZmlsZW5hbWUKLSAgICAgICAgY3VycmVudEZpbGVuYW1lID0gZmls
ZW5hbWU7Ci0KLSAgICAgICAgaWYgKCFzYXZlU3RhdGUpIHsKLSAgICAgICAgICAgIHRoaXMucmVz
ZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFzdCA9IHBhcnNlKHRleHQucmVwbGFjZSgvXiMh
KFteXHJcbl0rW1xyXG5dKykvLCAiLy8kMSIpKTsKLQotICAgICAgICAvLyBpZiBFc3ByaW1hIGZh
aWxlZCB0byBwYXJzZSB0aGUgZmlsZSwgdGhlcmUncyBubyBzZW5zZSBpbiBzZXR0aW5nIHVwIHJ1
bGVzCi0gICAgICAgIGlmIChhc3QpIHsKLSAgICAgICAgICAgIC8vIHByb2Nlc3MgaW5pdGlhbCBj
b25maWcgdG8gbWFrZSBpdCBzYWZlIHRvIGV4dGVuZAotICAgICAgICAgICAgY29uZmlnID0gcHJl
cGFyZUNvbmZpZyhjb25maWcpOwotCi0gICAgICAgICAgICAvLyBwYXJzZSBnbG9iYWwgY29tbWVu
dHMgYW5kIG1vZGlmeSBjb25maWcKLSAgICAgICAgICAgIG1vZGlmeUNvbmZpZ3NGcm9tQ29tbWVu
dHMoYXN0LCBjb25maWcsIHJlcG9ydGluZ0NvbmZpZyk7Ci0KLSAgICAgICAgICAgIC8vIGVuYWJs
ZSBhcHByb3ByaWF0ZSBydWxlcwotICAgICAgICAgICAgT2JqZWN0LmtleXMoY29uZmlnLnJ1bGVz
KS5maWx0ZXIoZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdldFJ1bGVT
ZXZlcml0eShjb25maWcucnVsZXNba2V5XSkgPiAwOwotICAgICAgICAgICAgfSkuZm9yRWFjaChm
dW5jdGlvbihrZXkpIHsKLQotICAgICAgICAgICAgICAgIHZhciBydWxlQ3JlYXRvciA9IHJ1bGVz
LmdldChrZXkpLAotICAgICAgICAgICAgICAgICAgICBzZXZlcml0eSA9IGdldFJ1bGVTZXZlcml0
eShjb25maWcucnVsZXNba2V5XSksCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBnZXRS
dWxlT3B0aW9ucyhjb25maWcucnVsZXNba2V5XSksCi0gICAgICAgICAgICAgICAgICAgIHJ1bGU7
Ci0KLSAgICAgICAgICAgICAgICBpZiAocnVsZUNyZWF0b3IpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUgPSBydWxlQ3JlYXRvcihuZXcg
UnVsZUNvbnRleHQoa2V5LCBhcGksIHNldmVyaXR5LCBvcHRpb25zLCBjb25maWcuc2V0dGluZ3Mp
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGFsbCB0aGUgbm9kZSB0eXBlcyBh
cyBsaXN0ZW5lcnMKLSAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHJ1bGUpLmZv
ckVhY2goZnVuY3Rpb24obm9kZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cGkub24obm9kZVR5cGUsIHJ1bGVbbm9kZVR5cGVdKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGV4KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBleC5tZXNzYWdlID0gIkVycm9yIHdoaWxlIGxvYWRpbmcgcnVsZSAnIiArIGtleSAr
ICInOiAiICsgZXgubWVzc2FnZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4Owot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRlZmluaXRpb24gZm9yIHJ1bGUgJyIgKyBr
ZXkgKyAiJyB3YXMgbm90IGZvdW5kLiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0pOwotCi0gICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBzbyBydWxlcyBjYW4gYWNjZXNzIGFz
IG5lY2Vzc2FyeQotICAgICAgICAgICAgY3VycmVudENvbmZpZyA9IGNvbmZpZzsKLSAgICAgICAg
ICAgIGN1cnJlbnRUZXh0ID0gdGV4dDsKLSAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBuZXcgZXN0
cmF2ZXJzZS5Db250cm9sbGVyKCk7Ci0KLSAgICAgICAgICAgIC8vIGdhdGhlciBkYXRhIHRoYXQg
bWF5IGJlIG5lZWRlZCBieSB0aGUgcnVsZXMKLSAgICAgICAgICAgIGN1cnJlbnRTY29wZXMgPSBl
c2NvcGUuYW5hbHl6ZShhc3QsIHsgaWdub3JlRXZhbDogdHJ1ZSB9KS5zY29wZXM7Ci0KLSAgICAg
ICAgICAgIC8qCi0gICAgICAgICAgICAgKiBJbmRleCB0aGUgc2NvcGVzIGJ5IHRoZSBzdGFydCBy
YW5nZSBvZiB0aGVpciBibG9jayBmb3IgZWZmaWNpZW50Ci0gICAgICAgICAgICAgKiBsb29rdXAg
aW4gZ2V0U2NvcGUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNjb3BlTWFwID0gW107
Ci0gICAgICAgICAgICBjdXJyZW50U2NvcGVzLmZvckVhY2goZnVuY3Rpb24gKHNjb3BlLCBpbmRl
eCkgewotICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHNjb3BlLmJsb2NrLnJhbmdlWzBdOwot
Ci0gICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHR3byBzY29wZXMgYXJlIHJldHVybmVkIGZv
ciBhIGdpdmVuIG5vZGUuIFRoaXMgaXMKLSAgICAgICAgICAgICAgICAvLyBoYW5kbGVkIGxhdGVy
IGluIGEga25vd24gd2F5LCBzbyBqdXN0IGRvbid0IG92ZXJ3cml0ZSBoZXJlLgotICAgICAgICAg
ICAgICAgIGlmICghc2NvcGVNYXBbcmFuZ2VdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNjb3Bl
TWFwW3JhbmdlXSA9IGluZGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwot
Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogU3BsaXQgdGV4dCBoZXJlIGludG8gYXJy
YXkgb2YgbGluZXMgc28KLSAgICAgICAgICAgICAqIGl0J3Mgbm90IGJlaW5nIGRvbmUgcmVwZWF0
ZWRseQotICAgICAgICAgICAgICogYnkgaW5kaXZpZHVhbCBydWxlcy4KLSAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgY3VycmVudFRleHRMaW5lcyA9IGN1cnJlbnRUZXh0LnNwbGl0KC9ccj9c
bi9nKTsKLQotICAgICAgICAgICAgLy8gRnJlZXppbmcgc28gYXJyYXkgaXNuJ3QgYWNjaWRlbnRh
bGx5IGNoYW5nZWQgYnkgYSBydWxlLgotICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZShjdXJyZW50
VGV4dExpbmVzKTsKLQotICAgICAgICAgICAgLyogZ2V0IGFsbCB0b2tlbnMgZnJvbSB0aGUgYXN0
IGFuZCBzdG9yZSB0aGVtIGFzIGEgaGFzaHRhYmxlIHRvCi0gICAgICAgICAgICAgKiBpbXByb3Zl
IHRyYXZlcnNhbCBzcGVlZCB3aGVuIHdhbnRpbmcgdG8gZmluZCB0b2tlbnMgZm9yIGEgZ2l2ZW4K
LSAgICAgICAgICAgICAqIG5vZGUKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY3VycmVu
dFRva2VucyA9IFtdOwotICAgICAgICAgICAgYXN0LnRva2Vucy5mb3JFYWNoKGZ1bmN0aW9uKHRv
a2VuKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudFRva2Vuc1t0b2tlbi5yYW5nZVswXV0gPSB0
b2tlbjsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAvLyBhdWdtZW50IGdsb2JhbCBz
Y29wZSB3aXRoIGRlY2xhcmVkIGdsb2JhbCB2YXJpYWJsZXMKLSAgICAgICAgICAgIGFkZERlY2xh
cmVkR2xvYmFscyhhc3QsIGN1cnJlbnRTY29wZXNbMF0sIGN1cnJlbnRDb25maWcpOwotCi0gICAg
ICAgICAgICAvKgotICAgICAgICAgICAgICogRWFjaCBub2RlIGhhcyBhIHR5cGUgcHJvcGVydHku
IFdoZW5ldmVyIGEgcGFydGljdWxhciB0eXBlIG9mIG5vZGUgaXMgZm91bmQsCi0gICAgICAgICAg
ICAgKiBhbiBldmVudCBpcyBmaXJlZC4gVGhpcyBhbGxvd3MgYW55IGxpc3RlbmVycyB0byBhdXRv
bWF0aWNhbGx5IGJlIGluZm9ybWVkCi0gICAgICAgICAgICAgKiB0aGF0IHRoaXMgdHlwZSBvZiBu
b2RlIGhhcyBiZWVuIGZvdW5kIGFuZCByZWFjdCBhY2NvcmRpbmdseS4KLSAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgY29udHJvbGxlci50cmF2ZXJzZShhc3QsIHsKLSAgICAgICAgICAgICAg
ICBlbnRlcjogZnVuY3Rpb24obm9kZSwgcGFyZW50KSB7Ci0KLSAgICAgICAgICAgICAgICAgICAg
dmFyIGNvbW1lbnRzID0gYXBpLmdldENvbW1lbnRzKG5vZGUpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGVtaXRDb21tZW50c0VudGVyKGNvbW1lbnRzLmxlYWRpbmcpOwotICAgICAgICAgICAgICAg
ICAgICBub2RlLnBhcmVudCA9IHBhcmVudDsKLSAgICAgICAgICAgICAgICAgICAgYXBpLmVtaXQo
bm9kZS50eXBlLCBub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgZW1pdENvbW1lbnRzRW50ZXIo
Y29tbWVudHMudHJhaWxpbmcpOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAg
bGVhdmU6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWVu
dHMgPSBhcGkuZ2V0Q29tbWVudHMobm9kZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZW1pdENv
bW1lbnRzRXhpdChjb21tZW50cy50cmFpbGluZyk7Ci0gICAgICAgICAgICAgICAgICAgIGFwaS5l
bWl0KG5vZGUudHlwZSArICI6ZXhpdCIsIG5vZGUpOwotICAgICAgICAgICAgICAgICAgICBlbWl0
Q29tbWVudHNFeGl0KGNvbW1lbnRzLmxlYWRpbmcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0pOwotCi0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbWVzc2FnZXM7Ci0gICAg
fTsKLQotICAgIC8qKgotICAgICAqIFJlcG9ydHMgYSBtZXNzYWdlIGZyb20gb25lIG9mIHRoZSBy
dWxlcy4KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcnVsZUlkIFRoZSBJRCBvZiB0aGUgcnVsZSBj
YXVzaW5nIHRoZSBtZXNzYWdlLgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzZXZlcml0eSBUaGUg
c2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIHJ1bGUgYXMgY29uZmlndXJlZC4KLSAgICAgKiBAcGFyYW0g
e0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRoYXQgdGhlIG1lc3NhZ2UgcmVsYXRlcyB0by4K
LSAgICAgKiBAcGFyYW0ge09iamVjdD19IGxvY2F0aW9uIEFuIG9iamVjdCBjb250YWluaW5nIHRo
ZSBlcnJvciBsaW5lIGFuZCBjb2x1bW4KLSAgICAgKiAgICAgIG51bWJlcnMuIElmIGxvY2F0aW9u
IGlzIG5vdCBwcm92aWRlZCB0aGUgbm9kZSdzIHN0YXJ0IGxvY2F0aW9uIHdpbGwKLSAgICAgKiAg
ICAgIGJlIHVzZWQuCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGFjdHVhbCBt
ZXNzYWdlLgotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIHRlbXBsYXRlIGRh
dGEgd2hpY2ggcHJvZHVjZXMgYSBmb3JtYXR0ZWQgbWVzc2FnZQotICAgICAqICAgICB3aXRoIHN5
bWJvbHMgYmVpbmcgcmVwbGFjZWQgYnkgdGhpcyBvYmplY3QncyB2YWx1ZXMuCi0gICAgICogQHJl
dHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAgYXBpLnJlcG9ydCA9IGZ1bmN0aW9uKHJ1bGVJZCwg
c2V2ZXJpdHksIG5vZGUsIGxvY2F0aW9uLCBtZXNzYWdlLCBvcHRzKSB7Ci0KLSAgICAgICAgaWYg
KHR5cGVvZiBsb2NhdGlvbiA9PT0gInN0cmluZyIpIHsKLSAgICAgICAgICAgIG9wdHMgPSBtZXNz
YWdlOwotICAgICAgICAgICAgbWVzc2FnZSA9IGxvY2F0aW9uOwotICAgICAgICAgICAgbG9jYXRp
b24gPSBub2RlLmxvYy5zdGFydDsKLSAgICAgICAgfQotCi0gICAgICAgIE9iamVjdC5rZXlzKG9w
dHMgfHwge30pLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewotICAgICAgICAgICAgdmFyIHJ4ID0g
bmV3IFJlZ0V4cCgie3siICsgZXNjYXBlUmVnRXhwKGtleSkgKyAifX0iLCAiZyIpOwotICAgICAg
ICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShyeCwgb3B0c1trZXldKTsKLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgaWYgKGlzRGlzYWJsZWRCeVJlcG9ydGluZ0NvbmZpZyhyZXBvcnRpbmdD
b25maWcsIHJ1bGVJZCwgbG9jYXRpb24pKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBtZXNzYWdlcy5wdXNoKHsKLSAgICAgICAgICAgIHJ1bGVJZDogcnVsZUlk
LAotICAgICAgICAgICAgc2V2ZXJpdHk6IHNldmVyaXR5LAotICAgICAgICAgICAgbm9kZTogbm9k
ZSwKLSAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCi0gICAgICAgICAgICBsaW5lOiBsb2Nh
dGlvbi5saW5lLAotICAgICAgICAgICAgY29sdW1uOiBsb2NhdGlvbi5jb2x1bW4sCi0gICAgICAg
ICAgICBzb3VyY2U6IGFwaS5nZXRTb3VyY2Uobm9kZSkKLSAgICAgICAgfSk7Ci0gICAgfTsKLQot
ICAgIC8qKgotICAgICAqIEdldHMgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgZ2l2ZW4gbm9kZS4K
LSAgICAgKiBAcGFyYW0ge0FTVE5vZGU9fSBub2RlIFRoZSBBU1Qgbm9kZSB0byBnZXQgdGhlIHRl
eHQgZm9yLgotICAgICAqIEBwYXJhbSB7aW50PX0gYmVmb3JlQ291bnQgVGhlIG51bWJlciBvZiBj
aGFyYWN0ZXJzIGJlZm9yZSB0aGUgbm9kZSB0byByZXRyaWV2ZS4KLSAgICAgKiBAcGFyYW0ge2lu
dD19IGFmdGVyQ291bnQgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBub2RlIHRv
IHJldHJpZXZlLgotICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSB0ZXh0IHJlcHJlc2VudGlu
ZyB0aGUgQVNUIG5vZGUuCi0gICAgICovCi0gICAgYXBpLmdldFNvdXJjZSA9IGZ1bmN0aW9uKG5v
ZGUsIGJlZm9yZUNvdW50LCBhZnRlckNvdW50KSB7Ci0gICAgICAgIGlmIChub2RlKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gKGN1cnJlbnRUZXh0ICE9PSBudWxsKSA/IGN1cnJlbnRUZXh0LnNsaWNl
KG5vZGUucmFuZ2VbMF0gLSAoYmVmb3JlQ291bnQgfHwgMCksCi0gICAgICAgICAgICAgICAgbm9k
ZS5yYW5nZVsxXSArIChhZnRlckNvdW50IHx8IDApKSA6IG51bGw7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7Ci0gICAgICAgIH0KLQotICAgIH07Ci0K
LSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBlbnRpcmUgc291cmNlIHRleHQgc3BsaXQgaW50byBh
biBhcnJheSBvZiBsaW5lcy4KLSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBzb3VyY2UgdGV4
dCBhcyBhbiBhcnJheSBvZiBsaW5lcy4KLSAgICAgKi8KLSAgICBhcGkuZ2V0U291cmNlTGluZXMg
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0TGluZXM7Ci0gICAgfTsK
LQotICAgIC8qKgotICAgICAqIEdldHMgYWxsIGNvbW1lbnRzIGZvciB0aGUgZ2l2ZW4gbm9kZS4K
LSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRvIGdldCB0aGUgY29t
bWVudHMgZm9yLgotICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBsaXN0IG9mIGNvbW1lbnRz
IGluZGV4ZWQgYnkgdGhlaXIgcG9zaXRpb24uCi0gICAgICovCi0gICAgYXBpLmdldENvbW1lbnRz
ID0gZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgIHZhciBsZWFkaW5nQ29tbWVudHMgPSBub2Rl
LmxlYWRpbmdDb21tZW50cyB8fCBbXSwKLSAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBu
b2RlLnRyYWlsaW5nQ29tbWVudHMgfHwgW107Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogRXNw
cmltYSBhZGRzIGEgImNvbW1lbnRzIiBhcnJheSBvbiBQcm9ncmFtIG5vZGVzIHJhdGhlciB0aGFu
Ci0gICAgICAgICAqIGxlYWRpbmdDb21tZW50cy90cmFpbGluZ0NvbW1lbnRzLiBDb21tZW50cyBh
cmUgb25seSBsZWZ0IGluIHRoZQotICAgICAgICAgKiBQcm9ncmFtIG5vZGUgY29tbWVudHMgYXJy
YXkgaWYgdGhlcmUgaXMgbm8gZXhlY3V0YWJsZSBjb2RlLgotICAgICAgICAgKi8KLSAgICAgICAg
aWYgKG5vZGUudHlwZSA9PT0gIlByb2dyYW0iKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS5ib2R5
Lmxlbmd0aCA9PT0gMCkgewotICAgICAgICAgICAgICAgIGxlYWRpbmdDb21tZW50cyA9IG5vZGUu
Y29tbWVudHM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgbGVhZGluZzogbGVhZGluZ0NvbW1lbnRzLAotICAgICAgICAgICAgdHJhaWxp
bmc6IHRyYWlsaW5nQ29tbWVudHMKLSAgICAgICAgfTsKLSAgICB9OwotCi0gICAgLyoqCi0gICAg
ICogUmV0cmlldmVzIHRoZSBKU0RvYyBjb21tZW50IGZvciBhIGdpdmVuIG5vZGUuCi0gICAgICog
QHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBnZXQgdGhlIGNvbW1lbnQgZm9y
LgotICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgQmxvY2tDb21tZW50IG5vZGUgY29udGFp
bmluZyB0aGUgSlNEb2MgZm9yIHRoZQotICAgICAqICAgICAgZ2l2ZW4gbm9kZSBvciBudWxsIGlm
IG5vdCBmb3VuZC4KLSAgICAgKi8KLSAgICBhcGkuZ2V0SlNEb2NDb21tZW50ID0gZnVuY3Rpb24o
bm9kZSkgewotCi0gICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudCwKLSAgICAgICAgICAg
IGxpbmUgPSBub2RlLmxvYy5zdGFydC5saW5lOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBG
aW5kcyBhIEpTRG9jIGNvbW1lbnQgbm9kZSBpbiBhbiBhcnJheSBvZiBjb21tZW50IG5vZGVzLgot
ICAgICAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gY29tbWVudHMgVGhlIGFycmF5IG9mIGNvbW1l
bnQgbm9kZXMgdG8gc2VhcmNoLgotICAgICAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gVGhlIG5v
ZGUgaWYgZm91bmQsIG51bGwgaWYgbm90LgotICAgICAgICAgKiBAcHJpdmF0ZQotICAgICAgICAg
Ki8KLSAgICAgICAgZnVuY3Rpb24gZmluZEpTRG9jQ29tbWVudChjb21tZW50cykgewotCi0gICAg
ICAgICAgICBpZiAoY29tbWVudHMpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gY29t
bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNvbW1lbnRzW2ldLnR5cGUgPT09ICJCbG9jayIgJiYgY29tbWVudHNbaV0udmFsdWUuY2hhckF0
KDApID09PSAiKiIpIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUgLSBjb21t
ZW50c1tpXS5sb2MuZW5kLmxpbmUgPD0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjb21tZW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dp
dGNoIChub2RlLnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgIkZ1bmN0aW9uRGVjbGFyYXRpb24i
OgotICAgICAgICAgICAgICAgIHJldHVybiBmaW5kSlNEb2NDb21tZW50KG5vZGUubGVhZGluZ0Nv
bW1lbnRzKTsKLQotICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb25FeHByZXNzaW9uIjoKLQotICAg
ICAgICAgICAgICAgIGlmIChwYXJlbnQudHlwZSAhPT0gIkNhbGxFeHByZXNzaW9uIiB8fCBwYXJl
bnQuY2FsbGVlICE9PSBub2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnQg
JiYgIXBhcmVudC5sZWFkaW5nQ29tbWVudHMgJiYgcGFyZW50LnR5cGUgIT09ICJGdW5jdGlvbkV4
cHJlc3Npb24iICYmIHBhcmVudC50eXBlICE9PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50ICYmIChwYXJl
bnQudHlwZSAhPT0gIkZ1bmN0aW9uRGVjbGFyYXRpb24iKSA/IGZpbmRKU0RvY0NvbW1lbnQocGFy
ZW50LmxlYWRpbmdDb21tZW50cykgOiBudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIC8vIGZhbGxzIHRocm91Z2gKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKioKLSAg
ICAgKiBHZXRzIGEgbnVtYmVyIG9mIHRva2VucyB0aGF0IHByZWNlZGUgYSBnaXZlbiBub2RlJ3Mg
dG9rZW5zIGluIHRoZSB0b2tlbiBzdHJlYW0uCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2Rl
IFRoZSBBU1Qgbm9kZS4KLSAgICAgKiBAcGFyYW0ge2ludH0gW2JlZm9yZUNvdW50PTBdIFRoZSBu
dW1iZXIgb2YgdG9rZW5zIGJlZm9yZSB0aGUgbm9kZSB0byByZXRyaWV2ZS4KLSAgICAgKiBAcmV0
dXJucyB7W1Rva2VuXX0gQXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdG9rZW5zLgotICAg
ICAqLwotICAgIGFwaS5nZXRUb2tlbnNCZWZvcmUgPSBmdW5jdGlvbihub2RlLCBiZWZvcmVDb3Vu
dCkgewotICAgICAgICB2YXIgYmVmb3JlVG9rZW5zID0gW10sIGN1cnNvciA9IG5vZGUucmFuZ2Vb
MF0gLSAxOwotICAgICAgICB3aGlsZSAoYmVmb3JlQ291bnQgPiAwICYmIGN1cnNvciA+PSAwKSB7
Ci0gICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7Ci0gICAgICAgICAgICAg
ICAgYmVmb3JlVG9rZW5zLnVuc2hpZnQoY3VycmVudFRva2Vuc1tjdXJzb3JdKTsKLSAgICAgICAg
ICAgICAgICAtLWJlZm9yZUNvdW50OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLS1jdXJz
b3I7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJlZm9yZVRva2VuczsKLSAgICB9OwotCi0g
ICAgLyoqCi0gICAgICogR2V0cyB0aGUgdG9rZW4gdGhhdCBwcmVjZWRlcyBhIGdpdmVuIG5vZGUn
cyB0b2tlbnMgaW4gdGhlIHRva2VuIHN0cmVhbS4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5v
ZGUgVGhlIEFTVCBub2RlLgotICAgICAqIEBwYXJhbSB7aW50fSBbc2tpcD0wXSBBIG51bWJlciBv
ZiB0b2tlbnMgdG8gc2tpcCBiZWZvcmUgdGhlIGdpdmVuIG5vZGUuCi0gICAgICogQHJldHVybnMg
e1Rva2VufSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0b2tlbi4KLSAgICAgKi8KLSAgICBh
cGkuZ2V0VG9rZW5CZWZvcmUgPSBmdW5jdGlvbihub2RlLCBza2lwKSB7Ci0gICAgICAgIGZvciAo
dmFyIGN1cnNvciA9IG5vZGUucmFuZ2VbMF0gLSAxOyBjdXJzb3IgPj0gMDsgLS1jdXJzb3IpIHsK
LSAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc2tpcCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLS1za2lwOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50VG9rZW5z
W2N1cnNvcl07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIC8qKgotICAgICAqIEdldHMgYSBudW1iZXIgb2YgdG9rZW5zIHRoYXQgcHJl
Y2VkZSBhIGdpdmVuIG5vZGUncyB0b2tlbnMgaW4gdGhlIHRva2VuIHN0cmVhbS4KLSAgICAgKiBA
cGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgotICAgICAqIEBwYXJhbSB7aW50fSBb
YWZ0ZXJDb3VudD0wXSBUaGUgbnVtYmVyIG9mIHRva2VucyBhZnRlciB0aGUgbm9kZSB0byByZXRy
aWV2ZS4KLSAgICAgKiBAcmV0dXJucyB7W1Rva2VuXX0gQXJyYXkgb2Ygb2JqZWN0cyByZXByZXNl
bnRpbmcgdG9rZW5zLgotICAgICAqLwotICAgIGFwaS5nZXRUb2tlbnNBZnRlciA9IGZ1bmN0aW9u
KG5vZGUsIGFmdGVyQ291bnQpIHsKLSAgICAgICAgdmFyIGFmdGVyVG9rZW5zID0gW10sIGN1cnNv
ciA9IG5vZGUucmFuZ2VbMV07Ci0gICAgICAgIHdoaWxlIChhZnRlckNvdW50ID4gMCAmJiBjdXJz
b3IgPCBjdXJyZW50VG9rZW5zLmxlbmd0aCkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tl
bnNbY3Vyc29yXSkgewotICAgICAgICAgICAgICAgIGFmdGVyVG9rZW5zLnB1c2goY3VycmVudFRv
a2Vuc1tjdXJzb3JdKTsKLSAgICAgICAgICAgICAgICAtLWFmdGVyQ291bnQ7Ci0gICAgICAgICAg
ICAgICAgY3Vyc29yID0gY3VycmVudFRva2Vuc1tjdXJzb3JdLnJhbmdlWzFdOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gYWZ0ZXJUb2tlbnM7Ci0gICAgfTsKLQotICAgIC8qKgot
ICAgICAqIEdldHMgdGhlIHRva2VuIHRoYXQgZm9sbG93cyBhIGdpdmVuIG5vZGUncyB0b2tlbnMg
aW4gdGhlIHRva2VuIHN0cmVhbS4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFT
VCBub2RlLgotICAgICAqIEBwYXJhbSB7aW50fSBbc2tpcD0wXSBBIG51bWJlciBvZiB0b2tlbnMg
dG8gc2tpcCBhZnRlciB0aGUgZ2l2ZW4gbm9kZS4KLSAgICAgKiBAcmV0dXJucyB7VG9rZW59IEFu
IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHRva2VuLgotICAgICAqLwotICAgIGFwaS5nZXRUb2tl
bkFmdGVyID0gZnVuY3Rpb24obm9kZSwgc2tpcCkgewotICAgICAgICBmb3IgKHZhciBjdXJzb3Ig
PSBub2RlLnJhbmdlWzFdOyBjdXJzb3IgPCBjdXJyZW50VG9rZW5zLmxlbmd0aDsgKytjdXJzb3Ip
IHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsKLSAgICAgICAgICAg
ICAgICBpZiAoc2tpcCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLS1za2lwOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50VG9r
ZW5zW2N1cnNvcl07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIEdldHMgYWxsIHRva2VucyB0aGF0IGFyZSByZWxh
dGVkIHRvIHRoZSBnaXZlbiBub2RlLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUg
QVNUIG5vZGUuCi0gICAgICogQHBhcmFtIHtpbnR9IFtiZWZvcmVDb3VudD0wXSBUaGUgbnVtYmVy
IG9mIHRva2VucyBiZWZvcmUgdGhlIG5vZGUgdG8gcmV0cmlldmUuCi0gICAgICogQHBhcmFtIHtp
bnR9IFthZnRlckNvdW50PTBdIFRoZSBudW1iZXIgb2YgdG9rZW5zIGFmdGVyIHRoZSBub2RlIHRv
IHJldHJpZXZlLgotICAgICAqIEByZXR1cm5zIHtbVG9rZW5dfSBBcnJheSBvZiBvYmplY3RzIHJl
cHJlc2VudGluZyB0b2tlbnMuCi0gICAgICovCi0gICAgYXBpLmdldFRva2VucyA9IGZ1bmN0aW9u
KG5vZGUsIGJlZm9yZUNvdW50LCBhZnRlckNvdW50KSB7Ci0gICAgICAgIHZhciBiZWZvcmVUb2tl
bnMgPSBhcGkuZ2V0VG9rZW5zQmVmb3JlKG5vZGUsIGJlZm9yZUNvdW50KSwKLSAgICAgICAgICAg
IGFmdGVyVG9rZW5zID0gYXBpLmdldFRva2Vuc0FmdGVyKG5vZGUsIGFmdGVyQ291bnQpLAotICAg
ICAgICAgICAgdG9rZW5zID0gW10sCi0gICAgICAgICAgICBjdXJzb3IgPSBub2RlLnJhbmdlWzBd
OwotICAgICAgICB3aGlsZSAoY3Vyc29yIDwgbm9kZS5yYW5nZVsxXSkgewotICAgICAgICAgICAg
aWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSkgewotICAgICAgICAgICAgICAgIHRva2Vucy5wdXNo
KGN1cnJlbnRUb2tlbnNbY3Vyc29yXSk7Ci0gICAgICAgICAgICAgICAgY3Vyc29yID0gY3VycmVu
dFRva2Vuc1tjdXJzb3JdLnJhbmdlWzFdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gYmVmb3JlVG9rZW5zLmNvbmNhdCh0b2tlbnMsIGFmdGVyVG9rZW5zKTsKLSAgICB9OwotCi0g
ICAgLyoqCi0gICAgICogR2V0cyB0aGUgZmlyc3QgYGNvdW50YCB0b2tlbnMgb2YgdGhlIGdpdmVu
IG5vZGUncyB0b2tlbiBzdHJlYW0uCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBB
U1Qgbm9kZS4KLSAgICAgKiBAcGFyYW0ge2ludH0gW2NvdW50PTBdIFRoZSBudW1iZXIgb2YgdG9r
ZW5zIG9mIHRoZSBub2RlIHRvIHJldHJpZXZlLgotICAgICAqIEByZXR1cm5zIHtbVG9rZW5dfSBB
cnJheSBvZiBvYmplY3RzIHJlcHJlc2VudGluZyB0b2tlbnMuCi0gICAgICovCi0gICAgYXBpLmdl
dEZpcnN0VG9rZW5zID0gZnVuY3Rpb24obm9kZSwgY291bnQpIHsKLSAgICAgICAgdmFyIHRva2Vu
cyA9IFtdLCBjdXJzb3IgPSBub2RlLnJhbmdlWzBdOwotICAgICAgICB3aGlsZSAoY291bnQgPiAw
ICYmIGN1cnNvciA8IG5vZGUucmFuZ2VbMV0pIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50VG9r
ZW5zW2N1cnNvcl0pIHsKLSAgICAgICAgICAgICAgICB0b2tlbnMucHVzaChjdXJyZW50VG9rZW5z
W2N1cnNvcl0pOwotICAgICAgICAgICAgICAgIC0tY291bnQ7Ci0gICAgICAgICAgICAgICAgY3Vy
c29yID0gY3VycmVudFRva2Vuc1tjdXJzb3JdLnJhbmdlWzFdOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICArK2N1cnNvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdG9rZW5zOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRo
ZSBmaXJzdCB0b2tlbiBvZiB0aGUgZ2l2ZW4gbm9kZSdzIHRva2VuIHN0cmVhbS4KLSAgICAgKiBA
cGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgotICAgICAqIEBwYXJhbSB7aW50fSBb
c2tpcD0wXSBBIG51bWJlciBvZiB0b2tlbnMgdG8gc2tpcC4KLSAgICAgKiBAcmV0dXJucyB7VG9r
ZW59IEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHRva2VuLgotICAgICAqLwotICAgIGFwaS5n
ZXRGaXJzdFRva2VuID0gZnVuY3Rpb24obm9kZSwgc2tpcCkgewotICAgICAgICBmb3IgKHZhciBj
dXJzb3IgPSBub2RlLnJhbmdlWzBdOyBjdXJzb3IgPCBub2RlLnJhbmdlWzFdOyArK2N1cnNvcikg
ewotICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSkgewotICAgICAgICAgICAg
ICAgIGlmIChza2lwID4gMCkgewotICAgICAgICAgICAgICAgICAgICAtLXNraXA7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUb2tl
bnNbY3Vyc29yXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgbGFzdCBgY291bnRgIHRva2VucyBv
ZiB0aGUgZ2l2ZW4gbm9kZS4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBu
b2RlLgotICAgICAqIEBwYXJhbSB7aW50fSBbY291bnQ9MF0gVGhlIG51bWJlciBvZiB0b2tlbnMg
b2YgdGhlIG5vZGUgdG8gcmV0cmlldmUuCi0gICAgICogQHJldHVybnMge1tUb2tlbl19IEFycmF5
IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRva2Vucy4KLSAgICAgKi8KLSAgICBhcGkuZ2V0TGFz
dFRva2VucyA9IGZ1bmN0aW9uKG5vZGUsIGNvdW50KSB7Ci0gICAgICAgIHZhciB0b2tlbnMgPSBb
XSwgY3Vyc29yID0gbm9kZS5yYW5nZVsxXSAtIDE7Ci0gICAgICAgIHdoaWxlIChjb3VudCA+IDAg
JiYgY3Vyc29yID49IG5vZGUucmFuZ2VbMF0pIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50VG9r
ZW5zW2N1cnNvcl0pIHsKLSAgICAgICAgICAgICAgICB0b2tlbnMudW5zaGlmdChjdXJyZW50VG9r
ZW5zW2N1cnNvcl0pOwotICAgICAgICAgICAgICAgIC0tY291bnQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAtLWN1cnNvcjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9rZW5zOwot
ICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBsYXN0IHRva2VuIG9mIHRoZSBnaXZl
biBub2RlJ3MgdG9rZW4gc3RyZWFtLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUg
QVNUIG5vZGUuCi0gICAgICogQHBhcmFtIHtpbnR9IFtza2lwPTBdIEEgbnVtYmVyIG9mIHRva2Vu
cyB0byBza2lwLgotICAgICAqIEByZXR1cm5zIHtUb2tlbn0gQW4gb2JqZWN0IHJlcHJlc2VudGlu
ZyB0aGUgdG9rZW4uCi0gICAgICovCi0gICAgYXBpLmdldExhc3RUb2tlbiA9IGZ1bmN0aW9uKG5v
ZGUsIHNraXApIHsKLSAgICAgICAgZm9yICh2YXIgY3Vyc29yID0gbm9kZS5yYW5nZVsxXSAtIDE7
IGN1cnNvciA+PSBub2RlLnJhbmdlWzBdOyAtLWN1cnNvcikgewotICAgICAgICAgICAgaWYgKGN1
cnJlbnRUb2tlbnNbY3Vyc29yXSkgewotICAgICAgICAgICAgICAgIGlmIChza2lwID4gMCkgewot
ICAgICAgICAgICAgICAgICAgICAtLXNraXA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUb2tlbnNbY3Vyc29yXTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoqCi0g
ICAgICogR2V0cyBub2RlcyB0aGF0IGFyZSBhbmNlc3RvcnMgb2YgY3VycmVudCBub2RlLgotICAg
ICAqIEByZXR1cm5zIHtBU1ROb2RlW119IEFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIGFu
Y2VzdG9ycy4KLSAgICAgKi8KLSAgICBhcGkuZ2V0QW5jZXN0b3JzID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHJldHVybiBjb250cm9sbGVyLnBhcmVudHMoKTsKLSAgICB9OwotCi0KLSAgICAvKioK
LSAgICAgKiBHZXRzIHRoZSBzY29wZSBmb3IgdGhlIGN1cnJlbnQgbm9kZS4KLSAgICAgKiBAcmV0
dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IG5vZGUncyBz
Y29wZS4KLSAgICAgKi8KLSAgICBhcGkuZ2V0U2NvcGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
dmFyIHBhcmVudHMgPSBjb250cm9sbGVyLnBhcmVudHMoKSwKLSAgICAgICAgICAgIGlubmVyQmxv
Y2sgPSBudWxsLAotICAgICAgICAgICAgc2VsZWN0ZWRTY29wZUluZGV4OwotCi0gICAgICAgIC8v
IERvbid0IGRvIHRoaXMgZm9yIFByb2dyYW0gbm9kZXMgLSB0aGV5IGhhdmUgbm8gcGFyZW50cwot
ICAgICAgICBpZiAocGFyZW50cy5sZW5ndGgpIHsKLQotICAgICAgICAgICAgLy8gaWYgY3VycmVu
dCBub2RlIGlzIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCBhZGQgaXQgdG8gdGhlIGxpc3QKLSAgICAg
ICAgICAgIHZhciBjdXJyZW50ID0gY29udHJvbGxlci5jdXJyZW50KCk7Ci0gICAgICAgICAgICBp
ZiAoY3VycmVudC50eXBlID09PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIgfHwgY3VycmVudC50eXBl
ID09PSAiRnVuY3Rpb25FeHByZXNzaW9uIikgewotICAgICAgICAgICAgICAgIHBhcmVudHMucHVz
aChjdXJyZW50KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQXNjZW5kIHRoZSBj
dXJyZW50IG5vZGUncyBwYXJlbnRzCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gcGFyZW50cy5s
ZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotCi0gICAgICAgICAgICAgICAgLy8gVGhlIGZpcnN0
IG5vZGUgdGhhdCByZXF1aXJlcyBhIHNjb3BlIGlzIHRoZSBub2RlIHRoYXQgd2lsbCBiZQotICAg
ICAgICAgICAgICAgIC8vIG91ciBjdXJyZW50IG5vZGUncyBpbm5lcm1vc3Qgc2NvcGUuCi0gICAg
ICAgICAgICAgICAgaWYgKGVzY29wZS5TY29wZS5pc1Njb3BlUmVxdWlyZWQocGFyZW50c1tpXSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaW5uZXJCbG9jayA9IHBhcmVudHNbaV07Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gRmluZCBhbmQgcmV0dXJuIHRoZSBpbm5lcm1vc3Qgc2NvcGUKLSAgICAg
ICAgICAgIHNlbGVjdGVkU2NvcGVJbmRleCA9IHNjb3BlTWFwW2lubmVyQmxvY2sucmFuZ2VbMF1d
OwotCi0gICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlvbiBleHByZXNzaW9ucyBjcmVhdGUgdHdv
IG5lc3RlZCBzY29wZSBvYmplY3RzLiBUaGUKLSAgICAgICAgICAgIC8vIG91dGVyIHNjb3BlIGNv
bnRhaW5zIG9ubHkgdGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gbmFtZS4gV2UgcmV0dXJuCi0gICAg
ICAgICAgICAvLyB0aGUgaW5uZXIgc2NvcGUuCi0gICAgICAgICAgICBpZiAoaW5uZXJCbG9jay50
eXBlID09PSAiRnVuY3Rpb25FeHByZXNzaW9uIiAmJiBpbm5lckJsb2NrLmlkICYmIGlubmVyQmxv
Y2suaWQubmFtZSkgewotICAgICAgICAgICAgICAgICsrc2VsZWN0ZWRTY29wZUluZGV4OwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudFNjb3Blc1tzZWxlY3RlZFNj
b3BlSW5kZXhdOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRT
Y29wZXNbMF07ICAgIC8vIGdsb2JhbCBzY29wZQotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8q
KgotICAgICAqIEdldHMgdGhlIGZpbGVuYW1lIGZvciB0aGUgY3VycmVudGx5IHBhcnNlZCBzb3Vy
Y2UuCi0gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGZpbGVuYW1lIGFzc29jaWF0ZWQgd2l0
aCB0aGUgc291cmNlIGJlaW5nIHBhcnNlZC4KLSAgICAgKiAgICAgRGVmYXVsdHMgdG8gIjxpbnB1
dD4iIGlmIG5vIGZpbGVuYW1lIGluZm8gaXMgcHJlc2VudC4KLSAgICAgKi8KLSAgICBhcGkuZ2V0
RmlsZW5hbWUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RmlsZW5h
bWUgPT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAgICByZXR1cm4gY3VycmVudEZpbGVuYW1lOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuICI8aW5wdXQ+IjsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBEZWZpbmVzIGEgbmV3IGxpbnRpbmcgcnVsZS4K
LSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcnVsZUlkIEEgdW5pcXVlIHJ1bGUgaWRlbnRpZmllcgot
ICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHJ1bGVNb2R1bGUgRnVuY3Rpb24gZnJvbSBjb250ZXh0
IHRvIG9iamVjdCBtYXBwaW5nIEFTVCBub2RlIHR5cGVzIHRvIGV2ZW50IGhhbmRsZXJzCi0gICAg
ICogQHJldHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAgdmFyIGRlZmluZVJ1bGUgPSBhcGkuZGVm
aW5lUnVsZSA9IGZ1bmN0aW9uKHJ1bGVJZCwgcnVsZU1vZHVsZSkgewotICAgICAgICBydWxlcy5k
ZWZpbmUocnVsZUlkLCBydWxlTW9kdWxlKTsKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogRGVm
aW5lcyBtYW55IG5ldyBsaW50aW5nIHJ1bGVzLgotICAgICAqIEBwYXJhbSB7b2JqZWN0fSBydWxl
cyBtYXAgZnJvbSB1bmlxdWUgcnVsZSBpZGVudGlmaWVyIHRvIHJ1bGUKLSAgICAgKiBAcmV0dXJu
cyB7dm9pZH0KLSAgICAgKi8KLSAgICBhcGkuZGVmaW5lUnVsZXMgPSBmdW5jdGlvbihydWxlcykg
ewotICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhydWxlcykuZm9yRWFjaChmdW5j
dGlvbihydWxlSWQpIHsKLSAgICAgICAgICAgIGRlZmluZVJ1bGUocnVsZUlkLCBydWxlc1tydWxl
SWRdKTsKLSAgICAgICAgfSk7Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGRl
ZmF1bHQgZXNsaW50IGNvbmZpZ3VyYXRpb24uCi0gICAgICogQHJldHVybnMge09iamVjdH0gT2Jq
ZWN0IG1hcHBpbmcgcnVsZSBJRHMgdG8gdGhlaXIgZGVmYXVsdCBjb25maWd1cmF0aW9ucwotICAg
ICAqLwotICAgIGFwaS5kZWZhdWx0cyA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gcmVx
dWlyZSgiLi4vY29uZi9lc2xpbnQuanNvbiIpOwotICAgIH07Ci0KLSAgICByZXR1cm4gYXBpOwot
Ci19KCkpOwotCi19LHsiLi4vY29uZi9lbnZpcm9ubWVudHMuanNvbiI6MSwiLi4vY29uZi9lc2xp
bnQuanNvbiI6MiwiLi9ydWxlLWNvbnRleHQiOjExLCIuL3J1bGVzIjoxMiwiLi91dGlsIjoxNTAs
ImVzY29wZSI6NSwiZXNwcmltYSI6NiwiZXN0cmF2ZXJzZSI6NywiZXZlbnRzIjozLCJvYmplY3Qt
YXNzaWduIjo4fV0sMTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcnVsZXMgPSBPYmplY3QuY3JlYXRlKG51
bGwpOwotICAgIHJ1bGVzWyJibG9jay1zY29wZWQtdmFyIl0gPSByZXF1aXJlKCIuL3J1bGVzL2Js
b2NrLXNjb3BlZC12YXIiKTsKLSAgICBydWxlc1siYnJhY2Utc3R5bGUiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvYnJhY2Utc3R5bGUiKTsKLSAgICBydWxlc1siY2FtZWxjYXNlIl0gPSByZXF1aXJlKCIu
L3J1bGVzL2NhbWVsY2FzZSIpOwotICAgIHJ1bGVzWyJjb21tYS1zcGFjaW5nIl0gPSByZXF1aXJl
KCIuL3J1bGVzL2NvbW1hLXNwYWNpbmciKTsKLSAgICBydWxlc1siY29tbWEtc3R5bGUiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvY29tbWEtc3R5bGUiKTsKLSAgICBydWxlc1siY29tcGxleGl0eSJdID0g
cmVxdWlyZSgiLi9ydWxlcy9jb21wbGV4aXR5Iik7Ci0gICAgcnVsZXNbImNvbnNpc3RlbnQtcmV0
dXJuIl0gPSByZXF1aXJlKCIuL3J1bGVzL2NvbnNpc3RlbnQtcmV0dXJuIik7Ci0gICAgcnVsZXNb
ImNvbnNpc3RlbnQtdGhpcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9jb25zaXN0ZW50LXRoaXMiKTsK
LSAgICBydWxlc1siY3VybHkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvY3VybHkiKTsKLSAgICBydWxl
c1siZGVmYXVsdC1jYXNlIl0gPSByZXF1aXJlKCIuL3J1bGVzL2RlZmF1bHQtY2FzZSIpOwotICAg
IHJ1bGVzWyJkb3Qtbm90YXRpb24iXSA9IHJlcXVpcmUoIi4vcnVsZXMvZG90LW5vdGF0aW9uIik7
Ci0gICAgcnVsZXNbImVvbC1sYXN0Il0gPSByZXF1aXJlKCIuL3J1bGVzL2VvbC1sYXN0Iik7Ci0g
ICAgcnVsZXNbImVxZXFlcSJdID0gcmVxdWlyZSgiLi9ydWxlcy9lcWVxZXEiKTsKLSAgICBydWxl
c1siZnVuYy1uYW1lcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9mdW5jLW5hbWVzIik7Ci0gICAgcnVs
ZXNbImZ1bmMtc3R5bGUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvZnVuYy1zdHlsZSIpOwotICAgIHJ1
bGVzWyJnbG9iYWwtc3RyaWN0Il0gPSByZXF1aXJlKCIuL3J1bGVzL2dsb2JhbC1zdHJpY3QiKTsK
LSAgICBydWxlc1siZ3VhcmQtZm9yLWluIl0gPSByZXF1aXJlKCIuL3J1bGVzL2d1YXJkLWZvci1p
biIpOwotICAgIHJ1bGVzWyJoYW5kbGUtY2FsbGJhY2stZXJyIl0gPSByZXF1aXJlKCIuL3J1bGVz
L2hhbmRsZS1jYWxsYmFjay1lcnIiKTsKLSAgICBydWxlc1sia2V5LXNwYWNpbmciXSA9IHJlcXVp
cmUoIi4vcnVsZXMva2V5LXNwYWNpbmciKTsKLSAgICBydWxlc1sibWF4LWRlcHRoIl0gPSByZXF1
aXJlKCIuL3J1bGVzL21heC1kZXB0aCIpOwotICAgIHJ1bGVzWyJtYXgtbGVuIl0gPSByZXF1aXJl
KCIuL3J1bGVzL21heC1sZW4iKTsKLSAgICBydWxlc1sibWF4LW5lc3RlZC1jYWxsYmFja3MiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvbWF4LW5lc3RlZC1jYWxsYmFja3MiKTsKLSAgICBydWxlc1sibWF4
LXBhcmFtcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9tYXgtcGFyYW1zIik7Ci0gICAgcnVsZXNbIm1h
eC1zdGF0ZW1lbnRzIl0gPSByZXF1aXJlKCIuL3J1bGVzL21heC1zdGF0ZW1lbnRzIik7Ci0gICAg
cnVsZXNbIm5ldy1jYXAiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbmV3LWNhcCIpOwotICAgIHJ1bGVz
WyJuZXctcGFyZW5zIl0gPSByZXF1aXJlKCIuL3J1bGVzL25ldy1wYXJlbnMiKTsKLSAgICBydWxl
c1sibm8tYWxlcnQiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tYWxlcnQiKTsKLSAgICBydWxlc1si
bm8tYXJyYXktY29uc3RydWN0b3IiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tYXJyYXktY29uc3Ry
dWN0b3IiKTsKLSAgICBydWxlc1sibm8tYml0d2lzZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1i
aXR3aXNlIik7Ci0gICAgcnVsZXNbIm5vLWNhbGxlciJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1j
YWxsZXIiKTsKLSAgICBydWxlc1sibm8tY2F0Y2gtc2hhZG93Il0gPSByZXF1aXJlKCIuL3J1bGVz
L25vLWNhdGNoLXNoYWRvdyIpOwotICAgIHJ1bGVzWyJuby1jb21tYS1kYW5nbGUiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tY29tbWEtZGFuZ2xlIik7Ci0gICAgcnVsZXNbIm5vLWNvbmQtYXNzaWdu
Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWNvbmQtYXNzaWduIik7Ci0gICAgcnVsZXNbIm5vLWNv
bnNvbGUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tY29uc29sZSIpOwotICAgIHJ1bGVzWyJuby1j
b25zdGFudC1jb25kaXRpb24iXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tY29uc3RhbnQtY29uZGl0
aW9uIik7Ci0gICAgcnVsZXNbIm5vLWNvbnRyb2wtcmVnZXgiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tY29udHJvbC1yZWdleCIpOwotICAgIHJ1bGVzWyJuby1kZWJ1Z2dlciJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1kZWJ1Z2dlciIpOwotICAgIHJ1bGVzWyJuby1kZWxldGUtdmFyIl0gPSByZXF1
aXJlKCIuL3J1bGVzL25vLWRlbGV0ZS12YXIiKTsKLSAgICBydWxlc1sibm8tZGl2LXJlZ2V4Il0g
PSByZXF1aXJlKCIuL3J1bGVzL25vLWRpdi1yZWdleCIpOwotICAgIHJ1bGVzWyJuby1kdXBlLWtl
eXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZHVwZS1rZXlzIik7Ci0gICAgcnVsZXNbIm5vLWVs
c2UtcmV0dXJuIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWVsc2UtcmV0dXJuIik7Ci0gICAgcnVs
ZXNbIm5vLWVtcHR5LWNsYXNzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWVtcHR5LWNsYXNzIik7
Ci0gICAgcnVsZXNbIm5vLWVtcHR5LWxhYmVsIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWVtcHR5
LWxhYmVsIik7Ci0gICAgcnVsZXNbIm5vLWVtcHR5Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWVt
cHR5Iik7Ci0gICAgcnVsZXNbIm5vLWVxLW51bGwiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXEt
bnVsbCIpOwotICAgIHJ1bGVzWyJuby1ldmFsIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWV2YWwi
KTsKLSAgICBydWxlc1sibm8tZXgtYXNzaWduIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWV4LWFz
c2lnbiIpOwotICAgIHJ1bGVzWyJuby1leHRlbmQtbmF0aXZlIl0gPSByZXF1aXJlKCIuL3J1bGVz
L25vLWV4dGVuZC1uYXRpdmUiKTsKLSAgICBydWxlc1sibm8tZXh0cmEtYmluZCJdID0gcmVxdWly
ZSgiLi9ydWxlcy9uby1leHRyYS1iaW5kIik7Ci0gICAgcnVsZXNbIm5vLWV4dHJhLWJvb2xlYW4t
Y2FzdCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1leHRyYS1ib29sZWFuLWNhc3QiKTsKLSAgICBy
dWxlc1sibm8tZXh0cmEtcGFyZW5zIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWV4dHJhLXBhcmVu
cyIpOwotICAgIHJ1bGVzWyJuby1leHRyYS1zZW1pIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWV4
dHJhLXNlbWkiKTsKLSAgICBydWxlc1sibm8tZXh0cmEtc3RyaWN0Il0gPSByZXF1aXJlKCIuL3J1
bGVzL25vLWV4dHJhLXN0cmljdCIpOwotICAgIHJ1bGVzWyJuby1mYWxsdGhyb3VnaCJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby1mYWxsdGhyb3VnaCIpOwotICAgIHJ1bGVzWyJuby1mbG9hdGluZy1k
ZWNpbWFsIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWZsb2F0aW5nLWRlY2ltYWwiKTsKLSAgICBy
dWxlc1sibm8tZnVuYy1hc3NpZ24iXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZnVuYy1hc3NpZ24i
KTsKLSAgICBydWxlc1sibm8taW1wbGllZC1ldmFsIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWlt
cGxpZWQtZXZhbCIpOwotICAgIHJ1bGVzWyJuby1pbm5lci1kZWNsYXJhdGlvbnMiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8taW5uZXItZGVjbGFyYXRpb25zIik7Ci0gICAgcnVsZXNbIm5vLWludmFs
aWQtcmVnZXhwIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWludmFsaWQtcmVnZXhwIik7Ci0gICAg
cnVsZXNbIm5vLWl0ZXJhdG9yIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWl0ZXJhdG9yIik7Ci0g
ICAgcnVsZXNbIm5vLWxhYmVsLXZhciJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1sYWJlbC12YXIi
KTsKLSAgICBydWxlc1sibm8tbGFiZWxzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWxhYmVscyIp
OwotICAgIHJ1bGVzWyJuby1sb25lLWJsb2NrcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1sb25l
LWJsb2NrcyIpOwotICAgIHJ1bGVzWyJuby1sb25lbHktaWYiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tbG9uZWx5LWlmIik7Ci0gICAgcnVsZXNbIm5vLWxvb3AtZnVuYyJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1sb29wLWZ1bmMiKTsKLSAgICBydWxlc1sibm8tbWl4ZWQtcmVxdWlyZXMiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8tbWl4ZWQtcmVxdWlyZXMiKTsKLSAgICBydWxlc1sibm8tbWl4ZWQt
c3BhY2VzLWFuZC10YWJzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW1peGVkLXNwYWNlcy1hbmQt
dGFicyIpOwotICAgIHJ1bGVzWyJuby1tdWx0aS1zcGFjZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tbXVsdGktc3BhY2VzIik7Ci0gICAgcnVsZXNbIm5vLW11bHRpLXN0ciJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1tdWx0aS1zdHIiKTsKLSAgICBydWxlc1sibm8tbXVsdGlwbGUtZW1wdHktbGlu
ZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tbXVsdGlwbGUtZW1wdHktbGluZXMiKTsKLSAgICBy
dWxlc1sibm8tbmF0aXZlLXJlYXNzaWduIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5hdGl2ZS1y
ZWFzc2lnbiIpOwotICAgIHJ1bGVzWyJuby1uZWdhdGVkLWluLWxocyJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1uZWdhdGVkLWluLWxocyIpOwotICAgIHJ1bGVzWyJuby1uZXN0ZWQtdGVybmFyeSJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1uZXN0ZWQtdGVybmFyeSIpOwotICAgIHJ1bGVzWyJuby1u
ZXctZnVuYyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1uZXctZnVuYyIpOwotICAgIHJ1bGVzWyJu
by1uZXctb2JqZWN0Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5ldy1vYmplY3QiKTsKLSAgICBy
dWxlc1sibm8tbmV3LXJlcXVpcmUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tbmV3LXJlcXVpcmUi
KTsKLSAgICBydWxlc1sibm8tbmV3LXdyYXBwZXJzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5l
dy13cmFwcGVycyIpOwotICAgIHJ1bGVzWyJuby1uZXciXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8t
bmV3Iik7Ci0gICAgcnVsZXNbIm5vLW9iai1jYWxscyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1v
YmotY2FsbHMiKTsKLSAgICBydWxlc1sibm8tb2N0YWwtZXNjYXBlIl0gPSByZXF1aXJlKCIuL3J1
bGVzL25vLW9jdGFsLWVzY2FwZSIpOwotICAgIHJ1bGVzWyJuby1vY3RhbCJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1vY3RhbCIpOwotICAgIHJ1bGVzWyJuby1wYXRoLWNvbmNhdCJdID0gcmVxdWly
ZSgiLi9ydWxlcy9uby1wYXRoLWNvbmNhdCIpOwotICAgIHJ1bGVzWyJuby1wbHVzcGx1cyJdID0g
cmVxdWlyZSgiLi9ydWxlcy9uby1wbHVzcGx1cyIpOwotICAgIHJ1bGVzWyJuby1wcm9jZXNzLWVu
diJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1wcm9jZXNzLWVudiIpOwotICAgIHJ1bGVzWyJuby1w
cm9jZXNzLWV4aXQiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcHJvY2Vzcy1leGl0Iik7Ci0gICAg
cnVsZXNbIm5vLXByb3RvIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXByb3RvIik7Ci0gICAgcnVs
ZXNbIm5vLXJlZGVjbGFyZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1yZWRlY2xhcmUiKTsKLSAg
ICBydWxlc1sibm8tcmVnZXgtc3BhY2VzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXJlZ2V4LXNw
YWNlcyIpOwotICAgIHJ1bGVzWyJuby1yZXNlcnZlZC1rZXlzIl0gPSByZXF1aXJlKCIuL3J1bGVz
L25vLXJlc2VydmVkLWtleXMiKTsKLSAgICBydWxlc1sibm8tcmVzdHJpY3RlZC1tb2R1bGVzIl0g
PSByZXF1aXJlKCIuL3J1bGVzL25vLXJlc3RyaWN0ZWQtbW9kdWxlcyIpOwotICAgIHJ1bGVzWyJu
by1yZXR1cm4tYXNzaWduIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXJldHVybi1hc3NpZ24iKTsK
LSAgICBydWxlc1sibm8tc2NyaXB0LXVybCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1zY3JpcHQt
dXJsIik7Ci0gICAgcnVsZXNbIm5vLXNlbGYtY29tcGFyZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9u
by1zZWxmLWNvbXBhcmUiKTsKLSAgICBydWxlc1sibm8tc2VxdWVuY2VzIl0gPSByZXF1aXJlKCIu
L3J1bGVzL25vLXNlcXVlbmNlcyIpOwotICAgIHJ1bGVzWyJuby1zaGFkb3ctcmVzdHJpY3RlZC1u
YW1lcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lcyIpOwot
ICAgIHJ1bGVzWyJuby1zaGFkb3ciXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc2hhZG93Iik7Ci0g
ICAgcnVsZXNbIm5vLXNwYWNlLWJlZm9yZS1zZW1pIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXNw
YWNlLWJlZm9yZS1zZW1pIik7Ci0gICAgcnVsZXNbIm5vLXNwYWNlZC1mdW5jIl0gPSByZXF1aXJl
KCIuL3J1bGVzL25vLXNwYWNlZC1mdW5jIik7Ci0gICAgcnVsZXNbIm5vLXNwYXJzZS1hcnJheXMi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc3BhcnNlLWFycmF5cyIpOwotICAgIHJ1bGVzWyJuby1z
eW5jIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXN5bmMiKTsKLSAgICBydWxlc1sibm8tdGVybmFy
eSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby10ZXJuYXJ5Iik7Ci0gICAgcnVsZXNbIm5vLXRyYWls
aW5nLXNwYWNlcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby10cmFpbGluZy1zcGFjZXMiKTsKLSAg
ICBydWxlc1sibm8tdW5kZWYtaW5pdCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby11bmRlZi1pbml0
Iik7Ci0gICAgcnVsZXNbIm5vLXVuZGVmIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXVuZGVmIik7
Ci0gICAgcnVsZXNbIm5vLXVuZGVmaW5lZCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby11bmRlZmlu
ZWQiKTsKLSAgICBydWxlc1sibm8tdW5kZXJzY29yZS1kYW5nbGUiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8tdW5kZXJzY29yZS1kYW5nbGUiKTsKLSAgICBydWxlc1sibm8tdW5yZWFjaGFibGUiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvbm8tdW5yZWFjaGFibGUiKTsKLSAgICBydWxlc1sibm8tdW51c2Vk
LWV4cHJlc3Npb25zIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXVudXNlZC1leHByZXNzaW9ucyIp
OwotICAgIHJ1bGVzWyJuby11bnVzZWQtdmFycyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby11bnVz
ZWQtdmFycyIpOwotICAgIHJ1bGVzWyJuby11c2UtYmVmb3JlLWRlZmluZSJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby11c2UtYmVmb3JlLWRlZmluZSIpOwotICAgIHJ1bGVzWyJuby12b2lkIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLXZvaWQiKTsKLSAgICBydWxlc1sibm8td2FybmluZy1jb21tZW50
cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby13YXJuaW5nLWNvbW1lbnRzIik7Ci0gICAgcnVsZXNb
Im5vLXdpdGgiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8td2l0aCIpOwotICAgIHJ1bGVzWyJuby13
cmFwLWZ1bmMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8td3JhcC1mdW5jIik7Ci0gICAgcnVsZXNb
Im9uZS12YXIiXSA9IHJlcXVpcmUoIi4vcnVsZXMvb25lLXZhciIpOwotICAgIHJ1bGVzWyJwYWRk
ZWQtYmxvY2tzIl0gPSByZXF1aXJlKCIuL3J1bGVzL3BhZGRlZC1ibG9ja3MiKTsKLSAgICBydWxl
c1sicXVvdGUtcHJvcHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvcXVvdGUtcHJvcHMiKTsKLSAgICBy
dWxlc1sicXVvdGVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL3F1b3RlcyIpOwotICAgIHJ1bGVzWyJy
YWRpeCJdID0gcmVxdWlyZSgiLi9ydWxlcy9yYWRpeCIpOwotICAgIHJ1bGVzWyJzZW1pIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL3NlbWkiKTsKLSAgICBydWxlc1sic29ydC12YXJzIl0gPSByZXF1aXJl
KCIuL3J1bGVzL3NvcnQtdmFycyIpOwotICAgIHJ1bGVzWyJzcGFjZS1hZnRlci1rZXl3b3JkcyJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZS1hZnRlci1rZXl3b3JkcyIpOwotICAgIHJ1bGVzWyJz
cGFjZS1iZWZvcmUtYmxvY2tzIl0gPSByZXF1aXJlKCIuL3J1bGVzL3NwYWNlLWJlZm9yZS1ibG9j
a3MiKTsKLSAgICBydWxlc1sic3BhY2UtaW4tYnJhY2tldHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
c3BhY2UtaW4tYnJhY2tldHMiKTsKLSAgICBydWxlc1sic3BhY2UtaW4tcGFyZW5zIl0gPSByZXF1
aXJlKCIuL3J1bGVzL3NwYWNlLWluLXBhcmVucyIpOwotICAgIHJ1bGVzWyJzcGFjZS1pbmZpeC1v
cHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc3BhY2UtaW5maXgtb3BzIik7Ci0gICAgcnVsZXNbInNw
YWNlLXJldHVybi10aHJvdy1jYXNlIl0gPSByZXF1aXJlKCIuL3J1bGVzL3NwYWNlLXJldHVybi10
aHJvdy1jYXNlIik7Ci0gICAgcnVsZXNbInNwYWNlLXVuYXJ5LXdvcmQtb3BzIl0gPSByZXF1aXJl
KCIuL3J1bGVzL3NwYWNlLXVuYXJ5LXdvcmQtb3BzIik7Ci0gICAgcnVsZXNbInNwYWNlZC1saW5l
LWNvbW1lbnQiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc3BhY2VkLWxpbmUtY29tbWVudCIpOwotICAg
IHJ1bGVzWyJzdHJpY3QiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc3RyaWN0Iik7Ci0gICAgcnVsZXNb
InVzZS1pc25hbiJdID0gcmVxdWlyZSgiLi9ydWxlcy91c2UtaXNuYW4iKTsKLSAgICBydWxlc1si
dmFsaWQtanNkb2MiXSA9IHJlcXVpcmUoIi4vcnVsZXMvdmFsaWQtanNkb2MiKTsKLSAgICBydWxl
c1sidmFsaWQtdHlwZW9mIl0gPSByZXF1aXJlKCIuL3J1bGVzL3ZhbGlkLXR5cGVvZiIpOwotICAg
IHJ1bGVzWyJ2YXJzLW9uLXRvcCJdID0gcmVxdWlyZSgiLi9ydWxlcy92YXJzLW9uLXRvcCIpOwot
ICAgIHJ1bGVzWyJ3cmFwLWlpZmUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvd3JhcC1paWZlIik7Ci0g
ICAgcnVsZXNbIndyYXAtcmVnZXgiXSA9IHJlcXVpcmUoIi4vcnVsZXMvd3JhcC1yZWdleCIpOwot
ICAgIHJ1bGVzWyJ5b2RhIl0gPSByZXF1aXJlKCIuL3J1bGVzL3lvZGEiKTsKLQotICAgIHJldHVy
biBydWxlczsKLX07Ci19LHsiLi9ydWxlcy9ibG9jay1zY29wZWQtdmFyIjoxMywiLi9ydWxlcy9i
cmFjZS1zdHlsZSI6MTQsIi4vcnVsZXMvY2FtZWxjYXNlIjoxNSwiLi9ydWxlcy9jb21tYS1zcGFj
aW5nIjoxNiwiLi9ydWxlcy9jb21tYS1zdHlsZSI6MTcsIi4vcnVsZXMvY29tcGxleGl0eSI6MTgs
Ii4vcnVsZXMvY29uc2lzdGVudC1yZXR1cm4iOjE5LCIuL3J1bGVzL2NvbnNpc3RlbnQtdGhpcyI6
MjAsIi4vcnVsZXMvY3VybHkiOjIxLCIuL3J1bGVzL2RlZmF1bHQtY2FzZSI6MjIsIi4vcnVsZXMv
ZG90LW5vdGF0aW9uIjoyMywiLi9ydWxlcy9lb2wtbGFzdCI6MjQsIi4vcnVsZXMvZXFlcWVxIjoy
NSwiLi9ydWxlcy9mdW5jLW5hbWVzIjoyNiwiLi9ydWxlcy9mdW5jLXN0eWxlIjoyNywiLi9ydWxl
cy9nbG9iYWwtc3RyaWN0IjoyOCwiLi9ydWxlcy9ndWFyZC1mb3ItaW4iOjI5LCIuL3J1bGVzL2hh
bmRsZS1jYWxsYmFjay1lcnIiOjMwLCIuL3J1bGVzL2tleS1zcGFjaW5nIjozMSwiLi9ydWxlcy9t
YXgtZGVwdGgiOjMyLCIuL3J1bGVzL21heC1sZW4iOjMzLCIuL3J1bGVzL21heC1uZXN0ZWQtY2Fs
bGJhY2tzIjozNCwiLi9ydWxlcy9tYXgtcGFyYW1zIjozNSwiLi9ydWxlcy9tYXgtc3RhdGVtZW50
cyI6MzYsIi4vcnVsZXMvbmV3LWNhcCI6MzcsIi4vcnVsZXMvbmV3LXBhcmVucyI6MzgsIi4vcnVs
ZXMvbm8tYWxlcnQiOjM5LCIuL3J1bGVzL25vLWFycmF5LWNvbnN0cnVjdG9yIjo0MCwiLi9ydWxl
cy9uby1iaXR3aXNlIjo0MSwiLi9ydWxlcy9uby1jYWxsZXIiOjQyLCIuL3J1bGVzL25vLWNhdGNo
LXNoYWRvdyI6NDMsIi4vcnVsZXMvbm8tY29tbWEtZGFuZ2xlIjo0NCwiLi9ydWxlcy9uby1jb25k
LWFzc2lnbiI6NDUsIi4vcnVsZXMvbm8tY29uc29sZSI6NDYsIi4vcnVsZXMvbm8tY29uc3RhbnQt
Y29uZGl0aW9uIjo0NywiLi9ydWxlcy9uby1jb250cm9sLXJlZ2V4Ijo0OCwiLi9ydWxlcy9uby1k
ZWJ1Z2dlciI6NDksIi4vcnVsZXMvbm8tZGVsZXRlLXZhciI6NTAsIi4vcnVsZXMvbm8tZGl2LXJl
Z2V4Ijo1MSwiLi9ydWxlcy9uby1kdXBlLWtleXMiOjUyLCIuL3J1bGVzL25vLWVsc2UtcmV0dXJu
Ijo1MywiLi9ydWxlcy9uby1lbXB0eSI6NTYsIi4vcnVsZXMvbm8tZW1wdHktY2xhc3MiOjU0LCIu
L3J1bGVzL25vLWVtcHR5LWxhYmVsIjo1NSwiLi9ydWxlcy9uby1lcS1udWxsIjo1NywiLi9ydWxl
cy9uby1ldmFsIjo1OCwiLi9ydWxlcy9uby1leC1hc3NpZ24iOjU5LCIuL3J1bGVzL25vLWV4dGVu
ZC1uYXRpdmUiOjYwLCIuL3J1bGVzL25vLWV4dHJhLWJpbmQiOjYxLCIuL3J1bGVzL25vLWV4dHJh
LWJvb2xlYW4tY2FzdCI6NjIsIi4vcnVsZXMvbm8tZXh0cmEtcGFyZW5zIjo2MywiLi9ydWxlcy9u
by1leHRyYS1zZW1pIjo2NCwiLi9ydWxlcy9uby1leHRyYS1zdHJpY3QiOjY1LCIuL3J1bGVzL25v
LWZhbGx0aHJvdWdoIjo2NiwiLi9ydWxlcy9uby1mbG9hdGluZy1kZWNpbWFsIjo2NywiLi9ydWxl
cy9uby1mdW5jLWFzc2lnbiI6NjgsIi4vcnVsZXMvbm8taW1wbGllZC1ldmFsIjo2OSwiLi9ydWxl
cy9uby1pbm5lci1kZWNsYXJhdGlvbnMiOjcwLCIuL3J1bGVzL25vLWludmFsaWQtcmVnZXhwIjo3
MSwiLi9ydWxlcy9uby1pdGVyYXRvciI6NzIsIi4vcnVsZXMvbm8tbGFiZWwtdmFyIjo3MywiLi9y
dWxlcy9uby1sYWJlbHMiOjc0LCIuL3J1bGVzL25vLWxvbmUtYmxvY2tzIjo3NSwiLi9ydWxlcy9u
by1sb25lbHktaWYiOjc2LCIuL3J1bGVzL25vLWxvb3AtZnVuYyI6NzcsIi4vcnVsZXMvbm8tbWl4
ZWQtcmVxdWlyZXMiOjc4LCIuL3J1bGVzL25vLW1peGVkLXNwYWNlcy1hbmQtdGFicyI6NzksIi4v
cnVsZXMvbm8tbXVsdGktc3BhY2VzIjo4MCwiLi9ydWxlcy9uby1tdWx0aS1zdHIiOjgxLCIuL3J1
bGVzL25vLW11bHRpcGxlLWVtcHR5LWxpbmVzIjo4MiwiLi9ydWxlcy9uby1uYXRpdmUtcmVhc3Np
Z24iOjgzLCIuL3J1bGVzL25vLW5lZ2F0ZWQtaW4tbGhzIjo4NCwiLi9ydWxlcy9uby1uZXN0ZWQt
dGVybmFyeSI6ODUsIi4vcnVsZXMvbm8tbmV3Ijo5MCwiLi9ydWxlcy9uby1uZXctZnVuYyI6ODYs
Ii4vcnVsZXMvbm8tbmV3LW9iamVjdCI6ODcsIi4vcnVsZXMvbm8tbmV3LXJlcXVpcmUiOjg4LCIu
L3J1bGVzL25vLW5ldy13cmFwcGVycyI6ODksIi4vcnVsZXMvbm8tb2JqLWNhbGxzIjo5MSwiLi9y
dWxlcy9uby1vY3RhbCI6OTMsIi4vcnVsZXMvbm8tb2N0YWwtZXNjYXBlIjo5MiwiLi9ydWxlcy9u
by1wYXRoLWNvbmNhdCI6OTQsIi4vcnVsZXMvbm8tcGx1c3BsdXMiOjk1LCIuL3J1bGVzL25vLXBy
b2Nlc3MtZW52Ijo5NiwiLi9ydWxlcy9uby1wcm9jZXNzLWV4aXQiOjk3LCIuL3J1bGVzL25vLXBy
b3RvIjo5OCwiLi9ydWxlcy9uby1yZWRlY2xhcmUiOjk5LCIuL3J1bGVzL25vLXJlZ2V4LXNwYWNl
cyI6MTAwLCIuL3J1bGVzL25vLXJlc2VydmVkLWtleXMiOjEwMSwiLi9ydWxlcy9uby1yZXN0cmlj
dGVkLW1vZHVsZXMiOjEwMiwiLi9ydWxlcy9uby1yZXR1cm4tYXNzaWduIjoxMDMsIi4vcnVsZXMv
bm8tc2NyaXB0LXVybCI6MTA0LCIuL3J1bGVzL25vLXNlbGYtY29tcGFyZSI6MTA1LCIuL3J1bGVz
L25vLXNlcXVlbmNlcyI6MTA2LCIuL3J1bGVzL25vLXNoYWRvdyI6MTA4LCIuL3J1bGVzL25vLXNo
YWRvdy1yZXN0cmljdGVkLW5hbWVzIjoxMDcsIi4vcnVsZXMvbm8tc3BhY2UtYmVmb3JlLXNlbWki
OjEwOSwiLi9ydWxlcy9uby1zcGFjZWQtZnVuYyI6MTEwLCIuL3J1bGVzL25vLXNwYXJzZS1hcnJh
eXMiOjExMSwiLi9ydWxlcy9uby1zeW5jIjoxMTIsIi4vcnVsZXMvbm8tdGVybmFyeSI6MTEzLCIu
L3J1bGVzL25vLXRyYWlsaW5nLXNwYWNlcyI6MTE0LCIuL3J1bGVzL25vLXVuZGVmIjoxMTYsIi4v
cnVsZXMvbm8tdW5kZWYtaW5pdCI6MTE1LCIuL3J1bGVzL25vLXVuZGVmaW5lZCI6MTE3LCIuL3J1
bGVzL25vLXVuZGVyc2NvcmUtZGFuZ2xlIjoxMTgsIi4vcnVsZXMvbm8tdW5yZWFjaGFibGUiOjEx
OSwiLi9ydWxlcy9uby11bnVzZWQtZXhwcmVzc2lvbnMiOjEyMCwiLi9ydWxlcy9uby11bnVzZWQt
dmFycyI6MTIxLCIuL3J1bGVzL25vLXVzZS1iZWZvcmUtZGVmaW5lIjoxMjIsIi4vcnVsZXMvbm8t
dm9pZCI6MTIzLCIuL3J1bGVzL25vLXdhcm5pbmctY29tbWVudHMiOjEyNCwiLi9ydWxlcy9uby13
aXRoIjoxMjUsIi4vcnVsZXMvbm8td3JhcC1mdW5jIjoxMjYsIi4vcnVsZXMvb25lLXZhciI6MTI3
LCIuL3J1bGVzL3BhZGRlZC1ibG9ja3MiOjEyOCwiLi9ydWxlcy9xdW90ZS1wcm9wcyI6MTI5LCIu
L3J1bGVzL3F1b3RlcyI6MTMwLCIuL3J1bGVzL3JhZGl4IjoxMzEsIi4vcnVsZXMvc2VtaSI6MTMy
LCIuL3J1bGVzL3NvcnQtdmFycyI6MTMzLCIuL3J1bGVzL3NwYWNlLWFmdGVyLWtleXdvcmRzIjox
MzQsIi4vcnVsZXMvc3BhY2UtYmVmb3JlLWJsb2NrcyI6MTM1LCIuL3J1bGVzL3NwYWNlLWluLWJy
YWNrZXRzIjoxMzYsIi4vcnVsZXMvc3BhY2UtaW4tcGFyZW5zIjoxMzcsIi4vcnVsZXMvc3BhY2Ut
aW5maXgtb3BzIjoxMzgsIi4vcnVsZXMvc3BhY2UtcmV0dXJuLXRocm93LWNhc2UiOjEzOSwiLi9y
dWxlcy9zcGFjZS11bmFyeS13b3JkLW9wcyI6MTQwLCIuL3J1bGVzL3NwYWNlZC1saW5lLWNvbW1l
bnQiOjE0MSwiLi9ydWxlcy9zdHJpY3QiOjE0MiwiLi9ydWxlcy91c2UtaXNuYW4iOjE0MywiLi9y
dWxlcy92YWxpZC1qc2RvYyI6MTQ0LCIuL3J1bGVzL3ZhbGlkLXR5cGVvZiI6MTQ1LCIuL3J1bGVz
L3ZhcnMtb24tdG9wIjoxNDYsIi4vcnVsZXMvd3JhcC1paWZlIjoxNDcsIi4vcnVsZXMvd3JhcC1y
ZWdleCI6MTQ4LCIuL3J1bGVzL3lvZGEiOjE0OX1dLDExOltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlQ29udGV4dCB1dGlsaXR5IGZv
ciBydWxlcwotICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcwotICovCi0idXNlIHN0cmljdCI7
Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb25zdGFudHMKLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLXZhciBQQVNTVEhST1VHSFMgPSBbCi0gICAgICAgICJnZXRTb3VyY2UiLAot
ICAgICAgICAiZ2V0U291cmNlTGluZXMiLAotICAgICAgICAiZ2V0VG9rZW5zIiwKLSAgICAgICAg
ImdldFRva2Vuc0JlZm9yZSIsCi0gICAgICAgICJnZXRUb2tlbkJlZm9yZSIsCi0gICAgICAgICJn
ZXRUb2tlbnNBZnRlciIsCi0gICAgICAgICJnZXRUb2tlbkFmdGVyIiwKLSAgICAgICAgImdldEZp
cnN0VG9rZW5zIiwKLSAgICAgICAgImdldEZpcnN0VG9rZW4iLAotICAgICAgICAiZ2V0TGFzdFRv
a2VucyIsCi0gICAgICAgICJnZXRMYXN0VG9rZW4iLAotICAgICAgICAiZ2V0Q29tbWVudHMiLAot
ICAgICAgICAiZ2V0QW5jZXN0b3JzIiwKLSAgICAgICAgImdldFNjb3BlIiwKLSAgICAgICAgImdl
dEpTRG9jQ29tbWVudCIsCi0gICAgICAgICJnZXRGaWxlbmFtZSIKLSAgICBdOwotCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0vKioKLSAqIEFjdHMgYXMgYW4gYWJzdHJhY3Rpb24gbGF5ZXIgYmV0d2VlbiBydWxl
cyBhbmQgdGhlIG1haW4gZXNsaW50IG9iamVjdC4KLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFt
IHtzdHJpbmd9IHJ1bGVJZCBUaGUgSUQgb2YgdGhlIHJ1bGUgdXNpbmcgdGhpcyBvYmplY3QuCi0g
KiBAcGFyYW0ge2VzbGludH0gZXNsaW50IFRoZSBlc2xpbnQgb2JqZWN0LgotICogQHBhcmFtIHtu
dW1iZXJ9IHNldmVyaXR5IFRoZSBjb25maWd1cmVkIHNldmVyaXR5IGxldmVsIG9mIHRoZSBydWxl
LgotICogQHBhcmFtIHthcnJheX0gb3B0aW9ucyBUaGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlv
biB0byBiZSBhZGRlZCB0byB0aGUgcnVsZS4KLSAqIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBU
aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBwYXNzZWQgZnJvbSB0aGUgY29uZmlnIGZpbGUuCi0g
Ki8KLWZ1bmN0aW9uIFJ1bGVDb250ZXh0KHJ1bGVJZCwgZXNsaW50LCBzZXZlcml0eSwgb3B0aW9u
cywgc2V0dGluZ3MpIHsKLQotICAgIC8qKgotICAgICAqIFRoZSByZWFkLW9ubHkgSUQgb2YgdGhl
IHJ1bGUuCi0gICAgICovCi0gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJpZCIsIHsK
LSAgICAgICAgdmFsdWU6IHJ1bGVJZAotICAgIH0pOwotCi0gICAgLyoqCi0gICAgICogVGhlIHJl
YWQtb25seSBvcHRpb25zIG9mIHRoZSBydWxlCi0gICAgICovCi0gICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KHRoaXMsICJvcHRpb25zIiwgewotICAgICAgICB2YWx1ZTogb3B0aW9ucwotICAgIH0p
OwotCi0gICAgLyoqCi0gICAgICogVGhlIHJlYWQtb25seSBzZXR0aW5ncyBzaGFyZWQgYmV0d2Vl
biBhbGwgcnVsZXMKLSAgICAgKi8KLSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNl
dHRpbmdzIiwgewotICAgICAgICB2YWx1ZTogc2V0dGluZ3MKLSAgICB9KTsKLQotICAgIC8vIGNv
cHkgb3ZlciBwYXNzdGhyb3VnaCBtZXRob2RzCi0gICAgUEFTU1RIUk9VR0hTLmZvckVhY2goZnVu
Y3Rpb24obmFtZSkgewotICAgICAgICB0aGlzW25hbWVdID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gZXNsaW50W25hbWVdLmFwcGx5KGVzbGludCwgYXJndW1lbnRzKTsKLSAgICAg
ICAgfTsKLSAgICB9LCB0aGlzKTsKLQotICAgIC8qKgotICAgICAqIFBhc3N0aHJvdWdoIHRvIGVz
bGludC5yZXBvcnQoKSB0aGF0IGF1dG9tYXRpY2FsbHkgYXNzaWducyB0aGUgcnVsZSBJRCBhbmQg
c2V2ZXJpdHkuCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSByZWxh
dGVkIHRvIHRoZSBtZXNzYWdlLgotICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gbG9jYXRpb24gVGhl
IGxvY2F0aW9uIG9mIHRoZSBlcnJvci4KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBU
aGUgbWVzc2FnZSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyLgotICAgICAqIEBwYXJhbSB7T2JqZWN0
fSBvcHRzIE9wdGlvbmFsIHRlbXBsYXRlIGRhdGEgd2hpY2ggcHJvZHVjZXMgYSBmb3JtYXR0ZWQg
bWVzc2FnZQotICAgICAqICAgICB3aXRoIHN5bWJvbHMgYmVpbmcgcmVwbGFjZWQgYnkgdGhpcyBv
YmplY3QncyB2YWx1ZXMuCi0gICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAgdGhp
cy5yZXBvcnQgPSBmdW5jdGlvbihub2RlLCBsb2NhdGlvbiwgbWVzc2FnZSwgb3B0cykgewotICAg
ICAgICBlc2xpbnQucmVwb3J0KHJ1bGVJZCwgc2V2ZXJpdHksIG5vZGUsIGxvY2F0aW9uLCBtZXNz
YWdlLCBvcHRzKTsKLSAgICB9OwotCi19Ci0KLVJ1bGVDb250ZXh0LnByb3RvdHlwZSA9IHsKLSAg
ICBjb25zdHJ1Y3RvcjogUnVsZUNvbnRleHQKLX07Ci0KLW1vZHVsZS5leHBvcnRzID0gUnVsZUNv
bnRleHQ7Ci0KLX0se31dLDEyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8q
KgotICogQGZpbGVvdmVydmlldyBEZWZpbmVzIGEgc3RvcmFnZSBmb3IgcnVsZXMuCi0gKiBAYXV0
aG9yIE5pY2hvbGFzIEMuIFpha2FzCi0gKi8KLQotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gUmVxdWlyZW1lbnRzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci12YXIgbG9hZFJ1bGVzID0gcmVxdWlyZSgiLi9sb2FkLXJ1bGVzIik7Ci0KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0vLyBQcml2YXRlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdmFy
IHJ1bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIFB1YmxpYyBJbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8qKgotICog
UmVnaXN0ZXJzIGEgcnVsZSBtb2R1bGUgZm9yIHJ1bGUgaWQgaW4gc3RvcmFnZS4KLSAqIEBwYXJh
bSB7U3RyaW5nfSBydWxlSWQgUnVsZSBpZCAoZmlsZSBuYW1lKS4KLSAqIEBwYXJhbSB7RnVuY3Rp
b259IHJ1bGVNb2R1bGUgUnVsZSBoYW5kbGVyLgotICogQHJldHVybnMge3ZvaWR9Ci0gKi8KLWZ1
bmN0aW9uIGRlZmluZShydWxlSWQsIHJ1bGVNb2R1bGUpIHsKLSAgICBydWxlc1tydWxlSWRdID0g
cnVsZU1vZHVsZTsKLX0KLQotZXhwb3J0cy5kZWZpbmUgPSBkZWZpbmU7Ci0KLS8qKgotICogTG9h
ZHMgYW5kIHJlZ2lzdGVycyBhbGwgcnVsZXMgZnJvbSBwYXNzZWQgcnVsZXMgZGlyZWN0b3J5Lgot
ICogQHBhcmFtIHtTdHJpbmd9IFtydWxlc0Rpcl0gUGF0aCB0byBydWxlcyBkaXJlY3RvcnksIG1h
eSBiZSByZWxhdGl2ZS4gRGVmYXVsdHMgdG8gYGxpYi9ydWxlc2AuCi0gKiBAcmV0dXJucyB7dm9p
ZH0KLSAqLwotZnVuY3Rpb24gbG9hZChydWxlc0RpcikgewotICAgIHZhciBuZXdSdWxlcyA9IGxv
YWRSdWxlcyhydWxlc0Rpcik7Ci0gICAgT2JqZWN0LmtleXMobmV3UnVsZXMpLmZvckVhY2goZnVu
Y3Rpb24ocnVsZUlkKSB7Ci0gICAgICAgIGRlZmluZShydWxlSWQsIG5ld1J1bGVzW3J1bGVJZF0p
OwotICAgIH0pOwotfQotCi1leHBvcnRzLmxvYWQgPSBsb2FkOwotCi0vKioKLSAqIFJlZ2lzdGVy
cyBhbGwgZ2l2ZW4gcnVsZXMgb2YgYSBwbHVnaW4uCi0gKiBAcGFyYW0ge09iamVjdH0gcGx1Z2lu
UnVsZXMgQSBrZXkvdmFsdWUgbWFwIG9mIHJ1bGUgZGVmaW5pdGlvbnMuCi0gKiBAcGFyYW0ge1N0
cmluZ30gcGx1Z2luTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luIHdpdGhvdXQgcHJlZml4IChg
ZXNsaW50LXBsdWdpbi1gKS4KLSAqIEByZXR1cm5zIHt2b2lkfQotICovCi1leHBvcnRzLmltcG9y
dCA9IGZ1bmN0aW9uIChwbHVnaW5SdWxlcywgcGx1Z2luTmFtZSkgewotICAgIE9iamVjdC5rZXlz
KHBsdWdpblJ1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChydWxlSWQpIHsKLSAgICAgICAgdmFyIHF1
YWxpZmllZFJ1bGVJZCA9IHBsdWdpbk5hbWUgKyAiLyIgKyBydWxlSWQsCi0gICAgICAgICAgICBy
dWxlID0gcGx1Z2luUnVsZXNbcnVsZUlkXTsKLQotICAgICAgICBkZWZpbmUocXVhbGlmaWVkUnVs
ZUlkLCBydWxlKTsKLSAgICB9KTsKLX07Ci0KLS8qKgotICogQWNjZXNzIHJ1bGUgaGFuZGxlciBi
eSBpZCAoZmlsZSBuYW1lKS4KLSAqIEBwYXJhbSB7U3RyaW5nfSBydWxlSWQgUnVsZSBpZCAoZmls
ZSBuYW1lKS4KLSAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUnVsZSBoYW5kbGVyLgotICovCi1leHBv
cnRzLmdldCA9IGZ1bmN0aW9uKHJ1bGVJZCkgewotICAgIHJldHVybiBydWxlc1tydWxlSWRdOwot
fTsKLQotLyoqCi0gKiBSZXNldCBydWxlcyBzdG9yYWdlLgotICogU2hvdWxkIGJlIHVzZWQgb25s
eSBpbiB0ZXN0cy4KLSAqIEByZXR1cm5zIHt2b2lkfQotICovCi1leHBvcnRzLnRlc3RDbGVhciA9
IGZ1bmN0aW9uKCkgewotICAgIHJ1bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKLX07Ci0KLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJbml0aWFsaXphdGlvbgotLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotLy8gbG9hZHMgYnVpbHQtaW4gcnVsZXMKLWxvYWQoKTsKLQotfSx7Ii4vbG9h
ZC1ydWxlcyI6MTB9XSwxMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioK
LSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBjaGVjayBmb3IgImJsb2NrIHNjb3BlZCIgdmFyaWFi
bGVzIGJ5IGJpbmRpbmcgY29udGV4dAotICogQGF1dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL3d3
dy5tYXR0ZHV2YWxsLmNvbT4KLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1t
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHZhciBzY29wZVN0YWNr
ID0gW107Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycwotICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIERldGVybWluZXMgd2hldGhlciBh
biBpZGVudGlmaWVyIGlzIGluIGRlY2xhcmF0aW9uIHBvc2l0aW9uIG9yIGlzIGEgbm9uLWRlY2xh
cmF0aW9uIHJlZmVyZW5jZS4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGlkIFRoZSBpZGVudGlm
aWVyLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcGFyZW50IFRoZSBpZGVudGlmaWVyJ3MgcGFy
ZW50IEFTVCBub2RlLgotICAgICAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIHdoZW4gdGhlIGlk
ZW50aWZpZXIgaXMgaW4gZGVjbGFyYXRpb24gcG9zaXRpb24uCi0gICAgICovCi0gICAgZnVuY3Rp
b24gaXNEZWNsYXJhdGlvbihpZCwgcGFyZW50KSB7Ci0gICAgICAgIHN3aXRjaCAocGFyZW50LnR5
cGUpIHsKLSAgICAgICAgICAgIGNhc2UgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOgotICAgICAgICAg
ICAgY2FzZSAiRnVuY3Rpb25FeHByZXNzaW9uIjoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFy
ZW50LnBhcmFtcy5pbmRleE9mKGlkKSA+IC0xIHx8IGlkID09PSBwYXJlbnQuaWQ7Ci0KLSAgICAg
ICAgICAgIGNhc2UgIlZhcmlhYmxlRGVjbGFyYXRvciI6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGlkID09PSBwYXJlbnQuaWQ7Ci0KLSAgICAgICAgICAgIGNhc2UgIkNhdGNoQ2xhdXNlIjoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gaWQgPT09IHBhcmVudC5wYXJhbTsKLQotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gaWRlbnRpZmllciBpcyBp
biBwcm9wZXJ0eSBwb3NpdGlvbi4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGlkIFRoZSBpZGVu
dGlmaWVyLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcGFyZW50IFRoZSBpZGVudGlmaWVyJ3Mg
cGFyZW50IEFTVCBub2RlLgotICAgICAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIHdoZW4gdGhl
IGlkZW50aWZpZXIgaXMgaW4gcHJvcGVydHkgcG9zaXRpb24uCi0gICAgICovCi0gICAgZnVuY3Rp
b24gaXNQcm9wZXJ0eShpZCwgcGFyZW50KSB7Ci0gICAgICAgIHN3aXRjaCAocGFyZW50LnR5cGUp
IHsKLSAgICAgICAgICAgIGNhc2UgIk1lbWJlckV4cHJlc3Npb24iOgotICAgICAgICAgICAgICAg
IHJldHVybiBpZCA9PT0gcGFyZW50LnByb3BlcnR5ICYmICFwYXJlbnQuY29tcHV0ZWQ7Ci0KLSAg
ICAgICAgICAgIGNhc2UgIlByb3BlcnR5IjoKLSAgICAgICAgICAgICAgICByZXR1cm4gaWQgPT09
IHBhcmVudC5rZXk7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHVzaGVzIGEg
bmV3IHNjb3BlIG9iamVjdCBvbiB0aGUgc2NvcGUgc3RhY2suCi0gICAgICogQHJldHVybnMge3Zv
aWR9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gcHVzaFNjb3BlKCkgewotICAgICAgICBzY29wZVN0
YWNrLnB1c2goW10pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgdGhlIHRvcG1v
c3Qgc2NvcGUgb2JqZWN0IGZyb20gdGhlIHNjb3BlIHN0YWNrLgotICAgICAqIEByZXR1cm5zIHt2
b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIHBvcFNjb3BlKCkgewotICAgICAgICBzY29wZVN0
YWNrLnBvcCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERlY2xhcmVzIHRoZSBnaXZlbiBu
YW1lcyBpbiB0aGUgdG9wbW9zdCBzY29wZSBvYmplY3QuCi0gICAgICogQHBhcmFtIHtbU3RyaW5n
XX0gbmFtZXMgQSBsaXN0IG9mIG5hbWVzIHRvIGRlY2xhcmUuCi0gICAgICogQHJldHVybnMge3Zv
aWR9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gZGVjbGFyZShuYW1lcykgewotICAgICAgICBbXS5w
dXNoLmFwcGx5KHNjb3BlU3RhY2tbc2NvcGVTdGFjay5sZW5ndGggLSAxXSwgbmFtZXMpOwotICAg
IH0KLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMgQVBJCi0gICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0gICAgZnVuY3Rpb24gZnVuY3Rpb25IYW5kbGVyKG5vZGUpIHsK
LSAgICAgICAgcHVzaFNjb3BlKCk7Ci0gICAgICAgIGRlY2xhcmUobm9kZS5wYXJhbXMubWFwKGZ1
bmN0aW9uKGlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gaWQubmFtZTsKLSAgICAgICAgfSkpOwot
ICAgICAgICBkZWNsYXJlKG5vZGUuaWQgPyBbbm9kZS5pZC5uYW1lXSA6IFtdKTsKLSAgICAgICAg
ZGVjbGFyZShbImFyZ3VtZW50cyJdKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB2YXJpYWJsZURl
Y2xhcmF0aW9uSGFuZGxlcihub2RlKSB7Ci0gICAgICAgIGRlY2xhcmUobm9kZS5kZWNsYXJhdGlv
bnMubWFwKGZ1bmN0aW9uKGRlY2wpIHsKLSAgICAgICAgICAgIHJldHVybiBkZWNsLmlkLm5hbWU7
Ci0gICAgICAgIH0pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gewotICAgICAgICAiUHJvZ3JhbSI6
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgc2NvcGVTdGFjayA9IFtjb250ZXh0LmdldFNjb3Bl
KCkudmFyaWFibGVzLm1hcChmdW5jdGlvbih2KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHYu
bmFtZTsKLSAgICAgICAgICAgIH0pXTsKLSAgICAgICAgfSwKLQotICAgICAgICAiQmxvY2tTdGF0
ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YXIgc3RhdGVtZW50cyA9IG5v
ZGUuYm9keTsKLSAgICAgICAgICAgIHB1c2hTY29wZSgpOwotICAgICAgICAgICAgc3RhdGVtZW50
cy5mb3JFYWNoKGZ1bmN0aW9uKHN0bXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RtdC50eXBl
ID09PSAiVmFyaWFibGVEZWNsYXJhdGlvbiIpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGVEZWNsYXJhdGlvbkhhbmRsZXIoc3RtdCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChz
dG10LnR5cGUgPT09ICJGdW5jdGlvbkRlY2xhcmF0aW9uIikgewotICAgICAgICAgICAgICAgICAg
ICBkZWNsYXJlKFtzdG10LmlkLm5hbWVdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfSwKLQotICAgICAgICAiQmxvY2tTdGF0ZW1lbnQ6ZXhpdCI6IHBvcFNj
b3BlLAotCi0gICAgICAgICJDYXRjaENsYXVzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAg
ICAgIHB1c2hTY29wZSgpOwotICAgICAgICAgICAgZGVjbGFyZShbbm9kZS5wYXJhbS5uYW1lXSk7
Ci0gICAgICAgIH0sCi0gICAgICAgICJDYXRjaENsYXVzZTpleGl0IjogcG9wU2NvcGUsCi0KLSAg
ICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBmdW5jdGlvbkhhbmRsZXIsCi0gICAgICAgICJG
dW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBwb3BTY29wZSwKLQotICAgICAgICAiRnVuY3Rpb25F
eHByZXNzaW9uIjogZnVuY3Rpb25IYW5kbGVyLAotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9u
OmV4aXQiOiBwb3BTY29wZSwKLQotICAgICAgICAiRm9yU3RhdGVtZW50IjogZnVuY3Rpb24obm9k
ZSkgewotICAgICAgICAgICAgcHVzaFNjb3BlKCk7Ci0gICAgICAgICAgICBpZiAobm9kZS5pbml0
ICYmIG5vZGUuaW5pdC50eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdGlvbiIpIHsKLSAgICAgICAg
ICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9uSGFuZGxlcihub2RlLmluaXQpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9LAotICAgICAgICAiRm9yU3RhdGVtZW50OmV4aXQiOiBwb3BTY29wZSwK
LQotICAgICAgICAiRm9ySW5TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAg
ICBwdXNoU2NvcGUoKTsKLSAgICAgICAgICAgIGlmIChub2RlLmxlZnQudHlwZSA9PT0gIlZhcmlh
YmxlRGVjbGFyYXRpb24iKSB7Ci0gICAgICAgICAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvbkhh
bmRsZXIobm9kZS5sZWZ0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkZv
ckluU3RhdGVtZW50OmV4aXQiOiBwb3BTY29wZSwKLQotICAgICAgICAiSWRlbnRpZmllciI6IGZ1
bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZhciBhbmNlc3RvciA9IGNvbnRleHQuZ2V0QW5j
ZXN0b3JzKCkucG9wKCk7Ci0gICAgICAgICAgICBpZiAoaXNEZWNsYXJhdGlvbihub2RlLCBhbmNl
c3RvcikgfHwgaXNQcm9wZXJ0eShub2RlLCBhbmNlc3RvcikpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHNj
b3BlU3RhY2subGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNjb3Bl
U3RhY2tbaV0uaW5kZXhPZihub2RlLm5hbWUpID4gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIlwiIiArIG5vZGUubmFtZSArICJcIiB1c2VkIG91dHNpZGUg
b2YgYmluZGluZyBjb250ZXh0LiIpOwotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0s
MTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gZmxhZyBibG9jayBzdGF0ZW1lbnRzIHRoYXQgZG8gbm90IHVzZSB0aGUgb25l
IHRydWUgYnJhY2Ugc3R5bGUKLSAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycwotICovCi0K
LSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5p
dGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7Ci0gICAgdmFyIHN0eWxlID0gY29udGV4dC5vcHRpb25zWzBdIHx8ICIxdGJz
IjsKLSAgICB2YXIgcGFyYW1zID0gY29udGV4dC5vcHRpb25zWzFdIHx8IHt9OwotCi0gICAgdmFy
IE9QRU5fTUVTU0FHRSA9ICJPcGVuaW5nIGN1cmx5IGJyYWNlIGRvZXMgbm90IGFwcGVhciBvbiB0
aGUgc2FtZSBsaW5lIGFzIGNvbnRyb2xsaW5nIHN0YXRlbWVudC4iLAotICAgICAgICBCT0RZX01F
U1NBR0UgPSAiU3RhdGVtZW50IGluc2lkZSBvZiBjdXJseSBicmFjZXMgc2hvdWxkIGJlIG9uIG5l
eHQgbGluZS4iLAotICAgICAgICBDTE9TRV9NRVNTQUdFID0gIkNsb3NpbmcgY3VybHkgYnJhY2Ug
ZG9lcyBub3QgYXBwZWFyIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIHN1YnNlcXVlbnQgYmxvY2su
IiwKLSAgICAgICAgQ0xPU0VfTUVTU0FHRV9TSU5HTEUgPSAiQ2xvc2luZyBjdXJseSBicmFjZSBz
aG91bGQgYmUgb24gdGhlIHNhbWUgbGluZSBhcyBvcGVuaW5nIGN1cmx5IGJyYWNlIG9yIG9uIHRo
ZSBsaW5lIGFmdGVyIHRoZSBwcmV2aW91cyBibG9jay4iLAotICAgICAgICBDTE9TRV9NRVNTQUdF
X1NUUk9VU1RSVVAgPSAiQ2xvc2luZyBjdXJseSBicmFjZSBhcHBlYXJzIG9uIHRoZSBzYW1lIGxp
bmUgYXMgdGhlIHN1YnNlcXVlbnQgYmxvY2suIjsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLyoqCi0gICAg
ICogQmluZHMgYSBsaXN0IG9mIHByb3BlcnRpZXMgdG8gYSBmdW5jdGlvbiB0aGF0IHZlcmlmaWVz
IHRoYXQgdGhlIG9wZW5pbmcKLSAgICAgKiBjdXJseSBicmFjZSBpcyBvbiB0aGUgc2FtZSBsaW5l
IGFzIGl0cyBjb250cm9sbGluZyBzdGF0ZW1lbnQgb2YgYSBnaXZlbgotICAgICAqIG5vZGUuCi0g
ICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IFRoZSBwcm9wZXJ0aWVzIHRvIGNoZWNrIG9uIHRoZSBu
b2RlLgotICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgcGVy
Zm9ybSB0aGUgY2hlY2sgb24gYSBub2RlCi0gICAgICovCi0gICAgZnVuY3Rpb24gY2hlY2tCbG9j
aygpIHsKLSAgICAgICAgdmFyIGJsb2NrUHJvcGVydGllcyA9IGFyZ3VtZW50czsKLSAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIFtdLmZvckVhY2guY2FsbChibG9j
a1Byb3BlcnRpZXMsIGZ1bmN0aW9uKGJsb2NrUHJvcCkgewotICAgICAgICAgICAgICAgIHZhciBi
bG9jayA9IG5vZGVbYmxvY2tQcm9wXSwgcHJldmlvdXNUb2tlbiwgY3VybHlUb2tlbiwgY3VybHlU
b2tlbkVuZCwgY3VybHlUb2tlbnNPblNhbWVMaW5lOwotICAgICAgICAgICAgICAgIGJsb2NrID0g
bm9kZVtibG9ja1Byb3BdOwotICAgICAgICAgICAgICAgIGlmIChibG9jayAmJiBibG9jay50eXBl
ID09PSAiQmxvY2tTdGF0ZW1lbnQiKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVG9r
ZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKGJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAg
Y3VybHlUb2tlbiA9IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbihibG9jayk7Ci0gICAgICAgICAgICAg
ICAgICAgIGN1cmx5VG9rZW5FbmQgPSBjb250ZXh0LmdldExhc3RUb2tlbihibG9jayk7Ci0gICAg
ICAgICAgICAgICAgICAgIGN1cmx5VG9rZW5zT25TYW1lTGluZSA9IGN1cmx5VG9rZW4ubG9jLnN0
YXJ0LmxpbmUgPT09IGN1cmx5VG9rZW5FbmQubG9jLnN0YXJ0LmxpbmU7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHByZXZpb3VzVG9rZW4ubG9jLnN0YXJ0LmxpbmUgIT09IGN1cmx5VG9rZW4u
bG9jLnN0YXJ0LmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsIE9QRU5fTUVTU0FHRSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmxv
Y2suYm9keS5sZW5ndGggJiYgcGFyYW1zLmFsbG93U2luZ2xlTGluZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGN1cmx5VG9rZW4ubG9jLnN0YXJ0LmxpbmUgPT09IGJsb2NrLmJvZHlb
MF0ubG9jLnN0YXJ0LmxpbmUgJiYgIWN1cmx5VG9rZW5zT25TYW1lTGluZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGJsb2NrLmJvZHlbMF0sIEJPRFlfTUVT
U0FHRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cmx5VG9rZW5FbmQu
bG9jLnN0YXJ0LmxpbmUgPT09IGJsb2NrLmJvZHlbYmxvY2suYm9keS5sZW5ndGggLSAxXS5sb2Mu
c3RhcnQubGluZSAmJiAhY3VybHlUb2tlbnNPblNhbWVMaW5lKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoYmxvY2suYm9keVtibG9jay5ib2R5Lmxlbmd0aCAt
IDFdLCBDTE9TRV9NRVNTQUdFX1NJTkdMRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmxvY2suYm9keS5sZW5ndGggJiYgY3VybHlU
b2tlbi5sb2Muc3RhcnQubGluZSA9PT0gYmxvY2suYm9keVswXS5sb2Muc3RhcnQubGluZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoYmxvY2suYm9keVswXSwgQk9E
WV9NRVNTQUdFKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0pOwotICAgICAgICB9OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEVuZm9y
Y2VzIHRoZSBjb25maWd1cmVkIGJyYWNlIHN0eWxlIG9uIElmU3RhdGVtZW50cwotICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gbm9kZSBBbiBJZlN0YXRlbWVudCBub2RlLgotICAgICAqIEByZXR1cm5z
IHt2b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIGNoZWNrSWZTdGF0ZW1lbnQobm9kZSkgewot
ICAgICAgICB2YXIgdG9rZW5zOwotCi0gICAgICAgIGNoZWNrQmxvY2soImNvbnNlcXVlbnQiLCAi
YWx0ZXJuYXRlIikobm9kZSk7Ci0KLSAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlICYmIG5vZGUu
YWx0ZXJuYXRlLnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpIHsKLSAgICAgICAgICAgIHRva2Vu
cyA9IGNvbnRleHQuZ2V0VG9rZW5zQmVmb3JlKG5vZGUuYWx0ZXJuYXRlLCAyKTsKLSAgICAgICAg
ICAgIGlmIChzdHlsZSA9PT0gIjF0YnMiKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2Vuc1sw
XS5sb2Muc3RhcnQubGluZSAhPT0gdG9rZW5zWzFdLmxvYy5zdGFydC5saW5lKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUuYWx0ZXJuYXRlLCBDTE9TRV9NRVNTQUdF
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0eWxlID09PSAi
c3Ryb3VzdHJ1cCIpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW5zWzBdLmxvYy5zdGFydC5s
aW5lID09PSB0b2tlbnNbMV0ubG9jLnN0YXJ0LmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZS5hbHRlcm5hdGUsIENMT1NFX01FU1NBR0VfU1RST1VTVFJVUCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogRW5mb3JjZXMgdGhlIGNvbmZpZ3VyZWQgYnJhY2Ugc3R5bGUgb24gVHJ5
U3RhdGVtZW50cwotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBBIFRyeVN0YXRlbWVudCBu
b2RlLgotICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIGNoZWNr
VHJ5U3RhdGVtZW50KG5vZGUpIHsKLSAgICAgICAgdmFyIHRva2VuczsKLQotICAgICAgICBjaGVj
a0Jsb2NrKCJibG9jayIsICJmaW5hbGl6ZXIiKShub2RlKTsKLQotICAgICAgICBpZiAobm9kZS5m
aW5hbGl6ZXIgJiYgbm9kZS5maW5hbGl6ZXIudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50Iikgewot
ICAgICAgICAgICAgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnNCZWZvcmUobm9kZS5maW5hbGl6
ZXIsIDIpOwotICAgICAgICAgICAgaWYgKHN0eWxlID09PSAiMXRicyIpIHsKLSAgICAgICAgICAg
ICAgICBpZiAodG9rZW5zWzBdLmxvYy5zdGFydC5saW5lICE9PSB0b2tlbnNbMV0ubG9jLnN0YXJ0
LmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZS5maW5hbGl6
ZXIsIENMT1NFX01FU1NBR0UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc3R5bGUgPT09ICJzdHJvdXN0cnVwIikgewotICAgICAgICAgICAgICAgIGlmICh0b2tl
bnNbMF0ubG9jLnN0YXJ0LmxpbmUgPT09IHRva2Vuc1sxXS5sb2Muc3RhcnQubGluZSkgewotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLmZpbmFsaXplciwgQ0xPU0VfTUVT
U0FHRV9TVFJPVVNUUlVQKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFbmZvcmNlcyB0aGUgY29uZmlndXJlZCBi
cmFjZSBzdHlsZSBvbiBDYXRjaENsYXVzZXMKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUg
QSBDYXRjaENsYXVzZSBub2RlLgotICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAg
IGZ1bmN0aW9uIGNoZWNrQ2F0Y2hDbGF1c2Uobm9kZSkgewotICAgICAgICB2YXIgcHJldmlvdXNU
b2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSksCi0gICAgICAgICAgICBmaXJzdFRv
a2VuID0gY29udGV4dC5nZXRGaXJzdFRva2VuKG5vZGUpOwotCi0gICAgICAgIGNoZWNrQmxvY2so
ImJvZHkiKShub2RlKTsKLQotICAgICAgICBpZiAobm9kZS5ib2R5ICYmIG5vZGUuYm9keS50eXBl
ID09PSAiQmxvY2tTdGF0ZW1lbnQiKSB7Ci0gICAgICAgICAgICBpZiAoc3R5bGUgPT09ICIxdGJz
IikgewotICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1Rva2VuLmxvYy5zdGFydC5saW5lICE9
PSBmaXJzdFRva2VuLmxvYy5zdGFydC5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsIENMT1NFX01FU1NBR0UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoc3R5bGUgPT09ICJzdHJvdXN0cnVwIikgewotICAgICAgICAgICAg
ICAgIGlmIChwcmV2aW91c1Rva2VuLmxvYy5zdGFydC5saW5lID09PSBmaXJzdFRva2VuLmxvYy5z
dGFydC5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIENM
T1NFX01FU1NBR0VfU1RST1VTVFJVUCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRW5mb3JjZXMgdGhlIGNvbmZp
Z3VyZWQgYnJhY2Ugc3R5bGUgb24gU3dpdGNoU3RhdGVtZW50cwotICAgICAqIEBwYXJhbSB7QVNU
Tm9kZX0gbm9kZSBBIFN3aXRjaFN0YXRlbWVudCBub2RlLgotICAgICAqIEByZXR1cm5zIHt2b2lk
fQotICAgICAqLwotICAgIGZ1bmN0aW9uIGNoZWNrU3dpdGNoU3RhdGVtZW50KG5vZGUpIHsKLSAg
ICAgICAgdmFyIHRva2VuczsKLSAgICAgICAgaWYgKG5vZGUuY2FzZXMgJiYgbm9kZS5jYXNlcy5s
ZW5ndGgpIHsKLSAgICAgICAgICAgIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zQmVmb3JlKG5v
ZGUuY2FzZXNbMF0sIDIpOwotICAgICAgICAgICAgaWYgKHRva2Vuc1swXS5sb2Muc3RhcnQubGlu
ZSAhPT0gdG9rZW5zWzFdLmxvYy5zdGFydC5saW5lKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgT1BFTl9NRVNTQUdFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHRva2VucyA9IGNvbnRleHQuZ2V0TGFzdFRva2Vucyhub2RlLCAz
KTsKLSAgICAgICAgICAgIGlmICh0b2tlbnNbMF0ubG9jLnN0YXJ0LmxpbmUgIT09IHRva2Vuc1sx
XS5sb2Muc3RhcnQubGluZSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
IE9QRU5fTUVTU0FHRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljIEFQSQotICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogY2hl
Y2tCbG9jaygiYm9keSIpLAotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogY2hlY2tCbG9j
aygiYm9keSIpLAotICAgICAgICAiSWZTdGF0ZW1lbnQiOiBjaGVja0lmU3RhdGVtZW50LAotICAg
ICAgICAiVHJ5U3RhdGVtZW50IjogY2hlY2tUcnlTdGF0ZW1lbnQsCi0gICAgICAgICJDYXRjaENs
YXVzZSI6IGNoZWNrQ2F0Y2hDbGF1c2UsCi0gICAgICAgICJEb1doaWxlU3RhdGVtZW50IjogY2hl
Y2tCbG9jaygiYm9keSIpLAotICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiBjaGVja0Jsb2NrKCJi
b2R5IiksCi0gICAgICAgICJXaXRoU3RhdGVtZW50IjogY2hlY2tCbG9jaygiYm9keSIpLAotICAg
ICAgICAiRm9yU3RhdGVtZW50IjogY2hlY2tCbG9jaygiYm9keSIpLAotICAgICAgICAiRm9ySW5T
dGF0ZW1lbnQiOiBjaGVja0Jsb2NrKCJib2R5IiksCi0gICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQi
OiBjaGVja1N3aXRjaFN0YXRlbWVudAotICAgIH07Ci0KLX07Ci0KLX0se31dLDE1OltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRv
IGZsYWcgbm9uLWNhbWVsY2FzZWQgaWRlbnRpZmllcnMKLSAqIEBhdXRob3IgTmljaG9sYXMgQy4g
WmFrYXMKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9u
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLyoqCi0gICAg
ICogQ2hlY2tzIGlmIGEgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZGVyc2NvcmUgYW5kIGlzbid0IGFs
bCB1cHBlci1jYXNlCi0gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIHN0cmluZyB0byBj
aGVjay4KLSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gaWYgdGhlIHN0cmluZyBpcyB1bmRlcnNj
b3JlZAotICAgICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gaXNVbmRlcnNjb3Jl
ZChuYW1lKSB7Ci0KLSAgICAgICAgLy8gaWYgdGhlcmUncyBhbiB1bmRlcnNjb3JlLCBpdCBtaWdo
dCBiZSBBX0NPTlNUQU5ULCB3aGljaCBpcyBva2F5Ci0gICAgICAgIHJldHVybiBuYW1lLmluZGV4
T2YoIl8iKSA+IC0xICYmIG5hbWUgIT09IG5hbWUudG9VcHBlckNhc2UoKTsKLSAgICB9Ci0KLSAg
ICAvKioKLSAgICAgKiBSZXBvcnRzIGFuIEFTVCBub2RlIGFzIGEgcnVsZSB2aW9sYXRpb24uCi0g
ICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIHJlcG9ydC4KLSAgICAgKiBA
cmV0dXJucyB7dm9pZH0KLSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIGZ1bmN0aW9uIHJl
cG9ydChub2RlKSB7Ci0gICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJJZGVudGlmaWVyICd7
e25hbWV9fScgaXMgbm90IGluIGNhbWVsIGNhc2UuIiwgeyBuYW1lOiBub2RlLm5hbWUgfSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiSWRlbnRpZmllciI6IGZ1bmN0aW9uKG5v
ZGUpIHsKLQotICAgICAgICAgICAgLy8gTGVhZGluZyBhbmQgdHJhaWxpbmcgdW5kZXJzY29yZXMg
YXJlIGNvbW1vbmx5IHVzZWQgdG8gZmxhZyBwcml2YXRlL3Byb3RlY3RlZCBpZGVudGlmaWVycywg
c3RyaXAgdGhlbQotICAgICAgICAgICAgdmFyIG5hbWUgPSBub2RlLm5hbWUucmVwbGFjZSgvXl8r
fF8rJC9nLCAiIiksCi0gICAgICAgICAgICAgICAgZWZmZWN0aXZlUGFyZW50ID0gKG5vZGUucGFy
ZW50LnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIikgPyBub2RlLnBhcmVudC5wYXJlbnQgOiBu
b2RlLnBhcmVudDsKLQotICAgICAgICAgICAgLy8gTWVtYmVyRXhwcmVzc2lvbnMgZ2V0IHNwZWNp
YWwgcnVsZXMKLSAgICAgICAgICAgIGlmIChub2RlLnBhcmVudC50eXBlID09PSAiTWVtYmVyRXhw
cmVzc2lvbiIpIHsKLQotICAgICAgICAgICAgICAgIC8vIEFsd2F5cyByZXBvcnQgdW5kZXJzY29y
ZWQgb2JqZWN0IG5hbWVzCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50Lm9iamVjdC50
eXBlID09PSAiSWRlbnRpZmllciIgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUucGFy
ZW50Lm9iamVjdC5uYW1lID09PSBub2RlLm5hbWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlzVW5kZXJzY29yZWQobmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUp
OwotCi0gICAgICAgICAgICAgICAgLy8gUmVwb3J0IEFzc2lnbm1lbnRFeHByZXNzaW9ucyBvbmx5
IGlmIHRoZXkgYXJlIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGFzc2lnbm1lbnQKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGVmZmVjdGl2ZVBhcmVudC50eXBlID09PSAiQXNzaWdubWVudEV4cHJl
c3Npb24iICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBpc1VuZGVyc2NvcmVkKG5hbWUpICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAoZWZmZWN0aXZlUGFyZW50LnJpZ2h0LnR5cGUgIT09
ICJNZW1iZXJFeHByZXNzaW9uIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZl
UGFyZW50LmxlZnQudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iICYmCi0gICAgICAgICAgICAg
ICAgICAgICAgICBlZmZlY3RpdmVQYXJlbnQubGVmdC5wcm9wZXJ0eS5uYW1lID09PSBub2RlLm5h
bWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcG9ydChub2RlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFJlcG9ydCBhbnl0aGluZyB0aGF0IGlzIHVuZGVyc2NvcmVk
IHRoYXQgaXNuJ3QgYSBDYWxsRXhwcmVzc2lvbgotICAgICAgICAgICAgfSBlbHNlIGlmIChpc1Vu
ZGVyc2NvcmVkKG5hbWUpICYmIGVmZmVjdGl2ZVBhcmVudC50eXBlICE9PSAiQ2FsbEV4cHJlc3Np
b24iKSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sMTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IENvbW1hIHNwYWNpbmcgLSB2YWxpZGF0
ZXMgc3BhY2luZyBiZWZvcmUgYW5kIGFmdGVyIGNvbW1hCi0gKiBAYXV0aG9yIFZpZ25lc2ggQW5h
bmQgYWthIHZlZ2V0YWJsZW1hbi4KLSAqIEBjb3B5cmlnaHQgMjAxNCBWaWduZXNoIEFuYW5kLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotICAgIHZhciBvcHRpb25zID0g
ewotICAgICAgICBiZWZvcmU6IGNvbnRleHQub3B0aW9uc1swXSA/ICEhY29udGV4dC5vcHRpb25z
WzBdLmJlZm9yZSA6IGZhbHNlLAotICAgICAgICBhZnRlcjogY29udGV4dC5vcHRpb25zWzBdID8g
ISFjb250ZXh0Lm9wdGlvbnNbMF0uYWZ0ZXIgOiB0cnVlCi0gICAgfTsKLQotICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
ICAgLyoqCi0gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBhZGphY2VudCB0b2tlbnMgaGF2
ZSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlbS4KLSAgICAgKiBAcGFyYW0ge09iamVjdH0gbGVmdCAt
IFRoZSBsZWZ0IHRva2VuIG9iamVjdC4KLSAgICAgKiBAcGFyYW0ge09iamVjdH0gcmlnaHQgLSBU
aGUgcmlnaHQgdG9rZW4gb2JqZWN0LgotICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVy
IG9yIG5vdCB0aGVyZSBpcyBzcGFjZSBiZXR3ZWVuIHRoZSB0b2tlbnMuCi0gICAgICovCi0gICAg
ZnVuY3Rpb24gaXNTcGFjZWQobGVmdCwgcmlnaHQpIHsKLSAgICAgICAgcmV0dXJuIGxlZnQucmFu
Z2VbMV0gPCByaWdodC5yYW5nZVswXTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSdW4gcmVw
b3J0LgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgYmluYXJ5IGV4cHJlc3Npb24g
bm9kZSB0byBjaGVjay4KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbXNnIFRoZSBlcnJvciBtc2cg
dG8gc2hvdy4KLSAgICAgKiBAcHJpdmF0ZQotICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAq
LwotICAgIGZ1bmN0aW9uIHJlcG9ydChub2RlLCBtc2cpIHsKLSAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgbXNnKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTaG93IHNwYWNlIHJlcXVp
cmVkIG1lc3NhZ2UuCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGRpciBUaGUgbG9jYXRpb24gb2Yg
c3BhY2luZy4KLSAgICAgKiBAcHJpdmF0ZQotICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBz
cGFjaW5nIGVycm9yIG1zZy4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBnZXRTcGFjZVJlcU1zZyhk
aXIpIHsKLSAgICAgICAgcmV0dXJuICJBIHNwYWNlIGlzIHJlcXVpcmVkICIgKyBkaXIgKyAiICcs
Jy4iOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNob3cgbm8gc3BhY2UgbWVzc2FnZS4KLSAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gZGlyIFRoZSBsb2NhdGlvbiBvZiBzcGFjaW5nCi0gICAgICog
QHByaXZhdGUKLSAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3BhY2luZyBlcnJvciBtc2cu
Ci0gICAgICovCi0gICAgZnVuY3Rpb24gZ2V0Tm9TcGFjZU1zZyhkaXIpIHsKLSAgICAgICAgcmV0
dXJuICJUaGVyZSBzaG91bGQgYmUgbm8gc3BhY2UgIiArIGRpciArICIgJywnLiI7Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogVmFsaWRhdGVzIHRoZSBzcGFjaW5nIGJlZm9yZSBhbmQgYWZ0ZXIg
Y29tbWFzLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgYmluYXJ5IGV4cHJlc3Np
b24gbm9kZSB0byBjaGVjay4KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgVGhlIHBy
b3BlcnR5IG9mIHRoZSBub2RlLgotICAgICAqIEBwcml2YXRlCi0gICAgICogQHJldHVybnMge3Zv
aWR9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gdmFsaWRhdGVDb21tYVNwYWNpbmcobm9kZSwgcHJv
cGVydHkpIHsKLSAgICAgICAgdmFyIGl0ZW1zID0gbm9kZVtwcm9wZXJ0eV07Ci0KLSAgICAgICAg
aWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA+IDEpIHsKLSAgICAgICAgICAgIGl0ZW1zLmZvckVh
Y2goZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHsKLSAgICAgICAgICAgICAgICB2YXIgdG9rZW5CZWZv
cmUgPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKGl0ZW0pLAotICAgICAgICAgICAgICAgICAgICBp
dGVtQmVmb3JlID0gaXRlbXNbaW5kZXggLSAxXSwKLSAgICAgICAgICAgICAgICAgICAgdG9rZW5F
bmRMaW5lOwotCi0gICAgICAgICAgICAgICAgaWYgKHRva2VuQmVmb3JlICYmIHRva2VuQmVmb3Jl
LnZhbHVlID09PSAiLCIpIHsKLSAgICAgICAgICAgICAgICAgICAgdG9rZW5FbmRMaW5lID0gdG9r
ZW5CZWZvcmUubG9jLmVuZC5saW5lOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIHNpbmdsZSBs
aW5lCi0gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbkVuZExpbmUgPT09IGl0ZW1CZWZvcmUu
bG9jLmVuZC5saW5lICYmCi0gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbkVuZExpbmUgPT09
IGl0ZW0ubG9jLnN0YXJ0LmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRp
b25zLmJlZm9yZSAmJiBvcHRpb25zLmFmdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpc1NwYWNlZChpdGVtQmVmb3JlLCB0b2tlbkJlZm9yZSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0sIGdldFNwYWNlUmVxTXNnKCJiZWZvcmUi
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghaXNTcGFjZWQodG9rZW5CZWZvcmUsIGl0ZW0pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcG9ydChpdGVtLCBnZXRTcGFjZVJlcU1zZygiYWZ0ZXIiKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChvcHRpb25zLmJlZm9yZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghaXNTcGFjZWQoaXRlbUJlZm9yZSwgdG9rZW5CZWZvcmUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcG9ydChpdGVtLCBnZXRTcGFjZVJlcU1zZygiYmVmb3JlIikp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNTcGFjZWQodG9rZW5CZWZvcmUsIGl0ZW0pKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcG9ydChpdGVtLCBnZXROb1NwYWNlTXNnKCJhZnRlciIpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKG9wdGlvbnMuYWZ0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzU3BhY2VkKHRva2VuQmVmb3JlLCBpdGVtKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXBvcnQoaXRlbSwgZ2V0U3BhY2VSZXFNc2coImFmdGVyIikpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNT
cGFjZWQoaXRlbUJlZm9yZSwgdG9rZW5CZWZvcmUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcG9ydChpdGVtLCBnZXROb1NwYWNlTXNnKCJiZWZvcmUiKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTcGFjZWQoaXRlbUJlZm9yZSwgdG9r
ZW5CZWZvcmUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydChpdGVt
LCBnZXROb1NwYWNlTXNnKCJiZWZvcmUiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlZCh0b2tlbkJlZm9yZSwg
aXRlbSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KGl0ZW0sIGdl
dE5vU3BhY2VNc2coImFmdGVyIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICAgIHJldHVybiB7Ci0gICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9k
ZSkgewotICAgICAgICAgICAgdmFsaWRhdGVDb21tYVNwYWNpbmcobm9kZSwgImRlY2xhcmF0aW9u
cyIpOwotICAgICAgICB9LAotICAgICAgICAiT2JqZWN0RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5v
ZGUpIHsKLSAgICAgICAgICAgIHZhbGlkYXRlQ29tbWFTcGFjaW5nKG5vZGUsICJwcm9wZXJ0aWVz
Iik7Ci0gICAgICAgIH0sCi0gICAgICAgICJBcnJheUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2Rl
KSB7Ci0gICAgICAgICAgICB2YWxpZGF0ZUNvbW1hU3BhY2luZyhub2RlLCAiZWxlbWVudHMiKTsK
LSAgICAgICAgfSwKLSAgICAgICAgIlNlcXVlbmNlRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKLSAgICAgICAgICAgIHZhbGlkYXRlQ29tbWFTcGFjaW5nKG5vZGUsICJleHByZXNzaW9ucyIp
OwotICAgICAgICB9LAotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZnVuY3Rpb24obm9k
ZSkgewotICAgICAgICAgICAgdmFsaWRhdGVDb21tYVNwYWNpbmcobm9kZSwgInBhcmFtcyIpOwot
ICAgICAgICB9LAotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKLSAgICAgICAgICAgIHZhbGlkYXRlQ29tbWFTcGFjaW5nKG5vZGUsICJwYXJhbXMiKTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDE3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBDb21tYSBzdHlsZSAtIGVuZm9yY2Vz
IGNvbW1hIHN0eWxlcyBvZiB0d28gdHlwZXM6IGxhc3QgYW5kIGZpcnN0Ci0gKiBAYXV0aG9yIFZp
Z25lc2ggQW5hbmQgYWthIHZlZ2V0YWJsZW1hbgotICogQGNvcHlyaWdodCAyMDE0IFZpZ25lc2gg
QW5hbmQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAg
ICB2YXIgc3R5bGUgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwgImxhc3QiOwotCi0gICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgIC8vIEhlbHBlcnMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LSAgICAvKioKLSAgICAgKiBDaGVja3MgdGhlIGNvbW1hIHBsYWNlbWVudCB3aXRoIHJlZ2FyZHMg
dG8gYSBkZWNsYXJhdGlvbi9wcm9wZXJ0eS9lbGVtZW50Ci0gICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBub2RlIFRoZSBiaW5hcnkgZXhwcmVzc2lvbiBub2RlIHRvIGNoZWNrCi0gICAgICogQHByaXZh
dGUKLSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiB2YWxpZGF0
ZUNvbW1hKG5vZGUpIHsKLSAgICAgICAgdmFyIGl0ZW1zID0gbm9kZS5kZWNsYXJhdGlvbnMgfHwg
bm9kZS5wcm9wZXJ0aWVzIHx8IG5vZGUuZWxlbWVudHM7Ci0KLSAgICAgICAgaWYgKGl0ZW1zLmxl
bmd0aCA+IDEpIHsKLSAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24oaXRlbSwgaW5k
ZXgpIHsKLSAgICAgICAgICAgICAgICB2YXIgdG9rZW5CZWZvcmUgPSBjb250ZXh0LmdldFRva2Vu
QmVmb3JlKGl0ZW0pLAotICAgICAgICAgICAgICAgICAgICBpdGVtQmVmb3JlID0gaXRlbXNbaW5k
ZXggLSAxXTsKLQotICAgICAgICAgICAgICAgIGlmICh0b2tlbkJlZm9yZS52YWx1ZSA9PT0gIiwi
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlmIHNpbmdsZSBsaW5lCi0gICAgICAgICAgICAg
ICAgICAgIGlmICh0b2tlbkJlZm9yZS5sb2MuZW5kLmxpbmUgPT09IGl0ZW0ubG9jLnN0YXJ0Lmxp
bmUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuQmVmb3JlLmxvYy5lbmQubGluZSA9
PT0gaXRlbUJlZm9yZS5sb2MuZW5kLmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBsb25l
IGNvbW1hCi0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuQmVmb3JlLmxvYy5lbmQu
bGluZSAhPT0gaXRlbS5sb2Muc3RhcnQubGluZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW5CZWZvcmUubG9jLmVuZC5saW5lICE9PSBpdGVtQmVmb3JlLmxvYy5lbmQubGluZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoaXRlbSwgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmU6IHRva2VuQmVmb3JlLmxvYy5lbmQubGluZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRva2VuQmVmb3JlLmxvYy5zdGFydC5jb2x1
bW4KLSAgICAgICAgICAgICAgICAgICAgICAgIH0sICJCYWQgbGluZSBicmVha2luZyBiZWZvcmUg
YW5kIGFmdGVyICcsJy4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChzdHlsZSA9PT0gImZpcnN0IiAmJgotICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW5CZWZvcmUubG9jLnN0YXJ0LmxpbmUgIT09IGl0ZW0ubG9jLnN0YXJ0LmxpbmUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGl0ZW0sICInLCcgc2hvdWxk
IGJlIHBsYWNlZCBmaXJzdC4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChzdHlsZSA9PT0gImxhc3QiICYmCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbkJlZm9yZS5sb2MuZW5kLmxpbmUgPT09IGl0ZW0ubG9jLnN0YXJ0LmxpbmUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGl0ZW0sIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lOiBpdGVtQmVmb3JlLmxvYy5lbmQubGluZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGl0ZW1CZWZvcmUubG9jLmVuZC5jb2x1bW4K
LSAgICAgICAgICAgICAgICAgICAgICAgIH0sICInLCcgc2hvdWxkIGJlIHBsYWNlZCBsYXN0LiIp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8g
UHVibGljCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAg
IlZhcmlhYmxlRGVjbGFyYXRpb24iOiB2YWxpZGF0ZUNvbW1hLAotICAgICAgICAiT2JqZWN0RXhw
cmVzc2lvbiI6IHZhbGlkYXRlQ29tbWEsCi0gICAgICAgICJBcnJheUV4cHJlc3Npb24iOiB2YWxp
ZGF0ZUNvbW1hCi0gICAgfTsKLQotfTsKLQotfSx7fV0sMTg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IENvdW50cyB0aGUgY3ljbG9tYXRp
YyBjb21wbGV4aXR5IG9mIGVhY2ggZnVuY3Rpb24gb2YgdGhlIHNjcmlwdC4gU2VlIGh0dHA6Ly9l
bi53aWtpcGVkaWEub3JnL3dpa2kvQ3ljbG9tYXRpY19jb21wbGV4aXR5LgotICogQ291bnRzIHRo
ZSBudW1iZXIgb2YgaWYsIGNvbmRpdGlvbmFsLCBmb3IsIHdoaWx0ZSwgdHJ5LCBzd2l0Y2gvY2Fz
ZSwKLSAqIEBhdXRob3IgUGF0cmljayBCcm9zc2V0Ci0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0K
LSAgICB2YXIgVEhSRVNIT0xEID0gY29udGV4dC5vcHRpb25zWzBdOwotCi0gICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICAgIC8vIEhlbHBlcnMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAg
ICAvLyBVc2luZyBhIHN0YWNrIHRvIHN0b3JlIGNvbXBsZXhpdHkgKGhhbmRsaW5nIG5lc3RlZCBm
dW5jdGlvbnMpCi0gICAgdmFyIGZucyA9IFtdOwotCi0gICAgLy8gV2hlbiBwYXJzaW5nIGEgbmV3
IGZ1bmN0aW9uLCBzdG9yZSBpdCBpbiBvdXIgZnVuY3Rpb24gc3RhY2sKLSAgICBmdW5jdGlvbiBz
dGFydEZ1bmN0aW9uKCkgewotICAgICAgICBmbnMucHVzaCgxKTsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBlbmRGdW5jdGlvbihub2RlKSB7Ci0gICAgICAgIHZhciBjb21wbGV4aXR5ID0gZm5zLnBv
cCgpLCBuYW1lID0gImFub255bW91cyI7Ci0KLSAgICAgICAgaWYgKG5vZGUuaWQpIHsKLSAgICAg
ICAgICAgIG5hbWUgPSBub2RlLmlkLm5hbWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvbXBs
ZXhpdHkgPiBUSFJFU0hPTEQpIHsKLSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJG
dW5jdGlvbiAne3tuYW1lfX0nIGhhcyBhIGNvbXBsZXhpdHkgb2Yge3tjb21wbGV4aXR5fX0uIiwg
eyBuYW1lOiBuYW1lLCBjb21wbGV4aXR5OiBjb21wbGV4aXR5IH0pOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gaW5jcmVhc2VDb21wbGV4aXR5KCkgewotICAgICAgICBpZiAoZm5z
Lmxlbmd0aCkgewotICAgICAgICAgICAgZm5zW2Zucy5sZW5ndGggLSAxXSArKzsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGluY3JlYXNlU3dpdGNoQ29tcGxleGl0eShub2RlKSB7
Ci0gICAgICAgIC8vIEF2b2lkaW5nIGBkZWZhdWx0YAotICAgICAgICBpZiAobm9kZS50ZXN0KSB7
Ci0gICAgICAgICAgICBpbmNyZWFzZUNvbXBsZXhpdHkobm9kZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBpbmNyZWFzZUxvZ2ljYWxDb21wbGV4aXR5KG5vZGUpIHsKLSAgICAg
ICAgLy8gQXZvaWRpbmcgJiYKLSAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICJ8fCIpIHsK
LSAgICAgICAgICAgIGluY3JlYXNlQ29tcGxleGl0eShub2RlKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMgQVBJCi0gICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRp
b24iOiBzdGFydEZ1bmN0aW9uLAotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogc3RhcnRG
dW5jdGlvbiwKLSAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGVuZEZ1bmN0aW9u
LAotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBlbmRGdW5jdGlvbiwKLQotICAg
ICAgICAiQ2F0Y2hDbGF1c2UiOiBpbmNyZWFzZUNvbXBsZXhpdHksCi0gICAgICAgICJDb25kaXRp
b25hbEV4cHJlc3Npb24iOiBpbmNyZWFzZUNvbXBsZXhpdHksCi0gICAgICAgICJMb2dpY2FsRXhw
cmVzc2lvbiI6IGluY3JlYXNlTG9naWNhbENvbXBsZXhpdHksCi0gICAgICAgICJGb3JTdGF0ZW1l
bnQiOiBpbmNyZWFzZUNvbXBsZXhpdHksCi0gICAgICAgICJGb3JJblN0YXRlbWVudCI6IGluY3Jl
YXNlQ29tcGxleGl0eSwKLSAgICAgICAgIklmU3RhdGVtZW50IjogaW5jcmVhc2VDb21wbGV4aXR5
LAotICAgICAgICAiU3dpdGNoQ2FzZSI6IGluY3JlYXNlU3dpdGNoQ29tcGxleGl0eSwKLSAgICAg
ICAgIldoaWxlU3RhdGVtZW50IjogaW5jcmVhc2VDb21wbGV4aXR5LAotICAgICAgICAiRG9XaGls
ZVN0YXRlbWVudCI6IGluY3JlYXNlQ29tcGxleGl0eQotICAgIH07Ci0KLX07Ci0KLX0se31dLDE5
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmll
dyBSdWxlIHRvIGZsYWcgY29uc2lzdGVudCByZXR1cm4gdmFsdWVzCi0gKiBAYXV0aG9yIE5pY2hv
bGFzIEMuIFpha2FzCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICB2YXIgZnVuY3Rpb25zID0gW107
Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycwotICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotICAgIGZ1bmN0aW9uIGVudGVyRnVuY3Rpb24oKSB7Ci0gICAgICAgIGZ1
bmN0aW9ucy5wdXNoKHt9KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBleGl0RnVuY3Rpb24oKSB7
Ci0gICAgICAgIGZ1bmN0aW9ucy5wb3AoKTsKLSAgICB9Ci0KLQotICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAvLyBQdWJsaWMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICByZXR1
cm4gewotCi0gICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogZW50ZXJGdW5jdGlvbiwKLSAg
ICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGVudGVyRnVuY3Rpb24sCi0gICAgICAgICJGdW5j
dGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBleGl0RnVuY3Rpb24sCi0gICAgICAgICJGdW5jdGlvbkV4
cHJlc3Npb246ZXhpdCI6IGV4aXRGdW5jdGlvbiwKLQotICAgICAgICAiUmV0dXJuU3RhdGVtZW50
IjogZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICB2YXIgcmV0dXJuSW5mbyA9IGZ1bmN0
aW9uc1tmdW5jdGlvbnMubGVuZ3RoIC0gMV0sCi0gICAgICAgICAgICAgICAgcmV0dXJuVHlwZURl
ZmluZWQgPSAidHlwZSIgaW4gcmV0dXJuSW5mbzsKLQotICAgICAgICAgICAgaWYgKHJldHVyblR5
cGVEZWZpbmVkKSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuSW5mby50eXBlICE9PSAh
IW5vZGUuYXJndW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIkV4cGVjdGVkICIgKyAocmV0dXJuSW5mby50eXBlID8gImEiIDogIm5vIikgKyAiIHJldHVy
biB2YWx1ZS4iKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuSW5mby50eXBlID0gISFub2RlLmFyZ3VtZW50OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSwyMDpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBl
bmZvcmNlIGNvbnNpc3RlbnQgbmFtaW5nIG9mICJ0aGlzIiBjb250ZXh0IHZhcmlhYmxlcwotICog
QGF1dGhvciBSYXBoYWVsIFBpZ3VsbGEKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHJldHVybiB7
Ci0KLSAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAg
ICAgICAgICB2YXIgYWxpYXMgPSBjb250ZXh0Lm9wdGlvbnNbMF07Ci0KLSAgICAgICAgICAgIG5v
ZGUuZGVjbGFyYXRpb25zLmZvckVhY2goZnVuY3Rpb24oZGVjbGFyYXRpb24pIHsKLSAgICAgICAg
ICAgICAgICBpZiAoZGVjbGFyYXRpb24uaWQubmFtZSA9PT0gYWxpYXMgJiYKLSAgICAgICAgICAg
ICAgICAgICAgICAgICEoZGVjbGFyYXRpb24uaW5pdCAmJiBkZWNsYXJhdGlvbi5pbml0LnR5cGUg
PT09ICJUaGlzRXhwcmVzc2lvbiIpKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQoCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIkRlc2lnbmF0ZWQgJ3RoaXMnIGFsaWFzICd7e2FsaWFzfX0nIGlzIG5vdCBhc3NpZ25l
ZCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gdGhlIGN1cnJlbnQgZXhlY3V0
aW9uIGNvbnRleHQuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgYWxpYXM6IGRlY2xhcmF0
aW9uLmlkLm5hbWUgfQotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5pbml0ICYmCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkZWNsYXJhdGlvbi5pbml0LnR5cGUgPT09ICJUaGlzRXhwcmVzc2lvbiIgJiYK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uLmlkLm5hbWUgIT09IGFsaWFzKSB7
Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgYWxpYXMg
J3t7YWxpYXN9fScgZm9yICd0aGlzJy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgeyBhbGlh
czogZGVjbGFyYXRpb24uaWQubmFtZSB9Ci0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19
LHt9XSwyMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxl
b3ZlcnZpZXcgUnVsZSB0byBmbGFnIHN0YXRlbWVudHMgd2l0aG91dCBjdXJseSBicmFjZXMKLSAq
IEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHZhciBt
dWx0aU9ubHkgPSAoY29udGV4dC5vcHRpb25zWzBdID09PSAibXVsdGkiKTsKLQotICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gICAgLyoqCi0gICAgICogQ2hlY2tzIHRoZSBib2R5IG9mIGEgbm9kZSB0byBzZWUgaWYgaXQn
cyBhIGJsb2NrIHN0YXRlbWVudC4gRGVwZW5kaW5nIG9uCi0gICAgICogdGhlIHJ1bGUgb3B0aW9u
cywgcmVwb3J0cyB0aGUgYXBwcm9wcmlhdGUgcHJvYmxlbXMuCi0gICAgICogQHBhcmFtIHtBU1RO
b2RlfSBub2RlIFRoZSBub2RlIHRvIHJlcG9ydCBpZiB0aGVyZSdzIGEgcHJvYmxlbS4KLSAgICAg
KiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGJvZHkgbm9kZSB0byBjaGVjayBmb3IgYmxvY2tz
LgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIHRvIHJlcG9ydCBpZiB0aGVy
ZSdzIGEgcHJvYmxlbS4KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3VmZml4IEFkZGl0aW9uYWwg
c3RyaW5nIHRvIGFkZCB0byB0aGUgZW5kIG9mIGEgcmVwb3J0LgotICAgICAqIEByZXR1cm5zIHt2
b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIGNoZWNrQm9keShub2RlLCBib2R5LCBuYW1lLCBz
dWZmaXgpIHsKLSAgICAgICAgdmFyIGhhc0Jsb2NrID0gKGJvZHkudHlwZSA9PT0gIkJsb2NrU3Rh
dGVtZW50Iik7Ci0KLSAgICAgICAgaWYgKG11bHRpT25seSkgewotICAgICAgICAgICAgaWYgKGhh
c0Jsb2NrICYmIGJvZHkuYm9keS5sZW5ndGggPT09IDEpIHsKLSAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiVW5uZWNlc3NhcnkgeyBhZnRlciAne3tuYW1lfX0ne3tzdWZmaXh9
fS4iLAotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1l
OiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4OiAoc3VmZml4ID8gIiAiICsg
c3VmZml4IDogIiIpCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICApOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFoYXNCbG9j
aykgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJFeHBlY3RlZCB7IGFm
dGVyICd7e25hbWV9fSd7e3N1ZmZpeH19LiIsCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBz
dWZmaXg6IChzdWZmaXggPyAiICIgKyBzdWZmaXggOiAiIikKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljCi0gICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiSWZTdGF0ZW1lbnQiOiBmdW5jdGlv
bihub2RlKSB7Ci0KLSAgICAgICAgICAgIGNoZWNrQm9keShub2RlLCBub2RlLmNvbnNlcXVlbnQs
ICJpZiIsICJjb25kaXRpb24iKTsKLQotICAgICAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlICYm
IG5vZGUuYWx0ZXJuYXRlLnR5cGUgIT09ICJJZlN0YXRlbWVudCIpIHsKLSAgICAgICAgICAgICAg
ICBjaGVja0JvZHkobm9kZSwgbm9kZS5hbHRlcm5hdGUsICJlbHNlIik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgfSwKLQotICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2Rl
KSB7Ci0gICAgICAgICAgICBjaGVja0JvZHkobm9kZSwgbm9kZS5ib2R5LCAid2hpbGUiLCAiY29u
ZGl0aW9uIik7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQiOiBmdW5j
dGlvbiAobm9kZSkgewotICAgICAgICAgICAgY2hlY2tCb2R5KG5vZGUsIG5vZGUuYm9keSwgImRv
Iik7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgIkZvclN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUp
IHsKLSAgICAgICAgICAgIGNoZWNrQm9keShub2RlLCBub2RlLmJvZHksICJmb3IiLCAiY29uZGl0
aW9uIik7Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSwyMjpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgcmVxdWlyZSBkZWZh
dWx0IGNhc2UgaW4gc3dpdGNoIHN0YXRlbWVudHMKLSAqIEBhdXRob3IgQWxpYWtzZWkgU2h5dGtp
bgotICovCi0idXNlIHN0cmljdCI7Ci0KLXZhciBDT01NRU5UX1ZBTFVFID0gIm5vIGRlZmF1bHQi
OwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
LQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0gICAgLyoqCi0gICAgICogU2hvcnRjdXQgdG8gZ2V0IGxhc3QgZWxlbWVu
dCBvZiBhcnJheQotICAgICAqIEBwYXJhbSAgeypbXX0gY29sbGVjdGlvbiBBcnJheQotICAgICAq
IEByZXR1cm5zIHsqfSBMYXN0IGVsZW1lbnQKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBsYXN0KGNv
bGxlY3Rpb24pIHsKLSAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25bY29sbGVjdGlvbi5sZW5ndGgg
LSAxXTsKLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljCi0g
ICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiU3dpdGNo
U3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICBpZiAoIW5vZGUuY2Fz
ZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgLy8gc2tpcCBjaGVjayBvZiBlbXB0eSBzd2l0
Y2ggYmVjYXVzZSB0aGVyZSBpcyBubyBlYXN5IHdheQotICAgICAgICAgICAgICAgIC8vIHRvIGV4
dHJhY3QgY29tbWVudHMgaW5zaWRlIGl0IG5vdwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGhhc0RlZmF1bHQgPSBub2RlLmNhc2VzLnNv
bWUoZnVuY3Rpb24odikgewotICAgICAgICAgICAgICAgIHJldHVybiB2LnRlc3QgPT09IG51bGw7
Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgaWYgKCFoYXNEZWZhdWx0KSB7Ci0KLSAg
ICAgICAgICAgICAgICB2YXIgY29tbWVudDsKLSAgICAgICAgICAgICAgICB2YXIgY29tbWVudHM7
Ci0KLSAgICAgICAgICAgICAgICB2YXIgbGFzdENhc2UgPSBsYXN0KG5vZGUuY2FzZXMpOwotICAg
ICAgICAgICAgICAgIGNvbW1lbnRzID0gY29udGV4dC5nZXRDb21tZW50cyhsYXN0Q2FzZSkudHJh
aWxpbmc7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29tbWVudHMubGVuZ3RoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbW1lbnQgPSBsYXN0KGNvbW1lbnRzKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWNvbW1lbnQgfHwgY29tbWVudC52YWx1ZS50cmltKCkg
IT09IENPTU1FTlRfVkFMVUUpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIkV4cGVjdGVkIGEgZGVmYXVsdCBjYXNlLiIpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci19OwotCi19LHt9XSwyMzpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byB3
YXJuIGFib3V0IHVzaW5nIGRvdCBub3RhdGlvbiBpbnN0ZWFkIG9mIHNxdWFyZSBicmFja2V0IG5v
dGF0aW9uIHdoZW4gcG9zc2libGUuCi0gKiBAYXV0aG9yIEpvc2ggUGVyZXoKLSAqLwotInVzZSBz
dHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12YXIgdmFsaWRJZGVudGlmaWVyID0gL15bYS16QS1a
XyRdW2EtekEtWjAtOV8kXSokLzsKLXZhciBrZXl3b3JkcyA9IFsKLSAgICAidGhpcyIsCi0gICAg
ImZ1bmN0aW9uIiwKLSAgICAiaWYiLAotICAgICJyZXR1cm4iLAotICAgICJ2YXIiLAotICAgICJl
bHNlIiwKLSAgICAiZm9yIiwKLSAgICAibmV3IiwKLSAgICAiYXJndW1lbnRzIiwKLSAgICAiaW4i
LAotICAgICJ0eXBlb2YiLAotICAgICJ3aGlsZSIsCi0gICAgImNhc2UiLAotICAgICJicmVhayIs
Ci0gICAgInRyeSIsCi0gICAgImNhdGNoIiwKLSAgICAiZGVsZXRlIiwKLSAgICAidGhyb3ciLAot
ICAgICJzd2l0Y2giLAotICAgICJjb250aW51ZSIsCi0gICAgImRlZmF1bHQiLAotICAgICJpbnN0
YW5jZW9mIiwKLSAgICAiZG8iLAotICAgICJ2b2lkIiwKLSAgICAiZmluYWxseSIsCi0gICAgIndp
dGgiLAotICAgICJkZWJ1Z2dlciIsCi0gICAgImV2YWwiLAotICAgICJpbXBsZW1lbnRzIiwKLSAg
ICAiaW50ZXJmYWNlIiwKLSAgICAicGFja2FnZSIsCi0gICAgInByaXZhdGUiLAotICAgICJwcm90
ZWN0ZWQiLAotICAgICJwdWJsaWMiLAotICAgICJzdGF0aWMiLAotICAgICJ5aWVsZCIsCi0gICAg
ImxldCIsCi0gICAgImNsYXNzIiwKLSAgICAiZW51bSIsCi0gICAgImV4cG9ydCIsCi0gICAgImV4
dGVuZHMiLAotICAgICJpbXBvcnQiLAotICAgICJzdXBlciIsCi0gICAgInRydWUiLAotICAgICJm
YWxzZSIsCi0gICAgIm51bGwiLAotICAgICJhYnN0cmFjdCIsCi0gICAgImJvb2xlYW4iLAotICAg
ICJieXRlIiwKLSAgICAiY2hhciIsCi0gICAgImNvbnN0IiwKLSAgICAiZG91YmxlIiwKLSAgICAi
ZmluYWwiLAotICAgICJmbG9hdCIsCi0gICAgImdvdG8iLAotICAgICJpbnQiLAotICAgICJsb25n
IiwKLSAgICAibmF0aXZlIiwKLSAgICAic2hvcnQiLAotICAgICJzeW5jaHJvbml6ZWQiLAotICAg
ICJ0aHJvd3MiLAotICAgICJ0cmFuc2llbnQiLAotICAgICJ2b2xhdGlsZSIKLV07Ci0KLWZ1bmN0
aW9uIGNhbkJlV3JpdHRlbkluRG90Tm90YXRpb24obm9kZSkgewotICAgIHJldHVybiBub2RlLmNv
bXB1dGVkID09PSB0cnVlICYmCi0gICAgICAgIG5vZGUucHJvcGVydHkudHlwZSA9PT0gIkxpdGVy
YWwiICYmCi0gICAgICAgIHZhbGlkSWRlbnRpZmllci50ZXN0KG5vZGUucHJvcGVydHkudmFsdWUp
ICYmCi0gICAgICAgIGtleXdvcmRzLmluZGV4T2YoIiIgKyBub2RlLnByb3BlcnR5LnZhbHVlKSA9
PT0gLTE7Ci19Ci0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotICAgIHJl
dHVybiB7Ci0gICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAg
ICAgICAgICAgaWYgKGNhbkJlV3JpdHRlbkluRG90Tm90YXRpb24obm9kZSkpIHsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiWyciICsgbm9kZS5wcm9wZXJ0eS52YWx1ZSAr
ICInXSBpcyBiZXR0ZXIgd3JpdHRlbiBpbiBkb3Qgbm90YXRpb24uIik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9OwotfTsKLQotfSx7fV0sMjQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJlcXVpcmUgZmlsZSB0byBlbmQg
d2l0aCBzaW5nbGUgbmV3bGluZS4KLSAqIEBhdXRob3IgTm9kZWNhIFRlYW0gPGh0dHBzOi8vZ2l0
aHViLmNvbS9ub2RlY2E+Ci0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gICAgLy8gUHVibGljCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgcmV0dXJu
IHsKLQotICAgICAgICAiUHJvZ3JhbSI6IGZ1bmN0aW9uIGNoZWNrQmFkRU9GKG5vZGUpIHsKLSAg
ICAgICAgICAgIC8vIEdldCB0aGUgd2hvbGUgc291cmNlIGNvZGUsIG5vdCBmb3Igbm9kZSBvbmx5
LgotICAgICAgICAgICAgdmFyIHNyYyA9IGNvbnRleHQuZ2V0U291cmNlKCksIGxvY2F0aW9uID0g
e2NvbHVtbjogMX07Ci0KLSAgICAgICAgICAgIGlmIChzcmMubGVuZ3RoID09PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3Jj
W3NyYy5sZW5ndGggLSAxXSAhPT0gIlxuIikgewotICAgICAgICAgICAgICAgIC8vIGZpbGUgaXMg
bm90IG5ld2xpbmUtdGVybWluYXRlZAotICAgICAgICAgICAgICAgIGxvY2F0aW9uLmxpbmUgPSBz
cmMuc3BsaXQoL1xuL2cpLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCBsb2NhdGlvbiwgIk5ld2xpbmUgcmVxdWlyZWQgYXQgZW5kIG9mIGZpbGUgYnV0IG5vdCBm
b3VuZC4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoL1xuXHMqXG4kLy50ZXN0KHNyYykpIHsK
LSAgICAgICAgICAgICAgICAvLyBsYXN0IGxpbmUgaXMgZW1wdHkKLSAgICAgICAgICAgICAgICBs
b2NhdGlvbi5saW5lID0gc3JjLnNwbGl0KC9cbi9nKS5sZW5ndGggLSAxOwotICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGxvY2F0aW9uLCAiVW5leHBlY3RlZCBibGFuayBsaW5l
IGF0IGVuZCBvZiBmaWxlLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9Owot
Ci19OwotCi19LHt9XSwyNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioK
LSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHN0YXRlbWVudHMgdGhhdCB1c2UgIT0gYW5k
ID09IGluc3RlYWQgb2YgIT09IGFuZCA9PT0KLSAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMK
LSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIC8qKgotICAgICAqIENoZWNrcyBpZiBlaXRo
ZXIgb3BlcmFuZCBvZiBhIGJpbmFyeSBleHByZXNzaW9uIGlzIGEgdHlwZW9mIG9wZXJhdGlvbgot
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjawotICAgICAqIEBy
ZXR1cm5zIHtib29sZWFufSBpZiBvbmUgb2YgdGhlIG9wZXJhbmRzIGlzIHR5cGVvZgotICAgICAq
IEBwcml2YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gaXNUeXBlT2Yobm9kZSkgewotICAgICAg
ICByZXR1cm4gW25vZGUubGVmdCwgbm9kZS5yaWdodF0uc29tZShmdW5jdGlvbihub2RlKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gbm9kZS50eXBlID09PSAiVW5hcnlFeHByZXNzaW9uIiAmJiBub2Rl
Lm9wZXJhdG9yID09PSAidHlwZW9mIjsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgLyoqCi0g
ICAgICogQ2hlY2tzIGlmIG9wZXJhbmRzIGFyZSBsaXRlcmFscyBvZiB0aGUgc2FtZSB0eXBlICh2
aWEgdHlwZW9mKQotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVj
awotICAgICAqIEByZXR1cm5zIHtib29sZWFufSBpZiBvcGVyYW5kcyBhcmUgb2Ygc2FtZSB0eXBl
Ci0gICAgICogQHByaXZhdGUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBhcmVMaXRlcmFsc0FuZFNh
bWVUeXBlKG5vZGUpIHsKLSAgICAgICAgcmV0dXJuIG5vZGUubGVmdC50eXBlID09PSAiTGl0ZXJh
bCIgJiYgbm9kZS5yaWdodC50eXBlID09PSAiTGl0ZXJhbCIgJiYKLSAgICAgICAgICAgICAgICB0
eXBlb2Ygbm9kZS5sZWZ0LnZhbHVlID09PSB0eXBlb2Ygbm9kZS5yaWdodC52YWx1ZTsKLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgaWYgb25lIG9mIHRoZSBvcGVyYW5kcyBpcyBhIGxp
dGVyYWwgbnVsbAotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVj
awotICAgICAqIEByZXR1cm5zIHtib29sZWFufSBpZiBvcGVyYW5kcyBhcmUgbnVsbAotICAgICAq
IEBwcml2YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gaXNOdWxsQ2hlY2sobm9kZSkgewotICAg
ICAgICByZXR1cm4gKG5vZGUucmlnaHQudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUucmlnaHQu
dmFsdWUgPT09IG51bGwpIHx8Ci0gICAgICAgICAgICAgICAgKG5vZGUubGVmdC50eXBlID09PSAi
TGl0ZXJhbCIgJiYgbm9kZS5sZWZ0LnZhbHVlID09PSBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioK
LSAgICAgKiBHZXRzIHRoZSBsb2NhdGlvbiAobGluZSBhbmQgY29sdW1uKSBvZiB0aGUgYmluYXJ5
IGV4cHJlc3Npb24ncyBvcGVyYXRvcgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUg
YmluYXJ5IGV4cHJlc3Npb24gbm9kZSB0byBjaGVjawotICAgICAqIEBwYXJhbSB7U3RyaW5nfSBv
cGVyYXRvciBUaGUgb3BlcmF0b3IgdG8gZmluZAotICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHsg
bGluZSwgY29sdW1uIH0gbG9jYXRpb24gb2Ygb3BlcmF0b3IKLSAgICAgKiBAcHJpdmF0ZQotICAg
ICAqLwotICAgIGZ1bmN0aW9uIGdldE9wZXJhdG9yTG9jYXRpb24obm9kZSkgewotICAgICAgICB2
YXIgb3BUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5zKG5vZGUpW2NvbnRleHQuZ2V0VG9rZW5zKG5v
ZGUubGVmdCkubGVuZ3RoXTsKLSAgICAgICAgcmV0dXJuIHtsaW5lOiBvcFRva2VuLmxvYy5zdGFy
dC5saW5lLCBjb2x1bW46IG9wVG9rZW4ubG9jLnN0YXJ0LmNvbHVtbn07Ci0gICAgfQotCi0gICAg
cmV0dXJuIHsKLSAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0g
ICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvciAhPT0gIj09IiAmJiBub2RlLm9wZXJhdG9yICE9
PSAiIT0iKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoY29udGV4dC5vcHRpb25zWzBdID09PSAic21hcnQiICYmIChpc1R5cGVPZihu
b2RlKSB8fAotICAgICAgICAgICAgICAgICAgICBhcmVMaXRlcmFsc0FuZFNhbWVUeXBlKG5vZGUp
KSB8fCBpc051bGxDaGVjayhub2RlKSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvbnRleHQub3B0aW9uc1swXSA9PT0gImFsbG93
LW51bGwiICYmIGlzTnVsbENoZWNrKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb250ZXh0LnJlcG9ydCgKLSAgICAgICAgICAg
ICAgICBub2RlLCBnZXRPcGVyYXRvckxvY2F0aW9uKG5vZGUpLAotICAgICAgICAgICAgICAgICJF
eHBlY3RlZCAne3tvcH19PScgYW5kIGluc3RlYWQgc2F3ICd7e29wfX0nLiIsCi0gICAgICAgICAg
ICAgICAge29wOiBub2RlLm9wZXJhdG9yfQotICAgICAgICAgICAgKTsKLSAgICAgICAgfQotICAg
IH07Ci0KLX07Ci0KLX0se31dLDI2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
LS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIHdhcm4gd2hlbiBhIGZ1bmN0aW9uIGV4cHJl
c3Npb24gZG9lcyBub3QgaGF2ZSBhIG5hbWUuCi0gKiBAYXV0aG9yIEt5bGUgVC4gTnVuZXJ5Ci0g
Ki8KLSAidXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERl
ZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oY29udGV4dCkgewotICAgIHJldHVybiB7Ci0gICAgICAgICJGdW5jdGlvbkV4cHJlc3Np
b24iOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIHZhciBuYW1lID0gbm9kZS5pZCAm
JiBub2RlLmlkLm5hbWU7Ci0KLSAgICAgICAgICAgIGlmICghbmFtZSkgewotICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNaXNzaW5nIGZ1bmN0aW9uIGV4cHJlc3Npb24gbmFt
ZS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci19OwotCi19LHt9XSwyNzpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcg
UnVsZSB0byBlbmZvcmNlIGEgcGFydGljdWxhciBmdW5jdGlvbiBzdHlsZQotICogQGF1dGhvciBO
aWNob2xhcyBDLiBaYWthcwotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgdmFyIHN0eWxlID0gY29u
dGV4dC5vcHRpb25zWzBdLAotICAgICAgICBlbmZvcmNlRGVjbGFyYXRpb25zID0gKHN0eWxlID09
PSAiZGVjbGFyYXRpb24iKTsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIkZ1bmN0aW9uRGVj
bGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBpZiAoIWVuZm9yY2VEZWNs
YXJhdGlvbnMpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0
ZWQgYSBmdW5jdGlvbiBleHByZXNzaW9uLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9LAot
Ci0gICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IHZhciBwYXJlbnQgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLnBvcCgpOwotCi0gICAgICAgICAg
ICBpZiAoZW5mb3JjZURlY2xhcmF0aW9ucyAmJiBwYXJlbnQudHlwZSA9PT0gIlZhcmlhYmxlRGVj
bGFyYXRvciIpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChwYXJlbnQsICJFeHBl
Y3RlZCBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sMjg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBvciByZXF1aXJlIGdsb2Jh
bCBzdHJpY3QgbW9kZS4KLSAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKLSAqLwotInVzZSBz
dHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKLQotICAgIHZhciBtb2RlID0gY29udGV4dC5vcHRpb25zWzBdOwotCi0gICAgaWYgKG1v
ZGUgPT09ICJhbHdheXMiKSB7Ci0KLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICJQcm9n
cmFtIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgICAgIGlmIChub2RlLmJvZHkubGVu
Z3RoID4gMCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGVtZW50ID0gbm9kZS5ib2R5
WzBdOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghKHN0YXRlbWVudC50eXBlID09PSAiRXhw
cmVzc2lvblN0YXRlbWVudCIgJiYgc3RhdGVtZW50LmV4cHJlc3Npb24udmFsdWUgPT09ICJ1c2Ug
c3RyaWN0IikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJVc2UgdGhlIGdsb2JhbCBmb3JtIG9mIFwidXNlIHN0cmljdFwiLiIpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Owot
Ci0gICAgfSBlbHNlIHsgLy8gbW9kZSA9ICJuZXZlciIKLQotICAgICAgICByZXR1cm4gewotICAg
ICAgICAgICAgIkV4cHJlc3Npb25TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCkucG9wKCk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS5leHByZXNzaW9uLnZhbHVlID09PSAidXNlIHN0cmljdCIg
JiYgcGFyZW50LnR5cGUgPT09ICJQcm9ncmFtIikgewotICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiVXNlIHRoZSBmdW5jdGlvbiBmb3JtIG9mIFwidXNlIHN0cmljdFwi
LiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAg
IH0KLQotfTsKLQotfSx7fV0sMjk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewot
LyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBmb3ItaW4gbG9vcHMgd2l0aG91dCBp
ZiBzdGF0ZW1lbnRzIGluc2lkZQotICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcwotICovCi0K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0g
ICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiRm9ySW5TdGF0ZW1l
bnQiOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBJ
ZiB0aGUgZm9yLWluIHN0YXRlbWVudCBoYXMge30sIHRoZW4gdGhlIHJlYWwgYm9keSBpcyB0aGUg
Ym9keQotICAgICAgICAgICAgICogb2YgdGhlIEJsb2NrU3RhdGVtZW50LiBPdGhlcndpc2UsIGp1
c3QgdXNlIGJvZHkgYXMgcHJvdmlkZWQuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHZh
ciBib2R5ID0gbm9kZS5ib2R5LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIgPyBub2RlLmJvZHku
Ym9keVswXSA6IG5vZGUuYm9keTsKLQotICAgICAgICAgICAgaWYgKGJvZHkgJiYgYm9keS50eXBl
ICE9PSAiSWZTdGF0ZW1lbnQiKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIlRoZSBib2R5IG9mIGEgZm9yLWluIHNob3VsZCBiZSB3cmFwcGVkIGluIGFuIGlmIHN0YXRl
bWVudCB0byBmaWx0ZXIgdW53YW50ZWQgcHJvcGVydGllcyBmcm9tIHRoZSBwcm90b3R5cGUuIik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSwzMDpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgRW5z
dXJlIGhhbmRsaW5nIG9mIGVycm9ycyB3aGVuIHdlIGtub3cgdGhleSBleGlzdC4KLSAqIEBhdXRo
b3IgSmFtdW5kIEZlcmd1c29uCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1
bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB2YXIgZXJy
b3JBcmd1bWVudCA9IGNvbnRleHQub3B0aW9uc1swXSB8fCAiZXJyIjsKLSAgICB2YXIgY2FsbGJh
Y2tzID0gW107Ci0gICAgdmFyIHNjb3BlcyA9IDA7Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3Mg
aWYgdGhlIGdpdmVuIGFyZ3VtZW50IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhIHJlZ2V4cCBw
YXR0ZXJuLgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdUb0NoZWNrIFRoZSBzdHJpbmcg
d2hpY2ggc2hvdWxkIGJlIGNoZWNrZWQuCi0gICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRo
ZXIgb3Igbm90IHRoZSBzdHJpbmcgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGEgcGF0dGVybi4K
LSAgICAgKi8KLSAgICBmdW5jdGlvbiBpc1BhdHRlcm4oc3RyaW5nVG9DaGVjaykgewotICAgICAg
ICB2YXIgZmlyc3RDaGFyID0gc3RyaW5nVG9DaGVja1swXTsKLSAgICAgICAgcmV0dXJuIGZpcnN0
Q2hhciA9PT0gIl4iOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2
ZW4gbmFtZSBtYXRjaGVzIHRoZSBjb25maWd1cmVkIGVycm9yIGFyZ3VtZW50LgotICAgICAqIEBw
YXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIHdoaWNoIHNob3VsZCBiZSBjb21wYXJlZC4KLSAg
ICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGdpdmVuIG5hbWUgbWF0
Y2hlcyB0aGUgY29uZmlndXJlZCBlcnJvciB2YXJpYWJsZSBuYW1lLgotICAgICAqLwotICAgIGZ1
bmN0aW9uIG1hdGNoZXNDb25maWd1cmVkRXJyb3JOYW1lKG5hbWUpIHsKLSAgICAgICAgaWYgKGlz
UGF0dGVybihlcnJvckFyZ3VtZW50KSkgewotICAgICAgICAgICAgdmFyIHJlZ2V4cCA9IG5ldyBS
ZWdFeHAoZXJyb3JBcmd1bWVudCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVnZXhwLnRlc3QobmFt
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5hbWUgPT09IGVycm9yQXJndW1lbnQ7Ci0g
ICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2sgdGhlIGFyZ3VtZW50cyB0byBzZWUgaWYgd2Ug
bmVlZCB0byBzdGFydCB0cmFja2luZyB0aGUgZXJyb3Igb2JqZWN0LgotICAgICAqIEBwYXJhbSB7
QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gY2hlY2suCi0gICAgICogQHJldHVybnMge3Zv
aWR9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gc3RhcnRGdW5jdGlvbihub2RlKSB7Ci0KLSAgICAg
ICAgLy8ga2VlcCB0cmFjayBvZiBuZXN0ZWQgc2NvcGVzCi0gICAgICAgIHNjb3BlcysrOwotCi0g
ICAgICAgIC8vIGNoZWNrIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBtYXRjaGVzIG91ciBhcmd1bWVu
dCBuYW1lCi0gICAgICAgIHZhciBmaXJzdEFyZyA9IG5vZGUucGFyYW1zICYmIG5vZGUucGFyYW1z
WzBdOwotICAgICAgICBpZiAoZmlyc3RBcmcgJiYgbWF0Y2hlc0NvbmZpZ3VyZWRFcnJvck5hbWUo
Zmlyc3RBcmcubmFtZSkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKHtoYW5kbGVkOiBm
YWxzZSwgZGVwdGg6IHNjb3BlcywgZXJyb3JWYXJpYWJsZU5hbWU6IGZpcnN0QXJnLm5hbWV9KTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEF0IHRoZSBlbmQgb2YgYSBmdW5j
dGlvbiBjaGVjayB0byBzZWUgaWYgdGhlIGVycm9yIHdhcyBoYW5kbGVkLgotICAgICAqIEBwYXJh
bSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gY2hlY2suCi0gICAgICogQHJldHVybnMg
e3ZvaWR9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gZW5kRnVuY3Rpb24obm9kZSkgewotCi0gICAg
ICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc1tjYWxsYmFja3MubGVuZ3RoIC0gMV0gfHwge307
Ci0KLSAgICAgICAgLy8gY2hlY2sgaWYgYSBjYWxsYmFjayBpcyBlbmRpbmcsIGlmIHNvIHBvcCBp
dCBvZmYgdGhlIHN0YWNrCi0gICAgICAgIGlmIChjYWxsYmFjay5kZXB0aCA9PT0gc2NvcGVzKSB7
Ci0gICAgICAgICAgICBjYWxsYmFja3MucG9wKCk7Ci0KLSAgICAgICAgICAgIC8vIGNoZWNrIGlm
IHRoZXJlIHdlcmUgbm8gaGFuZGxlZCBlcnJvcnMgc2luY2UgdGhlIGxhc3QgY2FsbGJhY2sKLSAg
ICAgICAgICAgIGlmICghY2FsbGJhY2suaGFuZGxlZCkgewotICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJFeHBlY3RlZCBlcnJvciB0byBiZSBoYW5kbGVkLiIpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbGVzcyBuZXN0ZWQgZnVuY3Rpb25zCi0g
ICAgICAgIHNjb3Blcy0tOwotCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2sgdG8gc2Vl
IGlmIHdlJ3JlIGhhbmRsaW5nIHRoZSBlcnJvciBvYmplY3QgcHJvcGVybHkuCi0gICAgICogQHBh
cmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVjay4KLSAgICAgKiBAcmV0dXJu
cyB7dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBjaGVja0ZvckVycm9yKG5vZGUpIHsKLSAg
ICAgICAgaWYgKGNhbGxiYWNrcy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICB2YXIgY2FsbGJh
Y2sgPSBjYWxsYmFja3NbY2FsbGJhY2tzLmxlbmd0aCAtIDFdIHx8IHt9OwotCi0gICAgICAgICAg
ICAvLyBtYWtlIHN1cmUgdGhlIG5vZGUncyBuYW1lIG1hdGNoZXMgb3VyIGVycm9yIGFyZ3VtZW50
IG5hbWUKLSAgICAgICAgICAgIHZhciBpc0Fib3V0RXJyb3IgPSBub2RlLm5hbWUgPT09IGNhbGxi
YWNrLmVycm9yVmFyaWFibGVOYW1lOwotCi0gICAgICAgICAgICAvLyB3ZSBkb24ndCBjb25zaWRl
ciB0aGVzZSB1c2UgY2FzZXMgYXMgImhhbmRsaW5nIiB0aGUgZXJyb3IKLSAgICAgICAgICAgIHZh
ciBkb05vdENvdW50ID0gWyJGdW5jdGlvbkRlY2xhcmF0aW9uIiwgIkZ1bmN0aW9uRXhwcmVzc2lv
biIsICJDYXRjaENsYXVzZSJdOwotCi0gICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhpcyBpZGVu
dGlmaWVyIGlzbid0IHVzZWQgYXMgcGFydCBvZiBvbmUgb2YgdGhlbQotICAgICAgICAgICAgdmFy
IGlzSGFuZGxlZCA9IGRvTm90Q291bnQuaW5kZXhPZihub2RlLnBhcmVudC50eXBlKSA9PT0gLTE7
Ci0KLSAgICAgICAgICAgIGlmIChpc0Fib3V0RXJyb3IgJiYgaXNIYW5kbGVkKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gcmVjb3JkIHRoYXQgdGhpcyBjYWxsYmFjayBoYW5kbGVkIGl0cyBlcnJvcgot
ICAgICAgICAgICAgICAgIGNhbGxiYWNrLmhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIkZ1bmN0aW9uRGVjbGFy
YXRpb24iOiBzdGFydEZ1bmN0aW9uLAotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogc3Rh
cnRGdW5jdGlvbiwKLSAgICAgICAgIklkZW50aWZpZXIiOiBjaGVja0ZvckVycm9yLAotICAgICAg
ICAiRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0IjogZW5kRnVuY3Rpb24sCi0gICAgICAgICJGdW5j
dGlvbkV4cHJlc3Npb246ZXhpdCI6IGVuZEZ1bmN0aW9uCi0gICAgfTsKLQotfTsKLQotfSx7fV0s
MzE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gc3BlY2lmeSBzcGFjaW5nIG9mIG9iamVjdCBsaXRlcmFsIGtleXMgYW5kIHZh
bHVlcwotICogQGF1dGhvciBCcmFuZG9uIE1pbGxzCi0gKiBAY29weXJpZ2h0IDIwMTQgQnJhbmRv
biBNaWxscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSGVscGVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotLyoqCi0gKiBHZXRzIGFuIG9iamVjdCBsaXRlcmFsIHByb3BlcnR5J3Mga2V5IGFzIHRoZSBp
ZGVudGlmaWVyIG5hbWUgb3Igc3RyaW5nIHZhbHVlLgotICogQHBhcmFtIHtBU1ROb2RlfSBwcm9w
ZXJ0eSBQcm9wZXJ0eSBub2RlIHdob3NlIGtleSB0byByZXRyaWV2ZS4KLSAqIEByZXR1cm5zIHtz
dHJpbmd9IFRoZSBwcm9wZXJ0eSdzIGtleS4KLSAqLwotZnVuY3Rpb24gZ2V0S2V5KHByb3BlcnR5
KSB7Ci0gICAgcmV0dXJuIHByb3BlcnR5LmtleS5uYW1lIHx8IHByb3BlcnR5LmtleS52YWx1ZTsK
LX0KLQotLyoqCi0gKiBHZXRzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBhIGtleSwgaW5j
bHVkaW5nIHF1b3RlcyBhcm91bmQgc3RyaW5nIGtleXMuCi0gKiBAcGFyYW0ge0FTVE5vZGV9IHBy
b3BlcnR5IFByb3BlcnR5IG9mIG9uIG9iamVjdCBsaXRlcmFsLgotICogQHJldHVybnMge2ludH0g
V2lkdGggb2YgdGhlIGtleSwgaW5jbHVkaW5nIHN0cmluZyBxdW90ZXMgd2hlcmUgcHJlc2VudC4K
LSAqLwotZnVuY3Rpb24gZ2V0S2V5V2lkdGgocHJvcGVydHkpIHsKLSAgICB2YXIga2V5ID0gcHJv
cGVydHkua2V5OwotICAgIHJldHVybiAoa2V5LnR5cGUgPT09ICJJZGVudGlmaWVyIiA/IGtleS5u
YW1lIDoga2V5LnJhdykubGVuZ3RoOwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8g
UnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12YXIgbWVzc2FnZXMg
PSB7Ci0gICAga2V5OiAie3tlcnJvcn19IHNwYWNlIGFmdGVyIGtleSBcInt7a2V5fX1cIi4iLAot
ICAgIHZhbHVlOiAie3tlcnJvcn19IHNwYWNlIGJlZm9yZSB2YWx1ZSBmb3Iga2V5IFwie3trZXl9
fVwiLiIKLX07Ci0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAg
LyoqCi0gICAgICogT1BUSU9OUwotICAgICAqICJrZXktc3BhY2luZyI6IFsyLCB7Ci0gICAgICog
ICAgIGJlZm9yZUNvbG9uOiBmYWxzZSwKLSAgICAgKiAgICAgYWZ0ZXJDb2xvbjogdHJ1ZSwKLSAg
ICAgKiAgICAgYWxpZ246ICJjb2xvbiIgLy8gT3B0aW9uYWwsIG9yICJ2YWx1ZSIKLSAgICAgKiB9
Ci0gICAgICovCi0KLSAgICB2YXIgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fSwK
LSAgICAgICAgYWxpZ24gPSBvcHRpb25zLmFsaWduLAotICAgICAgICBiZWZvcmVDb2xvbiA9ICsh
IW9wdGlvbnMuYmVmb3JlQ29sb24sIC8vIERlZmF1bHRzIHRvIGZhbHNlCi0gICAgICAgIGFmdGVy
Q29sb24gPSArIShvcHRpb25zLmFmdGVyQ29sb24gPT09IGZhbHNlKTsgLy8gRGVmYXVsdHMgdG8g
dHJ1ZQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgc3BhY2luZyBhcm91bmQgdGhlIGNvbG9u
IGluIGFuIG9iamVjdCBsaXRlcmFsIHByb3BlcnR5Ci0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBw
cm9wZXJ0eSBQcm9wZXJ0eSBub2RlIGZyb20gYW4gb2JqZWN0IGxpdGVyYWwKLSAgICAgKiBAcmV0
dXJucyB7T2JqZWN0fSBTcGFjaW5nIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHByb3BlcnR5J3MgY29s
b24KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBnZXRQcm9wZXJ0eVNwYWNpbmcocHJvcGVydHkpIHsK
LSAgICAgICAgdmFyIHdoaXRlc3BhY2UgPSAvXihccyopOihccyopLy5leGVjKGNvbnRleHQuZ2V0
U291cmNlKCkuc2xpY2UoCi0gICAgICAgICAgICBwcm9wZXJ0eS5rZXkucmFuZ2VbMV0sIHByb3Bl
cnR5LnZhbHVlLnJhbmdlWzBdCi0gICAgICAgICkpOwotCi0gICAgICAgIGlmICh3aGl0ZXNwYWNl
KSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIGJlZm9yZUNvbG9uOiB3
aGl0ZXNwYWNlWzFdLmxlbmd0aCwKLSAgICAgICAgICAgICAgICBhZnRlckNvbG9uOiB3aGl0ZXNw
YWNlWzJdLmxlbmd0aAotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8q
KgotICAgICAqIFJlcG9ydHMgYW4gYXBwcm9wcmlhdGVseS1mb3JtYXR0ZWQgZXJyb3IgaWYgc3Bh
Y2luZyBpcyBpbmNvcnJlY3Qgb24gb25lCi0gICAgICogc2lkZSBvZiB0aGUgY29sb24uCi0gICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBwcm9wZXJ0eSBLZXktdmFsdWUgcGFpciBpbiBhbiBvYmplY3Qg
bGl0ZXJhbC4KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lkZSBTaWRlIGJlaW5nIHZlcmlmaWVk
IC0gZWl0aGVyICJrZXkiIG9yICJ2YWx1ZSIuCi0gICAgICogQHBhcmFtIHtpbnR9IGRpZmYgRGlm
ZmVyZW5jZSBiZXR3ZWVuIGFjdHVhbCBhbmQgZXhwZWN0ZWQgc3BhY2luZy4KLSAgICAgKiBAcmV0
dXJucyB7dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiByZXBvcnQocHJvcGVydHksIHNpZGUs
IGRpZmYpIHsKLSAgICAgICAgaWYgKGRpZmYpIHsKLSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KHByb3BlcnR5W3NpZGVdLCBtZXNzYWdlc1tzaWRlXSwgewotICAgICAgICAgICAgICAgIGVycm9y
OiBkaWZmID4gMCA/ICJFeHRyYSIgOiAiTWlzc2luZyIsCi0gICAgICAgICAgICAgICAga2V5OiBn
ZXRLZXkocHJvcGVydHkpCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmIChhbGlnbikgeyAvLyBWZXJpZnkgdmVydGljYWwgYWxpZ25tZW50Ci0KLSAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgICJPYmplY3RFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewot
ICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gbm9kZS5wcm9wZXJ0aWVzLAotICAgICAg
ICAgICAgICAgICAgICBsZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aCwKLSAgICAgICAgICAgICAg
ICAgICAgd2lkdGhzID0gcHJvcGVydGllcy5tYXAoZ2V0S2V5V2lkdGgpLCAvLyBXaWR0aCBvZiBr
ZXlzLCBpbmNsdWRpbmcgcXVvdGVzCi0gICAgICAgICAgICAgICAgICAgIHRhcmdldFdpZHRoID0g
TWF0aC5tYXguYXBwbHkobnVsbCwgd2lkdGhzKSwKLSAgICAgICAgICAgICAgICAgICAgaSwgcHJv
cGVydHksIHNwYWNpbmcsIHdpZHRoOwotCi0gICAgICAgICAgICAgICAgLy8gQ29uZGl0aW9uYWxs
eSBpbmNsdWRlIG9uZSBzcGFjZSBiZWZvcmUgb3IgYWZ0ZXIgY29sb24KLSAgICAgICAgICAgICAg
ICB0YXJnZXRXaWR0aCArPSAoYWxpZ24gPT09ICJjb2xvbiIgPyBiZWZvcmVDb2xvbiA6IGFmdGVy
Q29sb24pOwotCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTsKLSAgICAgICAg
ICAgICAgICAgICAgc3BhY2luZyA9IGdldFByb3BlcnR5U3BhY2luZyhwcm9wZXJ0eSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzcGFjaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsgLy8gT2JqZWN0IGxpdGVyYWwgZ2V0dGVycy9zZXR0ZXJzIGxhY2sgYSBjb2xv
bgotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB3
aWR0aHNbaV07Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGFsaWduID09PSAidmFsdWUiKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQocHJvcGVydHksICJrZXkiLCBzcGFjaW5n
LmJlZm9yZUNvbG9uIC0gYmVmb3JlQ29sb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVw
b3J0KHByb3BlcnR5LCAidmFsdWUiLCAod2lkdGggKyBzcGFjaW5nLmFmdGVyQ29sb24pIC0gdGFy
Z2V0V2lkdGgpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBhbGlnbiA9ICJjb2xv
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydChwcm9wZXJ0eSwgImtleSIsICh3aWR0
aCArIHNwYWNpbmcuYmVmb3JlQ29sb24pIC0gdGFyZ2V0V2lkdGgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwb3J0KHByb3BlcnR5LCAidmFsdWUiLCBzcGFjaW5nLmFmdGVyQ29sb24gLSBh
ZnRlckNvbG9uKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgIH0gZWxzZSB7IC8vIFN0cmljdGx5IG9iZXkg
YmVmb3JlQ29sb24gYW5kIGFmdGVyQ29sb24gaW4gZWFjaCBwcm9wZXJ0eQotCi0gICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAiUHJvcGVydHkiOiBmdW5jdGlvbiAobm9kZSkgewotICAgICAg
ICAgICAgICAgIHZhciBzcGFjaW5nID0gZ2V0UHJvcGVydHlTcGFjaW5nKG5vZGUpOwotICAgICAg
ICAgICAgICAgIGlmIChzcGFjaW5nKSB7IC8vIE9iamVjdCBsaXRlcmFsIGdldHRlcnMvc2V0dGVy
cyBsYWNrIGNvbG9uIHNwYWNpbmcKLSAgICAgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUsICJr
ZXkiLCBzcGFjaW5nLmJlZm9yZUNvbG9uIC0gYmVmb3JlQ29sb24pOwotICAgICAgICAgICAgICAg
ICAgICByZXBvcnQobm9kZSwgInZhbHVlIiwgc3BhY2luZy5hZnRlckNvbG9uIC0gYWZ0ZXJDb2xv
bik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAg
fQotCi19OwotCi19LHt9XSwzMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0v
KioKLSAqIEBmaWxlb3ZlcnZpZXcgQSBydWxlIHRvIHNldCB0aGUgbWF4aW11bSBkZXB0aCBibG9j
ayBjYW4gYmUgbmVzdGVkIGluIGEgZnVuY3Rpb24uCi0gKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4g
TXllcnMKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9u
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgdmFyIGZ1bmN0
aW9uU3RhY2sgPSBbXSwKLSAgICAgICAgbWF4RGVwdGggPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwg
NDsKLQotICAgIGZ1bmN0aW9uIHN0YXJ0RnVuY3Rpb24oKSB7Ci0gICAgICAgIGZ1bmN0aW9uU3Rh
Y2sucHVzaCgwKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBlbmRGdW5jdGlvbigpIHsKLSAgICAg
ICAgZnVuY3Rpb25TdGFjay5wb3AoKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwdXNoQmxvY2so
bm9kZSkgewotICAgICAgICB2YXIgbGVuID0gKytmdW5jdGlvblN0YWNrW2Z1bmN0aW9uU3RhY2su
bGVuZ3RoIC0gMV07Ci0KLSAgICAgICAgaWYgKGxlbiA+IG1heERlcHRoKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiQmxvY2tzIGFyZSBuZXN0ZWQgdG9vIGRlZXBseSAoe3tk
ZXB0aH19KS4iLAotICAgICAgICAgICAgICAgICAgICB7IGRlcHRoOiBsZW4gfSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwb3BCbG9jaygpIHsKLSAgICAgICAgZnVuY3Rpb25T
dGFja1tmdW5jdGlvblN0YWNrLmxlbmd0aCAtIDFdLS07Ci0gICAgfQotCi0gICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYyBBUEkKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LSAgICByZXR1cm4gewotICAgICAgICAiUHJvZ3JhbSI6IHN0YXJ0RnVuY3Rpb24sCi0gICAgICAg
ICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogc3RhcnRGdW5jdGlvbiwKLSAgICAgICAgIkZ1bmN0aW9u
RXhwcmVzc2lvbiI6IHN0YXJ0RnVuY3Rpb24sCi0KLSAgICAgICAgIklmU3RhdGVtZW50IjogcHVz
aEJsb2NrLAotICAgICAgICAiU3dpdGNoU3RhdGVtZW50IjogcHVzaEJsb2NrLAotICAgICAgICAi
VHJ5U3RhdGVtZW50IjogcHVzaEJsb2NrLAotICAgICAgICAiRG9XaGlsZVN0YXRlbWVudCI6IHB1
c2hCbG9jaywKLSAgICAgICAgIldoaWxlU3RhdGVtZW50IjogcHVzaEJsb2NrLAotICAgICAgICAi
V2l0aFN0YXRlbWVudCI6IHB1c2hCbG9jaywKLSAgICAgICAgIkZvclN0YXRlbWVudCI6IHB1c2hC
bG9jaywKLSAgICAgICAgIkZvckluU3RhdGVtZW50IjogcHVzaEJsb2NrLAotCi0gICAgICAgICJJ
ZlN0YXRlbWVudDpleGl0IjogcG9wQmxvY2ssCi0gICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQ6ZXhp
dCI6IHBvcEJsb2NrLAotICAgICAgICAiVHJ5U3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKLSAg
ICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQ6ZXhpdCI6IHBvcEJsb2NrLAotICAgICAgICAiV2hpbGVT
dGF0ZW1lbnQ6ZXhpdCI6IHBvcEJsb2NrLAotICAgICAgICAiV2l0aFN0YXRlbWVudDpleGl0Ijog
cG9wQmxvY2ssCi0gICAgICAgICJGb3JTdGF0ZW1lbnQ6ZXhpdCI6IHBvcEJsb2NrLAotICAgICAg
ICAiRm9ySW5TdGF0ZW1lbnQ6ZXhpdCI6IHBvcEJsb2NrLAotCi0gICAgICAgICJGdW5jdGlvbkRl
Y2xhcmF0aW9uOmV4aXQiOiBlbmRGdW5jdGlvbiwKLSAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lv
bjpleGl0IjogZW5kRnVuY3Rpb24sCi0gICAgICAgICJQcm9ncmFtOmV4aXQiOiBlbmRGdW5jdGlv
bgotICAgIH07Ci0KLX07Ci0KLX0se31dLDMzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGNoZWNrIGZvciBtYXggbGVuZ3Ro
IG9uIGEgbGluZS4KLSAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1dmFs
bC5jb20+Ci0gKiBAY29weXJpZ2h0IDIwMTMgTWF0dCBEdVZhbGwuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKi8KLQotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8g
UnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBzdHJp
bmcgdGhhdCBpcyBtYWRlIHVwIG9mIHJlcGVhdGluZyBhIGdpdmVuIHN0cmluZyBhIGNlcnRhaW4K
LSAgICAgKiBudW1iZXIgb2YgdGltZXMuIFRoaXMgdXNlcyBleHBvbmVudGlhdGlvbiBvZiBzcXVh
cmVzIHRvIGFjaGlldmUgc2lnbmlmaWNhbnQKLSAgICAgKiBwZXJmb3JtYW5jZSBnYWlucyBvdmVy
IHRoZSBtb3JlIHRyYWRpdGlvbmFsIGltcGxlbWVudGF0aW9uIG9mIHN1Y2gKLSAgICAgKiBmdW5j
dGlvbmFsaXR5LgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byByZXBl
YXQuCi0gICAgICogQHBhcmFtIHtpbnR9IG51bSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVh
dCB0aGUgc3RyaW5nLgotICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjcmVhdGVkIHN0cmlu
Zy4KLSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIGZ1bmN0aW9uIHN0cmluZ1JlcGVhdChz
dHIsIG51bSkgewotICAgICAgICB2YXIgcmVzdWx0ID0gIiI7Ci0gICAgICAgIGZvciAobnVtIHw9
IDA7IG51bSA+IDA7IG51bSA+Pj49IDEsIHN0ciArPSBzdHIpIHsKLSAgICAgICAgICAgIGlmIChu
dW0gJiAxKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHZhciB0YWJX
aWR0aCA9IGNvbnRleHQub3B0aW9uc1sxXTsKLQotICAgIHZhciBtYXhMZW5ndGggPSBjb250ZXh0
Lm9wdGlvbnNbMF0sCi0gICAgICAgIHRhYlN0cmluZyA9IHN0cmluZ1JlcGVhdCgiICIsIHRhYldp
ZHRoKTsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAgIGZ1bmN0aW9uIGNoZWNrUHJvZ3JhbUZvck1heExlbmd0aChu
b2RlKSB7Ci0gICAgICAgIHZhciBsaW5lcyA9IGNvbnRleHQuZ2V0U291cmNlTGluZXMoKTsKLQot
ICAgICAgICAvLyBSZXBsYWNlIHRoZSB0YWJzCi0gICAgICAgIC8vIFNwbGl0IChob25vcnMgbGlu
ZS1lbmRpbmcpCi0gICAgICAgIC8vIEl0ZXJhdGUKLSAgICAgICAgbGluZXMuZm9yRWFjaChmdW5j
dGlvbihsaW5lLCBpKSB7Ci0gICAgICAgICAgICBpZiAobGluZS5yZXBsYWNlKC9cdC9nLCB0YWJT
dHJpbmcpLmxlbmd0aCA+IG1heExlbmd0aCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KG5vZGUsIHsgbGluZTogaSArIDEsIGNvbDogMSB9LCAiTGluZSAiICsgKGkgKyAxKSArICIg
ZXhjZWVkcyB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aCBvZiAiICsgbWF4TGVuZ3RoICsgIi4iKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0KLSAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0gICAgLy8gUHVibGljIEFQSQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAg
IHJldHVybiB7Ci0gICAgICAgICJQcm9ncmFtIjogY2hlY2tQcm9ncmFtRm9yTWF4TGVuZ3RoCi0g
ICAgfTsKLQotfTsKLQotfSx7fV0sMzQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
ewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZW5mb3JjZSBhIG1heGltdW0gbnVtYmVy
IG9mIG5lc3RlZCBjYWxsYmFja3MuCi0gKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKLSAq
LwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
LQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBD
b25zdGFudHMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICB2YXIgVEhSRVNIT0xEID0g
Y29udGV4dC5vcHRpb25zWzBdOwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1
YmxpYyBBUEkKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICB2YXIgY2FsbGJhY2tTdGFj
ayA9IFtdOwotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjog
ZnVuY3Rpb24gKG5vZGUpIHsKLSAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjb250ZXh0LmdldEFu
Y2VzdG9ycygpLnBvcCgpOwotCi0gICAgICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICJDYWxs
RXhwcmVzc2lvbiIpIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFja1N0YWNrLnB1c2gobm9kZSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjYWxsYmFja1N0YWNrLmxlbmd0aCA+
IFRIUkVTSE9MRCkgewotICAgICAgICAgICAgICAgIHZhciBvcHRzID0ge251bTogY2FsbGJhY2tT
dGFjay5sZW5ndGgsIG1heDogVEhSRVNIT0xEfTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiVG9vIG1hbnkgbmVzdGVkIGNhbGxiYWNrcyAoe3tudW19fSkuIE1heGltdW0g
YWxsb3dlZCBpcyB7e21heH19LiIsIG9wdHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9LAot
Ci0KLSAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICBjYWxsYmFja1N0YWNrLnBvcCgpOwotICAgICAgICB9Ci0KLSAgICB9OwotCi19Owot
Ci19LHt9XSwzNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gYSBmdW5jdGlvbiBoYXMgdG9vIG1hbnkgcGFy
YW1ldGVycwotICogQGF1dGhvciBJbHlhIFZvbG9kaW4KLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1t
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsK
LQotICAgIHZhciBudW1QYXJhbXMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwgMzsKLQotICAgIHJl
dHVybiB7Ci0KLSAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7
Ci0gICAgICAgICAgICBpZiAobm9kZS5wYXJhbXMubGVuZ3RoID4gbnVtUGFyYW1zKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoaXMgZnVuY3Rpb24gaGFzIHRvbyBt
YW55IHBhcmFtZXRlcnMgKHt7Y291bnR9fSkuIE1heGltdW0gYWxsb3dlZCBpcyB7e21heH19LiIs
IHsKLSAgICAgICAgICAgICAgICAgICAgY291bnQ6IG5vZGUucGFyYW1zLmxlbmd0aCwKLSAgICAg
ICAgICAgICAgICAgICAgbWF4OiBudW1QYXJhbXMKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZnVu
Y3Rpb24obm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUucGFyYW1zLmxlbmd0aCA+IG51bVBh
cmFtcykgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUaGlzIGZ1bmN0
aW9uIGhhcyB0b28gbWFueSBwYXJhbWV0ZXJzICh7e2NvdW50fX0pLiBNYXhpbXVtIGFsbG93ZWQg
aXMge3ttYXh9fS4iLCB7Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50OiBub2RlLnBhcmFtcy5s
ZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgIG1heDogbnVtUGFyYW1zCi0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSwz
NjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZp
ZXcgQSBydWxlIHRvIHNldCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3RhdGVtZW50cyBpbiBhIGZ1
bmN0aW9uLgotICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCi0gKi8KLQotLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0
cmljdCI7Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycwotICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHZhciBmdW5jdGlvblN0YWNrID0gW10sCi0gICAgICAg
IG1heFN0YXRlbWVudHMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwgMTA7Ci0KLSAgICBmdW5jdGlv
biBzdGFydEZ1bmN0aW9uKCkgewotICAgICAgICBmdW5jdGlvblN0YWNrLnB1c2goMCk7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gZW5kRnVuY3Rpb24obm9kZSkgewotICAgICAgICB2YXIgY291bnQg
PSBmdW5jdGlvblN0YWNrLnBvcCgpOwotCi0gICAgICAgIGlmIChjb3VudCA+IG1heFN0YXRlbWVu
dHMpIHsKLSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUaGlzIGZ1bmN0aW9uIGhh
cyB0b28gbWFueSBzdGF0ZW1lbnRzICh7e2NvdW50fX0pLiBNYXhpbXVtIGFsbG93ZWQgaXMge3tt
YXh9fS4iLAotICAgICAgICAgICAgICAgICAgICB7IGNvdW50OiBjb3VudCwgbWF4OiBtYXhTdGF0
ZW1lbnRzIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gY291bnRTdGF0ZW1l
bnRzKG5vZGUpIHsKLSAgICAgICAgZnVuY3Rpb25TdGFja1tmdW5jdGlvblN0YWNrLmxlbmd0aCAt
IDFdICs9IG5vZGUuYm9keS5sZW5ndGg7Ci0gICAgfQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotICAgIC8vIFB1YmxpYyBBUEkKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICByZXR1
cm4gewotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVuY3Rpb24sCi0gICAg
ICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBzdGFydEZ1bmN0aW9uLAotCi0gICAgICAgICJCbG9j
a1N0YXRlbWVudCI6IGNvdW50U3RhdGVtZW50cywKLQotICAgICAgICAiRnVuY3Rpb25EZWNsYXJh
dGlvbjpleGl0IjogZW5kRnVuY3Rpb24sCi0gICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhp
dCI6IGVuZEZ1bmN0aW9uCi0gICAgfTsKLQotfTsKLQotfSx7fV0sMzc6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1
c2Ugb2YgY29uc3RydWN0b3JzIHdpdGhvdXQgY2FwaXRhbCBsZXR0ZXJzCi0gKiBAYXV0aG9yIE5p
Y2hvbGFzIEMuIFpha2FzCi0gKiBAY29weXJpZ2h0IDIwMTMtMjAxNCBOaWNob2xhcyBDLiBaYWth
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotCi0idXNlIHN0cmljdCI7Ci0KLXZhciBDQVBT
X0FMTE9XRUQgPSBbCi0gICAgIk51bWJlciIsCi0gICAgIlN0cmluZyIsCi0gICAgIkJvb2xlYW4i
LAotICAgICJEYXRlIiwKLSAgICAiQXJyYXkiLAotICAgICJTeW1ib2wiLAotICAgICJSZWdFeHAi
Ci1dOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKLQotICAgIHZhciBjb25maWcgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307Ci0gICAgY29u
ZmlnLm5ld0lzQ2FwID0gY29uZmlnLm5ld0lzQ2FwID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTsK
LSAgICBjb25maWcuY2FwSXNOZXcgPSBjb25maWcuY2FwSXNOZXcgPT09IGZhbHNlID8gZmFsc2Ug
OiB0cnVlOwotCi0gICAgdmFyIGxpc3RlbmVycyA9IHt9OwotCi0gICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotICAgIC8vIEhlbHBlcnMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvKioK
LSAgICAgKiBHZXQgZXhhY3QgY2FsbGVlIG5hbWUgZnJvbSBleHByZXNzaW9uCi0gICAgICogQHBh
cmFtIHtBU1ROb2RlfSBub2RlIENhbGxFeHByZXNzaW9uIG9yIE5ld0V4cHJlc3Npb24gbm9kZQot
ICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG5hbWUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBleHRy
YWN0TmFtZUZyb21FeHByZXNzaW9uKG5vZGUpIHsKLQotICAgICAgICB2YXIgbmFtZSA9ICIiLAot
ICAgICAgICAgICAgcHJvcGVydHk7Ci0KLSAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09
ICJNZW1iZXJFeHByZXNzaW9uIikgewotICAgICAgICAgICAgcHJvcGVydHkgPSBub2RlLmNhbGxl
ZS5wcm9wZXJ0eTsKLQotICAgICAgICAgICAgaWYgKHByb3BlcnR5LnR5cGUgPT09ICJMaXRlcmFs
IiAmJiAodHlwZW9mIHByb3BlcnR5LnZhbHVlID09PSAic3RyaW5nIikpIHsKLSAgICAgICAgICAg
ICAgICBuYW1lID0gcHJvcGVydHkudmFsdWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3Bl
cnR5LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiAhbm9kZS5jYWxsZWUuY29tcHV0ZWQpIHsKLSAg
ICAgICAgICAgICAgICBuYW1lID0gcHJvcGVydHkubmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5hbWUgPSBub2RlLmNhbGxlZS5uYW1lOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVy
bnMgdGhlIGNhcGl0YWxpemF0aW9uIHN0YXRlIG9mIHRoZSBzdHJpbmcgLQotICAgICAqIFdoZXRo
ZXIgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyB1cHBlcmNhc2UsIGxvd2VyY2FzZSwgb3Igbm9uLWFs
cGhhYmV0aWMKLSAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyIFN0cmluZwotICAgICAqIEByZXR1
cm5zIHtTdHJpbmd9IGNhcGl0YWxpemF0aW9uIHN0YXRlOiAibm9uLWFscGhhIiwgImxvd2VyIiwg
b3IgInVwcGVyIgotICAgICAqLwotICAgIGZ1bmN0aW9uIGdldENhcChzdHIpIHsKLSAgICAgICAg
dmFyIGZpcnN0Q2hhciA9IHN0ci5jaGFyQXQoMCk7Ci0KLSAgICAgICAgdmFyIGZpcnN0Q2hhckxv
d2VyID0gZmlyc3RDaGFyLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIHZhciBmaXJzdENoYXJVcHBl
ciA9IGZpcnN0Q2hhci50b1VwcGVyQ2FzZSgpOwotCi0gICAgICAgIGlmIChmaXJzdENoYXJMb3dl
ciA9PT0gZmlyc3RDaGFyVXBwZXIpIHsKLSAgICAgICAgICAgIC8vIGNoYXIgaGFzIG5vIHVwcGVy
Y2FzZSB2YXJpYW50LCBzbyBpdCdzIG5vbi1hbHBoYWJldGljCi0gICAgICAgICAgICByZXR1cm4g
Im5vbi1hbHBoYSI7Ci0gICAgICAgIH0gZWxzZSBpZiAoZmlyc3RDaGFyID09PSBmaXJzdENoYXJM
b3dlcikgewotICAgICAgICAgICAgcmV0dXJuICJsb3dlciI7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICByZXR1cm4gInVwcGVyIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIENoZWNrIGlmIGNhcGl0YWxpemF0aW9uIGlzIGFsbG93ZWQgZm9yIGEgQ2FsbEV4cHJl
c3Npb24KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgQ2FsbEV4cHJlc3Npb24gbm9kZQot
ICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjYWxsZWVOYW1lIENhcGl0YWxpemVkIGNhbGxlZSBuYW1l
IGZyb20gYSBDYWxsRXhwcmVzc2lvbgotICAgICAqIEByZXR1cm5zIHtCb29sZWFufSBSZXR1cm5z
IHRydWUgaWYgdGhlIGNhbGxlZSBtYXkgYmUgY2FwaXRhbGl6ZWQKLSAgICAgKi8KLSAgICBmdW5j
dGlvbiBpc0NhcEFsbG93ZWQobm9kZSwgY2FsbGVlTmFtZSkgewotICAgICAgICBpZiAoQ0FQU19B
TExPV0VELmluZGV4T2YoY2FsbGVlTmFtZSkgPj0gMCkgewotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNhbGxlZU5hbWUgPT09ICJVVEMiICYmIG5vZGUu
Y2FsbGVlLnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIikgewotICAgICAgICAgICAgLy8gYWxs
b3cgaWYgY2FsbGVlIGlzIERhdGUuVVRDCi0gICAgICAgICAgICByZXR1cm4gbm9kZS5jYWxsZWUu
b2JqZWN0LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgotICAgICAgICAgICAgICAgICAgIG5vZGUu
Y2FsbGVlLm9iamVjdC5uYW1lID09PSAiRGF0ZSI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMK
LSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBpZiAoY29uZmlnLm5ld0lzQ2FwKSB7Ci0g
ICAgICAgIGxpc3RlbmVycy5OZXdFeHByZXNzaW9uID0gZnVuY3Rpb24obm9kZSkgewotCi0gICAg
ICAgICAgICB2YXIgY29uc3RydWN0b3JOYW1lID0gZXh0cmFjdE5hbWVGcm9tRXhwcmVzc2lvbihu
b2RlKTsKLSAgICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgJiYgZ2V0Q2FwKGNvbnN0cnVj
dG9yTmFtZSkgPT09ICJsb3dlciIpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiQSBjb25zdHJ1Y3RvciBuYW1lIHNob3VsZCBub3Qgc3RhcnQgd2l0aCBhIGxvd2VyY2Fz
ZSBsZXR0ZXIuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfQotCi0gICAgaWYg
KGNvbmZpZy5jYXBJc05ldykgewotICAgICAgICBsaXN0ZW5lcnMuQ2FsbEV4cHJlc3Npb24gPSBm
dW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIHZhciBjYWxsZWVOYW1lID0gZXh0cmFjdE5h
bWVGcm9tRXhwcmVzc2lvbihub2RlKTsKLSAgICAgICAgICAgIGlmIChjYWxsZWVOYW1lICYmIGdl
dENhcChjYWxsZWVOYW1lKSA9PT0gInVwcGVyIiAmJiAhaXNDYXBBbGxvd2VkKG5vZGUsIGNhbGxl
ZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkEgZnVuY3Rp
b24gd2l0aCBhIG5hbWUgc3RhcnRpbmcgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyIHNob3VsZCBv
bmx5IGJlIHVzZWQgYXMgYSBjb25zdHJ1Y3Rvci4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdGVuZXJzOwotfTsKLQotfSx7fV0sMzg6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gZmxhZyB3aGVuIHVzaW5nIGNvbnN0cnVjdG9yIHdpdGhvdXQgcGFyZW50aGVzZXMKLSAqIEBh
dXRob3IgSWx5YSBWb2xvZGluCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1
bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1cm4g
ewotCi0gICAgICAgICJOZXdFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAg
ICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKG5vZGUpOwotICAgICAgICAgICAgdmFy
IHByZW50aWNlc1Rva2VucyA9IHRva2Vucy5maWx0ZXIoZnVuY3Rpb24odG9rZW4pIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdG9rZW4udmFsdWUgPT09ICIoIiB8fCB0b2tlbi52YWx1ZSA9PT0g
IikiOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBpZiAocHJlbnRpY2VzVG9rZW5zLmxl
bmd0aCA8IDIpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiTWlzc2lu
ZyAnKCknIGludm9raW5nIGEgY29uc3RydWN0b3IiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH07Ci0KLX07Ci0KLX0se31dLDM5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGFsZXJ0LCBj
b25maXJtLCBwcm9tcHQKLSAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKLSAqLwotInVzZSBz
dHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSGVscGVycwotLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotZnVuY3Rpb24gbWF0Y2hQcm9oaWJpdGVkKG5hbWUpIHsKLSAgICBy
ZXR1cm4gbmFtZS5tYXRjaCgvXihhbGVydHxjb25maXJtfHByb21wdCkkLyk7Ci19Ci0KLWZ1bmN0
aW9uIHJlcG9ydChjb250ZXh0LCBub2RlLCByZXN1bHQpIHsKLSAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiVW5leHBlY3RlZCB7e25hbWV9fS4iLCB7IG5hbWU6IHJlc3VsdFsxXSB9KTsKLX0KLQot
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQot
ICAgIHJldHVybiB7Ci0KLSAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkg
ewotCi0gICAgICAgICAgICB2YXIgcmVzdWx0OwotCi0gICAgICAgICAgICAvLyB3aXRob3V0IHdp
bmRvdy4KLSAgICAgICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIp
IHsKLQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1hdGNoUHJvaGliaXRlZChub2RlLmNhbGxl
ZS5uYW1lKTsKLQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmVwb3J0KGNvbnRleHQsIG5vZGUsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICJNZW1iZXJFeHBy
ZXNzaW9uIiAmJiBub2RlLmNhbGxlZS5wcm9wZXJ0eS50eXBlID09PSAiSWRlbnRpZmllciIpIHsK
LQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1hdGNoUHJvaGliaXRlZChub2RlLmNhbGxlZS5w
cm9wZXJ0eS5uYW1lKTsKLQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgbm9kZS5jYWxs
ZWUub2JqZWN0Lm5hbWUgPT09ICJ3aW5kb3ciKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcG9y
dChjb250ZXh0LCBub2RlLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgfQotCi0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw0MDpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgY29u
c3RydWN0aW9uIG9mIGRlbnNlIGFycmF5cyB1c2luZyB0aGUgQXJyYXkgY29uc3RydWN0b3IKLSAq
IEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5jb20vPgotICovCi0K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0g
ICAgInVzZSBzdHJpY3QiOwotCi0gICAgZnVuY3Rpb24gY2hlY2sobm9kZSkgewotICAgICAgICBp
ZiAoCi0gICAgICAgICAgICBub2RlLmFyZ3VtZW50cy5sZW5ndGggIT09IDEgJiYKLSAgICAgICAg
ICAgIG5vZGUuY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgotICAgICAgICAgICAgbm9k
ZS5jYWxsZWUubmFtZSA9PT0gIkFycmF5IgotICAgICAgICApIHsKLSAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJUaGUgYXJyYXkgbGl0ZXJhbCBub3RhdGlvbiBbXSBpcyBwcmVmZXJy
YWJsZS4iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJDYWxs
RXhwcmVzc2lvbiI6IGNoZWNrLAotICAgICAgICAiTmV3RXhwcmVzc2lvbiI6IGNoZWNrCi0gICAg
fTsKLQotfTsKLQotfSx7fV0sNDE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewot
LyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBiaXR3aXNlIGlkZW50aWZpZXJzCi0g
KiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAg
ICBmdW5jdGlvbiByZXBvcnQobm9kZSkgewotICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
VW5leHBlY3RlZCB1c2Ugb2YgJ3t7b3BlcmF0b3J9fScuIiwgeyBvcGVyYXRvcjogbm9kZS5vcGVy
YXRvciB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gewotICAgICAgICAiQmluYXJ5RXhwcmVzc2lv
biI6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAgICAgLy8gd2FybiBmb3IgXiB8ICYgfiA8
PCA+PiA+Pj4KLSAgICAgICAgICAgIGlmIChub2RlLm9wZXJhdG9yLm1hdGNoKC9eKD86W1xeJlx8
fl18PDx8Pj4+PykkLykpIHsKLSAgICAgICAgICAgICAgICByZXBvcnQobm9kZSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgfSwKLQotICAgICAgICAiVW5hcnlFeHByZXNzaW9uIjogZnVuY3Rp
b24obm9kZSkgewotCi0gICAgICAgICAgICAvLyB3YXJuIGZvciB+Ci0gICAgICAgICAgICBpZiAo
bm9kZS5vcGVyYXRvciA9PT0gIn4iKSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw0MjpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBmbGFnIHVzZSBvZiBhcmd1bWVudHMuY2FsbGVlIGFuZCBhcmd1bWVudHMuY2FsbGVyLgot
ICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcwotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0g
ICAgcmV0dXJuIHsKLQotICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKLSAgICAgICAgICAgIHZhciBvYmplY3ROYW1lID0gbm9kZS5vYmplY3QubmFtZSwKLSAgICAg
ICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBub2RlLnByb3BlcnR5Lm5hbWU7Ci0KLSAgICAgICAg
ICAgIGlmIChvYmplY3ROYW1lID09PSAiYXJndW1lbnRzIiAmJiAhbm9kZS5jb21wdXRlZCAmJiBw
cm9wZXJ0eU5hbWUgJiYgcHJvcGVydHlOYW1lLm1hdGNoKC9eY2FsbGVbZXJdJC8pKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkF2b2lkIGFyZ3VtZW50cy57e3Byb3Bl
cnR5fX0uIiwgeyBwcm9wZXJ0eTogcHJvcGVydHlOYW1lIH0pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw0MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHZhcmlhYmxl
IGxlYWsgaW4gQ2F0Y2hDbGF1c2VzIGluIElFIDggYW5kIGVhcmxpZXIKLSAqIEBhdXRob3IgSWFu
IENocmlzdGlhbiBNeWVycwotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxl
IERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICAgIC8vIEhlbHBlcnMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAg
ICBmdW5jdGlvbiBwYXJhbUlzU2hhZG93aW5nKHNjb3BlLCBuYW1lKSB7Ci0gICAgICAgIHZhciBm
b3VuZCA9IHNjb3BlLnZhcmlhYmxlcy5zb21lKGZ1bmN0aW9uKHZhcmlhYmxlKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gdmFyaWFibGUubmFtZSA9PT0gbmFtZTsKLSAgICAgICAgfSk7Ci0KLSAgICAg
ICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChzY29wZS51cHBlcikgewotICAgICAgICAgICAgcmV0dXJuIHBhcmFtSXNTaGFk
b3dpbmcoc2NvcGUudXBwZXIsIG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMgQVBJ
Ci0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiQ2F0
Y2hDbGF1c2UiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YXIgc2NvcGUgPSBjb250
ZXh0LmdldFNjb3BlKCk7Ci0KLSAgICAgICAgICAgIGlmIChwYXJhbUlzU2hhZG93aW5nKHNjb3Bl
LCBub2RlLnBhcmFtLm5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIlZhbHVlIG9mICd7e25hbWV9fScgbWF5IGJlIG92ZXJ3cml0dGVuIGluIElFIDggYW5kIGVh
cmxpZXIuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogbm9kZS5wYXJhbS5uYW1l
IH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sNDQ6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3
IFJ1bGUgdG8gZmxhZyB0cmFpbGluZyBjb21tYXMgaW4gb2JqZWN0IGxpdGVyYWxzLgotICogQGF1
dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgIC8vIEhlbHBlcnMKLSAgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSAgICBmdW5jdGlvbiBjaGVja0ZvclRyYWlsaW5nQ29tbWEobm9kZSkgewotICAgICAg
ICB2YXIgc2Vjb25kVG9MYXN0VG9rZW4gPSBjb250ZXh0LmdldExhc3RUb2tlbnMobm9kZSwgMilb
MF07Ci0KLSAgICAgICAgdmFyIGl0ZW1zID0gbm9kZS5wcm9wZXJ0aWVzIHx8IG5vZGUuZWxlbWVu
dHMsCi0gICAgICAgICAgICBsYXN0SXRlbSA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdOwotICAg
ICAgICAvLyBUaGUgbGFzdCB0b2tlbiBpbiBhbiBvYmplY3QvYXJyYXkgbGl0ZXJhbCB3aWxsIGFs
d2F5cyBiZSBhIGNsb3NpbmcKLSAgICAgICAgLy8gY3VybHksIHNvIHdlIGNoZWNrIHRoZSBzZWNv
bmQgdG8gbGFzdCB0b2tlbiBmb3IgYSBjb21tYS4KLSAgICAgICAgaWYgKHNlY29uZFRvTGFzdFRv
a2VuLnZhbHVlID09PSAiLCIgJiYgaXRlbXMubGVuZ3RoICYmIGxhc3RJdGVtKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChsYXN0SXRlbSwgc2Vjb25kVG9MYXN0VG9rZW4ubG9jLnN0YXJ0
LCAiVHJhaWxpbmcgY29tbWEuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gICAgLy8gUHVibGljIEFQSQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICAgIHJldHVybiB7Ci0gICAgICAgICJPYmplY3RFeHByZXNzaW9uIjogY2hlY2tGb3JUcmFpbGlu
Z0NvbW1hLAotICAgICAgICAiQXJyYXlFeHByZXNzaW9uIjogY2hlY2tGb3JUcmFpbGluZ0NvbW1h
Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sNDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBhc3NpZ25tZW50IGluIGEg
Y29uZGl0aW9uYWwgZXhwcmVzc2lvbgotICogQGF1dGhvciBTdGVwaGVuIE11cnJheSA8c3BtdXJy
YXl6eno+Ci0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
IFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICBmdW5jdGlvbiBpc1BhcmVudGhlc2lzZWQo
bm9kZSkgewotICAgICAgICB2YXIgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZv
cmUobm9kZSksCi0gICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIo
bm9kZSk7Ci0KLSAgICAgICAgcmV0dXJuIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJiBw
cmV2aW91c1Rva2VuLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKLSAgICAgICAgICAgIG5l
eHRUb2tlbi52YWx1ZSA9PT0gIikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBub2RlLnJhbmdl
WzFdOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUpIHsK
LSAgICAgICAgdmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUs
IDEpLAotICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUs
IDEpOwotCi0gICAgICAgIHJldHVybiBpc1BhcmVudGhlc2lzZWQobm9kZSkgJiYKLSAgICAgICAg
ICAgIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJiBwcmV2aW91c1Rva2VuLnJhbmdlWzFd
IDw9IG5vZGUucmFuZ2VbMF0gJiYKLSAgICAgICAgICAgIG5leHRUb2tlbi52YWx1ZSA9PT0gIiki
ICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIHRlc3RGb3JBc3NpZ24obm9kZSkgewotICAgICAgICBpZiAobm9kZS50ZXN0ICYmIChu
b2RlLnRlc3QudHlwZSA9PT0gIkFzc2lnbm1lbnRFeHByZXNzaW9uIikgJiYgIWlzUGFyZW50aGVz
aXNlZFR3aWNlKG5vZGUudGVzdCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJFeHBlY3RlZCBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gYW5kIGluc3RlYWQgc2F3IGFuIGFz
c2lnbm1lbnQuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gewotICAgICAgICAi
SWZTdGF0ZW1lbnQiOiB0ZXN0Rm9yQXNzaWduLAotICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiB0
ZXN0Rm9yQXNzaWduLAotICAgICAgICAiRG9XaGlsZVN0YXRlbWVudCI6IHRlc3RGb3JBc3NpZ24s
Ci0gICAgICAgICJGb3JTdGF0ZW1lbnQiOiB0ZXN0Rm9yQXNzaWduCi0gICAgfTsKLQotfTsKLQot
fSx7fV0sNDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmls
ZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgY29uc29sZSBvYmplY3QKLSAqIEBhdXRob3Ig
TmljaG9sYXMgQy4gWmFrYXMKLSAqLwotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBS
dWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJu
IHsKLQotICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAg
ICAgICAgICAgaWYgKG5vZGUub2JqZWN0Lm5hbWUgPT09ICJjb25zb2xlIikgewotICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGNvbnNvbGUgc3RhdGVtZW50
LiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw0
NzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZp
ZXcgUnVsZSB0byBmbGFnIHVzZSBjb25zdGFudCBjb25kaXRpb25zCi0gKiBAYXV0aG9yIENocmlz
dGlhbiBTY2h1bHogPGh0dHA6Ly9ybmRtLmRlPgotICovCi0KLQotLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0K
LSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycwotICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyBpZiBhIG5vZGUgaGFzIGEgY29uc3Rh
bnQgdHJ1dGhpbmVzcyB2YWx1ZS4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFT
VCBub2RlIHRvIGNoZWNrLgotICAgICAqIEByZXR1cm5zIHtCb29sfSB0cnVlIHdoZW4gbm9kZSdz
IHRydXRoaW5lc3MgaXMgY29uc3RhbnQKLSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIGZ1
bmN0aW9uIGlzQ29uc3RhbnQobm9kZSkgewotICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgewot
ICAgICAgICBjYXNlICJMaXRlcmFsIjoKLSAgICAgICAgY2FzZSAiRnVuY3Rpb25FeHByZXNzaW9u
IjoKLSAgICAgICAgY2FzZSAiT2JqZWN0RXhwcmVzc2lvbiI6Ci0gICAgICAgIGNhc2UgIkFycmF5
RXhwcmVzc2lvbiI6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSAiVW5h
cnlFeHByZXNzaW9uIjoKLSAgICAgICAgICAgIHJldHVybiBpc0NvbnN0YW50KG5vZGUuYXJndW1l
bnQpOwotICAgICAgICBjYXNlICJCaW5hcnlFeHByZXNzaW9uIjoKLSAgICAgICAgY2FzZSAiTG9n
aWNhbEV4cHJlc3Npb24iOgotICAgICAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQobm9kZS5sZWZ0
KSAmJiBpc0NvbnN0YW50KG5vZGUucmlnaHQpOwotICAgICAgICBjYXNlICJBc3NpZ25tZW50RXhw
cmVzc2lvbiI6Ci0gICAgICAgICAgICByZXR1cm4gaXNDb25zdGFudChub2RlLnJpZ2h0KTsKLSAg
ICAgICAgY2FzZSAiU2VxdWVuY2VFeHByZXNzaW9uIjoKLSAgICAgICAgICAgIHJldHVybiBpc0Nv
bnN0YW50KG5vZGUuZXhwcmVzc2lvbnNbbm9kZS5leHByZXNzaW9ucy5sZW5ndGggLSAxXSk7Ci0g
ICAgICAgIC8vIG5vIGRlZmF1bHQKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgLyoqCi0gICAgICogUmVwb3J0cyB3aGVuIHRoZSBnaXZlbiBub2RlIGNvbnRh
aW5zIGEgY29uc3RhbnQgY29uZGl0aW9uLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBU
aGUgQVNUIG5vZGUgdG8gY2hlY2suCi0gICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICogQHBy
aXZhdGUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBjaGVja0NvbnN0YW50Q29uZGl0aW9uKG5vZGUp
IHsKLSAgICAgICAgaWYgKG5vZGUudGVzdCAmJiBpc0NvbnN0YW50KG5vZGUudGVzdCkpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGNvbnN0YW50IGNvbmRp
dGlvbi4iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAg
ICAvLyBQdWJsaWMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICByZXR1cm4gewotICAg
ICAgICAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIjogY2hlY2tDb25zdGFudENvbmRpdGlvbiwKLSAg
ICAgICAgIklmU3RhdGVtZW50IjogY2hlY2tDb25zdGFudENvbmRpdGlvbiwKLSAgICAgICAgIldo
aWxlU3RhdGVtZW50IjogY2hlY2tDb25zdGFudENvbmRpdGlvbiwKLSAgICAgICAgIkRvV2hpbGVT
dGF0ZW1lbnQiOiBjaGVja0NvbnN0YW50Q29uZGl0aW9uLAotICAgICAgICAiRm9yU3RhdGVtZW50
IjogY2hlY2tDb25zdGFudENvbmRpdGlvbgotICAgIH07Ci0KLX07Ci0KLX0se31dLDQ4OltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxl
IHRvIGZvcmJpZCBjb250cm9sIGNoYXJhY3RlcyBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCi0g
KiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLQot
ICAgIGZ1bmN0aW9uIGdldFJlZ0V4cChub2RlKSB7Ci0KLSAgICAgICAgaWYgKG5vZGUudmFsdWUg
aW5zdGFuY2VvZiBSZWdFeHApIHsKLSAgICAgICAgICAgIHJldHVybiBub2RlLnZhbHVlOwotICAg
ICAgICB9IGVsc2UgaWYgKHR5cGVvZiBub2RlLnZhbHVlID09PSAic3RyaW5nIikgewotCi0gICAg
ICAgICAgICB2YXIgcGFyZW50ID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsKLSAgICAg
ICAgICAgIGlmICgocGFyZW50LnR5cGUgPT09ICJOZXdFeHByZXNzaW9uIiB8fCBwYXJlbnQudHlw
ZSA9PT0gIkNhbGxFeHByZXNzaW9uIikgJiYKLSAgICAgICAgICAgIHBhcmVudC5jYWxsZWUudHlw
ZSA9PT0gIklkZW50aWZpZXIiICYmIHBhcmVudC5jYWxsZWUubmFtZSA9PT0gIlJlZ0V4cCIpIHsK
LQotICAgICAgICAgICAgICAgIC8vIHRoZXJlIGNvdWxkIGJlIGFuIGludmFsaWQgcmVndWxhciBl
eHByZXNzaW9uIHN0cmluZwotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgUmVnRXhwKG5vZGUudmFsdWUpOwotICAgICAgICAgICAgICAgIH0gY2F0
Y2ggKGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgIH0KLQotCi0KLSAgICByZXR1cm4gewotCi0gICAg
ICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICB2YXIgY29tcHV0
ZWRWYWx1ZSwKLSAgICAgICAgICAgICAgICByZWdleCA9IGdldFJlZ0V4cChub2RlKTsKLQotICAg
ICAgICAgICAgaWYgKHJlZ2V4KSB7Ci0gICAgICAgICAgICAgICAgY29tcHV0ZWRWYWx1ZSA9IHJl
Z2V4LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKC9bXHgwMC1ceDFmXS8udGVzdChj
b21wdXRlZFZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiVW5leHBlY3RlZCBjb250cm9sIGNoYXJhY3RlciBpbiByZWd1bGFyIGV4cHJlc3Npb24uIik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQot
fTsKLQotfSx7fV0sNDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0g
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYSBkZWJ1Z2dlciBzdGF0ZW1lbnQK
LSAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKLSAqLwotCi0KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwot
Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgIkRlYnVnZ2VyU3RhdGVtZW50IjogZnVuY3Rpb24obm9k
ZSkgewotICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgJ2RlYnVn
Z2VyJyBzdGF0ZW1lbnQuIik7Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw1MDpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcg
UnVsZSB0byBmbGFnIHdoZW4gZGVsZXRpbmcgdmFyaWFibGVzCi0gKiBAYXV0aG9yIElseWEgVm9s
b2RpbgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAi
VW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUu
b3BlcmF0b3IgPT09ICJkZWxldGUiICYmIG5vZGUuYXJndW1lbnQudHlwZSA9PT0gIklkZW50aWZp
ZXIiKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlZhcmlhYmxlcyBz
aG91bGQgbm90IGJlIGRlbGV0ZWQuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
OwotCi19OwotCi19LHt9XSw1MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0v
KioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBjaGVjayBmb3IgYW1iaWd1b3VzIGRpdiBvcGVy
YXRvciBpbiByZWdleGVzCi0gKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRk
dXZhbGwuY29tPgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmlu
aXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQotICAg
ICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9
IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbnMobm9kZSwgMSlbMF0sCi0gICAgICAgICAgICAgICAgbm9k
ZVR5cGUgPSB0b2tlbi50eXBlLAotICAgICAgICAgICAgICAgIHNvdXJjZTsKLQotICAgICAgICAg
ICAgaWYgKG5vZGVUeXBlID09PSAiUmVndWxhckV4cHJlc3Npb24iKSB7Ci0gICAgICAgICAgICAg
ICAgc291cmNlID0gY29udGV4dC5nZXRGaXJzdFRva2Vucyhub2RlLCAxKVswXS52YWx1ZTsKLQot
ICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbMV0gPT09ICI9IikgewotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQSByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbCBj
YW4gYmUgY29uZnVzZWQgd2l0aCAnLz0nLiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDUyOltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcg
dXNlIG9mIGR1cGxpY2F0ZSBrZXlzIGluIGFuIG9iamVjdC4KLSAqIEBhdXRob3IgSWFuIENocmlz
dGlhbiBNeWVycwotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmlu
aXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQotICAg
ICAgICAiT2JqZWN0RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAgICAg
Ly8gT2JqZWN0IHRoYXQgd2lsbCBiZSBhIG1hcCBvZiBwcm9wZXJ0aWVzLS1zYWZlIGJlY2F1c2Ug
d2Ugd2lsbAotICAgICAgICAgICAgLy8gcHJlZml4IGFsbCBvZiB0aGUga2V5cy4KLSAgICAgICAg
ICAgIHZhciBub2RlUHJvcHMgPSB7fTsKLQotICAgICAgICAgICAgbm9kZS5wcm9wZXJ0aWVzLmZv
ckVhY2goZnVuY3Rpb24ocHJvcGVydHkpIHsKLSAgICAgICAgICAgICAgICB2YXIga2V5TmFtZSA9
IHByb3BlcnR5LmtleS5uYW1lIHx8IHByb3BlcnR5LmtleS52YWx1ZTsKLSAgICAgICAgICAgICAg
ICB2YXIga2V5ID0gcHJvcGVydHkua2luZCArICItIiArIGtleU5hbWU7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAobm9kZVByb3BzW2tleV0pIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIkR1cGxpY2F0ZSBrZXkgJ3t7a2V5fX0nLiIsIHsga2V5OiBrZXlOYW1lIH0p
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVQcm9w
c1trZXldID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAg
ICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sNTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBgZWxzZWAgYWZ0
ZXIgYSBgcmV0dXJuYCBpbiBgaWZgCi0gKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKLSAq
LwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
LQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBI
ZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgZnVuY3Rpb24gY2hlY2tGb3JS
ZXR1cm5TdGF0ZW1lbnQobm9kZSwgYWx0ZXJuYXRlKSB7Ci0gICAgICAgIGlmIChub2RlLnR5cGUg
PT09ICJSZXR1cm5TdGF0ZW1lbnQiKSB7Ci0gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChhbHRl
cm5hdGUsICJVbmV4cGVjdGVkICdlbHNlJyBhZnRlciAncmV0dXJuJy4iKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMgQVBJCi0gICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiSWZTdGF0ZW1l
bnQiOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIC8vIERvbid0IGJvdGhlciBmaW5k
aW5nIGEgUmV0dXJuU3RhdGVtZW50LCBpZiB0aGVyZSdzIG5vIGBlbHNlYAotICAgICAgICAgICAg
Ly8gb3IgaWYgdGhlIGFsdGVybmF0ZSBpcyBhbHNvIGFuIGlmIChpbmRpY2F0aW5nIGFuIGVsc2Ug
aWYpLgotICAgICAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlICYmIG5vZGUuY29uc2VxdWVudCAm
JiBub2RlLmFsdGVybmF0ZS50eXBlICE9PSAiSWZTdGF0ZW1lbnQiKSB7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBJZiB3ZSBoYXZlIGEgQmxvY2tTdGF0ZW1lbnQsIGNoZWNrIGVhY2ggY29uc2VxdWVu
dCBib2R5IG5vZGUuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY29uc2VxdWVudC50eXBlID09
PSAiQmxvY2tTdGF0ZW1lbnQiKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuY29uc2VxdWVu
dC5ib2R5LmZvckVhY2goZnVuY3Rpb24gKGJvZHlOb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjaGVja0ZvclJldHVyblN0YXRlbWVudChib2R5Tm9kZSwgbm9kZS5hbHRlcm5hdGUpOwot
ICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIC8vIElmIG5vdCBhIGJs
b2NrIHN0YXRlbWVudCwgbWFrZSBzdXJlIHRoZSBjb25zZXF1ZW50IGlzbid0IGEKLSAgICAgICAg
ICAgICAgICAvLyBSZXR1cm5TdGF0ZW1lbnQKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBjaGVja0ZvclJldHVyblN0YXRlbWVudChub2RlLmNvbnNlcXVlbnQs
IG5vZGUuYWx0ZXJuYXRlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgIH07Ci0KLX07Ci0KLX0se31dLDU0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdGhlIHVzZSBv
ZiBlbXB0eSBjaGFyYWN0ZXIgY2xhc3NlcyBpbiByZWd1bGFyIGV4cHJlc3Npb25zCi0gKiBAYXV0
aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJl
dHVybiB7Ci0KLSAgICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAg
ICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnMobm9kZSk7Ci0gICAgICAgICAgICB0b2tl
bnMuZm9yRWFjaChmdW5jdGlvbiAodG9rZW4pIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAg
ICAgICAgICAgIHBsYWluLUVuZ2xpc2ggZGVzY3JpcHRpb24gb2YgdGhlIGZvbGxvd2luZyByZWdl
eHA6Ci0gICAgICAgICAgICAgICAgMC4gYF5gIGZpeCB0aGUgbWF0Y2ggYXQgdGhlIGJlZ2lubmlu
ZyBvZiB0aGUgc3RyaW5nCi0gICAgICAgICAgICAgICAgMS4gYFwvYDogdGhlIGAvYCB0aGF0IGJl
Z2lucyB0aGUgcmVnZXhwCi0gICAgICAgICAgICAgICAgMi4gYChbXlxcW118XFwufFxbKFteXFxc
XV18XFwuKStcXSkqYDogcmVnZXhwIGNvbnRlbnRzOyAwIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2lu
ZwotICAgICAgICAgICAgICAgICAgMi4wLiBgW15cXFtdYDogYW55IGNoYXJhY3RlciB0aGF0J3Mg
bm90IGEgYFxgIG9yIGEgYFtgIChhbnl0aGluZyBidXQgZXNjYXBlIHNlcXVlbmNlcyBhbmQgY2hh
cmFjdGVyIGNsYXNzZXMpCi0gICAgICAgICAgICAgICAgICAyLjEuIGBcXC5gOiBhbiBlc2NhcGUg
c2VxdWVuY2UKLSAgICAgICAgICAgICAgICAgIDIuMi4gYFxbKFteXFxcXV18XFwuKStcXWA6IGEg
Y2hhcmFjdGVyIGNsYXNzIHRoYXQgaXNuJ3QgZW1wdHkKLSAgICAgICAgICAgICAgICAzLiBgXC9g
IHRoZSBgL2AgdGhhdCBlbmRzIHRoZSByZWdleHAKLSAgICAgICAgICAgICAgICA0LiBgW2dpbXld
KmA6IG9wdGlvbmFsIHJlZ2V4cCBmbGFncwotICAgICAgICAgICAgICAgIDUuIGAkYDogZml4IHRo
ZSBtYXRjaCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcKLSAgICAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAiUmVndWxhckV4cHJlc3Npb24iICYmCi0g
ICAgICAgICAgICAgICAgIS9eXC8oW15cXFtdfFxcLnxcWyhbXlxcXF1dfFxcLikrXF0pKlwvW2dp
bXldKiQvLnRlc3QodG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJFbXB0eSBjbGFzcy4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgfTsKLQotfTsKLQotfSx7fV0sNTU6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyB3aGVuIGxhYmVsIGlzIG5vdCB1c2VkIGZvciBhIGxvb3Agb3Igc3dpdGNoCi0gKiBAYXV0
aG9yIElseWEgVm9sb2RpbgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxl
IERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsK
LQotICAgICAgICAiTGFiZWxlZFN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAg
ICAgIGlmIChub2RlLmJvZHkudHlwZSAhPT0gIkZvclN0YXRlbWVudCIgJiYgbm9kZS5ib2R5LnR5
cGUgIT09ICJXaGlsZVN0YXRlbWVudCIgJiYgbm9kZS5ib2R5LnR5cGUgIT09ICJEb1doaWxlU3Rh
dGVtZW50IiAmJiBub2RlLmJvZHkudHlwZSAhPT0gIlN3aXRjaFN0YXRlbWVudCIgJiYgbm9kZS5i
b2R5LnR5cGUgIT09ICJGb3JJblN0YXRlbWVudCIpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBsYWJlbCB7e2x9fSIsIHtsOiBub2RlLmxhYmVsLm5h
bWV9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDU2
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmll
dyBSdWxlIHRvIGZsYWcgdXNlIG9mIGFuIGVtcHR5IGJsb2NrIHN0YXRlbWVudAotICogQGF1dGhv
ciBOaWNob2xhcyBDLiBaYWthcwotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgcmV0dXJuIHsKLQot
ICAgICAgICAiQmxvY2tTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2
YXIgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKSwKLSAgICAgICAgICAgICAgICBw
YXJlbnQgPSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDFdLAotICAgICAgICAgICAgICAg
IHBhcmVudFR5cGUgPSBwYXJlbnQudHlwZSwKLSAgICAgICAgICAgICAgICBpc0ZpbmFsbHlCbG9j
ayA9IChwYXJlbnRUeXBlID09PSAiVHJ5U3RhdGVtZW50IikgJiYgKHBhcmVudC5maW5hbGl6ZXIg
PT09IG5vZGUpOwotCi0gICAgICAgICAgICBpZiAoL0Z1bmN0aW9uRXhwcmVzc2lvbnxGdW5jdGlv
bkRlY2xhcmF0aW9ufENhdGNoQ2xhdXNlLy50ZXN0KHBhcmVudFR5cGUpIHx8Ci0gICAgICAgICAg
ICAgICAgICAgIChpc0ZpbmFsbHlCbG9jayAmJiAhcGFyZW50LmhhbmRsZXJzLmxlbmd0aCkpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
IChub2RlLmJvZHkubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIkVtcHR5IGJsb2NrIHN0YXRlbWVudC4iKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSwKLQotICAgICAgICAiU3dpdGNoU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgewotCi0g
ICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUuY2FzZXMgPT09ICJ1bmRlZmluZWQiIHx8IG5vZGUu
Y2FzZXMubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIkVtcHR5IHN3aXRjaCBzdGF0ZW1lbnQuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9OwotCi19OwotCi19LHt9XSw1NzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGNvbXBhcmlzb25zIHRvIG51
bGwgd2l0aG91dCBhIHR5cGUtY2hlY2tpbmcKLSAqIG9wZXJhdG9yLgotICogQGF1dGhvciBJYW4g
Q2hyaXN0aWFuIE15ZXJzCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUg
RGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQot
ICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAg
IHZhciBiYWRPcGVyYXRvciA9IG5vZGUub3BlcmF0b3IgPT09ICI9PSIgfHwgbm9kZS5vcGVyYXRv
ciA9PT0gIiE9IjsKLQotICAgICAgICAgICAgaWYgKG5vZGUucmlnaHQudHlwZSA9PT0gIkxpdGVy
YWwiICYmIG5vZGUucmlnaHQucmF3ID09PSAibnVsbCIgJiYgYmFkT3BlcmF0b3IgfHwKLSAgICAg
ICAgICAgICAgICAgICAgbm9kZS5sZWZ0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLmxlZnQu
cmF3ID09PSAibnVsbCIgJiYgYmFkT3BlcmF0b3IpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCAiVXNlIOKAmD09PeKAmSB0byBjb21wYXJlIHdpdGgg4oCYbnVsbOKAmS4i
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDU4Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGZsYWcgdXNlIG9mIGV2YWwoKSBzdGF0ZW1lbnQKLSAqIEBhdXRob3IgTmljaG9sYXMg
Qy4gWmFrYXMKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0
aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHZhciBJTVBMSUVEX0VWQUwg
PSAvc2V0KD86VGltZW91dHxJbnRlcnZhbCkvOwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgIC8vIEhlbHBlcnMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvKioKLSAgICAg
KiBEZXRlcm1pbmVzIGlmIGEgbm9kZSByZXByZXNlbnRzIGEgY2FsbCB0byBzZXRUaW1lb3V0L3Nl
dEludGVydmFsIHdpdGgKLSAgICAgKiBhIHN0cmluZyBhcmd1bWVudC4KLSAgICAgKiBAcGFyYW0g
e0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suCi0gICAgICogQHJldHVybnMge2Jvb2xl
YW59IFRydWUgaWYgdGhlIG5vZGUgbWF0Y2hlcywgZmFsc2UgaWYgbm90LgotICAgICAqIEBwcml2
YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gaXNJbXBsaWVkRXZhbChub2RlKSB7Ci0KLSAgICAg
ICAgdmFyIGlzTWVtYmVyRXhwcmVzc2lvbiA9IChub2RlLmNhbGxlZS50eXBlID09PSAiTWVtYmVy
RXhwcmVzc2lvbiIpLAotICAgICAgICAgICAgaXNJZGVudGlmaWVyID0gKG5vZGUuY2FsbGVlLnR5
cGUgPT09ICJJZGVudGlmaWVyIiksCi0gICAgICAgICAgICBpc1NldE1ldGhvZCA9IChpc0lkZW50
aWZpZXIgJiYgSU1QTElFRF9FVkFMLnRlc3Qobm9kZS5jYWxsZWUubmFtZSkpIHx8Ci0gICAgICAg
ICAgICAgICAgKGlzTWVtYmVyRXhwcmVzc2lvbiAmJiBub2RlLmNhbGxlZS5vYmplY3QubmFtZSA9
PT0gIndpbmRvdyIgJiYKLSAgICAgICAgICAgICAgICBJTVBMSUVEX0VWQUwudGVzdChub2RlLmNh
bGxlZS5wcm9wZXJ0eS5uYW1lKSksCi0gICAgICAgICAgICBoYXNTdHJpbmdBcmd1bWVudCA9IG5v
ZGUuYXJndW1lbnRzLmxlbmd0aCAmJiAodHlwZW9mIG5vZGUuYXJndW1lbnRzWzBdLnZhbHVlID09
PSAic3RyaW5nIik7Ci0KLSAgICAgICAgcmV0dXJuIGlzU2V0TWV0aG9kICYmIGhhc1N0cmluZ0Fy
Z3VtZW50OwotICAgIH0KLQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1Ymxp
YwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJDYWxs
RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLmNhbGxl
ZS5uYW1lID09PSAiZXZhbCIpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiZXZhbCBjYW4gYmUgaGFybWZ1bC4iKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbXBs
aWVkRXZhbChub2RlKSkgewotICAgICAgICAgICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5sZW5n
dGggJiYgKHR5cGVvZiBub2RlLmFyZ3VtZW50c1swXS52YWx1ZSA9PT0gInN0cmluZyIpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJJbXBsaWVkIGV2YWwgY2Fu
IGJlIGhhcm1mdWwuIFBhc3MgYSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGEgc3RyaW5nLiIpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0K
LX0se31dLDU5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIGZsYWcgYXNzaWdubWVudCBvZiB0aGUgZXhjZXB0aW9uIHBhcmFt
ZXRlcgotICogQGF1dGhvciBTdGVwaGVuIE11cnJheSA8c3BtdXJyYXl6eno+Ci0gKi8KLQotLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAi
dXNlIHN0cmljdCI7Ci0KLSAgICB2YXIgaW5DYXRjaCA9IGZhbHNlLAotICAgICAgICBleGNlcHRp
b25OYW1lID0gbnVsbDsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIkNhdGNoQ2xhdXNlIjog
ZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgaW5DYXRjaCA9IHRydWU7Ci0gICAgICAgICAg
ICBleGNlcHRpb25OYW1lID0gbm9kZS5wYXJhbS5uYW1lOwotICAgICAgICB9LAotCi0gICAgICAg
ICJDYXRjaENsYXVzZTpleGl0IjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpbkNhdGNoID0g
ZmFsc2U7Ci0gICAgICAgICAgICBleGNlcHRpb25OYW1lID0gbnVsbDsKLSAgICAgICAgfSwKLQot
ICAgICAgICAiQXNzaWdubWVudEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAg
ICAgICAgIGlmIChpbkNhdGNoKSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAobm9kZS5sZWZ0Lm5h
bWUgPT09IGV4Y2VwdGlvbk5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIkRvIG5vdCBhc3NpZ24gdG8gdGhlIGV4Y2VwdGlvbiBwYXJhbWV0ZXIuIik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9OwotCi19
OwotCi19LHt9XSw2MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGFkZGluZyBwcm9wZXJ0aWVzIHRvIG5hdGl2ZSBv
YmplY3QncyBwcm90b3R5cGVzLgotICogQGF1dGhvciBEYXZpZCBOZWxzb24KLSAqLwotCi0vLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUmVxdWlyZW1lbnRzCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi12YXIgQlVJTFRJTlMgPSBbCi0gICAgIk9iamVjdCIsICJGdW5jdGlvbiIsICJBcnJh
eSIsICJTdHJpbmciLCAiQm9vbGVhbiIsICJOdW1iZXIiLCAiRGF0ZSIsCi0gICAgIlJlZ0V4cCIs
ICJFcnJvciIsICJFdmFsRXJyb3IiLCAiUmFuZ2VFcnJvciIsICJSZWZlcmVuY2VFcnJvciIsCi0g
ICAgIlN5bnRheEVycm9yIiwgIlR5cGVFcnJvciIsICJVUklFcnJvciIKLV07Ci0KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBz
dHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAvLyBoYW5kbGUgdGhlIEFycmF5LnBy
b3RvdHlwZS5leHRyYSBzdHlsZSBjYXNlCi0gICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6
IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZhciBsaHMgPSBub2RlLmxlZnQsIGFmZmVj
dHNQcm90bzsKLQotICAgICAgICAgICAgaWYgKGxocy50eXBlICE9PSAiTWVtYmVyRXhwcmVzc2lv
biIgfHwgbGhzLm9iamVjdC50eXBlICE9PSAiTWVtYmVyRXhwcmVzc2lvbiIpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGFmZmVjdHNQcm90
byA9IGxocy5vYmplY3QuY29tcHV0ZWQgPwotICAgICAgICAgICAgICAgIGxocy5vYmplY3QucHJv
cGVydHkudHlwZSA9PT0gIkxpdGVyYWwiICYmIGxocy5vYmplY3QucHJvcGVydHkudmFsdWUgPT09
ICJwcm90b3R5cGUiIDoKLSAgICAgICAgICAgICAgICBsaHMub2JqZWN0LnByb3BlcnR5Lm5hbWUg
PT09ICJwcm90b3R5cGUiOwotCi0gICAgICAgICAgICBpZiAoIWFmZmVjdHNQcm90bykgewotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQlVJTFRJ
TlMuZm9yRWFjaChmdW5jdGlvbihidWlsdGluKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxocy5v
YmplY3Qub2JqZWN0Lm5hbWUgPT09IGJ1aWx0aW4pIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgYnVpbHRpbiArICIgcHJvdG90eXBlIGlzIHJlYWQgb25seSwgcHJv
cGVydGllcyBzaG91bGQgbm90IGJlIGFkZGVkLiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9LAotCi0gICAgICAgIC8vIGhhbmRsZSB0aGUgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSkgY2FzZQotICAgICAgICAiQ2FsbEV4cHJlc3Np
b24iOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIHZhciBjYWxsZWUgPSBub2RlLmNh
bGxlZSwKLSAgICAgICAgICAgICAgICBzdWJqZWN0LAotICAgICAgICAgICAgICAgIG9iamVjdDsK
LQotICAgICAgICAgICAgLy8gb25seSB3b3JyeSBhYm91dCBPYmplY3QuZGVmaW5lUHJvcGVydHkK
LSAgICAgICAgICAgIGlmIChjYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iICYmCi0g
ICAgICAgICAgICAgICAgY2FsbGVlLm9iamVjdC5uYW1lID09PSAiT2JqZWN0IiAmJgotICAgICAg
ICAgICAgICAgIGNhbGxlZS5wcm9wZXJ0eS5uYW1lID09PSAiZGVmaW5lUHJvcGVydHkiKSB7Ci0K
LSAgICAgICAgICAgICAgICAvLyB2ZXJpZnkgdGhlIG9iamVjdCBiZWluZyBhZGRlZCB0byBpcyBh
IG5hdGl2ZSBwcm90b3R5cGUKLSAgICAgICAgICAgICAgICBzdWJqZWN0ID0gbm9kZS5hcmd1bWVu
dHNbMF07Ci0gICAgICAgICAgICAgICAgb2JqZWN0ID0gc3ViamVjdC5vYmplY3Q7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAob2JqZWN0ICYmCi0gICAgICAgICAgICAgICAgICAgIG9iamVjdC50eXBl
ID09PSAiSWRlbnRpZmllciIgJiYKLSAgICAgICAgICAgICAgICAgICAgKEJVSUxUSU5TLmluZGV4
T2Yob2JqZWN0Lm5hbWUpID4gLTEpICYmCi0gICAgICAgICAgICAgICAgICAgIHN1YmplY3QucHJv
cGVydHkubmFtZSA9PT0gInByb3RvdHlwZSIpIHsKLQotICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCBvYmplY3QubmFtZSArICIgcHJvdG90eXBlIGlzIHJlYWQgb25seSwg
cHJvcGVydGllcyBzaG91bGQgbm90IGJlIGFkZGVkLiIpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sNjE6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gZmxhZyB1bm5lY2Vzc2FyeSBiaW5kIGNhbGxzCi0gKiBAYXV0aG9yIEJlbmNlIETDoW55aSA8
YmVuY2VAZGFueWkubWU+Ci0gKiBAY29weXJpZ2h0IDIwMTQgQmVuY2UgRMOhbnlpLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgdmFyIHNjb3BlID0gW3sKLSAg
ICAgICAgZGVwdGg6IC0xLAotICAgICAgICBmb3VuZDogMAotICAgIH1dOwotCi0gICAgLyoqCi0g
ICAgICogR2V0IHRoZSB0b3Btb3N0IHNjb3BlCi0gICAgICogQHJldHVybnMge09iamVjdH0gVGhl
IHRvcG1vc3Qgc2NvcGUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBnZXRUb3BTY29wZSgpIHsKLSAg
ICAgICAgcmV0dXJuIHNjb3BlW3Njb3BlLmxlbmd0aCAtIDFdOwotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIEluY3JlbWVudCB0aGUgZGVwdGggb2YgdGhlIHRvcCBzY29wZQotICAgICAqIEByZXR1
cm5zIHt2b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIGluY3JlbWVudFNjb3BlRGVwdGgoKSB7
Ci0gICAgICAgIHZhciB0b3AgPSBnZXRUb3BTY29wZSgpOwotICAgICAgICB0b3AuZGVwdGgrKzsK
LSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZWNyZW1lbnQgdGhlIGRlcHRoIG9mIHRoZSB0b3Ag
c2NvcGUKLSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBkZWNy
ZW1lbnRTY29wZURlcHRoKCkgewotICAgICAgICB2YXIgdG9wID0gZ2V0VG9wU2NvcGUoKTsKLSAg
ICAgICAgdG9wLmRlcHRoLS07Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIkNhbGxF
eHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1l
bnRzLmxlbmd0aCA9PT0gMSAmJgotICAgICAgICAgICAgICAgIG5vZGUuY2FsbGVlLnR5cGUgPT09
ICJNZW1iZXJFeHByZXNzaW9uIiAmJgotICAgICAgICAgICAgICAgIG5vZGUuY2FsbGVlLnByb3Bl
cnR5Lm5hbWUgPT09ICJiaW5kIiAmJgotICAgICAgICAgICAgICAgIG5vZGUuY2FsbGVlLm9iamVj
dC50eXBlID09PSAiRnVuY3Rpb25FeHByZXNzaW9uIikgewotICAgICAgICAgICAgICAgIHNjb3Bl
LnB1c2goewotICAgICAgICAgICAgICAgICAgICBjYWxsOiBub2RlLAotICAgICAgICAgICAgICAg
ICAgICBkZXB0aDogLTEsCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kOiAwCi0gICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJDYWxsRXhwcmVz
c2lvbjpleGl0IjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgdmFyIHRvcCA9IGdldFRv
cFNjb3BlKCk7Ci0gICAgICAgICAgICBpZiAodG9wLmNhbGwgPT09IG5vZGUgJiYgdG9wLmZvdW5k
ID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoZSBmdW5j
dGlvbiBiaW5kaW5nIGlzIHVubmVjZXNzYXJ5LiIpOwotICAgICAgICAgICAgICAgIHNjb3BlLnBv
cCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiRnVuY3Rpb25FeHByZXNz
aW9uIjogaW5jcmVtZW50U2NvcGVEZXB0aCwKLSAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpl
eGl0IjogZGVjcmVtZW50U2NvcGVEZXB0aCwKLSAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24i
OiBpbmNyZW1lbnRTY29wZURlcHRoLAotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0
IjogZGVjcmVtZW50U2NvcGVEZXB0aCwKLSAgICAgICAgIlRoaXNFeHByZXNzaW9uIjogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICB2YXIgdG9wID0gZ2V0VG9wU2NvcGUoKTsKLSAgICAgICAgICAg
IGlmICh0b3AuZGVwdGggPT09IDApIHsKLSAgICAgICAgICAgICAgICB0b3AuZm91bmQrKzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDYyOltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRv
IGZsYWcgdW5uZWNlc3NhcnkgZG91YmxlIG5lZ2F0aW9uIGluIEJvb2xlYW4gY29udGV4dHMKLSAq
IEBhdXRob3IgQnJhbmRvbiBNaWxscwotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0
dXJuIHsKLSAgICAgICAgIlVuYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uIChub2RlKSB7Ci0gICAg
ICAgICAgICB2YXIgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKSwKLSAgICAgICAg
ICAgICAgICBwYXJlbnQgPSBhbmNlc3RvcnMucG9wKCksCi0gICAgICAgICAgICAgICAgZ3JhbmRw
YXJlbnQgPSBhbmNlc3RvcnMucG9wKCk7Ci0KLSAgICAgICAgICAgIC8vIEV4aXQgZWFybHkgaWYg
aXQncyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaAotICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0
b3IgIT09ICIhIiB8fAotICAgICAgICAgICAgICAgICAgICBwYXJlbnQudHlwZSAhPT0gIlVuYXJ5
RXhwcmVzc2lvbiIgfHwKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50Lm9wZXJhdG9yICE9PSAi
ISIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8vIGlmICg8Ym9vbD4pIC4uLgotICAgICAgICAgICAgaWYgKGdyYW5kcGFyZW50LnR5cGUg
PT09ICJJZlN0YXRlbWVudCIpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiUmVkdW5kYW50IGRvdWJsZSBuZWdhdGlvbiBpbiBhbiBpZiBzdGF0ZW1lbnQgY29uZGl0aW9u
LiIpOwotCi0gICAgICAgICAgICAvLyBkbyAuLi4gd2hpbGUgKDxib29sPikKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIkRvV2hpbGVTdGF0ZW1lbnQiKSB7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBkb3VibGUgbmVn
YXRpb24gaW4gYSBkbyB3aGlsZSBsb29wIGNvbmRpdGlvbi4iKTsKLQotICAgICAgICAgICAgLy8g
d2hpbGUgKDxib29sPikgLi4uCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGdyYW5kcGFyZW50LnR5
cGUgPT09ICJXaGlsZVN0YXRlbWVudCIpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiUmVkdW5kYW50IGRvdWJsZSBuZWdhdGlvbiBpbiBhIHdoaWxlIGxvb3AgY29uZGl0
aW9uLiIpOwotCi0gICAgICAgICAgICAvLyA8Ym9vbD4gPyAuLi4gOiAuLi4KLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoKGdyYW5kcGFyZW50LnR5cGUgPT09ICJDb25kaXRpb25hbEV4cHJlc3Npb24i
ICYmCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudCA9PT0gZ3JhbmRwYXJlbnQudGVzdCkpIHsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVkdW5kYW50IGRvdWJsZSBu
ZWdhdGlvbiBpbiBhIHRlcm5hcnkgY29uZGl0aW9uLiIpOwotCi0gICAgICAgICAgICAvLyBmb3Ig
KC4uLjsgPGJvb2w+OyAuLi4pIC4uLgotICAgICAgICAgICAgfSBlbHNlIGlmICgoZ3JhbmRwYXJl
bnQudHlwZSA9PT0gIkZvclN0YXRlbWVudCIgJiYKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50
ID09PSBncmFuZHBhcmVudC50ZXN0KSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJSZWR1bmRhbnQgZG91YmxlIG5lZ2F0aW9uIGluIGEgZm9yIGxvb3AgY29uZGl0aW9u
LiIpOwotCi0gICAgICAgICAgICAvLyAhPGJvb2w+Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKChn
cmFuZHBhcmVudC50eXBlID09PSAiVW5hcnlFeHByZXNzaW9uIiAmJgotICAgICAgICAgICAgICAg
ICAgICBncmFuZHBhcmVudC5vcGVyYXRvciA9PT0gIiEiKSkgewotICAgICAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRhbnQgbXVsdGlwbGUgbmVnYXRpb24uIik7Ci0KLSAg
ICAgICAgICAgIC8vIEJvb2xlYW4oPGJvb2w+KQotICAgICAgICAgICAgfSBlbHNlIGlmICgoZ3Jh
bmRwYXJlbnQudHlwZSA9PT0gIkNhbGxFeHByZXNzaW9uIiAmJgotICAgICAgICAgICAgICAgICAg
ICBncmFuZHBhcmVudC5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiICYmCi0gICAgICAgICAg
ICAgICAgICAgIGdyYW5kcGFyZW50LmNhbGxlZS5uYW1lID09PSAiQm9vbGVhbiIpKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBkb3VibGUgbmVnYXRp
b24gaW4gY2FsbCB0byBCb29sZWFuKCkuIik7Ci0KLSAgICAgICAgICAgIC8vIG5ldyBCb29sZWFu
KDxib29sPikKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGdyYW5kcGFyZW50LnR5cGUgPT09ICJO
ZXdFeHByZXNzaW9uIiAmJgotICAgICAgICAgICAgICAgICAgICBncmFuZHBhcmVudC5jYWxsZWUu
dHlwZSA9PT0gIklkZW50aWZpZXIiICYmCi0gICAgICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50
LmNhbGxlZS5uYW1lID09PSAiQm9vbGVhbiIpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIlJlZHVuZGFudCBkb3VibGUgbmVnYXRpb24gaW4gQm9vbGVhbiBjb25zdHJ1
Y3RvciBjYWxsLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQot
fSx7fV0sNjM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmls
ZW92ZXJ2aWV3IERpc2FsbG93IHBhcmVudGhlc2VzaXNuZyBoaWdoZXIgcHJlY2VkZW5jZSBzdWJl
eHByZXNzaW9ucy4KLSAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCi0gKi8KLSJ1c2Ugc3RyaWN0
IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
Ci0KLSAgICBmdW5jdGlvbiBpc1BhcmVudGhlc2lzZWQobm9kZSkgewotICAgICAgICB2YXIgcHJl
dmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSksCi0gICAgICAgICAgICBu
ZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9kZSk7Ci0KLSAgICAgICAgcmV0dXJu
IHByZXZpb3VzVG9rZW4gJiYgbmV4dFRva2VuICYmCi0gICAgICAgICAgICBwcmV2aW91c1Rva2Vu
LnZhbHVlID09PSAiKCIgJiYgcHJldmlvdXNUb2tlbi5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBd
ICYmCi0gICAgICAgICAgICBuZXh0VG9rZW4udmFsdWUgPT09ICIpIiAmJiBuZXh0VG9rZW4ucmFu
Z2VbMF0gPj0gbm9kZS5yYW5nZVsxXTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpc1BhcmVudGhl
c2lzZWRUd2ljZShub2RlKSB7Ci0gICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0gY29udGV4dC5n
ZXRUb2tlbkJlZm9yZShub2RlLCAxKSwKLSAgICAgICAgICAgIG5leHRUb2tlbiA9IGNvbnRleHQu
Z2V0VG9rZW5BZnRlcihub2RlLCAxKTsKLQotICAgICAgICByZXR1cm4gaXNQYXJlbnRoZXNpc2Vk
KG5vZGUpICYmIHByZXZpb3VzVG9rZW4gJiYgbmV4dFRva2VuICYmCi0gICAgICAgICAgICBwcmV2
aW91c1Rva2VuLnZhbHVlID09PSAiKCIgJiYgcHJldmlvdXNUb2tlbi5yYW5nZVsxXSA8PSBub2Rl
LnJhbmdlWzBdICYmCi0gICAgICAgICAgICBuZXh0VG9rZW4udmFsdWUgPT09ICIpIiAmJiBuZXh0
VG9rZW4ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBw
cmVjZWRlbmNlKG5vZGUpIHsKLQotICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgewotICAgICAg
ICAgICAgY2FzZSAiU2VxdWVuY2VFeHByZXNzaW9uIjoKLSAgICAgICAgICAgICAgICByZXR1cm4g
MDsKLQotICAgICAgICAgICAgY2FzZSAiQXNzaWdubWVudEV4cHJlc3Npb24iOgotICAgICAgICAg
ICAgICAgIHJldHVybiAxOwotCi0gICAgICAgICAgICBjYXNlICJDb25kaXRpb25hbEV4cHJlc3Np
b24iOgotICAgICAgICAgICAgICAgIHJldHVybiAzOwotCi0gICAgICAgICAgICBjYXNlICJMb2dp
Y2FsRXhwcmVzc2lvbiI6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wZXJhdG9yKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgInx8IjoKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiA0OwotICAgICAgICAgICAgICAgICAgICBjYXNlICImJiI6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gNTsKLSAgICAgICAgICAgICAgICAgICAgLy8gbm8gZGVmYXVsdAot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8K
LSAgICAgICAgICAgIGNhc2UgIkJpbmFyeUV4cHJlc3Npb24iOgotICAgICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcGVyYXRvcikgewotICAgICAgICAgICAgICAgICAgICBjYXNlICJ8IjoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA2OwotICAgICAgICAgICAgICAgICAgICBjYXNl
ICJeIjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA3OwotICAgICAgICAgICAgICAg
ICAgICBjYXNlICImIjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA4OwotICAgICAg
ICAgICAgICAgICAgICBjYXNlICI9PSI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgIiE9IjoK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSAiPT09IjoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAiIT09IjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA5OwotICAgICAgICAgICAg
ICAgICAgICBjYXNlICI8IjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiPD0iOgotICAgICAg
ICAgICAgICAgICAgICBjYXNlICI+IjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiPj0iOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlICJpbiI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
Imluc3RhbmNlb2YiOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEwOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlICI8PCI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgIj4+IjoK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSAiPj4+IjoKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAxMTsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiKyI6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgIi0iOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEyOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlICIqIjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiLyI6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgIiUiOgotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDEzOwotICAgICAgICAgICAgICAgICAgICAvLyBubyBkZWZhdWx0Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KLSAgICAgICAgICAg
IGNhc2UgIlVuYXJ5RXhwcmVzc2lvbiI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE0OwotICAg
ICAgICAgICAgY2FzZSAiVXBkYXRlRXhwcmVzc2lvbiI6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IDE1OwotICAgICAgICAgICAgY2FzZSAiQ2FsbEV4cHJlc3Npb24iOgotICAgICAgICAgICAgICAg
IC8vIElJRkUgaXMgYWxsb3dlZCB0byBoYXZlIHBhcmVucyBpbiBhbnkgcG9zaXRpb24gKCM2NTUp
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICJGdW5jdGlvbkV4cHJl
c3Npb24iKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE2OwotICAgICAgICAgICAgY2FzZSAiTmV3RXhw
cmVzc2lvbiI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE3OwotICAgICAgICAgICAgLy8gbm8g
ZGVmYXVsdAotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAxODsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiByZXBvcnQobm9kZSkgewotICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiR3JhdHVp
dG91cyBwYXJlbnRoZXNlcyBhcm91bmQgZXhwcmVzc2lvbi4iKTsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBkcnlVbmFyeVVwZGF0ZShub2RlKSB7Ci0gICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQo
bm9kZS5hcmd1bWVudCkgJiYgcHJlY2VkZW5jZShub2RlLmFyZ3VtZW50KSA+PSBwcmVjZWRlbmNl
KG5vZGUpKSB7Ci0gICAgICAgICAgICByZXBvcnQobm9kZS5hcmd1bWVudCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBmdW5jdGlvbiBkcnlDYWxsTmV3KG5vZGUpIHsKLSAgICAgICAgaWYgKGlz
UGFyZW50aGVzaXNlZChub2RlLmNhbGxlZSkgJiYgcHJlY2VkZW5jZShub2RlLmNhbGxlZSkgPj0g
cHJlY2VkZW5jZShub2RlKSAmJgotICAgICAgICAhKG5vZGUudHlwZSA9PT0gIkNhbGxFeHByZXNz
aW9uIiAmJiBub2RlLmNhbGxlZS50eXBlID09PSAiRnVuY3Rpb25FeHByZXNzaW9uIikpIHsKLSAg
ICAgICAgICAgIHJlcG9ydChub2RlLmNhbGxlZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5v
ZGUuYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgewotICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVz
aXNlZFR3aWNlKG5vZGUuYXJndW1lbnRzWzBdKSAmJiBwcmVjZWRlbmNlKG5vZGUuYXJndW1lbnRz
WzBdKSA+PSBwcmVjZWRlbmNlKHt0eXBlOiAiQXNzaWdubWVudEV4cHJlc3Npb24ifSkpIHsKLSAg
ICAgICAgICAgICAgICByZXBvcnQobm9kZS5hcmd1bWVudHNbMF0pOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKG5vZGUuYXJndW1l
bnRzLCBmdW5jdGlvbihhcmcpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2Vk
KGFyZykgJiYgcHJlY2VkZW5jZShhcmcpID49IHByZWNlZGVuY2Uoe3R5cGU6ICJBc3NpZ25tZW50
RXhwcmVzc2lvbiJ9KSkgewotICAgICAgICAgICAgICAgICAgICByZXBvcnQoYXJnKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1
bmN0aW9uIGRyeUJpbmFyeUxvZ2ljYWwobm9kZSkgewotICAgICAgICB2YXIgcHJlYyA9IHByZWNl
ZGVuY2Uobm9kZSk7Ci0gICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9kZS5sZWZ0KSAmJiBw
cmVjZWRlbmNlKG5vZGUubGVmdCkgPj0gcHJlYykgewotICAgICAgICAgICAgcmVwb3J0KG5vZGUu
bGVmdCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2RlLnJpZ2h0
KSAmJiBwcmVjZWRlbmNlKG5vZGUucmlnaHQpID4gcHJlYykgewotICAgICAgICAgICAgcmVwb3J0
KG5vZGUucmlnaHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAg
IkFycmF5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIFtdLmZvckVh
Y2guY2FsbChub2RlLmVsZW1lbnRzLCBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGUgJiYgaXNQYXJlbnRoZXNpc2VkKGUpICYmIHByZWNlZGVuY2UoZSkgPj0gcHJlY2VkZW5jZSh7
dHlwZTogIkFzc2lnbm1lbnRFeHByZXNzaW9uIn0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
cG9ydChlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSwK
LSAgICAgICAgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAg
ICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2RlLnJpZ2h0KSAmJiBwcmVjZWRlbmNlKG5vZGUu
cmlnaHQpID49IHByZWNlZGVuY2Uobm9kZSkpIHsKLSAgICAgICAgICAgICAgICByZXBvcnQobm9k
ZS5yaWdodCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJCaW5hcnlFeHBy
ZXNzaW9uIjogZHJ5QmluYXJ5TG9naWNhbCwKLSAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZHJ5
Q2FsbE5ldywKLSAgICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKLSAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9kZS50ZXN0KSAmJiBwcmVjZWRl
bmNlKG5vZGUudGVzdCkgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkxvZ2ljYWxFeHByZXNzaW9uIiwg
b3BlcmF0b3I6ICJ8fCJ9KSkgewotICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnRlc3QpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2RlLmNvbnNl
cXVlbnQpICYmIHByZWNlZGVuY2Uobm9kZS5jb25zZXF1ZW50KSA+PSBwcmVjZWRlbmNlKHt0eXBl
OiAiQXNzaWdubWVudEV4cHJlc3Npb24ifSkpIHsKLSAgICAgICAgICAgICAgICByZXBvcnQobm9k
ZS5jb25zZXF1ZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc1BhcmVudGhl
c2lzZWQobm9kZS5hbHRlcm5hdGUpICYmIHByZWNlZGVuY2Uobm9kZS5hbHRlcm5hdGUpID49IHBy
ZWNlZGVuY2Uoe3R5cGU6ICJBc3NpZ25tZW50RXhwcmVzc2lvbiJ9KSkgewotICAgICAgICAgICAg
ICAgIHJlcG9ydChub2RlLmFsdGVybmF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0g
ICAgICAgICJEb1doaWxlU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAg
aWYgKGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUudGVzdCkpIHsKLSAgICAgICAgICAgICAgICBy
ZXBvcnQobm9kZS50ZXN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkV4
cHJlc3Npb25TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YXIgZmly
c3RUb2tlbjsKLSAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9kZS5leHByZXNzaW9u
KSkgewotICAgICAgICAgICAgICAgIGZpcnN0VG9rZW4gPSBjb250ZXh0LmdldEZpcnN0VG9rZW4o
bm9kZS5leHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RUb2tlbi52YWx1ZSAh
PT0gImZ1bmN0aW9uIiAmJiBmaXJzdFRva2VuLnZhbHVlICE9PSAieyIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmVwb3J0KG5vZGUuZXhwcmVzc2lvbik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiRm9ySW5TdGF0ZW1lbnQiOiBmdW5jdGlv
bihub2RlKSB7Ci0gICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUucmlnaHQpKSB7
Ci0gICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUucmlnaHQpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9LAotICAgICAgICAiRm9yU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgewotICAgICAg
ICAgICAgaWYgKG5vZGUuaW5pdCAmJiBpc1BhcmVudGhlc2lzZWQobm9kZS5pbml0KSkgewotICAg
ICAgICAgICAgICAgIHJlcG9ydChub2RlLmluaXQpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAobm9kZS50ZXN0ICYmIGlzUGFyZW50aGVzaXNlZChub2RlLnRlc3QpKSB7Ci0gICAg
ICAgICAgICAgICAgcmVwb3J0KG5vZGUudGVzdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChub2RlLnVwZGF0ZSAmJiBpc1BhcmVudGhlc2lzZWQobm9kZS51cGRhdGUpKSB7Ci0g
ICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUudXBkYXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSwKLSAgICAgICAgIklmU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAg
ICAgaWYgKGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUudGVzdCkpIHsKLSAgICAgICAgICAgICAg
ICByZXBvcnQobm9kZS50ZXN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAg
IkxvZ2ljYWxFeHByZXNzaW9uIjogZHJ5QmluYXJ5TG9naWNhbCwKLSAgICAgICAgIk1lbWJlckV4
cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBpZiAoCi0gICAgICAgICAg
ICAgICAgaXNQYXJlbnRoZXNpc2VkKG5vZGUub2JqZWN0KSAmJgotICAgICAgICAgICAgICAgIHBy
ZWNlZGVuY2Uobm9kZS5vYmplY3QpID49IHByZWNlZGVuY2Uobm9kZSkgJiYKLSAgICAgICAgICAg
ICAgICAoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuY29tcHV0ZWQgfHwKLSAgICAgICAgICAg
ICAgICAgICAgISgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUub2JqZWN0LnR5cGUgPT09
ICJMaXRlcmFsIiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG5vZGUub2JqZWN0
LnZhbHVlID09PSAibnVtYmVyIiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgL15bMC05XSsk
Ly50ZXN0KGNvbnRleHQuZ2V0Rmlyc3RUb2tlbihub2RlLm9iamVjdCkudmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICApIHsKLSAgICAg
ICAgICAgICAgICByZXBvcnQobm9kZS5vYmplY3QpOwotICAgICAgICAgICAgfQotICAgICAgICB9
LAotICAgICAgICAiTmV3RXhwcmVzc2lvbiI6IGRyeUNhbGxOZXcsCi0gICAgICAgICJPYmplY3RF
eHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxs
KG5vZGUucHJvcGVydGllcywgZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAgIHZhciB2ID0g
ZS52YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAodiAmJiBpc1BhcmVudGhlc2lzZWQodikgJiYg
cHJlY2VkZW5jZSh2KSA+PSBwcmVjZWRlbmNlKHt0eXBlOiAiQXNzaWdubWVudEV4cHJlc3Npb24i
fSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwb3J0KHYpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotICAgICAgICAiUmV0dXJuU3RhdGVtZW50Ijog
ZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1lbnQgJiYgaXNQYXJl
bnRoZXNpc2VkKG5vZGUuYXJndW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUu
YXJndW1lbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiU2VxdWVuY2VF
eHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxs
KG5vZGUuZXhwcmVzc2lvbnMsIGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNQ
YXJlbnRoZXNpc2VkKGUpICYmIHByZWNlZGVuY2UoZSkgPj0gcHJlY2VkZW5jZShub2RlKSkgewot
ICAgICAgICAgICAgICAgICAgICByZXBvcnQoZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0sCi0gICAgICAgICJTd2l0Y2hDYXNlIjogZnVuY3Rpb24obm9k
ZSkgewotICAgICAgICAgICAgaWYgKG5vZGUudGVzdCAmJiBpc1BhcmVudGhlc2lzZWQobm9kZS50
ZXN0KSkgewotICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnRlc3QpOwotICAgICAgICAgICAg
fQotICAgICAgICB9LAotICAgICAgICAiU3dpdGNoU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkg
ewotICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUuZGlzY3JpbWluYW50
KSkgewotICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLmRpc2NyaW1pbmFudCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJUaHJvd1N0YXRlbWVudCI6IGZ1bmN0aW9uKG5v
ZGUpIHsKLSAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9kZS5hcmd1bWVudCkpIHsK
LSAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5hcmd1bWVudCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0sCi0gICAgICAgICJVbmFyeUV4cHJlc3Npb24iOiBkcnlVbmFyeVVwZGF0ZSwKLSAg
ICAgICAgIlVwZGF0ZUV4cHJlc3Npb24iOiBkcnlVbmFyeVVwZGF0ZSwKLSAgICAgICAgIlZhcmlh
YmxlRGVjbGFyYXRvciI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLmlu
aXQgJiYgaXNQYXJlbnRoZXNpc2VkKG5vZGUuaW5pdCkgJiYgcHJlY2VkZW5jZShub2RlLmluaXQp
ID49IHByZWNlZGVuY2Uoe3R5cGU6ICJBc3NpZ25tZW50RXhwcmVzc2lvbiJ9KSkgewotICAgICAg
ICAgICAgICAgIHJlcG9ydChub2RlLmluaXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9LAot
ICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBp
ZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS50ZXN0KSkgewotICAgICAgICAgICAgICAgIHJl
cG9ydChub2RlLnRlc3QpOwotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiV2l0
aFN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChpc1BhcmVudGhl
c2lzZWRUd2ljZShub2RlLm9iamVjdCkpIHsKLSAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5v
YmplY3QpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0s
NjQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgdW5uZWNlc3Nhcnkgc2VtaWNvbG9ucwotICogQGF1dGhv
ciBOaWNob2xhcyBDLiBaYWthcwotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBS
dWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJu
IHsKLQotICAgICAgICAiRW1wdHlTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5uZWNlc3Nhcnkgc2VtaWNvbG9uLiIpOwotICAg
ICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sNjU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1bm5lY2Vzc2Fy
eSBzdHJpY3QgZGlyZWN0aXZlcy4KLSAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycwotICov
Ci0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmlu
aXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgewotCi0gICAgZnVuY3Rpb24gZGlyZWN0aXZlcyhibG9jaykgewotICAgICAg
ICB2YXIgZHMgPSBbXSwgYm9keSA9IGJsb2NrLmJvZHksIGUsIGksIGw7Ci0KLSAgICAgICAgZm9y
IChpID0gMCwgbCA9IGJvZHkubGVuZ3RoOyBpIDwgbDsgKytpKSB7Ci0gICAgICAgICAgICBlID0g
Ym9keVtpXTsKLQotICAgICAgICAgICAgaWYgKAotICAgICAgICAgICAgICAgIGUudHlwZSA9PT0g
IkV4cHJlc3Npb25TdGF0ZW1lbnQiICYmCi0gICAgICAgICAgICAgICAgZS5leHByZXNzaW9uLnR5
cGUgPT09ICJMaXRlcmFsIiAmJgotICAgICAgICAgICAgICAgIHR5cGVvZiBlLmV4cHJlc3Npb24u
dmFsdWUgPT09ICJzdHJpbmciCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBkcy5w
dXNoKGUuZXhwcmVzc2lvbik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBkczsKLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBpc1N0cmljdChkaXJlY3RpdmUpIHsKLSAgICAgICAgcmV0dXJu
IGRpcmVjdGl2ZS52YWx1ZSA9PT0gInVzZSBzdHJpY3QiOwotICAgIH0KLQotICAgIGZ1bmN0aW9u
IGNoZWNrRm9yVW5uZWNlc3NhcnlVc2VTdHJpY3Qobm9kZSkgewotICAgICAgICB2YXIgdXNlU3Ry
aWN0RGlyZWN0aXZlcywgc2NvcGUsIHVwcGVyOwotICAgICAgICB1c2VTdHJpY3REaXJlY3RpdmVz
ID0gZGlyZWN0aXZlcyhub2RlKS5maWx0ZXIoaXNTdHJpY3QpOwotCi0gICAgICAgIHN3aXRjaCAo
dXNlU3RyaWN0RGlyZWN0aXZlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAg
IHNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpOwotICAgICAgICAgICAgICAgIHVwcGVyID0gc2Nv
cGUudXBwZXI7Ci0KLSAgICAgICAgICAgICAgICBpZiAodXBwZXIgJiYgdXBwZXIuZnVuY3Rpb25F
eHByZXNzaW9uU2NvcGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdXBwZXIgPSB1cHBlci51cHBl
cjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodXBwZXIgJiYgdXBw
ZXIuaXNTdHJpY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQodXNlU3Ry
aWN0RGlyZWN0aXZlc1swXSwgIlVubmVjZXNzYXJ5ICd1c2Ugc3RyaWN0Jy4iKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQodXNlU3RyaWN0RGlyZWN0aXZlc1sxXSwg
Ik11bHRpcGxlICd1c2Ugc3RyaWN0JyBkaXJlY3RpdmVzLiIpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHsKLQotICAgICAgICAiUHJvZ3JhbSI6IGNoZWNrRm9yVW5uZWNlc3NhcnlV
c2VTdHJpY3QsCi0KLSAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKLSAgICAgICAgICAgIGNoZWNrRm9yVW5uZWNlc3NhcnlVc2VTdHJpY3Qobm9kZS5ib2R5KTsK
LSAgICAgICAgfSwKLQotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5v
ZGUpIHsKLSAgICAgICAgICAgIGNoZWNrRm9yVW5uZWNlc3NhcnlVc2VTdHJpY3Qobm9kZS5ib2R5
KTsKLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDY2OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgZmFs
bC10aHJvdWdoIGNhc2VzIGluIHN3aXRjaCBzdGF0ZW1lbnRzLgotICogQGF1dGhvciBNYXR0IER1
VmFsbCA8aHR0cDovL21hdHRkdXZhbGwuY29tLz4KLSAqLwotInVzZSBzdHJpY3QiOwotCi0KLXZh
ciBGQUxMVEhST1VHSF9DT01NRU5UID0gL2ZhbGxzXHN0aHJvdWdoLzsKLQotLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICB2YXIgc3dpdGNo
ZXMgPSBbXTsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIlN3aXRjaENhc2UiOiBmdW5jdGlv
bihub2RlKSB7Ci0KLSAgICAgICAgICAgIHZhciBjb25zZXF1ZW50ID0gbm9kZS5jb25zZXF1ZW50
LAotICAgICAgICAgICAgICAgIHN3aXRjaERhdGEgPSBzd2l0Y2hlc1tzd2l0Y2hlcy5sZW5ndGgg
LSAxXSwKLSAgICAgICAgICAgICAgICBpLAotICAgICAgICAgICAgICAgIGNvbW1lbnRzLAotICAg
ICAgICAgICAgICAgIGNvbW1lbnQ7Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBT
b21lIGRldmVsb3BlcnMgd3JhcCBjYXNlIGJvZGllcyBpbiBibG9ja3MsIHNvIGlmIHRoZXJlIGlz
IGp1c3Qgb25lCi0gICAgICAgICAgICAgKiBub2RlIGFuZCBpdCdzIGEgYmxvY2sgc3RhdGVtZW50
LCBjaGVjayBpbnNpZGUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChjb25zZXF1
ZW50Lmxlbmd0aCA9PT0gMSAmJiBjb25zZXF1ZW50WzBdLnR5cGUgPT09ICJCbG9ja1N0YXRlbWVu
dCIpIHsKLSAgICAgICAgICAgICAgICBjb25zZXF1ZW50ID0gY29uc2VxdWVudFswXTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gY2hlY2tpbmcgb24gcHJldmlvdXMgY2FzZQotICAg
ICAgICAgICAgaWYgKCFzd2l0Y2hEYXRhLmxhc3RDYXNlQ2xvc2VkKSB7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBhIGZhbGwgdGhyb3VnaCBjb21tZW50IHdpbGwgYmUgdGhlIGxhc3QgdHJhaWxpbmcg
Y29tbWVudCBvZiB0aGUgbGFzdCBjYXNlCi0gICAgICAgICAgICAgICAgY29tbWVudHMgPSBjb250
ZXh0LmdldENvbW1lbnRzKHN3aXRjaERhdGEubGFzdENhc2UpLnRyYWlsaW5nOwotICAgICAgICAg
ICAgICAgIGNvbW1lbnQgPSBjb21tZW50c1tjb21tZW50cy5sZW5ndGggLSAxXTsKLQotICAgICAg
ICAgICAgICAgIC8vIGNoZWNrIGZvciBjb21tZW50Ci0gICAgICAgICAgICAgICAgaWYgKCFjb21t
ZW50IHx8ICFGQUxMVEhST1VHSF9DT01NRU5ULnRlc3QoY29tbWVudC52YWx1ZSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoc3dpdGNoRGF0YS5sYXN0Q2FzZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBhIFwiYnJlYWtcIiBzdGF0ZW1lbnQgYmVmb3Jl
IFwie3tjb2RlfX1cIi4iLAotICAgICAgICAgICAgICAgICAgICAgICAgeyBjb2RlOiBub2RlLnRl
c3QgPyAiY2FzZSIgOiAiZGVmYXVsdCIgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBub3cgZGVhbGluZyB3aXRoIHRoZSBjdXJyZW50IGNhc2UK
LSAgICAgICAgICAgIHN3aXRjaERhdGEubGFzdENhc2VDbG9zZWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIHN3aXRjaERhdGEubGFzdENhc2UgPSBub2RlOwotCi0gICAgICAgICAgICAvLyB0cnkgdG8g
dmVyaWZ5IHVzaW5nIHN0YXRlbWVudHMgLSBnbyBiYWNrd2FyZHMgYXMgYSBmYXN0IHBhdGggZm9y
IHRoZSBzZWFyY2gKLSAgICAgICAgICAgIGlmIChjb25zZXF1ZW50Lmxlbmd0aCkgewotICAgICAg
ICAgICAgICAgIGZvciAoaSA9IGNvbnNlcXVlbnQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKC8oPzpCcmVha3xDb250aW51ZXxSZXR1cm58VGhyb3cp
U3RhdGVtZW50Ly50ZXN0KGNvbnNlcXVlbnRbaV0udHlwZSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaERhdGEubGFzdENhc2VDbG9zZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIHRoZSBjYXNlIHN0YXRl
bWVudCBoYXMgbm8gc3RhdGVtZW50cywgc28gaXQgbXVzdCBsb2dpY2FsbHkgZmFsbCB0aHJvdWdo
Ci0gICAgICAgICAgICAgICAgc3dpdGNoRGF0YS5sYXN0Q2FzZUNsb3NlZCA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBBbnkgd2FybmluZ3Mg
YXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBuZXh0IFN3aXRjaENhc2Ugb2NjdXJzLgotICAgICAgICAg
ICAgICogVGhlcmUgaXMgbm8gbmVlZCB0byB3YXJuIG9uIHRoZSBsYXN0IFN3aXRjaENhc2UsIHNp
bmNlIGl0IGNhbid0Ci0gICAgICAgICAgICAgKiBmYWxsIHRocm91Z2ggdG8gYW55dGhpbmcuCi0g
ICAgICAgICAgICAgKi8KLSAgICAgICAgfSwKLQotICAgICAgICAiU3dpdGNoU3RhdGVtZW50Ijog
ZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgc3dpdGNoZXMucHVzaCh7Ci0gICAgICAgICAg
ICAgICAgbm9kZTogbm9kZSwKLSAgICAgICAgICAgICAgICBsYXN0Q2FzZUNsb3NlZDogdHJ1ZSwK
LSAgICAgICAgICAgICAgICBsYXN0Q2FzZTogbnVsbAotICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgIlN3aXRjaFN0YXRlbWVudDpleGl0IjogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICBzd2l0Y2hlcy5wb3AoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31d
LDY3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVy
dmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGEgbGVhZGluZy90cmFpbGluZyBkZWNpbWFsIHBvaW50
IGluIGEgbnVtZXJpYyBsaXRlcmFsCi0gKiBAYXV0aG9yIEphbWVzIEFsbGFyZGljZQotICovCi0K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0g
ICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIkxpdGVyYWwiOiBmdW5j
dGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gIm51
bWJlciIpIHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5yYXcuaW5kZXhPZigiLiIpID09PSAw
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJBIGxlYWRpbmcg
ZGVjaW1hbCBwb2ludCBjYW4gYmUgY29uZnVzZWQgd2l0aCBhIGRvdC4iKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmF3LmluZGV4T2YoIi4iKSA9PT0gbm9k
ZS5yYXcubGVuZ3RoIC0gMSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiQSB0cmFpbGluZyBkZWNpbWFsIHBvaW50IGNhbiBiZSBjb25mdXNlZCB3aXRoIGEgZG90
LiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07
Ci0KLX07Ci0KLX0se31dLDY4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8q
KgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGZ1bmN0aW9uIGRlY2xhcmF0
aW9uIGlkZW50aWZpZXJzIGFzIHZhcmlhYmxlcy4KLSAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBN
eWVycwotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgIC8vIEhlbHBlcnMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvKgotICAgICAq
IFdhbGsgdGhlIHNjb3BlIGNoYWluIGxvb2tpbmcgZm9yIGVpdGhlciBhIEZ1bmN0aW9uRGVjbGFy
YXRpb24gb3IgYQotICAgICAqIFZhcmlhYmxlRGVjbGFyYXRpb24gd2l0aCB0aGUgc2FtZSBuYW1l
IGFzIGxlZnQtaGFuZCBzaWRlIG9mIHRoZQotICAgICAqIEFzc2lnbm1lbnRFeHByZXNzaW9uLiBJ
ZiB3ZSBmaW5kIHRoZSBGdW5jdGlvbkRlY2xhcmF0aW9uIGZpcnN0LCB0aGVuIHdlCi0gICAgICog
d2FybiwgYmVjYXVzZSBhIEZ1bmN0aW9uRGVjbGFyYXRpb24gaXMgdHJ5aW5nIHRvIGJlY29tZSBh
IFZhcmlhYmxlIG9yIGEKLSAgICAgKiBGdW5jdGlvbkV4cHJlc3Npb24uIElmIHdlIGZpbmQgYSBW
YXJpYWJsZURlY2xhcmF0aW9uIGZpcnN0LCB0aGVuIHdlIGhhdmUKLSAgICAgKiBhIGxlZ2l0aW1h
dGUgc2hhZG93IHZhcmlhYmxlLgotICAgICAqLwotICAgIGZ1bmN0aW9uIGNoZWNrSWZJZGVudGlm
aWVySXNGdW5jdGlvbihzY29wZSwgbmFtZSkgewotICAgICAgICB2YXIgdmFyaWFibGUsCi0gICAg
ICAgICAgICBkZWYsCi0gICAgICAgICAgICBpLAotICAgICAgICAgICAgajsKLQotICAgICAgICAv
LyBMb29wIG92ZXIgYWxsIG9mIHRoZSBpZGVudGlmaWVycyBhdmFpbGFibGUgaW4gc2NvcGUuCi0g
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBzY29wZS52YXJpYWJsZXMubGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgIHZhcmlhYmxlID0gc2NvcGUudmFyaWFibGVzW2ldOwotCi0gICAgICAgICAgICAv
LyBGb3IgZWFjaCBpZGVudGlmaWVyLCBzZWUgaWYgaXQgd2FzIGRlZmluZWQgaW4gX3RoaXNfIHNj
b3BlLgotICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHZhcmlhYmxlLmRlZnMubGVuZ3RoOyBq
KyspIHsKLSAgICAgICAgICAgICAgICBkZWYgPSB2YXJpYWJsZS5kZWZzW2pdOwotCi0gICAgICAg
ICAgICAgICAgLy8gSWRlbnRpZmllciBpcyBhIGZ1bmN0aW9uIGFuZCB3YXMgZGVjbGFyZWQgaW4g
dGhpcyBzY29wZQotICAgICAgICAgICAgICAgIGlmIChkZWYubmFtZS5uYW1lID09PSBuYW1lICYm
IGRlZi50eXBlID09PSAiRnVuY3Rpb25OYW1lIikgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBJZGVudGlm
aWVyIGlzIGEgdmFyaWFibGUgYW5kIHdhcyBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlLiBUaGlzCi0g
ICAgICAgICAgICAgICAgLy8gaXMgYSBsZWdpdGltYXRlIHNoYWRvdyB2YXJpYWJsZS4KLSAgICAg
ICAgICAgICAgICBpZiAoZGVmLm5hbWUubmFtZSA9PT0gbmFtZSkgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhlIHVwcGVyIHNjb3BlLgotICAgICAgICBpZiAo
c2NvcGUudXBwZXIpIHsKLSAgICAgICAgICAgIHJldHVybiBjaGVja0lmSWRlbnRpZmllcklzRnVu
Y3Rpb24oc2NvcGUudXBwZXIsIG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UndmUg
cmVhY2hlZCB0aGUgZ2xvYmFsIHNjb3BlIGFuZCBoYXZlbid0IGZvdW5kIGFueXRoaW5nLgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAg
IC8vIFB1YmxpYyBBUEkKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICByZXR1cm4gewot
Ci0gICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAg
ICAgICAgIHZhciBzY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKSwKLSAgICAgICAgICAgICAgICBu
YW1lID0gbm9kZS5sZWZ0Lm5hbWU7Ci0KLSAgICAgICAgICAgIGlmIChjaGVja0lmSWRlbnRpZmll
cklzRnVuY3Rpb24oc2NvcGUsIG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIid7e25hbWV9fScgaXMgYSBmdW5jdGlvbi4iLCB7IG5hbWU6IG5hbWUgfSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgfTsKLQotfTsKLQotfSx7fV0sNjk6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1
bGUgdG8gZmxhZyB1c2Ugb2YgaW1wbGllZCBldmFsIHZpYSBzZXRUaW1lb3V0IGFuZCBzZXRJbnRl
cnZhbAotICogQGF1dGhvciBKYW1lcyBBbGxhcmRpY2UKLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1t
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsK
LQotICAgIHJldHVybiB7Ci0gICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKLQotICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIikg
ewotICAgICAgICAgICAgICAgIHZhciBjYWxsZWUgPSBub2RlLmNhbGxlZS5uYW1lOwotCi0gICAg
ICAgICAgICAgICAgaWYgKGNhbGxlZSA9PT0gInNldFRpbWVvdXQiIHx8IGNhbGxlZSA9PT0gInNl
dEludGVydmFsIikgewotICAgICAgICAgICAgICAgICAgICB2YXIgYXJndW1lbnQgPSBub2RlLmFy
Z3VtZW50c1swXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50ICYmIGFyZ3VtZW50
LnR5cGUgPT09ICJMaXRlcmFsIiAmJiB0eXBlb2YgYXJndW1lbnQudmFsdWUgPT09ICJzdHJpbmci
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiSW1wbGll
ZCBldmFsLiBDb25zaWRlciBwYXNzaW5nIGEgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHN0cmluZy4i
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDcwOltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2Ug
ZGVjbGFyYXRpb25zIGluIHByb2dyYW0gb3IgZnVuY3Rpb24gYm9keSByb290LgotICogQGF1dGhv
ciBCcmFuZG9uIE1pbGxzCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUg
RGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAvKioKLSAgICAg
KiBGaW5kIHRoZSBuZWFyZXN0IFByb2dyYW0gb3IgRnVuY3Rpb24gYW5jZXN0b3Igbm9kZS4KLSAg
ICAgKiBAcmV0dXJucyB7T2JqZWN0fSBBbmNlc3RvcidzIHR5cGUgYW5kIGRpc3RhbmNlIGZyb20g
bm9kZS4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBuZWFyZXN0Qm9keSgpIHsKLSAgICAgICAgdmFy
IGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCksCi0gICAgICAgICAgICBhbmNlc3Rv
ciA9IGFuY2VzdG9ycy5wb3AoKSwKLSAgICAgICAgICAgIGdlbmVyYXRpb24gPSAxOwotCi0gICAg
ICAgIHdoaWxlIChhbmNlc3RvciAmJiBbIlByb2dyYW0iLCAiRnVuY3Rpb25EZWNsYXJhdGlvbiIs
Ci0gICAgICAgICAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiJdLmluZGV4T2YoYW5jZXN0b3Iu
dHlwZSkgPCAwKSB7Ci0gICAgICAgICAgICBnZW5lcmF0aW9uICs9IDE7Ci0gICAgICAgICAgICBh
bmNlc3RvciA9IGFuY2VzdG9ycy5wb3AoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB7
Ci0gICAgICAgICAgICAvLyBUeXBlIG9mIGNvbnRhaW5pbmcgYW5jZXN0b3IKLSAgICAgICAgICAg
IHR5cGU6IGFuY2VzdG9yLnR5cGUsCi0gICAgICAgICAgICAvLyBTZXBhcmF0aW9uIGJldHdlZW4g
YW5jZXN0b3IgYW5kIG5vZGUKLSAgICAgICAgICAgIGRpc3RhbmNlOiBnZW5lcmF0aW9uCi0gICAg
ICAgIH07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRW5zdXJlIHRoYXQgYSBnaXZlbiBub2Rl
IGlzIGF0IGEgcHJvZ3JhbSBvciBmdW5jdGlvbiBib2R5J3Mgcm9vdC4KLSAgICAgKiBAcGFyYW0g
e0FTVE5vZGV9IG5vZGUgRGVjbGFyYXRpb24gbm9kZSB0byBjaGVjay4KLSAgICAgKiBAcmV0dXJu
cyB7dm9pZH0KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBjaGVjayhub2RlKSB7Ci0gICAgICAgIHZh
ciBib2R5ID0gbmVhcmVzdEJvZHkobm9kZSksCi0gICAgICAgICAgICB2YWxpZCA9ICgoYm9keS50
eXBlID09PSAiUHJvZ3JhbSIgJiYgYm9keS5kaXN0YW5jZSA9PT0gMSkgfHwKLSAgICAgICAgICAg
ICAgICBib2R5LmRpc3RhbmNlID09PSAyKTsKLQotICAgICAgICBpZiAoIXZhbGlkKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiTW92ZSB7e3R5cGV9fSBkZWNsYXJhdGlvbiB0
byB7e2JvZHl9fSByb290LiIsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICB0eXBlOiAobm9kZS50eXBlID09PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIgPwotICAgICAgICAg
ICAgICAgICAgICAgICAgImZ1bmN0aW9uIiA6ICJ2YXJpYWJsZSIpLAotICAgICAgICAgICAgICAg
ICAgICBib2R5OiAoYm9keS50eXBlID09PSAiUHJvZ3JhbSIgPwotICAgICAgICAgICAgICAgICAg
ICAgICAgInByb2dyYW0iIDogImZ1bmN0aW9uIGJvZHkiKQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAg
ICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogY2hlY2ssCi0gICAgICAgICJWYXJpYWJsZURlY2xhcmF0
aW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgaWYgKGNvbnRleHQub3B0aW9uc1sw
XSA9PT0gImJvdGgiKSB7Ci0gICAgICAgICAgICAgICAgY2hlY2sobm9kZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgIH07Ci0KLX07Ci0KLX0se31dLDcxOltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBWYWxpZGF0ZSBzdHJp
bmdzIHBhc3NlZCB0byB0aGUgUmVnRXhwIGNvbnN0cnVjdG9yCi0gKiBAYXV0aG9yIE1pY2hhZWwg
RmljYXJyYQotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgZnVuY3Rpb24gaXNTdHJpbmcobm9kZSkg
ewotICAgICAgICByZXR1cm4gbm9kZSAmJiBub2RlLnR5cGUgPT09ICJMaXRlcmFsIiAmJiB0eXBl
b2Ygbm9kZS52YWx1ZSA9PT0gInN0cmluZyI7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gY2hlY2so
bm9kZSkgewotICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiICYm
IG5vZGUuY2FsbGVlLm5hbWUgPT09ICJSZWdFeHAiICYmIGlzU3RyaW5nKG5vZGUuYXJndW1lbnRz
WzBdKSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmco
bm9kZS5hcmd1bWVudHNbMV0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZvaWQgbmV3IFJlZ0V4
cChub2RlLmFyZ3VtZW50c1swXS52YWx1ZSwgbm9kZS5hcmd1bWVudHNbMV0udmFsdWUpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZvaWQgbmV3IFJlZ0V4
cChub2RlLmFyZ3VtZW50c1swXS52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgZS5t
ZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB7
Ci0gICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGNoZWNrLAotICAgICAgICAiTmV3RXhwcmVzc2lv
biI6IGNoZWNrCi0gICAgfTsKLQotfTsKLQotfSx7fV0sNzI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2FnZSBv
ZiBfX2l0ZXJhdG9yX18gcHJvcGVydHkKLSAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycwot
ICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
ewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiTWVtYmVy
RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAgICAgaWYgKG5vZGUucHJv
cGVydHkgJiYKLSAgICAgICAgICAgICAgICAgICAgKG5vZGUucHJvcGVydHkudHlwZSA9PT0gIklk
ZW50aWZpZXIiICYmIG5vZGUucHJvcGVydHkubmFtZSA9PT0gIl9faXRlcmF0b3JfXyIgJiYgIW5v
ZGUuY29tcHV0ZWQpIHx8Ci0gICAgICAgICAgICAgICAgICAgIChub2RlLnByb3BlcnR5LnR5cGUg
PT09ICJMaXRlcmFsIiAmJiBub2RlLnByb3BlcnR5LnZhbHVlID09PSAiX19pdGVyYXRvcl9fIikp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVzZXJ2ZWQgbmFtZSAn
X19pdGVyYXRvcl9fJy4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07
Ci0KLX0se31dLDczOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICog
QGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgbGFiZWxzIHRoYXQgYXJlIHRoZSBzYW1lIGFzIGFu
IGlkZW50aWZpZXIKLSAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycwotICovCi0KLS8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVz
ZSBzdHJpY3QiOwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEhlbHBlcnMKLSAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBmdW5jdGlvbiBmaW5kSWRlbnRpZmllcihzY29w
ZSwgaWRlbnRpZmllcikgewotICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTsKLQotICAgICAgICBz
Y29wZS52YXJpYWJsZXMuZm9yRWFjaChmdW5jdGlvbih2YXJpYWJsZSkgewotICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLm5hbWUgPT09IGlkZW50aWZpZXIpIHsKLSAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHNjb3BlLnJl
ZmVyZW5jZXMuZm9yRWFjaChmdW5jdGlvbihyZWZlcmVuY2UpIHsKLSAgICAgICAgICAgIGlmIChy
ZWZlcmVuY2UuaWRlbnRpZmllci5uYW1lID09PSBpZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICAv
LyBJZiB3ZSBoYXZlIG5vdCBmb3VuZCB0aGUgaWRlbnRpZmllciBpbiB0aGlzIHNjb3BlLCBjaGVj
ayB0aGUgcGFyZW50Ci0gICAgICAgIC8vIHNjb3BlLgotICAgICAgICBpZiAoc2NvcGUudXBwZXIg
JiYgIWZvdW5kKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmluZElkZW50aWZpZXIoc2NvcGUudXBw
ZXIsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZvdW5kOwotICAg
IH0KLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMgQVBJCi0gICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiTGFiZWxlZFN0YXRl
bWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAgICAgLy8gRmV0Y2ggdGhlIGlubmVy
bW9zdCBzY29wZS4KLSAgICAgICAgICAgIHZhciBzY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKTsK
LQotICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmluZCB0aGUgaWRlbnRpZmllciB3YWxraW5n
IHVwIHRoZSBzY29wZSwgc3RhcnRpbmcKLSAgICAgICAgICAgIC8vIHdpdGggdGhlIGlubmVybW9z
dCBzY29wZS4KLSAgICAgICAgICAgIGlmIChmaW5kSWRlbnRpZmllcihzY29wZSwgbm9kZS5sYWJl
bC5uYW1lKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJGb3VuZCBp
ZGVudGlmaWVyIHdpdGggc2FtZSBuYW1lIGFzIGxhYmVsLiIpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICB9OwotCi19OwotCi19LHt9XSw3NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgTGFiZWxlZCBTdGF0
ZW1lbnRzCi0gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCi0gKi8KLSJ1c2Ugc3RyaWN0IjsK
LQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0K
LSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljCi0gICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiTGFiZWxlZFN0YXRlbWVudCI6IGZ1
bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVj
dGVkIGxhYmVsZWQgc3RhdGVtZW50LiIpOwotICAgICAgICB9LAotCi0gICAgICAgICJCcmVha1N0
YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAgICAgaWYgKG5vZGUubGFiZWwp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBsYWJl
bCBpbiBicmVhayBzdGF0ZW1lbnQuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSwKLQot
ICAgICAgICAiQ29udGludWVTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAg
ICAgIGlmIChub2RlLmxhYmVsKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIlVuZXhwZWN0ZWQgbGFiZWwgaW4gY29udGludWUgc3RhdGVtZW50LiIpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgIH0KLQotCi0gICAgfTsKLQotfTsKLQotfSx7fV0sNzU6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyBibG9ja3Mgd2l0aCBubyByZWFzb24gdG8gZXhpc3QKLSAqIEBhdXRob3IgQnJhbmRvbiBN
aWxscwotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIkJs
b2NrU3RhdGVtZW50IjogZnVuY3Rpb24gKG5vZGUpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIGZv
ciBhbnkgb2NjdXJyZW5jZSBvZiBCbG9ja1N0YXRlbWVudCA+IEJsb2NrU3RhdGVtZW50IG9yCi0g
ICAgICAgICAgICAvLyBQcm9ncmFtID4gQmxvY2tTdGF0ZW1lbnQKLSAgICAgICAgICAgIHZhciBw
YXJlbnQgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLnBvcCgpOwotICAgICAgICAgICAgaWYgKHBh
cmVudC50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiIHx8IHBhcmVudC50eXBlID09PSAiUHJvZ3Jh
bSIpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQmxvY2sgaXMgbmVz
dGVkIGluc2lkZSBhbm90aGVyIGJsb2NrLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfTsKLQotfTsKLQotfSx7fV0sNzY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
ewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZGlzYWxsb3cgaWYgYXMgdGhlIG9ubHkg
c3RhdG1lbmV0IGluIGFuIGVsc2UgYmxvY2sKLSAqIEBhdXRob3IgQnJhbmRvbiBNaWxscwotICov
Ci0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmlu
aXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgewotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIklmU3RhdGVtZW50IjogZnVu
Y3Rpb24obm9kZSkgewotICAgICAgICAgICAgdmFyIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5j
ZXN0b3JzKCksCi0gICAgICAgICAgICAgICAgcGFyZW50ID0gYW5jZXN0b3JzLnBvcCgpLAotICAg
ICAgICAgICAgICAgIGdyYW5kcGFyZW50ID0gYW5jZXN0b3JzLnBvcCgpOwotCi0gICAgICAgICAg
ICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiICYmCi0gICAg
ICAgICAgICAgICAgICAgIHBhcmVudC5ib2R5Lmxlbmd0aCA9PT0gMSAmJiBncmFuZHBhcmVudCAm
JgotICAgICAgICAgICAgICAgICAgICBncmFuZHBhcmVudC50eXBlID09PSAiSWZTdGF0ZW1lbnQi
ICYmCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudCA9PT0gZ3JhbmRwYXJlbnQuYWx0ZXJuYXRl
KSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgaWYg
YXMgdGhlIG9ubHkgc3RhdGVtZW50IGluIGFuIGVsc2UgYmxvY2suIik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw3NzpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGNyZWF0
aW9uIG9mIGZ1bmN0aW9uIGluc2lkZSBhIGxvb3AKLSAqIEBhdXRob3IgSWx5YSBWb2xvZGluCi0g
Ki8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICBmdW5jdGlvbiBjaGVja0Zvckxvb3BzKG5vZGUp
IHsKLSAgICAgICAgdmFyIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCk7Ci0KLSAg
ICAgICAgaWYgKGFuY2VzdG9ycy5zb21lKGZ1bmN0aW9uKGFuY2VzdG9yKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gYW5jZXN0b3IudHlwZSA9PT0gIkZvclN0YXRlbWVudCIgfHwgYW5jZXN0b3IudHlw
ZSA9PT0gIldoaWxlU3RhdGVtZW50IiB8fCBhbmNlc3Rvci50eXBlID09PSAiRG9XaGlsZVN0YXRl
bWVudCI7Ci0gICAgICAgIH0pKSB7Ci0gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
RG9uJ3QgbWFrZSBmdW5jdGlvbnMgd2l0aGluIGEgbG9vcCIpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGNoZWNrRm9yTG9v
cHMsCi0gICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogY2hlY2tGb3JMb29wcwotICAgIH07
Ci19OwotCi19LHt9XSw3ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioK
LSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBlbmZvcmNlIGdyb3VwZWQgcmVxdWlyZSBzdGF0ZW1l
bnRzIGZvciBOb2RlLkpTCi0gKiBAYXV0aG9yIFJhcGhhZWwgUGlndWxsYQotICovCi0KLS8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotICAgICJ1c2Ug
c3RyaWN0IjsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgYnVpbHQtaW4g
bW9kdWxlcy4KLSAgICAgKgotICAgICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2Yg
YnVpbHQtaW4gTm9kZS5qcyBtb2R1bGVzLgotICAgICAqLwotICAgIGZ1bmN0aW9uIGdldEJ1aWx0
aW5Nb2R1bGVzKCkgewotICAgICAgICAvLyBUaGlzIGxpc3QgaXMgZ2VuZXJhdGVkIHVzaW5nIGBy
ZXF1aXJlKCJyZXBsIikuX2J1aWx0aW5MaWJzLmNvbmNhdCgncmVwbCcpLnNvcnQoKWAKLSAgICAg
ICAgLy8gVGhpcyBwYXJ0aWN1bGFyIGxpc3Qgd2FzIGdlbmVyYXRlZCB1c2luZyBub2RlIHYwLjEx
LjkKLSAgICAgICAgcmV0dXJuIFsKLSAgICAgICAgICAgICJhc3NlcnQiLCAiYnVmZmVyIiwgImNo
aWxkX3Byb2Nlc3MiLCAiY2x1c3RlciIsICJjcnlwdG8iLAotICAgICAgICAgICAgImRncmFtIiwg
ImRucyIsICJkb21haW4iLCAiZXZlbnRzIiwgImZzIiwgImh0dHAiLCAiaHR0cHMiLAotICAgICAg
ICAgICAgIm5ldCIsICJvcyIsICJwYXRoIiwgInB1bnljb2RlIiwgInF1ZXJ5c3RyaW5nIiwgInJl
YWRsaW5lIiwKLSAgICAgICAgICAgICJyZXBsIiwgInNtYWxsb2MiLCAic3RyZWFtIiwgInN0cmlu
Z19kZWNvZGVyIiwgInRscyIsICJ0dHkiLAotICAgICAgICAgICAgInVybCIsICJ1dGlsIiwgInZt
IiwgInpsaWIiCi0gICAgICAgIF07Ci0gICAgfQotCi0gICAgdmFyIEJVSUxUSU5fTU9EVUxFUyA9
IGdldEJ1aWx0aW5Nb2R1bGVzKCk7Ci0KLSAgICB2YXIgREVDTF9SRVFVSVJFID0gInJlcXVpcmUi
LAotICAgICAgICBERUNMX1VOSU5JVElBTElaRUQgPSAidW5pbml0aWFsaXplZCIsCi0gICAgICAg
IERFQ0xfT1RIRVIgPSAib3RoZXIiOwotCi0gICAgdmFyIFJFUV9DT1JFID0gImNvcmUiLAotICAg
ICAgICBSRVFfRklMRSA9ICJmaWxlIiwKLSAgICAgICAgUkVRX01PRFVMRSA9ICJtb2R1bGUiLAot
ICAgICAgICBSRVFfQ09NUFVURUQgPSAiY29tcHV0ZWQiOwotCi0gICAgLyoqCi0gICAgICogRGV0
ZXJtaW5lcyB0aGUgdHlwZSBvZiBhIGRlY2xhcmF0aW9uIHN0YXRlbWVudC4KLSAgICAgKiBAcGFy
YW0ge0FTVE5vZGV9IGluaXRFeHByZXNzaW9uIFRoZSBpbml0IG5vZGUgb2YgdGhlIFZhcmlhYmxl
RGVjbGFyYXRvci4KLSAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgdHlwZSBvZiBkZWNsYXJh
dGlvbiByZXByZXNlbnRlZCBieSB0aGUgZXhwcmVzc2lvbi4KLSAgICAgKi8KLSAgICBmdW5jdGlv
biBnZXREZWNsYXJhdGlvblR5cGUoaW5pdEV4cHJlc3Npb24pIHsKLSAgICAgICAgaWYgKCFpbml0
RXhwcmVzc2lvbikgewotICAgICAgICAgICAgLy8gInZhciB4OyIKLSAgICAgICAgICAgIHJldHVy
biBERUNMX1VOSU5JVElBTElaRUQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5pdEV4cHJl
c3Npb24udHlwZSA9PT0gIkNhbGxFeHByZXNzaW9uIiAmJgotICAgICAgICAgICAgaW5pdEV4cHJl
c3Npb24uY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgotICAgICAgICAgICAgaW5pdEV4
cHJlc3Npb24uY2FsbGVlLm5hbWUgPT09ICJyZXF1aXJlIgotICAgICAgICApIHsKLSAgICAgICAg
ICAgIC8vICJ2YXIgeCA9IHJlcXVpcmUoJ3V0aWwnKTsiCi0gICAgICAgICAgICByZXR1cm4gREVD
TF9SRVFVSVJFOwotICAgICAgICB9IGVsc2UgaWYgKGluaXRFeHByZXNzaW9uLnR5cGUgPT09ICJN
ZW1iZXJFeHByZXNzaW9uIikgewotICAgICAgICAgICAgLy8gInZhciB4ID0gcmVxdWlyZSgnZ2xv
YicpLkdsb2I7IgotICAgICAgICAgICAgcmV0dXJuIGdldERlY2xhcmF0aW9uVHlwZShpbml0RXhw
cmVzc2lvbi5vYmplY3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gInZhciB4ID0gNDI7Igot
ICAgICAgICByZXR1cm4gREVDTF9PVEhFUjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZXRl
cm1pbmVzIHRoZSB0eXBlIG9mIG1vZHVsZSB0aGF0IGlzIGxvYWRlZCB2aWEgcmVxdWlyZS4KLSAg
ICAgKiBAcGFyYW0ge0FTVE5vZGV9IGluaXRFeHByZXNzaW9uIFRoZSBpbml0IG5vZGUgb2YgdGhl
IFZhcmlhYmxlRGVjbGFyYXRvci4KLSAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbW9kdWxl
IHR5cGUuCi0gICAgICovCi0gICAgZnVuY3Rpb24gaW5mZXJNb2R1bGVUeXBlKGluaXRFeHByZXNz
aW9uKSB7Ci0gICAgICAgIGlmIChpbml0RXhwcmVzc2lvbi50eXBlID09PSAiTWVtYmVyRXhwcmVz
c2lvbiIpIHsKLSAgICAgICAgICAgIC8vICJ2YXIgeCA9IHJlcXVpcmUoJ2dsb2InKS5HbG9iOyIK
LSAgICAgICAgICAgIHJldHVybiBpbmZlck1vZHVsZVR5cGUoaW5pdEV4cHJlc3Npb24ub2JqZWN0
KTsKLSAgICAgICAgfSBlbHNlIGlmIChpbml0RXhwcmVzc2lvblsiYXJndW1lbnRzIl0ubGVuZ3Ro
ID09PSAwKSB7Ci0gICAgICAgICAgICAvLyAidmFyIHggPSByZXF1aXJlKCk7IgotICAgICAgICAg
ICAgcmV0dXJuIFJFUV9DT01QVVRFRDsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBhcmcgPSBp
bml0RXhwcmVzc2lvblsiYXJndW1lbnRzIl1bMF07Ci0KLSAgICAgICAgaWYgKGFyZy50eXBlICE9
PSAiTGl0ZXJhbCIgfHwgdHlwZW9mIGFyZy52YWx1ZSAhPT0gInN0cmluZyIpIHsKLSAgICAgICAg
ICAgIC8vICJ2YXIgeCA9IHJlcXVpcmUoNDIpOyIKLSAgICAgICAgICAgIHJldHVybiBSRVFfQ09N
UFVURUQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoQlVJTFRJTl9NT0RVTEVTLmluZGV4T2Yo
YXJnLnZhbHVlKSAhPT0gLTEpIHsKLSAgICAgICAgICAgIC8vICJ2YXIgZnMgPSByZXF1aXJlKCdm
cycpOyIKLSAgICAgICAgICAgIHJldHVybiBSRVFfQ09SRTsKLSAgICAgICAgfSBlbHNlIGlmICgv
XlwuezAsMn1cLy8udGVzdChhcmcudmFsdWUpKSB7Ci0gICAgICAgICAgICAvLyAidmFyIHV0aWxz
ID0gcmVxdWlyZSgnLi91dGlscycpOyIKLSAgICAgICAgICAgIHJldHVybiBSRVFfRklMRTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vICJ2YXIgYXN5bmMgPSByZXF1aXJlKCdhc3lu
YycpOyIKLSAgICAgICAgICAgIHJldHVybiBSRVFfTU9EVUxFOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhlIGxpc3Qgb2YgdmFyaWFibGUgZGVjbGFyYXRp
b25zIGlzIG1peGVkLCBpLmUuIHdoZXRoZXIgaXQKLSAgICAgKiBjb250YWlucyBib3RoIHJlcXVp
cmUgYW5kIG90aGVyIGRlY2xhcmF0aW9ucy4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGRlY2xh
cmF0aW9ucyBUaGUgbGlzdCBvZiBWYXJpYWJsZURlY2xhcmF0b3JzLgotICAgICAqIEByZXR1cm5z
IHtib29sZWFufSBUcnVlIGlmIHRoZSBkZWNsYXJhdGlvbnMgYXJlIG1peGVkLCBmYWxzZSBpZiBu
b3QuCi0gICAgICovCi0gICAgZnVuY3Rpb24gaXNNaXhlZChkZWNsYXJhdGlvbnMpIHsKLSAgICAg
ICAgdmFyIGNvbnRhaW5zID0ge307Ci0KLSAgICAgICAgZGVjbGFyYXRpb25zLmZvckVhY2goZnVu
Y3Rpb24gKGRlY2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICB2YXIgdHlwZSA9IGdldERlY2xhcmF0
aW9uVHlwZShkZWNsYXJhdGlvbi5pbml0KTsKLSAgICAgICAgICAgIGNvbnRhaW5zW3R5cGVdID0g
dHJ1ZTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuICEhKAotICAgICAgICAgICAgY29u
dGFpbnNbREVDTF9SRVFVSVJFXSAmJgotICAgICAgICAgICAgKGNvbnRhaW5zW0RFQ0xfVU5JTklU
SUFMSVpFRF0gfHwgY29udGFpbnNbREVDTF9PVEhFUl0pCi0gICAgICAgICk7Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogQ2hlY2sgaWYgYWxsIHJlcXVpcmUgZGVjbGFyYXRpb25zIGluIHRoZSBn
aXZlbiBsaXN0IGFyZSBvZiB0aGUgc2FtZQotICAgICAqIHR5cGUuCi0gICAgICogQHBhcmFtIHtB
U1ROb2RlfSBkZWNsYXJhdGlvbnMgVGhlIGxpc3Qgb2YgVmFyaWFibGVEZWNsYXJhdG9ycy4KLSAg
ICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZGVjbGFyYXRpb25zIGFyZSBncm91
cGVkLCBmYWxzZSBpZiBub3QuCi0gICAgICovCi0gICAgZnVuY3Rpb24gaXNHcm91cGVkKGRlY2xh
cmF0aW9ucykgewotICAgICAgICB2YXIgZm91bmQgPSB7fTsKLQotICAgICAgICBkZWNsYXJhdGlv
bnMuZm9yRWFjaChmdW5jdGlvbiAoZGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAgIGlmIChnZXRE
ZWNsYXJhdGlvblR5cGUoZGVjbGFyYXRpb24uaW5pdCkgPT09IERFQ0xfUkVRVUlSRSkgewotICAg
ICAgICAgICAgICAgIGZvdW5kW2luZmVyTW9kdWxlVHlwZShkZWNsYXJhdGlvbi5pbml0KV0gPSB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm4gT2JqZWN0
LmtleXMoZm91bmQpLmxlbmd0aCA8PSAxOwotICAgIH0KLQotCi0gICAgcmV0dXJuIHsKLQotICAg
ICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAg
IHZhciBncm91cGluZyA9ICEhY29udGV4dC5vcHRpb25zWzBdOwotCi0gICAgICAgICAgICBpZiAo
aXNNaXhlZChub2RlLmRlY2xhcmF0aW9ucykpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydCgKLSAgICAgICAgICAgICAgICAgICAgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgIkRv
IG5vdCBtaXggJ3JlcXVpcmUnIGFuZCBvdGhlciBkZWNsYXJhdGlvbnMuIgotICAgICAgICAgICAg
ICAgICk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGdyb3VwaW5nICYmICFpc0dyb3VwZWQobm9k
ZS5kZWNsYXJhdGlvbnMpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoCi0gICAg
ICAgICAgICAgICAgICAgIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICJEbyBub3QgbWl4IGNv
cmUsIG1vZHVsZSwgZmlsZSBhbmQgY29tcHV0ZWQgcmVxdWlyZXMuIgotICAgICAgICAgICAgICAg
ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw3OTpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcg
RGlzYWxsb3cgbWl4ZWQgc3BhY2VzIGFuZCB0YWJzIGZvciBpbmRlbnRhdGlvbgotICogQGF1dGhv
ciBKYXJ5IE5pZWJ1cgotICogQGNvcHlyaWdodCAyMDE0IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQGNvcHlyaWdodCAyMDE0IEphcnkgTmllYnVyLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgdmFyIHNtYXJ0VGFicyA9IGNv
bnRleHQub3B0aW9uc1swXTsKLQotICAgIHZhciBDT01NRU5UX1NUQVJUID0gL15ccypcL1wqLywK
LSAgICAgICAgTUFZQkVfQ09NTUVOVCA9IC9eXHMqXCovOwotCi0gICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotICAgIC8vIFB1YmxpYwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVy
biB7Ci0KLSAgICAgICAgIlByb2dyYW0iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICAv
KgotICAgICAgICAgICAgICogQXQgbGVhc3Qgb25lIHNwYWNlIGZvbGxvd2VkIGJ5IGEgdGFiCi0g
ICAgICAgICAgICAgKiBvciB0aGUgcmV2ZXJzZSBiZWZvcmUgbm9uLXRhYi8tc3BhY2UKLSAgICAg
ICAgICAgICAqIGNoYXJhY3RlcnMgYmVnaW4uCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IHZhciByZWdleCA9IC9eKD89W1x0IF0qKFx0IHwgXHQpKS8sCi0gICAgICAgICAgICAgICAgbWF0
Y2gsCi0gICAgICAgICAgICAgICAgbGluZXMgPSBjb250ZXh0LmdldFNvdXJjZUxpbmVzKCk7Ci0K
LSAgICAgICAgICAgIGlmIChzbWFydFRhYnMpIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAg
ICAgICAgICAgICAqIEF0IGxlYXN0IG9uZSBzcGFjZSBmb2xsb3dlZCBieSBhIHRhYgotICAgICAg
ICAgICAgICAgICAqIGJlZm9yZSBub24tdGFiLy1zcGFjZSBjaGFyYWN0ZXJzIGJlZ2luLgotICAg
ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHJlZ2V4ID0gL14oPz1bXHQgXSogXHQp
LzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbGluZXMuZm9yRWFjaChmdW5jdGlvbihs
aW5lLCBpKSB7Ci0gICAgICAgICAgICAgICAgbWF0Y2ggPSByZWdleC5leGVjKGxpbmUpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFN
QVlCRV9DT01NRU5ULnRlc3QobGluZSkgJiYgIUNPTU1FTlRfU1RBUlQudGVzdChsaW5lc1tpIC0g
MV0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCB7IGxp
bmU6IGkgKyAxLCBjb2x1bW46IG1hdGNoLmluZGV4ICsgMSB9LCAiTWl4ZWQgc3BhY2VzIGFuZCB0
YWJzLiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgfTsKLQotfTsKLQotfSx7fV0sODA6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IERpc2Fs
bG93IHVzZSBvZiBtdWx0aXBsZSBzcGFjZXMuCi0gKiBAYXV0aG9yIFZpZ25lc2ggQW5hbmQgYWth
IHZlZ2V0YWJsZW1hbi4KLSAqIEBjb3B5cmlnaHQgMjAxNCBWaWduZXNoIEFuYW5kLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgdmFyIE9QRVJBVE9SUyA9IFsK
LSAgICAgICAgIioiLCAiLyIsICIlIiwgIisiLCAiLSIsICI8PCIsICI+PiIsICI+Pj4iLCAiPCIs
ICI8PSIsICI+IiwgIj49IiwgImluIiwKLSAgICAgICAgImluc3RhbmNlb2YiLCAiPT0iLCAiIT0i
LCAiPT09IiwgIiE9PSIsICImIiwgIl4iLCAifCIsICImJiIsICJ8fCIsICI9IiwKLSAgICAgICAg
Iis9IiwgIi09IiwgIio9IiwgIi89IiwgIiU9IiwgIjw8PSIsICI+Pj0iLCAiPj4+PSIsICImPSIs
ICJePSIsICJ8PSIsCi0gICAgICAgICI/IiwgIjoiLCAiLCIKLSAgICBdLCBlcnJPcHMgPSBbXTsK
LQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0gICAgLyoqCi0gICAgICogUmVwb3J0cyBhbiBBU1Qgbm9kZSBhcyBhIHJ1
bGUgdmlvbGF0aW9uLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBy
ZXBvcnQuCi0gICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICogQHByaXZhdGUKLSAgICAgKi8K
LSAgICBmdW5jdGlvbiByZXBvcnQobm9kZSkgewotICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiTXVsdGlwbGUgc3BhY2VzIGZvdW5kIGFyb3VuZCAnIiArIGVyck9wcy5zaGlmdCgpICsgIicu
Iik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIG9wZXJhdG9y
IGlzIGluIHNhbWUgbGluZSBhcyB0d28gYWRqYWNlbnQgdG9rZW5zLgotICAgICAqIEBwYXJhbSB7
QVNUTm9kZX0gbGVmdCBUaGUgdG9rZW4gbGVmdCB0byB0aGUgb3BlcmF0b3IuCi0gICAgICogQHBh
cmFtIHtBU1ROb2RlfSByaWdodCBUaGUgdG9rZW4gcmlnaHQgdG8gdGhlIG9wZXJhdG9yLgotICAg
ICAqIEBwYXJhbSB7QVNUTm9kZX0gb3BlcmF0b3IgVGhlIG9wZXJhdG9yLgotICAgICAqIEByZXR1
cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBvcGVyYXRvciBpcyBpbiBzYW1lIGxpbmUgYXMgdHdv
IGFkamFjZW50IHRva2Vucy4KLSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIGZ1bmN0aW9u
IGlzU2FtZUxpbmUobGVmdCwgcmlnaHQsIG9wZXJhdG9yKSB7Ci0gICAgICAgIHJldHVybiBvcGVy
YXRvci5sb2MuZW5kLmxpbmUgPT09IGxlZnQubG9jLmVuZC5saW5lICYmCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRvci5sb2MuZW5kLmxpbmUgPT09IHJpZ2h0LmxvYy5zdGFydC5saW5l
OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIG11bHRp
cGxlIHNwYWNlcyBhcm91bmQgdGhlIG9wZXJhdG9yLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0g
bGVmdCBUaGUgdG9rZW4gbGVmdCB0byB0aGUgb3BlcmF0b3IuCi0gICAgICogQHBhcmFtIHtBU1RO
b2RlfSByaWdodCBUaGUgdG9rZW4gcmlnaHQgdG8gdGhlIG9wZXJhdG9yLgotICAgICAqIEBwYXJh
bSB7QVNUTm9kZX0gb3BlcmF0b3IgVGhlIG9wZXJhdG9yLgotICAgICAqIEByZXR1cm5zIHtib29s
ZWFufSBXaGV0aGVyIHRoZXJlIGFyZSBtdWx0aXBsZSBzcGFjZXMuCi0gICAgICogQHByaXZhdGUK
LSAgICAgKi8KLSAgICBmdW5jdGlvbiBpc011bHRpU3BhY2VkKGxlZnQsIHJpZ2h0LCBvcGVyYXRv
cikgewotICAgICAgICByZXR1cm4gb3BlcmF0b3IucmFuZ2VbMF0gLSBsZWZ0LnJhbmdlWzFdID4g
MSB8fAotICAgICAgICAgICAgICAgIHJpZ2h0LnJhbmdlWzBdIC0gb3BlcmF0b3IucmFuZ2VbMV0g
PiAxOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCB0b2tlbnMgYW5kIHZhbGlkYXRlIHRo
ZSBzcGFjaW5nLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGVmdCBUaGUgdG9rZW4gbGVmdCB0
byB0aGUgb3BlcmF0b3IuCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSByaWdodCBUaGUgdG9rZW4g
cmlnaHQgdG8gdGhlIG9wZXJhdG9yLgotICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVy
IG11bHRpcGxlIHNwYWNlcyB3ZXJlIGZvdW5kLgotICAgICAqIEBwcml2YXRlCi0gICAgICovCi0g
ICAgZnVuY3Rpb24gdmFsaWRhdGVTcGFjaW5nKGxlZnQsIHJpZ2h0KSB7Ci0gICAgICAgIHZhciB0
b2tlbnMgPSBjb250ZXh0LmdldFRva2Vucyh7cmFuZ2U6IFtsZWZ0LnJhbmdlWzFdLCByaWdodC5y
YW5nZVswXV19LCAxLCAxKSwKLSAgICAgICAgICAgIG9wZXJhdG9yOwotCi0gICAgICAgIGZvciAo
dmFyIGkgPSAxLCBsID0gdG9rZW5zLmxlbmd0aCAtIDE7IGkgPCBsOyArK2kpIHsKLSAgICAgICAg
ICAgIGxlZnQgPSB0b2tlbnNbaSAtIDFdOwotICAgICAgICAgICAgb3BlcmF0b3IgPSB0b2tlbnNb
aV07Ci0gICAgICAgICAgICByaWdodCA9IHRva2Vuc1tpICsgMV07Ci0KLSAgICAgICAgICAgIGlm
IChvcGVyYXRvciAmJiBvcGVyYXRvci50eXBlID09PSAiUHVuY3R1YXRvciIgJiYgT1BFUkFUT1JT
LmluZGV4T2Yob3BlcmF0b3IudmFsdWUpID49IDAgJiYKLSAgICAgICAgICAgICAgICBpc1NhbWVM
aW5lKGxlZnQsIHJpZ2h0LCBvcGVyYXRvcikgJiYgaXNNdWx0aVNwYWNlZChsZWZ0LCByaWdodCwg
b3BlcmF0b3IpKSB7Ci0gICAgICAgICAgICAgICAgZXJyT3BzLnB1c2gob3BlcmF0b3IudmFsdWUp
OwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogUmVw
b3J0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBzcGFjZXMgb24gdGhlIGV4cHJlc3Npb24uCi0gICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgotICAgICAqIEByZXR1
cm5zIHt2b2lkfQotICAgICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gY2hlY2tF
eHByZXNzaW9uKG5vZGUpIHsKLSAgICAgICAgaWYgKHZhbGlkYXRlU3BhY2luZyhub2RlLmxlZnQs
IG5vZGUucmlnaHQpKSB7Ci0gICAgICAgICAgICByZXBvcnQobm9kZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXBvcnQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHNwYWNl
cyBhcm91bmQgY29uZGl0aW9uYWwgdGVybmFyeSBvcGVyYXRvcnMuCi0gICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgotICAgICAqIEByZXR1cm5zIHt2b2lkfQot
ICAgICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gY2hlY2tDb25kaXRpb25hbChu
b2RlKSB7Ci0gICAgICAgIGlmICh2YWxpZGF0ZVNwYWNpbmcobm9kZS50ZXN0LCBub2RlLmNvbnNl
cXVlbnQpKSB7Ci0gICAgICAgICAgICByZXBvcnQobm9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKHZhbGlkYXRlU3BhY2luZyhub2RlLmNvbnNlcXVlbnQsIG5vZGUuYWx0ZXJuYXRlKSkgewot
ICAgICAgICAgICAgcmVwb3J0KG5vZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0g
ICAgICogUmVwb3J0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBzcGFjZXMgYXJvdW5kIGVxdWFsIG9w
ZXJhdG9yIGluIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0g
bm9kZSBUaGUgbm9kZSB0byBjaGVjay4KLSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKiBA
cHJpdmF0ZQotICAgICAqLwotICAgIGZ1bmN0aW9uIGNoZWNrVmFyKG5vZGUpIHsKLSAgICAgICAg
aWYgKG5vZGUuaW5pdCAmJiB2YWxpZGF0ZVNwYWNpbmcobm9kZS5pZCwgbm9kZS5pbml0KSkgewot
ICAgICAgICAgICAgcmVwb3J0KG5vZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0g
ICAgICogUmVwb3J0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBzcGFjZXMgYXJvdW5kIGxpc3Qgb2Yg
aXRlbXMgaW4gb2JqZWN0cywgYXJyYXlzLAotICAgICAqIGZ1bmN0aW9uIHBhcmFtZXRlcnMsIHNl
cXVlbmNlcyBhbmQgZGVjbGFyYXRpb25zLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBU
aGUgbm9kZSB0byBjaGVjay4KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgVGhlIHBy
b3BlcnR5IG9mIG5vZGUuCi0gICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICogQHByaXZhdGUK
LSAgICAgKi8KLSAgICBmdW5jdGlvbiBjaGVja0xpc3Qobm9kZSwgcHJvcGVydHkpIHsKLSAgICAg
ICAgdmFyIGl0ZW1zID0gbm9kZVtwcm9wZXJ0eV07Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDAs
IGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgIHZhciBsZWZ0ID0g
aXRlbXNbaSAtIDFdLAotICAgICAgICAgICAgICAgIHJpZ2h0ID0gaXRlbXNbaV0sCi0gICAgICAg
ICAgICAgICAgb3BlcmF0b3IgPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKHJpZ2h0KTsKLQotICAg
ICAgICAgICAgaWYgKG9wZXJhdG9yICYmIG9wZXJhdG9yLnR5cGUgPT09ICJQdW5jdHVhdG9yIiAm
JiBvcGVyYXRvci52YWx1ZSA9PT0gIiwiKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzU2FtZUxp
bmUobGVmdCwgcmlnaHQsIG9wZXJhdG9yKSAmJiBpc011bHRpU3BhY2VkKGxlZnQsIHJpZ2h0LCBv
cGVyYXRvcikpIHsKLSAgICAgICAgICAgICAgICAgICAgZXJyT3BzLnB1c2gob3BlcmF0b3IudmFs
dWUpOwotICAgICAgICAgICAgICAgICAgICByZXBvcnQocmlnaHQpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAvLyBQdWJsaWMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICByZXR1
cm4gewotICAgICAgICAiQXNzaWdubWVudEV4cHJlc3Npb24iOiBjaGVja0V4cHJlc3Npb24sCi0g
ICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjogY2hlY2tFeHByZXNzaW9uLAotICAgICAgICAiTG9n
aWNhbEV4cHJlc3Npb24iOiBjaGVja0V4cHJlc3Npb24sCi0gICAgICAgICJDb25kaXRpb25hbEV4
cHJlc3Npb24iOiBjaGVja0NvbmRpdGlvbmFsLAotICAgICAgICAiVmFyaWFibGVEZWNsYXJhdG9y
IjogY2hlY2tWYXIsCi0gICAgICAgICJBcnJheUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7
Ci0gICAgICAgICAgICBjaGVja0xpc3Qobm9kZSwgImVsZW1lbnRzIik7Ci0gICAgICAgIH0sCi0g
ICAgICAgICJPYmplY3RFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAg
Y2hlY2tMaXN0KG5vZGUsICJwcm9wZXJ0aWVzIik7Ci0gICAgICAgIH0sCi0gICAgICAgICJTZXF1
ZW5jZUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBjaGVja0xpc3Qo
bm9kZSwgImV4cHJlc3Npb25zIik7Ci0gICAgICAgIH0sCi0gICAgICAgICJGdW5jdGlvbkV4cHJl
c3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBjaGVja0xpc3Qobm9kZSwgInBh
cmFtcyIpOwotICAgICAgICB9LAotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZ1bmN0
aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGNoZWNrTGlzdChub2RlLCAicGFyYW1zIik7Ci0gICAg
ICAgIH0sCi0gICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgewot
ICAgICAgICAgICAgY2hlY2tMaXN0KG5vZGUsICJkZWNsYXJhdGlvbnMiKTsKLSAgICAgICAgfQot
ICAgIH07Ci0KLX07Ci0KLX0se31dLDgxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiB1c2luZyBtdWx0aWxp
bmUgc3RyaW5ncwotICogQGF1dGhvciBJbHlhIFZvbG9kaW4KLSAqLwotCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLSAgICAidXNlIHN0cmljdCI7
Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgewot
ICAgICAgICAgICAgdmFyIGxpbmVCcmVhayA9IC9cbi87Ci0gICAgICAgICAgICBpZiAobGluZUJy
ZWFrLnRlc3Qobm9kZS5yYXcpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIk11bHRpbGluZSBzdXBwb3J0IGlzIGxpbWl0ZWQgdG8gYnJvd3NlcnMgc3VwcG9ydGluZyBF
UzUgb25seS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0s
e31dLDgyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVv
dmVydmlldyBEaXNhbGxvd3MgbXVsdGlwbGUgYmxhbmsgbGluZXMuCi0gKiBpbXBsZW1lbnRhdGlv
biBhZGFwdGVkIGZyb20gdGhlIG5vLXRyYWlsaW5nLXNwYWNlcyBydWxlLgotICogQGF1dGhvciBH
cmVnIENvY2hhcmQKLSAqIEBjb3B5cmlnaHQgMjAxNCBHcmVnIENvY2hhcmQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAvLyBVc2Ugb3B0aW9ucy5tYXggb3Ig
MiBhcyBkZWZhdWx0Ci0gICAgdmFyIG51bUxpbmVzID0gMjsKLQotICAgIGlmIChjb250ZXh0Lm9w
dGlvbnMubGVuZ3RoKSB7Ci0gICAgICAgIG51bUxpbmVzID0gY29udGV4dC5vcHRpb25zWzBdLm1h
eDsKLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljCi0gICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiUHJvZ3JhbSI6
IGZ1bmN0aW9uIGNoZWNrQmxhbmtMaW5lcyhub2RlKSB7Ci0gICAgICAgICAgICB2YXIgbGluZXMg
PSBjb250ZXh0LmdldFNvdXJjZUxpbmVzKCksCi0gICAgICAgICAgICAgICAgY3VycmVudExvY2F0
aW9uID0gLTEsCi0gICAgICAgICAgICAgICAgbGFzdExvY2F0aW9uLAotICAgICAgICAgICAgICAg
IGJsYW5rQ291bnRlciA9IDAsCi0gICAgICAgICAgICAgICAgbG9jYXRpb24sCi0gICAgICAgICAg
ICAgICAgdHJpbW1lZExpbmVzID0gbGluZXMubWFwKGZ1bmN0aW9uKHN0cikgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RyLnRyaW0oKTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAg
ICAgICAgICAgLy8gQWdncmVnYXRlIGFuZCBjb3VudCBibGFuayBsaW5lcwotICAgICAgICAgICAg
ZG8gewotICAgICAgICAgICAgICAgIGxhc3RMb2NhdGlvbiA9IGN1cnJlbnRMb2NhdGlvbjsKLSAg
ICAgICAgICAgICAgICBjdXJyZW50TG9jYXRpb24gPSB0cmltbWVkTGluZXMuaW5kZXhPZigiIixj
dXJyZW50TG9jYXRpb24gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAobGFzdExvY2F0aW9uID09
PSBjdXJyZW50TG9jYXRpb24gLSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJsYW5rQ291bnRl
cisrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChi
bGFua0NvdW50ZXIgPj0gbnVtTGluZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0
aW9uID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxhc3RMb2NhdGlvbiAr
IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBsaW5lc1tsYXN0TG9jYXRp
b25dLmxlbmd0aAotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGxvY2F0aW9uLCAiTXVsdGlwbGUgYmxhbmsgbGlu
ZXMgbm90IGFsbG93ZWQuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAvLyBGaW5hbGx5LCByZXNldCB0aGUgYmxhbmsgY291bnRlcgotICAgICAgICAgICAg
ICAgICAgICBibGFua0NvdW50ZXIgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gd2hpbGUgKGN1cnJlbnRMb2NhdGlvbiAhPT0gLTEpOwotICAgICAgICB9Ci0gICAgfTsKLQot
fTsKLQotfSx7fV0sODM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0g
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIHJlLWFzc2lnbmluZyBuYXRpdmUgb2Jq
ZWN0cwotICogQGF1dGhvciBJbHlhIFZvbG9kaW4KLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQot
ICAgIHZhciBuYXRpdmVPYmplY3RzID0gWyJBcnJheSIsICJCb29sZWFuIiwgIkRhdGUiLCAiZGVj
b2RlVVJJIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJkZWNvZGVVUklDb21wb25lbnQiLCAi
ZW5jb2RlVVJJIiwgImVuY29kZVVSSUNvbXBvbmVudCIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAiRXJyb3IiLCAiZXZhbCIsICJFdmFsRXJyb3IiLCAiRnVuY3Rpb24iLCAiaXNGaW5pdGUiLAot
ICAgICAgICAgICAgICAgICAgICAgICAgImlzTmFOIiwgIkpTT04iLCAiTWF0aCIsICJOdW1iZXIi
LCAiT2JqZWN0IiwgInBhcnNlSW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJwYXJzZUZs
b2F0IiwgIlJhbmdlRXJyb3IiLCAiUmVmZXJlbmNlRXJyb3IiLCAiUmVnRXhwIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICJTdHJpbmciLCAiU3ludGF4RXJyb3IiLCAiVHlwZUVycm9yIiwgIlVS
SUVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJNYXAiLCAiTmFOIiwgIlNldCIsICJX
ZWFrTWFwIiwgIkluZmluaXR5IiwgInVuZGVmaW5lZCJdOwotCi0gICAgcmV0dXJuIHsKLQotICAg
ICAgICAiQXNzaWdubWVudEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAg
ICBpZiAobmF0aXZlT2JqZWN0cy5pbmRleE9mKG5vZGUubGVmdC5uYW1lKSA+PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgbm9kZS5sZWZ0Lm5hbWUgKyAiIGlzIGEg
cmVhZC1vbmx5IG5hdGl2ZSBvYmplY3QuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRvciI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAg
ICAgIGlmIChuYXRpdmVPYmplY3RzLmluZGV4T2Yobm9kZS5pZC5uYW1lKSA+PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZGVmaW5pdGlvbiBvZiAne3tuYXRp
dmVPYmplY3R9fScuIiwgeyBuYXRpdmVPYmplY3Q6IG5vZGUuaWQubmFtZSB9KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDg0OltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBBIHJ1bGUgdG8gZGlz
YWxsb3cgbmVnYXRlZCBsZWZ0IG9wZXJhbmRzIG9mIHRoZSBgaW5gIG9wZXJhdG9yCi0gKiBAYXV0
aG9yIE1pY2hhZWwgRmljYXJyYQotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBS
dWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJu
IHsKLQotICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAg
ICAgICAgIGlmIChub2RlLm9wZXJhdG9yID09PSAiaW4iICYmIG5vZGUubGVmdC50eXBlID09PSAi
VW5hcnlFeHByZXNzaW9uIiAmJiBub2RlLmxlZnQub3BlcmF0b3IgPT09ICIhIikgewotICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUaGUgYGluYCBleHByZXNzaW9uJ3MgbGVm
dCBvcGVyYW5kIGlzIG5lZ2F0ZWQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07
Ci0KLX07Ci0KLX0se31dLDg1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8q
KgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgbmVzdGVkIHRlcm5hcnkgZXhwcmVzc2lv
bnMKLSAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycwotICovCi0KLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3Qi
OwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGZ1bmN0
aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLmFsdGVybmF0ZS50eXBlID09PSAiQ29u
ZGl0aW9uYWxFeHByZXNzaW9uIiB8fAotICAgICAgICAgICAgICAgICAgICBub2RlLmNvbnNlcXVl
bnQudHlwZSA9PT0gIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiIpIHsKLSAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiRG8gbm90IG5lc3QgdGVybmFyeSBleHByZXNzaW9ucyIpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLX07Ci0KLX0se31dLDg2OltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRv
IGZsYWcgd2hlbiB1c2luZyBuZXcgRnVuY3Rpb24KLSAqIEBhdXRob3IgSWx5YSBWb2xvZGluCi0g
Ki8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJOZXdFeHBy
ZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLm5h
bWUgPT09ICJGdW5jdGlvbiIpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiVGhlIEZ1bmN0aW9uIGNvbnN0cnVjdG9yIGlzIGV2YWwuIik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSw4NzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgQSBydWxlIHRvIGRpc2FsbG93IGNh
bGxzIHRvIHRoZSBPYmplY3QgY29uc3RydWN0b3IKLSAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0
dHA6Ly93d3cubWF0dGR1dmFsbC5jb20vPgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAg
cmV0dXJuIHsKLQotICAgICAgICAiTmV3RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAg
ICAgICAgICAgIGlmIChub2RlLmNhbGxlZS5uYW1lID09PSAiT2JqZWN0IikgewotICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUaGUgb2JqZWN0IGxpdGVyYWwgbm90YXRpb24g
e30gaXMgcHJlZmVycmFibGUuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Owot
Ci19OwotCi19LHt9XSw4ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioK
LSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBkaXNhbGxvdyB1c2Ugb2YgbmV3IG9wZXJhdG9yIHdp
dGggdGhlIGByZXF1aXJlYCBmdW5jdGlvbgotICogQGF1dGhvciBXaWwgTW9vcmUgSUlJCi0gKi8K
LQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0K
LSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJOZXdFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUg
PT09ICJJZGVudGlmaWVyIiAmJiBub2RlLmNhbGxlZS5uYW1lID09PSAicmVxdWlyZSIpIHsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCB1c2Ugb2YgbmV3
IHdpdGggcmVxdWlyZS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07
Ci0KLX0se31dLDg5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICog
QGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiB1c2luZyBjb25zdHJ1Y3RvciBmb3Igd3Jh
cHBlciBvYmplY3RzCi0gKiBAYXV0aG9yIElseWEgVm9sb2RpbgotICovCi0KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJp
Y3QiOwotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiTmV3RXhwcmVzc2lvbiI6IGZ1bmN0aW9u
KG5vZGUpIHsKLSAgICAgICAgICAgIHZhciB3cmFwcGVyT2JqZWN0cyA9IFsiU3RyaW5nIiwgIk51
bWJlciIsICJCb29sZWFuIiwgIk1hdGgiLCAiSlNPTiJdOwotICAgICAgICAgICAgaWYgKHdyYXBw
ZXJPYmplY3RzLmluZGV4T2Yobm9kZS5jYWxsZWUubmFtZSkgPiAtMSkgewotICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJEbyBub3QgdXNlIHt7Zm59fSBhcyBhIGNvbnN0cnVj
dG9yLiIsIHsgZm46IG5vZGUuY2FsbGVlLm5hbWUgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9OwotCi19OwotCi19LHt9XSw5MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHN0YXRlbWVudHMgd2l0
aCBmdW5jdGlvbiBpbnZvY2F0aW9uIHByZWNlZGVkIGJ5Ci0gKiAibmV3IiBhbmQgbm90IHBhcnQg
b2YgYXNzaWdubWVudAotICogQGF1dGhvciBJbHlhIFZvbG9kaW4KLSAqLwotCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3Ry
aWN0IjsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIkV4cHJlc3Npb25TdGF0ZW1lbnQiOiBm
dW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIGlmIChub2RlLmV4cHJlc3Npb24udHlwZSA9
PT0gIk5ld0V4cHJlc3Npb24iKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIkRvIG5vdCB1c2UgJ25ldycgZm9yIHNpZGUgZWZmZWN0cy4iKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDkxOltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9m
IGFuIG9iamVjdCBwcm9wZXJ0eSBvZiB0aGUgZ2xvYmFsIG9iamVjdCAoTWF0aCBhbmQgSlNPTikg
YXMgYSBmdW5jdGlvbgotICogQGF1dGhvciBKYW1lcyBBbGxhcmRpY2UKLSAqLwotCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ug
c3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0gICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1bmN0
aW9uKG5vZGUpIHsKLQotICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICJJZGVu
dGlmaWVyIikgewotICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbm9kZS5jYWxsZWUubmFtZTsK
LSAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gIk1hdGgiIHx8IG5hbWUgPT09ICJKU09OIikg
ewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiJ3t7bmFtZX19JyBp
cyBub3QgYSBmdW5jdGlvbi4iLCB7IG5hbWU6IG5hbWUgfSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sOTI6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gZmxhZyBvY3RhbCBlc2NhcGUgc2VxdWVuY2VzIGluIHN0cmluZyBsaXRlcmFscy4KLSAqIEBh
dXRob3IgSWFuIENocmlzdGlhbiBNeWVycwotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAg
cmV0dXJuIHsKLQotICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAg
ICAgIGlmICh0eXBlb2Ygbm9kZS52YWx1ZSAhPT0gInN0cmluZyIpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgbWF0Y2ggPSBub2RlLnJh
dy5tYXRjaCgvXihbXlxcXXxcXFteMC03XSkqXFwoWzAtN10pLyksCi0gICAgICAgICAgICAgICAg
b2N0YWxEaWdpdDsKLQotICAgICAgICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgICAgICAgICAg
b2N0YWxEaWdpdCA9IG1hdGNoWzJdOwotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJEb24ndCB1c2Ugb2N0YWw6ICdcXHt7b2N0YWxEaWdpdH19Jy4gVXNlICdcXHUuLi4uJyBp
bnN0ZWFkLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB7IG9jdGFsRGlnaXQ6IG9jdGFsRGln
aXQgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIH07Ci0KLX07Ci0KLX0se31d
LDkzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVy
dmlldyBSdWxlIHRvIGZsYWcgd2hlbiBpbml0aWFsaXppbmcgb2N0YWwgbGl0ZXJhbAotICogQGF1
dGhvciBJbHlhIFZvbG9kaW4KLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVs
ZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7
Ci0KLSAgICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBpZiAo
dHlwZW9mIG5vZGUudmFsdWUgPT09ICJudW1iZXIiICYmIC9eMFswLTddLy50ZXN0KG5vZGUucmF3
KSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJPY3RhbCBsaXRlcmFs
cyBzaG91bGQgbm90IGJlIHVzZWQuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
OwotCi19OwotCi19LHt9XSw5NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0v
KioKLSAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgc3RyaW5nIGNvbmNhdGVuYXRpb24gd2hlbiB1
c2luZyBfX2Rpcm5hbWUgYW5kIF9fZmlsZW5hbWUKLSAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFr
YXMKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVs
ZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHZhciBNQVRDSEVSID0gL15fXyg/OmRpcnxmaWxl
KW5hbWUkLzsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMKLSAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJCaW5hcnlFeHBy
ZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICB2YXIgbGVmdCA9IG5vZGUu
bGVmdCwKLSAgICAgICAgICAgICAgICByaWdodCA9IG5vZGUucmlnaHQ7Ci0KLSAgICAgICAgICAg
IGlmIChub2RlLm9wZXJhdG9yID09PSAiKyIgJiYKLSAgICAgICAgICAgICAgICAgICAgKChsZWZ0
LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiBNQVRDSEVSLnRlc3QobGVmdC5uYW1lKSkgfHwKLSAg
ICAgICAgICAgICAgICAgICAgKHJpZ2h0LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiBNQVRDSEVS
LnRlc3QocmlnaHQubmFtZSkpKQotICAgICAgICAgICAgKSB7Ci0KLSAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiVXNlIHBhdGguam9pbigpIG9yIHBhdGgucmVzb2x2ZSgpIGlu
c3RlYWQgb2YgKyB0byBjcmVhdGUgcGF0aHMuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgIH07Ci0KLX07Ci0KLX0se31dLDk1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIHVuYXJ5IGlu
Y3JlbWVudCBhbmQgZGVjcmVtZW50IG9wZXJhdG9ycy4KLSAqIEBhdXRob3IgSWFuIENocmlzdGlh
biBNeWVycwotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRp
b24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24o
Y29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQotICAgICAg
ICAiVXBkYXRlRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJVbmFyeSBvcGVyYXRvciAnIiArIG5vZGUub3BlcmF0b3IgKyAiJyB1
c2VkLiIpOwotICAgICAgICB9Ci0KLSAgICB9OwotCi19OwotCi19LHt9XSw5NjpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cg
dGhlIHVzZSBvZiBwcm9jZXNzLmVudigpCi0gKiBAYXV0aG9yIFZpZ25lc2ggQW5hbmQKLSAqIEBj
b3B5cmlnaHQgMjAxNCBWaWduZXNoIEFuYW5kLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICovCi0i
dXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRp
b24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24o
Y29udGV4dCkgewotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6
IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZhciBvYmplY3ROYW1lID0gbm9kZS5vYmpl
Y3QubmFtZSwKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBub2RlLnByb3BlcnR5Lm5h
bWU7Ci0KLSAgICAgICAgICAgIGlmIChvYmplY3ROYW1lID09PSAicHJvY2VzcyIgJiYgIW5vZGUu
Y29tcHV0ZWQgJiYgcHJvcGVydHlOYW1lICYmIHByb3BlcnR5TmFtZSA9PT0gImVudiIpIHsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCB1c2Ugb2YgcHJv
Y2Vzcy5lbnYuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgfTsKLQotfTsK
LQotfSx7fV0sOTc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBA
ZmlsZW92ZXJ2aWV3IERpc2FsbG93IHRoZSB1c2Ugb2YgcHJvY2Vzcy5leGl0KCkKLSAqIEBhdXRo
b3IgTmljaG9sYXMgQy4gWmFrYXMKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLSAgICAvLyBQdWJsaWMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBy
ZXR1cm4gewotCi0gICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAg
ICAgICAgICAgIHZhciBjYWxsZWUgPSBub2RlLmNhbGxlZTsKLQotICAgICAgICAgICAgaWYgKGNh
bGxlZS50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIgJiYgY2FsbGVlLm9iamVjdC5uYW1lID09
PSAicHJvY2VzcyIgJiYKLSAgICAgICAgICAgICAgICBjYWxsZWUucHJvcGVydHkubmFtZSA9PT0g
ImV4aXQiCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiRG9uJ3QgdXNlIHByb2Nlc3MuZXhpdCgpOyB0aHJvdyBhbiBlcnJvciBpbnN0ZWFkLiIp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9OwotCi19OwotCi19LHt9XSw5ODpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcg
UnVsZSB0byBmbGFnIHVzYWdlIG9mIF9fcHJvdG9fXyBwcm9wZXJ0eQotICogQGF1dGhvciBJbHlh
IFZvbG9kaW4KLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0
aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0KLSAgICAg
ICAgIk1lbWJlckV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIGlm
IChub2RlLnByb3BlcnR5ICYmCi0gICAgICAgICAgICAgICAgICAgIChub2RlLnByb3BlcnR5LnR5
cGUgPT09ICJJZGVudGlmaWVyIiAmJiBub2RlLnByb3BlcnR5Lm5hbWUgPT09ICJfX3Byb3RvX18i
ICYmICFub2RlLmNvbXB1dGVkKSB8fAotICAgICAgICAgICAgICAgICAgICAobm9kZS5wcm9wZXJ0
eS50eXBlID09PSAiTGl0ZXJhbCIgJiYgbm9kZS5wcm9wZXJ0eS52YWx1ZSA9PT0gIl9fcHJvdG9f
XyIpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoZSAnX19wcm90
b19fJyBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sOTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIHRoZSBzYW1lIHZh
cmlhYmxlIGlzIGRlY2xhcmVkIG1vcmUgdGhlbiBvbmNlLgotICogQGF1dGhvciBJbHlhIFZvbG9k
aW4KLSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGZ1bmN0aW9uIGZpbmRWYXJpYWJsZXMo
KSB7Ci0gICAgICAgIHZhciBzY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKTsKLQotICAgICAgICBz
Y29wZS52YXJpYWJsZXMuZm9yRWFjaChmdW5jdGlvbih2YXJpYWJsZSkgewotICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLmlkZW50aWZpZXJzICYmIHZhcmlhYmxlLmlkZW50aWZpZXJzLmxlbmd0aCA+
IDEpIHsKLSAgICAgICAgICAgICAgICB2YXJpYWJsZS5pZGVudGlmaWVycy5zb3J0KGZ1bmN0aW9u
KGEsIGIpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEucmFuZ2VbMV0gLSBiLnJhbmdl
WzFdOwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDEsIGwgPSB2YXJpYWJsZS5pZGVudGlmaWVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQodmFyaWFibGUuaWRlbnRpZmllcnNbaV0sICJ7
e2F9fSBpcyBhbHJlYWR5IGRlZmluZWQiLCB7YTogdmFyaWFibGUubmFtZX0pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHsKLSAgICAgICAgIlByb2dyYW0iOiBmaW5kVmFyaWFibGVzLAotICAgICAgICAiRnVuY3Rpb25F
eHByZXNzaW9uIjogZmluZFZhcmlhYmxlcywKLSAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24i
OiBmaW5kVmFyaWFibGVzCi0gICAgfTsKLX07Ci0KLX0se31dLDEwMDpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBjb3VudCBt
dWx0aXBsZSBzcGFjZXMgaW4gcmVndWxhciBleHByZXNzaW9ucwotICogQGF1dGhvciBNYXR0IER1
VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbS8+Ci0gKi8KLQotLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7
Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgewot
ICAgICAgICAgICAgdmFyIHRva2VuID0gY29udGV4dC5nZXRGaXJzdFRva2Vucyhub2RlLCAxKVsw
XSwKLSAgICAgICAgICAgICAgICBub2RlVHlwZSA9IHRva2VuLnR5cGUsCi0gICAgICAgICAgICAg
ICAgbm9kZVZhbHVlID0gdG9rZW4udmFsdWUsCi0gICAgICAgICAgICAgICAgbXVsdGlwbGVTcGFj
ZXNSZWdleCA9IC8oIHsyLH0pKz8vLAotICAgICAgICAgICAgICAgIHJlZ2V4UmVzdWx0czsKLQot
ICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09PSAiUmVndWxhckV4cHJlc3Npb24iKSB7Ci0gICAg
ICAgICAgICAgICAgcmVnZXhSZXN1bHRzID0gbXVsdGlwbGVTcGFjZXNSZWdleC5leGVjKG5vZGVW
YWx1ZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVnZXhSZXN1bHRzICE9PSBudWxsKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJTcGFjZXMgYXJlIGhhcmQg
dG8gY291bnQuIFVzZSB7IiArIHJlZ2V4UmVzdWx0c1swXS5sZW5ndGggKyAifS4iKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19
LHt9XSwxMDE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmls
ZW92ZXJ2aWV3IFJ1bGUgdG8gZGlzYWxsb3cgcmVzZXJ2ZWQgd29yZHMgYmVpbmcgdXNlZCBhcyBr
ZXlzCi0gKiBAYXV0aG9yIEVtaWwgQmF5Ci0gKiBAY29weXJpZ2h0IDIwMTQgRW1pbCBCYXkuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1
bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB2YXIgTUVT
U0FHRSA9ICJSZXNlcnZlZCB3b3JkICd7e2tleX19JyB1c2VkIGFzIGtleS4iOwotCi0gICAgdmFy
IHJlc2VydmVkV29yZHMgPSBbCi0gICAgICAgICJhYnN0cmFjdCIsCi0gICAgICAgICJib29sZWFu
IiwgImJyZWFrIiwgImJ5dGUiLAotICAgICAgICAiY2FzZSIsICJjYXRjaCIsICJjaGFyIiwgImNs
YXNzIiwgImNvbnN0IiwgImNvbnRpbnVlIiwKLSAgICAgICAgImRlYnVnZ2VyIiwgImRlZmF1bHQi
LCAiZGVsZXRlIiwgImRvIiwgImRvdWJsZSIsCi0gICAgICAgICJlbHNlIiwgImVudW0iLCAiZXhw
b3J0IiwgImV4dGVuZHMiLAotICAgICAgICAiZmluYWwiLCAiZmluYWxseSIsICJmbG9hdCIsICJm
b3IiLCAiZnVuY3Rpb24iLAotICAgICAgICAiZ290byIsCi0gICAgICAgICJpZiIsICJpbXBsZW1l
bnRzIiwgImltcG9ydCIsICJpbiIsICJpbnN0YW5jZW9mIiwgImludCIsICJpbnRlcmZhY2UiLAot
ICAgICAgICAibG9uZyIsCi0gICAgICAgICJuYXRpdmUiLCAibmV3IiwKLSAgICAgICAgInBhY2th
Z2UiLCAicHJpdmF0ZSIsICJwcm90ZWN0ZWQiLCAicHVibGljIiwKLSAgICAgICAgInJldHVybiIs
Ci0gICAgICAgICJzaG9ydCIsICJzdGF0aWMiLCAic3VwZXIiLCAic3dpdGNoIiwgInN5bmNocm9u
aXplZCIsCi0gICAgICAgICJ0aGlzIiwgInRocm93IiwgInRocm93cyIsICJ0cmFuc2llbnQiLCAi
dHJ5IiwgInR5cGVvZiIsCi0gICAgICAgICJ2YXIiLCAidm9pZCIsICJ2b2xhdGlsZSIsCi0gICAg
ICAgICJ3aGlsZSIsICJ3aXRoIgotICAgIF07Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJP
YmplY3RFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgbm9kZS5wcm9w
ZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocHJvcGVydHkpIHsKLQotICAgICAgICAgICAgICAgIGlm
IChwcm9wZXJ0eS5rZXkudHlwZSA9PT0gIklkZW50aWZpZXIiKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBrZXlOYW1lID0gcHJvcGVydHkua2V5Lm5hbWU7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHJlc2VydmVkV29yZHMuaW5kZXhPZigiIiArIGtleU5hbWUpICE9PSAtMSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgTUVTU0FHRSwgeyBrZXk6
IGtleU5hbWUgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSwxMDI6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3
IFJlc3RyaWN0IHVzYWdlIG9mIHNwZWNpZmllZCBub2RlIG1vZHVsZXMuCi0gKiBAYXV0aG9yIENo
cmlzdGlhbiBTY2h1bHoKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7Ci0gICAgLy8gdHJpbSByZXN0cmljdGVk
IG1vZHVsZSBuYW1lcwotICAgIHZhciByZXN0cmljdGVkTW9kdWxlcyA9IGNvbnRleHQub3B0aW9u
czsKLQotICAgIC8vIGlmIG5vIG1vZHVsZXMgYXJlIHJlc3RyaWN0ZWQgd2UgZG9uJ3QgbmVlZCB0
byBjaGVjayB0aGUgQ2FsbEV4cHJlc3Npb25zCi0gICAgaWYgKHJlc3RyaWN0ZWRNb2R1bGVzLmxl
bmd0aCA9PT0gMCkgewotICAgICAgICByZXR1cm4ge307Ci0gICAgfQotCi0gICAgLyoqCi0gICAg
ICogRnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBub2RlIGlzIGEgc3RyaW5nIGxpdGVyYWwuCi0gICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgotICAgICAqIEByZXR1
cm5zIHtib29sZWFufSBJZiB0aGUgbm9kZSBpcyBhIHN0cmluZyBsaXRlcmFsLgotICAgICAqLwot
ICAgIGZ1bmN0aW9uIGlzU3RyaW5nKG5vZGUpIHsKLSAgICAgICAgcmV0dXJuIG5vZGUgJiYgbm9k
ZS50eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9mIG5vZGUudmFsdWUgPT09ICJzdHJpbmciOwot
ICAgIH0KLQotICAgIC8qKgotICAgICAqIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgbm9kZSBpcyBh
IHJlcXVpcmUgY2FsbC4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8g
Y2hlY2suCi0gICAgICogQHJldHVybnMge2Jvb2xlYW59IElmIHRoZSBub2RlIGlzIGEgcmVxdWly
ZSBjYWxsLgotICAgICAqLwotICAgIGZ1bmN0aW9uIGlzUmVxdWlyZUNhbGwobm9kZSkgewotICAg
ICAgICByZXR1cm4gbm9kZS5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIG5vZGUuY2Fs
bGVlLm5hbWUgPT09ICJyZXF1aXJlIjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGdW5jdGlv
biB0byBjaGVjayBpZiBhIG5vZGUgaGFzIGFuIGFyZ3VtZW50IHRoYXQgaXMgYW4gcmVzdHJpY3Rl
ZCBtb2R1bGUgYW5kIHJldHVybiBpdHMgbmFtZS4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5v
ZGUgVGhlIG5vZGUgdG8gY2hlY2sKLSAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfFN0cmluZ30g
cmVzdHJpY3RlZCBtb2R1bGUgbmFtZSBvciB1bmRlZmluZWQgaWYgbm9kZSBhcmd1bWVudCBpc24n
dCByZXN0cmljdGVkLgotICAgICAqLwotICAgIGZ1bmN0aW9uIGdldFJlc3RyaWN0ZWRNb2R1bGVO
YW1lKG5vZGUpIHsKLSAgICAgICAgdmFyIG1vZHVsZU5hbWU7Ci0KLSAgICAgICAgLy8gbm9kZSBo
YXMgYXJndW1lbnRzIGFuZCBmaXJzdCBhcmd1bWVudCBpcyBzdHJpbmcKLSAgICAgICAgaWYgKG5v
ZGUuYXJndW1lbnRzLmxlbmd0aCAmJiBpc1N0cmluZyhub2RlLmFyZ3VtZW50c1swXSkpIHsKLSAg
ICAgICAgICAgIHZhciBhcmd1bWVudFZhbHVlID0gbm9kZS5hcmd1bWVudHNbMF0udmFsdWUudHJp
bSgpOwotCi0gICAgICAgICAgICAvLyBjaGVjayBpZiBhcmd1bWVudCB2YWx1ZSBpcyBpbiByZXN0
cmljdGVkIG1vZHVsZXMgYXJyYXkKLSAgICAgICAgICAgIGlmIChyZXN0cmljdGVkTW9kdWxlcy5p
bmRleE9mKGFyZ3VtZW50VmFsdWUpICE9PSAtMSkgewotICAgICAgICAgICAgICAgIG1vZHVsZU5h
bWUgPSBhcmd1bWVudFZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIG1vZHVsZU5hbWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIkNhbGxF
eHByZXNzaW9uIjogZnVuY3Rpb24gKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChpc1JlcXVpcmVD
YWxsKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3RyaWN0ZWRNb2R1bGVOYW1lID0g
Z2V0UmVzdHJpY3RlZE1vZHVsZU5hbWUobm9kZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVz
dHJpY3RlZE1vZHVsZU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIid7e21vZHVsZU5hbWV9fScgbW9kdWxlIGlzIHJlc3RyaWN0ZWQgZnJvbSBiZWluZyB1
c2VkLiIsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IHJlc3RyaWN0ZWRN
b2R1bGVOYW1lCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci19OwotCi19LHt9XSwxMDM6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyB3aGVuIHJldHVybiBzdGF0ZW1lbnQgY29udGFpbnMgYXNzaWdubWVudAotICogQGF1dGhv
ciBJbHlhIFZvbG9kaW4KLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHJldHVybiB7Ci0KLSAgICAg
ICAgIlJldHVyblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChu
b2RlLmFyZ3VtZW50ICYmIG5vZGUuYXJndW1lbnQudHlwZSA9PT0gIkFzc2lnbm1lbnRFeHByZXNz
aW9uIikgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZXR1cm4gc3Rh
dGVtZW50IHNob3VsZCBub3QgY29udGFpbiBhc3NpZ25tZW50LiIpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sMTA0OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiB1
c2luZyBqYXZhc2NyaXB0OiB1cmxzCi0gKiBAYXV0aG9yIElseWEgVm9sb2RpbgotICovCi0vKmpz
aGludCBzY3JpcHR1cmw6IHRydWUgKi8KLS8qZXNsaW50IG5vLXNjcmlwdC11cmw6IDAqLwotCi0i
dXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRp
b24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24o
Y29udGV4dCkgewotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9u
KG5vZGUpIHsKLQotICAgICAgICAgICAgdmFyIHZhbHVlOwotCi0gICAgICAgICAgICBpZiAobm9k
ZS52YWx1ZSAmJiB0eXBlb2Yobm9kZS52YWx1ZSkgPT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAg
ICAgICAgdmFsdWUgPSBub2RlLnZhbHVlLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodmFsdWUuaW5kZXhPZigiamF2YXNjcmlwdDoiKSA9PT0gMCkgewotICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiU2NyaXB0IFVSTCBpcyBhIGZvcm0gb2YgZXZh
bC4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
OwotCi19OwotCi19LHt9XSwxMDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewot
LyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBjb21wYXJpc29uIHdoZXJlIGxlZnQg
cGFydCBpcyB0aGUgc2FtZSBhcyB0aGUgcmlnaHQKLSAqIHBhcnQuCi0gKiBAYXV0aG9yIElseWEg
Vm9sb2RpbgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRp
b24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24o
Y29udGV4dCkgewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAg
IkJpbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YXIgb3Bl
cmF0b3JzID0gWyI9PT0iLCAiPT0iLCAiIT09IiwgIiE9IiwgIj4iLCAiPCIsICI+PSIsICI8PSJd
OwotICAgICAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKG5vZGUub3BlcmF0b3IpID4gLTEg
JiYKLSAgICAgICAgICAgICAgICAobm9kZS5sZWZ0LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiBu
b2RlLnJpZ2h0LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiBub2RlLmxlZnQubmFtZSA9PT0gbm9k
ZS5yaWdodC5uYW1lIHx8Ci0gICAgICAgICAgICAgICAgbm9kZS5sZWZ0LnR5cGUgPT09ICJMaXRl
cmFsIiAmJiBub2RlLnJpZ2h0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLmxlZnQudmFsdWUg
PT09IG5vZGUucmlnaHQudmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIkNvbXBhcmluZyB0byBpdHNlbGYgaXMgcG90ZW50aWFsbHkgcG9pbnRsZXNzLiIpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sMTA2OltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxl
IHRvIGZsYWcgdXNlIG9mIGNvbW1hIG9wZXJhdG9yCi0gKiBAYXV0aG9yIEJyYW5kb24gTWlsbHMK
LSAqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIC8qKgotICAgICAqIFBhcnRzIG9mIHRoZSBn
cmFtbWFyIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGhhdmUgcGFyZW5zLgotICAgICAqLwotICAgIHZh
ciBwYXJlbnRoZXNpemVkID0gewotICAgICAgICAiRG9XaGlsZVN0YXRlbWVudCI6ICJ0ZXN0IiwK
LSAgICAgICAgIklmU3RhdGVtZW50IjogInRlc3QiLAotICAgICAgICAiU3dpdGNoU3RhdGVtZW50
IjogImRpc2NyaW1pbmFudCIsCi0gICAgICAgICJXaGlsZVN0YXRlbWVudCI6ICJ0ZXN0IiwKLSAg
ICAgICAgIldpdGhTdGF0ZW1lbnQiOiAib2JqZWN0IgotCi0gICAgICAgIC8vIE9taXR0aW5nIENh
bGxFeHByZXNzaW9uIC0gY29tbWFzIGFyZSBwYXJzZWQgYXMgYXJndW1lbnQgc2VwYXJhdG9ycwot
ICAgICAgICAvLyBPbWl0dGluZyBOZXdFeHByZXNzaW9uIC0gY29tbWFzIGFyZSBwYXJzZWQgYXMg
YXJndW1lbnQgc2VwYXJhdG9ycwotICAgICAgICAvLyBPbWl0dGluZyBGb3JJblN0YXRlbWVudCAt
IHBhcnRzIGFyZW4ndCBpbmRpdmlkdWFsbHkgcGFyZW50aGVzaXNlZAotICAgICAgICAvLyBPbWl0
dGluZyBGb3JTdGF0ZW1lbnQgLSBwYXJ0cyBhcmVuJ3QgaW5kaXZpZHVhbGx5IHBhcmVudGhlc2lz
ZWQKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgbm9kZSBp
cyByZXF1aXJlZCBieSB0aGUgZ3JhbW1hciB0byBiZSB3cmFwcGVkIGluCi0gICAgICogcGFyZW5z
LCBlLmcuIHRoZSB0ZXN0IG9mIGFuIGlmIHN0YXRlbWVudC4KLSAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IG5vZGUgLSBUaGUgQVNUIG5vZGUKLSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBp
ZiBwYXJlbnMgYXJvdW5kIG5vZGUgYmVsb25nIHRvIHBhcmVudCBub2RlLgotICAgICAqLwotICAg
IGZ1bmN0aW9uIHJlcXVpcmVzRXh0cmFQYXJlbnMobm9kZSkgewotICAgICAgICByZXR1cm4gbm9k
ZS5wYXJlbnQgJiYgcGFyZW50aGVzaXplZFtub2RlLnBhcmVudC50eXBlXSAhPSBudWxsICYmCi0g
ICAgICAgICAgICAgICAgbm9kZSA9PT0gbm9kZS5wYXJlbnRbcGFyZW50aGVzaXplZFtub2RlLnBh
cmVudC50eXBlXV07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2sgaWYgYSBub2RlIGlz
IHdyYXBwZWQgaW4gcGFyZW5zLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBB
U1Qgbm9kZQotICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBub2RlIGhhcyBh
IHBhcmVuIG9uIGVhY2ggc2lkZS4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBpc1BhcmVudGhlc2lz
ZWQobm9kZSkgewotICAgICAgICB2YXIgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5C
ZWZvcmUobm9kZSksCi0gICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0
ZXIobm9kZSk7Ci0KLSAgICAgICAgcmV0dXJuIHByZXZpb3VzVG9rZW4gJiYgbmV4dFRva2VuICYm
Ci0gICAgICAgICAgICBwcmV2aW91c1Rva2VuLnZhbHVlID09PSAiKCIgJiYgcHJldmlvdXNUb2tl
bi5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdICYmCi0gICAgICAgICAgICBuZXh0VG9rZW4udmFs
dWUgPT09ICIpIiAmJiBuZXh0VG9rZW4ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXTsKLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBDaGVjayBpZiBhIG5vZGUgaXMgd3JhcHBlZCBpbiB0d28gbGV2
ZWxzIG9mIHBhcmVucy4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBUaGUgQVNUIG5v
ZGUKLSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0d28gcGFyZW5zIHN1cnJvdW5k
IHRoZSBub2RlIG9uIGVhY2ggc2lkZS4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBpc1BhcmVudGhl
c2lzZWRUd2ljZShub2RlKSB7Ci0gICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0gY29udGV4dC5n
ZXRUb2tlbkJlZm9yZShub2RlLCAxKSwKLSAgICAgICAgICAgIG5leHRUb2tlbiA9IGNvbnRleHQu
Z2V0VG9rZW5BZnRlcihub2RlLCAxKTsKLQotICAgICAgICByZXR1cm4gaXNQYXJlbnRoZXNpc2Vk
KG5vZGUpICYmIHByZXZpb3VzVG9rZW4gJiYgbmV4dFRva2VuICYmCi0gICAgICAgICAgICBwcmV2
aW91c1Rva2VuLnZhbHVlID09PSAiKCIgJiYgcHJldmlvdXNUb2tlbi5yYW5nZVsxXSA8PSBub2Rl
LnJhbmdlWzBdICYmCi0gICAgICAgICAgICBuZXh0VG9rZW4udmFsdWUgPT09ICIpIiAmJiBuZXh0
VG9rZW4ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gewot
ICAgICAgICAiU2VxdWVuY2VFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAg
ICAgLy8gQWx3YXlzIGFsbG93IHNlcXVlbmNlcyBpbiBmb3Igc3RhdGVtZW50IHVwZGF0ZQotICAg
ICAgICAgICAgaWYgKG5vZGUucGFyZW50LnR5cGUgPT09ICJGb3JTdGF0ZW1lbnQiICYmCi0gICAg
ICAgICAgICAgICAgICAgIChub2RlID09PSBub2RlLnBhcmVudC5pbml0IHx8IG5vZGUgPT09IG5v
ZGUucGFyZW50LnVwZGF0ZSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFdyYXBwaW5nIGEgc2VxdWVuY2UgaW4gZXh0cmEgcGFyZW5z
IGluZGljYXRlcyBpbnRlbnQKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc0V4dHJhUGFyZW5zKG5v
ZGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9kZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQg
dXNlIG9mIGNvbW1hIG9wZXJhdG9yLiIpOwotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7
fV0sMTA3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVv
dmVydmlldyBEaXNhbGxvdyBzaGFkb3dpbmcgb2YgTmFOLCB1bmRlZmluZWQsIGFuZCBJbmZpbml0
eSAoRVM1IHNlY3Rpb24gMTUuMS4xKQotICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEKLSAqLwot
InVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0
aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKLQotICAgIHZhciBSRVNUUklDVEVEID0gWyJ1bmRlZmluZWQiLCAiTmFOIiwg
IkluZmluaXR5IiwgImFyZ3VtZW50cyIsICJldmFsIl07Ci0KLSAgICBmdW5jdGlvbiBjaGVja0Zv
clZpb2xhdGlvbihpZCkgewotICAgICAgICBpZiAoUkVTVFJJQ1RFRC5pbmRleE9mKGlkLm5hbWUp
ID4gLTEpIHsKLSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGlkLCAiU2hhZG93aW5nIG9mIGds
b2JhbCBwcm9wZXJ0eSBcIiIgKyBpZC5uYW1lICsgIlwiLiIpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRvciI6IGZ1bmN0aW9uKG5v
ZGUpIHsKLSAgICAgICAgICAgIGNoZWNrRm9yVmlvbGF0aW9uKG5vZGUuaWQpOwotICAgICAgICB9
LAotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAg
ICAgICAgaWYgKG5vZGUuaWQpIHsKLSAgICAgICAgICAgICAgICBjaGVja0ZvclZpb2xhdGlvbihu
b2RlLmlkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFtdLm1hcC5jYWxsKG5vZGUucGFy
YW1zLCBjaGVja0ZvclZpb2xhdGlvbik7Ci0gICAgICAgIH0sCi0gICAgICAgICJGdW5jdGlvbkRl
Y2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgY2hlY2tGb3JWaW9sYXRp
b24obm9kZS5pZCk7Ci0gICAgICAgICAgICBbXS5tYXAuY2FsbChub2RlLnBhcmFtcywgY2hlY2tG
b3JWaW9sYXRpb24pOwotICAgICAgICB9LAotICAgICAgICAiQ2F0Y2hDbGF1c2UiOiBmdW5jdGlv
bihub2RlKSB7Ci0gICAgICAgICAgICBjaGVja0ZvclZpb2xhdGlvbihub2RlLnBhcmFtKTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDEwODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIG9uIGRlY2xh
cmluZyB2YXJpYWJsZXMgYWxyZWFkeSBkZWNsYXJlZCBpbiB0aGUgb3V0ZXIgc2NvcGUKLSAqIEBh
dXRob3IgSWx5YSBWb2xvZGluCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1
bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAvKioKLSAg
ICAgKiBDaGVja3MgaWYgYSB2YXJpYWJsZSBpcyBjb250YWluZWQgaW4gdGhlIGxpc3Qgb2YgZ2l2
ZW4gc2NvcGUgdmFyaWFibGVzLgotICAgICAqIEBwYXJhbSB7T2JqZWN0fSB2YXJpYWJsZSBUaGUg
dmFyaWFibGUgdG8gY2hlY2suCi0gICAgICogQHBhcmFtIHtBcnJheX0gc2NvcGVWYXJzIFRoZSBz
Y29wZSB2YXJpYWJsZXMgdG8gbG9vayBmb3IuCi0gICAgICogQHJldHVybnMge2Jvb2xlYW59IFdo
ZXRoZXIgb3Igbm90IHRoZSB2YXJpYWJsZSBpcyBjb250YWlucyBpbiB0aGUgbGlzdCBvZiBzY29w
ZSB2YXJpYWJsZXMuCi0gICAgICovCi0gICAgZnVuY3Rpb24gaXNDb250YWluZWRJblNjb3BlVmFy
cyh2YXJpYWJsZSwgc2NvcGVWYXJzKSB7Ci0gICAgICAgIHJldHVybiBzY29wZVZhcnMuc29tZShm
dW5jdGlvbiAoc2NvcGVWYXIpIHsKLSAgICAgICAgICAgIGlmIChzY29wZVZhci5pZGVudGlmaWVy
cy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLm5hbWUgPT09
IHNjb3BlVmFyLm5hbWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2
ZW4gdmFyaWFibGVzIGFyZSBzaGFkb3dlZCBpbiB0aGUgZ2l2ZW4gc2NvcGUuCi0gICAgICogQHBh
cmFtIHtBcnJheX0gdmFyaWFibGVzIFRoZSB2YXJpYWJsZXMgdG8gbG9vayBmb3IKLSAgICAgKiBA
cGFyYW0ge09iamVjdH0gc2NvcGUgVGhlIHNjb3BlIHRvIGJlIGNoZWNrZWQuCi0gICAgICogQHJl
dHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gY2hlY2tTaGFkb3dzSW5TY29wZSh2
YXJpYWJsZXMsIHNjb3BlKSB7Ci0gICAgICAgIHZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uICh2
YXJpYWJsZSkgewotICAgICAgICAgICAgaWYgKGlzQ29udGFpbmVkSW5TY29wZVZhcnModmFyaWFi
bGUsIHNjb3BlLnZhcmlhYmxlcykpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh2
YXJpYWJsZS5pZGVudGlmaWVyc1swXSwgInt7YX19IGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gdGhl
IHVwcGVyIHNjb3BlLiIsIHthOiB2YXJpYWJsZS5uYW1lfSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEZpbHRlcnMgYWxsIHZhcmlhYmxlcyBv
ZiBhIGxpc3Qgd2hpY2ggYWxyZWFkeSBvY2N1ciBpbiBhbm90aGVyIGxpc3QuCi0gICAgICogQHBh
cmFtIHtBcnJheX0gdmFyaWFibGVMaXN0QSBMaXN0IG9mIHZhcmlhYmxlcyB3aGljaCBzaG91bGQg
YmUgZmlsdGVyZWQuCi0gICAgICogQHBhcmFtIHtBcnJheX0gdmFyaWFibGVMaXN0QiBMaXN0IG9m
IHZhcmlhYmxlcyB3aGljaCBzaG91bGQgbm8gb2NjdXIgaW4gdmFyaWFibGVMaXN0QS4KLSAgICAg
KiBAcmV0dXJucyB7QXJyYXl9IEZpbHRlcmVkIGxpc3Qgb2YgdmFyaWFibGVzLgotICAgICAqLwot
ICAgIGZ1bmN0aW9uIGZpbHRlclZhcmlhYmxlTGlzdCh2YXJpYWJsZUxpc3RBLCB2YXJpYWJsZUxp
c3RCKSB7Ci0gICAgICAgIHJldHVybiB2YXJpYWJsZUxpc3RBLmZpbHRlcihmdW5jdGlvbiAodmFy
aWFibGVBKSB7Ci0gICAgICAgICAgICByZXR1cm4gIXZhcmlhYmxlTGlzdEIuc29tZShmdW5jdGlv
biAodmFyaWFibGVCKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQS5uYW1lID09
PSB2YXJpYWJsZUIubmFtZTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9Ci0K
LSAgICAvKioKLSAgICAgKiBDaGVja3MgdGhlIGdpdmVuIG5vZGUgZm9yIHNoYWRvd2VkIHZhcmlh
Ymxlcy4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIG9mIGEgRnVu
Y3Rpb25EZWNsYXJhdGlvbiBvciBGdW5jdGlvbkV4cHJlc3Npb24uCi0gICAgICogQHJldHVybnMg
e3ZvaWR9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gY2hlY2tGb3JTaGFkb3dzKG5vZGUpIHsKLSAg
ICAgICAgdmFyIHNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpLAotICAgICAgICAgICAgYXJncyA9
IG5vZGUucGFyYW1zLAotICAgICAgICAgICAgdmFyaWFibGVzID0gZmlsdGVyVmFyaWFibGVMaXN0
KHNjb3BlLnZhcmlhYmxlcywgYXJncyk7Ci0KLSAgICAgICAgLy8gaXRlcmF0ZSB0aHJvdWdoIHRo
ZSBhcnJheSBvZiB2YXJpYWJsZXMgYW5kIGZpbmQgZHVwbGljYXRlcyB3aXRoIHRoZSB1cHBlciBz
Y29wZQotICAgICAgICB2YXIgdXBwZXIgPSBzY29wZS51cHBlcjsKLSAgICAgICAgd2hpbGUgKHVw
cGVyKSB7Ci0gICAgICAgICAgICBjaGVja1NoYWRvd3NJblNjb3BlKHZhcmlhYmxlcywgdXBwZXIp
OwotICAgICAgICAgICAgdXBwZXIgPSB1cHBlci51cHBlcjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiB7Ci0gICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogY2hlY2tGb3JTaGFk
b3dzLAotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogY2hlY2tGb3JTaGFkb3dzCi0gICAg
fTsKLQotfTsKLQotfSx7fV0sMTA5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
LS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIHJlcXVpcmUgdmFyaWFibGVzIGRlY2xhcmVk
IHdpdGhvdXQgd2hpdGVzcGFjZSBiZWZvcmUgdGhlIGxpbmVzIHNlbWljb2xvbgotICogQGF1dGhv
ciBKb25hdGhhbiBLaW5nc3RvbgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBS
dWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgdmFyIHNl
bWljb2xvbldoaXRlc3BhY2UgPSAvXHM7JC87Ci0KLSAgICByZXR1cm4gewotICAgICAgICAiVmFy
aWFibGVEZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZhciBzb3Vy
Y2UgPSBjb250ZXh0LmdldFNvdXJjZShub2RlKTsKLSAgICAgICAgICAgIGlmIChzZW1pY29sb25X
aGl0ZXNwYWNlLnRlc3Qoc291cmNlKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJWYXJpYWJsZSBkZWNsYXJlZCB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2UgYmVmb3Jl
IHNlbWljb2xvbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiRXhwcmVz
c2lvblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZhciBzb3VyY2Ug
PSBjb250ZXh0LmdldFNvdXJjZShub2RlKTsKLSAgICAgICAgICAgIGlmIChzZW1pY29sb25XaGl0
ZXNwYWNlLnRlc3Qoc291cmNlKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJFeHByZXNzaW9uIGNhbGxlZCB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2UgYmVmb3JlIHNl
bWljb2xvbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLX07Ci0KLX0se31d
LDExMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3Zl
cnZpZXcgUnVsZSB0byBjaGVjayB0aGF0IHNwYWNlZCBmdW5jdGlvbiBhcHBsaWNhdGlvbgotICog
QGF1dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbT4KLSAqLwotCi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAg
ICJ1c2Ugc3RyaWN0IjsKLQotICAgIGZ1bmN0aW9uIGRldGVjdE9wZW5TcGFjZXMobm9kZSkgewot
ICAgICAgICB2YXIgbGFzdENhbGxlZVRva2VuID0gY29udGV4dC5nZXRMYXN0VG9rZW4obm9kZS5j
YWxsZWUpOwotICAgICAgICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnMobm9kZSk7Ci0g
ICAgICAgIHZhciBpID0gdG9rZW5zLmluZGV4T2YobGFzdENhbGxlZVRva2VuKSwgbCA9IHRva2Vu
cy5sZW5ndGg7Ci0gICAgICAgIHdoaWxlIChpIDwgbCAmJiB0b2tlbnNbaV0udmFsdWUgIT09ICIo
IikgewotICAgICAgICAgICAgKytpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpID49IGwpIHsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBsb29rIGZvciBhIHNw
YWNlIGJldHdlZW4gdGhlIGNhbGxlZSBhbmQgdGhlIG9wZW4gcGFyZW4KLSAgICAgICAgaWYgKHRv
a2Vuc1tpIC0gMV0ucmFuZ2VbMV0gIT09IHRva2Vuc1tpXS5yYW5nZVswXSkgewotICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgc3BhY2UgYmV0d2VlbiBmdW5jdGlv
biBuYW1lIGFuZCBwYXJlbi4iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB7Ci0g
ICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGRldGVjdE9wZW5TcGFjZXMsCi0gICAgICAgICJOZXdF
eHByZXNzaW9uIjogZGV0ZWN0T3BlblNwYWNlcwotICAgIH07Ci0KLX07Ci0KLX0se31dLDExMTpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcg
RGlzYWxsb3cgc3BhcnNlIGFycmF5cwotICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcwotICov
Ci0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmlu
aXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgewotCi0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGlj
Ci0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiQXJy
YXlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICB2YXIgZW1wdHlT
cG90ID0gbm9kZS5lbGVtZW50cy5pbmRleE9mKG51bGwpID4gLTE7Ci0KLSAgICAgICAgICAgIGlm
IChlbXB0eVNwb3QpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5l
eHBlY3RlZCBjb21tYSBpbiBtaWRkbGUgb2YgYXJyYXkuIik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgIH07Ci0KLX07Ci0KLX0se31dLDExMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBjaGVjayBmb3IgcHJv
cGVydGllcyB3aG9zZSBpZGVudGlmaWVyIGVuZHMgd2l0aCB0aGUgc3RyaW5nIFN5bmMKLSAqIEBh
dXRob3IgTWF0dCBEdVZhbGw8aHR0cDovL21hdHRkdXZhbGwuY29tLz4KLSAqLwotCi0vKmpzaGlu
dCBub2RlOnRydWUqLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0
aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKLQotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHJldHVybiB7Ci0KLSAgICAg
ICAgIk1lbWJlckV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YXIg
cHJvcGVydHlOYW1lID0gbm9kZS5wcm9wZXJ0eS5uYW1lLAotICAgICAgICAgICAgICAgIHN5bmNS
ZWdleCA9IC8uKlN5bmMkLzsKLQotICAgICAgICAgICAgaWYgKHN5bmNSZWdleC5leGVjKHByb3Bl
cnR5TmFtZSkgIT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiVW5leHBlY3RlZCBzeW5jIG1ldGhvZDogJyIgKyBwcm9wZXJ0eU5hbWUgKyAiJy4iKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDExMzpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0
byBmbGFnIHVzZSBvZiB0ZXJuYXJ5IG9wZXJhdG9ycy4KLSAqIEBhdXRob3IgSWFuIENocmlzdGlh
biBNeWVycwotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRp
b24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24o
Y29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQotICAgICAg
ICAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIlRlcm5hcnkgb3BlcmF0b3IgdXNlZC4iKTsKLSAgICAgICAg
fQotCi0gICAgfTsKLQotfTsKLQotfSx7fV0sMTE0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyB0cmFpbGluZyBzcGFjZXMg
YXQgdGhlIGVuZCBvZiBsaW5lcy4KLSAqIEBhdXRob3IgTm9kZWNhIFRlYW0gPGh0dHBzOi8vZ2l0
aHViLmNvbS9ub2RlY2E+Ci0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICB2YXIgVFJBSUxFUiA9ICJb
IFx0XHUwMGEwXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3
XHUyMDA4XHUyMDA5XHUyMDBhXHUyMDBiXHUyMDI4XHUyMDI5XHUzMDAwXSskIjsKLQotICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24gY2hlY2tUcmFp
bGluZ1NwYWNlcyhub2RlKSB7Ci0KLSAgICAgICAgICAgIC8vIExldCdzIGhhY2suIFNpbmNlIEVz
cHJpbWEgZG9lcyBub3QgcmV0dXJuIHdoaXRlc3BhY2Ugbm9kZXMsCi0gICAgICAgICAgICAvLyBm
ZXRjaCB0aGUgc291cmNlIGNvZGUgYW5kIGRvIGJsYWNrIG1hZ2ljIHZpYSByZWdleHBzLgotCi0g
ICAgICAgICAgICB2YXIgc3JjID0gY29udGV4dC5nZXRTb3VyY2UoKSwKLSAgICAgICAgICAgICAg
ICByZSA9IG5ldyBSZWdFeHAoVFJBSUxFUiwgIm1nIiksCi0gICAgICAgICAgICAgICAgbWF0Y2gs
IGxpbmVzLCBsb2NhdGlvbjsKLQotICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IHJlLmV4ZWMo
c3JjKSkgIT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBsaW5lcyA9IHNyYy5zbGljZSgwLCBy
ZS5sYXN0SW5kZXgpLnNwbGl0KC9ccj9cbi9nKTsKLQotICAgICAgICAgICAgICAgIGxvY2F0aW9u
ID0gewotICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lcy5sZW5ndGgsCi0gICAgICAgICAg
ICAgICAgICAgIGNvbHVtbjogbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoIC0gbWF0Y2hb
MF0ubGVuZ3RoICsgMQotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICAvLyBQ
YXNzaW5nIG5vZGUgaXMgYSBiaXQgZGlydHksIGJlY2F1c2UgbWVzc2FnZSBkYXRhIHdpbGwgY29u
dGFpbgotICAgICAgICAgICAgICAgIC8vIGJpZyB0ZXh0IGluIGBzb3VyY2VgLiBCdXQuLi4gd2hv
IGNhcmVzIDopID8KLSAgICAgICAgICAgICAgICAvLyBPbmUgbW9yZSBrbHVkZ2Ugd2lsbCBub3Qg
bWFrZSB3b3JzZSB0aGUgYmxvb2R5IHdpemFyZHJ5IG9mIHRoaXMgcGx1Z2luLgotICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGxvY2F0aW9uLCAiVHJhaWxpbmcgc3BhY2VzIG5v
dCBhbGxvd2VkLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9OwotfTsKLQot
fSx7fV0sMTE1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiBpbml0aWFsaXppbmcgdG8gdW5kZWZpbmVkCi0g
KiBAYXV0aG9yIElseWEgVm9sb2RpbgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0
dXJuIHsKLQotICAgICAgICAiVmFyaWFibGVEZWNsYXJhdG9yIjogZnVuY3Rpb24obm9kZSkgewot
ICAgICAgICAgICAgdmFyIG5hbWUgPSBub2RlLmlkLm5hbWU7Ci0gICAgICAgICAgICB2YXIgaW5p
dCA9IG5vZGUuaW5pdCAmJiBub2RlLmluaXQubmFtZTsKLQotICAgICAgICAgICAgaWYgKGluaXQg
PT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwg
Ikl0J3Mgbm90IG5lY2Vzc2FyeSB0byBpbml0aWFsaXplICd7e25hbWV9fScgdG8gdW5kZWZpbmVk
LiIsIHsgbmFtZTogbmFtZSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0K
LX07Ci0KLX0se31dLDExNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioK
LSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHJlZmVyZW5jZXMgdG8gdW5kZWNsYXJlZCB2
YXJpYWJsZXMuCi0gKiBAYXV0aG9yIE1hcmsgTWFjZG9uYWxkCi0gKi8KLSJ1c2Ugc3RyaWN0IjsK
LQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEhlbHBlcnMKLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLWZ1bmN0aW9uIGlzSW1wbGljaXRHbG9iYWwodmFyaWFibGUpIHsKLSAgICByZXR1
cm4gdmFyaWFibGUuZGVmcy5ldmVyeShmdW5jdGlvbihkZWYpIHsKLSAgICAgICAgcmV0dXJuIGRl
Zi50eXBlID09PSAiSW1wbGljaXRHbG9iYWxWYXJpYWJsZSI7Ci0gICAgfSk7Ci19Ci0KLS8qKgot
ICogR2V0cyB0aGUgZGVjbGFyZWQgdmFyaWFibGUsIGRlZmluZWQgaW4gYHNjb3BlYCwgdGhhdCBg
cmVmYCByZWZlcnMgdG8uCi0gKiBAcGFyYW0ge1Njb3BlfSBzY29wZSBUaGUgc2NvcGUgaW4gd2hp
Y2ggdG8gc2VhcmNoLgotICogQHBhcmFtIHtSZWZlcmVuY2V9IHJlZiBUaGUgcmVmZXJlbmNlIHRv
IGZpbmQgaW4gdGhlIHNjb3BlLgotICogQHJldHVybnMge1ZhcmlhYmxlfSBUaGUgdmFyaWFibGUs
IG9yIG51bGwgaWYgcmVmIHJlZmVycyB0byBhbiB1bmRlY2xhcmVkIHZhcmlhYmxlLgotICovCi1m
dW5jdGlvbiBnZXREZWNsYXJlZEdsb2JhbFZhcmlhYmxlKHNjb3BlLCByZWYpIHsKLSAgICB2YXIg
ZGVjbGFyZWRHbG9iYWwgPSBudWxsOwotICAgIHNjb3BlLnZhcmlhYmxlcy5zb21lKGZ1bmN0aW9u
KHZhcmlhYmxlKSB7Ci0gICAgICAgIGlmICh2YXJpYWJsZS5uYW1lID09PSByZWYuaWRlbnRpZmll
ci5uYW1lKSB7Ci0gICAgICAgICAgICAvLyBJZiBpdCdzIGFuIGltcGxpY2l0IGdsb2JhbCwgaXQg
bXVzdCBoYXZlIGEgYHdyaXRlYWJsZWAgZmllbGQgKGluZGljYXRpbmcgaXQgd2FzIGRlY2xhcmVk
KQotICAgICAgICAgICAgaWYgKCFpc0ltcGxpY2l0R2xvYmFsKHZhcmlhYmxlKSB8fCB7fS5oYXNP
d25Qcm9wZXJ0eS5jYWxsKHZhcmlhYmxlLCAid3JpdGVhYmxlIikpIHsKLSAgICAgICAgICAgICAg
ICBkZWNsYXJlZEdsb2JhbCA9IHZhcmlhYmxlOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
KTsKLSAgICByZXR1cm4gZGVjbGFyZWRHbG9iYWw7Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgcmV0dXJuIHsKLQotICAgICAg
ICAiUHJvZ3JhbSI6IGZ1bmN0aW9uKC8qbm9kZSovKSB7Ci0KLSAgICAgICAgICAgIHZhciBnbG9i
YWxTY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKTsKLQotICAgICAgICAgICAgZ2xvYmFsU2NvcGUu
dGhyb3VnaC5mb3JFYWNoKGZ1bmN0aW9uKHJlZikgewotICAgICAgICAgICAgICAgIHZhciB2YXJp
YWJsZSA9IGdldERlY2xhcmVkR2xvYmFsVmFyaWFibGUoZ2xvYmFsU2NvcGUsIHJlZiksCi0gICAg
ICAgICAgICAgICAgICAgIG5hbWUgPSByZWYuaWRlbnRpZmllci5uYW1lOwotICAgICAgICAgICAg
ICAgIGlmICghdmFyaWFibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
cmVmLmlkZW50aWZpZXIsICIne3tuYW1lfX0nIGlzIG5vdCBkZWZpbmVkLiIsIHsgbmFtZTogbmFt
ZSB9KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlZi5pc1dyaXRlKCkgJiYgdmFyaWFi
bGUud3JpdGVhYmxlID09PSBmYWxzZSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChyZWYuaWRlbnRpZmllciwgIid7e25hbWV9fScgaXMgcmVhZCBvbmx5LiIsIHsgbmFtZTog
bmFtZSB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQot
ICAgIH07Ci0KLX07Ci0KLX0se31dLDExNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHJlZmVyZW5jZXMgdG8gdGhl
IHVuZGVmaW5lZCB2YXJpYWJsZS4KLSAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCi0gKi8KLSJ1
c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlv
bgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJJZGVudGlmaWVyIjogZnVuY3Rp
b24obm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUubmFtZSA9PT0gInVuZGVmaW5lZCIpIHsK
LSAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3Ao
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcmVudCB8fCBwYXJlbnQudHlwZSAhPT0gIk1lbWJl
ckV4cHJlc3Npb24iIHx8IG5vZGUgIT09IHBhcmVudC5wcm9wZXJ0eSB8fCBwYXJlbnQuY29tcHV0
ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0
ZWQgdXNlIG9mIHVuZGVmaW5lZC4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9XSwxMTg6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB0cmFp
bGluZyB1bmRlcnNjb3JlcyBpbiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuCi0gKiBAYXV0aG9yIE1h
dHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwuY29tPgotICovCi0KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJp
Y3QiOwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycwotICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0gICAgZnVuY3Rpb24gaGFzVHJhaWxpbmdVbmRlcnNjb3JlKGlkZW50
aWZpZXIpIHsKLSAgICAgICAgdmFyIGxlbiA9IGlkZW50aWZpZXIubGVuZ3RoOwotCi0gICAgICAg
IHJldHVybiBpZGVudGlmaWVyICE9PSAiXyIgJiYgKGlkZW50aWZpZXJbMF0gPT09ICJfIiB8fCBp
ZGVudGlmaWVyW2xlbiAtIDFdID09PSAiXyIpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGlzU3Bl
Y2lhbENhc2VJZGVudGlmaWVyRm9yTWVtYmVyRXhwcmVzc2lvbihpZGVudGlmaWVyKSB7Ci0gICAg
ICAgIHJldHVybiBpZGVudGlmaWVyID09PSAiX19wcm90b19fIjsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBpc1NwZWNpYWxDYXNlSWRlbnRpZmllckluVmFyaWFibGVFeHByZXNzaW9uKGlkZW50aWZp
ZXIpIHsKLSAgICAgICAgLy8gQ2hlY2tzIGZvciB0aGUgdW5kZXJzY29yZSBsaWJyYXJ5IHVzYWdl
IGhlcmUKLSAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIgPT09ICJfIjsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiBjaGVja0ZvclRyYWlsaW5nVW5kZXJzY29yZUluRnVuY3Rpb25EZWNsYXJhdGlvbihu
b2RlKSB7Ci0gICAgICAgIHZhciBpZGVudGlmaWVyID0gbm9kZS5pZC5uYW1lOwotCi0gICAgICAg
IGlmICh0eXBlb2YgaWRlbnRpZmllciAhPT0gInVuZGVmaW5lZCIgJiYgaGFzVHJhaWxpbmdVbmRl
cnNjb3JlKGlkZW50aWZpZXIpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
VW5leHBlY3RlZCBkYW5nbGluZyAnXycgaW4gJyIgKyBpZGVudGlmaWVyICsgIicuIik7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjaGVja0ZvclRyYWlsaW5nVW5kZXJzY29yZUlu
VmFyaWFibGVFeHByZXNzaW9uKG5vZGUpIHsKLSAgICAgICAgdmFyIGlkZW50aWZpZXIgPSBub2Rl
LmlkLm5hbWU7Ci0KLSAgICAgICAgaWYgKHR5cGVvZiBpZGVudGlmaWVyICE9PSAidW5kZWZpbmVk
IiAmJiBoYXNUcmFpbGluZ1VuZGVyc2NvcmUoaWRlbnRpZmllcikgJiYKLSAgICAgICAgICAgICFp
c1NwZWNpYWxDYXNlSWRlbnRpZmllckluVmFyaWFibGVFeHByZXNzaW9uKGlkZW50aWZpZXIpKSB7
Ci0gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBkYW5nbGluZyAn
XycgaW4gJyIgKyBpZGVudGlmaWVyICsgIicuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiBjaGVja0ZvclRyYWlsaW5nVW5kZXJzY29yZUluTWVtYmVyRXhwcmVzc2lvbihub2Rl
KSB7Ci0gICAgICAgIHZhciBpZGVudGlmaWVyID0gbm9kZS5wcm9wZXJ0eS5uYW1lOwotCi0gICAg
ICAgIGlmICh0eXBlb2YgaWRlbnRpZmllciAhPT0gInVuZGVmaW5lZCIgJiYgaGFzVHJhaWxpbmdV
bmRlcnNjb3JlKGlkZW50aWZpZXIpICYmCi0gICAgICAgICAgICAhaXNTcGVjaWFsQ2FzZUlkZW50
aWZpZXJGb3JNZW1iZXJFeHByZXNzaW9uKGlkZW50aWZpZXIpKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBkYW5nbGluZyAnXycgaW4gJyIgKyBpZGVudGlm
aWVyICsgIicuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0gICAgLy8gUHVibGljIEFQSQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJldHVy
biB7Ci0gICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogY2hlY2tGb3JUcmFpbGluZ1VuZGVy
c2NvcmVJbkZ1bmN0aW9uRGVjbGFyYXRpb24sCi0gICAgICAgICJWYXJpYWJsZURlY2xhcmF0b3Ii
OiBjaGVja0ZvclRyYWlsaW5nVW5kZXJzY29yZUluVmFyaWFibGVFeHByZXNzaW9uLAotICAgICAg
ICAiTWVtYmVyRXhwcmVzc2lvbiI6IGNoZWNrRm9yVHJhaWxpbmdVbmRlcnNjb3JlSW5NZW1iZXJF
eHByZXNzaW9uCi0gICAgfTsKLQotfTsKLQotfSx7fV0sMTE5OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBDaGVja3MgZm9yIHVucmVhY2hh
YmxlIGNvZGUgZHVlIHRvIHJldHVybiwgdGhyb3dzLCBicmVhaywgYW5kIGNvbnRpbnVlLgotICog
QGF1dGhvciBKb2VsIEZlZW5zdHJhCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLS8vIEhlbHBlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotZnVu
Y3Rpb24gcmVwb3J0KGNvbnRleHQsIG5vZGUsIHVucmVhY2hhYmxlVHlwZSkgewotICAgIHZhciBr
ZXl3b3JkOwotICAgIHN3aXRjaCAodW5yZWFjaGFibGVUeXBlKSB7Ci0gICAgICAgIGNhc2UgIkJy
ZWFrU3RhdGVtZW50IjoKLSAgICAgICAgICAgIGtleXdvcmQgPSAiYnJlYWsiOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgIkNvbnRpbnVlU3RhdGVtZW50IjoKLSAgICAgICAgICAg
IGtleXdvcmQgPSAiY29udGludWUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
IlJldHVyblN0YXRlbWVudCI6Ci0gICAgICAgICAgICBrZXl3b3JkID0gInJldHVybiI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAiVGhyb3dTdGF0ZW1lbnQiOgotICAgICAgICAg
ICAga2V5d29yZCA9ICJ0aHJvdyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29udGV4dC5yZXBvcnQobm9kZSwg
IkZvdW5kIHVuZXhwZWN0ZWQgc3RhdGVtZW50IGFmdGVyIGEge3t0eXBlfX0uIiwgeyB0eXBlOiBr
ZXl3b3JkIH0pOwotfQotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmlu
aXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgewotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIGlmIGEgbm9kZSBpcyBhbiBl
eGNlcHRpb24gZm9yIG5vLXVucmVhY2hhYmxlIGJlY2F1c2Ugb2YgdmFyaWFibGUvZnVuY3Rpb24g
aG9pc3RpbmcKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRvIGNo
ZWNrLgotICAgICAqIEByZXR1cm5zIHtib29sZWFufSBpZiB0aGUgbm9kZSBkb2Vzbid0IHRyaWdn
ZXIgdW5yZWFjaGFibGUKLSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIGZ1bmN0aW9uIGlz
VW5yZWFjaGFibGVBbGxvd2VkKG5vZGUpIHsKLSAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0g
IkZ1bmN0aW9uRGVjbGFyYXRpb24iIHx8Ci0gICAgICAgICAgICBub2RlLnR5cGUgPT09ICJWYXJp
YWJsZURlY2xhcmF0aW9uIiAmJgotICAgICAgICAgICAgbm9kZS5kZWNsYXJhdGlvbnMuZXZlcnko
ZnVuY3Rpb24oZGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRp
b24udHlwZSA9PT0gIlZhcmlhYmxlRGVjbGFyYXRvciIgJiYgZGVjbGFyYXRpb24uaW5pdCA9PT0g
bnVsbDsKLSAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIC8qCi0gICAgICogVmVyaWZpZXMg
dGhhdCB0aGUgZ2l2ZW4gbm9kZSBpcyB0aGUgbGFzdCBub2RlIG9yIGZvbGxvd2VkIGV4Y2x1c2l2
ZWx5IGJ5Ci0gICAgICogaG9pc3RlZCBkZWNsYXJhdGlvbnMKLSAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IG5vZGUgTm9kZSB0aGF0IHNob3VsZCBiZSB0aGUgbGFzdCBub2RlCi0gICAgICogQHJldHVy
bnMge3ZvaWR9Ci0gICAgICogQHByaXZhdGUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBjaGVja05v
ZGUobm9kZSkgewotICAgICAgICB2YXIgcGFyZW50ID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5w
b3AoKTsKLSAgICAgICAgdmFyIGZpZWxkLCBpLCBzaWJsaW5nOwotCi0gICAgICAgIHN3aXRjaCAo
cGFyZW50LnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgIlN3aXRjaENhc2UiOgotICAgICAgICAg
ICAgICAgIGZpZWxkID0gImNvbnNlcXVlbnQiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSAiUHJvZ3JhbSI6Ci0gICAgICAgICAgICBjYXNlICJCbG9ja1N0YXRlbWVu
dCI6Ci0gICAgICAgICAgICAgICAgZmllbGQgPSAiYm9keSI7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZvciAoaSA9IHBhcmVudFtmaWVsZF0ubGVuZ3RoIC0gMTsgaSA+PSAw
OyBpLS0pIHsKLSAgICAgICAgICAgIHNpYmxpbmcgPSBwYXJlbnRbZmllbGRdW2ldOwotICAgICAg
ICAgICAgaWYgKHNpYmxpbmcgPT09IG5vZGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47IC8v
IEZvdW5kIHRoZSBsYXN0IHJlYWNoYWJsZSBzdGF0ZW1lbnQsIGFsbCBkb25lCi0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmICghaXNVbnJlYWNoYWJsZUFsbG93ZWQoc2libGluZykpIHsK
LSAgICAgICAgICAgICAgICByZXBvcnQoY29udGV4dCwgc2libGluZywgbm9kZS50eXBlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJS
ZXR1cm5TdGF0ZW1lbnQiOiBjaGVja05vZGUsCi0gICAgICAgICJUaHJvd1N0YXRlbWVudCI6IGNo
ZWNrTm9kZSwKLSAgICAgICAgIkNvbnRpbnVlU3RhdGVtZW50IjogY2hlY2tOb2RlLAotICAgICAg
ICAiQnJlYWtTdGF0ZW1lbnQiOiBjaGVja05vZGUKLSAgICB9OwotCi19OwotCi19LHt9XSwxMjA6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3
IEZsYWcgZXhwcmVzc2lvbnMgaW4gc3RhdGVtZW50IHBvc2l0aW9uIHRoYXQgZG8gbm90IHNpZGUg
ZWZmZWN0Ci0gKiBAYXV0aG9yIE1pY2hhZWwgRmljYXJyYQotICovCi0idXNlIHN0cmljdCI7Ci0K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gYW55IG5vZGUKLSAgICAgKiBA
cmV0dXJucyB7Qm9vbGVhbn0gd2hldGhlciB0aGUgZ2l2ZW4gbm9kZSBzdHJ1Y3R1cmFsbHkgcmVw
cmVzZW50cyBhIGRpcmVjdGl2ZQotICAgICAqLwotICAgIGZ1bmN0aW9uIGxvb2tzTGlrZURpcmVj
dGl2ZShub2RlKSB7Ci0gICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gIkV4cHJlc3Npb25TdGF0
ZW1lbnQiICYmCi0gICAgICAgICAgIG5vZGUuZXhwcmVzc2lvbi50eXBlID09PSAiTGl0ZXJhbCIg
JiYgdHlwZW9mIG5vZGUuZXhwcmVzc2lvbi52YWx1ZSA9PT0gInN0cmluZyI7Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIC0gKFthXSAtPiBCb29s
ZWFuKSB0aGUgZnVuY3Rpb24gdXNlZCB0byBtYWtlIHRoZSBkZXRlcm1pbmF0aW9uCi0gICAgICog
QHBhcmFtIHthW119IGxpc3QgLSB0aGUgaW5wdXQgbGlzdAotICAgICAqIEByZXR1cm5zIHthW119
IHRoZSBsZWFkaW5nIHNlcXVlbmNlIG9mIG1lbWJlcnMgaW4gdGhlIGdpdmVuIGxpc3QgdGhhdCBw
YXNzIHRoZSBnaXZlbiBwcmVkaWNhdGUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiB0YWtlV2hpbGUo
cHJlZGljYXRlLCBsaXN0KSB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5n
dGg7IGkgPCBsOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghcHJlZGljYXRlKGxpc3RbaV0pKSB7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIFtdLnNsaWNlLmNhbGwobGlzdCwgMCwgaSk7Ci0gICAgfQotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gYSBQcm9ncmFtIG9yIEJsb2NrU3RhdGVtZW50
IG5vZGUKLSAgICAgKiBAcmV0dXJucyB7QVNUTm9kZVtdfSB0aGUgbGVhZGluZyBzZXF1ZW5jZSBv
ZiBkaXJlY3RpdmUgbm9kZXMgaW4gdGhlIGdpdmVuIG5vZGUncyBib2R5Ci0gICAgICovCi0gICAg
ZnVuY3Rpb24gZGlyZWN0aXZlcyhub2RlKSB7Ci0gICAgICAgIHJldHVybiB0YWtlV2hpbGUobG9v
a3NMaWtlRGlyZWN0aXZlLCBub2RlLmJvZHkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gbm9kZSAtIGFueSBub2RlCi0gICAgICogQHBhcmFtIHtBU1ROb2RlW119
IGFuY2VzdG9ycyAtIHRoZSBnaXZlbiBub2RlJ3MgYW5jZXN0b3JzCi0gICAgICogQHJldHVybnMg
e0Jvb2xlYW59IHdoZXRoZXIgdGhlIGdpdmVuIG5vZGUgaXMgY29uc2lkZXJlZCBhIGRpcmVjdGl2
ZSBpbiBpdHMgY3VycmVudCBwb3NpdGlvbgotICAgICAqLwotICAgIGZ1bmN0aW9uIGlzRGlyZWN0
aXZlKG5vZGUsIGFuY2VzdG9ycykgewotICAgICAgICB2YXIgcGFyZW50ID0gYW5jZXN0b3JzW2Fu
Y2VzdG9ycy5sZW5ndGggLSAxXSwKLSAgICAgICAgICAgIGdyYW5kcGFyZW50ID0gYW5jZXN0b3Jz
W2FuY2VzdG9ycy5sZW5ndGggLSAyXTsKLSAgICAgICAgcmV0dXJuIChwYXJlbnQudHlwZSA9PT0g
IlByb2dyYW0iIHx8IHBhcmVudC50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiICYmIChncmFuZHBh
cmVudC50eXBlID09PSAiRnVuY3Rpb25FeHByZXNzaW9uIiB8fCBncmFuZHBhcmVudC50eXBlID09
PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIpKSAmJgotICAgICAgICAgICAgZGlyZWN0aXZlcyhwYXJl
bnQpLmluZGV4T2Yobm9kZSkgPj0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gewotICAgICAgICAi
RXhwcmVzc2lvblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKLQotICAgICAgICAgICAgdmFy
IHR5cGUgPSBub2RlLmV4cHJlc3Npb24udHlwZSwKLSAgICAgICAgICAgICAgICBhbmNlc3RvcnMg
PSBjb250ZXh0LmdldEFuY2VzdG9ycygpOwotCi0gICAgICAgICAgICBpZiAoCi0gICAgICAgICAg
ICAgICAgIS9eKD86QXNzaWdubWVudHxDYWxsfE5ld3xVcGRhdGUpRXhwcmVzc2lvbiQvLnRlc3Qo
dHlwZSkgJiYKLSAgICAgICAgICAgICAgICAodHlwZSAhPT0gIlVuYXJ5RXhwcmVzc2lvbiIgfHwg
WyJkZWxldGUiLCAidm9pZCJdLmluZGV4T2Yobm9kZS5leHByZXNzaW9uLm9wZXJhdG9yKSA8IDAp
ICYmCi0gICAgICAgICAgICAgICAgIWlzRGlyZWN0aXZlKG5vZGUsIGFuY2VzdG9ycykKLSAgICAg
ICAgICAgICkgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJFeHBlY3Rl
ZCBhbiBhc3NpZ25tZW50IG9yIGZ1bmN0aW9uIGNhbGwgYW5kIGluc3RlYWQgc2F3IGFuIGV4cHJl
c3Npb24uIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi19OwotCi19LHt9
XSwxMjE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92
ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBkZWNsYXJlZCBidXQgdW51c2VkIHZhcmlhYmxlcwotICogQGF1
dGhvciBJbHlhIFZvbG9kaW4KLSAqLwotCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgdmFyIGNvbmZpZyA9
IHsKLSAgICAgICAgdmFyczogImFsbCIsCi0gICAgICAgIGFyZ3M6ICJhZnRlci11c2VkIgotICAg
IH07Ci0KLSAgICBpZiAoY29udGV4dC5vcHRpb25zWzBdKSB7Ci0gICAgICAgIGlmICh0eXBlb2Yo
Y29udGV4dC5vcHRpb25zWzBdKSA9PT0gInN0cmluZyIpIHsKLSAgICAgICAgICAgIGNvbmZpZy52
YXJzID0gY29udGV4dC5vcHRpb25zWzBdOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y29uZmlnLnZhcnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0udmFycyB8fCBjb25maWcudmFyczsKLSAg
ICAgICAgICAgIGNvbmZpZy5hcmdzID0gY29udGV4dC5vcHRpb25zWzBdLmFyZ3MgfHwgY29uZmln
LmFyZ3M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2YXIgTUVTU0FHRSA9ICJ7e25hbWV9fSBp
cyBkZWZpbmVkIGJ1dCBuZXZlciB1c2VkIjsKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7UmVm
ZXJlbmNlfSByZWYgLSBhbiBlc2NvcGUgUmVmZXJlbmNlCi0gICAgICogQHJldHVybnMge0Jvb2xl
YW59IHdoZXRoZXIgdGhlIGdpdmVuIHJlZmVyZW5jZSByZXByZXNlbnRzIGEgcmVhZCBvcGVyYXRp
b24KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBpc1JlYWRSZWYocmVmKSB7Ci0gICAgICAgIHJldHVy
biByZWYuaXNSZWFkKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtTY29wZX0g
c2NvcGUgLSBhbiBlc2NvcGUgU2NvcGUgb2JqZWN0Ci0gICAgICogQHJldHVybnMge1ZhcmlhYmxl
W119IG1vc3Qgb2YgdGhlIGxvY2FsIHZhcmlhYmxlcyB3aXRoIG5vIHJlYWQgcmVmZXJlbmNlcwot
ICAgICAqLwotICAgIGZ1bmN0aW9uIHVudXNlZExvY2FscyhzY29wZSkgewotICAgICAgICB2YXIg
dW51c2VkID0gW107Ci0gICAgICAgIHZhciB2YXJpYWJsZXMgPSBzY29wZS52YXJpYWJsZXM7Ci0g
ICAgICAgIGlmIChzY29wZS50eXBlICE9PSAiZ2xvYmFsIikgewotICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDAsIGwgPSB2YXJpYWJsZXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gc2tpcCBmdW5jdGlvbiBleHByZXNzaW9uIG5hbWVzCi0gICAgICAgICAgICAgICAg
aWYgKHNjb3BlLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3BlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBza2lwIGlt
cGxpY2l0ICJhcmd1bWVudHMiIHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgaWYgKHNjb3BlLnR5
cGUgPT09ICJmdW5jdGlvbiIgJiYgdmFyaWFibGVzW2ldLm5hbWUgPT09ICJhcmd1bWVudHMiICYm
IHZhcmlhYmxlc1tpXS5pZGVudGlmaWVycy5sZW5ndGggPT09IDApIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhciB0
eXBlID0gdmFyaWFibGVzW2ldLmRlZnNbMF0udHlwZTsKLSAgICAgICAgICAgICAgICAvLyBza2lw
IGNhdGNoIHZhcmlhYmxlcwotICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAiQ2F0Y2hDbGF1
c2UiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAvLyBpZiAiYXJncyIgb3B0aW9uIGlzICJub25lIiwgc2tpcCBhbnkg
cGFyYW1ldGVyCi0gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5hcmdzID09PSAibm9uZSIgJiYg
dHlwZSA9PT0gIlBhcmFtZXRlciIpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIGlmICJhcmdzIiBvcHRpb24gaXMg
ImFmdGVyLXVzZWQiLCBza2lwIGFsbCBidXQgdGhlIGxhc3QgcGFyYW1ldGVyCi0gICAgICAgICAg
ICAgICAgaWYgKGNvbmZpZy5hcmdzID09PSAiYWZ0ZXItdXNlZCIgJiYgdHlwZSA9PT0gIlBhcmFt
ZXRlciIgJiYgdmFyaWFibGVzW2ldLmRlZnNbMF0uaW5kZXggPCB2YXJpYWJsZXNbaV0uZGVmc1sw
XS5ub2RlLnBhcmFtcy5sZW5ndGggLSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVzW2ldLnJl
ZmVyZW5jZXMuZmlsdGVyKGlzUmVhZFJlZikubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVudXNlZC5wdXNoKHZhcmlhYmxlc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBbXS5jb25jYXQuYXBwbHkodW51
c2VkLCBbXS5tYXAuY2FsbChzY29wZS5jaGlsZFNjb3BlcywgdW51c2VkTG9jYWxzKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIlByb2dyYW0iOiBmdW5jdGlvbihwcm9ncmFtTm9k
ZSkgewotICAgICAgICAgICAgdmFyIGdsb2JhbFNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpOwot
ICAgICAgICAgICAgdmFyIHVudXNlZCA9IHVudXNlZExvY2FscyhnbG9iYWxTY29wZSk7Ci0gICAg
ICAgICAgICB2YXIgaSwgbDsKLQotICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHVudXNlZCBnbG9i
YWxzCi0gICAgICAgICAgICBpZiAoY29uZmlnLnZhcnMgPT09ICJhbGwiKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHVucmVzb2x2ZWRSZWZzID0gZ2xvYmFsU2NvcGUudGhyb3VnaC5maWx0ZXIoaXNS
ZWFkUmVmKS5tYXAoZnVuY3Rpb24ocmVmKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZWYuaWRlbnRpZmllci5uYW1lOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
IGZvciAoaSA9IDAsIGwgPSBnbG9iYWxTY29wZS52YXJpYWJsZXMubGVuZ3RoOyBpIDwgbDsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1bnJlc29sdmVkUmVmcy5pbmRleE9mKGdsb2Jh
bFNjb3BlLnZhcmlhYmxlc1tpXS5uYW1lKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHVudXNlZC5wdXNoKGdsb2JhbFNjb3BlLnZhcmlhYmxlc1tpXSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZv
ciAoaSA9IDAsIGwgPSB1bnVzZWQubGVuZ3RoOyBpIDwgbDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHVudXNlZFtpXS5lc2xpbnRFeHBsaWNpdEdsb2JhbCkgewotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChwcm9ncmFtTm9kZSwgTUVTU0FHRSwgdW51c2VkW2ldKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVudXNlZFtpXS5kZWZzLmxlbmd0aCA+IDApIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQodW51c2VkW2ldLmlkZW50aWZpZXJzWzBd
LCBNRVNTQUdFLCB1bnVzZWRbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDEyMjpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBv
ZiB2YXJpYWJsZXMgYmVmb3JlIHRoZXkgYXJlIGRlZmluZWQKLSAqIEBhdXRob3IgSWx5YSBWb2xv
ZGluCi0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENvbnN0YW50cwotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotdmFyIE5PX0ZVTkMgPSAibm9mdW5jIjsKLQotLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0
cmljdCI7Ci0KLSAgICBmdW5jdGlvbiBmaW5kRGVjbGFyYXRpb24obmFtZSwgc2NvcGUpIHsKLSAg
ICAgICAgLy8gdHJ5IHNlYXJjaGluZyBpbiB0aGUgY3VycmVudCBzY29wZSBmaXJzdAotICAgICAg
ICBmb3IgKHZhciBpID0gMCwgbCA9IHNjb3BlLnZhcmlhYmxlcy5sZW5ndGg7IGkgPCBsOyBpKysp
IHsKLSAgICAgICAgICAgIGlmIChzY29wZS52YXJpYWJsZXNbaV0ubmFtZSA9PT0gbmFtZSkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBzY29wZS52YXJpYWJsZXNbaV07Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUncyB1cHBlciBzY29wZSBhbmQg
Y2FsbCByZWN1cnNpdmx5IHRpbGwgd2UgZmluZCB0aGUgdmFyaWFibGUKLSAgICAgICAgaWYgKHNj
b3BlLnVwcGVyKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmluZERlY2xhcmF0aW9uKG5hbWUsIHNj
b3BlLnVwcGVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGZpbmRWYXJpYWJs
ZXMoKSB7Ci0gICAgICAgIHZhciBzY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKTsKLSAgICAgICAg
dmFyIHR5cGVPcHRpb24gPSBjb250ZXh0Lm9wdGlvbnNbMF07Ci0KLSAgICAgICAgZnVuY3Rpb24g
Y2hlY2tMb2NhdGlvbkFuZFJlcG9ydChyZWZlcmVuY2UsIGRlY2xhcmF0aW9uKSB7Ci0gICAgICAg
ICAgICBpZiAodHlwZU9wdGlvbiAhPT0gTk9fRlVOQyB8fCBkZWNsYXJhdGlvbi5kZWZzWzBdLnR5
cGUgIT09ICJGdW5jdGlvbk5hbWUiKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9u
LmlkZW50aWZpZXJzWzBdLnJhbmdlWzFdID4gcmVmZXJlbmNlLmlkZW50aWZpZXIucmFuZ2VbMV0p
IHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQocmVmZXJlbmNlLmlkZW50aWZp
ZXIsICJ7e2F9fSB3YXMgdXNlZCBiZWZvcmUgaXQgd2FzIGRlZmluZWQiLCB7YTogcmVmZXJlbmNl
LmlkZW50aWZpZXIubmFtZX0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIHNjb3BlLnJlZmVyZW5jZXMuZm9yRWFjaChmdW5jdGlvbihyZWZl
cmVuY2UpIHsKLSAgICAgICAgICAgIC8vIGlmIHRoZSByZWZlcmVuY2UgaXMgcmVzb2x2ZWQgY2hl
Y2sgZm9yIGRlY2xhcmF0aW9uIGxvY2F0aW9uCi0gICAgICAgICAgICAvLyBpZiBub3QsIGl0IGNv
dWxkIGJlIGZ1bmN0aW9uIGludm9jYXRpb24sIHRyeSB0byBmaW5kIG1hbnVhbGx5Ci0gICAgICAg
ICAgICBpZiAocmVmZXJlbmNlLnJlc29sdmVkICYmIHJlZmVyZW5jZS5yZXNvbHZlZC5pZGVudGlm
aWVycy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgY2hlY2tMb2NhdGlvbkFuZFJlcG9y
dChyZWZlcmVuY2UsIHJlZmVyZW5jZS5yZXNvbHZlZCk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IGZpbmREZWNsYXJhdGlvbihyZWZlcmVu
Y2UuaWRlbnRpZmllci5uYW1lLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUn
cmUgbm8gaWRlbnRpZmllcnMsIHRoaXMgaXMgYSBnbG9iYWwgZW52aXJvbm1lbnQgdmFyaWFibGUK
LSAgICAgICAgICAgICAgICBpZiAoZGVjbGFyYXRpb24gJiYgZGVjbGFyYXRpb24uaWRlbnRpZmll
cnMubGVuZ3RoICE9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrTG9jYXRpb25BbmRS
ZXBvcnQocmVmZXJlbmNlLCBkZWNsYXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gewotICAgICAgICAiUHJv
Z3JhbSI6IGZpbmRWYXJpYWJsZXMsCi0gICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmaW5k
VmFyaWFibGVzLAotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZpbmRWYXJpYWJsZXMK
LSAgICB9OwotfTsKLQotfSx7fV0sMTIzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGRpc2FsbG93IHVzZSBvZiB2b2lkIG9w
ZXJhdG9yLgotICogQGF1dGhvciBNaWtlIFNpZG9yb3YKLSAqIEBjb3B5cmlnaHQgMjAxNCBNaWtl
IFNpZG9yb3YuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIlVuYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5v
ZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLm9wZXJhdG9yID09PSAidm9pZCIpIHsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgJ3VuZGVmaW5lZCcgYW5k
IGluc3RlYWQgc2F3ICd2b2lkJy4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07
Ci0KLX07Ci0KLX0se31dLDEyNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0v
KioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0aGF0IHdhcm5zIGFib3V0IHVzZWQgd2FybmluZyBj
b21tZW50cwotICogQGF1dGhvciBBbGV4YW5kZXIgU2NobWlkdCA8aHR0cHM6Ly9naXRodWIuY29t
L2x4YW5kZXJzPgotICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmlu
aXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24gKGNvbnRleHQpIHsKLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICB2YXIgY29uZmlndXJhdGlv
biA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fSwKLSAgICAgICAgd2FybmluZ1Rlcm1zID0gY29u
ZmlndXJhdGlvbi50ZXJtcyB8fCBbInRvZG8iLCAiZml4bWUiLCAieHh4Il0sCi0gICAgICAgIGxv
Y2F0aW9uID0gY29uZmlndXJhdGlvbi5sb2NhdGlvbiB8fCAic3RhcnQiOwotCi0gICAgLyoqCi0g
ICAgICogUHJlcGFyZXMgYSBzcGVjaWZpZWQgY29tbWVudCBmb3IgYmVpbmcgY2hlY2tlZC4KLSAg
ICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWVudCBUaGUgY29tbWVudCB0byBwcmVwYXJlLgotICAg
ICAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBzcGVjaWZpZWQgY29tbWVudCBwcmVwYXJlZCBmb3Ig
YmVpbmcgY2hlY2tlZC4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBwcmVwYXJlQ29tbWVudEZvckNo
ZWNraW5nKGNvbW1lbnQpIHsKLSAgICAgICAgdmFyIGNvbW1lbnRUb0NoZWNrOwotCi0gICAgICAg
IGNvbW1lbnRUb0NoZWNrID0gY29tbWVudC50b0xvd2VyQ2FzZSgpOwotICAgICAgICBjb21tZW50
VG9DaGVjayA9IGNvbW1lbnRUb0NoZWNrLnRyaW0oKTsKLQotICAgICAgICByZXR1cm4gY29tbWVu
dFRvQ2hlY2s7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIGlmIHRoZSBzcGVjaWZp
ZWQgY29tbWVudCBzdGFydHMgd2l0aCBhIHNwZWNpZmllZCB0ZXJtLgotICAgICAqIEBwYXJhbSB7
U3RyaW5nfSBjb21tZW50VG9DaGVjayBUaGUgY29tbWVudCB0byBjaGVjay4KLSAgICAgKiBAcGFy
YW0ge1N0cmluZ30gbG93ZXJDYXNlVGVybSBUaGUgdGVybSB0byBzZWFyY2ggZm9yLgotICAgICAq
IEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBjb21tZW50IHN0YXJ0ZWQgd2l0aCB0aGUg
c3BlY2lmaWVkIHRlcm0sIGVsc2UgZmFsc2UuCi0gICAgICovCi0gICAgZnVuY3Rpb24gY29tbWVu
dFN0YXJ0c1dpdGhUZXJtKGNvbW1lbnRUb0NoZWNrLCBsb3dlckNhc2VUZXJtKSB7Ci0gICAgICAg
IHJldHVybiBjb21tZW50VG9DaGVjay5pbmRleE9mKGxvd2VyQ2FzZVRlcm0pID09PSAwOwotICAg
IH0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIGNvbW1lbnQgY29u
dGFpbnMgYSBzcGVjaWZpZWQgdGVybSBhdCBhbnkgbG9jYXRpb24uCi0gICAgICogQHBhcmFtIHtT
dHJpbmd9IGNvbW1lbnRUb0NoZWNrIFRoZSBjb21tZW50IHRvIGNoZWNrLgotICAgICAqIEBwYXJh
bSB7U3RyaW5nfSBsb3dlckNhc2VUZXJtIFRoZSB0ZXJtIHRvIHNlYXJjaCBmb3IuCi0gICAgICog
QHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHRlcm0gd2FzIGNvbnRhaW5lZCBpbiB0aGUg
Y29tbWVudCwgZWxzZSBmYWxzZS4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBjb21tZW50Q29udGFp
bnNUZXJtKGNvbW1lbnRUb0NoZWNrLCBsb3dlckNhc2VUZXJtKSB7Ci0gICAgICAgIHJldHVybiBj
b21tZW50VG9DaGVjay5pbmRleE9mKGxvd2VyQ2FzZVRlcm0pICE9PSAtMTsKLSAgICB9Ci0KLQot
ICAgIC8qKgotICAgICAqIENoZWNrcyB0aGUgc3BlY2lmaWVkIGNvbW1lbnQgZm9yIG1hdGNoZXMg
b2YgdGhlIGNvbmZpZ3VyZWQgd2FybmluZyB0ZXJtcyBhbmQgcmV0dXJucyB0aGUgbWF0Y2hlcy4K
LSAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWVudCBUaGUgY29tbWVudCB3aGljaCBpcyBjaGVj
a2VkLgotICAgICAqIEByZXR1cm5zIHtBcnJheX0gQWxsIG1hdGNoZWQgd2FybmluZyB0ZXJtcyBm
b3IgdGhpcyBjb21tZW50LgotICAgICAqLwotICAgIGZ1bmN0aW9uIGNvbW1lbnRDb250YWluc1dh
cm5pbmdUZXJtKGNvbW1lbnQpIHsKLSAgICAgICAgdmFyIG1hdGNoZXMgPSBbXTsKLQotICAgICAg
ICB3YXJuaW5nVGVybXMuZm9yRWFjaChmdW5jdGlvbiAodGVybSkgewotICAgICAgICAgICAgdmFy
IGxvd2VyQ2FzZVRlcm0gPSB0ZXJtLnRvTG93ZXJDYXNlKCksCi0gICAgICAgICAgICAgICAgY29t
bWVudFRvQ2hlY2sgPSBwcmVwYXJlQ29tbWVudEZvckNoZWNraW5nKGNvbW1lbnQpOwotCi0gICAg
ICAgICAgICBpZiAobG9jYXRpb24gPT09ICJzdGFydCIpIHsKLSAgICAgICAgICAgICAgICBpZiAo
Y29tbWVudFN0YXJ0c1dpdGhUZXJtKGNvbW1lbnRUb0NoZWNrLCBsb3dlckNhc2VUZXJtKSkgewot
ICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2godGVybSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhdGlvbiA9PT0gImFueXdoZXJlIikgewotICAg
ICAgICAgICAgICAgIGlmIChjb21tZW50Q29udGFpbnNUZXJtKGNvbW1lbnRUb0NoZWNrLCBsb3dl
ckNhc2VUZXJtKSkgewotICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2godGVybSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBy
ZXR1cm4gbWF0Y2hlczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgdGhlIHNwZWNp
ZmllZCBub2RlIGZvciBtYXRjaGluZyB3YXJuaW5nIGNvbW1lbnRzIGFuZCByZXBvcnRzIHRoZW0u
Ci0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSBiZWluZyBjaGVja2Vk
LgotICAgICAqIEByZXR1cm5zIHt2b2lkfSB1bmRlZmluZWQuCi0gICAgICovCi0gICAgZnVuY3Rp
b24gY2hlY2tDb21tZW50KG5vZGUpIHsKLSAgICAgICAgdmFyIG1hdGNoZXMgPSBjb21tZW50Q29u
dGFpbnNXYXJuaW5nVGVybShub2RlLnZhbHVlKTsKLQotICAgICAgICBtYXRjaGVzLmZvckVhY2go
ZnVuY3Rpb24gKG1hdGNoZWRUZXJtKSB7Ci0gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiVW5leHBlY3RlZCAiICsgbWF0Y2hlZFRlcm0gKyAiIGNvbW1lbnQuIik7Ci0gICAgICAgIH0p
OwotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJCbG9ja0NvbW1lbnQiOiBjaGVja0Nv
bW1lbnQsCi0gICAgICAgICJMaW5lQ29tbWVudCI6IGNoZWNrQ29tbWVudAotICAgIH07Ci19Owot
Ci19LHt9XSwxMjU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2Ygd2l0aCBzdGF0ZW1lbnQKLSAqIEBhdXRo
b3IgTmljaG9sYXMgQy4gWmFrYXMKLSAqLwotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0
dXJuIHsKLSAgICAgICAgIldpdGhTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCB1c2Ugb2YgJ3dpdGgnIHN0YXRl
bWVudC4iKTsKLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDEyNjpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBm
bGFnIHdyYXBwaW5nIG5vbmUtaWZmZSBpbiBwYXJlbnMKLSAqIEBhdXRob3IgSWx5YSBWb2xvZGlu
Ci0gKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0
KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJGdW5j
dGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICB2YXIgYW5jZXN0
b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKSwKLSAgICAgICAgICAgICAgICBwcmV2aW91c1Rv
a2VuLCBuZXh0VG9rZW47Ci0KLSAgICAgICAgICAgIGlmICghL0NhbGxFeHByZXNzaW9ufE5ld0V4
cHJlc3Npb24vLnRlc3QoYW5jZXN0b3JzLnBvcCgpLnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAg
cHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSk7Ci0gICAgICAgICAg
ICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUpOwotICAgICAgICAg
ICAgICAgIGlmIChwcmV2aW91c1Rva2VuLnZhbHVlID09PSAiKCIgJiYgbmV4dFRva2VuLnZhbHVl
ID09PSAiKSIpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIldy
YXBwaW5nIG5vbi1JSUZFIGZ1bmN0aW9uIGxpdGVyYWxzIGluIHBhcmVucyBpcyB1bm5lY2Vzc2Fy
eS4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
OwotCi19OwotCi19LHt9XSwxMjc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewot
LyoqCi0gKiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBlbnN1cmUgdGhlIHVzZSBvZiBhIHNpbmds
ZSB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KLSAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycwot
ICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
ewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8v
IEhlbHBlcnMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICB2YXIgZnVuY3Rpb25TdGFj
ayA9IFtdOwotCi0gICAgZnVuY3Rpb24gc3RhcnRGdW5jdGlvbigpIHsKLSAgICAgICAgZnVuY3Rp
b25TdGFjay5wdXNoKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBlbmRGdW5jdGlvbigp
IHsKLSAgICAgICAgZnVuY3Rpb25TdGFjay5wb3AoKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBj
aGVja0RlY2xhcmF0aW9ucyhub2RlKSB7Ci0gICAgICAgIGlmIChmdW5jdGlvblN0YWNrW2Z1bmN0
aW9uU3RhY2subGVuZ3RoIC0gMV0pIHsKLSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJDb21iaW5lIHRoaXMgd2l0aCB0aGUgcHJldmlvdXMgJ3Zhcicgc3RhdGVtZW50LiIpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgZnVuY3Rpb25TdGFja1tmdW5jdGlvblN0YWNrLmxl
bmd0aCAtIDFdID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAvLyBQdWJsaWMgQVBJCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAg
cmV0dXJuIHsKLSAgICAgICAgIlByb2dyYW0iOiBzdGFydEZ1bmN0aW9uLAotICAgICAgICAiRnVu
Y3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVuY3Rpb24sCi0gICAgICAgICJGdW5jdGlvbkV4cHJl
c3Npb24iOiBzdGFydEZ1bmN0aW9uLAotCi0gICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjog
Y2hlY2tEZWNsYXJhdGlvbnMsCi0KLSAgICAgICAgIlByb2dyYW06ZXhpdCI6IGVuZEZ1bmN0aW9u
LAotICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0IjogZW5kRnVuY3Rpb24sCi0gICAg
ICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6IGVuZEZ1bmN0aW9uCi0gICAgfTsKLQotfTsK
LQotfSx7fV0sMTI4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICog
QGZpbGVvdmVydmlldyBBIHJ1bGUgdG8gZW5zdXJlIGJsYW5rIGxpbmVzIHdpdGhpbiBibG9ja3Mu
Ci0gKiBAYXV0aG9yIE1hdGhpYXMgU2NocmVjayA8aHR0cHM6Ly9naXRodWIuY29tL2xvMXR1bWE+
Ci0gKiBAY29weXJpZ2h0IDIwMTQgTWF0aGlhcyBTY2hyZWNrLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICovCi0KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1
bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbiAoY29udGV4dCkgewotICAgIHZhciByZXF1aXJlUGFkZGluZyA9IGNvbnRleHQu
b3B0aW9uc1swXSAhPT0gIm5ldmVyIjsKLQotICAgIC8qKgotICAgICAqIENoZWNrcyBpZiB0aGUg
Z2l2ZW4gbm9uIGVtcHR5IGJsb2NrIG5vZGUgaGFzIGEgYmxhbmsgbGluZSBiZWZvcmUgaXRzIGZp
cnN0IGNoaWxkIG5vZGUuCi0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9k
ZSBvZiBhIEJsb2NrU3RhdGVtZW50LgotICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVy
IG9yIG5vdCB0aGUgYmxvY2sgc3RhcnRzIHdpdGggYSBibGFuayBsaW5lLgotICAgICAqLwotICAg
IGZ1bmN0aW9uIGlzTm9uRW1wdHlCbG9ja1RvcFBhZGRlZChub2RlKSB7Ci0gICAgICAgIHZhciBi
bG9ja1N0YXJ0ID0gbm9kZS5sb2Muc3RhcnQubGluZSwKLSAgICAgICAgICAgIGZpcnN0ID0gbm9k
ZS5ib2R5WzBdLAotICAgICAgICAgICAgZmlyc3RMaW5lID0gZmlyc3QubG9jLnN0YXJ0LmxpbmUs
Ci0gICAgICAgICAgICBleHBlY3RlZEZpcnN0TGluZSA9IGJsb2NrU3RhcnQgKyAyLAotICAgICAg
ICAgICAgbGVhZGluZ0NvbW1lbnRzID0gY29udGV4dC5nZXRDb21tZW50cyhmaXJzdCkubGVhZGlu
ZzsKLQotICAgICAgICBpZiAobGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHsKLSAgICAgICAg
ICAgIGZpcnN0TGluZSA9IGxlYWRpbmdDb21tZW50c1swXS5sb2Muc3RhcnQubGluZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBleHBlY3RlZEZpcnN0TGluZSA8PSBmaXJzdExpbmU7Ci0g
ICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBub24gZW1wdHkgYmxv
Y2sgbm9kZSBoYXMgYSBibGFuayBsaW5lIGFmdGVyIGl0cyBsYXN0IGNoaWxkIG5vZGUuCi0gICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSBvZiBhIEJsb2NrU3RhdGVtZW50
LgotICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgYmxvY2sgZW5k
cyB3aXRoIGEgYmxhbmsgbGluZS4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBpc05vbkVtcHR5Qmxv
Y2tCb3R0b21QYWRkZWQobm9kZSkgewotICAgICAgICB2YXIgYmxvY2tFbmQgPSBub2RlLmxvYy5l
bmQubGluZSwKLSAgICAgICAgICAgIGxhc3QgPSBub2RlLmJvZHlbbm9kZS5ib2R5Lmxlbmd0aCAt
IDFdLAotICAgICAgICAgICAgbGFzdExpbmUgPSBsYXN0LmxvYy5lbmQubGluZSwKLSAgICAgICAg
ICAgIGV4cGVjdGVkTGFzdExpbmUgPSBibG9ja0VuZCAtIDIsCi0gICAgICAgICAgICB0cmFpbGlu
Z0NvbW1lbnRzID0gY29udGV4dC5nZXRDb21tZW50cyhsYXN0KS50cmFpbGluZzsKLQotICAgICAg
ICBpZiAodHJhaWxpbmdDb21tZW50cy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICBsYXN0TGlu
ZSA9IHRyYWlsaW5nQ29tbWVudHNbdHJhaWxpbmdDb21tZW50cy5sZW5ndGggLSAxXS5sb2MuZW5k
LmxpbmU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbGFzdExpbmUgPD0gZXhwZWN0ZWRM
YXN0TGluZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIG5v
biBlbXB0eSBibG9jayBub2RlIHN0YXJ0cyBBTkQgZW5kcyB3aXRoIGEgYmxhbmsgbGluZS4KLSAg
ICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIG9mIGEgQmxvY2tTdGF0ZW1l
bnQuCi0gICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBibG9jayBz
dGFydHMgYW5kIGVuZHMgd2l0aCBhIGJsYW5rIGxpbmUuCi0gICAgICovCi0gICAgZnVuY3Rpb24g
aXNOb25FbXB0eUJsb2NrUGFkZGVkKG5vZGUpIHsKLSAgICAgICAgcmV0dXJuIGlzTm9uRW1wdHlC
bG9ja1RvcFBhZGRlZChub2RlKSAmJiBpc05vbkVtcHR5QmxvY2tCb3R0b21QYWRkZWQobm9kZSk7
Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBub24gZW1wdHkg
YmxvY2sgbm9kZSBzdGFydHMgT1IgZW5kcyB3aXRoIGEgYmxhbmsgbGluZS4KLSAgICAgKiBAcGFy
YW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIG9mIGEgQmxvY2tTdGF0ZW1lbnQuCi0gICAg
ICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBibG9jayBzdGFydHMgYW5k
IGVuZHMgd2l0aCBhIGJsYW5rIGxpbmUuCi0gICAgICovCi0gICAgZnVuY3Rpb24gaGFzTm9uRW1w
dHlCbG9ja0V4dHJhUGFkZGluZyhub2RlKSB7Ci0gICAgICAgIHJldHVybiBpc05vbkVtcHR5Qmxv
Y2tUb3BQYWRkZWQobm9kZSkgfHwgaXNOb25FbXB0eUJsb2NrQm90dG9tUGFkZGVkKG5vZGUpOwot
ICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyB0aGUgZ2l2ZW4gQmxvY2tTdGF0ZW1lbnQg
bm9kZSB0byBiZSBwYWRkZWQgaWYgdGhlIGJsb2NrIGlzIG5vdCBlbXB0eS4KLSAgICAgKiBAcGFy
YW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIG9mIGEgQmxvY2tTdGF0ZW1lbnQuCi0gICAg
ICogQHJldHVybnMge3ZvaWR9IHVuZGVmaW5lZC4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBjaGVj
a1BhZGRpbmcobm9kZSkgewotICAgICAgICBpZiAobm9kZS5ib2R5Lmxlbmd0aCA+IDApIHsKLSAg
ICAgICAgICAgIGlmIChyZXF1aXJlUGFkZGluZykgewotICAgICAgICAgICAgICAgIGlmICghaXNO
b25FbXB0eUJsb2NrUGFkZGVkKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJCbG9jayBtdXN0IGJlIHBhZGRlZCBieSBibGFuayBsaW5lcy4iKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlm
IChoYXNOb25FbXB0eUJsb2NrRXh0cmFQYWRkaW5nKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJCbG9jayBtdXN0IG5vdCBiZSBwYWRkZWQgYnkgYmxh
bmsgbGluZXMuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIkJsb2NrU3RhdGVtZW50IjogY2hlY2tQ
YWRkaW5nCi0gICAgfTsKLQotfTsKLQotfSx7fV0sMTI5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgbm9uLXF1b3Rl
ZCBwcm9wZXJ0eSBuYW1lcyBpbiBvYmplY3QgbGl0ZXJhbHMuCi0gKiBAYXV0aG9yIE1hdGhpYXMg
QnluZW5zIDxodHRwOi8vbWF0aGlhc2J5bmVucy5iZS8+Ci0gKi8KLQotLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
dmFyIGVzcHJpbWEgPSByZXF1aXJlKCJlc3ByaW1hIik7Ci0KLW1vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oY29udGV4dCkgewotCi0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgdmFyIE1PREUgPSBj
b250ZXh0Lm9wdGlvbnNbMF07Ci0KLSAgICBzd2l0Y2ggKE1PREUpIHsKLQotICAgICAgICBjYXNl
ICJhcy1uZWVkZWQiOgotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBQcm9w
ZXJ0eTogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbm9k
ZS5rZXk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGFueSBxdW90ZWQgcHJv
cGVydHkgbmFtZXMgcmVxdWlyZWQgcXVvdGluZwotICAgICAgICAgICAgICAgICAgICBpZiAoa2V5
LnR5cGUgPT09ICJMaXRlcmFsIiAmJiB0eXBlb2Yga2V5LnZhbHVlID09PSAic3RyaW5nIikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgdG9rZW5zID0gZXNwcmltYS50b2tlbml6ZShrZXkudmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICE9PSAxKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB0b2tlbnNbMF07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodC50eXBlID09PSAiSWRlbnRpZmllciIgfHwgdC50eXBlID09PSAiTnVsbCIgfHwg
dC50eXBlID09PSAiQm9vbGVhbiIgfHwgdC50eXBlID09PSAiTnVtZXJpYyIgJiYgIiIgKyArdC52
YWx1ZSA9PT0gdC52YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJVbm5lY2Vzc2FyaWx5IHF1b3RlZCBwcm9wZXJ0eSBge3tuYW1lfX1gIGZv
dW5kLiIsIGtleSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIFByb3BlcnR5OiBmdW5j
dGlvbihub2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBub2RlLmtleTsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIGFsbCBwcm9wZXJ0eSBuYW1lcyBhcmUgcXVvdGVk
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrZXkudHlwZSAhPT0gIkxpdGVyYWwiIHx8IHR5cGVv
ZiBrZXkudmFsdWUgIT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiVW5xdW90ZWQgcHJvcGVydHkgYHt7bmFtZX19YCBmb3VuZC4iLCBr
ZXkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfTsKLQotICAgIH0KLQotfTsKLQotfSx7ImVzcHJpbWEiOjZ9XSwxMzA6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBj
aG9vc2UgYmV0d2VlbiBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZSBtYXJrcwotICogQGF1dGhvciBN
YXR0IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbS8+LCBCcmFuZG9uIFBheXRvbgot
ICovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBDb25zdGFudHMKLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLXZhciBRVU9URV9TRVRUSU5HUyA9IHsKLSAgICAiZG91YmxlIjogewot
ICAgICAgICBxdW90ZTogIlwiIiwKLSAgICAgICAgYWx0ZXJuYXRlUXVvdGU6ICInIiwKLSAgICAg
ICAgZGVzY3JpcHRpb246ICJkb3VibGVxdW90ZSIKLSAgICB9LAotICAgICJzaW5nbGUiOiB7Ci0g
ICAgICAgIHF1b3RlOiAiJyIsCi0gICAgICAgIGFsdGVybmF0ZVF1b3RlOiAiXCIiLAotICAgICAg
ICBkZXNjcmlwdGlvbjogInNpbmdsZXF1b3RlIgotICAgIH0KLX07Ci0KLXZhciBBVk9JRF9FU0NB
UEUgPSAiYXZvaWQtZXNjYXBlIjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUg
RGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICAidXNlIHN0cmljdCI7Ci0KLSAgICAvKioKLSAgICAg
KiBWYWxpZGF0ZSB0aGF0IGEgc3RyaW5nIHBhc3NlZCBpbiBpcyBzdXJyb3VuZGVkIGJ5IHRoZSBz
cGVjaWZpZWQgY2hhcmFjdGVyCi0gICAgICogQHBhcmFtICB7c3RyaW5nfSB2YWwgVGhlIHRleHQg
dG8gY2hlY2suCi0gICAgICogQHBhcmFtICB7c3RyaW5nfSBjaGFyYWN0ZXIgVGhlIGNoYXJhY3Rl
ciB0byBzZWUgaWYgaXQncyBzdXJyb3VuZGVkIGJ5LgotICAgICAqIEByZXR1cm5zIHtib29sZWFu
fSBUcnVlIGlmIHRoZSB0ZXh0IGlzIHN1cnJvdW5kZWQgYnkgdGhlIGNoYXJhY3RlciwgZmFsc2Ug
aWYgbm90LgotICAgICAqLwotICAgIGZ1bmN0aW9uIGlzU3Vycm91bmRlZEJ5KHZhbCwgY2hhcmFj
dGVyKSB7Ci0gICAgICAgIHJldHVybiB2YWxbMF0gPT09IGNoYXJhY3RlciAmJiB2YWxbdmFsLmxl
bmd0aCAtIDFdID09PSBjaGFyYWN0ZXI7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLQotICAgICAg
ICAiTGl0ZXJhbCI6IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZhciB2YWwgPSBub2Rl
LnZhbHVlLAotICAgICAgICAgICAgICAgIHJhd1ZhbCA9IG5vZGUucmF3LAotICAgICAgICAgICAg
ICAgIHF1b3RlT3B0aW9uID0gY29udGV4dC5vcHRpb25zWzBdLAotICAgICAgICAgICAgICAgIHNl
dHRpbmdzID0gUVVPVEVfU0VUVElOR1NbcXVvdGVPcHRpb25dLAotICAgICAgICAgICAgICAgIGF2
b2lkRXNjYXBlID0gY29udGV4dC5vcHRpb25zWzFdID09PSBBVk9JRF9FU0NBUEUsCi0gICAgICAg
ICAgICAgICAgaXNWYWxpZDsKLQotICAgICAgICAgICAgaWYgKHNldHRpbmdzICYmIHR5cGVvZiB2
YWwgPT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAgICAgICAgaXNWYWxpZCA9IGlzU3Vycm91bmRl
ZEJ5KHJhd1ZhbCwgc2V0dGluZ3MucXVvdGUpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpc1Zh
bGlkICYmIGF2b2lkRXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBpc1N1
cnJvdW5kZWRCeShyYXdWYWwsIHNldHRpbmdzLmFsdGVybmF0ZVF1b3RlKSAmJiByYXdWYWwuaW5k
ZXhPZihzZXR0aW5ncy5xdW90ZSkgPj0gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIWlzVmFsaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIlN0cmluZ3MgbXVzdCB1c2UgIiArIHNldHRpbmdzLmRlc2NyaXB0aW9uICsgIi4i
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Owot
Ci19OwotCi19LHt9XSwxMzE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoq
Ci0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgcGFyc2VJbnQgd2l0aG91dCBh
IHJhZGl4IGFyZ3VtZW50Ci0gKiBAYXV0aG9yIEphbWVzIEFsbGFyZGljZQotICovCi0KLS8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgInVz
ZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZnVu
Y3Rpb24obm9kZSkgewotCi0gICAgICAgICAgICB2YXIgcmFkaXg7Ci0KLSAgICAgICAgICAgIGlm
IChub2RlLmNhbGxlZS5uYW1lID09PSAicGFyc2VJbnQiKSB7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoIDwgMikgewotICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiTWlzc2luZyByYWRpeCBwYXJhbWV0ZXIuIik7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLQotICAgICAgICAgICAgICAgICAgICByYWRpeCA9IG5vZGUuYXJndW1l
bnRzWzFdOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IG5vbi1udW1lcmlj
IGxpdGVyYWxzIG9yIHVuZGVmaW5lZAotICAgICAgICAgICAgICAgICAgICBpZiAoKHJhZGl4LnR5
cGUgPT09ICJMaXRlcmFsIiAmJiB0eXBlb2YgcmFkaXgudmFsdWUgIT09ICJudW1iZXIiKSB8fAot
ICAgICAgICAgICAgICAgICAgICAgICAgKHJhZGl4LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiBy
YWRpeC5uYW1lID09PSAidW5kZWZpbmVkIikKLSAgICAgICAgICAgICAgICAgICAgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiSW52YWxpZCByYWRpeCBw
YXJhbWV0ZXIuIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDEzMjpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBmbGFnIG1pc3Npbmcgc2VtaWNvbG9ucy4KLSAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFr
YXMKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVs
ZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICB2YXIgT1BUX09VVF9QQVRURVJOID0gL1tcW1woXC9c
K1wtXS87Ci0KLSAgICB2YXIgYWx3YXlzID0gY29udGV4dC5vcHRpb25zWzBdICE9PSAibmV2ZXIi
OwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEhlbHBlcnMKLSAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgYSBub2RlIHRvIHNlZSBpZiBp
dCdzIGZvbGxvd2VkIGJ5IGEgc2VtaWNvbG9uLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9k
ZSBUaGUgbm9kZSB0byBjaGVjay4KLSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKi8KLSAg
ICBmdW5jdGlvbiBjaGVja0ZvclNlbWljb2xvbihub2RlKSB7Ci0gICAgICAgIHZhciBsYXN0VG9r
ZW4gPSBjb250ZXh0LmdldExhc3RUb2tlbihub2RlKSwKLSAgICAgICAgICAgIG5leHRUb2tlbiA9
IGNvbnRleHQuZ2V0VG9rZW5BZnRlcihub2RlKTsKLQotICAgICAgICBpZiAoYWx3YXlzKSB7Ci0g
ICAgICAgICAgICBpZiAobGFzdFRva2VuLnR5cGUgIT09ICJQdW5jdHVhdG9yIiB8fCBsYXN0VG9r
ZW4udmFsdWUgIT09ICI7IikgewotICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
IGxhc3RUb2tlbi5sb2MuZW5kLCAiTWlzc2luZyBzZW1pY29sb24uIik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobGFzdFRva2VuLnR5cGUgPT09ICJQ
dW5jdHVhdG9yIiAmJiBsYXN0VG9rZW4udmFsdWUgPT09ICI7IikgewotCi0gICAgICAgICAgICAg
ICAgaWYgKCFuZXh0VG9rZW4gfHwgIShPUFRfT1VUX1BBVFRFUk4udGVzdChuZXh0VG9rZW4udmFs
dWUpKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBub2RlLmxv
Yy5lbmQsICJFeHRyYSBzZW1pY29sb24uIik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgdG8gc2Vl
IGlmIHRoZXJlJ3MgYSBzZW1pY29sb24gYWZ0ZXIgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KLSAg
ICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suCi0gICAgICogQHJl
dHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gY2hlY2tGb3JTZW1pY29sb25Gb3JW
YXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpIHsKLQotICAgICAgICB2YXIgYW5jZXN0b3JzID0gY29u
dGV4dC5nZXRBbmNlc3RvcnMoKSwKLSAgICAgICAgICAgIHBhcmVudEluZGV4ID0gYW5jZXN0b3Jz
Lmxlbmd0aCAtIDEsCi0gICAgICAgICAgICBwYXJlbnQgPSBhbmNlc3RvcnNbcGFyZW50SW5kZXhd
OwotCi0gICAgICAgIGlmICgocGFyZW50LnR5cGUgIT09ICJGb3JTdGF0ZW1lbnQiIHx8IHBhcmVu
dC5pbml0ICE9PSBub2RlKSAmJgotICAgICAgICAgICAgKHBhcmVudC50eXBlICE9PSAiRm9ySW5T
dGF0ZW1lbnQiIHx8IHBhcmVudC5sZWZ0ICE9PSBub2RlKQotICAgICAgICApIHsKLSAgICAgICAg
ICAgIGNoZWNrRm9yU2VtaWNvbG9uKG5vZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYyBBUEkKLSAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogY2hl
Y2tGb3JTZW1pY29sb25Gb3JWYXJpYWJsZURlY2xhcmF0aW9uLAotICAgICAgICAiRXhwcmVzc2lv
blN0YXRlbWVudCI6IGNoZWNrRm9yU2VtaWNvbG9uLAotICAgICAgICAiUmV0dXJuU3RhdGVtZW50
IjogY2hlY2tGb3JTZW1pY29sb24sCi0gICAgICAgICJEZWJ1Z2dlclN0YXRlbWVudCI6IGNoZWNr
Rm9yU2VtaWNvbG9uLAotICAgICAgICAiQnJlYWtTdGF0ZW1lbnQiOiBjaGVja0ZvclNlbWljb2xv
biwKLSAgICAgICAgIkNvbnRpbnVlU3RhdGVtZW50IjogY2hlY2tGb3JTZW1pY29sb24sCi0gICAg
ICAgICJFbXB0eVN0YXRlbWVudCI6IGZ1bmN0aW9uIChub2RlKSB7Ci0gICAgICAgICAgICB2YXIg
bmV4dFRva2VuOwotCi0gICAgICAgICAgICBpZiAoIWFsd2F5cykgewotICAgICAgICAgICAgICAg
IG5leHRUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5BZnRlcihub2RlKSB8fCBjb250ZXh0LmdldExh
c3RUb2tlbihub2RlKTsKLQotICAgICAgICAgICAgICAgIGlmICghKE9QVF9PVVRfUEFUVEVSTi50
ZXN0KG5leHRUb2tlbi52YWx1ZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KG5vZGUsICJFeHRyYSBzZW1pY29sb24uIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0KLSAgICAgICAgfQotICAgIH07Ci0KLX07Ci0KLX0se31dLDEzMzpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0
byByZXF1aXJlIHNvcnRpbmcgb2YgdmFyaWFibGVzIHdpdGhpbiBhIHNpbmdsZSBWYXJpYWJsZSBE
ZWNsYXJhdGlvbiBibG9jawotICogQGF1dGhvciBJbHlhIFZvbG9kaW4KLSAqLwotCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgICJ1c2Ug
c3RyaWN0IjsKLQotICAgIHZhciBjb25maWd1cmF0aW9uID0gY29udGV4dC5vcHRpb25zWzBdIHx8
IHt9LAotICAgICAgICBpZ25vcmVDYXNlID0gY29uZmlndXJhdGlvbi5pZ25vcmVDYXNlIHx8IGZh
bHNlOwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiBmdW5j
dGlvbihub2RlKSB7Ci0gICAgICAgICAgICBub2RlLmRlY2xhcmF0aW9ucy5yZWR1Y2UoZnVuY3Rp
b24obWVtbywgZGVjbCkgewotICAgICAgICAgICAgICAgIHZhciBsYXN0VmFyaWFibGVOYW1lID0g
bWVtby5pZC5uYW1lLAotICAgICAgICAgICAgICAgICAgICBjdXJyZW5WYXJpYWJsZU5hbWUgPSBk
ZWNsLmlkLm5hbWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaWdub3JlQ2FzZSkgewotICAgICAg
ICAgICAgICAgICAgICBsYXN0VmFyaWFibGVOYW1lID0gbGFzdFZhcmlhYmxlTmFtZS50b0xvd2Vy
Q2FzZSgpOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW5WYXJpYWJsZU5hbWUgPSBjdXJyZW5W
YXJpYWJsZU5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoY3VycmVuVmFyaWFibGVOYW1lIDwgbGFzdFZhcmlhYmxlTmFtZSkgewotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChkZWNsLCAiVmFyaWFibGVzIHdpdGhpbiB0
aGUgc2FtZSBkZWNsYXJhdGlvbiBibG9jayBzaG91bGQgYmUgc29ydGVkIGFscGhhYmV0aWNhbGx5
Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtZW1vOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWNsOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0sIG5vZGUuZGVjbGFyYXRpb25zWzBdKTsKLSAgICAgICAgfQotICAg
IH07Ci19OwotCi19LHt9XSwxMzQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewot
LyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZW5mb3JjZSB0aGUgbnVtYmVyIG9mIHNwYWNl
cyBhZnRlciBjZXJ0YWluIGtleXdvcmRzCi0gKiBAYXV0aG9yIE5pY2sgRmlzaGVyCi0gKi8KLSJ1
c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlv
bgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7Ci0KLSAgICAvLyB1bmxlc3MgdGhlIGZpcnN0IG9wdGlvbiBpcyBgIm5ldmVyImAs
IHRoZW4gYSBzcGFjZSBpcyByZXF1aXJlZAotICAgIHZhciByZXF1aXJlc1NwYWNlID0gY29udGV4
dC5vcHRpb25zWzBdICE9PSAibmV2ZXIiLAotICAgICAgICBjb25maWcgPSBjb250ZXh0Lm9wdGlv
bnNbMV0gfHwgeyBjaGVja0Z1bmN0aW9uS2V5d29yZDogZmFsc2UgfTsKLQotICAgIC8qKgotICAg
ICAqIENoZWNrIGlmIHRoZSBzZXBhcmF0aW9uIG9mIHR3byBhZGphY2VudCB0b2tlbnMgbWVldHMg
dGhlIHNwYWNpbmcgcnVsZXMsIGFuZCByZXBvcnQgYSBwcm9ibGVtIGlmIG5vdC4KLSAgICAgKgot
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAgVGhlIG5vZGUgdG8gd2hpY2ggdGhlIHBvdGVu
dGlhbCBwcm9ibGVtIGJlbG9uZ3MuCi0gICAgICogQHBhcmFtIHtUb2tlbn0gbGVmdCAgICBUaGUg
Zmlyc3QgdG9rZW4uCi0gICAgICogQHBhcmFtIHtUb2tlbn0gcmlnaHQgICBUaGUgc2Vjb25kIHRv
a2VuCi0gICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gY2hlY2tU
b2tlbnMobm9kZSwgbGVmdCwgcmlnaHQpIHsKLSAgICAgICAgdmFyIGhhc1NwYWNlID0gbGVmdC5y
YW5nZVsxXSA8IHJpZ2h0LnJhbmdlWzBdLAotICAgICAgICAgICAgdmFsdWUgPSBsZWZ0LnZhbHVl
OwotCi0gICAgICAgIGlmIChoYXNTcGFjZSAhPT0gcmVxdWlyZXNTcGFjZSkgewotICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgIktleXdvcmQgXCJ7e3ZhbHVlfX1cIiBtdXN0IHt7bm90
fX1iZSBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlLiIsIHsKLSAgICAgICAgICAgICAgICB2YWx1ZTog
dmFsdWUsCi0gICAgICAgICAgICAgICAgbm90OiByZXF1aXJlc1NwYWNlID8gIiIgOiAibm90ICIK
LSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hl
Y2sgaWYgdGhlIGdpdmVuIG5vZGUgKGBpZmAsIGBmb3JgLCBgd2hpbGVgLCBldGMpLCBoYXMgdGhl
IGNvcnJlY3Qgc3BhY2luZyBhZnRlciBpdC4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUg
VGhlIG5vZGUgdG8gY2hlY2suCi0gICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAg
ZnVuY3Rpb24gY2hlY2sobm9kZSkgewotICAgICAgICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRG
aXJzdFRva2Vucyhub2RlLCAyKTsKLSAgICAgICAgY2hlY2tUb2tlbnMobm9kZSwgdG9rZW5zWzBd
LCB0b2tlbnNbMV0pOwotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICAgICJJZlN0YXRlbWVu
dCI6IGZ1bmN0aW9uIChub2RlKSB7Ci0gICAgICAgICAgICBjaGVjayhub2RlKTsKLSAgICAgICAg
ICAgIC8vIGNoZWNrIHRoZSBgZWxzZWAKLSAgICAgICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSAm
JiBub2RlLmFsdGVybmF0ZS50eXBlICE9PSAiSWZTdGF0ZW1lbnQiKSB7Ci0gICAgICAgICAgICAg
ICAgY2hlY2tUb2tlbnMobm9kZS5hbHRlcm5hdGUsIGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9k
ZS5hbHRlcm5hdGUpLCBjb250ZXh0LmdldEZpcnN0VG9rZW4obm9kZS5hbHRlcm5hdGUpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkZvclN0YXRlbWVudCI6IGNoZWNrLAot
ICAgICAgICAiRm9yT2ZTdGF0ZW1lbnQiOiBjaGVjaywKLSAgICAgICAgIkZvckluU3RhdGVtZW50
IjogY2hlY2ssCi0gICAgICAgICJXaGlsZVN0YXRlbWVudCI6IGNoZWNrLAotICAgICAgICAiRG9X
aGlsZVN0YXRlbWVudCI6IGZ1bmN0aW9uIChub2RlKSB7Ci0gICAgICAgICAgICBjaGVjayhub2Rl
KTsKLSAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBgd2hpbGVgCi0gICAgICAgICAgICB2YXIgd2hp
bGVUb2tlbnMgPSBjb250ZXh0LmdldFRva2Vuc0JlZm9yZShub2RlLnRlc3QsIDIpOwotICAgICAg
ICAgICAgY2hlY2tUb2tlbnMobm9kZSwgd2hpbGVUb2tlbnNbMF0sIHdoaWxlVG9rZW5zWzFdKTsK
LSAgICAgICAgfSwKLSAgICAgICAgIlN3aXRjaFN0YXRlbWVudCI6IGNoZWNrLAotICAgICAgICAi
VHJ5U3RhdGVtZW50IjogZnVuY3Rpb24gKG5vZGUpIHsKLSAgICAgICAgICAgIGNoZWNrKG5vZGUp
OwotICAgICAgICAgICAgLy8gY2hlY2sgdGhlIGBmaW5hbGx5YAotICAgICAgICAgICAgaWYgKG5v
ZGUuZmluYWxpemVyKSB7Ci0gICAgICAgICAgICAgICAgY2hlY2tUb2tlbnMobm9kZS5maW5hbGl6
ZXIsIGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZS5maW5hbGl6ZXIpLCBjb250ZXh0LmdldEZp
cnN0VG9rZW4obm9kZS5maW5hbGl6ZXIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAg
ICAgICAgIkNhdGNoU3RhdGVtZW50IjogY2hlY2ssCi0gICAgICAgICJXaXRoU3RhdGVtZW50Ijog
Y2hlY2ssCi0gICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbiAobm9kZSkgewot
ICAgICAgICAgICAgaWYgKGNvbmZpZy5jaGVja0Z1bmN0aW9uS2V5d29yZCkgewotICAgICAgICAg
ICAgICAgIGNoZWNrKG5vZGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLX07
Ci0KLX0se31dLDEzNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAq
IEBmaWxlb3ZlcnZpZXcgQSBydWxlIHRvIGVuc3VyZSB3aGl0ZXNwYWNlIGJlZm9yZSBibG9ja3Mu
Ci0gKiBAYXV0aG9yIE1hdGhpYXMgU2NocmVjayA8aHR0cHM6Ly9naXRodWIuY29tL2xvMXR1bWE+
Ci0gKiBAY29weXJpZ2h0IDIwMTQgTWF0aGlhcyBTY2hyZWNrLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICovCi0KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1
bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbiAoY29udGV4dCkgewotICAgIHZhciByZXF1aXJlU3BhY2UgPSBjb250ZXh0Lm9w
dGlvbnNbMF0gIT09ICJuZXZlciI7Ci0KLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIHdoZXRo
ZXIgdHdvIGFkamFjZW50IHRva2VucyBhcmUgaGF2ZSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlbS4K
LSAgICAgKiBAcGFyYW0ge09iamVjdH0gbGVmdCAtIFRoZSBsZWZ0IHRva2VuIG9iamVjdC4KLSAg
ICAgKiBAcGFyYW0ge09iamVjdH0gcmlnaHQgLSBUaGUgcmlnaHQgdG9rZW4gb2JqZWN0LgotICAg
ICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGVyZSBpcyBzcGFjZSBiZXR3
ZWVuIHRoZSB0b2tlbnMuCi0gICAgICovCi0gICAgZnVuY3Rpb24gaXNTcGFjZWQobGVmdCwgcmln
aHQpIHsKLSAgICAgICAgcmV0dXJuIGxlZnQucmFuZ2VbMV0gPCByaWdodC5yYW5nZVswXTsKLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIGFkamFjZW50IHRv
a2VucyBhcmUgb24gdGhlIHNhbWUgbGluZS4KLSAgICAgKiBAcGFyYW0ge09iamVjdH0gbGVmdCAt
IFRoZSBsZWZ0IHRva2VuIG9iamVjdC4KLSAgICAgKiBAcGFyYW0ge09iamVjdH0gcmlnaHQgLSBU
aGUgcmlnaHQgdG9rZW4gb2JqZWN0LgotICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVy
IG9yIG5vdCB0aGUgdG9rZW5zIGFyZSBvbiB0aGUgc2FtZSBsaW5lLgotICAgICAqLwotICAgIGZ1
bmN0aW9uIGlzU2FtZUxpbmUobGVmdCwgcmlnaHQpIHsKLSAgICAgICAgcmV0dXJuIGxlZnQubG9j
LnN0YXJ0LmxpbmUgPT09IHJpZ2h0LmxvYy5zdGFydC5saW5lOwotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIENoZWNrcyB0aGUgZ2l2ZW4gQmxvY2tTdGF0ZW1lbnQgbm9kZSBoYXMgYSBwcmVjZWRp
bmcgc3BhY2UgaWYgaXQgZG9lc27igJl0IHN0YXJ0IG9uIGEgbmV3IGxpbmUuCi0gICAgICogQHBh
cmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSBvZiBhIEJsb2NrU3RhdGVtZW50LgotICAg
ICAqIEByZXR1cm5zIHt2b2lkfSB1bmRlZmluZWQuCi0gICAgICovCi0gICAgZnVuY3Rpb24gY2hl
Y2tQcmVjZWRpbmdTcGFjZShub2RlKSB7Ci0gICAgICAgIHZhciBwcmVjZWRpbmdUb2tlbiA9IGNv
bnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSksCi0gICAgICAgICAgICBoYXNTcGFjZTsKLQotICAg
ICAgICBpZiAocHJlY2VkaW5nVG9rZW4gJiYgaXNTYW1lTGluZShwcmVjZWRpbmdUb2tlbiwgbm9k
ZSkpIHsKLSAgICAgICAgICAgIGhhc1NwYWNlID0gaXNTcGFjZWQocHJlY2VkaW5nVG9rZW4sIG5v
ZGUpOwotCi0gICAgICAgICAgICBpZiAocmVxdWlyZVNwYWNlKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFoYXNTcGFjZSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiTWlzc2luZyBzcGFjZSBiZWZvcmUgb3BlbmluZyBicmFjZS4iKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChoYXNTcGFjZSkg
ewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBz
cGFjZSBiZWZvcmUgb3BlbmluZyBicmFjZS4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gewotICAgICAgICAiQmxvY2tT
dGF0ZW1lbnQiOiBjaGVja1ByZWNlZGluZ1NwYWNlCi0gICAgfTsKLQotfTsKLQotfSx7fV0sMTM2
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmll
dyBEaXNhbGxvd3Mgb3IgZW5mb3JjZXMgc3BhY2VzIGluc2lkZSBvZiBicmFja2V0cy4KLSAqIEBh
dXRob3IgSWFuIENocmlzdGlhbiBNeWVycwotICogQGNvcHlyaWdodCAyMDE0IEJyYW5keW4gQmVu
bmV0dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIEBjb3B5cmlnaHQgMjAxNCBNaWNoYWVsIEZp
Y2FycmEuIE5vIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHZhciBv
cHRpb25zID0gewotICAgICAgICBzcGFjZWQ6IGNvbnRleHQub3B0aW9uc1swXSA9PT0gImFsd2F5
cyIsCi0gICAgICAgIHNpbmdsZUVsZW1lbnRFeGNlcHRpb246IGNvbnRleHQub3B0aW9uc1sxXSAh
PSBudWxsICYmICEhY29udGV4dC5vcHRpb25zWzFdLnNpbmdsZVZhbHVlLAotICAgICAgICBvYmpl
Y3RzSW5BcnJheXNFeGNlcHRpb246IGNvbnRleHQub3B0aW9uc1sxXSAhPSBudWxsICYmICEhY29u
dGV4dC5vcHRpb25zWzFdLm9iamVjdHNJbkFycmF5cywKLSAgICAgICAgYXJyYXlzSW5BcnJheXNF
eGNlcHRpb246IGNvbnRleHQub3B0aW9uc1sxXSAhPSBudWxsICYmICEhY29udGV4dC5vcHRpb25z
WzFdLmFycmF5c0luQXJyYXlzLAotICAgICAgICBwcm9wZXJ0eU5hbWU6IGNvbnRleHQub3B0aW9u
c1sxXSA9PSBudWxsIHx8IGNvbnRleHQub3B0aW9uc1sxXS5wcm9wZXJ0eU5hbWUgPT0gbnVsbCB8
fCAhIWNvbnRleHQub3B0aW9uc1sxXS5wcm9wZXJ0eU5hbWUKLSAgICB9OwotCi0gICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgIC8vIEhlbHBlcnMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIGFkamFjZW50IHRva2VucyBh
cmUgaGF2ZSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlbS4KLSAgICAgKiBAcGFyYW0ge09iamVjdH0g
bGVmdCAtIFRoZSBsZWZ0IHRva2VuIG9iamVjdC4KLSAgICAgKiBAcGFyYW0ge09iamVjdH0gcmln
aHQgLSBUaGUgcmlnaHQgdG9rZW4gb2JqZWN0LgotICAgICAqIEByZXR1cm5zIHtib29sZWFufSBX
aGV0aGVyIG9yIG5vdCB0aGVyZSBpcyBzcGFjZSBiZXR3ZWVuIHRoZSB0b2tlbnMuCi0gICAgICov
Ci0gICAgZnVuY3Rpb24gaXNTcGFjZWQobGVmdCwgcmlnaHQpIHsKLSAgICAgICAgcmV0dXJuIGxl
ZnQucmFuZ2VbMV0gPCByaWdodC5yYW5nZVswXTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBE
ZXRlcm1pbmVzIHdoZXRoZXIgdHdvIGFkamFjZW50IHRva2VucyBhcmUgb24gdGhlIHNhbWUgbGlu
ZS4KLSAgICAgKiBAcGFyYW0ge09iamVjdH0gbGVmdCAtIFRoZSBsZWZ0IHRva2VuIG9iamVjdC4K
LSAgICAgKiBAcGFyYW0ge09iamVjdH0gcmlnaHQgLSBUaGUgcmlnaHQgdG9rZW4gb2JqZWN0Lgot
ICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgdG9rZW5zIGFyZSBv
biB0aGUgc2FtZSBsaW5lLgotICAgICAqLwotICAgIGZ1bmN0aW9uIGlzU2FtZUxpbmUobGVmdCwg
cmlnaHQpIHsKLSAgICAgICAgcmV0dXJuIGxlZnQubG9jLnN0YXJ0LmxpbmUgPT09IHJpZ2h0Lmxv
Yy5zdGFydC5saW5lOwotICAgIH0KLQotICAgIC8qKgotICAgICogUmVwb3J0cyB0aGF0IHRoZXJl
IHNob3VsZG4ndCBiZSBhIHNwYWNlIGFmdGVyIHRoZSBmaXJzdCB0b2tlbgotICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gcmVwb3J0IGluIHRoZSBldmVudCBvZiBhbiBl
cnJvci4KLSAgICAqIEBwYXJhbSB7T2JqZWN0W119IHRva2VucyAtIFRoZSB0b2tlbnMgdG8gYmUg
Y2hlY2tlZCBmb3Igc3BhY2luZy4KLSAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICovCi0gICAg
ZnVuY3Rpb24gcmVwb3J0Tm9CZWdpbm5pbmdTcGFjZShub2RlLCB0b2tlbnMpIHsKLSAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgdG9rZW5zWzBdLmxvYy5zdGFydCwKLSAgICAgICAgICAgICAg
ICAgICAgIlRoZXJlIHNob3VsZCBiZSBubyBzcGFjZSBhZnRlciAnIiArIHRva2Vuc1swXS52YWx1
ZSArICInIik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgKiBSZXBvcnRzIHRoYXQgdGhlcmUgc2hv
dWxkbid0IGJlIGEgc3BhY2UgYmVmb3JlIHRoZSBsYXN0IHRva2VuCi0gICAgKiBAcGFyYW0ge0FT
VE5vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byByZXBvcnQgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9y
LgotICAgICogQHBhcmFtIHtPYmplY3RbXX0gdG9rZW5zIC0gVGhlIHRva2VucyB0byBiZSBjaGVj
a2VkIGZvciBzcGFjaW5nLgotICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgKi8KLSAgICBmdW5j
dGlvbiByZXBvcnROb0VuZGluZ1NwYWNlKG5vZGUsIHRva2VucykgewotICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdLmxvYy5zdGFydCwKLSAgICAg
ICAgICAgICAgICAgICAgIlRoZXJlIHNob3VsZCBiZSBubyBzcGFjZSBiZWZvcmUgJyIgKyB0b2tl
bnNbdG9rZW5zLmxlbmd0aCAtIDFdLnZhbHVlICsgIiciKTsKLSAgICB9Ci0KLSAgICAvKioKLSAg
ICAqIFJlcG9ydHMgdGhhdCB0aGVyZSBzaG91bGQgYmUgYSBzcGFjZSBhZnRlciB0aGUgZmlyc3Qg
dG9rZW4KLSAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHJlcG9ydCBp
biB0aGUgZXZlbnQgb2YgYW4gZXJyb3IuCi0gICAgKiBAcGFyYW0ge09iamVjdFtdfSB0b2tlbnMg
LSBUaGUgdG9rZW5zIHRvIGJlIGNoZWNrZWQgZm9yIHNwYWNpbmcuCi0gICAgKiBAcmV0dXJucyB7
dm9pZH0KLSAgICAqLwotICAgIGZ1bmN0aW9uIHJlcG9ydFJlcXVpcmVkQmVnaW5uaW5nU3BhY2Uo
bm9kZSwgdG9rZW5zKSB7Ci0gICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIHRva2Vuc1swXS5s
b2Muc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICJBIHNwYWNlIGlzIHJlcXVpcmVkIGFmdGVy
ICciICsgdG9rZW5zWzBdLnZhbHVlICsgIiciKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAqIFJl
cG9ydHMgdGhhdCB0aGVyZSBzaG91bGQgYmUgYSBzcGFjZSBiZWZvcmUgdGhlIGxhc3QgdG9rZW4K
LSAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHJlcG9ydCBpbiB0aGUg
ZXZlbnQgb2YgYW4gZXJyb3IuCi0gICAgKiBAcGFyYW0ge09iamVjdFtdfSB0b2tlbnMgLSBUaGUg
dG9rZW5zIHRvIGJlIGNoZWNrZWQgZm9yIHNwYWNpbmcuCi0gICAgKiBAcmV0dXJucyB7dm9pZH0K
LSAgICAqLwotICAgIGZ1bmN0aW9uIHJlcG9ydFJlcXVpcmVkRW5kaW5nU3BhY2Uobm9kZSwgdG9r
ZW5zKSB7Ci0gICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIHRva2Vuc1t0b2tlbnMubGVuZ3Ro
IC0gMV0ubG9jLnN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAiQSBzcGFjZSBpcyByZXF1aXJl
ZCBiZWZvcmUgJyIgKyB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdLnZhbHVlICsgIiciKTsKLSAg
ICB9Ci0KLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBQdWJsaWMKLSAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLSAgICByZXR1cm4gewotCi0gICAgICAgIE1lbWJlckV4cHJlc3Np
b246IG9wdGlvbnMucHJvcGVydHlOYW1lID8gZnVuY3Rpb24gY2hlY2tNZW1iZXIobm9kZSkgewot
ICAgICAgICAgICAgaWYgKG5vZGUuY29tcHV0ZWQpIHsKLSAgICAgICAgICAgICAgICB2YXIgdG9r
ZW5zID0gY29udGV4dC5nZXRUb2tlbnMobm9kZS5wcm9wZXJ0eSwgMSwgMSk7Ci0gICAgICAgICAg
ICAgICAgdmFyIHRva2VuQSA9IHRva2Vuc1swXSwgdG9rZW5CID0gdG9rZW5zWzFdLAotICAgICAg
ICAgICAgICAgICAgICB0b2tlbkMgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDJdLCB0b2tlbkQg
PSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdOwotICAgICAgICAgICAgICAgIGlmIChpc1NhbWVM
aW5lKHRva2VuQSwgdG9rZW5CKSB8fCBpc1NhbWVMaW5lKHRva2VuQywgdG9rZW5EKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zcGFjZWQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghaXNTcGFjZWQodG9rZW5BLCB0b2tlbkIpICYmIGlzU2FtZUxpbmUodG9rZW5B
LCB0b2tlbkIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UmVxdWlyZWRC
ZWdpbm5pbmdTcGFjZShub2RlLCB0b2tlbnMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlZCh0b2tlbkMsIHRva2VuRCkgJiYg
aXNTYW1lTGluZSh0b2tlbkMsIHRva2VuRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXBvcnRSZXF1aXJlZEVuZGluZ1NwYWNlKG5vZGUsIHRva2Vucyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNTcGFjZWQodG9rZW5BLCB0b2tlbkIpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwb3J0Tm9CZWdpbm5pbmdTcGFjZShub2RlLCB0b2tlbnMpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3Bh
Y2VkKHRva2VuQywgdG9rZW5EKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9y
dE5vRW5kaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSA6IGZ1bmN0aW9uKCkge30sCi0KLSAgICAgICAgQXJyYXlFeHByZXNzaW9uOiBm
dW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS5lbGVtZW50cy5sZW5ndGggPT09
IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnMobm9kZSk7Ci0gICAgICAgICAgICB2YXIg
dG9rZW5BID0gdG9rZW5zWzBdLCB0b2tlbkIgPSB0b2tlbnNbMV0sCi0gICAgICAgICAgICAgICAg
dG9rZW5DID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAyXSwgdG9rZW5EID0gdG9rZW5zW3Rva2Vu
cy5sZW5ndGggLSAxXTsKLQotICAgICAgICAgICAgdmFyIG9wZW5pbmdCcmFja2V0TXVzdEJlU3Bh
Y2VkID0KLSAgICAgICAgICAgICAgICBvcHRpb25zLm9iamVjdHNJbkFycmF5c0V4Y2VwdGlvbiAm
JiB0b2tlbkIudmFsdWUgPT09ICJ7IiB8fAotICAgICAgICAgICAgICAgIG9wdGlvbnMuYXJyYXlz
SW5BcnJheXNFeGNlcHRpb24gJiYgdG9rZW5CLnZhbHVlID09PSAiWyIgfHwKLSAgICAgICAgICAg
ICAgICBvcHRpb25zLnNpbmdsZUVsZW1lbnRFeGNlcHRpb24gJiYgbm9kZS5lbGVtZW50cy5sZW5n
dGggPT09IDEKLSAgICAgICAgICAgICAgICA/ICFvcHRpb25zLnNwYWNlZCA6IG9wdGlvbnMuc3Bh
Y2VkOwotCi0gICAgICAgICAgICB2YXIgY2xvc2luZ0JyYWNrZXRNdXN0QmVTcGFjZWQgPQotICAg
ICAgICAgICAgICAgIG9wdGlvbnMub2JqZWN0c0luQXJyYXlzRXhjZXB0aW9uICYmIHRva2VuQy52
YWx1ZSA9PT0gIn0iIHx8Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy5hcnJheXNJbkFycmF5c0V4
Y2VwdGlvbiAmJiB0b2tlbkMudmFsdWUgPT09ICJdIiB8fAotICAgICAgICAgICAgICAgIG9wdGlv
bnMuc2luZ2xlRWxlbWVudEV4Y2VwdGlvbiAmJiBub2RlLmVsZW1lbnRzLmxlbmd0aCA9PT0gMQot
ICAgICAgICAgICAgICAgID8gIW9wdGlvbnMuc3BhY2VkIDogb3B0aW9ucy5zcGFjZWQ7Ci0KLSAg
ICAgICAgICAgIGlmIChpc1NhbWVMaW5lKHRva2VuQSwgdG9rZW5CKSB8fCBpc1NhbWVMaW5lKHRv
a2VuQywgdG9rZW5EKSkgewotICAgICAgICAgICAgICAgIGlmIChvcGVuaW5nQnJhY2tldE11c3RC
ZVNwYWNlZCAmJiAhaXNTcGFjZWQodG9rZW5BLCB0b2tlbkIpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlcG9ydFJlcXVpcmVkQmVnaW5uaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCFvcGVuaW5nQnJhY2tldE11c3RCZVNwYWNlZCAmJiBpc1NwYWNl
ZCh0b2tlbkEsIHRva2VuQikpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwb3J0Tm9CZWdpbm5p
bmdTcGFjZShub2RlLCB0b2tlbnMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAoY2xvc2luZ0JyYWNrZXRNdXN0QmVTcGFjZWQgJiYgIWlzU3BhY2VkKHRva2VuQywgdG9r
ZW5EKSkgewotICAgICAgICAgICAgICAgICAgICByZXBvcnRSZXF1aXJlZEVuZGluZ1NwYWNlKG5v
ZGUsIHRva2Vucyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghY2xvc2luZ0JyYWNrZXRN
dXN0QmVTcGFjZWQgJiYgaXNTcGFjZWQodG9rZW5DLCB0b2tlbkQpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJlcG9ydE5vRW5kaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgT2JqZWN0RXhwcmVzc2lv
bjogZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUucHJvcGVydGllcy5sZW5n
dGggPT09IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnMobm9kZSk7Ci0gICAgICAgICAg
ICB2YXIgdG9rZW5BID0gdG9rZW5zWzBdLCB0b2tlbkIgPSB0b2tlbnNbMV0sCi0gICAgICAgICAg
ICAgICAgdG9rZW5DID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAyXSwgdG9rZW5EID0gdG9rZW5z
W3Rva2Vucy5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgIGlmIChpc1NhbWVMaW5lKHRva2VuQSwg
dG9rZW5CKSB8fCBpc1NhbWVMaW5lKHRva2VuQywgdG9rZW5EKSkgewotICAgICAgICAgICAgICAg
IGlmIChvcHRpb25zLnNwYWNlZCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2Vk
KHRva2VuQSwgdG9rZW5CKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UmVxdWly
ZWRCZWdpbm5pbmdTcGFjZShub2RlLCB0b2tlbnMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZWQodG9rZW5DLCB0b2tlbkQpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXBvcnRSZXF1aXJlZEVuZGluZ1NwYWNlKG5vZGUsIHRva2Vu
cyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNTcGFjZWQodG9rZW5BLCB0b2tlbkIpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXBvcnROb0JlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vucyk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3BhY2VkKHRv
a2VuQywgdG9rZW5EKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0Tm9FbmRpbmdT
cGFjZShub2RlLCB0b2tlbnMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9OwotCi19OwotCi19LHt9XSwx
Mzc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2
aWV3IERpc2FsbG93cyBvciBlbmZvcmNlcyBzcGFjZXMgaW5zaWRlIG9mIHBhcmVudGhlc2VzLgot
ICogQGF1dGhvciBKb25hdGhhbiBSYWphdnVvcmkKLSAqIEBjb3B5cmlnaHQgMjAxNCBKb25hdGhh
biBSYWphdnVvcmkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAg
ICB2YXIgUkUsIE1FU1NBR0U7Ci0KLSAgICBpZiAoY29udGV4dC5vcHRpb25zWzBdID09PSAiYWx3
YXlzIikgewotICAgICAgICBSRSA9IC9cKFteIFwpXXxbXiBcKF1cKS9tZzsKLSAgICAgICAgTUVT
U0FHRSA9ICJUaGVyZSBtdXN0IGJlIGEgc3BhY2UgaW5zaWRlIHRoaXMgcGFyZW4uIjsKLSAgICB9
IGVsc2UgewotICAgICAgICBSRSA9IC9cKCB8IFwpL21nOwotICAgICAgICBNRVNTQUdFID0gIlRo
ZXJlIHNob3VsZCBiZSBubyBzcGFjZXMgaW5zaWRlIHRoaXMgcGFyZW4uIjsKLSAgICB9Ci0KLQot
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gICAgdmFyIHNraXBSYW5nZXMgPSBbXTsKLQotICAgIC8qKgotICAgICAqIEFk
ZHMgdGhlIHJhbmdlIG9mIGEgbm9kZSB0byB0aGUgc2V0IHRvIGJlIHNraXBwZWQgd2hlbiBjaGVj
a2luZyBwYXJlbnMKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gc2tp
cAotICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqIEBwcml2YXRlCi0gICAgICovCi0gICAg
ZnVuY3Rpb24gYWRkU2tpcFJhbmdlKG5vZGUpIHsKLSAgICAgICAgc2tpcFJhbmdlcy5wdXNoKG5v
ZGUucmFuZ2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNvcnRzIHRoZSBza2lwUmFuZ2Vz
IGFycmF5LiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgc2hvdWxkU2tpcAotICAgICAqIEByZXR1cm5z
IHt2b2lkfQotICAgICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gc29ydFNraXBS
YW5nZXMoKSB7Ci0gICAgICAgIHNraXBSYW5nZXMuc29ydChmdW5jdGlvbiAoYSwgYikgewotICAg
ICAgICAgICAgcmV0dXJuIGFbMF0gLSBiWzBdOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICAv
KioKLSAgICAgKiBDaGVja3MgaWYgYSBjZXJ0YWluIHBvc2l0aW9uIGluIHRoZSBzb3VyY2Ugc2hv
dWxkIGJlIHNraXBwZWQKLSAgICAgKiBAcGFyYW0ge051bWJlcn0gcG9zIFRoZSAwLWJhc2VkIGlu
ZGV4IGluIHRoZSBzb3VyY2UKLSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gd2hldGhlciB0aGUg
cG9zaXRpb24gc2hvdWxkIGJlIHNraXBwZWQKLSAgICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAg
IGZ1bmN0aW9uIHNob3VsZFNraXAocG9zKSB7Ci0gICAgICAgIHZhciBpLCBsZW4sIHJhbmdlOwot
ICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBza2lwUmFuZ2VzLmxlbmd0aDsgaSA8IGxlbjsgaSAr
PSAxKSB7Ci0gICAgICAgICAgICByYW5nZSA9IHNraXBSYW5nZXNbaV07Ci0gICAgICAgICAgICBp
ZiAocG9zIDwgcmFuZ2VbMF0pIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAocG9zIDwgcmFuZ2VbMV0pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFB1YmxpYwotICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotICAgIHJldHVybiB7Ci0KLSAgICAgICAgIlByb2dyYW06ZXhpdCI6IGZ1
bmN0aW9uIGNoZWNrUGFyZW5TcGFjZXMobm9kZSkgewotCi0gICAgICAgICAgICB2YXIgbWF0Y2gs
Ci0gICAgICAgICAgICAgICAgbmV4dExpbmUsCi0gICAgICAgICAgICAgICAgY29sdW1uLAotICAg
ICAgICAgICAgICAgIGxpbmUgPSAxLAotICAgICAgICAgICAgICAgIHNvdXJjZSA9IGNvbnRleHQu
Z2V0U291cmNlKCksCi0gICAgICAgICAgICAgICAgcG9zID0gMDsKLQotICAgICAgICAgICAgc29y
dFNraXBSYW5nZXMoKTsKLQotICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IFJFLmV4ZWMoc291
cmNlKSkgIT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJBdChtYXRj
aC5pbmRleCkgIT09ICIoIikgewotICAgICAgICAgICAgICAgICAgICAvLyBNYXRjaGVkIGEgY2xv
c2luZyBwYXJlbiBwYXR0ZXJuCi0gICAgICAgICAgICAgICAgICAgIG1hdGNoLmluZGV4ICs9IDE7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFzaG91bGRTa2lwKG1h
dGNoLmluZGV4KSkgewotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG5leHRMaW5lID0gc291
cmNlLmluZGV4T2YoIlxuIiwgcG9zKSkgIT09IC0xICYmIG5leHRMaW5lIDwgbWF0Y2guaW5kZXgp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG5leHRMaW5lICsgMTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmUgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBjb2x1bW4gPSBtYXRjaC5pbmRleCAtIHBvczsKLQotICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCB7IGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1u
IH0sIE1FU1NBR0UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICB9LAotCi0KLSAgICAgICAgLy8gVGhlc2Ugbm9kZXMgY2FuIGNvbnRhaW4gcGFyZW50aGVzZXMg
dGhhdCB0aGlzIHJ1bGUgZG9lc24ndCBjYXJlIGFib3V0Ci0KLSAgICAgICAgTGluZUNvbW1lbnQ6
IGFkZFNraXBSYW5nZSwKLQotICAgICAgICBCbG9ja0NvbW1lbnQ6IGFkZFNraXBSYW5nZSwKLQot
ICAgICAgICBMaXRlcmFsOiBhZGRTa2lwUmFuZ2UKLQotICAgIH07Ci0KLX07Ci0KLX0se31dLDEz
ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZp
ZXcgUmVxdWlyZSBzcGFjZXMgYXJvdW5kIGluZml4IG9wZXJhdG9ycwotICogQGF1dGhvciBNaWNo
YWVsIEZpY2FycmEKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1tb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAgIHZhciBPUEVSQVRPUlMgPSBbCi0g
ICAgICAgICIqIiwgIi8iLCAiJSIsICIrIiwgIi0iLCAiPDwiLCAiPj4iLCAiPj4+IiwgIjwiLCAi
PD0iLCAiPiIsICI+PSIsICJpbiIsCi0gICAgICAgICJpbnN0YW5jZW9mIiwgIj09IiwgIiE9Iiwg
Ij09PSIsICIhPT0iLCAiJiIsICJeIiwgInwiLCAiJiYiLCAifHwiLCAiPSIsCi0gICAgICAgICIr
PSIsICItPSIsICIqPSIsICIvPSIsICIlPSIsICI8PD0iLCAiPj49IiwgIj4+Pj0iLCAiJj0iLCAi
Xj0iLCAifD0iLAotICAgICAgICAiPyIsICI6IiwgIiwiCi0gICAgXTsKLQotICAgIGZ1bmN0aW9u
IGlzU3BhY2VkKGxlZnQsIHJpZ2h0KSB7Ci0gICAgICAgIHZhciBvcCwgdG9rZW5zID0gY29udGV4
dC5nZXRUb2tlbnMoe3JhbmdlOiBbbGVmdC5yYW5nZVsxXSwgcmlnaHQucmFuZ2VbMF1dfSwgMSwg
MSk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAxLCBsID0gdG9rZW5zLmxlbmd0aCAtIDE7IGkgPCBs
OyArK2kpIHsKLSAgICAgICAgICAgIG9wID0gdG9rZW5zW2ldOwotICAgICAgICAgICAgaWYgKAot
ICAgICAgICAgICAgICAgIG9wLnR5cGUgPT09ICJQdW5jdHVhdG9yIiAmJgotICAgICAgICAgICAg
ICAgIE9QRVJBVE9SUy5pbmRleE9mKG9wLnZhbHVlKSA+PSAwICYmCi0gICAgICAgICAgICAgICAg
KHRva2Vuc1tpIC0gMV0ucmFuZ2VbMV0gPj0gb3AucmFuZ2VbMF0gfHwgb3AucmFuZ2VbMV0gPj0g
dG9rZW5zW2kgKyAxXS5yYW5nZVswXSkKLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpc1JpZ2h0U3BhY2VkKGxlZnQsIHJpZ2h0KSB7
Ci0gICAgICAgIHZhciBvcCwgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnMoe3JhbmdlOiBbbGVm
dC5yYW5nZVsxXSwgcmlnaHQucmFuZ2VbMF1dfSwgMSwgMSk7Ci0gICAgICAgIGZvciAodmFyIGkg
PSAxLCBsID0gdG9rZW5zLmxlbmd0aCAtIDE7IGkgPCBsOyArK2kpIHsKLSAgICAgICAgICAgIG9w
ID0gdG9rZW5zW2ldOwotICAgICAgICAgICAgaWYgKAotICAgICAgICAgICAgICAgIG9wLnR5cGUg
PT09ICJQdW5jdHVhdG9yIiAmJgotICAgICAgICAgICAgICAgIE9QRVJBVE9SUy5pbmRleE9mKG9w
LnZhbHVlKSA+PSAwICYmCi0gICAgICAgICAgICAgICAgb3AucmFuZ2VbMV0gPj0gdG9rZW5zW2kg
KyAxXS5yYW5nZVswXQotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIHJlcG9ydChub2RlKSB7Ci0gICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJJbmZpeCBvcGVyYXRvcnMgbXVzdCBiZSBzcGFjZWQuIik7Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gY2hlY2tCaW5hcnkobm9kZSkgewotICAgICAgICBpZiAoIWlzU3BhY2VkKG5vZGUu
bGVmdCwgbm9kZS5yaWdodCkpIHsKLSAgICAgICAgICAgIHJlcG9ydChub2RlKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNoZWNrU2VxdWVuY2Uobm9kZSkgewotICAgICAgICBm
b3IgKHZhciBpID0gMCwgbCA9IG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoIC0gMTsgaSA8IGw7ICsr
aSkgewotICAgICAgICAgICAgaWYgKCFpc1JpZ2h0U3BhY2VkKG5vZGUuZXhwcmVzc2lvbnNbaV0s
IG5vZGUuZXhwcmVzc2lvbnNbaSArIDFdKSkgewotICAgICAgICAgICAgICAgIHJlcG9ydChub2Rl
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIGZ1bmN0aW9uIGNoZWNrQ29uZGl0aW9uYWwobm9kZSkgewotICAgICAgICBpZiAo
IWlzU3BhY2VkKG5vZGUudGVzdCwgbm9kZS5jb25zZXF1ZW50KSB8fCAhaXNTcGFjZWQobm9kZS5j
b25zZXF1ZW50LCBub2RlLmFsdGVybmF0ZSkpIHsKLSAgICAgICAgICAgIHJlcG9ydChub2RlKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNoZWNrVmFyKG5vZGUpIHsKLSAgICAg
ICAgaWYgKG5vZGUuaW5pdCAmJiAhaXNTcGFjZWQobm9kZS5pZCwgbm9kZS5pbml0KSkgewotICAg
ICAgICAgICAgcmVwb3J0KG5vZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsK
LSAgICAgICAgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjogY2hlY2tCaW5hcnksCi0gICAgICAgICJC
aW5hcnlFeHByZXNzaW9uIjogY2hlY2tCaW5hcnksCi0gICAgICAgICJMb2dpY2FsRXhwcmVzc2lv
biI6IGNoZWNrQmluYXJ5LAotICAgICAgICAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIjogY2hlY2tD
b25kaXRpb25hbCwKLSAgICAgICAgIlNlcXVlbmNlRXhwcmVzc2lvbiI6IGNoZWNrU2VxdWVuY2Us
Ci0gICAgICAgICJWYXJpYWJsZURlY2xhcmF0b3IiOiBjaGVja1ZhcgotICAgIH07Ci0KLX07Ci0K
LX0se31dLDEzOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBm
aWxlb3ZlcnZpZXcgUmVxdWlyZSBzcGFjZXMgZm9sbG93aW5nIHJldHVybiwgdGhyb3csIGFuZCBj
YXNlCi0gKiBAYXV0aG9yIE1pY2hhZWwgRmljYXJyYQotICovCi0idXNlIHN0cmljdCI7Ci0KLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAg
ZnVuY3Rpb24gY2hlY2sobm9kZSkgewotICAgICAgICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRG
aXJzdFRva2Vucyhub2RlLCAyKSwKLSAgICAgICAgICAgIHZhbHVlID0gdG9rZW5zWzBdLnZhbHVl
OwotCi0gICAgICAgIGlmICh0b2tlbnNbMF0ucmFuZ2VbMV0gPj0gdG9rZW5zWzFdLnJhbmdlWzBd
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiS2V5d29yZCBcIiIgKyB2YWx1
ZSArICJcIiBtdXN0IGJlIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UuIik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gewotICAgICAgICAiUmV0dXJuU3RhdGVtZW50IjogZnVuY3Rpb24o
bm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1lbnQpIHsKLSAgICAgICAgICAgICAg
ICBjaGVjayhub2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIlN3aXRj
aENhc2UiOiBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS50ZXN0KSB7Ci0g
ICAgICAgICAgICAgICAgY2hlY2sobm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0g
ICAgICAgICJUaHJvd1N0YXRlbWVudCI6IGNoZWNrCi0gICAgfTsKLQotfTsKLQotfSx7fV0sMTQw
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmll
dyBSZXF1aXJlIHNwYWNlcyBmb2xsb3dpbmcgdW5hcnkgd29yZCBvcGVyYXRvcnMKLSAqIEBhdXRo
b3IgTWljaGFlbCBGaWNhcnJhCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLS8vIFJ1bGUgRGVmaW5pdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7Ci0KLSAgICBmdW5jdGlvbiBjaGVj
ayhub2RlKSB7Ci0gICAgICAgIHZhciB0b2tlbnM7Ci0gICAgICAgIHRva2VucyA9IGNvbnRleHQu
Z2V0Rmlyc3RUb2tlbnMobm9kZSwgMik7Ci0gICAgICAgIGlmICh0b2tlbnNbMF0ucmFuZ2VbMV0g
Pj0gdG9rZW5zWzFdLnJhbmdlWzBdKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRva2Vuc1swXS52
YWx1ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgImRlbGV0ZSI6Ci0gICAgICAgICAgICAgICAg
Y2FzZSAibmV3IjoKLSAgICAgICAgICAgICAgICBjYXNlICJ0eXBlb2YiOgotICAgICAgICAgICAg
ICAgIGNhc2UgInZvaWQiOgotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiVW5hcnkgd29yZCBvcGVyYXRvciBcIiIgKyB0b2tlbnNbMF0udmFsdWUgKyAiXCIgbXVzdCBi
ZSBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlLiIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAvLyBubyBkZWZhdWx0Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gewotICAgICAgICAiTmV3RXhwcmVzc2lvbiI6IGNoZWNrLAot
ICAgICAgICAiVW5hcnlFeHByZXNzaW9uIjogY2hlY2sKLSAgICB9OwotCi19OwotCi19LHt9XSwx
NDE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2
aWV3IEVuZm9yY2VzIG9yIGRpc2FsbG93cyBhIHNwYWNlIGJlZ2lubmluZyBhIHNpbmdsZS1saW5l
IGNvbW1lbnQuCi0gKiBAYXV0aG9yIEdyZWcgQ29jaGFyZAotICogQGNvcHlyaWdodCAyMDE0IEdy
ZWcgQ29jaGFyZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqLwotInVzZSBzdHJpY3QiOwotCi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAg
IC8vIFVubGVzcyB0aGUgZmlyc3Qgb3B0aW9uIGlzIG5ldmVyLCByZXF1aXJlIGEgc3BhY2UKLSAg
ICB2YXIgcmVxdWlyZVNwYWNlID0gY29udGV4dC5vcHRpb25zWzBdICE9PSAibmV2ZXIiOwotCi0g
ICAgLy8gRGVmYXVsdCB0byBtYXRjaCBhbnl0aGluZywgc28gYWxsIHdpbGwgZmFpbCBpZiB0aGVy
ZSBhcmUgbm8gZXhjZXB0aW9ucwotICAgIHZhciBleGNlcHRpb25NYXRjaGVyID0gbmV3IFJlZ0V4
cCgiICIpOwotCi0gICAgLy8gR3JhYiB0aGUgZXhjZXB0aW9ucyBhcnJheSBhbmQgYnVpbGQgYSBS
ZWdFeHAgbWF0Y2hlciBmb3IgaXQKLSAgICB2YXIgaGFzRXhjZXB0aW9ucyA9IGNvbnRleHQub3B0
aW9ucy5sZW5ndGggPT09IDI7Ci0gICAgdmFyIHVuZXNjYXBlZEV4Y2VwdGlvbnMgPSBoYXNFeGNl
cHRpb25zID8gY29udGV4dC5vcHRpb25zWzFdLmV4Y2VwdGlvbnMgOiBbXTsKLSAgICB2YXIgZXhj
ZXB0aW9uczsKLQotICAgIGlmICh1bmVzY2FwZWRFeGNlcHRpb25zLmxlbmd0aCkgewotICAgICAg
ICBleGNlcHRpb25zID0gdW5lc2NhcGVkRXhjZXB0aW9ucy5tYXAoZnVuY3Rpb24ocykgewotICAg
ICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvKFsuKis/JHt9KCl8XF5cW1xdXC9cXF0pL2csICJc
XCQxIik7Ci0gICAgICAgIH0pOwotICAgICAgICBleGNlcHRpb25NYXRjaGVyID0gbmV3IFJlZ0V4
cCgiKF4oIiArIGV4Y2VwdGlvbnMuam9pbigiKSskKXwoXigiKSArICIpKyQpIik7Ci0gICAgfQot
Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljCi0gICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiTGluZUNvbW1lbnQiOiBmdW5j
dGlvbiBjaGVja0NvbW1lbnRGb3JTcGFjZShub2RlKSB7Ci0KLSAgICAgICAgICAgIGlmIChub2Rl
LmxvYy5zdGFydC5saW5lID09PSAxICYmIC9eIyEvLnRlc3QoY29udGV4dC5nZXRTb3VyY2VMaW5l
cygpWzBdKSkgewotCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBIQUNL
OiByZXR1cm4gaWYgd2UgYXJlIG9uIHRoZSBmaXJzdCBsaW5lIGFuZAotICAgICAgICAgICAgICAg
ICAqIGVuY291bnRlciBhIHNoZWJhbmcgYXQgdGhlIGJlZ2lubmluZy4KLSAgICAgICAgICAgICAg
ICAgKiBJdCBzZWVtcyB0aGUgcGFyc2VyIHdpbGwgcmV0dXJuIHRoaXMgYXMgYQotICAgICAgICAg
ICAgICAgICAqIGNvbW1lbnQgYW5kIGZpbHRlciBvdXQgdGhlICMgc28gd2UgbXVzdCBmZXRjaAot
ICAgICAgICAgICAgICAgICAqIHRoZSBhY3R1YWwgc291cmNlIGxpbmUuIElzIHRoaXMgYmVpbmcg
Y2F1c2VkCi0gICAgICAgICAgICAgICAgICogYnkgZXNwcmltYSBvciBlc2xpbnQ/IFNvbWV0aGlu
ZyBlbHNlPwotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHJlcXVpcmVTcGFjZSkgewotCi0gICAgICAg
ICAgICAgICAgLy8gU3BhY2UgZXhwZWN0ZWQgYW5kIG5vdCBmb3VuZAotICAgICAgICAgICAgICAg
IGlmIChub2RlLnZhbHVlLmluZGV4T2YoIiAiKSAhPT0gMCkgewotCi0gICAgICAgICAgICAgICAg
ICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAqIERvIHR3byB0ZXN0czsgb25lIGZvciBzcGFj
ZSBzdGFydGluZyB0aGUgbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICogYW5kIG9uZSBmb3Ig
YSBjb21tZW50IGNvbXByaXNlZCBvbmx5IG9mIGV4Y2VwdGlvbnMKLSAgICAgICAgICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNFeGNlcHRpb25zICYmICFleGNlcHRp
b25NYXRjaGVyLnRlc3Qobm9kZS52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KG5vZGUsICJFeHBlY3RlZCBleGNlcHRpb24gYmxvY2sgb3Igc3BhY2UgYWZ0
ZXIgLy8gaW4gY29tbWVudC4iKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaGFz
RXhjZXB0aW9ucykgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIkV4cGVjdGVkIHNwYWNlIGFmdGVyIC8vIGluIGNvbW1lbnQuIik7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS52YWx1ZS5pbmRleE9mKCIgIikgPT09IDApIHsKLSAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgc3BhY2UgYWZ0
ZXIgLy8gaW4gY29tbWVudC4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgIH07Ci19OwotCi19LHt9XSwxNDI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZW5zdXJlIGNvZGUg
aXMgcnVubmluZyBpbiBzdHJpY3QgbW9kZS4KLSAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMK
LSAqIEBjb3B5cmlnaHQgMjAxMy0yMDE0IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgdmFyIHNjb3BlcyA9IFtdOwotCi0gICAg
LyoqCi0gICAgICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIG5vZGUgaXMgInVzZSBzdHJpY3QiLgot
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4KLSAgICAgKiBA
cmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbm9kZSBpcyBhIHN0cmljdCBwcmFnbWEsIGZh
bHNlIGlmIG5vdC4KLSAgICAgKiBAdm9pZAotICAgICAqLwotICAgIGZ1bmN0aW9uIGlzU3RyaWN0
UHJhZ21hKG5vZGUpIHsKLSAgICAgICAgcmV0dXJuIChub2RlICYmIG5vZGUudHlwZSA9PT0gIkV4
cHJlc3Npb25TdGF0ZW1lbnQiICYmCi0gICAgICAgICAgICAgICAgbm9kZS5leHByZXNzaW9uLnZh
bHVlID09PSAidXNlIHN0cmljdCIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdoZW4geW91
IGVudGVyIGEgc2NvcGUsIHB1c2ggdGhlIHN0cmljdCB2YWx1ZSBmcm9tIHRoZSBwcmV2aW91cyBz
Y29wZQotICAgICAqIG9udG8gdGhlIHN0YWNrLgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9k
ZSBUaGUgQVNUIG5vZGUgYmVpbmcgY2hlY2tlZC4KLSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAg
ICAgKiBAcHJpdmF0ZQotICAgICAqLwotICAgIGZ1bmN0aW9uIGVudGVyU2NvcGUobm9kZSkgewot
Ci0gICAgICAgIHZhciBpc1N0cmljdCA9IGZhbHNlLAotICAgICAgICAgICAgaXNQcm9ncmFtID0g
KG5vZGUudHlwZSA9PT0gIlByb2dyYW0iKSwKLSAgICAgICAgICAgIGlzUGFyZW50R2xvYmFsID0g
c2NvcGVzLmxlbmd0aCA9PT0gMSwKLSAgICAgICAgICAgIGlzUGFyZW50U3RyaWN0ID0gc2NvcGVz
Lmxlbmd0aCA/IHNjb3Blc1tzY29wZXMubGVuZ3RoIC0gMV0gOiBmYWxzZTsKLQotICAgICAgICAv
LyBsb29rIGZvciB0aGUgInVzZSBzdHJpY3QiIHByYWdtYQotICAgICAgICBpZiAoaXNQcm9ncmFt
KSB7Ci0gICAgICAgICAgICBpc1N0cmljdCA9IGlzU3RyaWN0UHJhZ21hKG5vZGUuYm9keVswXSkg
fHwgaXNQYXJlbnRTdHJpY3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpc1N0cmlj
dCA9IGlzU3RyaWN0UHJhZ21hKG5vZGUuYm9keS5ib2R5WzBdKSB8fCBpc1BhcmVudFN0cmljdDsK
LSAgICAgICAgfQotCi0gICAgICAgIHNjb3Blcy5wdXNoKGlzU3RyaWN0KTsKLQotICAgICAgICAv
LyBuZXZlciB3YXJuIGlmIHRoZSBwYXJlbnQgaXMgc3RyaWN0IG9yIHRoZSBmdW5jdGlvbiBpcyBz
dHJpY3QKLSAgICAgICAgaWYgKCFpc1BhcmVudFN0cmljdCAmJiAhaXNTdHJpY3QgJiYgaXNQYXJl
bnRHbG9iYWwpIHsKLSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNaXNzaW5nIFwi
dXNlIHN0cmljdFwiIHN0YXRlbWVudC4iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIFdoZW4geW91IGV4aXQgYSBzY29wZSwgcG9wIG9mZiB0aGUgdG9wIHNjb3BlIGFuZCBz
ZWUgaWYgaXQncyB0cnVlIG9yCi0gICAgICogZmFsc2UuCi0gICAgICogQHJldHVybnMge3ZvaWR9
Ci0gICAgICogQHByaXZhdGUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBleGl0U2NvcGUoKSB7Ci0g
ICAgICAgIHNjb3Blcy5wb3AoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gewotCi0gICAgICAgICJQ
cm9ncmFtIjogZW50ZXJTY29wZSwKLSAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBlbnRl
clNjb3BlLAotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZW50ZXJTY29wZSwKLQotICAg
ICAgICAiUHJvZ3JhbTpleGl0IjogZXhpdFNjb3BlLAotICAgICAgICAiRnVuY3Rpb25EZWNsYXJh
dGlvbjpleGl0IjogZXhpdFNjb3BlLAotICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQi
OiBleGl0U2NvcGUKLSAgICB9OwotCi19OwotCi19LHt9XSwxNDM6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBjb21w
YXJpc29ucyB0byB0aGUgdmFsdWUgTmFOCi0gKiBAYXV0aG9yIEphbWVzIEFsbGFyZGljZQotICov
Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewot
Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgIkJpbmFyeUV4cHJl
c3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0KLSAgICAgICAgICAgIGlmICghL15bfCZeXSQvLnRl
c3Qobm9kZS5vcGVyYXRvcikgJiYgbm9kZS5sZWZ0Lm5hbWUgPT09ICJOYU4iIHx8IG5vZGUucmln
aHQubmFtZSA9PT0gIk5hTiIpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiVXNlIHRoZSBpc05hTiBmdW5jdGlvbiB0byBjb21wYXJlIHdpdGggTmFOLiIpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sMTQ0OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBWYWxpZGF0ZXMg
SlNEb2MgY29tbWVudHMgYXJlIHN5bnRhY3RpY2FsbHkgY29ycmVjdAotICogQGF1dGhvciBOaWNo
b2xhcyBDLiBaYWthcwotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBSZXF1aXJlbWVudHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZhciBkb2N0
cmluZSA9IHJlcXVpcmUoImRvY3RyaW5lIik7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgewotCi0gICAgdmFyIG9wdGlvbnMgPSBjb250ZXh0Lm9w
dGlvbnNbMF0gfHwge30sCi0gICAgICAgIHByZWZlciA9IG9wdGlvbnMucHJlZmVyIHx8IHt9LAot
Ci0gICAgICAgIC8vIHRoZXNlIGJvdGggZGVmYXVsdCB0byB0cnVlLCBzbyB5b3UgaGF2ZSB0byBl
eHBsaWNpdGx5IG1ha2UgdGhlbSBmYWxzZQotICAgICAgICByZXF1aXJlUmV0dXJuID0gb3B0aW9u
cy5yZXF1aXJlUmV0dXJuID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSwKLSAgICAgICAgcmVxdWly
ZVBhcmFtRGVzY3JpcHRpb24gPSBvcHRpb25zLnJlcXVpcmVQYXJhbURlc2NyaXB0aW9uID09PSBm
YWxzZSA/IGZhbHNlIDogdHJ1ZTsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBI
ZWxwZXJzCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gVXNpbmcgYSBzdGFjayB0
byBzdG9yZSBpZiBhIGZ1bmN0aW9uIHJldHVybnMgb3Igbm90IChoYW5kbGluZyBuZXN0ZWQgZnVu
Y3Rpb25zKQotICAgIHZhciBmbnMgPSBbXTsKLQotICAgIC8qKgotICAgICAqIFdoZW4gcGFyc2lu
ZyBhIG5ldyBmdW5jdGlvbiwgc3RvcmUgaXQgaW4gb3VyIGZ1bmN0aW9uIHN0YWNrLgotICAgICAq
IEByZXR1cm5zIHt2b2lkfQotICAgICAqIEBwcml2YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24g
c3RhcnRGdW5jdGlvbigpIHsKLSAgICAgICAgZm5zLnB1c2goe3JldHVyblByZXNlbnQ6IGZhbHNl
fSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW5kaWNhdGUgdGhhdCByZXR1cm4gaGFzIGJl
ZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24uCi0gICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBub2RlIFRoZSByZXR1cm4gbm9kZS4KLSAgICAgKiBAcmV0dXJucyB7dm9pZH0KLSAgICAgKiBA
cHJpdmF0ZQotICAgICAqLwotICAgIGZ1bmN0aW9uIGFkZFJldHVybihub2RlKSB7Ci0gICAgICAg
IHZhciBmdW5jdGlvblN0YXRlID0gZm5zW2Zucy5sZW5ndGggLSAxXTsKLQotICAgICAgICBpZiAo
ZnVuY3Rpb25TdGF0ZSAmJiBub2RlLmFyZ3VtZW50ICE9PSBudWxsKSB7Ci0gICAgICAgICAgICBm
dW5jdGlvblN0YXRlLnJldHVyblByZXNlbnQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogVmFsaWRhdGUgdGhlIEpTRG9jIG5vZGUgYW5kIG91dHB1dCB3YXJuaW5n
cyBpZiBhbnl0aGluZyBpcyB3cm9uZy4KLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhl
IEFTVCBub2RlIHRvIGNoZWNrLgotICAgICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqIEBwcml2
YXRlCi0gICAgICovCi0gICAgZnVuY3Rpb24gY2hlY2tKU0RvYyhub2RlKSB7Ci0gICAgICAgIHZh
ciBqc2RvY05vZGUgPSBjb250ZXh0LmdldEpTRG9jQ29tbWVudChub2RlKSwKLSAgICAgICAgICAg
IGZ1bmN0aW9uRGF0YSA9IGZucy5wb3AoKSwKLSAgICAgICAgICAgIGhhc1JldHVybnMgPSBmYWxz
ZSwKLSAgICAgICAgICAgIGhhc0NvbnN0cnVjdG9yID0gZmFsc2UsCi0gICAgICAgICAgICBwYXJh
bXMgPSBPYmplY3QuY3JlYXRlKG51bGwpLAotICAgICAgICAgICAganNkb2M7Ci0KLSAgICAgICAg
Ly8gbWFrZSBzdXJlIG9ubHkgdG8gdmFsaWRhdGUgSlNEb2MgY29tbWVudHMKLSAgICAgICAgaWYg
KGpzZG9jTm9kZSkgewotCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGpzZG9j
ID0gZG9jdHJpbmUucGFyc2UoanNkb2NOb2RlLnZhbHVlLCB7Ci0gICAgICAgICAgICAgICAgICAg
IHN0cmljdDogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgdW53cmFwOiB0cnVlLAotICAgICAg
ICAgICAgICAgICAgICBzbG9wcHk6IHRydWUKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIH0gY2F0Y2ggKGV4KSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAoL2JyYWNlcy9pLnRlc3Qo
ZXgubWVzc2FnZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NO
b2RlLCAiSlNEb2MgdHlwZSBtaXNzaW5nIGJyYWNlLiIpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIkpTRG9j
IHN5bnRheCBlcnJvci4iKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGpzZG9jLnRhZ3MuZm9yRWFjaChm
dW5jdGlvbih0YWcpIHsKLQotICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnLnRpdGxlKSB7Ci0K
LSAgICAgICAgICAgICAgICAgICAgY2FzZSAicGFyYW0iOgotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCF0YWcudHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KGpzZG9jTm9kZSwgIk1pc3NpbmcgSlNEb2MgcGFyYW1ldGVyIHR5cGUgZm9yICd7e25h
bWV9fScuIiwgeyBuYW1lOiB0YWcubmFtZSB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWcuZGVzY3JpcHRpb24gJiYgcmVxdWly
ZVBhcmFtRGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChqc2RvY05vZGUsICJNaXNzaW5nIEpTRG9jIHBhcmFtZXRlciBkZXNjcmlwdGlvbiBm
b3IgJ3t7bmFtZX19Jy4iLCB7IG5hbWU6IHRhZy5uYW1lIH0pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zW3RhZy5uYW1lXSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwg
IkR1cGxpY2F0ZSBKU0RvYyBwYXJhbWV0ZXIgJ3t7bmFtZX19Jy4iLCB7IG5hbWU6IHRhZy5uYW1l
IH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcubmFtZS5pbmRleE9m
KCIuIikgPT09IC0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1t0YWcu
bmFtZV0gPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSAicmV0dXJuIjoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAicmV0dXJucyI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBo
YXNSZXR1cm5zID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXF1aXJl
UmV0dXJuICYmICFmdW5jdGlvbkRhdGEucmV0dXJuUHJlc2VudCAmJiB0YWcudHlwZS5uYW1lICE9
PSAidm9pZCIgJiYgdGFnLnR5cGUubmFtZSAhPT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJVbmV4cGVjdGVkIEAi
ICsgdGFnLnRpdGxlICsgIiB0YWc7IGZ1bmN0aW9uIGhhcyBubyByZXR1cm4gc3RhdGVtZW50LiIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXRhZy50eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIk1pc3NpbmcgSlNEb2MgcmV0dXJuIHR5cGUuIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRhZy50eXBlLm5hbWUgIT09ICJ2b2lkIiAmJiAhdGFnLmRlc2NyaXB0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9k
ZSwgIk1pc3NpbmcgSlNEb2MgcmV0dXJuIGRlc2NyaXB0aW9uLiIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiY29uc3RydWN0
b3IiOgotICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ29uc3RydWN0b3IgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gbm8g
ZGVmYXVsdAotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRh
ZyBwcmVmZXJlbmNlcwotICAgICAgICAgICAgICAgIGlmIChwcmVmZXIuaGFzT3duUHJvcGVydHko
dGFnLnRpdGxlKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05v
ZGUsICJVc2UgQHt7bmFtZX19IGluc3RlYWQuIiwgeyBuYW1lOiBwcmVmZXJbdGFnLnRpdGxlXSB9
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAv
LyBjaGVjayBmb3IgZnVuY3Rpb25zIG1pc3NpbmcgQHJldHVybnMKLSAgICAgICAgICAgIGlmICgh
aGFzUmV0dXJucyAmJiAhaGFzQ29uc3RydWN0b3IpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVx
dWlyZVJldHVybiB8fCBmdW5jdGlvbkRhdGEucmV0dXJuUHJlc2VudCkgewotICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJNaXNzaW5nIEpTRG9jIEByZXR1cm5z
IGZvciBmdW5jdGlvbi4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIGNoZWNrIHRoZSBwYXJhbWV0ZXJzCi0gICAgICAgICAgICB2YXIganNkb2NQ
YXJhbXMgPSBPYmplY3Qua2V5cyhwYXJhbXMpOwotCi0gICAgICAgICAgICBub2RlLnBhcmFtcy5m
b3JFYWNoKGZ1bmN0aW9uKHBhcmFtLCBpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBw
YXJhbS5uYW1lOwotCi0gICAgICAgICAgICAgICAgaWYgKGpzZG9jUGFyYW1zW2ldICYmIChuYW1l
ICE9PSBqc2RvY1BhcmFtc1tpXSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQoanNkb2NOb2RlLCAiRXhwZWN0ZWQgSlNEb2MgZm9yICd7e25hbWV9fScgYnV0IGZvdW5kICd7
e2pzZG9jTmFtZX19Jy4iLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAganNkb2NOYW1lOiBqc2RvY1BhcmFtc1tpXQotICAgICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFwYXJhbXNbbmFt
ZV0pIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiTWlz
c2luZyBKU0RvYyBmb3IgcGFyYW1ldGVyICd7e25hbWV9fScuIiwgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZTogbmFtZQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICB9Ci0KLSAgICB9Ci0KLSAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IHN0YXJ0RnVuY3Rp
b24sCi0gICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogc3RhcnRGdW5jdGlvbiwKLSAgICAg
ICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogY2hlY2tKU0RvYywKLSAgICAgICAgIkZ1bmN0
aW9uRGVjbGFyYXRpb246ZXhpdCI6IGNoZWNrSlNEb2MsCi0gICAgICAgICJSZXR1cm5TdGF0ZW1l
bnQiOiBhZGRSZXR1cm4KLSAgICB9OwotCi19OwotCi19LHsiZG9jdHJpbmUiOjR9XSwxNDU6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IEVu
c3VyZXMgdGhhdCB0aGUgcmVzdWx0cyBvZiB0eXBlb2YgYXJlIGNvbXBhcmVkIGFnYWluc3QgYSB2
YWxpZCBzdHJpbmcKLSAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycwotICovCi0idXNlIHN0
cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgewotCi0gICAgdmFyIFZBTElEX1RZUEVTID0gWyJzeW1ib2wiLCAidW5kZWZpbmVkIiwgIm9i
amVjdCIsICJib29sZWFuIiwgIm51bWJlciIsICJzdHJpbmciLCAiZnVuY3Rpb24iXSwKLSAgICAg
ICAgT1BFUkFUT1JTID0gWyI9PSIsICI9PT0iLCAiIT0iLCAiIT09Il07Ci0KLSAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
ICAgcmV0dXJuIHsKLQotICAgICAgICAiVW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24gKG5vZGUp
IHsKLSAgICAgICAgICAgIHZhciBwYXJlbnQsIHNpYmxpbmc7Ci0KLSAgICAgICAgICAgIGlmIChu
b2RlLm9wZXJhdG9yID09PSAidHlwZW9mIikgewotICAgICAgICAgICAgICAgIHBhcmVudCA9IGNv
bnRleHQuZ2V0QW5jZXN0b3JzKCkucG9wKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocGFyZW50
LnR5cGUgPT09ICJCaW5hcnlFeHByZXNzaW9uIiAmJiBPUEVSQVRPUlMuaW5kZXhPZihwYXJlbnQu
b3BlcmF0b3IpICE9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBzaWJsaW5nID0gcGFyZW50
LmxlZnQgPT09IG5vZGUgPyBwYXJlbnQucmlnaHQgOiBwYXJlbnQubGVmdDsKLQotICAgICAgICAg
ICAgICAgICAgICBpZiAoc2libGluZy50eXBlID09PSAiTGl0ZXJhbCIgJiYgVkFMSURfVFlQRVMu
aW5kZXhPZihzaWJsaW5nLnZhbHVlKSA9PT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KHNpYmxpbmcsICJJbnZhbGlkIHR5cGVvZiBjb21wYXJpc29uIHZhbHVl
Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgIH07Ci0KLX07Ci0KLX0se31dLDE0NjpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBlbmZv
cmNlIHZhciBkZWNsYXJhdGlvbnMgYXJlIG9ubHkgYXQgdGhlIHRvcCBvZiBhIGZ1bmN0aW9uLgot
ICogQGF1dGhvciBEYW5ueSBGcml0egotICogQGF1dGhvciBHeWFuZGVlcCBTaW5naAotICogQGNv
cHlyaWdodCAyMDE0IERhbm55IEZyaXR6LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQGNvcHly
aWdodCAyMDE0IEd5YW5kZWVwIFNpbmdoLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICovCi0idXNl
IHN0cmljdCI7Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNv
bnRleHQpIHsKLSAgICB2YXIgZXJyb3JNZXNzYWdlID0gIkFsbCBcInZhclwiIGRlY2xhcmF0aW9u
cyBtdXN0IGJlIGF0IHRoZSB0b3Agb2YgdGhlIGZ1bmN0aW9uIHNjb3BlLiI7Ci0KLSAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycwotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIGFueSBub2RlCi0gICAg
ICogQHJldHVybnMge0Jvb2xlYW59IHdoZXRoZXIgdGhlIGdpdmVuIG5vZGUgc3RydWN0dXJhbGx5
IHJlcHJlc2VudHMgYSBkaXJlY3RpdmUKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBsb29rc0xpa2VE
aXJlY3RpdmUobm9kZSkgewotICAgICAgIHJldHVybiBub2RlLnR5cGUgPT09ICJFeHByZXNzaW9u
U3RhdGVtZW50IiAmJgotICAgICAgICAgICBub2RlLmV4cHJlc3Npb24udHlwZSA9PT0gIkxpdGVy
YWwiICYmIHR5cGVvZiBub2RlLmV4cHJlc3Npb24udmFsdWUgPT09ICJzdHJpbmciOwotICAgIH0K
LQotICAgIC8qKgotICAgICAqIENoZWNrcyB3aGV0aGVyIHRoaXMgdmFyaWFibGUgaXMgb24gdG9w
IG9mIHRoZSBibG9jayBib2R5Ci0gICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gVGhlIG5v
ZGUgdG8gY2hlY2sKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gc3RhdGVtZW50cyAtIGNvbGxl
Y3Rpb24gb2YgQVNUTm9kZXMgZm9yIHRoZSBwYXJlbnQgbm9kZSBibG9jawotICAgICAqIEByZXR1
cm5zIHtCb29sZWFufSBUcnVlIGlmIHZhciBpcyBvbiB0b3Agb3RoZXJ3aXNlIGZhbHNlCi0gICAg
ICovCi0gICAgZnVuY3Rpb24gaXNWYXJPblRvcCAobm9kZSwgc3RhdGVtZW50cykgewotICAgICAg
ICB2YXIgaSA9IDAsIGwgPSBzdGF0ZW1lbnRzLmxlbmd0aDsKLQotICAgICAgICAvLyBza2lwIG92
ZXIgZGlyZWN0aXZlcwotICAgICAgICBmb3IgKDsgaSA8IGw7ICsraSkgewotICAgICAgICAgICAg
aWYgKCFsb29rc0xpa2VEaXJlY3RpdmUoc3RhdGVtZW50c1tpXSkpIHsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoOyBpIDwg
bDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGVtZW50c1tpXS50eXBlICE9PSAiVmFyaWFi
bGVEZWNsYXJhdGlvbiIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoc3RhdGVtZW50c1tpXSA9PT0gbm9kZSkgewotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogQ2hlY2tzIHdoZXRoZXIgdmFyaWFibGUgaXMgb24gdG9wIGF0IHRo
ZSBnbG9iYWwgbGV2ZWwKLSAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBUaGUgbm9kZSB0
byBjaGVjawotICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcGFyZW50IC0gUGFyZW50IG9mIHRoZSBu
b2RlCi0gICAgICogQHJldHVybnMge3ZvaWR9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gZ2xvYmFs
VmFyQ2hlY2sgKG5vZGUsIHBhcmVudCkgewotICAgICAgICBpZiAoIWlzVmFyT25Ub3Aobm9kZSwg
cGFyZW50LmJvZHkpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBlcnJvck1l
c3NhZ2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIHdoZXRo
ZXIgdmFyaWFibGUgaXMgb24gdG9wIGF0IGZ1bmN0aW9uYWwgYmxvY2sgc2NvcGUgbGV2ZWwKLSAg
ICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byBjaGVjawotICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gcGFyZW50IC0gUGFyZW50IG9mIHRoZSBub2RlCi0gICAgICogQHBhcmFt
IHtBU1ROb2RlfSBncmFuZFBhcmVudCAtIFBhcmVudCBvZiB0aGUgbm9kZSdzIHBhcmVudAotICAg
ICAqIEByZXR1cm5zIHt2b2lkfQotICAgICAqLwotICAgIGZ1bmN0aW9uIGJsb2NrU2NvcGVWYXJD
aGVjayAobm9kZSwgcGFyZW50LCBncmFuZFBhcmVudCkgewotICAgICAgICBpZiAoISgoZ3JhbmRQ
YXJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRGVjbGFyYXRpb24iCi0gICAgICAgICAgICB8fCBncmFu
ZFBhcmVudC50eXBlID09PSAiRnVuY3Rpb25FeHByZXNzaW9uIikKLSAgICAgICAgICAgICYmIHBh
cmVudC50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiCi0gICAgICAgICAgICAmJiBpc1Zhck9uVG9w
KG5vZGUsIHBhcmVudC5ib2R5KSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
IGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gICAgLy8gUHVibGljIEFQSQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHJl
dHVybiB7Ci0gICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogZnVuY3Rpb24gKG5vZGUpIHsK
LSAgICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpOwotICAg
ICAgICAgICAgdmFyIHBhcmVudCA9IGFuY2VzdG9ycy5wb3AoKTsKLSAgICAgICAgICAgIHZhciBn
cmFuZFBhcmVudCA9IGFuY2VzdG9ycy5wb3AoKTsKLQotICAgICAgICAgICAgaWYgKG5vZGUua2lu
ZCA9PT0gInZhciIpIHsvLyBjaGVjayB2YXJpYWJsZSBpcyBgdmFyYCB0eXBlIGFuZCBub3QgYGxl
dGAgb3IgYGNvbnN0YAotICAgICAgICAgICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gIlByb2dy
YW0iKSB7Ly8gVGhhdCBtZWFucyBpdHMgYSBnbG9iYWwgdmFyaWFibGUKLSAgICAgICAgICAgICAg
ICAgICAgZ2xvYmFsVmFyQ2hlY2sobm9kZSwgcGFyZW50KTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBibG9ja1Njb3BlVmFyQ2hlY2sobm9kZSwgcGFyZW50
LCBncmFuZFBhcmVudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sMTQ3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiBJSUZFIGlz
IG5vdCB3cmFwcGVkIGluIHBhcmVucwotICogQGF1dGhvciBJbHlhIFZvbG9kaW4KLSAqLwotCi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUnVsZSBEZWZpbml0aW9uCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKLQotICAg
ICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgc3R5bGUgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwgIm91
dHNpZGUiOwotCi0gICAgZnVuY3Rpb24gd3JhcHBlZChub2RlKSB7Ci0gICAgICAgIHZhciBwcmV2
aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlKSwKLSAgICAgICAgICAgIG5l
eHRUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5BZnRlcihub2RlKTsKLSAgICAgICAgcmV0dXJuIHBy
ZXZpb3VzVG9rZW4gJiYgcHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYmCi0gICAgICAgICAg
ICBuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiKSI7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHsKLQotICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7Ci0gICAg
ICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIpIHsK
LSAgICAgICAgICAgICAgICB2YXIgY2FsbEV4cHJlc3Npb25XcmFwcGVkID0gd3JhcHBlZChub2Rl
KSwKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25FeHByZXNzaW9uV3JhcHBlZCA9IHdyYXBw
ZWQobm9kZS5jYWxsZWUpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFjYWxsRXhwcmVzc2lvbldy
YXBwZWQgJiYgIWZ1bmN0aW9uRXhwcmVzc2lvbldyYXBwZWQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgIldyYXAgYW4gaW1tZWRpYXRlIGZ1bmN0aW9uIGludm9j
YXRpb24gaW4gcGFyZW50aGVzZXMuIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHls
ZSA9PT0gImluc2lkZSIgJiYgIWZ1bmN0aW9uRXhwcmVzc2lvbldyYXBwZWQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIldyYXAgb25seSB0aGUgZnVuY3Rpb24g
ZXhwcmVzc2lvbiBpbiBwYXJlbnMuIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHls
ZSA9PT0gIm91dHNpZGUiICYmICFjYWxsRXhwcmVzc2lvbldyYXBwZWQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIk1vdmUgdGhlIGludm9jYXRpb24gaW50byB0
aGUgcGFyZW5zIHRoYXQgY29udGFpbiB0aGUgZnVuY3Rpb24uIik7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotfTsKLQotfSx7fV0sMTQ4Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgotICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGZsYWcgd2hlbiByZWdleCBsaXRlcmFscyBhcmUgbm90IHdyYXBwZWQgaW4gcGFyZW5z
Ci0gKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwuY29tPgotICov
Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewot
Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgcmV0dXJuIHsKLQotICAgICAgICAiTGl0ZXJhbCI6
IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IGNvbnRleHQuZ2V0Rmly
c3RUb2tlbihub2RlKSwKLSAgICAgICAgICAgICAgICBub2RlVHlwZSA9IHRva2VuLnR5cGUsCi0g
ICAgICAgICAgICAgICAgc291cmNlLAotICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50LAotICAg
ICAgICAgICAgICAgIGFuY2VzdG9yczsKLQotICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09PSAi
UmVndWxhckV4cHJlc3Npb24iKSB7Ci0gICAgICAgICAgICAgICAgc291cmNlID0gY29udGV4dC5n
ZXRUb2tlbkJlZm9yZShub2RlKTsKLSAgICAgICAgICAgICAgICBhbmNlc3RvcnMgPSBjb250ZXh0
LmdldEFuY2VzdG9ycygpOwotICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50ID0gYW5jZXN0b3Jz
W2FuY2VzdG9ycy5sZW5ndGggLSAxXTsKLQotICAgICAgICAgICAgICAgIGlmIChncmFuZHBhcmVu
dC50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIgJiYgZ3JhbmRwYXJlbnQub2JqZWN0ID09PSBu
b2RlICYmCi0gICAgICAgICAgICAgICAgICAgICghc291cmNlIHx8IHNvdXJjZS52YWx1ZSAhPT0g
IigiKSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiV3JhcCB0
aGUgcmVnZXhwIGxpdGVyYWwgaW4gcGFyZW5zIHRvIGRpc2FtYmlndWF0ZSB0aGUgc2xhc2guIik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQot
fTsKLQotfSx7fV0sMTQ5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKLS8qKgot
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIHJlcXVpcmUgb3IgZGlzYWxsb3cgeW9kYSBjb21wYXJp
c29ucwotICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcwotICovCi0idXNlIHN0cmljdCI7Ci0K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSdWxlIERlZmluaXRpb24KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbnRleHQpIHsKLQot
ICAgIC8vIERlZmF1bHQgdG8gIm5ldmVyIiAoIWFsd2F5cykgaWYgbm8gb3B0aW9uCi0KLSAgICB2
YXIgYWx3YXlzID0gKGNvbnRleHQub3B0aW9uc1swXSA9PT0gImFsd2F5cyIpOwotCi0gICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEhlbHBlcnMKLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gb3BlcmF0b3IgaXMgYSBj
b21wYXJpc29uIG9wZXJhdG9yLgotICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcGVyYXRvciBUaGUg
b3BlcmF0b3IgdG8gY2hlY2suCi0gICAgICogQHJldHVybnMge0Jvb2xlYW59IFdoZXRoZXIgb3Ig
bm90IGl0IGlzIGEgY29tcGFyaXNvbiBvcGVyYXRvci4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBp
c0NvbXBhcmlzb25PcGVyYXRvcihvcGVyYXRvcikgewotICAgICAgICByZXR1cm4gKC9eKD09fD09
PXwhPXwhPT18PHw+fDw9fD49KSQvKS50ZXN0KG9wZXJhdG9yKTsKLSAgICB9Ci0KLSAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUHVibGljCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gICAgcmV0dXJuIHsKLQotICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uIChu
b2RlKSB7Ci0KLSAgICAgICAgICAgIGlmIChhbHdheXMpIHsKLQotICAgICAgICAgICAgICAgIC8v
IENvbXBhcmlzb25zIG11c3QgYWx3YXlzIGJlIHlvZGEtc3R5bGU6IGlmICgiYmx1ZSIgPT09IGNv
bG9yKQotCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUucmlnaHQudHlwZSA9PT0gIkxpdGVyYWwi
ICYmIGlzQ29tcGFyaXNvbk9wZXJhdG9yKG5vZGUub3BlcmF0b3IpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJFeHBlY3RlZCBsaXRlcmFsIHRvIGJlIG9uIHRo
ZSBsZWZ0IHNpZGUgb2YgIiArIG5vZGUub3BlcmF0b3IgKyAiLiIpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgfSBlbHNlIHsKLQotICAgICAgICAgICAgICAgIC8vIENvbXBhcmlz
b25zIG11c3QgbmV2ZXIgYmUgeW9kYS1zdHlsZSAoZGVmYXVsdCkKLQotICAgICAgICAgICAgICAg
IGlmIChub2RlLmxlZnQudHlwZSA9PT0gIkxpdGVyYWwiICYmIGlzQ29tcGFyaXNvbk9wZXJhdG9y
KG5vZGUub3BlcmF0b3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJFeHBlY3RlZCBsaXRlcmFsIHRvIGJlIG9uIHRoZSByaWdodCBzaWRlIG9mICIgKyBub2Rl
Lm9wZXJhdG9yICsgIi4iKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICB9Ci0KLSAgICB9OwotCi19OwotCi19LHt9XSwxNTA6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpewotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IENvbW1vbiB1dGlsaXRpZXMu
Ci0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFB1Ymxp
YyBJbnRlcmZhY2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vKioKLSAqIE1lcmdlcyB0d28g
b2JqZWN0cyB0b2dldGhlciBhbmQgYXNzaWducyB0aGUgcmVzdWx0IHRvIHRoZSBpbml0aWFsIG9i
amVjdC4gQ2FuIGJlIHVzZWQgZm9yIHNoYWxsb3cgY2xvbmluZy4KLSAqIEBwYXJhbSB7T2JqZWN0
fSB0YXJnZXQgb2YgdGhlIGNsb25pbmcgb3BlcmF0aW9uCi0gKiBAcGFyYW0ge09iamVjdH0gc291
cmNlIG9iamVjdAotICogQHJldHVybnMge3ZvaWR9Ci0gKi8KLWV4cG9ydHMubWl4aW4gPSBmdW5j
dGlvbih0YXJnZXQsIHNvdXJjZSkgewotICAgIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChm
dW5jdGlvbihrZXkpIHsKLSAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsKLSAgICB9
KTsKLX07Ci0KLS8qKgotICogTWVyZ2VzIHR3byBjb25maWcgb2JqZWN0cy4gVGhpcyB3aWxsIG5v
dCBvbmx5IGFkZCBtaXNzaW5nIGtleXMsIGJ1dCB3aWxsIGFsc28gbW9kaWZ5IHZhbHVlcyB0byBt
YXRjaC4KLSAqIEBwYXJhbSB7T2JqZWN0fSBiYXNlIGNvbmZpZyBvYmplY3QKLSAqIEBwYXJhbSB7
T2JqZWN0fSBjdXN0b20gY29uZmlnIG9iamVjdC4gT3ZlcnJpZGVzIGluIHRoaXMgY29uZmlnIG9i
amVjdCB3aWxsIHRha2UgcHJpb3JpdHkgb3ZlciBiYXNlLgotICogQHJldHVybnMge09iamVjdH0g
bWVyZ2VkIGNvbmZpZyBvYmplY3QuCi0gKi8KLWV4cG9ydHMubWVyZ2VDb25maWdzID0gZnVuY3Rp
b24gbWVyZ2VDb25maWdzKGJhc2UsIGN1c3RvbSkgewotCi0gICAgT2JqZWN0LmtleXMoY3VzdG9t
KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKLSAgICAgICAgdmFyIHByb3BlcnR5ID0gY3VzdG9t
W2tleV07Ci0KLSAgICAgICAgaWYgKGtleSA9PT0gInBsdWdpbnMiKSB7Ci0gICAgICAgICAgICBp
ZiAoIWJhc2Vba2V5XSkgewotICAgICAgICAgICAgICAgIGJhc2Vba2V5XSA9IFtdOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBwcm9wZXJ0eS5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW4p
IHsKLSAgICAgICAgICAgICAgICAvLyBza2lwIGR1cGxpY2F0ZXMKLSAgICAgICAgICAgICAgICBp
ZiAoYmFzZVtrZXldLmluZGV4T2YocGx1Z2luKSA9PT0gLTEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYmFzZVtrZXldLnB1c2gocGx1Z2luKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChBcnJh
eS5pc0FycmF5KGJhc2Vba2V5XSkgJiYgIUFycmF5LmlzQXJyYXkocHJvcGVydHkpICYmIHR5cGVv
ZiBwcm9wZXJ0eSA9PT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IHdl
IGFyZSBqdXN0IG92ZXJyaWRpbmcgZmlyc3QgYXR0cmlidXRlCi0gICAgICAgICAgICBiYXNlW2tl
eV1bMF0gPSBjdXN0b21ba2V5XTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5
KHByb3BlcnR5KSkgewotICAgICAgICAgICAgLy8gYmFzZVtrZXldIG1pZ2h0IG5vdCBleGlzdCwg
c28gYmUgY2FyZWZ1bCB3aXRoIHJlY3Vyc2lvbiBoZXJlCi0gICAgICAgICAgICBiYXNlW2tleV0g
PSBtZXJnZUNvbmZpZ3MoYmFzZVtrZXldIHx8IHt9LCBjdXN0b21ba2V5XSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBiYXNlW2tleV0gPSBjdXN0b21ba2V5XTsKLSAgICAgICAgfQot
ICAgIH0pOwotCi0gICAgcmV0dXJuIGJhc2U7Ci19OwotCi19LHt9XX0se30sWzldKSg5KQotfSk7
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTWFpbi5odG1sCmluZGV4IDk3MDQ1NjFkMDZlMTk2NDJhY2Y2ODllMDFhYTc5
NjAyZGU4ZGNhNjQuLjNjOWJmOTRlNWRjMjZmNDg5NTQ3M2E2MGVlZWY2ZDRlOTY4NDNlNjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKQEAgLTMy
MSw3ICszMjEsNiBAQAogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvU2NyaXB0LmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0xvY2FsU2NyaXB0LmpzIj48L3NjcmlwdD4KIAot
ICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQW5hbHl6ZXJNZXNzYWdlLmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHNyYz0iTW9kZWxzL0FwcGxpY2F0aW9uQ2FjaGVGcmFtZS5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQmFja0ZvcndhcmRFbnRyeS5qcyI+PC9z
Y3JpcHQ+CkBAIC03NzQsNyArNzczLDYgQEAKICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMv
QW5ub3RhdG9yLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvQ29k
ZU1pcnJvckVkaXRpbmdDb250cm9sbGVyLmpzIj48L3NjcmlwdD4KIAotICAgIDxzY3JpcHQgc3Jj
PSJDb250cm9sbGVycy9BbmFseXplck1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJDb250cm9sbGVycy9BdWRpdE1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJDb250cm9sbGVycy9BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0Jhc2ljQmxvY2tBbm5vdGF0b3IuanMiPjwvc2Ny
aXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0FuYWx5emVyTWVzc2FnZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01vZGVscy9BbmFseXplck1lc3NhZ2UuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDkxMjU2MGFjZGJlMTY4NjU3ODgyOTE5NGNjMTNmODI0MmVjMWE2NmUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL0FuYWx5emVyTWVzc2FnZS5qcworKysgL2Rldi9udWxsCkBA
IC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1XSS5BbmFseXplck1lc3NhZ2UgPSBjbGFzcyBB
bmFseXplck1lc3NhZ2UKLXsKLSAgICBjb25zdHJ1Y3Rvcihzb3VyY2VDb2RlTG9jYXRpb24sIHRl
eHQsIHJ1bGVJZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoc291cmNl
Q29kZUxvY2F0aW9uIGluc3RhbmNlb2YgV0kuU291cmNlQ29kZUxvY2F0aW9uKTsKLSAgICAgICAg
Y29uc29sZS5hc3NlcnQodHlwZW9mIHRleHQgPT09ICJzdHJpbmciKTsKLQotICAgICAgICB0aGlz
Ll9zb3VyY2VDb2RlTG9jYXRpb24gPSBzb3VyY2VDb2RlTG9jYXRpb247Ci0gICAgICAgIHRoaXMu
X3RleHQgPSB0ZXh0OwotICAgICAgICB0aGlzLl9ydWxlSWRlbnRpZmllciA9IHJ1bGVJZGVudGlm
aWVyOwotICAgIH0KLQotICAgIC8vIFB1YmxpYwotCi0gICAgZ2V0IHNvdXJjZUNvZGVMb2NhdGlv
bigpIHsgcmV0dXJuIHRoaXMuX3NvdXJjZUNvZGVMb2NhdGlvbjsgfQotICAgIGdldCBzb3VyY2VD
b2RlKCkgeyByZXR1cm4gdGhpcy5fc291cmNlQ29kZUxvY2F0aW9uLnNvdXJjZUNvZGU7IH0KLSAg
ICBnZXQgdGV4dCgpIHsgcmV0dXJuIHRoaXMuX3RleHQ7IH0KLSAgICBnZXQgcnVsZUlkZW50aWZp
ZXIoKSB7IHJldHVybiB0aGlzLl9ydWxlSWRlbnRpZmllcjsgfQotfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvSW5zcGVjdG9yR1Jlc291cmNlcy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvSW5z
cGVjdG9yR1Jlc291cmNlcy5jbWFrZQppbmRleCAxYWJjYzZjNGUxOTFkOTk1YmFiZGI3ZmFlMDMy
OGYxOGFlN2E2NTEzLi4wOTEzMTgwY2IyMjVmNGExYjUyOTE3MDU4Nzk0ZWMyNzU4N2YzOTU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0luc3BlY3RvckdSZXNvdXJjZXMuY21ha2UKKysrIGIv
U291cmNlL1dlYktpdC9JbnNwZWN0b3JHUmVzb3VyY2VzLmNtYWtlCkBAIC04LDcgKzgsNiBAQCBt
YWNybyhXRUJLSVRfQlVJTERfSU5TUEVDVE9SX0dSRVNPVVJDRVMgX2Rlcml2ZWRfc291cmNlc19k
aXIpCiAgICAgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRGVidWcvKi5qcwogICAgICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvKi5jc3MK
ICAgICAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yLyouanMKLSAgICAgICAgJHtDTUFLRV9TT1VSQ0Vf
RElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9FU0xpbnQv
Ki5qcwogICAgICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvKi5qcwogICAgICAgICAke0NNQUtFX1NPVVJD
RV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL3RocmVl
LmpzLyouanMKICAgICAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvKi5qcwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>