<?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>50239</bug_id>
          
          <creation_ts>2010-11-30 07:00:41 -0800</creation_ts>
          <short_desc>Web Inspector: implement JavaScript beautifier based on UglifyJS library</short_desc>
          <delta_ts>2010-11-30 10:40:49 -0800</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 (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>14469</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>ap</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>315016</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-11-30 07:00:41 -0800</bug_when>
    <thetext>Web Inspector: implement JavaScript beautifier based on UglifyJS library</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315017</commentid>
    <comment_count>1</comment_count>
      <attachid>75143</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-11-30 07:03:29 -0800</bug_when>
    <thetext>Created attachment 75143
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315031</commentid>
    <comment_count>2</comment_count>
      <attachid>75143</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-11-30 07:22:07 -0800</bug_when>
    <thetext>Comment on attachment 75143
Patch.

We can&apos;t take this as includes code distributed under the ZLIB license, which is not one of the allowed licenses.  It also seems odd to add another JS parser to the project, why not try and reuse the one in JSC?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315048</commentid>
    <comment_count>3</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-11-30 07:56:45 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 14469 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315080</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-11-30 08:51:31 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 75143 [details])
&gt; We can&apos;t take this as includes code distributed under the ZLIB license, which is not one of the allowed licenses.  It also seems odd to add another JS parser to the project, why not try and reuse the one in JSC?

We are going to use JS parser for editing purposes, so we&apos;ll need a full-featured parser/formatter. It would be quite hard to implement it in native code and expose to front-end.
Also, we&apos;ll need to implement this for both JSC and v8, which is not as nice as having a single JavaScript implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315147</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-11-30 10:38:46 -0800</bug_when>
    <thetext>&gt; Also, we&apos;ll need to implement this for both JSC and v8, which is not as nice as having a single JavaScript implementation.

I would describe the same situation differently: the WebKit project will need to maintain three distinct JS parsers, instead of two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315148</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-11-30 10:40:49 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 75143 [details])
&gt; We can&apos;t take this as includes code distributed under the ZLIB license, which is not one of the allowed licenses.  It also seems odd to add another JS parser to the project, why not try and reuse the one in JSC?

I do understand your point and I share it. However, I am not sure whether JSC&apos;s AST will be sufficient for our needs longer term. A thin String JSC::beautify(String) API is not sufficient for providing JavaScript outline (a classes / members view), so we need to expose AST. AST is a much broader interface and it&apos;ll be hard to abstract it well. But even AST might be not sufficient: we are currently thinking of introducing editing aspects into the inspector and hence we need a very good parser recovery. In general, most IDEs are using their own parsers with advanced recovery while working with code.

In other words, if our needs were limited to beautification, we would definitely go for native parser reuse. But given our editing ambitions, we should probably use parser designed for our domain. We&apos;ll probably get in touch with uglify people for the BSD license to see if that is an option.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75143</attachid>
            <date>2010-11-30 07:03:29 -0800</date>
            <delta_ts>2010-11-30 07:22:07 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>118323</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGI3M2QxYS4uZTY3ZWU3MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMC0xMS0zMCAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbXBsZW1lbnQgSmF2YVNjcmlw
dCBiZWF1dGlmaWVyIGJhc2VkIG9uIFVnbGlmeUpTIGxpYnJhcnkuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDIzOQorCisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Rm9ybWF0dGVyLmpzOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIpOiBXcmFwcGVyIGNsYXNzIGZvciBVZ2xp
ZnlKUyBsaWJyYXJ5CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyLnByb3Rv
dHlwZS5faW5pdGlhbGl6ZUlmTmVlZGVkLmZyYW1lV2luZG93LnJlcXVpcmUpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5wcm90b3R5cGUuX2luaXRpYWxpemVJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyLnByb3RvdHlwZS5fbG9h
ZE1vZHVsZS5yZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU2NyaXB0Rm9ybWF0dGVyLnByb3RvdHlwZS5fbG9hZE1vZHVsZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyLnByb3RvdHlwZS5mb3JtYXQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5wcm90b3R5cGUuX2Zvcm1hdCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyLnByb3RvdHlwZS5fYnVpbGRNYXBwaW5nKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5zZXRDb250ZW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuYmVhdXRpZnkpOgorICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYzoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvcGFyc2Ut
anMuanM6IEFkZGVkIFVnbGlmeUpTIHRva2VuaXplci4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL3Byb2Nlc3MuanM6IEFkZGVkIFVnbGlmeUpTIGJlYXV0aWZpZXIuCisKIDIwMTAtMTEt
MjkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggNWI0ZGQzYi4uY2NmZDc0MCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ0ODUsOCArNDQ4
NSwxMCBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVydGll
c1NlY3Rpb24uanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvUGFuZWwuanMn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvUGFuZWxFbmFibGVyVmlldy5qcycs
CisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9wYXJzZS1qcy5qcycsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9QbGFjYXJkLmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL1BvcG92ZXIuanMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvcHJvY2Vzcy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9m
aWxlRGF0YUdyaWRUcmVlLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1By
b2ZpbGVzUGFuZWwuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmls
ZVZpZXcuanMnLApAQCAtNDUwMyw2ICs0NTA1LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL1Njb3BlQ2hhaW5TaWRlYmFyUGFuZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHQuanMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
U2NyaXB0Rm9ybWF0dGVyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Nj
cmlwdHNQYW5lbC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRW
aWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Nob3J0Y3V0c0hlbHAu
anMnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBi
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggMDcxODJlOC4uNDkz
Njg4NCAxMDA3NTUKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagor
KysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC02NDk0OSw2ICs2
NDk0OSwxMCBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUGFu
ZWxFbmFibGVyVmlldy5qcyINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KKyAgICAgICAgPEZpbGUN
CisgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHBhcnNlLWpz
LmpzIg0KKyAgICAgICAgICA+DQorICAgICAgICA8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcUGxhY2FyZC5qcyINCiAJCQkJCT4N
CkBAIC02NDk2MSw2ICs2NDk2NSwxMCBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rv
clxmcm9udC1lbmRcUG9wb3Zlci5qcyINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KKyAgICAgICAg
PEZpbGUNCisgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXHBy
b2Nlc3MuanMiDQorICAgICAgICAgID4NCisgICAgICAgIDwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxQcm9maWxlRGF0YUdyaWRU
cmVlLmpzIg0KIAkJCQkJPg0KQEAgLTY1MDI1LDYgKzY1MDMzLDEwIEBACiAJCQkJCVJlbGF0aXZl
UGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTY3JpcHQuanMiDQogCQkJCQk+DQogCQkJCTwv
RmlsZT4NCisgICAgICAgIDxGaWxlDQorICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5caW5zcGVj
dG9yXGZyb250LWVuZFxTY3JpcHRGb3JtYXR0ZXIuanMiDQorICAgICAgICAgID4NCisgICAgICAg
IDwvRmlsZT4NCiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxTY3JpcHRzUGFuZWwuanMiDQogCQkJCQk+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdEZvcm1hdHRlci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRGb3JtYXR0ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMmZhN2U5YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9TY3JpcHRGb3JtYXR0ZXIuanMKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3Iu
U2NyaXB0Rm9ybWF0dGVyID0gZnVuY3Rpb24oKQoreworfQorCitXZWJJbnNwZWN0b3IuU2NyaXB0
Rm9ybWF0dGVyLnByb3RvdHlwZSA9IHsKKyAgICBfaW5pdGlhbGl6ZUlmTmVlZGVkOiBmdW5jdGlv
bihjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9mcmFtZSkgeworICAgICAgICAg
ICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IHRoaXMuX2ZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgICAg
IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZnJhbWUpOworCisgICAgICAgIHZhciBm
cmFtZVdpbmRvdyA9IHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3c7CisgICAgICAgIGZyYW1lV2lu
ZG93LnJlcXVpcmUgPSBmdW5jdGlvbihtb2R1bGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtb2R1bGUgPT09ICIuL3BhcnNlLWpzIikKKyAgICAgICAgICAgICAgIHJldHVybiBmcmFtZVdp
bmRvdy5wYXJzZTsKKyAgICAgICAgICAgIHJldHVybiB7fTsKKyAgICAgICAgfQorCisgICAgICAg
IHRoaXMuX2xvYWRNb2R1bGUoInBhcnNlIiwgInBhcnNlLWpzLmpzIiwgdGhpcy5fbG9hZE1vZHVs
ZS5iaW5kKHRoaXMsICJwcm9jZXNzIiwgInByb2Nlc3MuanMiLCBjYWxsYmFjaykpOworICAgIH0s
CisKKyAgICBfbG9hZE1vZHVsZTogZnVuY3Rpb24obmFtZSwgc3JjLCBjYWxsYmFjaykKKyAgICB7
CisgICAgICAgIHZhciBmcmFtZVdpbmRvdyA9IHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3c7Cisg
ICAgICAgIHZhciBmcmFtZURvY3VtZW50ID0gdGhpcy5fZnJhbWUuY29udGVudERvY3VtZW50Owor
CisgICAgICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgIHJl
cXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIGZyYW1lV2luZG93LmV4cG9ydHMgPSB7fTsKKyAgICAgICAgICAgIGZy
YW1lV2luZG93W25hbWVdID0geyB2ZXJzaW9uOiAwIH07CisgICAgICAgICAgICB2YXIgc2NyaXB0
ID0gZnJhbWVEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKKyAgICAgICAgICAgIHNj
cmlwdC50ZXh0Q29udGVudCA9IHJlcXVlc3QucmVzcG9uc2VUZXh0OworICAgICAgICAgICAgZnJh
bWVEb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7CisgICAgICAgICAgICBmcmFtZVdp
bmRvd1tuYW1lXSA9IGZyYW1lV2luZG93LmV4cG9ydHM7CisgICAgICAgICAgICBjYWxsYmFjaygp
OworICAgICAgICB9CisgICAgICAgIHJlcXVlc3Qub3BlbigiR0VUIiwgc3JjLCB0cnVlKTsKKyAg
ICAgICAgcmVxdWVzdC5zZW5kKCk7CisgICAgfSwKKworICAgIGZvcm1hdDogZnVuY3Rpb24oY29k
ZSwgY2FsbGJhY2spCisgICAgeworICAgICAgICBmdW5jdGlvbiBkaWRJbml0aWFsaXplKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgdmFyIGZvcm1hdHRlZENvZGUgPSB0aGlzLl9mb3JtYXQoY29k
ZSk7CisgICAgICAgICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2J1aWxkTWFwcGluZyhjb2RlLCBm
b3JtYXR0ZWRDb2RlKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGZvcm1hdHRlZENvZGUsIG1hcHBp
bmcpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2luaXRpYWxpemVJZk5lZWRlZChkaWRJbml0
aWFsaXplLmJpbmQodGhpcykpOworICAgIH0sCisKKyAgICBfZm9ybWF0OiBmdW5jdGlvbihjb2Rl
KQorICAgIHsKKyAgICAgICAgdmFyIGZyYW1lV2luZG93ID0gdGhpcy5fZnJhbWUuY29udGVudFdp
bmRvdzsKKyAgICAgICAgdmFyIGFzdCA9IGZyYW1lV2luZG93LnBhcnNlLnBhcnNlKGNvZGUpOwor
ICAgICAgICB2YXIgYmVhdXRpZnlPcHRpb25zID0geworICAgICAgICAgICAgaW5kZW50X2xldmVs
OiA0LAorICAgICAgICAgICAgaW5kZW50X3N0YXJ0OiAwLAorICAgICAgICAgICAgcXVvdGVfa2V5
czogZmFsc2UsCisgICAgICAgICAgICBzcGFjZV9jb2xvbjogZmFsc2UKKyAgICAgICAgfTsKKyAg
ICAgICAgcmV0dXJuIGZyYW1lV2luZG93LnByb2Nlc3MuZ2VuX2NvZGUoYXN0LCBiZWF1dGlmeU9w
dGlvbnMpOworICAgIH0sCisKKyAgICBfYnVpbGRNYXBwaW5nOiBmdW5jdGlvbihjb2RlLCBmb3Jt
YXR0ZWRDb2RlKQorICAgIHsKKyAgICAgICAgdmFyIG1hcHBpbmcgPSBbXTsKKyAgICAgICAgdmFy
IGxhc3RDb2RlUG9zaXRpb24gPSAwOworICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKC9bXCRc
Llx3XSsvZyk7CisgICAgICAgIHdoaWxlKHRydWUpIHsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9
IHJlLmV4ZWMoZm9ybWF0dGVkQ29kZSk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gY29kZS5pbmRleE9m
KG1hdGNoWzBdLCBsYXN0Q29kZVBvc2l0aW9uKTsKKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9
PT0gLTEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBtYXBwaW5nLnB1
c2goW3Bvc2l0aW9uLCBtYXRjaC5pbmRleF0pOworICAgICAgICAgICAgbGFzdENvZGVQb3NpdGlv
biA9IHBvc2l0aW9uOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYXBwaW5nOworICAgIH0K
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5q
cyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwppbmRleCA4ZTA3
N2NkLi5hMjg3MzgwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291
cmNlRnJhbWUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1l
LmpzCkBAIC0xNTgsNiArMTU4LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldFRleHQobnVsbCwgY29udGVudCk7CiAg
ICAgICAgIHRoaXMuX21pbWVUeXBlID0gbWltZVR5cGU7CiAgICAgICAgIHRoaXMuX3VybCA9IHVy
bDsKKyAgICAgICAgdGhpcy5fY29udGVudCA9IGNvbnRlbnQ7CiAgICAgICAgIHRoaXMuX2NyZWF0
ZVZpZXdlcklmTmVlZGVkKCk7CiAgICAgfSwKIApAQCAtMTY2LDYgKzE2NywxNyBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl90ZXh0TW9kZWwu
c2V0VGV4dChudWxsLCBjb250ZW50KTsKICAgICB9LAogCisgICAgYmVhdXRpZnk6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGRpZEZvcm1hdChmb3JtYXR0ZWRDb2RlLCBtYXBw
aW5nKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0VGV4dChudWxs
LCBmb3JtYXR0ZWRDb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBmb3JtYXR0ZXIgPSBu
ZXcgV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlcigpOworICAgICAgICBmb3JtYXR0ZXIuZm9y
bWF0KHRoaXMuX2NvbnRlbnQsIGRpZEZvcm1hdC5iaW5kKHRoaXMpKTsKKyAgICB9LAorCiAgICAg
Z2V0IHRleHRNb2RlbCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fdGV4dE1vZGVsOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwppbmRleCAyZGIwMTgyLi5iOWRhOWNj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYworKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAtNjIsOCArNjIsMTAg
QEAKICAgICA8ZmlsZT5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qczwvZmlsZT4KICAgICA8Zmls
ZT5QYW5lbC5qczwvZmlsZT4KICAgICA8ZmlsZT5QYW5lbEVuYWJsZXJWaWV3LmpzPC9maWxlPgor
ICAgIDxmaWxlPnBhcnNlLWpzLmpzPC9maWxlPgogICAgIDxmaWxlPlBsYWNhcmQuanM8L2ZpbGU+
CiAgICAgPGZpbGU+UG9wb3Zlci5qczwvZmlsZT4KKyAgICA8ZmlsZT5wcm9jZXNzLmpzPC9maWxl
PgogICAgIDxmaWxlPlByb2ZpbGVEYXRhR3JpZFRyZWUuanM8L2ZpbGU+CiAgICAgPGZpbGU+UHJv
ZmlsZXNQYW5lbC5qczwvZmlsZT4KICAgICA8ZmlsZT5Qcm9maWxlVmlldy5qczwvZmlsZT4KQEAg
LTgwLDYgKzgyLDcgQEAKICAgICA8ZmlsZT5SZXNvdXJjZXNQYW5lbC5qczwvZmlsZT4KICAgICA8
ZmlsZT5TY29wZUNoYWluU2lkZWJhclBhbmUuanM8L2ZpbGU+CiAgICAgPGZpbGU+U2NyaXB0Lmpz
PC9maWxlPgorICAgIDxmaWxlPlNjcmlwdEZvcm1hdHRlci5qczwvZmlsZT4KICAgICA8ZmlsZT5T
Y3JpcHRzUGFuZWwuanM8L2ZpbGU+CiAgICAgPGZpbGU+U2NyaXB0Vmlldy5qczwvZmlsZT4KICAg
ICA8ZmlsZT5TZWN0aW9uLmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5odG1sCmluZGV4IDJkNDc0NzQuLjI4ZmUyNjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTE1MCw2ICsxNTAsNyBAQCBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNob3J0Y3V0c0hlbHAuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkhBUkVu
dHJ5LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj
PSJDb29raWVQYXJzZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9IlNjcmlwdEZvcm1hdHRlci5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9k
eSBjbGFzcz0iZGV0YWNoZWQiPgogICAgIDxkaXYgaWQ9InRvb2xiYXIiPgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3BhcnNlLWpzLmpzIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL3BhcnNlLWpzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmMxNDk3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvcGFyc2UtanMuanMKQEAgLTAsMCArMSwxMjIxIEBACisvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBB
IEphdmFTY3JpcHQgdG9rZW5pemVyIC8gcGFyc2VyIC8gYmVhdXRpZmllciAvIGNvbXByZXNzb3Iu
CisKKyAgVGhpcyB2ZXJzaW9uIGlzIHN1aXRhYmxlIGZvciBOb2RlLmpzLiAgV2l0aCBtaW5pbWFs
IGNoYW5nZXMgKHRoZQorICBleHBvcnRzIHN0dWZmKSBpdCBzaG91bGQgd29yayBvbiBhbnkgSlMg
cGxhdGZvcm0uCisKKyAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB0b2tlbml6ZXIvcGFyc2VyLiAg
SXQgaXMgYSBwb3J0IHRvIEphdmFTY3JpcHQKKyAgb2YgcGFyc2UtanMgWzFdLCBhIEphdmFTY3Jp
cHQgcGFyc2VyIGxpYnJhcnkgd3JpdHRlbiBpbiBDb21tb24gTGlzcAorICBieSBNYXJpam4gSGF2
ZXJiZWtlLiAgVGhhbmsgeW91IE1hcmlqbiEKKworICBbMV0gaHR0cDovL21hcmlqbi5oYXZlcmJl
a2UubmwvcGFyc2UtanMvCisKKyAgRXhwb3J0ZWQgZnVuY3Rpb25zOgorCisgICAgLSB0b2tlbml6
ZXIoY29kZSkgLS0gcmV0dXJucyBhIGZ1bmN0aW9uLiAgQ2FsbCB0aGUgcmV0dXJuZWQKKyAgICAg
IGZ1bmN0aW9uIHRvIGZldGNoIHRoZSBuZXh0IHRva2VuLgorCisgICAgLSBwYXJzZShjb2RlKSAt
LSByZXR1cm5zIGFuIEFTVCBvZiB0aGUgZ2l2ZW4gSmF2YVNjcmlwdCBjb2RlLgorCisgIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIChDKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aG9yOiBNaWhhaSBCYXpv
bgorICAgICAgICAgICAgICAgICAgICAgICAgIDxtaWhhaS5iYXpvbkBnbWFpbC5jb20+CisgICAg
ICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9taWhhaS5iYXpvbi5uZXQvYmxvZworCisgIERpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIHRoZSBvcmlnaW5hbCBjb2RlIChaTElCIGxp
Y2Vuc2UpOgorCisgICAgQ29weXJpZ2h0IDIwMTAgKGMpIE1paGFpIEJhem9uIDxtaWhhaS5iYXpv
bkBnbWFpbC5jb20+CisgICAgQmFzZWQgb24gcGFyc2UtanMgKGh0dHA6Ly9tYXJpam4uaGF2ZXJi
ZWtlLm5sL3BhcnNlLWpzLykuCisKKyAgICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1p
cycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICAgIHdhcnJhbnR5LiBJbiBubyBl
dmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkKKyAgICBkYW1hZ2Vz
IGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisKKyAgICBQZXJtaXNzaW9u
IGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAgICBw
dXJwb3NlLCBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBp
dCBhbmQKKyAgICByZWRpc3RyaWJ1dGUgaXQgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp
bmcgcmVzdHJpY3Rpb25zOgorCisgICAgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11
c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdAorICAgICAgIG5vdCBjbGFpbSB0aGF0
IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcworICAgICAg
IHNvZnR3YXJlIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QK
KyAgICAgICBkb2N1bWVudGF0aW9uIHdvdWxkIGJlIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVx
dWlyZWQuCisKKyAgICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkg
bWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0CisgICAgICAgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFz
IGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKworICAgIDMuIFRoaXMgbm90aWNlIG1heSBu
b3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZQorICAgICAgIGRpc3RyaWJ1
dGlvbi4KKworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAtLS0tLVsgVG9rZW5pemVyIChjb25zdGFu
dHMpIF0tLS0tLSAqLworCit2YXIgS0VZV09SRFMgPSBhcnJheV90b19oYXNoKFsKKyAgICAgICAg
ImJyZWFrIiwKKyAgICAgICAgImNhc2UiLAorICAgICAgICAiY2F0Y2giLAorICAgICAgICAiY29u
c3QiLAorICAgICAgICAiY29udGludWUiLAorICAgICAgICAiZGVmYXVsdCIsCisgICAgICAgICJk
ZWxldGUiLAorICAgICAgICAiZG8iLAorICAgICAgICAiZWxzZSIsCisgICAgICAgICJmaW5hbGx5
IiwKKyAgICAgICAgImZvciIsCisgICAgICAgICJmdW5jdGlvbiIsCisgICAgICAgICJpZiIsCisg
ICAgICAgICJpbiIsCisgICAgICAgICJpbnN0YW5jZW9mIiwKKyAgICAgICAgIm5ldyIsCisgICAg
ICAgICJyZXR1cm4iLAorICAgICAgICAic3dpdGNoIiwKKyAgICAgICAgInRocm93IiwKKyAgICAg
ICAgInRyeSIsCisgICAgICAgICJ0eXBlb2YiLAorICAgICAgICAidmFyIiwKKyAgICAgICAgInZv
aWQiLAorICAgICAgICAid2hpbGUiLAorICAgICAgICAid2l0aCIKK10pOworCit2YXIgUkVTRVJW
RURfV09SRFMgPSBhcnJheV90b19oYXNoKFsKKyAgICAgICAgImFic3RyYWN0IiwKKyAgICAgICAg
ImJvb2xlYW4iLAorICAgICAgICAiYnl0ZSIsCisgICAgICAgICJjaGFyIiwKKyAgICAgICAgImNs
YXNzIiwKKyAgICAgICAgImRlYnVnZ2VyIiwKKyAgICAgICAgImRvdWJsZSIsCisgICAgICAgICJl
bnVtIiwKKyAgICAgICAgImV4cG9ydCIsCisgICAgICAgICJleHRlbmRzIiwKKyAgICAgICAgImZp
bmFsIiwKKyAgICAgICAgImZsb2F0IiwKKyAgICAgICAgImdvdG8iLAorICAgICAgICAiaW1wbGVt
ZW50cyIsCisgICAgICAgICJpbXBvcnQiLAorICAgICAgICAiaW50IiwKKyAgICAgICAgImludGVy
ZmFjZSIsCisgICAgICAgICJsb25nIiwKKyAgICAgICAgIm5hdGl2ZSIsCisgICAgICAgICJwYWNr
YWdlIiwKKyAgICAgICAgInByaXZhdGUiLAorICAgICAgICAicHJvdGVjdGVkIiwKKyAgICAgICAg
InB1YmxpYyIsCisgICAgICAgICJzaG9ydCIsCisgICAgICAgICJzdGF0aWMiLAorICAgICAgICAi
c3VwZXIiLAorICAgICAgICAic3luY2hyb25pemVkIiwKKyAgICAgICAgInRocm93cyIsCisgICAg
ICAgICJ0cmFuc2llbnQiLAorICAgICAgICAidm9sYXRpbGUiCitdKTsKKwordmFyIEtFWVdPUkRT
X0JFRk9SRV9FWFBSRVNTSU9OID0gYXJyYXlfdG9faGFzaChbCisgICAgICAgICJyZXR1cm4iLAor
ICAgICAgICAibmV3IiwKKyAgICAgICAgImRlbGV0ZSIsCisgICAgICAgICJ0aHJvdyIsCisgICAg
ICAgICJlbHNlIgorXSk7CisKK3ZhciBLRVlXT1JEU19BVE9NID0gYXJyYXlfdG9faGFzaChbCisg
ICAgICAgICJmYWxzZSIsCisgICAgICAgICJudWxsIiwKKyAgICAgICAgInRydWUiLAorICAgICAg
ICAidW5kZWZpbmVkIgorXSk7CisKK3ZhciBPUEVSQVRPUl9DSEFSUyA9IGFycmF5X3RvX2hhc2go
Y2hhcmFjdGVycygiKy0qJiU9PD4hP3x+XiIpKTsKKwordmFyIFJFX0hFWF9OVU1CRVIgPSAvXjB4
WzAtOWEtZl0rJC9pOwordmFyIFJFX09DVF9OVU1CRVIgPSAvXjBbMC03XSskLzsKK3ZhciBSRV9E
RUNfTlVNQkVSID0gL15cZCpcLj9cZCooPzplWystXT9cZCooPzpcZFwuP3xcLj9cZClcZCopPyQv
aTsKKwordmFyIE9QRVJBVE9SUyA9IGFycmF5X3RvX2hhc2goWworICAgICAgICAiaW4iLAorICAg
ICAgICAiaW5zdGFuY2VvZiIsCisgICAgICAgICJ0eXBlb2YiLAorICAgICAgICAibmV3IiwKKyAg
ICAgICAgInZvaWQiLAorICAgICAgICAiZGVsZXRlIiwKKyAgICAgICAgIisrIiwKKyAgICAgICAg
Ii0tIiwKKyAgICAgICAgIisiLAorICAgICAgICAiLSIsCisgICAgICAgICIhIiwKKyAgICAgICAg
In4iLAorICAgICAgICAiJiIsCisgICAgICAgICJ8IiwKKyAgICAgICAgIl4iLAorICAgICAgICAi
KiIsCisgICAgICAgICIvIiwKKyAgICAgICAgIiUiLAorICAgICAgICAiPj4iLAorICAgICAgICAi
PDwiLAorICAgICAgICAiPj4+IiwKKyAgICAgICAgIjwiLAorICAgICAgICAiPiIsCisgICAgICAg
ICI8PSIsCisgICAgICAgICI+PSIsCisgICAgICAgICI9PSIsCisgICAgICAgICI9PT0iLAorICAg
ICAgICAiIT0iLAorICAgICAgICAiIT09IiwKKyAgICAgICAgIj8iLAorICAgICAgICAiPSIsCisg
ICAgICAgICIrPSIsCisgICAgICAgICItPSIsCisgICAgICAgICIvPSIsCisgICAgICAgICIqPSIs
CisgICAgICAgICIlPSIsCisgICAgICAgICI+Pj0iLAorICAgICAgICAiPDw9IiwKKyAgICAgICAg
Ij4+Pj0iLAorICAgICAgICAifj0iLAorICAgICAgICAiJT0iLAorICAgICAgICAifD0iLAorICAg
ICAgICAiXj0iLAorICAgICAgICAiJj0iLAorICAgICAgICAiJiYiLAorICAgICAgICAifHwiCitd
KTsKKwordmFyIFdISVRFU1BBQ0VfQ0hBUlMgPSBhcnJheV90b19oYXNoKGNoYXJhY3RlcnMoIiBc
blxyXHQiKSk7CisKK3ZhciBQVU5DX0JFRk9SRV9FWFBSRVNTSU9OID0gYXJyYXlfdG9faGFzaChj
aGFyYWN0ZXJzKCJbe30oLC47OiIpKTsKKwordmFyIFBVTkNfQ0hBUlMgPSBhcnJheV90b19oYXNo
KGNoYXJhY3RlcnMoIltde30oKSw7OiIpKTsKKwordmFyIFJFR0VYUF9NT0RJRklFUlMgPSBhcnJh
eV90b19oYXNoKGNoYXJhY3RlcnMoImdtc2l5IikpOworCisvKiAtLS0tLVsgVG9rZW5pemVyIF0t
LS0tLSAqLworCitmdW5jdGlvbiBpc19hbHBoYW51bWVyaWNfY2hhcihjaCkgeworICAgICAgICBj
aCA9IGNoLmNoYXJDb2RlQXQoMCk7CisgICAgICAgIHJldHVybiAoY2ggPj0gNDggJiYgY2ggPD0g
NTcpIHx8CisgICAgICAgICAgICAgICAgKGNoID49IDY1ICYmIGNoIDw9IDkwKSB8fAorICAgICAg
ICAgICAgICAgIChjaCA+PSA5NyAmJiBjaCA8PSAxMjIpOworfTsKKworZnVuY3Rpb24gaXNfaWRl
bnRpZmllcl9jaGFyKGNoKSB7CisgICAgICAgIHJldHVybiBpc19hbHBoYW51bWVyaWNfY2hhcihj
aCkgfHwgY2ggPT0gIiQiIHx8IGNoID09ICJfIjsKK307CisKK2Z1bmN0aW9uIGlzX2RpZ2l0KGNo
KSB7CisgICAgICAgIGNoID0gY2guY2hhckNvZGVBdCgwKTsKKyAgICAgICAgcmV0dXJuIGNoID49
IDQ4ICYmIGNoIDw9IDU3OworfTsKKworZnVuY3Rpb24gcGFyc2VfanNfbnVtYmVyKG51bSkgewor
ICAgICAgICBpZiAoUkVfSEVYX05VTUJFUi50ZXN0KG51bSkpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VJbnQobnVtLnN1YnN0cigyKSwgMTYpOworICAgICAgICB9IGVsc2UgaWYgKFJF
X09DVF9OVU1CRVIudGVzdChudW0pKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50
KG51bS5zdWJzdHIoMSksIDgpOworICAgICAgICB9IGVsc2UgaWYgKFJFX0RFQ19OVU1CRVIudGVz
dChudW0pKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTsKKyAgICAg
ICAgfQorfTsKKworZnVuY3Rpb24gSlNfUGFyc2VfRXJyb3IobWVzc2FnZSwgbGluZSwgY29sLCBw
b3MpIHsKKyAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICAgICAgdGhpcy5saW5l
ID0gbGluZTsKKyAgICAgICAgdGhpcy5jb2wgPSBjb2w7CisgICAgICAgIHRoaXMucG9zID0gcG9z
OworICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICh7fSkoKTsKKyAgICAgICAgfSBjYXRj
aChleCkgeworICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBleC5zdGFjazsKKyAgICAgICAg
fTsKK307CisKK0pTX1BhcnNlX0Vycm9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlICsgIiAobGluZTogIiArIHRoaXMubGluZSAr
ICIsIGNvbDogIiArIHRoaXMuY29sICsgIiwgcG9zOiAiICsgdGhpcy5wb3MgKyAiKSIgKyAiXG5c
biIgKyB0aGlzLnN0YWNrOworfTsKKworZnVuY3Rpb24ganNfZXJyb3IobWVzc2FnZSwgbGluZSwg
Y29sLCBwb3MpIHsKKyAgICAgICAgdGhyb3cgbmV3IEpTX1BhcnNlX0Vycm9yKG1lc3NhZ2UsIGxp
bmUsIGNvbCwgcG9zKTsKK307CisKK2Z1bmN0aW9uIGlzX3Rva2VuKHRva2VuLCB0eXBlLCB2YWwp
IHsKKyAgICAgICAgcmV0dXJuIHRva2VuLnR5cGUgPT0gdHlwZSAmJiAodmFsID09IG51bGwgfHwg
dG9rZW4udmFsdWUgPT0gdmFsKTsKK307CisKK3ZhciBFWF9FT0YgPSB7fTsKKworZnVuY3Rpb24g
dG9rZW5pemVyKCRURVhULCBza2lwX2NvbW1lbnRzKSB7CisKKyAgICAgICAgdmFyIFMgPSB7Cisg
ICAgICAgICAgICAgICAgdGV4dCAgICAgICAgICAgOiAkVEVYVC5yZXBsYWNlKC9cclxuP3xbXG5c
dTIwMjhcdTIwMjldL2csICJcbiIpLnJlcGxhY2UoL15cdUZFRkYvLCAnJyksCisgICAgICAgICAg
ICAgICAgcG9zICAgICAgICAgICAgOiAwLAorICAgICAgICAgICAgICAgIHRva3BvcyAgICAgICAg
IDogMCwKKyAgICAgICAgICAgICAgICBsaW5lICAgICAgICAgICA6IDAsCisgICAgICAgICAgICAg
ICAgdG9rbGluZSAgICAgICAgOiAwLAorICAgICAgICAgICAgICAgIGNvbCAgICAgICAgICAgIDog
MCwKKyAgICAgICAgICAgICAgICB0b2tjb2wgICAgICAgICA6IDAsCisgICAgICAgICAgICAgICAg
bmV3bGluZV9iZWZvcmUgOiBmYWxzZSwKKyAgICAgICAgICAgICAgICByZWdleF9hbGxvd2VkICA6
IGZhbHNlCisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gcGVlaygpIHsgcmV0dXJuIFMu
dGV4dC5jaGFyQXQoUy5wb3MpOyB9OworCisgICAgICAgIGZ1bmN0aW9uIG5leHQoc2lnbmFsX2Vv
ZikgeworICAgICAgICAgICAgICAgIHZhciBjaCA9IFMudGV4dC5jaGFyQXQoUy5wb3MrKyk7Cisg
ICAgICAgICAgICAgICAgaWYgKHNpZ25hbF9lb2YgJiYgIWNoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3cgRVhfRU9GOworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAiXG4iKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBTLm5ld2xpbmVfYmVmb3JlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICsrUy5saW5lOworICAgICAgICAgICAgICAgICAgICAgICAgUy5jb2wg
PSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAr
K1MuY29sOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gY2g7Cisg
ICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gZW9mKCkgeworICAgICAgICAgICAgICAgIHJl
dHVybiAhUy5wZWVrKCk7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gZmluZCh3aGF0
LCBzaWduYWxfZW9mKSB7CisgICAgICAgICAgICAgICAgdmFyIHBvcyA9IFMudGV4dC5pbmRleE9m
KHdoYXQsIFMucG9zKTsKKyAgICAgICAgICAgICAgICBpZiAoc2lnbmFsX2VvZiAmJiBwb3MgPT0g
LTEpIHRocm93IEVYX0VPRjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zOworICAgICAgICB9
OworCisgICAgICAgIGZ1bmN0aW9uIHN0YXJ0X3Rva2VuKCkgeworICAgICAgICAgICAgICAgIFMu
dG9rbGluZSA9IFMubGluZTsKKyAgICAgICAgICAgICAgICBTLnRva2NvbCA9IFMuY29sOworICAg
ICAgICAgICAgICAgIFMudG9rcG9zID0gUy5wb3M7CisgICAgICAgIH07CisKKyAgICAgICAgZnVu
Y3Rpb24gdG9rZW4odHlwZSwgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICBTLnJlZ2V4X2FsbG93
ZWQgPSAoKHR5cGUgPT0gIm9wZXJhdG9yIiAmJiAhSE9QKFVOQVJZX1BPU1RGSVgsIHZhbHVlKSkg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUgPT0gImtleXdvcmQi
ICYmIEhPUChLRVlXT1JEU19CRUZPUkVfRVhQUkVTU0lPTiwgdmFsdWUpKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZSA9PSAicHVuYyIgJiYgSE9QKFBVTkNfQkVG
T1JFX0VYUFJFU1NJT04sIHZhbHVlKSkpOworICAgICAgICAgICAgICAgIHZhciByZXQgPSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlICA6IHR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA6IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSAgOiBTLnRv
a2xpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2wgICA6IFMudG9rY29sLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcG9zICAgOiBTLnRva3BvcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5sYiAgIDogUy5uZXdsaW5lX2JlZm9yZQorICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgUy5uZXdsaW5lX2JlZm9yZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVy
biByZXQ7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gc2tpcF93aGl0ZXNwYWNlKCkg
eworICAgICAgICAgICAgICAgIHdoaWxlIChIT1AoV0hJVEVTUEFDRV9DSEFSUywgcGVlaygpKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgfTsKKworICAgICAgICBm
dW5jdGlvbiByZWFkX3doaWxlKHByZWQpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmV0ID0gIiIs
IGNoID0gcGVlaygpLCBpID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoY2ggJiYgcHJlZChj
aCwgaSsrKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IG5leHQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNoID0gcGVlaygpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHBh
cnNlX2Vycm9yKGVycikgeworICAgICAgICAgICAgICAgIGpzX2Vycm9yKGVyciwgUy50b2tsaW5l
LCBTLnRva2NvbCwgUy50b2twb3MpOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHJl
YWRfbnVtKHByZWZpeCkgeworICAgICAgICAgICAgICAgIHZhciBoYXNfZSA9IGZhbHNlLCBhZnRl
cl9lID0gZmFsc2UsIGhhc194ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdmFyIG51bSA9IHJl
YWRfd2hpbGUoZnVuY3Rpb24oY2gsIGkpeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNo
ID09ICJ4IiB8fCBjaCA9PSAiWCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc194KSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBoYXNfeCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWhhc194ICYmIChjaCA9PSAiRSIgfHwgY2ggPT0gImUiKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzX2UpIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc19lID0gYWZ0ZXJf
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY2ggPT0gIi0iKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChhZnRlcl9lIHx8IChpID09IDAgJiYgIXByZWZpeCkpIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gIisiKSByZXR1cm4gYWZ0
ZXJfZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyX2UgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpc19hbHBoYW51bWVyaWNfY2hhcihjaCkgfHwgY2ggPT0g
Ii4iOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGlmIChwcmVmaXgpCisg
ICAgICAgICAgICAgICAgICAgICAgICBudW0gPSBwcmVmaXggKyBudW07CisgICAgICAgICAgICAg
ICAgdmFyIHZhbGlkID0gcGFyc2VfanNfbnVtYmVyKG51bSk7CisgICAgICAgICAgICAgICAgaWYg
KCFpc05hTih2YWxpZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbigi
bnVtIiwgdmFsaWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJzZV9lcnJvcigiSW52YWxpZCBzeW50YXg6ICIgKyBudW0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiByZWFkX2VzY2FwZWRfY2hh
cigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2ggPSBuZXh0KHRydWUpOworICAgICAgICAgICAg
ICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAibiIgOiByZXR1cm4g
IlxuIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiciIgOiByZXR1cm4gIlxyIjsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAidCIgOiByZXR1cm4gIlx0IjsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAiYiIgOiByZXR1cm4gIlxiIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAidiIg
OiByZXR1cm4gIlx2IjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiZiIgOiByZXR1cm4gIlxm
IjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiMCIgOiByZXR1cm4gIlwwIjsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAieCIgOiByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShoZXhfYnl0
ZXMoMikpOworICAgICAgICAgICAgICAgICAgICBjYXNlICJ1IiA6IHJldHVybiBTdHJpbmcuZnJv
bUNoYXJDb2RlKGhleF9ieXRlcyg0KSk7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgIDog
cmV0dXJuIGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBmdW5j
dGlvbiBoZXhfYnl0ZXMobikgeworICAgICAgICAgICAgICAgIHZhciBudW0gPSAwOworICAgICAg
ICAgICAgICAgIGZvciAoOyBuID4gMDsgLS1uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgZGlnaXQgPSBwYXJzZUludChuZXh0KHRydWUpLCAxNik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNOYU4oZGlnaXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZV9lcnJvcigiSW52YWxpZCBoZXgtY2hhcmFjdGVyIHBhdHRlcm4gaW4gc3RyaW5nIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBudW0gPSAobnVtIDw8IDQpIHwgZGlnaXQ7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBudW07CisgICAgICAgIH07CisKKyAg
ICAgICAgZnVuY3Rpb24gcmVhZF9zdHJpbmcoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHdp
dGhfZW9mX2Vycm9yKCJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50IiwgZnVuY3Rpb24oKXsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdW90ZSA9IG5leHQoKSwgcmV0ID0gIiI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBjaCA9IG5leHQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjaCA9PSAiXFwiKSBjaCA9IHJlYWRfZXNjYXBlZF9jaGFyKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09IHF1b3RlKSBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IGNoOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuKCJzdHJpbmci
LCByZXQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0
aW9uIHJlYWRfbGluZV9jb21tZW50KCkgeworICAgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAg
ICAgICAgICAgICB2YXIgaSA9IGZpbmQoIlxuIiksIHJldDsKKyAgICAgICAgICAgICAgICBpZiAo
aSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gUy50ZXh0LnN1YnN0cihT
LnBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBTLnBvcyA9IFMudGV4dC5sZW5ndGg7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFMu
dGV4dC5zdWJzdHJpbmcoUy5wb3MsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgUy5wb3Mg
PSBpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4oImNv
bW1lbnQxIiwgcmV0KTsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiByZWFkX211bHRp
bGluZV9jb21tZW50KCkgeworICAgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gd2l0aF9lb2ZfZXJyb3IoIlVudGVybWluYXRlZCBtdWx0aWxpbmUgY29tbWVudCIs
IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGZpbmQoIiovIiwg
dHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IFMudGV4dC5zdWJzdHJp
bmcoUy5wb3MsIGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvayA9IHRva2VuKCJj
b21tZW50MiIsIHRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgUy5wb3MgPSBpICsgMjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFMubmV3bGluZV9iZWZvcmUgPSB0ZXh0LmluZGV4T2Yo
IlxuIikgPj0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2s7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gcmVhZF9yZWdleHAo
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhfZW9mX2Vycm9yKCJVbnRlcm1pbmF0ZWQg
cmVndWxhciBleHByZXNzaW9uIiwgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBwcmV2X2JhY2tzbGFzaCA9IGZhbHNlLCByZWdleHAgPSAiIiwgY2gsIGluX2NsYXNzID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGNoID0gbmV4dCh0cnVlKSkp
IGlmIChwcmV2X2JhY2tzbGFzaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWdleHAgKz0gIlxcIiArIGNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2
X2JhY2tzbGFzaCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChj
aCA9PSAiWyIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fY2xhc3MgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdleHAgKz0gY2g7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICJdIiAmJiBpbl9jbGFzcykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9jbGFzcyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWdleHAgKz0gY2g7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNoID09ICIvIiAmJiAhaW5fY2xhc3MpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGNoID09ICJcXCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl
dl9iYWNrc2xhc2ggPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXhwICs9IGNoOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZHMgPSByZWFkX3do
aWxlKGZ1bmN0aW9uKGNoKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEhPUChSRUdFWFBfTU9ESUZJRVJTLCBjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbigicmVnZXhwIiwgWyByZWdleHAs
IG1vZHMgXSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH07CisKKyAgICAgICAgZnVu
Y3Rpb24gcmVhZF9vcGVyYXRvcihwcmVmaXgpIHsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBn
cm93KG9wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmlnZ2VyID0gb3AgKyBwZWVr
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSE9QKE9QRVJBVE9SUywgYmlnZ2VyKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBncm93KGJpZ2dlcik7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
b3A7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdG9rZW4oIm9wZXJhdG9yIiwgZ3JvdyhwcmVmaXggfHwgbmV4dCgp
KSk7CisgICAgICAgIH07CisKKyAgICAgICAgdmFyIGhhbmRsZV9zbGFzaCA9IHNraXBfY29tbWVu
dHMgPyBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAg
ICAgdmFyIHJlZ2V4X2FsbG93ZWQgPSBTLnJlZ2V4X2FsbG93ZWQ7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChwZWVrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiLyI6IHJlYWRfbGlu
ZV9jb21tZW50KCk7IFMucmVnZXhfYWxsb3dlZCA9IHJlZ2V4X2FsbG93ZWQ7IHJldHVybiBuZXh0
X3Rva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIioiOiByZWFkX211bHRpbGluZV9j
b21tZW50KCk7IFMucmVnZXhfYWxsb3dlZCA9IHJlZ2V4X2FsbG93ZWQ7IHJldHVybiBuZXh0X3Rv
a2VuKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBTLnJlZ2V4
X2FsbG93ZWQgPyByZWFkX3JlZ2V4cCgpIDogcmVhZF9vcGVyYXRvcigiLyIpOworICAgICAgICB9
IDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAg
IHN3aXRjaCAocGVlaygpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIi8iOiByZXR1cm4g
cmVhZF9saW5lX2NvbW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiKiI6IHJldHVy
biByZWFkX211bHRpbGluZV9jb21tZW50KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiBTLnJlZ2V4X2FsbG93ZWQgPyByZWFkX3JlZ2V4cCgpIDogcmVhZF9vcGVy
YXRvcigiLyIpOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIGhhbmRsZV9kb3QoKSB7
CisgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgIHJldHVybiBpc19kaWdp
dChwZWVrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICA/IHJlYWRfbnVtKCIuIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIDogdG9rZW4oInB1bmMiLCAiLiIpOworICAgICAgICB9OworCisg
ICAgICAgIGZ1bmN0aW9uIHJlYWRfd29yZCgpIHsKKyAgICAgICAgICAgICAgICB2YXIgd29yZCA9
IHJlYWRfd2hpbGUoaXNfaWRlbnRpZmllcl9jaGFyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
IUhPUChLRVlXT1JEUywgd29yZCkKKyAgICAgICAgICAgICAgICAgICAgICAgID8gdG9rZW4oIm5h
bWUiLCB3b3JkKQorICAgICAgICAgICAgICAgICAgICAgICAgOiBIT1AoT1BFUkFUT1JTLCB3b3Jk
KQorICAgICAgICAgICAgICAgICAgICAgICAgPyB0b2tlbigib3BlcmF0b3IiLCB3b3JkKQorICAg
ICAgICAgICAgICAgICAgICAgICAgOiBIT1AoS0VZV09SRFNfQVRPTSwgd29yZCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgID8gdG9rZW4oImF0b20iLCB3b3JkKQorICAgICAgICAgICAgICAgICAg
ICAgICAgOiB0b2tlbigia2V5d29yZCIsIHdvcmQpOworICAgICAgICB9OworCisgICAgICAgIGZ1
bmN0aW9uIHdpdGhfZW9mX2Vycm9yKGVvZl9lcnJvciwgY29udCkgeworICAgICAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udCgpOworICAgICAgICAg
ICAgICAgIH0gY2F0Y2goZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleCA9PT0g
RVhfRU9GKSBwYXJzZV9lcnJvcihlb2ZfZXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSB0aHJvdyBleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAg
ZnVuY3Rpb24gbmV4dF90b2tlbihmb3JjZV9yZWdleHApIHsKKyAgICAgICAgICAgICAgICBpZiAo
Zm9yY2VfcmVnZXhwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRfcmVnZXhw
KCk7CisgICAgICAgICAgICAgICAgc2tpcF93aGl0ZXNwYWNlKCk7CisgICAgICAgICAgICAgICAg
c3RhcnRfdG9rZW4oKTsKKyAgICAgICAgICAgICAgICB2YXIgY2ggPSBwZWVrKCk7CisgICAgICAg
ICAgICAgICAgaWYgKCFjaCkgcmV0dXJuIHRva2VuKCJlb2YiKTsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNfZGlnaXQoY2gpKSByZXR1cm4gcmVhZF9udW0oKTsKKyAgICAgICAgICAgICAgICBpZiAo
Y2ggPT0gJyInIHx8IGNoID09ICInIikgcmV0dXJuIHJlYWRfc3RyaW5nKCk7CisgICAgICAgICAg
ICAgICAgaWYgKEhPUChQVU5DX0NIQVJTLCBjaCkpIHJldHVybiB0b2tlbigicHVuYyIsIG5leHQo
KSk7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICIuIikgcmV0dXJuIGhhbmRsZV9kb3QoKTsK
KyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gIi8iKSByZXR1cm4gaGFuZGxlX3NsYXNoKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKEhPUChPUEVSQVRPUl9DSEFSUywgY2gpKSByZXR1cm4gcmVhZF9v
cGVyYXRvcigpOworICAgICAgICAgICAgICAgIGlmIChpc19pZGVudGlmaWVyX2NoYXIoY2gpKSBy
ZXR1cm4gcmVhZF93b3JkKCk7CisgICAgICAgICAgICAgICAgcGFyc2VfZXJyb3IoIlVuZXhwZWN0
ZWQgY2hhcmFjdGVyICciICsgY2ggKyAiJyIpOworICAgICAgICB9OworCisgICAgICAgIG5leHRf
dG9rZW4uY29udGV4dCA9IGZ1bmN0aW9uKG5jKSB7CisgICAgICAgICAgICAgICAgaWYgKG5jKSBT
ID0gbmM7CisgICAgICAgICAgICAgICAgcmV0dXJuIFM7CisgICAgICAgIH07CisKKyAgICAgICAg
cmV0dXJuIG5leHRfdG9rZW47CisKK307CisKKy8qIC0tLS0tWyBQYXJzZXIgKGNvbnN0YW50cykg
XS0tLS0tICovCisKK3ZhciBVTkFSWV9QUkVGSVggPSBhcnJheV90b19oYXNoKFsKKyAgICAgICAg
InR5cGVvZiIsCisgICAgICAgICJ2b2lkIiwKKyAgICAgICAgImRlbGV0ZSIsCisgICAgICAgICIt
LSIsCisgICAgICAgICIrKyIsCisgICAgICAgICIhIiwKKyAgICAgICAgIn4iLAorICAgICAgICAi
LSIsCisgICAgICAgICIrIgorXSk7CisKK3ZhciBVTkFSWV9QT1NURklYID0gYXJyYXlfdG9faGFz
aChbICItLSIsICIrKyIgXSk7CisKK3ZhciBBU1NJR05NRU5UID0gKGZ1bmN0aW9uKGEsIHJldCwg
aSl7CisgICAgICAgIHdoaWxlIChpIDwgYS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICByZXRb
YVtpXV0gPSBhW2ldLnN1YnN0cigwLCBhW2ldLmxlbmd0aCAtIDEpOworICAgICAgICAgICAgICAg
IGkrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworfSkoCisgICAgICAgIFsiKz0i
LCAiLT0iLCAiLz0iLCAiKj0iLCAiJT0iLCAiPj49IiwgIjw8PSIsICI+Pj49IiwgIn49IiwgIiU9
IiwgInw9IiwgIl49IiwgIiY9Il0sCisgICAgICAgIHsgIj0iOiB0cnVlIH0sCisgICAgICAgIDAK
Kyk7CisKK3ZhciBQUkVDRURFTkNFID0gKGZ1bmN0aW9uKGEsIHJldCl7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwLCBuID0gMTsgaSA8IGEubGVuZ3RoOyArK2ksICsrbikgeworICAgICAgICAgICAg
ICAgIHZhciBiID0gYVtpXTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIu
bGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldFtiW2pdXSA9IG47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7Cit9KSgKKyAg
ICAgICAgWworICAgICAgICAgICAgICAgIFsifHwiXSwKKyAgICAgICAgICAgICAgICBbIiYmIl0s
CisgICAgICAgICAgICAgICAgWyJ8Il0sCisgICAgICAgICAgICAgICAgWyJeIl0sCisgICAgICAg
ICAgICAgICAgWyImIl0sCisgICAgICAgICAgICAgICAgWyI9PSIsICI9PT0iLCAiIT0iLCAiIT09
Il0sCisgICAgICAgICAgICAgICAgWyI8IiwgIj4iLCAiPD0iLCAiPj0iLCAiaW4iLCAiaW5zdGFu
Y2VvZiJdLAorICAgICAgICAgICAgICAgIFsiPj4iLCAiPDwiLCAiPj4+Il0sCisgICAgICAgICAg
ICAgICAgWyIrIiwgIi0iXSwKKyAgICAgICAgICAgICAgICBbIioiLCAiLyIsICIlIl0KKyAgICAg
ICAgXSwKKyAgICAgICAge30KKyk7CisKK3ZhciBTVEFURU1FTlRTX1dJVEhfTEFCRUxTID0gYXJy
YXlfdG9faGFzaChbICJmb3IiLCAiZG8iLCAid2hpbGUiLCAic3dpdGNoIiBdKTsKKwordmFyIEFU
T01JQ19TVEFSVF9UT0tFTiA9IGFycmF5X3RvX2hhc2goWyAiYXRvbSIsICJudW0iLCAic3RyaW5n
IiwgInJlZ2V4cCIsICJuYW1lIiBdKTsKKworLyogLS0tLS1bIFBhcnNlciBdLS0tLS0gKi8KKwor
ZnVuY3Rpb24gTm9kZVdpdGhUb2tlbihzdHIsIHN0YXJ0LCBlbmQpIHsKKyAgICAgICAgdGhpcy5u
YW1lID0gc3RyOworICAgICAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7CisgICAgICAgIHRoaXMuZW5k
ID0gZW5kOworfTsKKworTm9kZVdpdGhUb2tlbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlv
bigpIHsgcmV0dXJuIHRoaXMubmFtZTsgfTsKKworZnVuY3Rpb24gcGFyc2UoJFRFWFQsIHN0cmlj
dF9tb2RlLCBlbWJlZF90b2tlbnMpIHsKKworICAgICAgICB2YXIgUyA9IHsKKyAgICAgICAgICAg
ICAgICBpbnB1dDogdG9rZW5pemVyKCRURVhULCB0cnVlKSwKKyAgICAgICAgICAgICAgICB0b2tl
bjogbnVsbCwKKyAgICAgICAgICAgICAgICBwcmV2OiBudWxsLAorICAgICAgICAgICAgICAgIHBl
ZWtlZDogbnVsbCwKKyAgICAgICAgICAgICAgICBpbl9mdW5jdGlvbjogMCwKKyAgICAgICAgICAg
ICAgICBpbl9sb29wOiAwLAorICAgICAgICAgICAgICAgIGxhYmVsczogW10KKyAgICAgICAgfTsK
KworICAgICAgICBTLnRva2VuID0gbmV4dCgpOworCisgICAgICAgIGZ1bmN0aW9uIGlzKHR5cGUs
IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzX3Rva2VuKFMudG9rZW4sIHR5cGUs
IHZhbHVlKTsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiBwZWVrKCkgeyByZXR1cm4g
Uy5wZWVrZWQgfHwgKFMucGVla2VkID0gUy5pbnB1dCgpKTsgfTsKKworICAgICAgICBmdW5jdGlv
biBuZXh0KCkgeworICAgICAgICAgICAgICAgIFMucHJldiA9IFMudG9rZW47CisgICAgICAgICAg
ICAgICAgaWYgKFMucGVla2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTLnRva2VuID0g
Uy5wZWVrZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBTLnBlZWtlZCA9IG51bGw7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFMudG9rZW4gPSBT
LmlucHV0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBTLnRv
a2VuOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHByZXYoKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFMucHJldjsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiBjcm9h
ayhtc2csIGxpbmUsIGNvbCwgcG9zKSB7CisgICAgICAgICAgICAgICAgdmFyIGN0eCA9IFMuaW5w
dXQuY29udGV4dCgpOworICAgICAgICAgICAgICAgIGpzX2Vycm9yKG1zZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5lICE9IG51bGwgPyBsaW5lIDogY3R4LnRva2xpbmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgY29sICE9IG51bGwgPyBjb2wgOiBjdHgudG9rY29sLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvcyAhPSBudWxsID8gcG9zIDogY3R4LnRva3Bvcyk7CisgICAg
ICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gdG9rZW5fZXJyb3IodG9rZW4sIG1zZykgeworICAg
ICAgICAgICAgICAgIGNyb2FrKG1zZywgdG9rZW4ubGluZSwgdG9rZW4uY29sKTsKKyAgICAgICAg
fTsKKworICAgICAgICBmdW5jdGlvbiB1bmV4cGVjdGVkKHRva2VuKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHRva2VuID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IFMu
dG9rZW47CisgICAgICAgICAgICAgICAgdG9rZW5fZXJyb3IodG9rZW4sICJVbmV4cGVjdGVkIHRv
a2VuOiAiICsgdG9rZW4udHlwZSArICIgKCIgKyB0b2tlbi52YWx1ZSArICIpIik7CisgICAgICAg
IH07CisKKyAgICAgICAgZnVuY3Rpb24gZXhwZWN0X3Rva2VuKHR5cGUsIHZhbCkgeworICAgICAg
ICAgICAgICAgIGlmIChpcyh0eXBlLCB2YWwpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbmV4dCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0b2tlbl9l
cnJvcihTLnRva2VuLCAiVW5leHBlY3RlZCB0b2tlbiAiICsgUy50b2tlbi50eXBlICsgIiwgZXhw
ZWN0ZWQgIiArIHR5cGUpOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIGV4cGVjdChw
dW5jKSB7IHJldHVybiBleHBlY3RfdG9rZW4oInB1bmMiLCBwdW5jKTsgfTsKKworICAgICAgICBm
dW5jdGlvbiBjYW5faW5zZXJ0X3NlbWljb2xvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
IXN0cmljdF9tb2RlICYmICgKKyAgICAgICAgICAgICAgICAgICAgICAgIFMudG9rZW4ubmxiIHx8
IGlzKCJlb2YiKSB8fCBpcygicHVuYyIsICJ9IikKKyAgICAgICAgICAgICAgICApOworICAgICAg
ICB9OworCisgICAgICAgIGZ1bmN0aW9uIHNlbWljb2xvbigpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXMoInB1bmMiLCAiOyIpKSBuZXh0KCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWNh
bl9pbnNlcnRfc2VtaWNvbG9uKCkpIHVuZXhwZWN0ZWQoKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBmdW5jdGlvbiBhcygpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2xpY2UoYXJndW1lbnRz
KTsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiBwYXJlbnRoZXNpc2VkKCkgeworICAg
ICAgICAgICAgICAgIGV4cGVjdCgiKCIpOworICAgICAgICAgICAgICAgIHZhciBleCA9IGV4cHJl
c3Npb24oKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoIikiKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZXg7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gYWRkX3Rva2VucyhzdHIs
IHN0YXJ0LCBlbmQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5vZGVXaXRoVG9rZW4o
c3RyLCBzdGFydCwgZW5kKTsKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgc3RhdGVtZW50ID0g
ZW1iZWRfdG9rZW5zID8gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0g
Uy50b2tlbjsKKyAgICAgICAgICAgICAgICB2YXIgc3RtdCA9ICRzdGF0ZW1lbnQoKTsKKyAgICAg
ICAgICAgICAgICBzdG10WzBdID0gYWRkX3Rva2VucyhzdG10WzBdLCBzdGFydCwgcHJldigpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3RtdDsKKyAgICAgICAgfSA6ICRzdGF0ZW1lbnQ7CisK
KyAgICAgICAgZnVuY3Rpb24gJHN0YXRlbWVudCgpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXMo
Im9wZXJhdG9yIiwgIi8iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUy5wZWVrZWQgPSBu
dWxsOworICAgICAgICAgICAgICAgICAgICAgICAgUy50b2tlbiA9IFMuaW5wdXQodHJ1ZSk7IC8v
IGZvcmNlIHJlZ2V4cAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KFMudG9rZW4udHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICJudW0iOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlICJzdHJpbmciOgorICAgICAgICAgICAgICAgICAgICBjYXNlICJy
ZWdleHAiOgorICAgICAgICAgICAgICAgICAgICBjYXNlICJvcGVyYXRvciI6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgImF0b20iOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNp
bXBsZV9zdGF0ZW1lbnQoKTsKKworICAgICAgICAgICAgICAgICAgICBjYXNlICJuYW1lIjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc190b2tlbihwZWVrKCksICJwdW5jIiwgIjoi
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGxhYmVsZWRfc3RhdGVtZW50KHBy
b2cxKFMudG9rZW4udmFsdWUsIG5leHQsIG5leHQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IHNpbXBsZV9zdGF0ZW1lbnQoKTsKKworICAgICAgICAgICAgICAgICAgICBjYXNl
ICJwdW5jIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoUy50b2tlbi52YWx1ZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInsiOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYXMoImJsb2NrIiwgYmxvY2tfKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgIlsiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgIigiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2ltcGxl
X3N0YXRlbWVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIjsiOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBhcygiYmxvY2siKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVk
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAia2V5d29yZCI6CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb2cxKFMudG9r
ZW4udmFsdWUsIG5leHQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiYnJl
YWsiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnJlYWtfY29udCgi
YnJlYWsiKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImNvbnRpbnVlIjoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJyZWFrX2NvbnQoImNvbnRp
bnVlIik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJkZWJ1Z2dlciI6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWljb2xvbigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXMoImRlYnVnZ2VyIik7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICJkbyI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAoZnVuY3Rpb24oYm9keSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhwZWN0X3Rva2VuKCJrZXl3b3JkIiwgIndoaWxlIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzKCJkbyIsIHByb2cxKHBhcmVu
dGhlc2lzZWQsIHNlbWljb2xvbiksIGJvZHkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KShpbl9sb29wKHN0YXRlbWVudCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAiZm9yIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZv
cl8oKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImZ1bmN0aW9uIjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uXyh0cnVlKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImlmIjoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGlmXygpOworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAicmV0dXJuIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFMu
aW5fZnVuY3Rpb24gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjcm9haygiJ3JldHVybicgb3V0c2lkZSBvZiBmdW5jdGlvbiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYXMoInJldHVybiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpcygicHVuYyIsICI7IikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID8gKG5leHQoKSwgbnVsbCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuX2luc2VydF9zZW1pY29sb24oKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHByb2cxKGV4cHJlc3Npb24sIHNlbWlj
b2xvbikpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAic3dpdGNoIjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzKCJzd2l0Y2giLCBwYXJlbnRo
ZXNpc2VkKCksIHN3aXRjaF9ibG9ja18oKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICJ0aHJvdyI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBh
cygidGhyb3ciLCBwcm9nMShleHByZXNzaW9uLCBzZW1pY29sb24pKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgInRyeSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnlfKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ2
YXIiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvZzEodmFyXywg
c2VtaWNvbG9uKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImNvbnN0IjoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2cxKGNvbnN0Xywgc2Vt
aWNvbG9uKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIndoaWxlIjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzKCJ3aGlsZSIsIHBhcmVudGhl
c2lzZWQoKSwgaW5fbG9vcChzdGF0ZW1lbnQpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgIndpdGgiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YXMoIndpdGgiLCBwYXJlbnRoZXNpc2VkKCksIHN0YXRlbWVudCgpKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuZXhwZWN0ZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gbGFiZWxlZF9zdGF0ZW1lbnQobGFi
ZWwpIHsKKyAgICAgICAgICAgICAgICBTLmxhYmVscy5wdXNoKGxhYmVsKTsKKyAgICAgICAgICAg
ICAgICB2YXIgc3RhcnQgPSBTLnRva2VuLCBzdGF0ID0gc3RhdGVtZW50KCk7CisgICAgICAgICAg
ICAgICAgaWYgKHN0cmljdF9tb2RlICYmICFIT1AoU1RBVEVNRU5UU19XSVRIX0xBQkVMUywgc3Rh
dFswXSkpCisgICAgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkKHN0YXJ0KTsKKyAgICAg
ICAgICAgICAgICBTLmxhYmVscy5wb3AoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXMoImxh
YmVsIiwgbGFiZWwsIHN0YXQpOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHNpbXBs
ZV9zdGF0ZW1lbnQoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFzKCJzdGF0IiwgcHJvZzEo
ZXhwcmVzc2lvbiwgc2VtaWNvbG9uKSk7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24g
YnJlYWtfY29udCh0eXBlKSB7CisgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBpcygibmFtZSIp
ID8gUy50b2tlbi52YWx1ZSA6IG51bGw7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gbnVs
bCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtZW1iZXIobmFtZSwgUy5sYWJlbHMpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcm9haygiTGFiZWwgIiArIG5hbWUgKyAiIHdpdGhvdXQgbWF0Y2hpbmcgbG9v
cCBvciBzdGF0ZW1lbnQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoUy5pbl9sb29wID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBjcm9hayh0eXBl
ICsgIiBub3QgaW5zaWRlIGEgbG9vcCBvciBzd2l0Y2giKTsKKyAgICAgICAgICAgICAgICBzZW1p
Y29sb24oKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXModHlwZSwgbmFtZSk7CisgICAgICAg
IH07CisKKyAgICAgICAgZnVuY3Rpb24gZm9yXygpIHsKKyAgICAgICAgICAgICAgICBleHBlY3Qo
IigiKTsKKyAgICAgICAgICAgICAgICB2YXIgaGFzX3ZhciA9IGlzKCJrZXl3b3JkIiwgInZhciIp
OworICAgICAgICAgICAgICAgIGlmIChoYXNfdmFyKQorICAgICAgICAgICAgICAgICAgICAgICAg
bmV4dCgpOworICAgICAgICAgICAgICAgIGlmIChpcygibmFtZSIpICYmIGlzX3Rva2VuKHBlZWso
KSwgIm9wZXJhdG9yIiwgImluIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciAo
aSBpbiBmb28pCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IFMudG9rZW4udmFs
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7IG5leHQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBvYmogPSBleHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBleHBlY3QoIikiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcygiZm9y
LWluIiwgaGFzX3ZhciwgbmFtZSwgb2JqLCBpbl9sb29wKHN0YXRlbWVudCkpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbGFzc2ljIGZvcgor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluaXQgPSBpcygicHVuYyIsICI7IikgPyBudWxs
IDogaGFzX3ZhciA/IHZhcl8oKSA6IGV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdCgiOyIpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlc3QgPSBpcygi
cHVuYyIsICI7IikgPyBudWxsIDogZXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0KCI7Iik7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RlcCA9IGlzKCJw
dW5jIiwgIikiKSA/IG51bGwgOiBleHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBleHBlY3QoIikiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcygiZm9yIiwg
aW5pdCwgdGVzdCwgc3RlcCwgaW5fbG9vcChzdGF0ZW1lbnQpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gZnVuY3Rpb25fKGluX3N0YXRlbWVudCkg
eworICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaXMoIm5hbWUiKSA/IHByb2cxKFMudG9rZW4u
dmFsdWUsIG5leHQpIDogbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAoaW5fc3RhdGVtZW50ICYm
ICFuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgdW5leHBlY3RlZCgpOworICAgICAgICAg
ICAgICAgIGV4cGVjdCgiKCIpOworICAgICAgICAgICAgICAgIHJldHVybiBhcyhpbl9zdGF0ZW1l
bnQgPyAiZGVmdW4iIDogImZ1bmN0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRzCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIChmdW5jdGlvbihmaXJzdCwgYSl7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKCFpcygicHVuYyIsICIpIikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdCkgZmlyc3QgPSBmYWxzZTsgZWxzZSBl
eHBlY3QoIiwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghaXMoIm5hbWUiKSkgdW5leHBlY3RlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYS5wdXNoKFMudG9rZW4udmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pKHRydWUsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Ym9keQorICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKXsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICArK1MuaW5fZnVuY3Rpb247CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGxvb3AgPSBTLmluX2xvb3A7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUy5pbl9sb29wID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgYSA9IGJsb2NrXygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0tUy5pbl9mdW5jdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTLmluX2xvb3AgPSBsb29wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBhOworICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBmdW5jdGlvbiBpZl8oKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbmQgPSBwYXJl
bnRoZXNpc2VkKCksIGJvZHkgPSBzdGF0ZW1lbnQoKSwgYmVsc2U7CisgICAgICAgICAgICAgICAg
aWYgKGlzKCJrZXl3b3JkIiwgImVsc2UiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV4
dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYmVsc2UgPSBzdGF0ZW1lbnQoKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGFzKCJpZiIsIGNvbmQsIGJvZHks
IGJlbHNlKTsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiBibG9ja18oKSB7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KCJ7Iik7CisgICAgICAgICAgICAgICAgdmFyIGEgPSBbXTsKKyAg
ICAgICAgICAgICAgICB3aGlsZSAoIWlzKCJwdW5jIiwgIn0iKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzKCJlb2YiKSkgdW5leHBlY3RlZCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYS5wdXNoKHN0YXRlbWVudCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgIHJldHVybiBhOworICAgICAgICB9OworCisg
ICAgICAgIHZhciBzd2l0Y2hfYmxvY2tfID0gY3VycnkoaW5fbG9vcCwgZnVuY3Rpb24oKXsKKyAg
ICAgICAgICAgICAgICBleHBlY3QoInsiKTsKKyAgICAgICAgICAgICAgICB2YXIgYSA9IFtdLCBj
dXIgPSBudWxsOworICAgICAgICAgICAgICAgIHdoaWxlICghaXMoInB1bmMiLCAifSIpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXMoImVvZiIpKSB1bmV4cGVjdGVkKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaXMoImtleXdvcmQiLCAiY2FzZSIpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3VyID0gW107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEucHVz
aChbIGV4cHJlc3Npb24oKSwgY3VyIF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHBlY3QoIjoiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGlzKCJrZXl3b3JkIiwgImRlZmF1bHQiKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cGVjdCgiOiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXIg
PSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5wdXNoKFsgbnVsbCwgY3Vy
IF0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyKSB1bmV4cGVj
dGVkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ci5wdXNoKHN0YXRlbWVu
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgIHJldHVybiBhOworICAgICAgICB9
KTsKKworICAgICAgICBmdW5jdGlvbiB0cnlfKCkgeworICAgICAgICAgICAgICAgIHZhciBib2R5
ID0gYmxvY2tfKCksIGJjYXRjaCwgYmZpbmFsbHk7CisgICAgICAgICAgICAgICAgaWYgKGlzKCJr
ZXl3b3JkIiwgImNhdGNoIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCgiKCIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpcygibmFtZSIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9h
aygiTmFtZSBleHBlY3RlZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBT
LnRva2VuLnZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0KCIpIik7CisgICAgICAgICAgICAgICAgICAgICAgICBiY2F0
Y2ggPSBbIG5hbWUsIGJsb2NrXygpIF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChpcygia2V5d29yZCIsICJmaW5hbGx5IikpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJmaW5hbGx5ID0gYmxvY2tfKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghYmNhdGNoICYmICFiZmlu
YWxseSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyb2FrKCJNaXNzaW5nIGNhdGNoL2ZpbmFs
bHkgYmxvY2tzIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFzKCJ0cnkiLCBib2R5LCBiY2F0
Y2gsIGJmaW5hbGx5KTsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiB2YXJkZWZzKCkg
eworICAgICAgICAgICAgICAgIHZhciBhID0gW107CisgICAgICAgICAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpcygibmFtZSIpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgbmFtZSA9IFMudG9rZW4udmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXMoIm9wZXJhdG9yIiwgIj0iKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGEucHVzaChbIG5hbWUsIGV4cHJlc3Npb24oZmFsc2UpIF0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYS5wdXNoKFsgbmFtZSBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghaXMoInB1bmMiLCAiLCIpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgIH07
CisKKyAgICAgICAgZnVuY3Rpb24gdmFyXygpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYXMo
InZhciIsIHZhcmRlZnMoKSk7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gY29uc3Rf
KCkgeworICAgICAgICAgICAgICAgIHJldHVybiBhcygiY29uc3QiLCB2YXJkZWZzKCkpOworICAg
ICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIG5ld18oKSB7CisgICAgICAgICAgICAgICAgdmFy
IG5ld2V4cCA9IGV4cHJfYXRvbShmYWxzZSksIGFyZ3M7CisgICAgICAgICAgICAgICAgaWYgKGlz
KCJwdW5jIiwgIigiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYXJncyA9IGV4cHJfbGlzdCgiKSIpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gW107CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBzdWJzY3JpcHRzKGFzKCJuZXciLCBuZXdl
eHAsIGFyZ3MpLCB0cnVlKTsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiBleHByX2F0
b20oYWxsb3dfY2FsbHMpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXMoIm9wZXJhdG9yIiwgIm5l
dyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbmV3XygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoaXMoIm9wZXJhdG9yIikgJiYgSE9QKFVOQVJZX1BSRUZJWCwgUy50b2tlbi52YWx1ZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlX3VuYXJ5KCJ1bmFyeS1wcmVm
aXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZzEoUy50
b2tlbi52YWx1ZSwgbmV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBleHByX2F0b20oYWxsb3dfY2FsbHMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKGlzKCJwdW5jIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAoUy50b2tlbi52YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIigi
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJzY3JpcHRzKHByb2cxKGV4cHJlc3Npb24sIGN1
cnJ5KGV4cGVjdCwgIikiKSksIGFsbG93X2NhbGxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICJbIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic2NyaXB0cyhhcnJheV8o
KSwgYWxsb3dfY2FsbHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInsiOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdWJzY3JpcHRzKG9iamVjdF8oKSwgYWxsb3dfY2FsbHMp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdW5l
eHBlY3RlZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXMoImtl
eXdvcmQiLCAiZnVuY3Rpb24iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnNjcmlwdHMoZnVuY3Rpb25fKGZhbHNl
KSwgYWxsb3dfY2FsbHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
SE9QKEFUT01JQ19TVEFSVF9UT0tFTiwgUy50b2tlbi50eXBlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGF0b20gPSBTLnRva2VuLnR5cGUgPT0gInJlZ2V4cCIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyBhcygicmVnZXhwIiwgUy50b2tlbi52YWx1ZVswXSwgUy50
b2tlbi52YWx1ZVsxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhcyhTLnRv
a2VuLnR5cGUsIFMudG9rZW4udmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN1YnNjcmlwdHMocHJvZzEoYXRvbSwgbmV4dCksIGFsbG93X2NhbGxzKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdW5leHBlY3RlZCgpOworICAgICAgICB9OworCisgICAg
ICAgIGZ1bmN0aW9uIGV4cHJfbGlzdChjbG9zaW5nLCBhbGxvd190cmFpbGluZ19jb21tYSkgewor
ICAgICAgICAgICAgICAgIHZhciBmaXJzdCA9IHRydWUsIGEgPSBbXTsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAoIWlzKCJwdW5jIiwgY2xvc2luZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChmaXJzdCkgZmlyc3QgPSBmYWxzZTsgZWxzZSBleHBlY3QoIiwiKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChhbGxvd190cmFpbGluZ19jb21tYSAmJiBpcygicHVuYyIsIGNsb3Np
bmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGEucHVzaChleHByZXNzaW9uKGZhbHNlKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYTsKKyAg
ICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiBhcnJheV8oKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGFzKCJhcnJheSIsIGV4cHJfbGlzdCgiXSIsICFzdHJpY3RfbW9kZSkpOworICAgICAg
ICB9OworCisgICAgICAgIGZ1bmN0aW9uIG9iamVjdF8oKSB7CisgICAgICAgICAgICAgICAgdmFy
IGZpcnN0ID0gdHJ1ZSwgYSA9IFtdOworICAgICAgICAgICAgICAgIHdoaWxlICghaXMoInB1bmMi
LCAifSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3QpIGZpcnN0ID0gZmFs
c2U7IGVsc2UgZXhwZWN0KCIsIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmlj
dF9tb2RlICYmIGlzKCJwdW5jIiwgIn0iKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYWxsb3cgdHJhaWxpbmcgY29tbWEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGFzX3Byb3BlcnR5
X25hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCgiOiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gZXhwcmVzc2lvbihmYWxzZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhLnB1c2goWyBuYW1lLCB2YWx1ZSBdKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgIHJldHVybiBhcygib2Jq
ZWN0IiwgYSk7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gYXNfcHJvcGVydHlfbmFt
ZSgpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKFMudG9rZW4udHlwZSkgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlICJudW0iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICJzdHJpbmci
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2cxKFMudG9rZW4udmFsdWUsIG5l
eHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gYXNfbmFtZSgp
OworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIGFzX25hbWUoKSB7CisgICAgICAgICAg
ICAgICAgc3dpdGNoIChTLnRva2VuLnR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAi
bmFtZSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIm9wZXJhdG9yIjoKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAia2V5d29yZCI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgImF0b20i
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2cxKFMudG9rZW4udmFsdWUsIG5l
eHQpOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgdW5leHBlY3RlZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAg
ICBmdW5jdGlvbiBzdWJzY3JpcHRzKGV4cHIsIGFsbG93X2NhbGxzKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzKCJwdW5jIiwgIi4iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnNjcmlwdHMoYXMoImRvdCIsIGV4
cHIsIGFzX25hbWUoKSksIGFsbG93X2NhbGxzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKGlzKCJwdW5jIiwgIlsiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
bmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnNjcmlwdHMoYXMoInN1
YiIsIGV4cHIsIHByb2cxKGV4cHJlc3Npb24sIGN1cnJ5KGV4cGVjdCwgIl0iKSkpLCBhbGxvd19j
YWxscyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChhbGxvd19jYWxs
cyAmJiBpcygicHVuYyIsICIoIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJzY3JpcHRzKGFzKCJjYWxsIiwgZXhw
ciwgZXhwcl9saXN0KCIpIikpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKGFsbG93X2NhbGxzICYmIGlzKCJvcGVyYXRvciIpICYmIEhPUChVTkFSWV9QT1NU
RklYLCBTLnRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBy
b2cxKGN1cnJ5KG1ha2VfdW5hcnksICJ1bmFyeS1wb3N0Zml4IiwgUy50b2tlbi52YWx1ZSwgZXhw
ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAgICB9OworCisg
ICAgICAgIGZ1bmN0aW9uIG1ha2VfdW5hcnkodGFnLCBvcCwgZXhwcikgeworICAgICAgICAgICAg
ICAgIGlmICgob3AgPT0gIisrIiB8fCBvcCA9PSAiLS0iKSAmJiAhaXNfYXNzaWduYWJsZShleHBy
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyb2FrKCJJbnZhbGlkIHVzZSBvZiAiICsgb3Ag
KyAiIG9wZXJhdG9yIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFzKHRhZywgb3AsIGV4cHIp
OworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIGV4cHJfb3AobGVmdCwgbWluX3ByZWMp
IHsKKyAgICAgICAgICAgICAgICB2YXIgb3AgPSBpcygib3BlcmF0b3IiKSA/IFMudG9rZW4udmFs
dWUgOiBudWxsOworICAgICAgICAgICAgICAgIHZhciBwcmVjID0gb3AgIT0gbnVsbCA/IFBSRUNF
REVOQ0Vbb3BdIDogbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAocHJlYyAhPSBudWxsICYmIHBy
ZWMgPiBtaW5fcHJlYykgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHJpZ2h0ID0gZXhwcl9vcChleHByX2F0b20odHJ1ZSksIHBy
ZWMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cHJfb3AoYXMoImJpbmFyeSIs
IG9wLCBsZWZ0LCByaWdodCksIG1pbl9wcmVjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGxlZnQ7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gZXhw
cl9vcHMoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGV4cHJfb3AoZXhwcl9hdG9tKHRydWUp
LCAwKTsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiBtYXliZV9jb25kaXRpb25hbCgp
IHsKKyAgICAgICAgICAgICAgICB2YXIgZXhwciA9IGV4cHJfb3BzKCk7CisgICAgICAgICAgICAg
ICAgaWYgKGlzKCJvcGVyYXRvciIsICI/IikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5l
eHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5ZXMgPSBleHByZXNzaW9uKGZhbHNl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCgiOiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGFzKCJjb25kaXRpb25hbCIsIGV4cHIsIHllcywgZXhwcmVzc2lvbihm
YWxzZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZXhwcjsK
KyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiBpc19hc3NpZ25hYmxlKGV4cHIpIHsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGV4cHJbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAiZG90IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAic3ViIjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICBjYXNlICJuYW1lIjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHByWzFdICE9ICJ0aGlzIjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gbWF5YmVfYXNzaWdu
KCkgeworICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gbWF5YmVfY29uZGl0aW9uYWwoKSwgdmFs
ID0gUy50b2tlbi52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoaXMoIm9wZXJhdG9yIikgJiYg
SE9QKEFTU0lHTk1FTlQsIHZhbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19h
c3NpZ25hYmxlKGxlZnQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzKCJhc3NpZ24iLCBB
U1NJR05NRU5UW3ZhbF0sIGxlZnQsIG1heWJlX2Fzc2lnbigpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNyb2FrKCJJbnZhbGlkIGFzc2lnbm1l
bnQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gZXhwcmVzc2lvbihjb21tYXMpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB2YXIgZXhwciA9IG1heWJlX2Fz
c2lnbigpOworICAgICAgICAgICAgICAgIGlmIChjb21tYXMgJiYgaXMoInB1bmMiLCAiLCIpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYXMoInNlcSIsIGV4cHIsIGV4cHJlc3Npb24oKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAgICB9OworCisgICAgICAgIGZ1
bmN0aW9uIGluX2xvb3AoY29udCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICArK1MuaW5fbG9vcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjb250KCk7CisgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC0tUy5pbl9sb29wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAg
ICAgICByZXR1cm4gYXMoInRvcGxldmVsIiwgKGZ1bmN0aW9uKGEpeworICAgICAgICAgICAgICAg
IHdoaWxlICghaXMoImVvZiIpKQorICAgICAgICAgICAgICAgICAgICAgICAgYS5wdXNoKHN0YXRl
bWVudCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYTsKKyAgICAgICAgfSkoW10pKTsKKwor
fTsKKworLyogLS0tLS1bIFV0aWxpdGllcyBdLS0tLS0gKi8KKworZnVuY3Rpb24gY3VycnkoZikg
eworICAgICAgICB2YXIgYXJncyA9IHNsaWNlKGFyZ3VtZW50cywgMSk7CisgICAgICAgIHJldHVy
biBmdW5jdGlvbigpIHsgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJncy5jb25jYXQoc2xpY2UoYXJn
dW1lbnRzKSkpOyB9OworfTsKKworZnVuY3Rpb24gcHJvZzEocmV0KSB7CisgICAgICAgIGlmIChy
ZXQgaW5zdGFuY2VvZiBGdW5jdGlvbikKKyAgICAgICAgICAgICAgICByZXQgPSByZXQoKTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyAtLW4gPiAwOyArK2kp
CisgICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldKCk7CisgICAgICAgIHJldHVybiByZXQ7Cit9
OworCitmdW5jdGlvbiBhcnJheV90b19oYXNoKGEpIHsKKyAgICAgICAgdmFyIHJldCA9IHt9Owor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAg
ICAgcmV0W2FbaV1dID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHJldDsKK307CisKK2Z1bmN0aW9u
IHNsaWNlKGEsIHN0YXJ0KSB7CisgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2Uu
Y2FsbChhLCBzdGFydCA9PSBudWxsID8gMCA6IHN0YXJ0KTsKK307CisKK2Z1bmN0aW9uIGNoYXJh
Y3RlcnMoc3RyKSB7CisgICAgICAgIHJldHVybiBzdHIuc3BsaXQoIiIpOworfTsKKworZnVuY3Rp
b24gbWVtYmVyKG5hbWUsIGFycmF5KSB7CisgICAgICAgIGZvciAodmFyIGkgPSBhcnJheS5sZW5n
dGg7IC0taSA+PSAwOykKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaV0gPT09IG5hbWUpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworfTsKKworZnVuY3Rpb24gSE9QKG9iaiwgcHJvcCkgeworICAgICAgICByZXR1cm4gT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7Cit9OworCisvKiAtLS0t
LVsgRXhwb3J0cyBdLS0tLS0gKi8KKworZXhwb3J0cy50b2tlbml6ZXIgPSB0b2tlbml6ZXI7Citl
eHBvcnRzLnBhcnNlID0gcGFyc2U7CitleHBvcnRzLnNsaWNlID0gc2xpY2U7CitleHBvcnRzLmN1
cnJ5ID0gY3Vycnk7CitleHBvcnRzLm1lbWJlciA9IG1lbWJlcjsKK2V4cG9ydHMuYXJyYXlfdG9f
aGFzaCA9IGFycmF5X3RvX2hhc2g7CitleHBvcnRzLlBSRUNFREVOQ0UgPSBQUkVDRURFTkNFOwor
ZXhwb3J0cy5LRVlXT1JEU19BVE9NID0gS0VZV09SRFNfQVRPTTsKK2V4cG9ydHMuUkVTRVJWRURf
V09SRFMgPSBSRVNFUlZFRF9XT1JEUzsKK2V4cG9ydHMuS0VZV09SRFMgPSBLRVlXT1JEUzsKK2V4
cG9ydHMuQVRPTUlDX1NUQVJUX1RPS0VOID0gQVRPTUlDX1NUQVJUX1RPS0VOOworZXhwb3J0cy5P
UEVSQVRPUlMgPSBPUEVSQVRPUlM7CitleHBvcnRzLmlzX2FscGhhbnVtZXJpY19jaGFyID0gaXNf
YWxwaGFudW1lcmljX2NoYXI7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvcHJvY2Vzcy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9wcm9jZXNzLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjViOWM5YjEKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvcHJvY2Vzcy5qcwpAQCAtMCwwICsxLDE0
NzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgorCisgIEEgSmF2YVNjcmlwdCB0b2tlbml6ZXIgLyBwYXJz
ZXIgLyBiZWF1dGlmaWVyIC8gY29tcHJlc3Nvci4KKworICBUaGlzIHZlcnNpb24gaXMgc3VpdGFi
bGUgZm9yIE5vZGUuanMuICBXaXRoIG1pbmltYWwgY2hhbmdlcyAodGhlCisgIGV4cG9ydHMgc3R1
ZmYpIGl0IHNob3VsZCB3b3JrIG9uIGFueSBKUyBwbGF0Zm9ybS4KKworICBUaGlzIGZpbGUgaW1w
bGVtZW50cyBzb21lIEFTVCBwcm9jZXNzb3JzLiAgVGhleSB3b3JrIG9uIGRhdGEgYnVpbHQKKyAg
YnkgcGFyc2UtanMuCisKKyAgRXhwb3J0ZWQgZnVuY3Rpb25zOgorCisgICAgLSBhc3RfbWFuZ2xl
KGFzdCwgaW5jbHVkZV90b3BsZXZlbCkgLS0gbWFuZ2xlcyB0aGUKKyAgICAgIHZhcmlhYmxlL2Z1
bmN0aW9uIG5hbWVzIGluIHRoZSBBU1QuICBSZXR1cm5zIGFuIEFTVC4gIFBhc3MgdHJ1ZQorICAg
ICAgYXMgc2Vjb25kIGFyZ3VtZW50IHRvIG1hbmdsZSB0b3BsZXZlbCBuYW1lcyB0b28uCisKKyAg
ICAtIGFzdF9zcXVlZXplKGFzdCkgLS0gZW1wbG95cyB2YXJpb3VzIG9wdGltaXphdGlvbnMgdG8g
bWFrZSB0aGUKKyAgICAgIGZpbmFsIGdlbmVyYXRlZCBjb2RlIGV2ZW4gc21hbGxlci4gIFJldHVy
bnMgYW4gQVNULgorCisgICAgLSBnZW5fY29kZShhc3QsIGJlYXV0aWZ5KSAtLSBnZW5lcmF0ZXMg
SlMgY29kZSBmcm9tIHRoZSBBU1QuICBQYXNzCisgICAgICB0cnVlIChvciBhbiBvYmplY3QsIHNl
ZSB0aGUgY29kZSBmb3Igc29tZSBvcHRpb25zKSBhcyBzZWNvbmQKKyAgICAgIGFyZ3VtZW50IHRv
IGdldCAicHJldHR5IiAoaW5kZW50ZWQpIGNvZGUuCisKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKEMpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBdXRob3I6IE1paGFpIEJhem9uCisgICAgICAgICAgICAg
ICAgICAgICAgICAgPG1paGFpLmJhem9uQGdtYWlsLmNvbT4KKyAgICAgICAgICAgICAgICAgICAg
ICAgaHR0cDovL21paGFpLmJhem9uLm5ldC9ibG9nCisKKyAgRGlzdHJpYnV0ZWQgdW5kZXIgYSBa
TElCIGxpY2Vuc2U6CisKKyAgICBDb3B5cmlnaHQgMjAxMCAoYykgTWloYWkgQmF6b24gPG1paGFp
LmJhem9uQGdtYWlsLmNvbT4KKworICAgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlz
Jywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgICAgd2FycmFudHkuIEluIG5vIGV2
ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueQorICAgIGRhbWFnZXMg
YXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKworICAgIFBlcm1pc3Npb24g
aXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICAgIHB1
cnBvc2UsIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0
IGFuZAorICAgIHJlZGlzdHJpYnV0ZSBpdCBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu
ZyByZXN0cmljdGlvbnM6CisKKyAgICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVz
dCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0CisgICAgICAgbm90IGNsYWltIHRoYXQg
eW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzCisgICAgICAg
c29mdHdhcmUgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdAor
ICAgICAgIGRvY3VtZW50YXRpb24gd291bGQgYmUgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1
aXJlZC4KKworICAgIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBt
YXJrZWQgYXMgc3VjaCwgYW5kIG11c3QKKyAgICAgICBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMg
YmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorCisgICAgMy4gVGhpcyBub3RpY2UgbWF5IG5v
dCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlCisgICAgICAgZGlzdHJpYnV0
aW9uLgorCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZhciBqc3AgPSByZXF1aXJlKCIuL3BhcnNlLWpz
IiksCisgICAgc2xpY2UgPSBqc3Auc2xpY2UsCisgICAgbWVtYmVyID0ganNwLm1lbWJlciwKKyAg
ICBQUkVDRURFTkNFID0ganNwLlBSRUNFREVOQ0UsCisgICAgT1BFUkFUT1JTID0ganNwLk9QRVJB
VE9SUzsKKwordmFyIHN5cyA9IHJlcXVpcmUoL152MFwuWzAxMl0vLnRlc3QocHJvY2Vzcy52ZXJz
aW9uKSA/ICJzeXMiIDogInV0aWwiKTsKKworLyogLS0tLS1bIGhlbHBlciBmb3IgQVNUIHRyYXZl
cnNhbCBdLS0tLS0gKi8KKworZnVuY3Rpb24gYXN0X3dhbGtlcihhc3QpIHsKKyAgICAgICAgZnVu
Y3Rpb24gX3ZhcmRlZnMoZGVmcykgeworICAgICAgICAgICAgICAgIHJldHVybiBkZWZzLm1hcChm
dW5jdGlvbihkZWYpeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBbIGRlZlswXSBd
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZi5sZW5ndGggPiAxKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhWzFdID0gd2FsayhkZWZbMV0pOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH07Cisg
ICAgICAgIHZhciB3YWxrZXJzID0geworICAgICAgICAgICAgICAgICJzdHJpbmciOiBmdW5jdGlv
bihzdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbICJzdHJpbmciLCBzdHIg
XTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJudW0iOiBmdW5jdGlvbihu
dW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbICJudW0iLCBudW0gXTsKKyAg
ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJuYW1lIjogZnVuY3Rpb24obmFtZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgIm5hbWUiLCBuYW1lIF07CisgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAidG9wbGV2ZWwiOiBmdW5jdGlvbihzdGF0
ZW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyAidG9wbGV2ZWwiLCBz
dGF0ZW1lbnRzLm1hcCh3YWxrKSBdOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgImJsb2NrIjogZnVuY3Rpb24oc3RhdGVtZW50cykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIG91dCA9IFsgImJsb2NrIiBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YXRlbWVudHMgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnB1
c2goc3RhdGVtZW50cy5tYXAod2FsaykpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG91dDsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJ2YXIiOiBmdW5jdGlv
bihkZWZzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyAidmFyIiwgX3ZhcmRl
ZnMoZGVmcykgXTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJjb25zdCI6
IGZ1bmN0aW9uKGRlZnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbICJjb25z
dCIsIF92YXJkZWZzKGRlZnMpIF07CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICAidHJ5IjogZnVuY3Rpb24odCwgYywgZikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyeSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHQubWFwKHdhbGspLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjICE9IG51bGwgPyBbIGNbMF0sIGNbMV0ubWFwKHdhbGspIF0gOiBudWxsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmICE9IG51bGwgPyBmLm1hcCh3YWxrKSA6
IG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgIF07CisgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAidGhyb3ciOiBmdW5jdGlvbihleHByKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gWyAidGhyb3ciLCB3YWxrKGV4cHIpIF07CisgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICAibmV3IjogZnVuY3Rpb24oY3RvciwgYXJncykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgIm5ldyIsIHdhbGsoY3RvciksIGFyZ3MubWFwKHdh
bGspIF07CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAic3dpdGNoIjogZnVu
Y3Rpb24oZXhwciwgYm9keSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgInN3
aXRjaCIsIHdhbGsoZXhwciksIGJvZHkubWFwKGZ1bmN0aW9uKGJyYW5jaCl7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbIGJyYW5jaFswXSA/IHdhbGsoYnJhbmNoWzBd
KSA6IG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5j
aFsxXS5tYXAod2FsaykgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pIF07CisgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiYnJlYWsiOiBmdW5jdGlvbihsYWJlbCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgImJyZWFrIiwgbGFiZWwgXTsKKyAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJjb250aW51ZSI6IGZ1bmN0aW9uKGxhYmVs
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyAiY29udGludWUiLCBsYWJlbCBd
OworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgImNvbmRpdGlvbmFsIjogZnVu
Y3Rpb24oY29uZCwgdCwgZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgImNv
bmRpdGlvbmFsIiwgd2Fsayhjb25kKSwgd2Fsayh0KSwgd2FsayhlKSBdOworICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgImFzc2lnbiI6IGZ1bmN0aW9uKG9wLCBsdmFsdWUsIHJ2
YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgImFzc2lnbiIsIG9wLCB3
YWxrKGx2YWx1ZSksIHdhbGsocnZhbHVlKSBdOworICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgImRvdCI6IGZ1bmN0aW9uKGV4cHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBbICJkb3QiLCB3YWxrKGV4cHIpIF0uY29uY2F0KHNsaWNlKGFyZ3VtZW50cywgMSkp
OworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgImNhbGwiOiBmdW5jdGlvbihl
eHByLCBhcmdzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyAiY2FsbCIsIHdh
bGsoZXhwciksIGFyZ3MubWFwKHdhbGspIF07CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICAiZnVuY3Rpb24iOiBmdW5jdGlvbihuYW1lLCBhcmdzLCBib2R5KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gWyAiZnVuY3Rpb24iLCBuYW1lLCBhcmdzLnNsaWNlKCks
IGJvZHkubWFwKHdhbGspIF07CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAi
ZGVmdW4iOiBmdW5jdGlvbihuYW1lLCBhcmdzLCBib2R5KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gWyAiZGVmdW4iLCBuYW1lLCBhcmdzLnNsaWNlKCksIGJvZHkubWFwKHdhbGsp
IF07CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiaWYiOiBmdW5jdGlvbihj
b25kaXRpb25hbCwgdCwgZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgImlm
Iiwgd2Fsayhjb25kaXRpb25hbCksIHdhbGsodCksIHdhbGsoZSkgXTsKKyAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgICJmb3IiOiBmdW5jdGlvbihpbml0LCBjb25kLCBzdGVwLCBi
bG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgImZvciIsIHdhbGsoaW5p
dCksIHdhbGsoY29uZCksIHdhbGsoc3RlcCksIHdhbGsoYmxvY2spIF07CisgICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICAiZm9yLWluIjogZnVuY3Rpb24oaGFzX3Zhciwga2V5LCBo
YXNoLCBibG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgImZvci1pbiIs
IGhhc192YXIsIGtleSwgd2FsayhoYXNoKSwgd2FsayhibG9jaykgXTsKKyAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgICJ3aGlsZSI6IGZ1bmN0aW9uKGNvbmQsIGJsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyAid2hpbGUiLCB3YWxrKGNvbmQpLCB3YWxr
KGJsb2NrKSBdOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgImRvIjogZnVu
Y3Rpb24oY29uZCwgYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbICJk
byIsIHdhbGsoY29uZCksIHdhbGsoYmxvY2spIF07CisgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAicmV0dXJuIjogZnVuY3Rpb24oZXhwcikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFsgInJldHVybiIsIHdhbGsoZXhwcikgXTsKKyAgICAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgICAgICJiaW5hcnkiOiBmdW5jdGlvbihvcCwgbGVmdCwgcmlnaHQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbICJiaW5hcnkiLCBvcCwgd2FsayhsZWZ0
KSwgd2FsayhyaWdodCkgXTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJ1
bmFyeS1wcmVmaXgiOiBmdW5jdGlvbihvcCwgZXhwcikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFsgInVuYXJ5LXByZWZpeCIsIG9wLCB3YWxrKGV4cHIpIF07CisgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAidW5hcnktcG9zdGZpeCI6IGZ1bmN0aW9uKG9wLCBl
eHByKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyAidW5hcnktcG9zdGZpeCIs
IG9wLCB3YWxrKGV4cHIpIF07CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAi
c3ViIjogZnVuY3Rpb24oZXhwciwgc3Vic2NyaXB0KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gWyAic3ViIiwgd2FsayhleHByKSwgd2FsayhzdWJzY3JpcHQpIF07CisgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAib2JqZWN0IjogZnVuY3Rpb24ocHJvcHMpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbICJvYmplY3QiLCBwcm9wcy5tYXAoZnVu
Y3Rpb24ocCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbIHBbMF0s
IHdhbGsocFsxXSkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pIF07CisgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAicmVnZXhwIjogZnVuY3Rpb24ocngsIG1vZHMpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbICJyZWdleHAiLCByeCwgbW9kcyBdOwor
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgImFycmF5IjogZnVuY3Rpb24oZWxl
bWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbICJhcnJheSIsIGVsZW1l
bnRzLm1hcCh3YWxrKSBdOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgInN0
YXQiOiBmdW5jdGlvbihzdGF0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyAi
c3RhdCIsIHdhbGsoc3RhdCkgXTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICJzZXEiOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbICJz
ZXEiIF0uY29uY2F0KHNsaWNlKGFyZ3VtZW50cykubWFwKHdhbGspKTsKKyAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgICJsYWJlbCI6IGZ1bmN0aW9uKG5hbWUsIGJsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyAibGFiZWwiLCBuYW1lLCB3YWxrKGJsb2Nr
KSBdOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgIndpdGgiOiBmdW5jdGlv
bihleHByLCBibG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgIndpdGgi
LCB3YWxrKGV4cHIpLCB3YWxrKGJsb2NrKSBdOworICAgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICAgICAgImF0b20iOiBmdW5jdGlvbihuYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gWyAiYXRvbSIsIG5hbWUgXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgdmFyIHVzZXIgPSB7fTsKKyAgICAgICAgdmFyIHN0YWNrID0gW107CisgICAg
ICAgIGZ1bmN0aW9uIHdhbGsoYXN0KSB7CisgICAgICAgICAgICAgICAgaWYgKGFzdCA9PSBudWxs
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYXN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciB0eXBlID0gYXN0WzBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGdlbiA9IHVzZXJbdHlwZV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2Vu
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBnZW4uYXBwbHko
YXN0LCBhc3Quc2xpY2UoMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cmV0ICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGdlbiA9IHdhbGtlcnNbdHlwZV07CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2VuLmFwcGx5KGFzdCwgYXN0LnNsaWNlKDEpKTsKKyAgICAgICAgICAgICAgICB9IGZpbmFsbHkg
eworICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHdpdGhfd2Fsa2Vycyh3YWxrZXJzLCBj
b250KXsKKyAgICAgICAgICAgICAgICB2YXIgc2F2ZSA9IHt9LCBpOworICAgICAgICAgICAgICAg
IGZvciAoaSBpbiB3YWxrZXJzKSBpZiAoSE9QKHdhbGtlcnMsIGkpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzYXZlW2ldID0gdXNlcltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVz
ZXJbaV0gPSB3YWxrZXJzW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0
cnkgeyByZXR1cm4gY29udCgpOyB9CisgICAgICAgICAgICAgICAgZmluYWxseSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKGkgaW4gc2F2ZSkgaWYgKEhPUChzYXZlLCBpKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNhdmVbaV0pIGRlbGV0ZSB1c2VyW2ld
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHVzZXJbaV0gPSBzYXZlW2ld
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHdhbGs6IHdhbGssCisgICAg
ICAgICAgICAgICAgd2l0aF93YWxrZXJzOiB3aXRoX3dhbGtlcnMsCisgICAgICAgICAgICAgICAg
cGFyZW50OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFj
a1tzdGFjay5sZW5ndGggLSAyXTsgLy8gbGFzdCBvbmUgaXMgY3VycmVudCBub2RlCisgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBzdGFjazogZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2s7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICB9OworfTsKKworLyogLS0tLS1bIFNjb3BlIGFuZCBtYW5nbGluZyBdLS0tLS0gKi8KKworZnVu
Y3Rpb24gU2NvcGUocGFyZW50KSB7CisgICAgICAgIHRoaXMubmFtZXMgPSB7fTsgICAgICAgIC8v
IG5hbWVzIGRlZmluZWQgaW4gdGhpcyBzY29wZQorICAgICAgICB0aGlzLm1hbmdsZWQgPSB7fTsg
ICAgICAvLyBtYW5nbGVkIG5hbWVzIChvcmlnLm5hbWUgPT4gbWFuZ2xlZCkKKyAgICAgICAgdGhp
cy5yZXZfbWFuZ2xlZCA9IHt9OyAgLy8gcmV2ZXJzZSBsb29rdXAgKG1hbmdsZWQgPT4gb3JpZy5u
YW1lKQorICAgICAgICB0aGlzLmNuYW1lID0gLTE7ICAgICAgICAvLyBjdXJyZW50IG1hbmdsZWQg
bmFtZQorICAgICAgICB0aGlzLnJlZnMgPSB7fTsgICAgICAgICAvLyBuYW1lcyByZWZlcmVuY2Vk
IGZyb20gdGhpcyBzY29wZQorICAgICAgICB0aGlzLnVzZXNfd2l0aCA9IGZhbHNlOyAvLyB3aWxs
IGJlY29tZSBUUlVFIGlmIGV2YWwoKSBpcyBkZXRlY3RlZCBpbiB0aGlzIG9yIGFueSBzdWJzY29w
ZXMKKyAgICAgICAgdGhpcy51c2VzX2V2YWwgPSBmYWxzZTsgLy8gd2lsbCBiZWNvbWUgVFJVRSBp
ZiB3aXRoKCkgaXMgZGV0ZWN0ZWQgaW4gdGhpcyBvciBhbnkgc3Vic2NvcGVzCisgICAgICAgIHRo
aXMucGFyZW50ID0gcGFyZW50OyAgIC8vIHBhcmVudCBzY29wZQorICAgICAgICB0aGlzLmNoaWxk
cmVuID0gW107ICAgICAvLyBzdWItc2NvcGVzCisgICAgICAgIGlmIChwYXJlbnQpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLmxldmVsID0gcGFyZW50LmxldmVsICsgMTsKKyAgICAgICAgICAgICAg
ICBwYXJlbnQuY2hpbGRyZW4ucHVzaCh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLmxldmVsID0gMDsKKyAgICAgICAgfQorfTsKKwordmFyIGJhc2U1NCA9IChm
dW5jdGlvbigpeworICAgICAgICB2YXIgRElHSVRTID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3
eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVokXyI7CisgICAgICAgIHJldHVybiBmdW5jdGlv
bihudW0pIHsKKyAgICAgICAgICAgICAgICB2YXIgcmV0ID0gIiI7CisgICAgICAgICAgICAgICAg
ZG8geworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gRElHSVRTLmNoYXJBdChudW0gJSA1
NCkgKyByZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBudW0gPSBNYXRoLmZsb29yKG51bSAv
IDU0KTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlIChudW0gPiAwKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0OworICAgICAgICB9OworfSkoKTsKKworU2NvcGUucHJvdG90eXBlID0gewor
ICAgICAgICBoYXM6IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBz
ID0gdGhpczsgczsgcyA9IHMucGFyZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEhP
UChzLm5hbWVzLCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHM7CisgICAgICAgIH0sCisgICAgICAgIGhhc19tYW5nbGVkOiBmdW5jdGlvbihtbmFtZSkgewor
ICAgICAgICAgICAgICAgIGZvciAodmFyIHMgPSB0aGlzOyBzOyBzID0gcy5wYXJlbnQpCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoSE9QKHMucmV2X21hbmdsZWQsIG1uYW1lKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7CisgICAgICAgIH0sCisgICAgICAg
IHRvSlNPTjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWVzOiB0aGlzLm5hbWVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdXNlc19ldmFsOiB0aGlzLnVzZXNfZXZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVz
ZXNfd2l0aDogdGhpcy51c2VzX3dpdGgKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIG5leHRfbWFuZ2xlZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgLy8g
d2UgbXVzdCBiZSBjYXJlZnVsIHRoYXQgdGhlIG5ldyBtYW5nbGVkIG5hbWU6CisgICAgICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAxLiBkb2Vzbid0IHNoYWRvdyBhIG1hbmdsZWQg
bmFtZSBmcm9tIGEgcGFyZW50CisgICAgICAgICAgICAgICAgLy8gICAgc2NvcGUsIHVubGVzcyB3
ZSBkb24ndCByZWZlcmVuY2UgdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgICAgLy8gICAgbmFt
ZSBmcm9tIHRoaXMgc2NvcGUgT1IgZnJvbSBhbnkgc3ViLXNjb3BlcyEKKyAgICAgICAgICAgICAg
ICAvLyAgICBUaGlzIHdpbGwgZ2V0IHNsb3cuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyAyLiBkb2Vzbid0IHNoYWRvdyBhbiBvcmlnaW5hbCBuYW1lIGZyb20gYSBwYXJl
bnQKKyAgICAgICAgICAgICAgICAvLyAgICBzY29wZSwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIG5h
bWUgaXMgbm90IG1hbmdsZWQKKyAgICAgICAgICAgICAgICAvLyAgICBpbiB0aGUgcGFyZW50IHNj
b3BlIGFuZCB3ZSByZWZlcmVuY2UgdGhhdCBuYW1lCisgICAgICAgICAgICAgICAgLy8gICAgaGVy
ZSBPUiBJTiBBTlkgU1VCU0NPUEVTIQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgLy8gMy4gZG9lc24ndCBzaGFkb3cgYSBuYW1lIHRoYXQgaXMgcmVmZXJlbmNlZCBidXQgbm90
CisgICAgICAgICAgICAgICAgLy8gICAgZGVmaW5lZCAocG9zc2libHkgZ2xvYmFsIGRlZmluZWQg
ZWxzZXdoZXJlKS4KKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgbSA9IGJhc2U1NCgrK3RoaXMuY25hbWUpLCBwcmlvcjsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gY2FzZSAxLgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3Ig
PSB0aGlzLmhhc19tYW5nbGVkKG0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByaW9y
ICYmIHRoaXMucmVmc1twcmlvci5yZXZfbWFuZ2xlZFttXV0gPT09IHByaW9yKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gY2FzZSAyLgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3IgPSB0aGlzLmhhcyht
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmlvciAmJiBwcmlvciAhPT0gdGhpcyAm
JiB0aGlzLnJlZnNbbV0gPT09IHByaW9yICYmICFwcmlvci5oYXNfbWFuZ2xlZChtKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNhc2UgMy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChIT1AodGhpcy5y
ZWZzLCBtKSAmJiB0aGlzLnJlZnNbbV0gPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEkgZ290ICJk
byIgb25jZS4gOi0vCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzX2lkZW50aWZpZXIo
bSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgIGdldF9tYW5nbGVkOiBmdW5jdGlvbihuYW1lLCBuZXdNYW5nbGUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodGhpcy51c2VzX2V2YWwgfHwgdGhpcy51c2VzX3dpdGgpIHJldHVybiBu
YW1lOyAvLyBubyBtYW5nbGUgaWYgZXZhbCBvciB3aXRoIGlzIGluIHVzZQorICAgICAgICAgICAg
ICAgIHZhciBzID0gdGhpcy5oYXMobmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKCFzKSByZXR1
cm4gbmFtZTsgLy8gbm90IGluIHZpc2libGUgc2NvcGUsIG5vIG1hbmdsZQorICAgICAgICAgICAg
ICAgIGlmIChIT1Aocy5tYW5nbGVkLCBuYW1lKSkgcmV0dXJuIHMubWFuZ2xlZFtuYW1lXTsgLy8g
YWxyZWFkeSBtYW5nbGVkIGluIHRoaXMgc2NvcGUKKyAgICAgICAgICAgICAgICBpZiAoIW5ld01h
bmdsZSkgcmV0dXJuIG5hbWU7ICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBmb3VuZCBhbmQg
bm8gbWFuZ2xpbmcgcmVxdWVzdGVkCisKKyAgICAgICAgICAgICAgICB2YXIgbSA9IHMubmV4dF9t
YW5nbGVkKCk7CisgICAgICAgICAgICAgICAgcy5yZXZfbWFuZ2xlZFttXSA9IG5hbWU7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHMubWFuZ2xlZFtuYW1lXSA9IG07CisgICAgICAgIH0sCisgICAg
ICAgIGRlZmluZTogZnVuY3Rpb24obmFtZSkgeworICAgICAgICAgICAgICAgIGlmIChuYW1lICE9
IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lc1tuYW1lXSA9
IG5hbWU7CisgICAgICAgIH0KK307CisKK2Z1bmN0aW9uIGFzdF9hZGRfc2NvcGUoYXN0KSB7CisK
KyAgICAgICAgdmFyIGN1cnJlbnRfc2NvcGUgPSBudWxsOworICAgICAgICB2YXIgdyA9IGFzdF93
YWxrZXIoKSwgd2FsayA9IHcud2FsazsKKyAgICAgICAgdmFyIGhhdmluZ19ldmFsID0gW107CisK
KyAgICAgICAgZnVuY3Rpb24gd2l0aF9uZXdfc2NvcGUoY29udCkgeworICAgICAgICAgICAgICAg
IGN1cnJlbnRfc2NvcGUgPSBuZXcgU2NvcGUoY3VycmVudF9zY29wZSk7CisgICAgICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBjdXJyZW50X3Njb3Bl
LmJvZHkgPSBjb250KCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQuc2NvcGUgPSBjdXJy
ZW50X3Njb3BlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50X3Njb3BlID0gY3VycmVudF9zY29wZS5wYXJlbnQ7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIGRlZmluZShuYW1lKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRfc2NvcGUuZGVmaW5lKG5hbWUpOworICAgICAgICB9
OworCisgICAgICAgIGZ1bmN0aW9uIHJlZmVyZW5jZShuYW1lKSB7CisgICAgICAgICAgICAgICAg
Y3VycmVudF9zY29wZS5yZWZzW25hbWVdID0gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBm
dW5jdGlvbiBfbGFtYmRhKG5hbWUsIGFyZ3MsIGJvZHkpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gWyB0aGlzWzBdLCBkZWZpbmUobmFtZSksIGFyZ3MsIHdpdGhfbmV3X3Njb3BlKGZ1bmN0aW9u
KCl7CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLm1hcChkZWZpbmUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGJvZHkubWFwKHdhbGspOworICAgICAgICAgICAgICAgIH0p
XTsKKyAgICAgICAgfTsKKworICAgICAgICByZXR1cm4gd2l0aF9uZXdfc2NvcGUoZnVuY3Rpb24o
KXsKKyAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIEFTVAorICAgICAgICAgICAgICAgIHZhciBy
ZXQgPSB3LndpdGhfd2Fsa2Vycyh7CisgICAgICAgICAgICAgICAgICAgICAgICAiZnVuY3Rpb24i
OiBfbGFtYmRhLAorICAgICAgICAgICAgICAgICAgICAgICAgImRlZnVuIjogX2xhbWJkYSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIjogZnVuY3Rpb24oZXhwciwgYmxvY2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcyA9IGN1cnJlbnRfc2NvcGU7
IHM7IHMgPSBzLnBhcmVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzLnVzZXNfd2l0aCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgInZhciI6IGZ1bmN0aW9uKGRlZnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmcy5tYXAoZnVuY3Rpb24oZCl7IGRlZmluZShkWzBdKSB9KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAiY29u
c3QiOiBmdW5jdGlvbihkZWZzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZnMubWFwKGZ1bmN0aW9uKGQpeyBkZWZpbmUoZFswXSkgfSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgInRyeSI6IGZ1bmN0aW9uKHQsIGMsIGYp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT0gbnVsbCkgcmV0dXJu
IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJ5IiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1hcCh3YWxrKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIGRlZmluZShjWzBdKSwgY1sxXS5tYXAo
d2FsaykgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmICE9IG51
bGwgPyBmLm1hcCh3YWxrKSA6IG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAi
bmFtZSI6IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5hbWUgPT0gImV2YWwiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhhdmluZ19ldmFsLnB1c2goY3VycmVudF9zY29wZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlZmVyZW5jZShuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAgICAgICAgICAgICAiZm9yLWluIjogZnVuY3Rpb24oaGFzX3ZhciwgbmFt
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzX3ZhcikgZGVmaW5l
KG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJlZmVyZW5jZShu
YW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LCBmdW5j
dGlvbigpeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdhbGsoYXN0KTsKKyAgICAg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIC8vIHRoZSByZWFzb24gd2h5IHdlIG5l
ZWQgYW4gYWRkaXRpb25hbCBwYXNzIGhlcmUgaXMKKyAgICAgICAgICAgICAgICAvLyB0aGF0IG5h
bWVzIGNhbiBiZSB1c2VkIHByaW9yIHRvIHRoZWlyIGRlZmluaXRpb24uCisKKyAgICAgICAgICAg
ICAgICAvLyBzY29wZXMgd2hlcmUgZXZhbCB3YXMgZGV0ZWN0ZWQgYW5kIHRoZWlyIHBhcmVudHMK
KyAgICAgICAgICAgICAgICAvLyBhcmUgbWFya2VkIHdpdGggdXNlc19ldmFsLCB1bmxlc3MgdGhl
eSBkZWZpbmUgdGhlCisgICAgICAgICAgICAgICAgLy8gImV2YWwiIG5hbWUuCisgICAgICAgICAg
ICAgICAgaGF2aW5nX2V2YWwubWFwKGZ1bmN0aW9uKHNjb3BlKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghc2NvcGUuaGFzKCJldmFsIikpIHdoaWxlIChzY29wZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY29wZS51c2VzX2V2YWwgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY29wZSA9IHNjb3BlLnBhcmVudDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIC8v
IGZvciByZWZlcmVuY2VkIG5hbWVzIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBrbm93CisgICAgICAg
ICAgICAgICAgLy8gdGhlaXIgb3JpZ2luIHNjb3BlLiAgY3VycmVudF9zY29wZSBoZXJlIGlzIHRo
ZQorICAgICAgICAgICAgICAgIC8vIHRvcGxldmVsIG9uZS4KKyAgICAgICAgICAgICAgICBmdW5j
dGlvbiBmaXhyZWZzKHNjb3BlLCBpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBj
aGlsZHJlbiBmaXJzdDsgb3JkZXIgc2hvdWxkbid0IG1hdHRlcgorICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpID0gc2NvcGUuY2hpbGRyZW4ubGVuZ3RoOyAtLWkgPj0gMDspCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpeHJlZnMoc2NvcGUuY2hpbGRyZW5baV0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpIGluIHNjb3BlLnJlZnMpIGlmIChIT1Aoc2NvcGUu
cmVmcywgaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluZCBvcmln
aW4gc2NvcGUgYW5kIHByb3BhZ2F0ZSB0aGUgcmVmZXJlbmNlIHRvIG9yaWdpbgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBvcmlnaW4gPSBzY29wZS5oYXMoaSksIHMg
PSBzY29wZTsgczsgcyA9IHMucGFyZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcy5yZWZzW2ldID0gb3JpZ2luOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzID09PSBvcmlnaW4pIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICBmaXhyZWZzKGN1cnJlbnRfc2NvcGUpOworCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfSk7CisKK307CisKKy8qIC0tLS0tWyBt
YW5nbGUgbmFtZXMgXS0tLS0tICovCisKK2Z1bmN0aW9uIGFzdF9tYW5nbGUoYXN0LCBkb190b3Bs
ZXZlbCkgeworICAgICAgICB2YXIgdyA9IGFzdF93YWxrZXIoKSwgd2FsayA9IHcud2Fsaywgc2Nv
cGU7CisKKyAgICAgICAgZnVuY3Rpb24gZ2V0X21hbmdsZWQobmFtZSwgbmV3TWFuZ2xlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFkb190b3BsZXZlbCAmJiAhc2NvcGUucGFyZW50KSByZXR1cm4g
bmFtZTsgLy8gZG9uJ3QgbWFuZ2xlIHRvcGxldmVsCisgICAgICAgICAgICAgICAgcmV0dXJuIHNj
b3BlLmdldF9tYW5nbGVkKG5hbWUsIG5ld01hbmdsZSk7CisgICAgICAgIH07CisKKyAgICAgICAg
ZnVuY3Rpb24gX2xhbWJkYShuYW1lLCBhcmdzLCBib2R5KSB7CisgICAgICAgICAgICAgICAgaWYg
KG5hbWUpIG5hbWUgPSBnZXRfbWFuZ2xlZChuYW1lKTsKKyAgICAgICAgICAgICAgICBib2R5ID0g
d2l0aF9zY29wZShib2R5LnNjb3BlLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAg
ICAgYXJncyA9IGFyZ3MubWFwKGZ1bmN0aW9uKG5hbWUpeyByZXR1cm4gZ2V0X21hbmdsZWQobmFt
ZSkgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9keS5tYXAod2Fsayk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFsgdGhpc1swXSwgbmFt
ZSwgYXJncywgYm9keSBdOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHdpdGhfc2Nv
cGUocywgY29udCkgeworICAgICAgICAgICAgICAgIHZhciBfc2NvcGUgPSBzY29wZTsKKyAgICAg
ICAgICAgICAgICBzY29wZSA9IHM7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBzLm5h
bWVzKSBpZiAoSE9QKHMubmFtZXMsIGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnZXRf
bWFuZ2xlZChpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdHJ5
IHsgdmFyIHJldCA9IGNvbnQoKTsgcmV0LnNjb3BlID0gczsgcmV0dXJuIHJldDsgfQorICAgICAg
ICAgICAgICAgIGZpbmFsbHkgeyBzY29wZSA9IF9zY29wZTsgfTsKKyAgICAgICAgfTsKKworICAg
ICAgICBmdW5jdGlvbiBfdmFyZGVmcyhkZWZzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRl
ZnMubWFwKGZ1bmN0aW9uKGQpeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgZ2V0
X21hbmdsZWQoZFswXSksIHdhbGsoZFsxXSkgXTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfTsKKworICAgICAgICByZXR1cm4gdy53aXRoX3dhbGtlcnMoeworICAgICAgICAgICAgICAg
ICJmdW5jdGlvbiI6IF9sYW1iZGEsCisgICAgICAgICAgICAgICAgImRlZnVuIjogX2xhbWJkYSwK
KyAgICAgICAgICAgICAgICAidmFyIjogZnVuY3Rpb24oZGVmcykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFsgInZhciIsIF92YXJkZWZzKGRlZnMpIF07CisgICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICAiY29uc3QiOiBmdW5jdGlvbihkZWZzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gWyAiY29uc3QiLCBfdmFyZGVmcyhkZWZzKSBdOworICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgIm5hbWUiOiBmdW5jdGlvbihuYW1lKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyAibmFtZSIsIGdldF9tYW5nbGVkKG5h
bWUpIF07CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAidHJ5IjogZnVuY3Rp
b24odCwgYywgZikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgInRyeSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1hcCh3YWxrKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGMgIT0gbnVsbCA/IFsgZ2V0X21hbmdsZWQoY1swXSksIGNb
MV0ubWFwKHdhbGspIF0gOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZiAhPSBudWxsID8gZi5tYXAod2FsaykgOiBudWxsIF07CisgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAidG9wbGV2ZWwiOiBmdW5jdGlvbihib2R5KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gd2l0aF9zY29wZSh0aGlzLnNjb3BlLCBmdW5jdGlvbigpeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyAidG9wbGV2ZWwiLCBib2R5Lm1h
cCh3YWxrKSBdOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICAiZm9yLWluIjogZnVuY3Rpb24oaGFzX3ZhciwgbmFtZSwgb2Jq
LCBzdGF0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyAiZm9yLWluIiwgaGFz
X3ZhciwgZ2V0X21hbmdsZWQobmFtZSksIHdhbGsob2JqKSwgd2FsayhzdGF0KSBdOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHdhbGsoYXN0X2FkZF9zY29wZShhc3QpKTsKKyAgICAgICAgfSk7Cit9OworCisvKiAtLS0t
LVsKKyAgIC0gY29tcHJlc3MgZm9vWyJiYXIiXSBpbnRvIGZvby5iYXIsCisgICAtIHJlbW92ZSBi
bG9jayBicmFja2V0cyB7fSB3aGVyZSBwb3NzaWJsZQorICAgLSBqb2luIGNvbnNlY3V0aXZlIHZh
ciBkZWNsYXJhdGlvbnMKKyAgIC0gdmFyaW91cyBvcHRpbWl6YXRpb25zIGZvciBJRnM6CisgICAg
IC0gaWYgKGNvbmQpIGZvbygpOyBlbHNlIGJhcigpOyAgPT0+ICBjb25kP2ZvbygpOmJhcigpOwor
ICAgICAtIGlmIChjb25kKSBmb28oKTsgID09PiAgY29uZCYmZm9vKCk7CisgICAgIC0gaWYgKGZv
bykgcmV0dXJuIGJhcigpOyBlbHNlIHJldHVybiBiYXooKTsgID09PiByZXR1cm4gZm9vP2Jhcigp
OmJheigpOyAvLyBhbHNvIGZvciB0aHJvdworICAgICAtIGlmIChmb28pIHJldHVybiBiYXIoKTsg
ZWxzZSBzb21ldGhpbmcoKTsgID09PiB7aWYoZm9vKXJldHVybiBiYXIoKTtzb21ldGhpbmcoKX0K
KyAgIF0tLS0tLSAqLworCitmdW5jdGlvbiB3YXJuKG1zZykgeworICAgICAgICBzeXMuZGVidWco
bXNnKTsKK307CisKK2Z1bmN0aW9uIGJlc3Rfb2YoYXN0MSwgYXN0MikgeworICAgICAgICByZXR1
cm4gZ2VuX2NvZGUoYXN0MSkubGVuZ3RoID4gZ2VuX2NvZGUoYXN0MlswXSA9PSAic3RhdCIgPyBh
c3QyWzFdIDogYXN0MikubGVuZ3RoID8gYXN0MiA6IGFzdDE7Cit9OworCitmdW5jdGlvbiBsYXN0
X3N0YXQoYikgeworICAgICAgICBpZiAoYlswXSA9PSAiYmxvY2siICYmIGJbMV0gJiYgYlsxXS5s
ZW5ndGggPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiBiWzFdW2JbMV0ubGVuZ3RoIC0gMV07
CisgICAgICAgIHJldHVybiBiOworfQorCitmdW5jdGlvbiBhYm9ydHModCkgeworICAgICAgICBp
ZiAodCkgeworICAgICAgICAgICAgICAgIHQgPSBsYXN0X3N0YXQodCk7CisgICAgICAgICAgICAg
ICAgaWYgKHRbMF0gPT0gInJldHVybiIgfHwgdFswXSA9PSAiYnJlYWsiIHx8IHRbMF0gPT0gImNv
bnRpbnVlIiB8fCB0WzBdID09ICJ0aHJvdyIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorfTsKKworZnVuY3Rpb24gbmVnYXRlKGMpIHsKKyAgICAgICAg
dmFyIG5vdF9jID0gWyAidW5hcnktcHJlZml4IiwgIiEiLCBjIF07CisgICAgICAgIHN3aXRjaCAo
Y1swXSkgeworICAgICAgICAgICAgY2FzZSAidW5hcnktcHJlZml4IjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY1sxXSA9PSAiISIgPyBjWzJdIDogYzsKKyAgICAgICAgICAgIGNhc2UgImF0b20i
OgorICAgICAgICAgICAgICAgIHN3aXRjaCAoY1sxXSkgeworICAgICAgICAgICAgICAgICAgICBj
YXNlICJmYWxzZSI6IHJldHVybiBbICJudW0iLCAwIF07CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgInRydWUiOiByZXR1cm4gWyAibnVtIiwgMSBdOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgImJpbmFyeSI6CisgICAgICAgICAg
ICAgICAgdmFyIG9wID0gY1sxXSwgbGVmdCA9IGNbMl0sIHJpZ2h0ID0gY1szXTsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIjw9IjogcmV0
dXJuIFsgImJpbmFyeSIsICI+IiwgbGVmdCwgcmlnaHQgXTsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAiPCI6IHJldHVybiBbICJiaW5hcnkiLCAiPj0iLCBsZWZ0LCByaWdodCBdOworICAgICAg
ICAgICAgICAgICAgICBjYXNlICI+PSI6IHJldHVybiBbICJiaW5hcnkiLCAiPCIsIGxlZnQsIHJp
Z2h0IF07CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIj4iOiByZXR1cm4gWyAiYmluYXJ5Iiwg
Ijw9IiwgbGVmdCwgcmlnaHQgXTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiPT0iOiByZXR1
cm4gWyAiYmluYXJ5IiwgIiE9IiwgbGVmdCwgcmlnaHQgXTsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAiIT0iOiByZXR1cm4gWyAiYmluYXJ5IiwgIj09IiwgbGVmdCwgcmlnaHQgXTsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAiPT09IjogcmV0dXJuIFsgImJpbmFyeSIsICIhPT0iLCBsZWZ0
LCByaWdodCBdOworICAgICAgICAgICAgICAgICAgICBjYXNlICIhPT0iOiByZXR1cm4gWyAiYmlu
YXJ5IiwgIj09PSIsIGxlZnQsIHJpZ2h0IF07CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiYm
IjogcmV0dXJuIGJlc3Rfb2Yobm90X2MsIFsgImJpbmFyeSIsICJ8fCIsIG5lZ2F0ZShsZWZ0KSwg
bmVnYXRlKHJpZ2h0KSBdKTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAifHwiOiByZXR1cm4g
YmVzdF9vZihub3RfYywgWyAiYmluYXJ5IiwgIiYmIiwgbmVnYXRlKGxlZnQpLCBuZWdhdGUocmln
aHQpIF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbm90X2M7Cit9OworCitmdW5jdGlvbiBtYWtlX2NvbmRpdGlv
bmFsKGMsIHQsIGUpIHsKKyAgICAgICAgaWYgKGNbMF0gPT0gInVuYXJ5LXByZWZpeCIgJiYgY1sx
XSA9PSAiISIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZSA/IFsgImNvbmRpdGlvbmFsIiwg
Y1syXSwgZSwgdCBdIDogWyAiYmluYXJ5IiwgInx8IiwgY1syXSwgdCBdOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHJldHVybiBlID8gWyAiY29uZGl0aW9uYWwiLCBjLCB0LCBl
IF0gOiBbICJiaW5hcnkiLCAiJiYiLCBjLCB0IF07CisgICAgICAgIH0KK307CisKK2Z1bmN0aW9u
IGVtcHR5KGIpIHsKKyAgICAgICAgcmV0dXJuICFiIHx8IChiWzBdID09ICJibG9jayIgJiYgKCFi
WzFdIHx8IGJbMV0ubGVuZ3RoID09IDApKTsKK307CisKK2Z1bmN0aW9uIGFzdF9zcXVlZXplKGFz
dCwgb3B0aW9ucykgeworICAgICAgICBvcHRpb25zID0gZGVmYXVsdHMob3B0aW9ucywgeworICAg
ICAgICAgICAgICAgIG1ha2Vfc2VxcyAgIDogdHJ1ZSwKKyAgICAgICAgICAgICAgICBkZWFkX2Nv
ZGUgICA6IHRydWUsCisgICAgICAgICAgICAgICAgbm9fd2FybmluZ3MgOiBmYWxzZSwKKyAgICAg
ICAgICAgICAgICBleHRyYSAgICAgICA6IGZhbHNlCisgICAgICAgIH0pOworCisgICAgICAgIHZh
ciB3ID0gYXN0X3dhbGtlcigpLCB3YWxrID0gdy53YWxrOworCisgICAgICAgIGZ1bmN0aW9uIGlz
X2NvbnN0YW50KG5vZGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZVswXSA9PSAic3Ry
aW5nIiB8fCBub2RlWzBdID09ICJudW0iOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9u
IGZpbmRfZmlyc3RfZXhlY3V0ZShub2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlWzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJudW0iOgor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAic3RyaW5nIjoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgIm5hbWUiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImNhbGwiOgorICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAiY29uZGl0aW9uYWwiOgorICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAiZm9yIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImlmIjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgIm5ldyI6CisgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICJyZXR1cm4iOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAic3RhdCI6CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICJzd2l0Y2giOgorICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAidGhyb3ciOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmluZF9maXJzdF9leGVjdXRlKG5vZGVbMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAiYmluYXJ5IjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRf
Zmlyc3RfZXhlY3V0ZShub2RlWzJdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImFz
c2lnbiI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlWzFdID09PSB0
cnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5k
X2ZpcnN0X2V4ZWN1dGUobm9kZVszXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAidmFyIjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVbMV1bMF0ubGVuZ3RoID4gMSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluZF9maXJzdF9leGVjdXRl
KG5vZGVbMV1bMF1bMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBmaW5kX2Fzc2lnbl9yZWN1cnNpdmUocCwgdikgeworICAg
ICAgICAgICAgICAgIGlmIChwWzBdID09ICJhc3NpZ24iICYmIHBbMV0gIT0gdHJ1ZSB8fCBwWzBd
ID09ICJ1bmFyeS1wcmVmaXgiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocFsyXVsw
XSA9PSAibmFtZSIgJiYgdlswXSA9PSAibmFtZSIgJiYgcFsyXVsxXSA9PSB2WzFdKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAocFswXSAhPSAiYXNzaWduIiB8fCBwWzFdICE9PSB0cnVlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgaWYgKChpc19jb25zdGFu
dChwWzNdKSAmJiBwWzNdWzBdID09IHZbMF0gJiYgcFszXVsxXSA9PSB2WzFdKSB8fAorICAgICAg
ICAgICAgICAgICAgICAocFszXVswXSA9PSAibmFtZSIgJiYgdlswXSA9PSAibmFtZSIgJiYgcFsz
XVsxXSA9PSB2WzFdKSB8fAorICAgICAgICAgICAgICAgICAgICAocFsyXVswXSA9PSAibmFtZSIg
JiYgdlswXSA9PSAibmFtZSIgJiYgcFsyXVsxXSA9PSB2WzFdKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRfYXNzaWdu
X3JlY3Vyc2l2ZShwWzNdLCB2KTsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlvbiBybWJs
b2NrKGJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrICE9IG51bGwgJiYgYmxvY2tb
MF0gPT0gImJsb2NrIiAmJiBibG9ja1sxXSAmJiBibG9ja1sxXS5sZW5ndGggPT0gMSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrID0gYmxvY2tbMV1bMF07CisgICAgICAgICAgICAgICAg
cmV0dXJuIGJsb2NrOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIGNsb25lKG9iaikg
eworICAgICAgICAgICAgICAgIGlmIChvYmogJiYgb2JqLmNvbnN0cnVjdG9yID09IEFycmF5KQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iai5tYXAoY2xvbmUpOworICAgICAgICAg
ICAgICAgIHJldHVybiBvYmo7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gbWFrZV9z
ZXFfdG9fc3RhdGVtZW50cyhub2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVbMF0gIT0g
InNlcSIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZVswXSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ2YXIiOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICJjb25zdCI6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFsgbm9kZSBdOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBbIFsgInN0YXQiLCBub2RlIF0gXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgcmV0ID0gW107CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBub2RlLmxlbmd0aDsgaSsrKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0LnB1c2guYXBwbHkocmV0LCBtYWtlX3NlcV90b19zdGF0ZW1l
bnRzKG5vZGVbaV0pKTsKKworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH07
CisKKyAgICAgICAgZnVuY3Rpb24gX2xhbWJkYShuYW1lLCBhcmdzLCBib2R5KSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFsgdGhpc1swXSwgbmFtZSwgYXJncywgdGlnaHRlbihib2R5Lm1hcCh3
YWxrKSwgImxhbWJkYSIpIF07CisgICAgICAgIH07CisKKyAgICAgICAgLy8gd2UgZ2V0IGhlcmUg
Zm9yIGJsb2NrcyB0aGF0IGhhdmUgYmVlbiBhbHJlYWR5IHRyYW5zZm9ybWVkLgorICAgICAgICAv
LyB0aGlzIGZ1bmN0aW9uIGRvZXMgYSBmZXcgdGhpbmdzOgorICAgICAgICAvLyAxLiBkaXNjYXJk
IHVzZWxlc3MgYmxvY2tzCisgICAgICAgIC8vIDIuIGpvaW4gY29uc2VjdXRpdmUgdmFyIGRlY2xh
cmF0aW9ucworICAgICAgICAvLyAzLiByZW1vdmUgb2J2aW91c2x5IGRlYWQgY29kZQorICAgICAg
ICAvLyA0LiB0cmFuc2Zvcm0gY29uc2VjdXRpdmUgc3RhdGVtZW50cyB1c2luZyB0aGUgY29tbWEg
b3BlcmF0b3IKKyAgICAgICAgLy8gNS4gaWYgYmxvY2tfdHlwZSA9PSAibGFtYmRhIiBhbmQgaXQg
ZGV0ZWN0cyBjb25zdHJ1Y3RzIGxpa2UgaWYoZm9vKSByZXR1cm4gLi4uIC0gcmV3cml0ZSBsaWtl
IGlmICghZm9vKSB7IC4uLiB9CisgICAgICAgIGZ1bmN0aW9uIHRpZ2h0ZW4oc3RhdGVtZW50cywg
YmxvY2tfdHlwZSkgeworICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzLnJl
ZHVjZShmdW5jdGlvbihhLCBzdGF0KXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0
WzBdID09ICJibG9jayIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YXRbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLnB1c2gu
YXBwbHkoYSwgc3RhdFsxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGEucHVzaChzdGF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhOworICAgICAgICAgICAgICAgIH0sIFtdKTsKKworICAg
ICAgICAgICAgICAgIGlmIChvcHRpb25zLmV4dHJhKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBEZXRpZ2h0ZW5pbmcgdGhpbmdzLiBXZSBkbyB0aGlzIGJlY2F1c2UgdGhlbiB3ZSBjYW4g
YXNzdW1lIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZW1lbnRzIGFy
ZSBzdHJ1Y3R1cmVkIGluIGEgc3BlY2lmaWMgd2F5LgorICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGVtZW50cyA9IChmdW5jdGlvbihhLCBwcmV2KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlbWVudHMuZm9yRWFjaChmdW5jdGlvbihjdXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGN1clswXSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJmb3IiOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1clsxXSAhPSBudWxs
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGEucHVzaC5hcHBseShhLCBtYWtlX3NlcV90b19zdGF0ZW1lbnRzKGN1clsxXSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJb
MV0gPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5w
dXNoKGN1cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAic3RhdCI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgc3RhdHMgPSBtYWtlX3NlcV90b19zdGF0ZW1lbnRzKGN1clsxXSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGZ1bmN0
aW9uKHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNbMV1bMF0gPT0gInVuYXJ5LXBvc3RmaXgiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbMV1bMF0g
PSAidW5hcnktcHJlZml4IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYS5wdXNoLmFwcGx5KGEsIHN0YXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYS5wdXNoKGN1cik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9KShbXSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgPSAo
ZnVuY3Rpb24oYSwgcHJldikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oY3VyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCEocHJldiAmJiBwcmV2WzBdID09ICJzdGF0IikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEucHVzaChjdXIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGN1
cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHByZXZbMV07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBmaW5kX2ZpcnN0X2V4ZWN1
dGUoY3VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAm
JiBmaW5kX2Fzc2lnbl9yZWN1cnNpdmUocCwgYykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGRfY3VyID0gY2xvbmUoY3VyKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuc3BsaWNlKDAsIGMu
bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGMucHVzaC5hcHBseShjLCBwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB0bXBfY3VyID0gYmVzdF9vZihjdXIsIFsgInRvcGxldmVsIiwgWyBw
cmV2LCBvbGRfY3VyIF0gXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodG1wX2N1ciA9PSBjdXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVthLmxlbmd0aCAtMV0gPSBjdXI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
dXIgPSBvbGRfY3VyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhLnB1c2goY3VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYS5wdXNoKGN1cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBjdXI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pKFtdKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnRzID0gKGZ1bmN0
aW9uKGEsIHByZXYpeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50cy5mb3JFYWNo
KGZ1bmN0aW9uKGN1cil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2
ICYmICgoY3VyWzBdID09ICJ2YXIiICYmIHByZXZbMF0gPT0gInZhciIpIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VyWzBdID09ICJjb25zdCIgJiYg
cHJldlswXSA9PSAiY29uc3QiKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmV2WzFdID0gcHJldlsxXS5jb25jYXQoY3VyWzFdKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhLnB1c2goY3VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmV2ID0gY3VyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBhOworICAgICAgICAgICAgICAgIH0pKFtdKTsKKworICAgICAgICAgICAgICAgIGlmIChvcHRp
b25zLmRlYWRfY29kZSkgc3RhdGVtZW50cyA9IChmdW5jdGlvbihhLCBoYXNfcXVpdCl7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oc3QpeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzX3F1aXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVtYmVyKHN0WzBdLCBbICJmdW5jdGlv
biIsICJkZWZ1biIgLCAidmFyIiwgImNvbnN0IiBdKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5wdXNoKHN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoIW9wdGlvbnMubm9fd2FybmluZ3MpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuKCJSZW1vdmluZyB1bnJlYWNoYWJs
ZSBjb2RlOiAiICsgZ2VuX2NvZGUoc3QsIHRydWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLnB1c2goc3QpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZW1iZXIoc3RbMF0sIFsgInJldHVy
biIsICJ0aHJvdyIsICJicmVhayIsICJjb250aW51ZSIgXSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfcXVpdCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgICAgICAgICAgfSkoW10pOwor
CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubWFrZV9zZXFzKSBzdGF0ZW1lbnRzID0gKGZ1
bmN0aW9uKGEsIHByZXYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudHMuZm9y
RWFjaChmdW5jdGlvbihjdXIpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cHJldiAmJiBwcmV2WzBdID09ICJzdGF0IiAmJiBjdXJbMF0gPT0gInN0YXQiKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlsxXSA9IFsgInNlcSIsIHByZXZb
MV0sIGN1clsxXSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEucHVzaChjdXIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBjdXI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgICAgICAgICAgfSkoW10p
OworCisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXh0cmEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlbWVudHMgPSAoZnVuY3Rpb24oYSwgcHJldil7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudHMuZm9yRWFjaChmdW5jdGlvbihjdXIpeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXBsYWNlZCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICYmIGN1
clswXSA9PSAiZm9yIiAmJiBjdXJbMV0gPT0gbnVsbCAmJiAocHJldlswXSA9PSAidmFyIiB8fCBw
cmV2WzBdID09ICJjb25zdCIgfHwgcHJldlswXSA9PSAic3RhdCIpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJbMV0gPSBwcmV2OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVthLmxlbmd0aCAtIDFd
ID0gY3VyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLnB1c2go
Y3VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGN1cjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBhOworICAgICAgICAgICAgICAgICAgICAgICAgfSkoW10pOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChibG9ja190eXBlID09ICJsYW1iZGEiKSBzdGF0
ZW1lbnRzID0gKGZ1bmN0aW9uKGksIGEsIHN0YXQpeworICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKGkgPCBzdGF0ZW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ID0gc3RhdGVtZW50c1tpKytdOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhdFswXSA9PSAiaWYiICYmICFzdGF0WzNdKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRbMl1bMF0gPT0gInJldHVybiIgJiYg
c3RhdFsyXVsxXSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhLnB1c2gobWFrZV9pZihuZWdhdGUoc3RhdFsxXSksIFsgImJsb2NrIiwg
c3RhdGVtZW50cy5zbGljZShpKSBdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxh
c3QgPSBsYXN0X3N0YXQoc3RhdFsyXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGxhc3RbMF0gPT0gInJldHVybiIgJiYgbGFzdFsxXSA9PSBudWxsKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLnB1c2gobWFr
ZV9pZihzdGF0WzFdLCBbICJibG9jayIsIHN0YXRbMl1bMV0uc2xpY2UoMCwgLTEpIF0sIFsgImJs
b2NrIiwgc3RhdGVtZW50cy5zbGljZShpKSBdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5wdXNoKHN0YXQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgICAg
ICAgICAgfSkoMCwgW10pOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlbWVudHM7Cisg
ICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gbWFrZV9pZihjLCB0LCBlKSB7CisgICAgICAg
ICAgICAgICAgYyA9IHdhbGsoYyk7CisgICAgICAgICAgICAgICAgdCA9IHdhbGsodCk7CisgICAg
ICAgICAgICAgICAgZSA9IHdhbGsoZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoZW1wdHkodCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBuZWdhdGUoYyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0ID0gZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBudWxsOworICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW1wdHkoZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGUgPSBudWxsOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpZiB3ZSBoYXZlIGJvdGggZWxzZSBhbmQgdGhlbiwgbWF5YmUgaXQgbWFrZXMg
c2Vuc2UgdG8gc3dpdGNoIHRoZW0/CisgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24o
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBnZW5fY29kZShjKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBuZWdhdGUoYyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gZ2VuX2NvZGUobik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiLmxlbmd0aCA8IGEubGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcCA9IHQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRtcDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjID0gbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfSkoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKGVtcHR5KGUpICYmIGVtcHR5KHQpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFsgInN0YXQiLCBjIF07CisgICAgICAgICAgICAgICAgdmFyIHJldCA9IFsg
ImlmIiwgYywgdCwgZSBdOworICAgICAgICAgICAgICAgIGlmICh0WzBdID09ICJzdGF0Iikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGVbMF0gPT0gInN0YXQiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gYmVzdF9vZihyZXQsIFsgInN0YXQiLCBtYWtlX2NvbmRpdGlv
bmFsKGMsIHRbMV0sIGVbMV0pIF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gYmVzdF9vZihyZXQsIFsg
InN0YXQiLCBtYWtlX2NvbmRpdGlvbmFsKGMsIHRbMV0pIF0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlICYm
IHRbMF0gPT0gZVswXSAmJiAodFswXSA9PSAicmV0dXJuIiB8fCB0WzBdID09ICJ0aHJvdyIpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBiZXN0X29mKHJldCwgWyB0WzBdLCBtYWtl
X2NvbmRpdGlvbmFsKGMsIHRbMV0sIGVbMV0gKSBdKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoZSAmJiBhYm9ydHModCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldCA9IFsgWyAiaWYiLCBjLCB0IF0gXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChlWzBdID09ICJibG9jayIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGVbMV0pIHJldCA9IHJldC5jb25jYXQoZVsxXSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0LnB1c2goZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXQgPSB3YWxrKFsgImJsb2NrIiwgcmV0IF0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0ICYmIGFib3J0cyhlKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gWyBbICJpZiIsIG5lZ2F0ZShjKSwgZSBdIF07
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodFswXSA9PSAiYmxvY2siKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0WzFdKSByZXQgPSByZXQuY29uY2F0KHRbMV0p
OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0LnB1c2godCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXQgPSB3YWxrKFsgImJsb2NrIiwgcmV0IF0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9OworCisg
ICAgICAgIHJldHVybiB3LndpdGhfd2Fsa2Vycyh7CisgICAgICAgICAgICAgICAgInN1YiI6IGZ1
bmN0aW9uKGV4cHIsIHN1YnNjcmlwdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1
YnNjcmlwdFswXSA9PSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgbmFtZSA9IHN1YnNjcmlwdFsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzX2lkZW50aWZpZXIobmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gWyAiZG90Iiwgd2FsayhleHByKSwgbmFtZSBdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiaWYiOiBtYWtlX2lmLAorICAgICAg
ICAgICAgICAgICJ0b3BsZXZlbCI6IGZ1bmN0aW9uKGJvZHkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBbICJ0b3BsZXZlbCIsIHRpZ2h0ZW4oYm9keS5tYXAod2FsaykpIF07Cisg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAic3dpdGNoIjogZnVuY3Rpb24oZXhw
ciwgYm9keSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3QgPSBib2R5Lmxlbmd0
aCAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyAic3dpdGNoIiwgd2Fsayhl
eHByKSwgYm9keS5tYXAoZnVuY3Rpb24oYnJhbmNoLCBpKXsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGJsb2NrID0gdGlnaHRlbihicmFuY2hbMV0ubWFwKHdhbGspKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gbGFzdCAmJiBibG9jay5sZW5n
dGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5v
ZGUgPSBibG9ja1tibG9jay5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZVswXSA9PSAiYnJlYWsiICYmICFub2RlWzFdKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sucG9wKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFsgYnJhbmNoWzBdID8gd2FsayhicmFuY2hbMF0pIDogbnVsbCwgYmxv
Y2sgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pIF07CisgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICAiZnVuY3Rpb24iOiBfbGFtYmRhLAorICAgICAgICAgICAgICAgICJk
ZWZ1biI6IF9sYW1iZGEsCisgICAgICAgICAgICAgICAgImJsb2NrIjogZnVuY3Rpb24oYm9keSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkpIHJldHVybiBybWJsb2NrKFsgImJs
b2NrIiwgdGlnaHRlbihib2R5Lm1hcCh3YWxrKSkgXSk7CisgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAiYmluYXJ5IjogZnVuY3Rpb24ob3AsIGxlZnQsIHJpZ2h0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gd2FsayhsZWZ0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gd2FsayhyaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
YmVzdCA9IFsgImJpbmFyeSIsIG9wLCBsZWZ0LCByaWdodCBdOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzX2NvbnN0YW50KHJpZ2h0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNfY29uc3RhbnQobGVmdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgdmFsID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgIisiOiB2YWwgPSBsZWZ0WzFdICsgcmlnaHRbMV07IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIq
IjogdmFsID0gbGVmdFsxXSAqIHJpZ2h0WzFdOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiLyI6IHZhbCA9IGxlZnRbMV0gLyByaWdodFsx
XTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgIi0iOiB2YWwgPSBsZWZ0WzFdIC0gcmlnaHRbMV07IGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICI8PCI6IHZhbCA9IGxlZnRbMV0gPDwg
cmlnaHRbMV07IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICI+PiI6IHZhbCA9IGxlZnRbMV0gPj4gcmlnaHRbMV07IGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICI+Pj4iOiB2YWwgPSBs
ZWZ0WzFdID4+PiByaWdodFsxXTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2YWwgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmVzdCA9IGJlc3Rfb2YoYmVzdCwgWyB0eXBlb2YgdmFsID09ICJzdHJpbmciID8g
InN0cmluZyIgOiAibnVtIiwgdmFsIF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChs
ZWZ0WzBdID09ICJiaW5hcnkiICYmIGxlZnRbMV0gPT0gIisiICYmIGxlZnRbM11bMF0gPT0gInN0
cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0ID0g
YmVzdF9vZihiZXN0LCBbICJiaW5hcnkiLCAiKyIsIGxlZnRbMl0sIFsgInN0cmluZyIsIGxlZnRb
M11bMV0gKyByaWdodFsxXSBdIF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gYmVzdDsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJjb25kaXRpb25h
bCI6IGZ1bmN0aW9uKGMsIHQsIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBt
YWtlX2NvbmRpdGlvbmFsKHdhbGsoYyksIHdhbGsodCksIHdhbGsoZSkpOworICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgInRyeSI6IGZ1bmN0aW9uKHQsIGMsIGYpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ0cnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWdodGVuKHQubWFw
KHdhbGspKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyAhPSBudWxsID8gWyBj
WzBdLCB0aWdodGVuKGNbMV0ubWFwKHdhbGspKSBdIDogbnVsbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZiAhPSBudWxsID8gdGlnaHRlbihmLm1hcCh3YWxrKSkgOiBudWxsCisg
ICAgICAgICAgICAgICAgICAgICAgICBdOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgInVuYXJ5LXByZWZpeCI6IGZ1bmN0aW9uKG9wLCBjb25kKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAob3AgPT0gIiEiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYmVzdF9vZih0aGlzLCBuZWdhdGUoY29uZCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHdhbGsoYXN0
KTsKKyAgICAgICAgfSk7Cit9OworCisvKiAtLS0tLVsgcmUtZ2VuZXJhdGUgY29kZSBmcm9tIHRo
ZSBBU1QgXS0tLS0tICovCisKK3ZhciBET1RfQ0FMTF9OT19QQVJFTlMgPSBqc3AuYXJyYXlfdG9f
aGFzaChbCisgICAgICAgICJuYW1lIiwKKyAgICAgICAgImFycmF5IiwKKyAgICAgICAgInN0cmlu
ZyIsCisgICAgICAgICJkb3QiLAorICAgICAgICAic3ViIiwKKyAgICAgICAgImNhbGwiLAorICAg
ICAgICAicmVnZXhwIgorXSk7CisKK2Z1bmN0aW9uIGdlbl9jb2RlKGFzdCwgYmVhdXRpZnkpIHsK
KyAgICAgICAgaWYgKGJlYXV0aWZ5KSBiZWF1dGlmeSA9IGRlZmF1bHRzKGJlYXV0aWZ5LCB7Cisg
ICAgICAgICAgICAgICAgaW5kZW50X3N0YXJ0IDogMCwKKyAgICAgICAgICAgICAgICBpbmRlbnRf
bGV2ZWwgOiA0LAorICAgICAgICAgICAgICAgIHF1b3RlX2tleXMgICA6IGZhbHNlLAorICAgICAg
ICAgICAgICAgIHNwYWNlX2NvbG9uICA6IGZhbHNlCisgICAgICAgIH0pOworICAgICAgICB2YXIg
aW5kZW50YXRpb24gPSAwLAorICAgICAgICAgICAgbmV3bGluZSA9IGJlYXV0aWZ5ID8gIlxuIiA6
ICIiLAorICAgICAgICAgICAgc3BhY2UgPSBiZWF1dGlmeSA/ICIgIiA6ICIiOworCisgICAgICAg
IGZ1bmN0aW9uIGluZGVudChsaW5lKSB7CisgICAgICAgICAgICAgICAgaWYgKGxpbmUgPT0gbnVs
bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSAiIjsKKyAgICAgICAgICAgICAgICBp
ZiAoYmVhdXRpZnkpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gcmVwZWF0X3N0cmlu
ZygiICIsIGJlYXV0aWZ5LmluZGVudF9zdGFydCArIGluZGVudGF0aW9uICogYmVhdXRpZnkuaW5k
ZW50X2xldmVsKSArIGxpbmU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmU7CisgICAgICAg
IH07CisKKyAgICAgICAgZnVuY3Rpb24gd2l0aF9pbmRlbnQoY29udCwgaW5jcikgeworICAgICAg
ICAgICAgICAgIGlmIChpbmNyID09IG51bGwpIGluY3IgPSAxOworICAgICAgICAgICAgICAgIGlu
ZGVudGF0aW9uICs9IGluY3I7CisgICAgICAgICAgICAgICAgdHJ5IHsgcmV0dXJuIGNvbnQuYXBw
bHkobnVsbCwgc2xpY2UoYXJndW1lbnRzLCAxKSk7IH0KKyAgICAgICAgICAgICAgICBmaW5hbGx5
IHsgaW5kZW50YXRpb24gLT0gaW5jcjsgfQorICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9u
IGFkZF9zcGFjZXMoYSkgeworICAgICAgICAgICAgICAgIGlmIChiZWF1dGlmeSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhLmpvaW4oIiAiKTsKKyAgICAgICAgICAgICAgICB2YXIg
YiA9IFtdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBhW2kgKyAxXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGIucHVzaChhW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChuZXh0ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgvW2EtejAtOV9ceDI0
XSQvaS50ZXN0KGFbaV0udG9TdHJpbmcoKSkgJiYgL15bYS16MC05X1x4MjRdL2kudGVzdChuZXh0
LnRvU3RyaW5nKCkpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoL1tcK1wtXSQv
LnRlc3QoYVtpXS50b1N0cmluZygpKSAmJiAvXltcK1wtXS8udGVzdChuZXh0LnRvU3RyaW5nKCkp
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5wdXNoKCIgIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiBiLmpvaW4oIiIpOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIGFkZF9j
b21tYXMoYSkgeworICAgICAgICAgICAgICAgIHJldHVybiBhLmpvaW4oIiwiICsgc3BhY2UpOwor
ICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHBhcmVudGhlc2l6ZShleHByKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGdlbiA9IG1ha2UoZXhwcik7CisgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBlbCA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgoZWwgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBlbChleHByKSkgfHwgZXhwclswXSA9PSBlbCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIoIiArIGdlbiArICIpIjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGdlbjsKKyAgICAgICAg
fTsKKworICAgICAgICBmdW5jdGlvbiBiZXN0X29mKGEpIHsKKyAgICAgICAgICAgICAgICBpZiAo
YS5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFbMF07Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChhLmxlbmd0aCA9PSAyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IGFbMV07CisgICAgICAgICAgICAgICAgICAg
ICAgICBhID0gYVswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmxlbmd0aCA8
PSBiLmxlbmd0aCA/IGEgOiBiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYmVzdF9vZihbIGFbMF0sIGJlc3Rfb2YoYS5zbGljZSgxKSkgXSk7CisgICAgICAgIH07
CisKKyAgICAgICAgZnVuY3Rpb24gbmVlZHNfcGFyZW5zKGV4cHIpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZXhwclswXSA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBkb3QvY2FsbCBvbiBhIGxpdGVyYWwgZnVuY3Rpb24gcmVxdWlyZXMgdGhlCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBmdW5jdGlvbiBsaXRlcmFsIGl0c2VsZiB0byBiZSBwYXJlbnRoZXNp
emVkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGlmIGl0J3MgdGhlIGZpcnN0ICJ0
aGluZyIgaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGVtZW50LiAgVGhpcyBt
ZWFucyB0aGF0IHRoZSBwYXJlbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICJzdGF0
IiwgYnV0IGl0IGNvdWxkIGFsc28gYmUgYSAic2VxIiBhbmQKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHdlJ3JlIHRoZSBmaXJzdCBpbiB0aGlzICJzZXEiIGFuZCB0aGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHBhcmVudCBpcyAic3RhdCIsIGFuZCBzbyBvbi4gIE1lc3N5IHN0dWZm
LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IGl0IHdvcnRocyB0aGUgdHJvdWJsZS4K
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gc2xpY2UoJHN0YWNrKSwgc2VsZiA9IGEu
cG9wKCksIHAgPSBhLnBvcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBbMF0gPT0gInN0YXQiKSBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwWzBdID09
ICJzZXEiICYmIHBbMV0gPT09IHNlbGYpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAocFswXSA9PSAiY2FsbCIgJiYgcFsxXSA9PT0gc2VsZikgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChwWzBdID09ICJiaW5hcnkiICYmIHBbMl0gPT09IHNl
bGYpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiA9IHA7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGEucG9wKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAhSE9QKERPVF9DQUxMX05PX1BBUkVOUywgZXhw
clswXSk7CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gbWFrZV9udW0obnVtKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHN0ciA9IG51bS50b1N0cmluZygxMCksIGEgPSBbIHN0ci5yZXBs
YWNlKC9eMFwuLywgIi4iKSBdLCBtOworICAgICAgICAgICAgICAgIGlmIChNYXRoLmZsb29yKG51
bSkgPT09IG51bSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYS5wdXNoKCIweCIgKyBudW0u
dG9TdHJpbmcoMTYpLnRvTG93ZXJDYXNlKCksIC8vIHByb2JhYmx5IHBvaW50bGVzcworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIwIiArIG51bS50b1N0cmluZyg4KSk7IC8vIHNhbWUu
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG0gPSAvXiguKj8pKDArKSQvLmV4ZWMobnVt
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5wdXNoKG1bMV0gKyAiZSIg
KyBtWzJdLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICgobSA9IC9eMD9cLigwKykoLiopJC8uZXhlYyhudW0pKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgYS5wdXNoKG1bMl0gKyAiZS0iICsgKG1bMV0ubGVuZ3RoICsgbVsy
XS5sZW5ndGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ci5zdWJzdHIoc3Ry
LmluZGV4T2YoIi4iKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gYmVzdF9vZihhKTsKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgZ2VuZXJhdG9ycyA9IHsK
KyAgICAgICAgICAgICAgICAic3RyaW5nIjogbWFrZV9zdHJpbmcsCisgICAgICAgICAgICAgICAg
Im51bSI6IG1ha2VfbnVtLAorICAgICAgICAgICAgICAgICJuYW1lIjogbWFrZV9uYW1lLAorICAg
ICAgICAgICAgICAgICJ0b3BsZXZlbCI6IGZ1bmN0aW9uKHN0YXRlbWVudHMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlX2Jsb2NrX3N0YXRlbWVudHMoc3RhdGVtZW50cykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4obmV3bGluZSArIG5ld2xpbmUp
OworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgImJsb2NrIjogbWFrZV9ibG9j
aywKKyAgICAgICAgICAgICAgICAidmFyIjogZnVuY3Rpb24oZGVmcykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJ2YXIgIiArIGFkZF9jb21tYXMoZGVmcy5tYXAobWFrZV8xdmFy
ZGVmKSkgKyAiOyI7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiY29uc3Qi
OiBmdW5jdGlvbihkZWZzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImNvbnN0
ICIgKyBhZGRfY29tbWFzKGRlZnMubWFwKG1ha2VfMXZhcmRlZikpICsgIjsiOworICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgInRyeSI6IGZ1bmN0aW9uKHRyLCBjYSwgZmkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXQgPSBbICJ0cnkiLCBtYWtlX2Jsb2NrKHRy
KSBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhKSBvdXQucHVzaCgiY2F0Y2giLCAi
KCIgKyBjYVswXSArICIpIiwgbWFrZV9ibG9jayhjYVsxXSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGZpKSBvdXQucHVzaCgiZmluYWxseSIsIG1ha2VfYmxvY2soZmkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRfc3BhY2VzKG91dCk7CisgICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICAidGhyb3ciOiBmdW5jdGlvbihleHByKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYWRkX3NwYWNlcyhbICJ0aHJvdyIsIG1ha2UoZXhwcikg
XSkgKyAiOyI7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAibmV3IjogZnVu
Y3Rpb24oY3RvciwgYXJncykgeworICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3Mu
bGVuZ3RoID4gMCA/ICIoIiArIGFkZF9jb21tYXMoYXJncy5tYXAobWFrZSkpICsgIikiIDogIiI7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkX3NwYWNlcyhbICJuZXciLCBwYXJl
bnRoZXNpemUoY3RvciwgInNlcSIsICJiaW5hcnkiLCAiY29uZGl0aW9uYWwiLCAiYXNzaWduIiwg
ZnVuY3Rpb24oZXhwcil7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0g
YXN0X3dhbGtlcigpLCBoYXNfY2FsbCA9IHt9OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcud2l0
aF93YWxrZXJzKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJjYWxsIjogZnVuY3Rpb24oKSB7IHRocm93IGhhc19jYWxsIH0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnVuY3Rpb24iOiBmdW5jdGlvbigp
IHsgcmV0dXJuIHRoaXMgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3LndhbGsoZXhwcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZXgpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXggPT09IGhhc19j
YWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cg
ZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0pICsgYXJncyBdKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICJzd2l0Y2giOiBmdW5jdGlvbihleHByLCBib2R5KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYWRkX3NwYWNlcyhbICJzd2l0Y2giLCAiKCIgKyBtYWtlKGV4cHIpICsgIikiLCBt
YWtlX3N3aXRjaF9ibG9jayhib2R5KSBdKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgICAgICJicmVhayI6IGZ1bmN0aW9uKGxhYmVsKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgb3V0ID0gImJyZWFrIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYWJlbCAh
PSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gIiAiICsgbWFr
ZV9uYW1lKGxhYmVsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQgKyAiOyI7
CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiY29udGludWUiOiBmdW5jdGlv
bihsYWJlbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dCA9ICJjb250aW51ZSI7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFiZWwgIT0gbnVsbCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICIgIiArIG1ha2VfbmFtZShsYWJlbCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0ICsgIjsiOworICAgICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAgICAgImNvbmRpdGlvbmFsIjogZnVuY3Rpb24oY28sIHRoLCBlbCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZF9zcGFjZXMoWyBwYXJlbnRoZXNpemUo
Y28sICJhc3NpZ24iLCAic2VxIiwgImNvbmRpdGlvbmFsIiksICI/IiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50aGVzaXplKHRoLCAic2VxIiksICI6
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50aGVz
aXplKGVsLCAic2VxIikgXSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAi
YXNzaWduIjogZnVuY3Rpb24ob3AsIGx2YWx1ZSwgcnZhbHVlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob3AgJiYgb3AgIT09IHRydWUpIG9wICs9ICI9IjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2Ugb3AgPSAiPSI7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YWRkX3NwYWNlcyhbIG1ha2UobHZhbHVlKSwgb3AsIHBhcmVudGhlc2l6ZShydmFsdWUsICJzZXEi
KSBdKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJkb3QiOiBmdW5jdGlv
bihleHByKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0ID0gbWFrZShleHByKSwg
aSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmVlZHNfcGFyZW5zKGV4cHIpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPSAiKCIgKyBvdXQgKyAiKSI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGFyZ3VtZW50cy5sZW5ndGgpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAiLiIgKyBtYWtlX25hbWUoYXJndW1l
bnRzW2krK10pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgICJjYWxsIjogZnVuY3Rpb24oZnVuYywgYXJncykg
eworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSBtYWtlKGZ1bmMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5lZWRzX3BhcmVucyhmdW5jKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZiA9ICIoIiArIGYgKyAiKSI7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZiArICIoIiArIGFkZF9jb21tYXMoYXJncy5tYXAobWFrZSkpICsgIikiOworICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgImZ1bmN0aW9uIjogbWFrZV9mdW5jdGlv
biwKKyAgICAgICAgICAgICAgICAiZGVmdW4iOiBtYWtlX2Z1bmN0aW9uLAorICAgICAgICAgICAg
ICAgICJpZiI6IGZ1bmN0aW9uKGNvLCB0aCwgZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBvdXQgPSBbICJpZiIsICIoIiArIG1ha2UoY28pICsgIikiLCBlbCA/IG1ha2VfdGhlbih0
aCkgOiBtYWtlKHRoKSBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKCJlbHNlIiwgbWFrZShlbCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGFkZF9zcGFjZXMob3V0KTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJm
b3IiOiBmdW5jdGlvbihpbml0LCBjb25kLCBzdGVwLCBibG9jaykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIG91dCA9IFsgImZvciIgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
aXQgPSAoaW5pdCAhPSBudWxsID8gbWFrZShpbml0KSA6ICIiKS5yZXBsYWNlKC87KlxzKiQvLCAi
OyIgKyBzcGFjZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25kID0gKGNvbmQgIT0gbnVs
bCA/IG1ha2UoY29uZCkgOiAiIikucmVwbGFjZSgvOypccyokLywgIjsiICsgc3BhY2UpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3RlcCA9IChzdGVwICE9IG51bGwgPyBtYWtlKHN0ZXApIDog
IiIpLnJlcGxhY2UoLzsqXHMqJC8sICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBh
cmdzID0gaW5pdCArIGNvbmQgKyBzdGVwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFy
Z3MgPT0gIjsgOyAiKSBhcmdzID0gIjs7IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC5w
dXNoKCIoIiArIGFyZ3MgKyAiKSIsIG1ha2UoYmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBhZGRfc3BhY2VzKG91dCk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICAiZm9yLWluIjogZnVuY3Rpb24oaGFzX3Zhciwga2V5LCBoYXNoLCBibG9jaykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dCA9IGFkZF9zcGFjZXMoWyAiZm9yIiwgIigi
IF0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc192YXIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCArPSAidmFyICI7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgKz0gYWRkX3NwYWNlcyhbIG1ha2VfbmFtZShrZXkpICsgIiBpbiAiICsgbWFrZShoYXNo
KSArICIpIiwgbWFrZShibG9jaykgXSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
b3V0OworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgIndoaWxlIjogZnVuY3Rp
b24oY29uZGl0aW9uLCBibG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFk
ZF9zcGFjZXMoWyAid2hpbGUiLCAiKCIgKyBtYWtlKGNvbmRpdGlvbikgKyAiKSIsIG1ha2UoYmxv
Y2spIF0pOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgImRvIjogZnVuY3Rp
b24oY29uZGl0aW9uLCBibG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFk
ZF9zcGFjZXMoWyAiZG8iLCBtYWtlKGJsb2NrKSwgIndoaWxlIiwgIigiICsgbWFrZShjb25kaXRp
b24pICsgIikiIF0pICsgIjsiOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
InJldHVybiI6IGZ1bmN0aW9uKGV4cHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBv
dXQgPSBbICJyZXR1cm4iIF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwciAhPSBu
dWxsKSBvdXQucHVzaChtYWtlKGV4cHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBhZGRfc3BhY2VzKG91dCkgKyAiOyI7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICAiYmluYXJ5IjogZnVuY3Rpb24ob3BlcmF0b3IsIGx2YWx1ZSwgcnZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgbGVmdCA9IG1ha2UobHZhbHVlKSwgcmlnaHQgPSBtYWtl
KHJ2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBYWFg6IEknbSBwcmV0dHkgc3Vy
ZSBvdGhlciBjYXNlcyB3aWxsIGJpdGUgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgd2UgbmVlZCB0byBiZSBzbWFydGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICBhZGRpbmcgcGFyZW5zIGFsbCB0aGUgdGltZSBpcyB0aGUgc2FmZXN0IGJldC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtZW1iZXIobHZhbHVlWzBdLCBbICJhc3NpZ24iLCAiY29u
ZGl0aW9uYWwiLCAic2VxIiBdKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx2YWx1
ZVswXSA9PSAiYmluYXJ5IiAmJiBQUkVDRURFTkNFW29wZXJhdG9yXSA+IFBSRUNFREVOQ0VbbHZh
bHVlWzFdXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gIigiICsg
bGVmdCArICIpIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtZW1iZXIocnZhbHVlWzBdLCBbICJhc3NpZ24iLCAiY29uZGl0aW9uYWwiLCAi
c2VxIiBdKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ2YWx1ZVswXSA9PSAiYmlu
YXJ5IiAmJiBQUkVDRURFTkNFW29wZXJhdG9yXSA+PSBQUkVDRURFTkNFW3J2YWx1ZVsxXV0pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSAiKCIgKyByaWdodCArICIp
IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBhZGRfc3BhY2VzKFsgbGVmdCwgb3BlcmF0b3IsIHJpZ2h0IF0pOworICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgInVuYXJ5LXByZWZpeCI6IGZ1bmN0aW9uKG9wZXJhdG9y
LCBleHByKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gbWFrZShleHByKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGV4cHJbMF0gPT0gIm51bSIgfHwgKGV4cHJb
MF0gPT0gInVuYXJ5LXByZWZpeCIgJiYgIUhPUChPUEVSQVRPUlMsIG9wZXJhdG9yICsgZXhwclsx
XSkpIHx8ICFuZWVkc19wYXJlbnMoZXhwcikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWwgPSAiKCIgKyB2YWwgKyAiKSI7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gb3BlcmF0b3IgKyAoanNwLmlzX2FscGhhbnVtZXJpY19jaGFyKG9wZXJhdG9yLmNoYXJBdCgw
KSkgPyAiICIgOiAiIikgKyB2YWw7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICAidW5hcnktcG9zdGZpeCI6IGZ1bmN0aW9uKG9wZXJhdG9yLCBleHByKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgdmFsID0gbWFrZShleHByKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghKGV4cHJbMF0gPT0gIm51bSIgfHwgKGV4cHJbMF0gPT0gInVuYXJ5LXBvc3RmaXgi
ICYmICFIT1AoT1BFUkFUT1JTLCBvcGVyYXRvciArIGV4cHJbMV0pKSB8fCAhbmVlZHNfcGFyZW5z
KGV4cHIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gIigiICsgdmFs
ICsgIikiOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbCArIG9wZXJhdG9yOwor
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgInN1YiI6IGZ1bmN0aW9uKGV4cHIs
IHN1YnNjcmlwdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2ggPSBtYWtlKGV4
cHIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWRzX3BhcmVucyhleHByKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCA9ICIoIiArIGhhc2ggKyAiKSI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzaCArICJbIiArIG1ha2Uoc3Vic2NyaXB0
KSArICJdIjsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJvYmplY3QiOiBm
dW5jdGlvbihwcm9wcykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLmxlbmd0
aCA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInt9IjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAieyIgKyBuZXdsaW5lICsgd2l0aF9pbmRlbnQo
ZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3Bz
Lm1hcChmdW5jdGlvbihwKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIga2V5ID0gcFswXSwgdmFsID0gbWFrZShwWzFdKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYmVhdXRpZnkgJiYgYmVhdXRpZnkucXVvdGVfa2V5cykg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0g
bWFrZV9zdHJpbmcoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHR5cGVvZiBrZXkgPT0gIm51bWJlciIgfHwgIWJlYXV0aWZ5ICYmICtrZXkg
KyAiIiA9PSBrZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtleSA9IG1ha2VfbnVtKCtrZXkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzX2lkZW50aWZpZXIoa2V5KSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gbWFrZV9zdHJpbmco
a2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGVudChhZGRfc3BhY2Vz
KGJlYXV0aWZ5ICYmIGJlYXV0aWZ5LnNwYWNlX2NvbG9uCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gWyBrZXksICI6Iiwg
dmFsIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiBbIGtleSArICI6IiwgdmFsIF0pKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSkuam9pbigiLCIgKyBuZXdsaW5lKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0pICsgbmV3bGluZSArIGluZGVudCgifSIpOworICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgInJlZ2V4cCI6IGZ1bmN0aW9uKHJ4LCBtb2RzKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIi8iICsgcnggKyAiLyIgKyBtb2RzOworICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgImFycmF5IjogZnVuY3Rpb24oZWxlbWVudHMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT0gMCkgcmV0dXJuICJb
XSI7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkX3NwYWNlcyhbICJbIiwgYWRk
X2NvbW1hcyhlbGVtZW50cy5tYXAobWFrZSkpLCAiXSIgXSk7CisgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICAic3RhdCI6IGZ1bmN0aW9uKHN0bXQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBtYWtlKHN0bXQpLnJlcGxhY2UoLzsqXHMqJC8sICI7Iik7CisgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAic2VxIjogZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkX2NvbW1hcyhzbGljZShhcmd1bWVudHMpLm1h
cChtYWtlKSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAibGFiZWwiOiBm
dW5jdGlvbihuYW1lLCBibG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFk
ZF9zcGFjZXMoWyBtYWtlX25hbWUobmFtZSksICI6IiwgbWFrZShibG9jaykgXSk7CisgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAid2l0aCI6IGZ1bmN0aW9uKGV4cHIsIGJsb2Nr
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkX3NwYWNlcyhbICJ3aXRoIiwg
IigiICsgbWFrZShleHByKSArICIpIiwgbWFrZShibG9jaykgXSk7CisgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICAiYXRvbSI6IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlX25hbWUobmFtZSk7CisgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICAiY29tbWVudDEiOiBmdW5jdGlvbih0ZXh0KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIi8vIiArIHRleHQgKyAiXG4iOworICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgImNvbW1lbnQyIjogZnVuY3Rpb24odGV4dCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICIvKiIgKyB0ZXh0ICsgIiovIjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgLy8gVGhlIHNxdWVlemVyIHJlcGxhY2VzICJi
bG9jayItcyB0aGF0IGNvbnRhaW4gb25seSBhIHNpbmdsZQorICAgICAgICAvLyBzdGF0ZW1lbnQg
d2l0aCB0aGUgc3RhdGVtZW50IGl0c2VsZjsgdGVjaG5pY2FsbHksIHRoZSBBU1QKKyAgICAgICAg
Ly8gaXMgY29ycmVjdCwgYnV0IHRoaXMgY2FuIGNyZWF0ZSBwcm9ibGVtcyB3aGVuIHdlIG91dHB1
dCBhbgorICAgICAgICAvLyBJRiBoYXZpbmcgYW4gRUxTRSBjbGF1c2Ugd2hlcmUgdGhlIFRIRU4g
Y2xhdXNlIGVuZHMgaW4gYW4KKyAgICAgICAgLy8gSUYgKndpdGhvdXQqIGFuIEVMU0UgYmxvY2sg
KHRoZW4gdGhlIG91dGVyIEVMU0Ugd291bGQgcmVmZXIKKyAgICAgICAgLy8gdG8gdGhlIGlubmVy
IElGKS4gIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciB0aGlzIGNhc2UgYW5kCisgICAgICAgIC8v
IGFkZHMgdGhlIGJsb2NrIGJyYWNrZXRzIGlmIG5lZWRlZC4KKyAgICAgICAgZnVuY3Rpb24gbWFr
ZV90aGVuKHRoKSB7CisgICAgICAgICAgICAgICAgdmFyIGIgPSB0aDsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBiWzBd
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gImlmIikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJbM10pCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbm8gZWxzZSwgd2UgbXVzdCBhZGQgdGhlIGJsb2NrCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2UoWyAiYmxvY2si
LCBbIHRoIF1dKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IGJbM107Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
ICh0eXBlID09ICJ3aGlsZSIgfHwgdHlwZSA9PSAiZG8iKSBiID0gYlsyXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImZvciIgfHwgdHlwZSA9PSAiZm9yLWluIikg
YiA9IGJbNF07CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZSh0aCk7CisgICAgICAgIH07CisK
KyAgICAgICAgZnVuY3Rpb24gbWFrZV9mdW5jdGlvbihuYW1lLCBhcmdzLCBib2R5KSB7CisgICAg
ICAgICAgICAgICAgdmFyIG91dCA9ICJmdW5jdGlvbiI7CisgICAgICAgICAgICAgICAgaWYgKG5h
bWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAiICIgKyBtYWtlX25hbWUobmFt
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dCArPSAiKCIgKyBhZGRf
Y29tbWFzKGFyZ3MubWFwKG1ha2VfbmFtZSkpICsgIikiOworICAgICAgICAgICAgICAgIHJldHVy
biBhZGRfc3BhY2VzKFsgb3V0LCBtYWtlX2Jsb2NrKGJvZHkpIF0pOworICAgICAgICB9OworCisg
ICAgICAgIGZ1bmN0aW9uIG1ha2Vfc3RyaW5nKHN0cikgeworICAgICAgICAgICAgICAgIC8vIHJl
dHVybiAnIicgKworICAgICAgICAgICAgICAgIC8vICAgICAgICAgc3RyLnJlcGxhY2UoL1x4NWMv
ZywgIlxcXFwiKQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgLnJlcGxhY2UoL1xyP1xuL2cs
ICJcXG4iKQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgLnJlcGxhY2UoL1x0L2csICJcXHQi
KQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgLnJlcGxhY2UoL1xyL2csICJcXHIiKQorICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgLnJlcGxhY2UoL1xmL2csICJcXGYiKQorICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgLnJlcGxhY2UoL1tcYl0vZywgIlxcYiIpCisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAucmVwbGFjZSgvXHgyMi9nLCAiXFxcIiIpCisgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAucmVwbGFjZSgvW1x4MDAtXHgxZl18W1x4ODAtXHhmZl0vZywgZnVuY3Rpb24o
Yyl7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIHZhciBoZXggPSBjLmNoYXJD
b2RlQXQoMCkudG9TdHJpbmcoMTYpOworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAg
ICBpZiAoaGV4Lmxlbmd0aCA8IDIpCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgaGV4ID0gIjAiICsgaGV4OworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ICAgICByZXR1cm4gIlxceCIgKyBoZXg7CisgICAgICAgICAgICAgICAgLy8gICAgICAgICB9KQor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgKyAnIic7CisgICAgICAgICAgICAgICAgcmV0dXJu
IEpTT04uc3RyaW5naWZ5KHN0cik7IC8vIFNUSUxMIGNoZWF0aW5nLgorICAgICAgICB9OworCisg
ICAgICAgIGZ1bmN0aW9uIG1ha2VfbmFtZShuYW1lKSB7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChuYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgInRydWUiOiByZXR1cm4gYmVhdXRp
ZnkgPyAidHJ1ZSIgOiAiITAiOworICAgICAgICAgICAgICAgICAgICBjYXNlICJmYWxzZSI6IHJl
dHVybiBiZWF1dGlmeSA/ICJmYWxzZSIgOiAiITEiOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gbmFtZS50b1N0cmluZygpOworICAgICAgICB9OworCisgICAgICAg
IGZ1bmN0aW9uIG1ha2VfYmxvY2tfc3RhdGVtZW50cyhzdGF0ZW1lbnRzKSB7CisgICAgICAgICAg
ICAgICAgZm9yICh2YXIgYSA9IFtdLCBsYXN0ID0gc3RhdGVtZW50cy5sZW5ndGggLSAxLCBpID0g
MDsgaSA8PSBsYXN0OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ID0g
c3RhdGVtZW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0gbWFrZShz
dGF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlICE9ICI7IikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJlYXV0aWZ5ICYmIGkgPT0gbGFzdCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNl
KC87K1xzKiQvLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEucHVzaChj
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGEubWFwKGluZGVudCk7CisgICAgICAgIH07CisKKyAgICAgICAg
ZnVuY3Rpb24gbWFrZV9zd2l0Y2hfYmxvY2soYm9keSkgeworICAgICAgICAgICAgICAgIHZhciBu
ID0gYm9keS5sZW5ndGg7CisgICAgICAgICAgICAgICAgaWYgKG4gPT0gMCkgcmV0dXJuICJ7fSI7
CisgICAgICAgICAgICAgICAgcmV0dXJuICJ7IiArIG5ld2xpbmUgKyBib2R5Lm1hcChmdW5jdGlv
bihicmFuY2gsIGkpeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc19ib2R5ID0gYnJh
bmNoWzFdLmxlbmd0aCA+IDAsIGNvZGUgPSB3aXRoX2luZGVudChmdW5jdGlvbigpeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZW50KGJyYW5jaFswXQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYWRkX3NwYWNlcyhbICJj
YXNlIiwgbWFrZShicmFuY2hbMF0pICsgIjoiIF0pCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiAiZGVmYXVsdDoiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0sIDAuNSkgKyAoaGFzX2JvZHkgPyBuZXdsaW5lICsgd2l0aF9pbmRlbnQoZnVuY3Rpb24o
KXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VfYmxvY2tfc3Rh
dGVtZW50cyhicmFuY2hbMV0pLmpvaW4obmV3bGluZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9KSA6ICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmVhdXRpZnkgJiYgaGFz
X2JvZHkgJiYgaSA8IG4gLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
ICs9ICI7IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2RlOworICAgICAgICAg
ICAgICAgIH0pLmpvaW4obmV3bGluZSkgKyBuZXdsaW5lICsgaW5kZW50KCJ9Iik7CisgICAgICAg
IH07CisKKyAgICAgICAgZnVuY3Rpb24gbWFrZV9ibG9jayhzdGF0ZW1lbnRzKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFzdGF0ZW1lbnRzKSByZXR1cm4gIjsiOworICAgICAgICAgICAgICAgIGlm
IChzdGF0ZW1lbnRzLmxlbmd0aCA9PSAwKSByZXR1cm4gInt9IjsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gInsiICsgbmV3bGluZSArIHdpdGhfaW5kZW50KGZ1bmN0aW9uKCl7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbWFrZV9ibG9ja19zdGF0ZW1lbnRzKHN0YXRlbWVudHMpLmpv
aW4obmV3bGluZSk7CisgICAgICAgICAgICAgICAgfSkgKyBuZXdsaW5lICsgaW5kZW50KCJ9Iik7
CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gbWFrZV8xdmFyZGVmKGRlZikgeworICAg
ICAgICAgICAgICAgIHZhciBuYW1lID0gZGVmWzBdLCB2YWwgPSBkZWZbMV07CisgICAgICAgICAg
ICAgICAgaWYgKHZhbCAhPSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGFk
ZF9zcGFjZXMoWyBuYW1lLCAiPSIsIG1ha2UodmFsKSBdKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbmFtZTsKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgJHN0YWNrID0gW107CisKKyAgICAg
ICAgZnVuY3Rpb24gbWFrZShub2RlKSB7CisgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBub2Rl
WzBdOworICAgICAgICAgICAgICAgIHZhciBnZW4gPSBnZW5lcmF0b3JzW3R5cGVdOworICAgICAg
ICAgICAgICAgIGlmICghZ2VuKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJDYW4ndCBmaW5kIGdlbmVyYXRvciBmb3IgXCIiICsgdHlwZSArICJcIiIpOworICAgICAg
ICAgICAgICAgICRzdGFjay5wdXNoKG5vZGUpOworICAgICAgICAgICAgICAgIHZhciByZXQgPSBn
ZW4uYXBwbHkodHlwZSwgbm9kZS5zbGljZSgxKSk7CisgICAgICAgICAgICAgICAgJHN0YWNrLnBv
cCgpOworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH07CisKKyAgICAgICAg
cmV0dXJuIG1ha2UoYXN0KTsKK307CisKKy8qIC0tLS0tWyBVdGlsaXRpZXMgXS0tLS0tICovCisK
K2Z1bmN0aW9uIHJlcGVhdF9zdHJpbmcoc3RyLCBpKSB7CisgICAgICAgIGlmIChpIDw9IDApIHJl
dHVybiAiIjsKKyAgICAgICAgaWYgKGkgPT0gMSkgcmV0dXJuIHN0cjsKKyAgICAgICAgdmFyIGQg
PSByZXBlYXRfc3RyaW5nKHN0ciwgaSA+PiAxKTsKKyAgICAgICAgZCArPSBkOworICAgICAgICBp
ZiAoaSAmIDEpIGQgKz0gc3RyOworICAgICAgICByZXR1cm4gZDsKK307CisKK2Z1bmN0aW9uIGRl
ZmF1bHRzKGFyZ3MsIGRlZnMpIHsKKyAgICAgICAgdmFyIHJldCA9IHt9OworICAgICAgICBpZiAo
YXJncyA9PT0gdHJ1ZSkKKyAgICAgICAgICAgICAgICBhcmdzID0ge307CisgICAgICAgIGZvciAo
dmFyIGkgaW4gZGVmcykgaWYgKEhPUChkZWZzLCBpKSkgeworICAgICAgICAgICAgICAgIHJldFtp
XSA9IChhcmdzICYmIEhPUChhcmdzLCBpKSkgPyBhcmdzW2ldIDogZGVmc1tpXTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gcmV0OworfTsKKworZnVuY3Rpb24gaXNfaWRlbnRpZmllcihuYW1l
KSB7CisgICAgICAgIHJldHVybiAvXlthLXpfJF1bYS16MC05XyRdKiQvaS50ZXN0KG5hbWUpCisg
ICAgICAgICAgICAgICAgJiYgbmFtZSAhPSAidGhpcyIKKyAgICAgICAgICAgICAgICAmJiAhSE9Q
KGpzcC5LRVlXT1JEU19BVE9NLCBuYW1lKQorICAgICAgICAgICAgICAgICYmICFIT1AoanNwLlJF
U0VSVkVEX1dPUkRTLCBuYW1lKQorICAgICAgICAgICAgICAgICYmICFIT1AoanNwLktFWVdPUkRT
LCBuYW1lKTsKK307CisKK2Z1bmN0aW9uIEhPUChvYmosIHByb3ApIHsKKyAgICAgICAgcmV0dXJu
IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOworfTsKKwor
LyogLS0tLS1bIEV4cG9ydHMgXS0tLS0tICovCisKK2V4cG9ydHMuYXN0X3dhbGtlciA9IGFzdF93
YWxrZXI7CitleHBvcnRzLmFzdF9tYW5nbGUgPSBhc3RfbWFuZ2xlOworZXhwb3J0cy5hc3Rfc3F1
ZWV6ZSA9IGFzdF9zcXVlZXplOworZXhwb3J0cy5nZW5fY29kZSA9IGdlbl9jb2RlOworZXhwb3J0
cy5hc3RfYWRkX3Njb3BlID0gYXN0X2FkZF9zY29wZTsKK2V4cG9ydHMuYXN0X3NxdWVlemVfbW9y
ZSA9IHJlcXVpcmUoIi4vc3F1ZWV6ZS1tb3JlIikuYXN0X3NxdWVlemVfbW9yZTsK
</data>
<flag name="review"
          id="65889"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>