<?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>200691</bug_id>
          
          <creation_ts>2019-08-13 15:11:35 -0700</creation_ts>
          <short_desc>Web Inspector: Update Esprima to trunk (minor fixes)</short_desc>
          <delta_ts>2019-08-15 11:15:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1560973</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-08-13 15:11:35 -0700</bug_when>
    <thetext>Update Esprima to trunk (minor fixes)

Suggesting master:
https://github.com/jquery/esprima/commit/5e55171feb5adbc2b1d28ef4b2628d5ea9af0848

Some minor fixes and changes:
- RestProperty =&gt; RestElement
- SpreadProperty =&gt; SpreadElement
- some &quot;async&quot; fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560974</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-13 15:11:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/54276170&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560981</commentid>
    <comment_count>2</comment_count>
      <attachid>376219</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-08-13 15:24:12 -0700</bug_when>
    <thetext>Created attachment 376219
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561069</commentid>
    <comment_count>3</comment_count>
      <attachid>376219</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-08-13 21:58:01 -0700</bug_when>
    <thetext>Comment on attachment 376219
[PATCH] Proposed Fix

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

rs=me

&gt; Source/WebInspectorUI/ChangeLog:24
&gt; +        - SpreadProperty =&gt; SpreadElement.
&gt; +        - RestProperty =&gt; RestElement.

It seems more like `SpreadProperty`/`RestProperty` was merged into `SpreadElement`/`RestElement`, rather than a rename.  May be worth mentioning?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561200</commentid>
    <comment_count>4</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-08-14 09:57:35 -0700</bug_when>
    <thetext>(In reply to Devin Rousso from comment #3)
&gt; Comment on attachment 376219 [details]
&gt; [PATCH] Proposed Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=376219&amp;action=review
&gt; 
&gt; rs=me
&gt; 
&gt; &gt; Source/WebInspectorUI/ChangeLog:24
&gt; &gt; +        - SpreadProperty =&gt; SpreadElement.
&gt; &gt; +        - RestProperty =&gt; RestElement.
&gt; 
&gt; It seems more like `SpreadProperty`/`RestProperty` was merged into
&gt; `SpreadElement`/`RestElement`, rather than a rename.  May be worth
&gt; mentioning?

They were the same thing with a different name. Now they are just the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561242</commentid>
    <comment_count>5</comment_count>
      <attachid>376219</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-14 11:07:44 -0700</bug_when>
    <thetext>Comment on attachment 376219
[PATCH] Proposed Fix

Rejecting attachment 376219 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 376219, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Logging in as commit-queue@webkit.org...
Fetching: https://bugs.webkit.org/attachment.cgi?id=376219&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=200691&amp;ctype=xml&amp;excludefield=attachmentdata
Processing 1 patch from 1 bug.
Updating working directory
Processing patch 376219 from bug 200691.
Fetching: https://bugs.webkit.org/attachment.cgi?id=376219
Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/inspector/model/parse-script-syntax-tree-expected.txt
	M	LayoutTests/inspector/model/parse-script-syntax-tree.html
	M	Source/WebInspectorUI/ChangeLog
	M	Source/WebInspectorUI/UserInterface/External/Esprima/esprima.js
	M	Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js
	M	Source/WebInspectorUI/UserInterface/Workers/Formatter/ESTreeWalker.js
	M	Source/WebInspectorUI/UserInterface/Workers/Formatter/EsprimaFormatter.js

ERROR from SVN:
A repository hook failed: Commit blocked by pre-commit hook (exit code 1) with output:

    The following files contain tab characters:

        trunk/Source/WebInspectorUI/UserInterface/External/Esprima/esprima.js

    Please use spaces instead to indent.
    If you must commit a file with tabs, use svn propset to set the &quot;allow-tabs&quot; property.
W: 738da21a39f8ef42cd34568369bf0476eab356d2 and refs/remotes/origin/master differ, using rebase:
:040000 040000 a2606a1eb605a439182493b9b7ca161c6280121d 3553b61c78e6af3c708de29caacf28ce93cdbc29 M	LayoutTests
:040000 040000 ace9f9995967f92ba8cc115d49db77b2f574fe2d 9e565ad35cf15b58a84e791e99a364a0afd1ad2a M	Source
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/inspector/model/parse-script-syntax-tree-expected.txt
	M	LayoutTests/inspector/model/parse-script-syntax-tree.html
	M	Source/WebInspectorUI/ChangeLog
	M	Source/WebInspectorUI/UserInterface/External/Esprima/esprima.js
	M	Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js
	M	Source/WebInspectorUI/UserInterface/Workers/Formatter/ESTreeWalker.js
	M	Source/WebInspectorUI/UserInterface/Workers/Formatter/EsprimaFormatter.js

ERROR from SVN:
A repository hook failed: Commit blocked by pre-commit hook (exit code 1) with output:

    The following files contain tab characters:

        trunk/Source/WebInspectorUI/UserInterface/External/Esprima/esprima.js

    Please use spaces instead to indent.
    If you must commit a file with tabs, use svn propset to set the &quot;allow-tabs&quot; property.
W: 738da21a39f8ef42cd34568369bf0476eab356d2 and refs/remotes/origin/master differ, using rebase:
:040000 040000 a2606a1eb605a439182493b9b7ca161c6280121d 3553b61c78e6af3c708de29caacf28ce93cdbc29 M	LayoutTests
:040000 040000 ace9f9995967f92ba8cc115d49db77b2f574fe2d 9e565ad35cf15b58a84e791e99a364a0afd1ad2a M	Source
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit
Updating OpenSource
Current branch master is up to date.

Full output: https://webkit-queues.webkit.org/results/12911865</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561640</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-08-15 11:15:18 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/248732/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376219</attachid>
            <date>2019-08-13 15:24:12 -0700</date>
            <delta_ts>2019-08-14 11:07:44 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>esprima-1.txt</filename>
            <type>text/plain</type>
            <size>621233</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjZDU2NWI0NWNmZi4uNTRjYmQ1ZTk4MzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAor
MjAxOS0wOC0xMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IFVwZGF0ZSBFc3ByaW1hIHRvIHRydW5rIChtaW5vciBmaXhlcykK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDY5MQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTQyNzYxNzA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0
LXN5bnRheC10cmVlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvbW9kZWwvcGFy
c2Utc2NyaXB0LXN5bnRheC10cmVlLmh0bWw6CisgICAgICAgIC0gU3ByZWFkUHJvcGVydHkgPT4g
U3ByZWFkRWxlbWVudC4KKyAgICAgICAgLSBSZXN0UHJvcGVydHkgPT4gUmVzdEVsZW1lbnQuCisK
IDIwMTktMDgtMDkgIFRoaWJhdWx0IFNhdW5pZXIgIDx0c2F1bmllckBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tYWRkLXJlbW92
ZVRyYWNrLmh0bWwgaXMgY3Jhc2hpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9tb2RlbC9wYXJzZS1zY3JpcHQtc3ludGF4LXRyZWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL21vZGVsL3BhcnNlLXNjcmlwdC1zeW50YXgtdHJlZS1leHBlY3RlZC50eHQK
aW5kZXggZTVmOGFmYWE1MTkuLjE0ZjkxNDY5YTU5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLWV4
cGVjdGVkLnR4dApAQCAtMjgsNyArMjgsNyBAQCBwYXNzZWQgTWVtYmVyRXhwcmVzc2lvbgogcGFz
c2VkIE5ld0V4cHJlc3Npb24KIHBhc3NlZCBPYmplY3RFeHByZXNzaW9uCiBwYXNzZWQgUHJvcGVy
dHkKLXBhc3NlZCBSZXN0U3RhdGVtZW50CitwYXNzZWQgUmVzdEVsZW1lbnQKIHBhc3NlZCBSZXR1
cm5TdGF0ZW1lbnQKIHBhc3NlZCBTZXF1ZW5jZUV4cHJlc3Npb24KIHBhc3NlZCBTd2l0Y2hTdGF0
ZW1lbnQKQEAgLTQ0LDggKzQ0LDcgQEAgcGFzc2VkIFdpdGhTdGF0ZW1lbnQKIHBhc3NlZCBZaWVs
ZEV4cHJlc3Npb24KIHBhc3NlZCBDbGFzc1N0YXRlbWVudCwgU3VwZXIsIE1ldGFQcm9wZXJ0eQog
cGFzc2VkIEltcG9ydAotcGFzc2VkIFJlc3RQcm9wZXJ0eQotcGFzc2VkIFNwcmVhZFByb3BlcnR5
CitwYXNzZWQgU3ByZWFkRWxlbWVudAogcGFzc2VkIEFzc2lnbm1lbnRQYXR0ZXJuCiBwYXNzZWQg
QXJyb3dGdW5jdGlvbkV4cHJlc3Npb24KIHBhc3NlZCBBc3luYyBGdW5jdGlvbnMKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9wYXJzZS1zY3JpcHQtc3ludGF4LXRyZWUu
aHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9wYXJzZS1zY3JpcHQtc3ludGF4LXRy
ZWUuaHRtbAppbmRleCA1MWZlYzNjNGMxYS4uMjBhZGU4NjQyNmEgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9wYXJzZS1zY3JpcHQtc3ludGF4LXRyZWUuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLmh0
bWwKQEAgLTM2NCwxMiArMzY0LDIyIEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgIEluc3BlY3RvclRl
c3QuYXNzZXJ0KG5vZGUucmlnaHQucHJvcGVydGllc1swXS5rZXkudHlwZSA9PT0gV0kuU2NyaXB0
U3ludGF4VHJlZS5Ob2RlVHlwZS5MaXRlcmFsKTsKICAgICBJbnNwZWN0b3JUZXN0LmxvZygicGFz
c2VkIFByb3BlcnR5Iik7CiAKKyAgICBub2RlID0gbWFrZU5vZGUoImxldCB7IC4uLnJlc3QgfSA9
IHsgeDogMSwgeTogMCB9IiwgZmFsc2UpOworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUu
dHlwZSA9PT0gV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0aW9u
KTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmtpbmQgPT09ICJsZXQiKTsKKyAgICBJ
bnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEpOworICAg
IEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuZGVjbGFyYXRpb25zWzBdLnR5cGUgPT09IFdJLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9yKTsKKyAgICBJbnNwZWN0
b3JUZXN0LmFzc2VydChub2RlLmRlY2xhcmF0aW9uc1swXS5pZC50eXBlID09PSBXSS5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLk9iamVjdFBhdHRlcm4pOworICAgIEluc3BlY3RvclRlc3QuYXNz
ZXJ0KG5vZGUuZGVjbGFyYXRpb25zWzBdLmlkLnByb3BlcnRpZXMubGVuZ3RoID09PSAxKTsKKyAg
ICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmRlY2xhcmF0aW9uc1swXS5pZC5wcm9wZXJ0aWVz
WzBdLnR5cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUmVzdEVsZW1lbnQpOwor
ICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuZGVjbGFyYXRpb25zWzBdLmlkLnByb3BlcnRp
ZXNbMF0uYXJndW1lbnQudHlwZSA9PT0gV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVu
dGlmaWVyKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmRlY2xhcmF0aW9uc1swXS5p
ZC5wcm9wZXJ0aWVzWzBdLmFyZ3VtZW50Lm5hbWUgPT09ICJyZXN0Iik7CiAgICAgbm9kZSA9IG1h
a2VOb2RlKCJmdW5jdGlvbiBmb28oLi4udGhpbmdzKSB7IHJldHVybiB0aGluZ3M7IH0iLCBmYWxz
ZSk7CiAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5wYXJhbXMubGVuZ3RoID09PSAxKTsK
ICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLnBhcmFtc1swXS50eXBlID09PSBXSS5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLlJlc3RFbGVtZW50KTsKICAgICBJbnNwZWN0b3JUZXN0LmFz
c2VydChub2RlLnBhcmFtc1swXS5hcmd1bWVudC50eXBlID09PSBXSS5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLklkZW50aWZpZXIpOwogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUucGFy
YW1zWzBdLmFyZ3VtZW50Lm5hbWUgPT09ICJ0aGluZ3MiKTsKLSAgICBJbnNwZWN0b3JUZXN0Lmxv
ZygicGFzc2VkIFJlc3RTdGF0ZW1lbnQiKTsKKyAgICBJbnNwZWN0b3JUZXN0LmxvZygicGFzc2Vk
IFJlc3RFbGVtZW50Iik7CiAKICAgICBub2RlID0gbWFrZU5vZGUoImZ1bmN0aW9uIGZvbygpIHsg
cmV0dXJuIDIwOyB9IiwgZmFsc2UpOwogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuYm9k
eS5ib2R5WzBdLnR5cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUmV0dXJuU3Rh
dGVtZW50KTsKQEAgLTUzNCwxOCArNTQ0LDYgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgSW5zcGVj
dG9yVGVzdC5hc3NlcnQobm9kZS5hcmd1bWVudHNbMF0udHlwZSA9PT0gV0kuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5MaXRlcmFsKTsKICAgICBJbnNwZWN0b3JUZXN0LmxvZygicGFzc2VkIElt
cG9ydCIpOwogCi0gICAgbm9kZSA9IG1ha2VOb2RlKCJsZXQgeyAuLi5yZXN0IH0gPSB7IHg6IDEs
IHk6IDAgfSIsIGZhbHNlKTsKLSAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLnR5cGUgPT09
IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdGlvbik7Ci0gICAg
SW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5raW5kID09PSAibGV0Iik7Ci0gICAgSW5zcGVjdG9y
VGVzdC5hc3NlcnQobm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxKTsKLSAgICBJbnNwZWN0
b3JUZXN0LmFzc2VydChub2RlLmRlY2xhcmF0aW9uc1swXS50eXBlID09PSBXSS5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVjbGFyYXRvcik7Ci0gICAgSW5zcGVjdG9yVGVzdC5h
c3NlcnQobm9kZS5kZWNsYXJhdGlvbnNbMF0uaWQudHlwZSA9PT0gV0kuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5PYmplY3RQYXR0ZXJuKTsKLSAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2Rl
LmRlY2xhcmF0aW9uc1swXS5pZC5wcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMSk7Ci0gICAgSW5zcGVj
dG9yVGVzdC5hc3NlcnQobm9kZS5kZWNsYXJhdGlvbnNbMF0uaWQucHJvcGVydGllc1swXS50eXBl
ID09PSBXSS5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlJlc3RQcm9wZXJ0eSk7Ci0gICAgSW5z
cGVjdG9yVGVzdC5hc3NlcnQobm9kZS5kZWNsYXJhdGlvbnNbMF0uaWQucHJvcGVydGllc1swXS5h
cmd1bWVudC50eXBlID09PSBXSS5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLklkZW50aWZpZXIp
OwotICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuZGVjbGFyYXRpb25zWzBdLmlkLnByb3Bl
cnRpZXNbMF0uYXJndW1lbnQubmFtZSA9PT0gInJlc3QiKTsKLSAgICBJbnNwZWN0b3JUZXN0Lmxv
ZygicGFzc2VkIFJlc3RQcm9wZXJ0eSIpOwotCiAgICAgbm9kZSA9IG1ha2VOb2RlKCJsZXQgbiA9
IHsgLi4uc3ByZWFkIH0iLCBmYWxzZSk7CiAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS50
eXBlID09PSBXSS5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVjbGFyYXRpb24p
OwogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUua2luZCA9PT0gImxldCIpOwpAQCAtNTUz
LDEwICs1NTEsMTAgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQo
bm9kZS5kZWNsYXJhdGlvbnNbMF0udHlwZSA9PT0gV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5WYXJpYWJsZURlY2xhcmF0b3IpOwogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuZGVj
bGFyYXRpb25zWzBdLmluaXQudHlwZSA9PT0gV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5P
YmplY3RFeHByZXNzaW9uKTsKICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmRlY2xhcmF0
aW9uc1swXS5pbml0LnByb3BlcnRpZXMubGVuZ3RoID09PSAxKTsKLSAgICBJbnNwZWN0b3JUZXN0
LmFzc2VydChub2RlLmRlY2xhcmF0aW9uc1swXS5pbml0LnByb3BlcnRpZXNbMF0udHlwZSA9PT0g
V0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5TcHJlYWRQcm9wZXJ0eSk7CisgICAgSW5zcGVj
dG9yVGVzdC5hc3NlcnQobm9kZS5kZWNsYXJhdGlvbnNbMF0uaW5pdC5wcm9wZXJ0aWVzWzBdLnR5
cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU3ByZWFkRWxlbWVudCk7CiAgICAg
SW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5kZWNsYXJhdGlvbnNbMF0uaW5pdC5wcm9wZXJ0aWVz
WzBdLmFyZ3VtZW50LnR5cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWRlbnRp
Zmllcik7CiAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5kZWNsYXJhdGlvbnNbMF0uaW5p
dC5wcm9wZXJ0aWVzWzBdLmFyZ3VtZW50Lm5hbWUgPT09ICJzcHJlYWQiKTsKLSAgICBJbnNwZWN0
b3JUZXN0LmxvZygicGFzc2VkIFNwcmVhZFByb3BlcnR5Iik7CisgICAgSW5zcGVjdG9yVGVzdC5s
b2coInBhc3NlZCBTcHJlYWRFbGVtZW50Iik7CiAKICAgICBub2RlID0gbWFrZU5vZGUoImxldCBb
eD0yMF0gPSBbXTsiLCBmYWxzZSk7CiAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS50eXBl
ID09PSBXSS5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVjbGFyYXRpb24pOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9DaGFuZ2VMb2cKaW5kZXggNDIyZDk0NGQyOGUuLjBmMmQ5YjNhYzc3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxOS0wOC0xMyAgSm9zZXBo
IFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IFVwZGF0ZSBFc3ByaW1hIHRvIHRydW5rIChtaW5vciBmaXhlcykKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDY5MQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNTQyNzYxNzA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvZXNwcmltYS5qczoKKyAg
ICAgICAgVXBkYXRlZCB0byBqcXVlcnkvZXNwcmltYUA1ZTU1MTcxZmViNWFkYmMyYjFkMjhlZjRi
MjYyOGQ1ZWE5YWYwODQ4LgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0
U3ludGF4VHJlZS5qczoKKyAgICAgICAgKFdJLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlLl9n
YXRoZXJJZGVudGlmaWVyc0luRGVjbGFyYXRpb24uZ2F0aGVySWRlbnRpZmllcnMpOgorICAgICAg
ICAoV0kuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuX2dhdGhlcklkZW50aWZpZXJzSW5EZWNs
YXJhdGlvbik6CisgICAgICAgIChXSS5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5fcmVjdXJz
ZSk6CisgICAgICAgIChXSS5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5fY3JlYXRlSW50ZXJu
YWxTeW50YXhUcmVlKToKKyAgICAgICAgKFdJLlNjcmlwdFN5bnRheFRyZWUpOgorICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvV29ya2Vycy9Gb3JtYXR0ZXIvRVNUcmVlV2Fsa2VyLmpzOgorICAgICAg
ICAoRVNUcmVlV2Fsa2VyLnByb3RvdHlwZS5fd2Fsa0NoaWxkcmVuKToKKyAgICAgICAgKEVTVHJl
ZVdhbGtlcik6CisgICAgICAgICogVXNlckludGVyZmFjZS9Xb3JrZXJzL0Zvcm1hdHRlci9Fc3By
aW1hRm9ybWF0dGVyLmpzOgorICAgICAgICAoRXNwcmltYUZvcm1hdHRlci5wcm90b3R5cGUuX2hh
bmRsZVRva2VuQXROb2RlKToKKyAgICAgICAgLSBTcHJlYWRQcm9wZXJ0eSA9PiBTcHJlYWRFbGVt
ZW50LgorICAgICAgICAtIFJlc3RQcm9wZXJ0eSA9PiBSZXN0RWxlbWVudC4KKwogMjAxOS0wOC0w
OSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IEFkZHJlc3Mgc29tZSBFU0xpbnQgd2FybmluZ3MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvZXNwcmltYS5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEv
ZXNwcmltYS5qcwppbmRleCA2N2UzOTI2NWU4ZS4uZmIwNDRhYmYxODIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvZXNwcmlt
YS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9F
c3ByaW1hL2VzcHJpbWEuanMKQEAgLTEsNjc2OCArMSw2Nzg2IEBACiAoZnVuY3Rpb24gd2VicGFj
a1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkgewogLyogaXN0YW5idWwg
aWdub3JlIG5leHQgKi8KLSAgICBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlw
ZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpCi0gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9y
eSgpOwotICAgIGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUu
YW1kKQotICAgICAgICBkZWZpbmUoW10sIGZhY3RvcnkpOworCWlmKHR5cGVvZiBleHBvcnRzID09
PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JykKKwkJbW9kdWxlLmV4cG9y
dHMgPSBmYWN0b3J5KCk7CisJZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYm
IGRlZmluZS5hbWQpCisJCWRlZmluZShbXSwgZmFjdG9yeSk7CiAvKiBpc3RhbmJ1bCBpZ25vcmUg
bmV4dCAqLwotICAgIGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKQotICAgICAg
ICBleHBvcnRzWyJlc3ByaW1hIl0gPSBmYWN0b3J5KCk7Ci0gICAgZWxzZQotICAgICAgICByb290
WyJlc3ByaW1hIl0gPSBmYWN0b3J5KCk7CisJZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29i
amVjdCcpCisJCWV4cG9ydHNbImVzcHJpbWEiXSA9IGZhY3RvcnkoKTsKKwllbHNlCisJCXJvb3Rb
ImVzcHJpbWEiXSA9IGZhY3RvcnkoKTsKIH0pKHRoaXMsIGZ1bmN0aW9uKCkgewogcmV0dXJuIC8q
KioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKLS8qKioqKiov
ICAgICAvLyBUaGUgbW9kdWxlIGNhY2hlCi0vKioqKioqLyAgICAgdmFyIGluc3RhbGxlZE1vZHVs
ZXMgPSB7fTsKKy8qKioqKiovIAkvLyBUaGUgbW9kdWxlIGNhY2hlCisvKioqKioqLyAJdmFyIGlu
c3RhbGxlZE1vZHVsZXMgPSB7fTsKIAotLyoqKioqKi8gICAgIC8vIFRoZSByZXF1aXJlIGZ1bmN0
aW9uCi0vKioqKioqLyAgICAgZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkg
eworLyoqKioqKi8gCS8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uCisvKioqKioqLyAJZnVuY3Rpb24g
X193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkgewogCi0vKioqKioqLyAgICAgICAgIC8vIENo
ZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZQorLyoqKioqKi8gCQkvLyBDaGVjayBpZiBtb2R1bGUg
aXMgaW4gY2FjaGUKIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLwotLyoqKioqKi8gICAgICAgICBp
ZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkKLS8qKioqKiovICAgICAgICAgICAgIHJldHVy
biBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzOworLyoqKioqKi8gCQlpZihpbnN0
YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkKKy8qKioqKiovIAkJCXJldHVybiBpbnN0YWxsZWRNb2R1
bGVzW21vZHVsZUlkXS5leHBvcnRzOwogCi0vKioqKioqLyAgICAgICAgIC8vIENyZWF0ZSBhIG5l
dyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpCi0vKioqKioqLyAgICAgICAgIHZh
ciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHsKLS8qKioqKiovICAgICAg
ICAgICAgIGV4cG9ydHM6IHt9LAotLyoqKioqKi8gICAgICAgICAgICAgaWQ6IG1vZHVsZUlkLAot
LyoqKioqKi8gICAgICAgICAgICAgbG9hZGVkOiBmYWxzZQotLyoqKioqKi8gICAgICAgICB9Owor
LyoqKioqKi8gCQkvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNh
Y2hlKQorLyoqKioqKi8gCQl2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0g
PSB7CisvKioqKioqLyAJCQlleHBvcnRzOiB7fSwKKy8qKioqKiovIAkJCWlkOiBtb2R1bGVJZCwK
Ky8qKioqKiovIAkJCWxvYWRlZDogZmFsc2UKKy8qKioqKiovIAkJfTsKIAotLyoqKioqKi8gICAg
ICAgICAvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb24KLS8qKioqKiovICAgICAgICAgbW9k
dWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0
cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7CisvKioqKioqLyAJCS8vIEV4ZWN1dGUgdGhlIG1vZHVs
ZSBmdW5jdGlvbgorLyoqKioqKi8gCQltb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBv
cnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTsKIAotLyoq
KioqKi8gICAgICAgICAvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkCi0vKioqKioqLyAgICAg
ICAgIG1vZHVsZS5sb2FkZWQgPSB0cnVlOworLyoqKioqKi8gCQkvLyBGbGFnIHRoZSBtb2R1bGUg
YXMgbG9hZGVkCisvKioqKioqLyAJCW1vZHVsZS5sb2FkZWQgPSB0cnVlOwogCi0vKioqKioqLyAg
ICAgICAgIC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlCi0vKioqKioqLyAgICAg
ICAgIHJldHVybiBtb2R1bGUuZXhwb3J0czsKLS8qKioqKiovICAgICB9CisvKioqKioqLyAJCS8v
IFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlCisvKioqKioqLyAJCXJldHVybiBtb2R1
bGUuZXhwb3J0czsKKy8qKioqKiovIAl9CiAKIAotLyoqKioqKi8gICAgIC8vIGV4cG9zZSB0aGUg
bW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pCi0vKioqKioqLyAgICAgX193ZWJw
YWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlczsKKy8qKioqKiovIAkvLyBleHBvc2UgdGhlIG1vZHVs
ZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKQorLyoqKioqKi8gCV9fd2VicGFja19yZXF1
aXJlX18ubSA9IG1vZHVsZXM7CiAKLS8qKioqKiovICAgICAvLyBleHBvc2UgdGhlIG1vZHVsZSBj
YWNoZQotLyoqKioqKi8gICAgIF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVs
ZXM7CisvKioqKioqLyAJLy8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGUKKy8qKioqKiovIAlfX3dl
YnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzOwogCi0vKioqKioqLyAgICAgLy8g
X193ZWJwYWNrX3B1YmxpY19wYXRoX18KLS8qKioqKiovICAgICBfX3dlYnBhY2tfcmVxdWlyZV9f
LnAgPSAiIjsKKy8qKioqKiovIAkvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfXworLyoqKioqKi8g
CV9fd2VicGFja19yZXF1aXJlX18ucCA9ICIiOwogCi0vKioqKioqLyAgICAgLy8gTG9hZCBlbnRy
eSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzCi0vKioqKioqLyAgICAgcmV0dXJuIF9fd2VicGFj
a19yZXF1aXJlX18oMCk7CisvKioqKioqLyAJLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVy
biBleHBvcnRzCisvKioqKioqLyAJcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7CiAvKioq
KioqLyB9KQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqKiovIChbCiAvKiAwICovCiAvKioqLyBm
dW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKIAotICAgIC8q
Ci0gICAgICBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLCBo
dHRwczovL2pzLmZvdW5kYXRpb24vCisJInVzZSBzdHJpY3QiOworCS8qCisJICBDb3B5cmlnaHQg
SlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLCBodHRwczovL2pzLmZvdW5kYXRp
b24vCiAKLSAgICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAgICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisJICBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKwkgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogCi0gICAgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICAgICAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKwkgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorCSAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKwkgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorCSAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKwkgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogCi0gICAgICBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTICJBUyBJUyIKLSAgICAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAgICAgIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCi0gICAgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBI
T0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZCi0gICAgICBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICAgICAg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICAgICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gICAgICBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICAgICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gICAgICBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICAg
ICovCi0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBjb21tZW50X2hhbmRsZXJfMSA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMSk7Ci0gICAgdmFyIGpzeF9wYXJzZXJfMSA9IF9fd2VicGFja19yZXF1
aXJlX18oMyk7Ci0gICAgdmFyIHBhcnNlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKLSAg
ICB2YXIgdG9rZW5pemVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTsKLSAgICBmdW5jdGlv
biBwYXJzZShjb2RlLCBvcHRpb25zLCBkZWxlZ2F0ZSkgewotICAgICAgICB2YXIgY29tbWVudEhh
bmRsZXIgPSBudWxsOwotICAgICAgICB2YXIgcHJveHlEZWxlZ2F0ZSA9IGZ1bmN0aW9uIChub2Rl
LCBtZXRhZGF0YSkgewotICAgICAgICAgICAgaWYgKGRlbGVnYXRlKSB7Ci0gICAgICAgICAgICAg
ICAgZGVsZWdhdGUobm9kZSwgbWV0YWRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGNvbW1lbnRIYW5kbGVyKSB7Ci0gICAgICAgICAgICAgICAgY29tbWVudEhhbmRsZXIudmlz
aXQobm9kZSwgbWV0YWRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICB2
YXIgcGFyc2VyRGVsZWdhdGUgPSAodHlwZW9mIGRlbGVnYXRlID09PSAnZnVuY3Rpb24nKSA/IHBy
b3h5RGVsZWdhdGUgOiBudWxsOwotICAgICAgICB2YXIgY29sbGVjdENvbW1lbnQgPSBmYWxzZTsK
LSAgICAgICAgaWYgKG9wdGlvbnMpIHsKLSAgICAgICAgICAgIGNvbGxlY3RDb21tZW50ID0gKHR5
cGVvZiBvcHRpb25zLmNvbW1lbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLmNvbW1lbnQpOwot
ICAgICAgICAgICAgdmFyIGF0dGFjaENvbW1lbnQgPSAodHlwZW9mIG9wdGlvbnMuYXR0YWNoQ29t
bWVudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuYXR0YWNoQ29tbWVudCk7Ci0gICAgICAgICAg
ICBpZiAoY29sbGVjdENvbW1lbnQgfHwgYXR0YWNoQ29tbWVudCkgewotICAgICAgICAgICAgICAg
IGNvbW1lbnRIYW5kbGVyID0gbmV3IGNvbW1lbnRfaGFuZGxlcl8xLkNvbW1lbnRIYW5kbGVyKCk7
Ci0gICAgICAgICAgICAgICAgY29tbWVudEhhbmRsZXIuYXR0YWNoID0gYXR0YWNoQ29tbWVudDsK
LSAgICAgICAgICAgICAgICBvcHRpb25zLmNvbW1lbnQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IHBhcnNlckRlbGVnYXRlID0gcHJveHlEZWxlZ2F0ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICB2YXIgaXNNb2R1bGUgPSBmYWxzZTsKLSAgICAgICAgaWYgKG9wdGlvbnMgJiYg
dHlwZW9mIG9wdGlvbnMuc291cmNlVHlwZSA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAgIGlz
TW9kdWxlID0gKG9wdGlvbnMuc291cmNlVHlwZSA9PT0gJ21vZHVsZScpOwotICAgICAgICB9Ci0g
ICAgICAgIHZhciBwYXJzZXI7Ci0gICAgICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25z
LmpzeCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuanN4KSB7Ci0gICAgICAgICAgICBwYXJzZXIg
PSBuZXcganN4X3BhcnNlcl8xLkpTWFBhcnNlcihjb2RlLCBvcHRpb25zLCBwYXJzZXJEZWxlZ2F0
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwYXJzZXIgPSBuZXcg
cGFyc2VyXzEuUGFyc2VyKGNvZGUsIG9wdGlvbnMsIHBhcnNlckRlbGVnYXRlKTsKLSAgICAgICAg
fQotICAgICAgICB2YXIgcHJvZ3JhbSA9IGlzTW9kdWxlID8gcGFyc2VyLnBhcnNlTW9kdWxlKCkg
OiBwYXJzZXIucGFyc2VTY3JpcHQoKTsKLSAgICAgICAgdmFyIGFzdCA9IHByb2dyYW07Ci0gICAg
ICAgIGlmIChjb2xsZWN0Q29tbWVudCAmJiBjb21tZW50SGFuZGxlcikgewotICAgICAgICAgICAg
YXN0LmNvbW1lbnRzID0gY29tbWVudEhhbmRsZXIuY29tbWVudHM7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHBhcnNlci5jb25maWcudG9rZW5zKSB7Ci0gICAgICAgICAgICBhc3QudG9rZW5zID0g
cGFyc2VyLnRva2VuczsKLSAgICAgICAgfQotICAgICAgICBpZiAocGFyc2VyLmNvbmZpZy50b2xl
cmFudCkgewotICAgICAgICAgICAgYXN0LmVycm9ycyA9IHBhcnNlci5lcnJvckhhbmRsZXIuZXJy
b3JzOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhc3Q7Ci0gICAgfQotICAgIGV4cG9ydHMu
cGFyc2UgPSBwYXJzZTsKLSAgICBmdW5jdGlvbiBwYXJzZU1vZHVsZShjb2RlLCBvcHRpb25zLCBk
ZWxlZ2F0ZSkgewotICAgICAgICB2YXIgcGFyc2luZ09wdGlvbnMgPSBvcHRpb25zIHx8IHt9Owot
ICAgICAgICBwYXJzaW5nT3B0aW9ucy5zb3VyY2VUeXBlID0gJ21vZHVsZSc7Ci0gICAgICAgIHJl
dHVybiBwYXJzZShjb2RlLCBwYXJzaW5nT3B0aW9ucywgZGVsZWdhdGUpOwotICAgIH0KLSAgICBl
eHBvcnRzLnBhcnNlTW9kdWxlID0gcGFyc2VNb2R1bGU7Ci0gICAgZnVuY3Rpb24gcGFyc2VTY3Jp
cHQoY29kZSwgb3B0aW9ucywgZGVsZWdhdGUpIHsKLSAgICAgICAgdmFyIHBhcnNpbmdPcHRpb25z
ID0gb3B0aW9ucyB8fCB7fTsKLSAgICAgICAgcGFyc2luZ09wdGlvbnMuc291cmNlVHlwZSA9ICdz
Y3JpcHQnOwotICAgICAgICByZXR1cm4gcGFyc2UoY29kZSwgcGFyc2luZ09wdGlvbnMsIGRlbGVn
YXRlKTsKLSAgICB9Ci0gICAgZXhwb3J0cy5wYXJzZVNjcmlwdCA9IHBhcnNlU2NyaXB0OwotICAg
IGZ1bmN0aW9uIHRva2VuaXplKGNvZGUsIG9wdGlvbnMsIGRlbGVnYXRlKSB7Ci0gICAgICAgIHZh
ciB0b2tlbml6ZXIgPSBuZXcgdG9rZW5pemVyXzEuVG9rZW5pemVyKGNvZGUsIG9wdGlvbnMpOwot
ICAgICAgICB2YXIgdG9rZW5zOwotICAgICAgICB0b2tlbnMgPSBbXTsKLSAgICAgICAgdHJ5IHsK
LSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRva2VuID0g
dG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgIGlmICghdG9rZW4pIHsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmIChkZWxlZ2F0ZSkgewotICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGRlbGVn
YXRlKHRva2VuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdG9rZW5zLnB1
c2godG9rZW4pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChlKSB7
Ci0gICAgICAgICAgICB0b2tlbml6ZXIuZXJyb3JIYW5kbGVyLnRvbGVyYXRlKGUpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICh0b2tlbml6ZXIuZXJyb3JIYW5kbGVyLnRvbGVyYW50KSB7Ci0gICAg
ICAgICAgICB0b2tlbnMuZXJyb3JzID0gdG9rZW5pemVyLmVycm9ycygpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiB0b2tlbnM7Ci0gICAgfQotICAgIGV4cG9ydHMudG9rZW5pemUgPSB0b2tl
bml6ZTsKLSAgICB2YXIgc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOwotICAgIGV4
cG9ydHMuU3ludGF4ID0gc3ludGF4XzEuU3ludGF4OwotICAgIC8vIFN5bmMgd2l0aCAqLmpzb24g
bWFuaWZlc3RzLgotICAgIGV4cG9ydHMudmVyc2lvbiA9ICc0LjAuMC1kZXYnOworCSAgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUyAiQVMgSVMiCisJICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisJICBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
CSAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBC
RSBMSUFCTEUgRk9SIEFOWQorCSAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKwkgIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKwkgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorCSAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKwkgIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorCSAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwkqLworCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShl
eHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CisJdmFyIGNvbW1lbnRfaGFu
ZGxlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTsKKwl2YXIganN4X3BhcnNlcl8xID0gX193
ZWJwYWNrX3JlcXVpcmVfXygzKTsKKwl2YXIgcGFyc2VyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDgpOworCXZhciB0b2tlbml6ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpOworCWZ1bmN0
aW9uIHBhcnNlKGNvZGUsIG9wdGlvbnMsIGRlbGVnYXRlKSB7CisJICAgIHZhciBjb21tZW50SGFu
ZGxlciA9IG51bGw7CisJICAgIHZhciBwcm94eURlbGVnYXRlID0gZnVuY3Rpb24gKG5vZGUsIG1l
dGFkYXRhKSB7CisJICAgICAgICBpZiAoZGVsZWdhdGUpIHsKKwkgICAgICAgICAgICBkZWxlZ2F0
ZShub2RlLCBtZXRhZGF0YSk7CisJICAgICAgICB9CisJICAgICAgICBpZiAoY29tbWVudEhhbmRs
ZXIpIHsKKwkgICAgICAgICAgICBjb21tZW50SGFuZGxlci52aXNpdChub2RlLCBtZXRhZGF0YSk7
CisJICAgICAgICB9CisJICAgIH07CisJICAgIHZhciBwYXJzZXJEZWxlZ2F0ZSA9ICh0eXBlb2Yg
ZGVsZWdhdGUgPT09ICdmdW5jdGlvbicpID8gcHJveHlEZWxlZ2F0ZSA6IG51bGw7CisJICAgIHZh
ciBjb2xsZWN0Q29tbWVudCA9IGZhbHNlOworCSAgICBpZiAob3B0aW9ucykgeworCSAgICAgICAg
Y29sbGVjdENvbW1lbnQgPSAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0gJ2Jvb2xlYW4nICYm
IG9wdGlvbnMuY29tbWVudCk7CisJICAgICAgICB2YXIgYXR0YWNoQ29tbWVudCA9ICh0eXBlb2Yg
b3B0aW9ucy5hdHRhY2hDb21tZW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5hdHRhY2hDb21t
ZW50KTsKKwkgICAgICAgIGlmIChjb2xsZWN0Q29tbWVudCB8fCBhdHRhY2hDb21tZW50KSB7CisJ
ICAgICAgICAgICAgY29tbWVudEhhbmRsZXIgPSBuZXcgY29tbWVudF9oYW5kbGVyXzEuQ29tbWVu
dEhhbmRsZXIoKTsKKwkgICAgICAgICAgICBjb21tZW50SGFuZGxlci5hdHRhY2ggPSBhdHRhY2hD
b21tZW50OworCSAgICAgICAgICAgIG9wdGlvbnMuY29tbWVudCA9IHRydWU7CisJICAgICAgICAg
ICAgcGFyc2VyRGVsZWdhdGUgPSBwcm94eURlbGVnYXRlOworCSAgICAgICAgfQorCSAgICB9CisJ
ICAgIHZhciBpc01vZHVsZSA9IGZhbHNlOworCSAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0
aW9ucy5zb3VyY2VUeXBlID09PSAnc3RyaW5nJykgeworCSAgICAgICAgaXNNb2R1bGUgPSAob3B0
aW9ucy5zb3VyY2VUeXBlID09PSAnbW9kdWxlJyk7CisJICAgIH0KKwkgICAgdmFyIHBhcnNlcjsK
KwkgICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMuanN4ID09PSAnYm9vbGVhbicgJiYg
b3B0aW9ucy5qc3gpIHsKKwkgICAgICAgIHBhcnNlciA9IG5ldyBqc3hfcGFyc2VyXzEuSlNYUGFy
c2VyKGNvZGUsIG9wdGlvbnMsIHBhcnNlckRlbGVnYXRlKTsKKwkgICAgfQorCSAgICBlbHNlIHsK
KwkgICAgICAgIHBhcnNlciA9IG5ldyBwYXJzZXJfMS5QYXJzZXIoY29kZSwgb3B0aW9ucywgcGFy
c2VyRGVsZWdhdGUpOworCSAgICB9CisJICAgIHZhciBwcm9ncmFtID0gaXNNb2R1bGUgPyBwYXJz
ZXIucGFyc2VNb2R1bGUoKSA6IHBhcnNlci5wYXJzZVNjcmlwdCgpOworCSAgICB2YXIgYXN0ID0g
cHJvZ3JhbTsKKwkgICAgaWYgKGNvbGxlY3RDb21tZW50ICYmIGNvbW1lbnRIYW5kbGVyKSB7CisJ
ICAgICAgICBhc3QuY29tbWVudHMgPSBjb21tZW50SGFuZGxlci5jb21tZW50czsKKwkgICAgfQor
CSAgICBpZiAocGFyc2VyLmNvbmZpZy50b2tlbnMpIHsKKwkgICAgICAgIGFzdC50b2tlbnMgPSBw
YXJzZXIudG9rZW5zOworCSAgICB9CisJICAgIGlmIChwYXJzZXIuY29uZmlnLnRvbGVyYW50KSB7
CisJICAgICAgICBhc3QuZXJyb3JzID0gcGFyc2VyLmVycm9ySGFuZGxlci5lcnJvcnM7CisJICAg
IH0KKwkgICAgcmV0dXJuIGFzdDsKKwl9CisJZXhwb3J0cy5wYXJzZSA9IHBhcnNlOworCWZ1bmN0
aW9uIHBhcnNlTW9kdWxlKGNvZGUsIG9wdGlvbnMsIGRlbGVnYXRlKSB7CisJICAgIHZhciBwYXJz
aW5nT3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisJICAgIHBhcnNpbmdPcHRpb25zLnNvdXJjZVR5
cGUgPSAnbW9kdWxlJzsKKwkgICAgcmV0dXJuIHBhcnNlKGNvZGUsIHBhcnNpbmdPcHRpb25zLCBk
ZWxlZ2F0ZSk7CisJfQorCWV4cG9ydHMucGFyc2VNb2R1bGUgPSBwYXJzZU1vZHVsZTsKKwlmdW5j
dGlvbiBwYXJzZVNjcmlwdChjb2RlLCBvcHRpb25zLCBkZWxlZ2F0ZSkgeworCSAgICB2YXIgcGFy
c2luZ09wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCSAgICBwYXJzaW5nT3B0aW9ucy5zb3VyY2VU
eXBlID0gJ3NjcmlwdCc7CisJICAgIHJldHVybiBwYXJzZShjb2RlLCBwYXJzaW5nT3B0aW9ucywg
ZGVsZWdhdGUpOworCX0KKwlleHBvcnRzLnBhcnNlU2NyaXB0ID0gcGFyc2VTY3JpcHQ7CisJZnVu
Y3Rpb24gdG9rZW5pemUoY29kZSwgb3B0aW9ucywgZGVsZWdhdGUpIHsKKwkgICAgdmFyIHRva2Vu
aXplciA9IG5ldyB0b2tlbml6ZXJfMS5Ub2tlbml6ZXIoY29kZSwgb3B0aW9ucyk7CisJICAgIHZh
ciB0b2tlbnM7CisJICAgIHRva2VucyA9IFtdOworCSAgICB0cnkgeworCSAgICAgICAgd2hpbGUg
KHRydWUpIHsKKwkgICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2Vu
KCk7CisJICAgICAgICAgICAgaWYgKCF0b2tlbikgeworCSAgICAgICAgICAgICAgICBicmVhazsK
KwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKGRlbGVnYXRlKSB7CisJICAgICAgICAg
ICAgICAgIHRva2VuID0gZGVsZWdhdGUodG9rZW4pOworCSAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICB0b2tlbnMucHVzaCh0b2tlbik7CisJICAgICAgICB9CisJICAgIH0KKwkgICAgY2F0Y2gg
KGUpIHsKKwkgICAgICAgIHRva2VuaXplci5lcnJvckhhbmRsZXIudG9sZXJhdGUoZSk7CisJICAg
IH0KKwkgICAgaWYgKHRva2VuaXplci5lcnJvckhhbmRsZXIudG9sZXJhbnQpIHsKKwkgICAgICAg
IHRva2Vucy5lcnJvcnMgPSB0b2tlbml6ZXIuZXJyb3JzKCk7CisJICAgIH0KKwkgICAgcmV0dXJu
IHRva2VuczsKKwl9CisJZXhwb3J0cy50b2tlbml6ZSA9IHRva2VuaXplOworCXZhciBzeW50YXhf
MSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CisJZXhwb3J0cy5TeW50YXggPSBzeW50YXhfMS5T
eW50YXg7CisJLy8gU3luYyB3aXRoICouanNvbiBtYW5pZmVzdHMuCisJZXhwb3J0cy52ZXJzaW9u
ID0gJzQuMC4wLWRldic7CiAKIAogLyoqKi8gfSwKIC8qIDEgKi8KIC8qKiovIGZ1bmN0aW9uKG1v
ZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewogCi0gICAgInVzZSBzdHJpY3Qi
OwotICAgIHZhciBzeW50YXhfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7Ci0gICAgdmFyIENv
bW1lbnRIYW5kbGVyID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQ29tbWVudEhh
bmRsZXIoKSB7Ci0gICAgICAgICAgICB0aGlzLmF0dGFjaCA9IGZhbHNlOwotICAgICAgICAgICAg
dGhpcy5jb21tZW50cyA9IFtdOwotICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdOwotICAgICAg
ICAgICAgdGhpcy5sZWFkaW5nID0gW107Ci0gICAgICAgICAgICB0aGlzLnRyYWlsaW5nID0gW107
Ci0gICAgICAgIH0KLSAgICAgICAgQ29tbWVudEhhbmRsZXIucHJvdG90eXBlLmluc2VydElubmVy
Q29tbWVudHMgPSBmdW5jdGlvbiAobm9kZSwgbWV0YWRhdGEpIHsKLSAgICAgICAgICAgIC8vICBp
bm5uZXJDb21tZW50cyBmb3IgcHJvcGVydGllcyBlbXB0eSBibG9jawotICAgICAgICAgICAgLy8g
IGBmdW5jdGlvbiBhKCkgey8qKiBjb21tZW50cyAqKlwvfWAKLSAgICAgICAgICAgIGlmIChub2Rl
LnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5CbG9ja1N0YXRlbWVudCAmJiBub2RlLmJvZHkubGVu
Z3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGlubmVyQ29tbWVudHMgPSBbXTsKLSAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5sZWFkaW5nLmxlbmd0aCAtIDE7IGkgPj0g
MDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMubGVhZGluZ1tp
XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGFkYXRhLmVuZC5vZmZzZXQgPj0gZW50cnku
c3RhcnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ29tbWVudHMudW5zaGlmdChl
bnRyeS5jb21tZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVhZGluZy5zcGxp
Y2UoaSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWlsaW5nLnNwbGljZShp
LCAxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBpZiAoaW5uZXJDb21tZW50cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS5pbm5lckNvbW1lbnRzID0gaW5uZXJDb21tZW50czsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIENvbW1lbnRIYW5kbGVyLnByb3RvdHlw
ZS5maW5kVHJhaWxpbmdDb21tZW50cyA9IGZ1bmN0aW9uIChtZXRhZGF0YSkgewotICAgICAgICAg
ICAgdmFyIHRyYWlsaW5nQ29tbWVudHMgPSBbXTsKLSAgICAgICAgICAgIGlmICh0aGlzLnRyYWls
aW5nLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy50cmFp
bGluZy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgICAgICAgICB2YXIg
ZW50cnlfMSA9IHRoaXMudHJhaWxpbmdbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbnRy
eV8xLnN0YXJ0ID49IG1ldGFkYXRhLmVuZC5vZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRyYWlsaW5nQ29tbWVudHMudW5zaGlmdChlbnRyeV8xLmNvbW1lbnQpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMudHJh
aWxpbmcubGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJhaWxpbmdDb21tZW50
czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMuc3RhY2tbdGhp
cy5zdGFjay5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5ub2Rl
LnRyYWlsaW5nQ29tbWVudHMpIHsKLSAgICAgICAgICAgICAgICB2YXIgZmlyc3RDb21tZW50ID0g
ZW50cnkubm9kZS50cmFpbGluZ0NvbW1lbnRzWzBdOwotICAgICAgICAgICAgICAgIGlmIChmaXJz
dENvbW1lbnQgJiYgZmlyc3RDb21tZW50LnJhbmdlWzBdID49IG1ldGFkYXRhLmVuZC5vZmZzZXQp
IHsKLSAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGVudHJ5Lm5vZGUudHJh
aWxpbmdDb21tZW50czsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVudHJ5Lm5vZGUudHJh
aWxpbmdDb21tZW50czsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gdHJhaWxpbmdDb21tZW50czsKLSAgICAgICAgfTsKLSAgICAgICAgQ29tbWVu
dEhhbmRsZXIucHJvdG90eXBlLmZpbmRMZWFkaW5nQ29tbWVudHMgPSBmdW5jdGlvbiAobWV0YWRh
dGEpIHsKLSAgICAgICAgICAgIHZhciBsZWFkaW5nQ29tbWVudHMgPSBbXTsKLSAgICAgICAgICAg
IHZhciB0YXJnZXQ7Ci0gICAgICAgICAgICB3aGlsZSAodGhpcy5zdGFjay5sZW5ndGggPiAwKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0
aCAtIDFdOwotICAgICAgICAgICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5zdGFydCA+PSBtZXRh
ZGF0YS5zdGFydC5vZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gZW50cnku
bm9kZTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wb3AoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0YXJn
ZXQpIHsKLSAgICAgICAgICAgICAgICB2YXIgY291bnQgPSB0YXJnZXQubGVhZGluZ0NvbW1lbnRz
ID8gdGFyZ2V0LmxlYWRpbmdDb21tZW50cy5sZW5ndGggOiAwOwotICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSBjb3VudCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBjb21tZW50ID0gdGFyZ2V0LmxlYWRpbmdDb21tZW50c1tpXTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbW1lbnQucmFuZ2VbMV0gPD0gbWV0YWRhdGEuc3RhcnQub2Zmc2V0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMudW5zaGlmdChjb21tZW50KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5sZWFkaW5nQ29tbWVudHMuc3BsaWNlKGks
IDEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmICh0YXJnZXQubGVhZGluZ0NvbW1lbnRzICYmIHRhcmdldC5sZWFkaW5nQ29tbWVu
dHMubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXQubGVh
ZGluZ0NvbW1lbnRzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4g
bGVhZGluZ0NvbW1lbnRzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IHRoaXMubGVhZGluZy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgICAg
IHZhciBlbnRyeSA9IHRoaXMubGVhZGluZ1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoZW50cnku
c3RhcnQgPD0gbWV0YWRhdGEuc3RhcnQub2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGxl
YWRpbmdDb21tZW50cy51bnNoaWZ0KGVudHJ5LmNvbW1lbnQpOwotICAgICAgICAgICAgICAgICAg
ICB0aGlzLmxlYWRpbmcuc3BsaWNlKGksIDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBsZWFkaW5nQ29tbWVudHM7Ci0gICAgICAgIH07Ci0g
ICAgICAgIENvbW1lbnRIYW5kbGVyLnByb3RvdHlwZS52aXNpdE5vZGUgPSBmdW5jdGlvbiAobm9k
ZSwgbWV0YWRhdGEpIHsKLSAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IHN5bnRheF8xLlN5
bnRheC5Qcm9ncmFtICYmIG5vZGUuYm9keS5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5pbnNlcnRJbm5lckNvbW1l
bnRzKG5vZGUsIG1ldGFkYXRhKTsKLSAgICAgICAgICAgIHZhciB0cmFpbGluZ0NvbW1lbnRzID0g
dGhpcy5maW5kVHJhaWxpbmdDb21tZW50cyhtZXRhZGF0YSk7Ci0gICAgICAgICAgICB2YXIgbGVh
ZGluZ0NvbW1lbnRzID0gdGhpcy5maW5kTGVhZGluZ0NvbW1lbnRzKG1ldGFkYXRhKTsKLSAgICAg
ICAgICAgIGlmIChsZWFkaW5nQ29tbWVudHMubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAg
IG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbGVhZGluZ0NvbW1lbnRzOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4gMCkgewotICAgICAgICAg
ICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29tbWVudHM7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goewotICAgICAgICAgICAgICAgIG5v
ZGU6IG5vZGUsCi0gICAgICAgICAgICAgICAgc3RhcnQ6IG1ldGFkYXRhLnN0YXJ0Lm9mZnNldAot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIH07Ci0gICAgICAgIENvbW1lbnRIYW5kbGVyLnByb3Rv
dHlwZS52aXNpdENvbW1lbnQgPSBmdW5jdGlvbiAobm9kZSwgbWV0YWRhdGEpIHsKLSAgICAgICAg
ICAgIHZhciB0eXBlID0gKG5vZGUudHlwZVswXSA9PT0gJ0wnKSA/ICdMaW5lJyA6ICdCbG9jayc7
Ci0gICAgICAgICAgICB2YXIgY29tbWVudCA9IHsKLSAgICAgICAgICAgICAgICB0eXBlOiB0eXBl
LAotICAgICAgICAgICAgICAgIHZhbHVlOiBub2RlLnZhbHVlCi0gICAgICAgICAgICB9OwotICAg
ICAgICAgICAgaWYgKG5vZGUucmFuZ2UpIHsKLSAgICAgICAgICAgICAgICBjb21tZW50LnJhbmdl
ID0gbm9kZS5yYW5nZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlLmxvYykg
ewotICAgICAgICAgICAgICAgIGNvbW1lbnQubG9jID0gbm9kZS5sb2M7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICB0aGlzLmNvbW1lbnRzLnB1c2goY29tbWVudCk7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5hdHRhY2gpIHsKLSAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbW1lbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbm9kZS52YWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJhbmdlOiBbbWV0YWRhdGEuc3RhcnQub2Zmc2V0LCBtZXRhZGF0YS5l
bmQub2Zmc2V0XQotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBz
dGFydDogbWV0YWRhdGEuc3RhcnQub2Zmc2V0Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS5sb2MpIHsKLSAgICAgICAgICAgICAgICAgICAgZW50cnkuY29tbWVu
dC5sb2MgPSBub2RlLmxvYzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbm9k
ZS50eXBlID0gdHlwZTsKLSAgICAgICAgICAgICAgICB0aGlzLmxlYWRpbmcucHVzaChlbnRyeSk7
Ci0gICAgICAgICAgICAgICAgdGhpcy50cmFpbGluZy5wdXNoKGVudHJ5KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfTsKLSAgICAgICAgQ29tbWVudEhhbmRsZXIucHJvdG90eXBlLnZpc2l0ID0g
ZnVuY3Rpb24gKG5vZGUsIG1ldGFkYXRhKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS50eXBlID09
PSAnTGluZUNvbW1lbnQnKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy52aXNpdENvbW1lbnQobm9k
ZSwgbWV0YWRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobm9kZS50
eXBlID09PSAnQmxvY2tDb21tZW50JykgewotICAgICAgICAgICAgICAgIHRoaXMudmlzaXRDb21t
ZW50KG5vZGUsIG1ldGFkYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYg
KHRoaXMuYXR0YWNoKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZSwgbWV0
YWRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICByZXR1cm4gQ29tbWVu
dEhhbmRsZXI7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkNvbW1lbnRIYW5kbGVyID0gQ29tbWVu
dEhhbmRsZXI7CisJInVzZSBzdHJpY3QiOworCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRz
LCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CisJdmFyIHN5bnRheF8xID0gX193ZWJw
YWNrX3JlcXVpcmVfXygyKTsKKwl2YXIgQ29tbWVudEhhbmRsZXIgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIENvbW1lbnRIYW5kbGVyKCkgeworCSAgICAgICAg
dGhpcy5hdHRhY2ggPSBmYWxzZTsKKwkgICAgICAgIHRoaXMuY29tbWVudHMgPSBbXTsKKwkgICAg
ICAgIHRoaXMuc3RhY2sgPSBbXTsKKwkgICAgICAgIHRoaXMubGVhZGluZyA9IFtdOworCSAgICAg
ICAgdGhpcy50cmFpbGluZyA9IFtdOworCSAgICB9CisJICAgIENvbW1lbnRIYW5kbGVyLnByb3Rv
dHlwZS5pbnNlcnRJbm5lckNvbW1lbnRzID0gZnVuY3Rpb24gKG5vZGUsIG1ldGFkYXRhKSB7CisJ
ICAgICAgICAvLyAgaW5ubmVyQ29tbWVudHMgZm9yIHByb3BlcnRpZXMgZW1wdHkgYmxvY2sKKwkg
ICAgICAgIC8vICBgZnVuY3Rpb24gYSgpIHsvKiogY29tbWVudHMgKipcL31gCisJICAgICAgICBp
ZiAobm9kZS50eXBlID09PSBzeW50YXhfMS5TeW50YXguQmxvY2tTdGF0ZW1lbnQgJiYgbm9kZS5i
b2R5Lmxlbmd0aCA9PT0gMCkgeworCSAgICAgICAgICAgIHZhciBpbm5lckNvbW1lbnRzID0gW107
CisJICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGVhZGluZy5sZW5ndGggLSAxOyBpID49
IDA7IC0taSkgeworCSAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB0aGlzLmxlYWRpbmdbaV07
CisJICAgICAgICAgICAgICAgIGlmIChtZXRhZGF0YS5lbmQub2Zmc2V0ID49IGVudHJ5LnN0YXJ0
KSB7CisJICAgICAgICAgICAgICAgICAgICBpbm5lckNvbW1lbnRzLnVuc2hpZnQoZW50cnkuY29t
bWVudCk7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmxlYWRpbmcuc3BsaWNlKGksIDEpOwor
CSAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFpbGluZy5zcGxpY2UoaSwgMSk7CisJICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKGlubmVyQ29tbWVu
dHMubGVuZ3RoKSB7CisJICAgICAgICAgICAgICAgIG5vZGUuaW5uZXJDb21tZW50cyA9IGlubmVy
Q29tbWVudHM7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICB9OworCSAgICBDb21t
ZW50SGFuZGxlci5wcm90b3R5cGUuZmluZFRyYWlsaW5nQ29tbWVudHMgPSBmdW5jdGlvbiAobWV0
YWRhdGEpIHsKKwkgICAgICAgIHZhciB0cmFpbGluZ0NvbW1lbnRzID0gW107CisJICAgICAgICBp
ZiAodGhpcy50cmFpbGluZy5sZW5ndGggPiAwKSB7CisJICAgICAgICAgICAgZm9yICh2YXIgaSA9
IHRoaXMudHJhaWxpbmcubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKwkgICAgICAgICAgICAg
ICAgdmFyIGVudHJ5ID0gdGhpcy50cmFpbGluZ1tpXTsKKwkgICAgICAgICAgICAgICAgaWYgKGVu
dHJ5LnN0YXJ0ID49IG1ldGFkYXRhLmVuZC5vZmZzZXQpIHsKKwkgICAgICAgICAgICAgICAgICAg
IHRyYWlsaW5nQ29tbWVudHMudW5zaGlmdChlbnRyeS5jb21tZW50KTsKKwkgICAgICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB0aGlzLnRyYWlsaW5nLmxlbmd0aCA9
IDA7CisJICAgICAgICAgICAgcmV0dXJuIHRyYWlsaW5nQ29tbWVudHM7CisJICAgICAgICB9CisJ
ICAgICAgICB2YXIgbGFzdCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKKwkg
ICAgICAgIGlmIChsYXN0ICYmIGxhc3Qubm9kZS50cmFpbGluZ0NvbW1lbnRzKSB7CisJICAgICAg
ICAgICAgdmFyIGZpcnN0Q29tbWVudCA9IGxhc3Qubm9kZS50cmFpbGluZ0NvbW1lbnRzWzBdOwor
CSAgICAgICAgICAgIGlmIChmaXJzdENvbW1lbnQgJiYgZmlyc3RDb21tZW50LnJhbmdlWzBdID49
IG1ldGFkYXRhLmVuZC5vZmZzZXQpIHsKKwkgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50
cyA9IGxhc3Qubm9kZS50cmFpbGluZ0NvbW1lbnRzOworCSAgICAgICAgICAgICAgICBkZWxldGUg
bGFzdC5ub2RlLnRyYWlsaW5nQ29tbWVudHM7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQor
CSAgICAgICAgcmV0dXJuIHRyYWlsaW5nQ29tbWVudHM7CisJICAgIH07CisJICAgIENvbW1lbnRI
YW5kbGVyLnByb3RvdHlwZS5maW5kTGVhZGluZ0NvbW1lbnRzID0gZnVuY3Rpb24gKG1ldGFkYXRh
KSB7CisJICAgICAgICB2YXIgbGVhZGluZ0NvbW1lbnRzID0gW107CisJICAgICAgICB2YXIgdGFy
Z2V0OworCSAgICAgICAgd2hpbGUgKHRoaXMuc3RhY2subGVuZ3RoID4gMCkgeworCSAgICAgICAg
ICAgIHZhciBlbnRyeSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKKwkgICAg
ICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkuc3RhcnQgPj0gbWV0YWRhdGEuc3RhcnQub2Zmc2V0
KSB7CisJICAgICAgICAgICAgICAgIHRhcmdldCA9IGVudHJ5Lm5vZGU7CisJICAgICAgICAgICAg
ICAgIHRoaXMuc3RhY2sucG9wKCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2Ug
eworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJ
ICAgICAgICBpZiAodGFyZ2V0KSB7CisJICAgICAgICAgICAgdmFyIGNvdW50ID0gdGFyZ2V0Lmxl
YWRpbmdDb21tZW50cyA/IHRhcmdldC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIDogMDsKKwkgICAg
ICAgICAgICBmb3IgKHZhciBpID0gY291bnQgLSAxOyBpID49IDA7IC0taSkgeworCSAgICAgICAg
ICAgICAgICB2YXIgY29tbWVudCA9IHRhcmdldC5sZWFkaW5nQ29tbWVudHNbaV07CisJICAgICAg
ICAgICAgICAgIGlmIChjb21tZW50LnJhbmdlWzFdIDw9IG1ldGFkYXRhLnN0YXJ0Lm9mZnNldCkg
eworCSAgICAgICAgICAgICAgICAgICAgbGVhZGluZ0NvbW1lbnRzLnVuc2hpZnQoY29tbWVudCk7
CisJICAgICAgICAgICAgICAgICAgICB0YXJnZXQubGVhZGluZ0NvbW1lbnRzLnNwbGljZShpLCAx
KTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZiAo
dGFyZ2V0LmxlYWRpbmdDb21tZW50cyAmJiB0YXJnZXQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA9
PT0gMCkgeworCSAgICAgICAgICAgICAgICBkZWxldGUgdGFyZ2V0LmxlYWRpbmdDb21tZW50czsK
KwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgcmV0dXJuIGxlYWRpbmdDb21tZW50czsKKwkg
ICAgICAgIH0KKwkgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmxlYWRpbmcubGVuZ3RoIC0gMTsg
aSA+PSAwOyAtLWkpIHsKKwkgICAgICAgICAgICB2YXIgZW50cnkgPSB0aGlzLmxlYWRpbmdbaV07
CisJICAgICAgICAgICAgaWYgKGVudHJ5LnN0YXJ0IDw9IG1ldGFkYXRhLnN0YXJ0Lm9mZnNldCkg
eworCSAgICAgICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMudW5zaGlmdChlbnRyeS5jb21tZW50
KTsKKwkgICAgICAgICAgICAgICAgdGhpcy5sZWFkaW5nLnNwbGljZShpLCAxKTsKKwkgICAgICAg
ICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gbGVhZGluZ0NvbW1lbnRzOworCSAg
ICB9OworCSAgICBDb21tZW50SGFuZGxlci5wcm90b3R5cGUudmlzaXROb2RlID0gZnVuY3Rpb24g
KG5vZGUsIG1ldGFkYXRhKSB7CisJICAgICAgICBpZiAobm9kZS50eXBlID09PSBzeW50YXhfMS5T
eW50YXguUHJvZ3JhbSAmJiBub2RlLmJvZHkubGVuZ3RoID4gMCkgeworCSAgICAgICAgICAgIHJl
dHVybjsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuaW5zZXJ0SW5uZXJDb21tZW50cyhub2Rl
LCBtZXRhZGF0YSk7CisJICAgICAgICB2YXIgdHJhaWxpbmdDb21tZW50cyA9IHRoaXMuZmluZFRy
YWlsaW5nQ29tbWVudHMobWV0YWRhdGEpOworCSAgICAgICAgdmFyIGxlYWRpbmdDb21tZW50cyA9
IHRoaXMuZmluZExlYWRpbmdDb21tZW50cyhtZXRhZGF0YSk7CisJICAgICAgICBpZiAobGVhZGlu
Z0NvbW1lbnRzLmxlbmd0aCA+IDApIHsKKwkgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50
cyA9IGxlYWRpbmdDb21tZW50czsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmICh0cmFpbGluZ0Nv
bW1lbnRzLmxlbmd0aCA+IDApIHsKKwkgICAgICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMg
PSB0cmFpbGluZ0NvbW1lbnRzOworCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5zdGFjay5wdXNo
KHsKKwkgICAgICAgICAgICBub2RlOiBub2RlLAorCSAgICAgICAgICAgIHN0YXJ0OiBtZXRhZGF0
YS5zdGFydC5vZmZzZXQKKwkgICAgICAgIH0pOworCSAgICB9OworCSAgICBDb21tZW50SGFuZGxl
ci5wcm90b3R5cGUudmlzaXRDb21tZW50ID0gZnVuY3Rpb24gKG5vZGUsIG1ldGFkYXRhKSB7CisJ
ICAgICAgICB2YXIgdHlwZSA9IChub2RlLnR5cGVbMF0gPT09ICdMJykgPyAnTGluZScgOiAnQmxv
Y2snOworCSAgICAgICAgdmFyIGNvbW1lbnQgPSB7CisJICAgICAgICAgICAgdHlwZTogdHlwZSwK
KwkgICAgICAgICAgICB2YWx1ZTogbm9kZS52YWx1ZQorCSAgICAgICAgfTsKKwkgICAgICAgIGlm
IChub2RlLnJhbmdlKSB7CisJICAgICAgICAgICAgY29tbWVudC5yYW5nZSA9IG5vZGUucmFuZ2U7
CisJICAgICAgICB9CisJICAgICAgICBpZiAobm9kZS5sb2MpIHsKKwkgICAgICAgICAgICBjb21t
ZW50LmxvYyA9IG5vZGUubG9jOworCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5jb21tZW50cy5w
dXNoKGNvbW1lbnQpOworCSAgICAgICAgaWYgKHRoaXMuYXR0YWNoKSB7CisJICAgICAgICAgICAg
dmFyIGVudHJ5ID0geworCSAgICAgICAgICAgICAgICBjb21tZW50OiB7CisJICAgICAgICAgICAg
ICAgICAgICB0eXBlOiB0eXBlLAorCSAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5vZGUudmFs
dWUsCisJICAgICAgICAgICAgICAgICAgICByYW5nZTogW21ldGFkYXRhLnN0YXJ0Lm9mZnNldCwg
bWV0YWRhdGEuZW5kLm9mZnNldF0KKwkgICAgICAgICAgICAgICAgfSwKKwkgICAgICAgICAgICAg
ICAgc3RhcnQ6IG1ldGFkYXRhLnN0YXJ0Lm9mZnNldAorCSAgICAgICAgICAgIH07CisJICAgICAg
ICAgICAgaWYgKG5vZGUubG9jKSB7CisJICAgICAgICAgICAgICAgIGVudHJ5LmNvbW1lbnQubG9j
ID0gbm9kZS5sb2M7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIG5vZGUudHlwZSA9IHR5
cGU7CisJICAgICAgICAgICAgdGhpcy5sZWFkaW5nLnB1c2goZW50cnkpOworCSAgICAgICAgICAg
IHRoaXMudHJhaWxpbmcucHVzaChlbnRyeSk7CisJICAgICAgICB9CisJICAgIH07CisJICAgIENv
bW1lbnRIYW5kbGVyLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uIChub2RlLCBtZXRhZGF0YSkg
eworCSAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ0xpbmVDb21tZW50JykgeworCSAgICAgICAg
ICAgIHRoaXMudmlzaXRDb21tZW50KG5vZGUsIG1ldGFkYXRhKTsKKwkgICAgICAgIH0KKwkgICAg
ICAgIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ0Jsb2NrQ29tbWVudCcpIHsKKwkgICAgICAgICAg
ICB0aGlzLnZpc2l0Q29tbWVudChub2RlLCBtZXRhZGF0YSk7CisJICAgICAgICB9CisJICAgICAg
ICBlbHNlIGlmICh0aGlzLmF0dGFjaCkgeworCSAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5v
ZGUsIG1ldGFkYXRhKTsKKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgcmV0dXJuIENvbW1lbnRI
YW5kbGVyOworCX0oKSk7CisJZXhwb3J0cy5Db21tZW50SGFuZGxlciA9IENvbW1lbnRIYW5kbGVy
OwogCiAKIC8qKiovIH0sCiAvKiAyICovCiAvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMp
IHsKIAotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICBleHBvcnRzLlN5bnRheCA9IHsKLSAgICAgICAg
QXNzaWdubWVudEV4cHJlc3Npb246ICdBc3NpZ25tZW50RXhwcmVzc2lvbicsCi0gICAgICAgIEFz
c2lnbm1lbnRQYXR0ZXJuOiAnQXNzaWdubWVudFBhdHRlcm4nLAotICAgICAgICBBcnJheUV4cHJl
c3Npb246ICdBcnJheUV4cHJlc3Npb24nLAotICAgICAgICBBcnJheVBhdHRlcm46ICdBcnJheVBh
dHRlcm4nLAotICAgICAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogJ0Fycm93RnVuY3Rpb25F
eHByZXNzaW9uJywKLSAgICAgICAgQXdhaXRFeHByZXNzaW9uOiAnQXdhaXRFeHByZXNzaW9uJywK
LSAgICAgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsCi0gICAgICAgIEJpbmFy
eUV4cHJlc3Npb246ICdCaW5hcnlFeHByZXNzaW9uJywKLSAgICAgICAgQnJlYWtTdGF0ZW1lbnQ6
ICdCcmVha1N0YXRlbWVudCcsCi0gICAgICAgIENhbGxFeHByZXNzaW9uOiAnQ2FsbEV4cHJlc3Np
b24nLAotICAgICAgICBDYXRjaENsYXVzZTogJ0NhdGNoQ2xhdXNlJywKLSAgICAgICAgQ2xhc3NC
b2R5OiAnQ2xhc3NCb2R5JywKLSAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogJ0NsYXNzRGVjbGFy
YXRpb24nLAotICAgICAgICBDbGFzc0V4cHJlc3Npb246ICdDbGFzc0V4cHJlc3Npb24nLAotICAg
ICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246ICdDb25kaXRpb25hbEV4cHJlc3Npb24nLAotICAg
ICAgICBDb250aW51ZVN0YXRlbWVudDogJ0NvbnRpbnVlU3RhdGVtZW50JywKLSAgICAgICAgRG9X
aGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLAotICAgICAgICBEZWJ1Z2dlclN0YXRl
bWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JywKLSAgICAgICAgRW1wdHlTdGF0ZW1lbnQ6ICdFbXB0
eVN0YXRlbWVudCcsCi0gICAgICAgIEV4cG9ydEFsbERlY2xhcmF0aW9uOiAnRXhwb3J0QWxsRGVj
bGFyYXRpb24nLAotICAgICAgICBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb246ICdFeHBvcnREZWZh
dWx0RGVjbGFyYXRpb24nLAotICAgICAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiAnRXhwb3J0
TmFtZWREZWNsYXJhdGlvbicsCi0gICAgICAgIEV4cG9ydFNwZWNpZmllcjogJ0V4cG9ydFNwZWNp
ZmllcicsCi0gICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6ICdFeHByZXNzaW9uU3RhdGVtZW50
JywKLSAgICAgICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVtZW50JywKLSAgICAgICAgRm9yT2ZT
dGF0ZW1lbnQ6ICdGb3JPZlN0YXRlbWVudCcsCi0gICAgICAgIEZvckluU3RhdGVtZW50OiAnRm9y
SW5TdGF0ZW1lbnQnLAotICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVuY3Rpb25EZWNs
YXJhdGlvbicsCi0gICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lv
bicsCi0gICAgICAgIElkZW50aWZpZXI6ICdJZGVudGlmaWVyJywKLSAgICAgICAgSWZTdGF0ZW1l
bnQ6ICdJZlN0YXRlbWVudCcsCi0gICAgICAgIEltcG9ydDogJ0ltcG9ydCcsCi0gICAgICAgIElt
cG9ydERlY2xhcmF0aW9uOiAnSW1wb3J0RGVjbGFyYXRpb24nLAotICAgICAgICBJbXBvcnREZWZh
dWx0U3BlY2lmaWVyOiAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicsCi0gICAgICAgIEltcG9ydE5h
bWVzcGFjZVNwZWNpZmllcjogJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicsCi0gICAgICAgIElt
cG9ydFNwZWNpZmllcjogJ0ltcG9ydFNwZWNpZmllcicsCi0gICAgICAgIExpdGVyYWw6ICdMaXRl
cmFsJywKLSAgICAgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLAotICAg
ICAgICBMb2dpY2FsRXhwcmVzc2lvbjogJ0xvZ2ljYWxFeHByZXNzaW9uJywKLSAgICAgICAgTWVt
YmVyRXhwcmVzc2lvbjogJ01lbWJlckV4cHJlc3Npb24nLAotICAgICAgICBNZXRhUHJvcGVydHk6
ICdNZXRhUHJvcGVydHknLAotICAgICAgICBNZXRob2REZWZpbml0aW9uOiAnTWV0aG9kRGVmaW5p
dGlvbicsCi0gICAgICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJywKLSAgICAgICAg
T2JqZWN0RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLAotICAgICAgICBPYmplY3RQYXR0
ZXJuOiAnT2JqZWN0UGF0dGVybicsCi0gICAgICAgIFByb2dyYW06ICdQcm9ncmFtJywKLSAgICAg
ICAgUHJvcGVydHk6ICdQcm9wZXJ0eScsCi0gICAgICAgIFJlc3RFbGVtZW50OiAnUmVzdEVsZW1l
bnQnLAotICAgICAgICBSZXN0UHJvcGVydHk6ICdSZXN0UHJvcGVydHknLAotICAgICAgICBSZXR1
cm5TdGF0ZW1lbnQ6ICdSZXR1cm5TdGF0ZW1lbnQnLAotICAgICAgICBTZXF1ZW5jZUV4cHJlc3Np
b246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLAotICAgICAgICBTcHJlYWRFbGVtZW50OiAnU3ByZWFk
RWxlbWVudCcsCi0gICAgICAgIFNwcmVhZFByb3BlcnR5OiAnU3ByZWFkUHJvcGVydHknLAotICAg
ICAgICBTdXBlcjogJ1N1cGVyJywKLSAgICAgICAgU3dpdGNoQ2FzZTogJ1N3aXRjaENhc2UnLAot
ICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0Y2hTdGF0ZW1lbnQnLAotICAgICAgICBUYWdn
ZWRUZW1wbGF0ZUV4cHJlc3Npb246ICdUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24nLAotICAgICAg
ICBUZW1wbGF0ZUVsZW1lbnQ6ICdUZW1wbGF0ZUVsZW1lbnQnLAotICAgICAgICBUZW1wbGF0ZUxp
dGVyYWw6ICdUZW1wbGF0ZUxpdGVyYWwnLAotICAgICAgICBUaGlzRXhwcmVzc2lvbjogJ1RoaXNF
eHByZXNzaW9uJywKLSAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6ICdUaHJvd1N0YXRlbWVudCcsCi0g
ICAgICAgIFRyeVN0YXRlbWVudDogJ1RyeVN0YXRlbWVudCcsCi0gICAgICAgIFVuYXJ5RXhwcmVz
c2lvbjogJ1VuYXJ5RXhwcmVzc2lvbicsCi0gICAgICAgIFVwZGF0ZUV4cHJlc3Npb246ICdVcGRh
dGVFeHByZXNzaW9uJywKLSAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjogJ1ZhcmlhYmxlRGVj
bGFyYXRpb24nLAotICAgICAgICBWYXJpYWJsZURlY2xhcmF0b3I6ICdWYXJpYWJsZURlY2xhcmF0
b3InLAotICAgICAgICBXaGlsZVN0YXRlbWVudDogJ1doaWxlU3RhdGVtZW50JywKLSAgICAgICAg
V2l0aFN0YXRlbWVudDogJ1dpdGhTdGF0ZW1lbnQnLAotICAgICAgICBZaWVsZEV4cHJlc3Npb246
ICdZaWVsZEV4cHJlc3Npb24nCi0gICAgfTsKKwkidXNlIHN0cmljdCI7CisJT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKKwlleHBv
cnRzLlN5bnRheCA9IHsKKwkgICAgQXNzaWdubWVudEV4cHJlc3Npb246ICdBc3NpZ25tZW50RXhw
cmVzc2lvbicsCisJICAgIEFzc2lnbm1lbnRQYXR0ZXJuOiAnQXNzaWdubWVudFBhdHRlcm4nLAor
CSAgICBBcnJheUV4cHJlc3Npb246ICdBcnJheUV4cHJlc3Npb24nLAorCSAgICBBcnJheVBhdHRl
cm46ICdBcnJheVBhdHRlcm4nLAorCSAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogJ0Fycm93
RnVuY3Rpb25FeHByZXNzaW9uJywKKwkgICAgQXdhaXRFeHByZXNzaW9uOiAnQXdhaXRFeHByZXNz
aW9uJywKKwkgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsCisJICAgIEJpbmFy
eUV4cHJlc3Npb246ICdCaW5hcnlFeHByZXNzaW9uJywKKwkgICAgQnJlYWtTdGF0ZW1lbnQ6ICdC
cmVha1N0YXRlbWVudCcsCisJICAgIENhbGxFeHByZXNzaW9uOiAnQ2FsbEV4cHJlc3Npb24nLAor
CSAgICBDYXRjaENsYXVzZTogJ0NhdGNoQ2xhdXNlJywKKwkgICAgQ2xhc3NCb2R5OiAnQ2xhc3NC
b2R5JywKKwkgICAgQ2xhc3NEZWNsYXJhdGlvbjogJ0NsYXNzRGVjbGFyYXRpb24nLAorCSAgICBD
bGFzc0V4cHJlc3Npb246ICdDbGFzc0V4cHJlc3Npb24nLAorCSAgICBDb25kaXRpb25hbEV4cHJl
c3Npb246ICdDb25kaXRpb25hbEV4cHJlc3Npb24nLAorCSAgICBDb250aW51ZVN0YXRlbWVudDog
J0NvbnRpbnVlU3RhdGVtZW50JywKKwkgICAgRG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0
ZW1lbnQnLAorCSAgICBEZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JywKKwkg
ICAgRW1wdHlTdGF0ZW1lbnQ6ICdFbXB0eVN0YXRlbWVudCcsCisJICAgIEV4cG9ydEFsbERlY2xh
cmF0aW9uOiAnRXhwb3J0QWxsRGVjbGFyYXRpb24nLAorCSAgICBFeHBvcnREZWZhdWx0RGVjbGFy
YXRpb246ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nLAorCSAgICBFeHBvcnROYW1lZERlY2xh
cmF0aW9uOiAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbicsCisJICAgIEV4cG9ydFNwZWNpZmllcjog
J0V4cG9ydFNwZWNpZmllcicsCisJICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6ICdFeHByZXNzaW9u
U3RhdGVtZW50JywKKwkgICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVtZW50JywKKwkgICAgRm9y
T2ZTdGF0ZW1lbnQ6ICdGb3JPZlN0YXRlbWVudCcsCisJICAgIEZvckluU3RhdGVtZW50OiAnRm9y
SW5TdGF0ZW1lbnQnLAorCSAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVuY3Rpb25EZWNsYXJh
dGlvbicsCisJICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsCisJ
ICAgIElkZW50aWZpZXI6ICdJZGVudGlmaWVyJywKKwkgICAgSWZTdGF0ZW1lbnQ6ICdJZlN0YXRl
bWVudCcsCisJICAgIEltcG9ydDogJ0ltcG9ydCcsCisJICAgIEltcG9ydERlY2xhcmF0aW9uOiAn
SW1wb3J0RGVjbGFyYXRpb24nLAorCSAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiAnSW1wb3J0
RGVmYXVsdFNwZWNpZmllcicsCisJICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogJ0ltcG9y
dE5hbWVzcGFjZVNwZWNpZmllcicsCisJICAgIEltcG9ydFNwZWNpZmllcjogJ0ltcG9ydFNwZWNp
ZmllcicsCisJICAgIExpdGVyYWw6ICdMaXRlcmFsJywKKwkgICAgTGFiZWxlZFN0YXRlbWVudDog
J0xhYmVsZWRTdGF0ZW1lbnQnLAorCSAgICBMb2dpY2FsRXhwcmVzc2lvbjogJ0xvZ2ljYWxFeHBy
ZXNzaW9uJywKKwkgICAgTWVtYmVyRXhwcmVzc2lvbjogJ01lbWJlckV4cHJlc3Npb24nLAorCSAg
ICBNZXRhUHJvcGVydHk6ICdNZXRhUHJvcGVydHknLAorCSAgICBNZXRob2REZWZpbml0aW9uOiAn
TWV0aG9kRGVmaW5pdGlvbicsCisJICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJywK
KwkgICAgT2JqZWN0RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLAorCSAgICBPYmplY3RQ
YXR0ZXJuOiAnT2JqZWN0UGF0dGVybicsCisJICAgIFByb2dyYW06ICdQcm9ncmFtJywKKwkgICAg
UHJvcGVydHk6ICdQcm9wZXJ0eScsCisJICAgIFJlc3RFbGVtZW50OiAnUmVzdEVsZW1lbnQnLAor
CSAgICBSZXR1cm5TdGF0ZW1lbnQ6ICdSZXR1cm5TdGF0ZW1lbnQnLAorCSAgICBTZXF1ZW5jZUV4
cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLAorCSAgICBTcHJlYWRFbGVtZW50OiAnU3By
ZWFkRWxlbWVudCcsCisJICAgIFN1cGVyOiAnU3VwZXInLAorCSAgICBTd2l0Y2hDYXNlOiAnU3dp
dGNoQ2FzZScsCisJICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsCisJICAg
IFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjogJ1RhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbicsCisJ
ICAgIFRlbXBsYXRlRWxlbWVudDogJ1RlbXBsYXRlRWxlbWVudCcsCisJICAgIFRlbXBsYXRlTGl0
ZXJhbDogJ1RlbXBsYXRlTGl0ZXJhbCcsCisJICAgIFRoaXNFeHByZXNzaW9uOiAnVGhpc0V4cHJl
c3Npb24nLAorCSAgICBUaHJvd1N0YXRlbWVudDogJ1Rocm93U3RhdGVtZW50JywKKwkgICAgVHJ5
U3RhdGVtZW50OiAnVHJ5U3RhdGVtZW50JywKKwkgICAgVW5hcnlFeHByZXNzaW9uOiAnVW5hcnlF
eHByZXNzaW9uJywKKwkgICAgVXBkYXRlRXhwcmVzc2lvbjogJ1VwZGF0ZUV4cHJlc3Npb24nLAor
CSAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiAnVmFyaWFibGVEZWNsYXJhdGlvbicsCisJICAgIFZh
cmlhYmxlRGVjbGFyYXRvcjogJ1ZhcmlhYmxlRGVjbGFyYXRvcicsCisJICAgIFdoaWxlU3RhdGVt
ZW50OiAnV2hpbGVTdGF0ZW1lbnQnLAorCSAgICBXaXRoU3RhdGVtZW50OiAnV2l0aFN0YXRlbWVu
dCcsCisJICAgIFlpZWxkRXhwcmVzc2lvbjogJ1lpZWxkRXhwcmVzc2lvbicKKwl9OwogCiAKIC8q
KiovIH0sCiAvKiAzICovCiAvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKIAotICAgICJ1c2Ugc3RyaWN0IjsKKwkidXNlIHN0cmljdCI7CiAvKiBp
c3RhbmJ1bCBpZ25vcmUgbmV4dCAqLwotICAgIHZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlz
Ll9fZXh0ZW5kcykgfHwgZnVuY3Rpb24gKGQsIGIpIHsKLSAgICAgICAgZm9yICh2YXIgcCBpbiBi
KSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07Ci0gICAgICAgIGZ1bmN0aW9u
IF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfQotICAgICAgICBkLnByb3RvdHlwZSA9IGIg
PT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBl
LCBuZXcgX18oKSk7Ci0gICAgfTsKLSAgICB2YXIgY2hhcmFjdGVyXzEgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDQpOwotICAgIHZhciBKU1hOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKLSAg
ICB2YXIganN4X3N5bnRheF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKLSAgICB2YXIgTm9k
ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7Ci0gICAgdmFyIHBhcnNlcl8xID0gX193ZWJwYWNr
X3JlcXVpcmVfXyg4KTsKLSAgICB2YXIgdG9rZW5fMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMp
OwotICAgIHZhciB4aHRtbF9lbnRpdGllc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7Ci0g
ICAgdG9rZW5fMS5Ub2tlbk5hbWVbMTAwIC8qIElkZW50aWZpZXIgKi9dID0gJ0pTWElkZW50aWZp
ZXInOwotICAgIHRva2VuXzEuVG9rZW5OYW1lWzEwMSAvKiBUZXh0ICovXSA9ICdKU1hUZXh0JzsK
LSAgICAvLyBGdWxseSBxdWFsaWZpZWQgZWxlbWVudCBuYW1lLCBlLmcuIDxzdmc6cGF0aD4gcmV0
dXJucyAic3ZnOnBhdGgiCi0gICAgZnVuY3Rpb24gZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUoZWxl
bWVudE5hbWUpIHsKLSAgICAgICAgdmFyIHF1YWxpZmllZE5hbWU7Ci0gICAgICAgIHN3aXRjaCAo
ZWxlbWVudE5hbWUudHlwZSkgewotICAgICAgICAgICAgY2FzZSBqc3hfc3ludGF4XzEuSlNYU3lu
dGF4LkpTWElkZW50aWZpZXI6Ci0gICAgICAgICAgICAgICAgdmFyIGlkID0gZWxlbWVudE5hbWU7
Ci0gICAgICAgICAgICAgICAgcXVhbGlmaWVkTmFtZSA9IGlkLm5hbWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYTmFt
ZXNwYWNlZE5hbWU6Ci0gICAgICAgICAgICAgICAgdmFyIG5zID0gZWxlbWVudE5hbWU7Ci0gICAg
ICAgICAgICAgICAgcXVhbGlmaWVkTmFtZSA9IGdldFF1YWxpZmllZEVsZW1lbnROYW1lKG5zLm5h
bWVzcGFjZSkgKyAnOicgKwotICAgICAgICAgICAgICAgICAgICBnZXRRdWFsaWZpZWRFbGVtZW50
TmFtZShucy5uYW1lKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
anN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hNZW1iZXJFeHByZXNzaW9uOgotICAgICAgICAgICAg
ICAgIHZhciBleHByID0gZWxlbWVudE5hbWU7Ci0gICAgICAgICAgICAgICAgcXVhbGlmaWVkTmFt
ZSA9IGdldFF1YWxpZmllZEVsZW1lbnROYW1lKGV4cHIub2JqZWN0KSArICcuJyArCi0gICAgICAg
ICAgICAgICAgICAgIGdldFF1YWxpZmllZEVsZW1lbnROYW1lKGV4cHIucHJvcGVydHkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQg
Ki8KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHF1YWxpZmllZE5hbWU7Ci0gICAgfQotICAgIHZhciBKU1hQYXJz
ZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikgewotICAgICAgICBfX2V4dGVuZHMoSlNYUGFyc2VyLCBf
c3VwZXIpOwotICAgICAgICBmdW5jdGlvbiBKU1hQYXJzZXIoY29kZSwgb3B0aW9ucywgZGVsZWdh
dGUpIHsKLSAgICAgICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBjb2RlLCBvcHRpb25z
LCBkZWxlZ2F0ZSkgfHwgdGhpczsKLSAgICAgICAgfQotICAgICAgICBKU1hQYXJzZXIucHJvdG90
eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gdGhpcy5tYXRjaCgnPCcpID8gdGhpcy5wYXJzZUpTWFJvb3QoKSA6IF9zdXBlci5wcm90
b3R5cGUucGFyc2VQcmltYXJ5RXhwcmVzc2lvbi5jYWxsKHRoaXMpOwotICAgICAgICB9OwotICAg
ICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnN0YXJ0SlNYID0gZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgLy8gVW53aW5kIHRoZSBzY2FubmVyIGJlZm9yZSB0aGUgbG9va2FoZWFkIHRva2VuLgot
ICAgICAgICAgICAgdGhpcy5zY2FubmVyLmluZGV4ID0gdGhpcy5zdGFydE1hcmtlci5pbmRleDsK
LSAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyID0gdGhpcy5zdGFydE1hcmtlci5s
aW5lOwotICAgICAgICAgICAgdGhpcy5zY2FubmVyLmxpbmVTdGFydCA9IHRoaXMuc3RhcnRNYXJr
ZXIuaW5kZXggLSB0aGlzLnN0YXJ0TWFya2VyLmNvbHVtbjsKLSAgICAgICAgfTsKLSAgICAgICAg
SlNYUGFyc2VyLnByb3RvdHlwZS5maW5pc2hKU1ggPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICAvLyBQcmltZSB0aGUgbmV4dCBsb29rYWhlYWQuCi0gICAgICAgICAgICB0aGlzLm5leHRUb2tl
bigpOwotICAgICAgICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnJlZW50ZXJKU1gg
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB0aGlzLnN0YXJ0SlNYKCk7Ci0gICAgICAgICAg
ICB0aGlzLmV4cGVjdEpTWCgnfScpOwotICAgICAgICAgICAgLy8gUG9wIHRoZSBjbG9zaW5nICd9
JyBhZGRlZCBmcm9tIHRoZSBsb29rYWhlYWQuCi0gICAgICAgICAgICBpZiAodGhpcy5jb25maWcu
dG9rZW5zKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50b2tlbnMucG9wKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUuY3JlYXRlSlNYTm9k
ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMuY29sbGVjdENvbW1lbnRzKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLnNjYW5uZXIu
aW5kZXgsCi0gICAgICAgICAgICAgICAgbGluZTogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCi0g
ICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLnNjYW5uZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIu
bGluZVN0YXJ0Ci0gICAgICAgICAgICB9OwotICAgICAgICB9OwotICAgICAgICBKU1hQYXJzZXIu
cHJvdG90eXBlLmNyZWF0ZUpTWENoaWxkTm9kZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAg
IHJldHVybiB7Ci0gICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuc2Nhbm5lci5pbmRleCwKLSAg
ICAgICAgICAgICAgICBsaW5lOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwKLSAgICAgICAgICAg
ICAgICBjb2x1bW46IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQK
LSAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUu
c2NhblhIVE1MRW50aXR5ID0gZnVuY3Rpb24gKHF1b3RlKSB7Ci0gICAgICAgICAgICB2YXIgcmVz
dWx0ID0gJyYnOwotICAgICAgICAgICAgdmFyIHZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgIHZh
ciB0ZXJtaW5hdGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgbnVtZXJpYyA9IGZhbHNlOwot
ICAgICAgICAgICAgdmFyIGhleCA9IGZhbHNlOwotICAgICAgICAgICAgd2hpbGUgKCF0aGlzLnNj
YW5uZXIuZW9mKCkgJiYgdmFsaWQgJiYgIXRlcm1pbmF0ZWQpIHsKLSAgICAgICAgICAgICAgICB2
YXIgY2ggPSB0aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleF07Ci0gICAgICAg
ICAgICAgICAgaWYgKGNoID09PSBxdW90ZSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IChjaCA9PT0g
JzsnKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2g7Ci0gICAgICAgICAgICAgICAgKyt0
aGlzLnNjYW5uZXIuaW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXJtaW5hdGVkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0Lmxlbmd0aCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGUuZy4g
JyYjMTIzOycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljID0gKGNoID09PSAn
IycpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1lcmlj
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGUuZy4gJyYjeDQxOycKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4ID0gKGNoID09PSAneCcpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGhleCB8fCBjaGFyYWN0ZXJfMS5DaGFy
YWN0ZXIuaXNEZWNpbWFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG51bWVyaWMgPSBudW1lcmljICYmICFoZXg7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZCA9IHZhbGlkICYmICEobnVtZXJpYyAmJiAhY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlz
RGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWxpZCA9IHZhbGlkICYmICEoaGV4ICYmICFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNI
ZXhEaWdpdChjaC5jaGFyQ29kZUF0KDApKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAodmFsaWQgJiYgdGVybWluYXRlZCAmJiByZXN1bHQubGVu
Z3RoID4gMikgewotICAgICAgICAgICAgICAgIC8vIGUuZy4gJyYjeDQxOycgYmVjb21lcyBqdXN0
ICcjeDQxJwotICAgICAgICAgICAgICAgIHZhciBzdHIgPSByZXN1bHQuc3Vic3RyKDEsIHJlc3Vs
dC5sZW5ndGggLSAyKTsKLSAgICAgICAgICAgICAgICBpZiAobnVtZXJpYyAmJiBzdHIubGVuZ3Ro
ID4gMSkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBTdHJpbmcuZnJvbUNoYXJDb2Rl
KHBhcnNlSW50KHN0ci5zdWJzdHIoMSksIDEwKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGhleCAmJiBzdHIubGVuZ3RoID4gMikgewotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KCcwJyArIHN0ci5z
dWJzdHIoMSksIDE2KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKCFudW1lcmljICYmICFoZXggJiYgeGh0bWxfZW50aXRpZXNfMS5YSFRNTEVudGl0aWVzW3N0
cl0pIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0geGh0bWxfZW50aXRpZXNfMS5YSFRN
TEVudGl0aWVzW3N0cl07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gU2NhbiB0aGUgbmV4
dCBKU1ggdG9rZW4uIFRoaXMgcmVwbGFjZXMgU2Nhbm5lciNsZXggd2hlbiBpbiBKU1ggbW9kZS4K
LSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5sZXhKU1ggPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgY3AgPSB0aGlzLnNjYW5uZXIuc291cmNlLmNoYXJDb2RlQXQodGhpcy5zY2Fu
bmVyLmluZGV4KTsKLSAgICAgICAgICAgIC8vIDwgPiAvIDogPSB7IH0KLSAgICAgICAgICAgIGlm
IChjcCA9PT0gNjAgfHwgY3AgPT09IDYyIHx8IGNwID09PSA0NyB8fCBjcCA9PT0gNTggfHwgY3Ag
PT09IDYxIHx8IGNwID09PSAxMjMgfHwgY3AgPT09IDEyNSkgewotICAgICAgICAgICAgICAgIHZh
ciB2YWx1ZSA9IHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4KytdOwotICAg
ICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGU6IDcgLyogUHVu
Y3R1YXRvciAqLywKLSAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAotICAgICAgICAg
ICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwKLSAgICAgICAg
ICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLnNjYW5uZXIubGluZVN0YXJ0LAotICAgICAgICAg
ICAgICAgICAgICBzdGFydDogdGhpcy5zY2FubmVyLmluZGV4IC0gMSwKLSAgICAgICAgICAgICAg
ICAgICAgZW5kOiB0aGlzLnNjYW5uZXIuaW5kZXgKLSAgICAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgLy8gIiAnCi0gICAgICAgICAgICBpZiAoY3AgPT09IDM0IHx8
IGNwID09PSAzOSkgewotICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuc2Nhbm5lci5p
bmRleDsKLSAgICAgICAgICAgICAgICB2YXIgcXVvdGUgPSB0aGlzLnNjYW5uZXIuc291cmNlW3Ro
aXMuc2Nhbm5lci5pbmRleCsrXTsKLSAgICAgICAgICAgICAgICB2YXIgc3RyID0gJyc7Ci0gICAg
ICAgICAgICAgICAgd2hpbGUgKCF0aGlzLnNjYW5uZXIuZW9mKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGNoID0gdGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXgrK107
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGNoID09PSAnJicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSB0aGlzLnNjYW5YSFRNTEVudGl0eShxdW90ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0g
Y2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogOCAvKiBTdHJpbmdMaXRl
cmFsICovLAotICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyLAotICAgICAgICAgICAgICAg
ICAgICBsaW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwKLSAgICAgICAgICAgICAg
ICAgICAgbGluZVN0YXJ0OiB0aGlzLnNjYW5uZXIubGluZVN0YXJ0LAotICAgICAgICAgICAgICAg
ICAgICBzdGFydDogc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgIGVuZDogdGhpcy5zY2FubmVy
LmluZGV4Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8v
IC4uLiBvciAuCi0gICAgICAgICAgICBpZiAoY3AgPT09IDQ2KSB7Ci0gICAgICAgICAgICAgICAg
dmFyIG4xID0gdGhpcy5zY2FubmVyLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuc2Nhbm5lci5pbmRl
eCArIDEpOwotICAgICAgICAgICAgICAgIHZhciBuMiA9IHRoaXMuc2Nhbm5lci5zb3VyY2UuY2hh
ckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5kZXggKyAyKTsKLSAgICAgICAgICAgICAgICB2YXIgdmFs
dWUgPSAobjEgPT09IDQ2ICYmIG4yID09PSA0NikgPyAnLi4uJyA6ICcuJzsKLSAgICAgICAgICAg
ICAgICB2YXIgc3RhcnQgPSB0aGlzLnNjYW5uZXIuaW5kZXg7Ci0gICAgICAgICAgICAgICAgdGhp
cy5zY2FubmVyLmluZGV4ICs9IHZhbHVlLmxlbmd0aDsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ewotICAgICAgICAgICAgICAgICAgICB0eXBlOiA3IC8qIFB1bmN0dWF0b3IgKi8sCi0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgbGluZU51bWJl
cjogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgIGxpbmVTdGFy
dDogdGhpcy5zY2FubmVyLmxpbmVTdGFydCwKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0
YXJ0LAotICAgICAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuc2Nhbm5lci5pbmRleAotICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBgCi0gICAgICAgICAg
ICBpZiAoY3AgPT09IDk2KSB7Ci0gICAgICAgICAgICAgICAgLy8gT25seSBwbGFjZWhvbGRlciwg
c2luY2UgaXQgd2lsbCBiZSByZXNjYW5uZWQgYXMgYSByZWFsIGFzc2lnbm1lbnQgZXhwcmVzc2lv
bi4KLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICB0eXBlOiAx
MCAvKiBUZW1wbGF0ZSAqLywKLSAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcnLAotICAgICAg
ICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwKLSAgICAg
ICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLnNjYW5uZXIubGluZVN0YXJ0LAotICAgICAg
ICAgICAgICAgICAgICBzdGFydDogdGhpcy5zY2FubmVyLmluZGV4LAotICAgICAgICAgICAgICAg
ICAgICBlbmQ6IHRoaXMuc2Nhbm5lci5pbmRleAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAvLyBJZGVudGlmZXIgY2FuIG5vdCBjb250YWluIGJhY2tzbGFz
aCAoY2hhciBjb2RlIDkyKS4KLSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIu
aXNJZGVudGlmaWVyU3RhcnQoY3ApICYmIChjcCAhPT0gOTIpKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHN0YXJ0ID0gdGhpcy5zY2FubmVyLmluZGV4OwotICAgICAgICAgICAgICAgICsrdGhpcy5z
Y2FubmVyLmluZGV4OwotICAgICAgICAgICAgICAgIHdoaWxlICghdGhpcy5zY2FubmVyLmVvZigp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc2Nhbm5lci5zb3VyY2UuY2hh
ckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hh
cmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQoY2gpICYmIChjaCAhPT0gOTIpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMuc2Nhbm5lci5pbmRleDsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gNDUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEh5cGhlbiAoY2hhciBjb2RlIDQ1KSBjYW4gYmUg
cGFydCBvZiBhbiBpZGVudGlmaWVyLgotICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLnNj
YW5uZXIuaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLnNj
YW5uZXIuc291cmNlLnNsaWNlKHN0YXJ0LCB0aGlzLnNjYW5uZXIuaW5kZXgpOwotICAgICAgICAg
ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGU6IDEwMCAvKiBJZGVudGlm
aWVyICovLAotICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaWQsCi0gICAgICAgICAgICAgICAg
ICAgIGxpbmVOdW1iZXI6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLAotICAgICAgICAgICAgICAg
ICAgICBsaW5lU3RhcnQ6IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQsCi0gICAgICAgICAgICAgICAg
ICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgZW5kOiB0aGlzLnNjYW5uZXIu
aW5kZXgKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHRoaXMuc2Nhbm5lci50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICB9OwotICAg
ICAgICBKU1hQYXJzZXIucHJvdG90eXBlLm5leHRKU1hUb2tlbiA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHRoaXMuY29sbGVjdENvbW1lbnRzKCk7Ci0gICAgICAgICAgICB0aGlzLnN0YXJ0
TWFya2VyLmluZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4OwotICAgICAgICAgICAgdGhpcy5zdGFy
dE1hcmtlci5saW5lID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7Ci0gICAgICAgICAgICB0aGlz
LnN0YXJ0TWFya2VyLmNvbHVtbiA9IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5s
aW5lU3RhcnQ7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxleEpTWCgpOwotICAgICAg
ICAgICAgdGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4OwotICAgICAg
ICAgICAgdGhpcy5sYXN0TWFya2VyLmxpbmUgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjsKLSAg
ICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5jb2x1bW4gPSB0aGlzLnNjYW5uZXIuaW5kZXggLSB0
aGlzLnNjYW5uZXIubGluZVN0YXJ0OwotICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnRva2Vu
cykgewotICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2godGhpcy5jb252ZXJ0VG9rZW4o
dG9rZW4pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0b2tlbjsKLSAgICAg
ICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5uZXh0SlNYVGV4dCA9IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIu
aW5kZXg7Ci0gICAgICAgICAgICB0aGlzLnN0YXJ0TWFya2VyLmxpbmUgPSB0aGlzLnNjYW5uZXIu
bGluZU51bWJlcjsKLSAgICAgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIuY29sdW1uID0gdGhpcy5z
Y2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKLSAgICAgICAgICAgIHZhciBz
dGFydCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKLSAgICAgICAgICAgIHZhciB0ZXh0ID0gJyc7Ci0g
ICAgICAgICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2YoKSkgewotICAgICAgICAgICAgICAg
IHZhciBjaCA9IHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XTsKLSAgICAg
ICAgICAgICAgICBpZiAoY2ggPT09ICd7JyB8fCBjaCA9PT0gJzwnKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK3RoaXMu
c2Nhbm5lci5pbmRleDsKLSAgICAgICAgICAgICAgICB0ZXh0ICs9IGNoOwotICAgICAgICAgICAg
ICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29k
ZUF0KDApKSkgewotICAgICAgICAgICAgICAgICAgICArK3RoaXMuc2Nhbm5lci5saW5lTnVtYmVy
OwotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdccicgJiYgdGhpcy5zY2FubmVyLnNv
dXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdID09PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICArK3RoaXMuc2Nhbm5lci5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB0aGlzLnNjYW5uZXIubGluZVN0YXJ0ID0gdGhpcy5zY2FubmVyLmluZGV4
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMubGFz
dE1hcmtlci5pbmRleCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKLSAgICAgICAgICAgIHRoaXMubGFz
dE1hcmtlci5saW5lID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7Ci0gICAgICAgICAgICB0aGlz
Lmxhc3RNYXJrZXIuY29sdW1uID0gdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxp
bmVTdGFydDsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHsKLSAgICAgICAgICAgICAgICB0eXBl
OiAxMDEgLyogVGV4dCAqLywKLSAgICAgICAgICAgICAgICB2YWx1ZTogdGV4dCwKLSAgICAgICAg
ICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwKLSAgICAgICAgICAg
ICAgICBsaW5lU3RhcnQ6IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQsCi0gICAgICAgICAgICAgICAg
c3RhcnQ6IHN0YXJ0LAotICAgICAgICAgICAgICAgIGVuZDogdGhpcy5zY2FubmVyLmluZGV4Ci0g
ICAgICAgICAgICB9OwotICAgICAgICAgICAgaWYgKCh0ZXh0Lmxlbmd0aCA+IDApICYmIHRoaXMu
Y29uZmlnLnRva2VucykgewotICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2godGhpcy5j
b252ZXJ0VG9rZW4odG9rZW4pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0
b2tlbjsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wZWVrSlNYVG9r
ZW4gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnNjYW5uZXIu
c2F2ZVN0YXRlKCk7Ci0gICAgICAgICAgICB0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7Ci0g
ICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMubGV4SlNYKCk7Ci0gICAgICAgICAgICB0aGlzLnNj
YW5uZXIucmVzdG9yZVN0YXRlKHN0YXRlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXh0OwotICAg
ICAgICB9OwotICAgICAgICAvLyBFeHBlY3QgdGhlIG5leHQgSlNYIHRva2VuIHRvIG1hdGNoIHRo
ZSBzcGVjaWZpZWQgcHVuY3R1YXRvci4KLSAgICAgICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24g
d2lsbCBiZSB0aHJvd24uCi0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUuZXhwZWN0SlNYID0g
ZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRKU1hU
b2tlbigpOwotICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IDcgLyogUHVuY3R1YXRvciAq
LyB8fCB0b2tlbi52YWx1ZSAhPT0gdmFsdWUpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKHRva2VuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAg
ICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgSlNYIHRva2VuIG1hdGNoZXMgdGhlIHNwZWNp
ZmllZCBwdW5jdHVhdG9yLgotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLm1hdGNoSlNYID0g
ZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMucGVla0pTWFRv
a2VuKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV4dC50eXBlID09PSA3IC8qIFB1bmN0dWF0b3Ig
Ki8gJiYgbmV4dC52YWx1ZSA9PT0gdmFsdWU7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNl
ci5wcm90b3R5cGUucGFyc2VKU1hJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAg
ICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKLSAgICAgICAgICAgIHZhciB0b2tl
biA9IHRoaXMubmV4dEpTWFRva2VuKCk7Ci0gICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0g
MTAwIC8qIElkZW50aWZpZXIgKi8pIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBl
Y3RlZFRva2VuKHRva2VuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWElkZW50aWZpZXIodG9rZW4udmFsdWUpKTsK
LSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEVsZW1lbnRO
YW1lID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpT
WE5vZGUoKTsKLSAgICAgICAgICAgIHZhciBlbGVtZW50TmFtZSA9IHRoaXMucGFyc2VKU1hJZGVu
dGlmaWVyKCk7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRjaEpTWCgnOicpKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IGVsZW1lbnROYW1lOwotICAgICAgICAgICAgICAgIHRo
aXMuZXhwZWN0SlNYKCc6Jyk7Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWVfMSA9IHRoaXMucGFy
c2VKU1hJZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWE5hbWVzcGFjZWROYW1lKG5hbWVzcGFjZSwgbmFt
ZV8xKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoSlNY
KCcuJykpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5tYXRjaEpTWCgnLicpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSBlbGVtZW50TmFtZTsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5leHBlY3RKU1goJy4nKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHBy
b3BlcnR5ID0gdGhpcy5wYXJzZUpTWElkZW50aWZpZXIoKTsKLSAgICAgICAgICAgICAgICAgICAg
ZWxlbWVudE5hbWUgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWE1lbWJlckV4
cHJlc3Npb24ob2JqZWN0LCBwcm9wZXJ0eSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50TmFtZTsKLSAgICAgICAgfTsKLSAgICAg
ICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEF0dHJpYnV0ZU5hbWUgPSBmdW5jdGlvbiAo
KSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpOwotICAgICAg
ICAgICAgdmFyIGF0dHJpYnV0ZU5hbWU7Ci0gICAgICAgICAgICB2YXIgaWRlbnRpZmllciA9IHRo
aXMucGFyc2VKU1hJZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRjaEpTWCgn
OicpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IGlkZW50aWZpZXI7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJzonKTsKLSAgICAgICAgICAgICAgICB2YXIgbmFt
ZV8yID0gdGhpcy5wYXJzZUpTWElkZW50aWZpZXIoKTsKLSAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVOYW1lID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hOYW1lc3BhY2VkTmFt
ZShuYW1lc3BhY2UsIG5hbWVfMikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9IGlkZW50aWZpZXI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlTmFtZTsKLSAgICAgICAgfTsKLSAgICAg
ICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWFN0cmluZ0xpdGVyYWxBdHRyaWJ1dGUgPSBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgp
OwotICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0SlNYVG9rZW4oKTsKLSAgICAgICAg
ICAgIGlmICh0b2tlbi50eXBlICE9PSA4IC8qIFN0cmluZ0xpdGVyYWwgKi8pIHsKLSAgICAgICAg
ICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHZhciByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwodG9rZW4udmFs
dWUsIHJhdykpOwotICAgICAgICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNl
SlNYRXhwcmVzc2lvbkF0dHJpYnV0ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgn
eycpOwotICAgICAgICAgICAgdGhpcy5maW5pc2hKU1goKTsKLSAgICAgICAgICAgIGlmICh0aGlz
Lm1hdGNoKCd9JykpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IoJ0pTWCBh
dHRyaWJ1dGVzIG11c3Qgb25seSBiZSBhc3NpZ25lZCBhIG5vbi1lbXB0eSBleHByZXNzaW9uJyk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgZXhwcmVzc2lvbiA9IHRoaXMucGFyc2VB
c3NpZ25tZW50RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgdGhpcy5yZWVudGVySlNYKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hFeHBy
ZXNzaW9uQ29udGFpbmVyKGV4cHJlc3Npb24pKTsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFy
c2VyLnByb3RvdHlwZS5wYXJzZUpTWEF0dHJpYnV0ZVZhbHVlID0gZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hKU1goJ3snKSA/IHRoaXMucGFyc2VKU1hFeHByZXNz
aW9uQXR0cmlidXRlKCkgOgotICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hKU1goJzwnKSA/IHRo
aXMucGFyc2VKU1hFbGVtZW50KCkgOiB0aGlzLnBhcnNlSlNYU3RyaW5nTGl0ZXJhbEF0dHJpYnV0
ZSgpOwotICAgICAgICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYTmFt
ZVZhbHVlQXR0cmlidXRlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZUpTWE5vZGUoKTsKLSAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZUpT
WEF0dHJpYnV0ZU5hbWUoKTsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IG51bGw7Ci0gICAgICAg
ICAgICBpZiAodGhpcy5tYXRjaEpTWCgnPScpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5leHBl
Y3RKU1goJz0nKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VKU1hBdHRyaWJ1
dGVWYWx1ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IEpTWE5vZGUuSlNYQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7Ci0gICAgICAg
IH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hTcHJlYWRBdHRyaWJ1dGUg
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9k
ZSgpOwotICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJ3snKTsKLSAgICAgICAgICAgIHRoaXMu
ZXhwZWN0SlNYKCcuLi4nKTsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoSlNYKCk7Ci0gICAgICAg
ICAgICB2YXIgYXJndW1lbnQgPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKLSAg
ICAgICAgICAgIHRoaXMucmVlbnRlckpTWCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYU3ByZWFkQXR0cmlidXRlKGFyZ3VtZW50KSk7Ci0g
ICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hBdHRyaWJ1dGVz
ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBbXTsKLSAgICAg
ICAgICAgIHdoaWxlICghdGhpcy5tYXRjaEpTWCgnLycpICYmICF0aGlzLm1hdGNoSlNYKCc+Jykp
IHsKLSAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlID0gdGhpcy5tYXRjaEpTWCgneycpID8g
dGhpcy5wYXJzZUpTWFNwcmVhZEF0dHJpYnV0ZSgpIDoKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5wYXJzZUpTWE5hbWVWYWx1ZUF0dHJpYnV0ZSgpOwotICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZXMucHVzaChhdHRyaWJ1dGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGF0
dHJpYnV0ZXM7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VK
U1hPcGVuaW5nRWxlbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0g
dGhpcy5jcmVhdGVKU1hOb2RlKCk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgnPCcpOwot
ICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLnBhcnNlSlNYRWxlbWVudE5hbWUoKTsKLSAgICAg
ICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5wYXJzZUpTWEF0dHJpYnV0ZXMoKTsKLSAgICAg
ICAgICAgIHZhciBzZWxmQ2xvc2luZyA9IHRoaXMubWF0Y2hKU1goJy8nKTsKLSAgICAgICAgICAg
IGlmIChzZWxmQ2xvc2luZykgewotICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCcvJyk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgnPicpOwotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYT3BlbmluZ0Vs
ZW1lbnQobmFtZSwgc2VsZkNsb3NpbmcsIGF0dHJpYnV0ZXMpKTsKLSAgICAgICAgfTsKLSAgICAg
ICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEJvdW5kYXJ5RWxlbWVudCA9IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7Ci0gICAg
ICAgICAgICB0aGlzLmV4cGVjdEpTWCgnPCcpOwotICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hK
U1goJy8nKSkgewotICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCcvJyk7Ci0gICAgICAg
ICAgICAgICAgdmFyIG5hbWVfMyA9IHRoaXMucGFyc2VKU1hFbGVtZW50TmFtZSgpOwotICAgICAg
ICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc+Jyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYQ2xvc2luZ0VsZW1lbnQobmFtZV8zKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMucGFyc2VKU1hFbGVt
ZW50TmFtZSgpOwotICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLnBhcnNlSlNYQXR0
cmlidXRlcygpOwotICAgICAgICAgICAgdmFyIHNlbGZDbG9zaW5nID0gdGhpcy5tYXRjaEpTWCgn
LycpOwotICAgICAgICAgICAgaWYgKHNlbGZDbG9zaW5nKSB7Ci0gICAgICAgICAgICAgICAgdGhp
cy5leHBlY3RKU1goJy8nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuZXhwZWN0
SlNYKCc+Jyk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNY
Tm9kZS5KU1hPcGVuaW5nRWxlbWVudChuYW1lLCBzZWxmQ2xvc2luZywgYXR0cmlidXRlcykpOwot
ICAgICAgICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYRW1wdHlFeHBy
ZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0
ZUpTWENoaWxkTm9kZSgpOwotICAgICAgICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMoKTsKLSAg
ICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5pbmRleCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKLSAg
ICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7
Ci0gICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIuY29sdW1uID0gdGhpcy5zY2FubmVyLmluZGV4
IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWEVtcHR5RXhwcmVzc2lvbigpKTsKLSAgICAgICAgfTsK
LSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEV4cHJlc3Npb25Db250YWluZXIg
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9k
ZSgpOwotICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJ3snKTsKLSAgICAgICAgICAgIHZhciBl
eHByZXNzaW9uOwotICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hKU1goJ30nKSkgewotICAgICAg
ICAgICAgICAgIGV4cHJlc3Npb24gPSB0aGlzLnBhcnNlSlNYRW1wdHlFeHByZXNzaW9uKCk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJ30nKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoSlNYKCk7Ci0gICAgICAg
ICAgICAgICAgZXhwcmVzc2lvbiA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwot
ICAgICAgICAgICAgICAgIHRoaXMucmVlbnRlckpTWCgpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYRXhwcmVzc2lv
bkNvbnRhaW5lcihleHByZXNzaW9uKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5w
cm90b3R5cGUucGFyc2VKU1hDaGlsZHJlbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZh
ciBjaGlsZHJlbiA9IFtdOwotICAgICAgICAgICAgd2hpbGUgKCF0aGlzLnNjYW5uZXIuZW9mKCkp
IHsKLSAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYQ2hpbGROb2RlKCk7
Ci0gICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0SlNYVGV4dCgpOwotICAgICAg
ICAgICAgICAgIGlmICh0b2tlbi5zdGFydCA8IHRva2VuLmVuZCkgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBjaGlsZCA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYVGV4dCh0
b2tlbi52YWx1ZSwgcmF3KSk7Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hp
bGQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVy
LnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdID09PSAneycpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGNvbnRhaW5lciA9IHRoaXMucGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY29udGFpbmVyKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBj
aGlsZHJlbjsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNv
bXBsZXhKU1hFbGVtZW50ID0gZnVuY3Rpb24gKGVsKSB7Ci0gICAgICAgICAgICB2YXIgc3RhY2sg
PSBbXTsKLSAgICAgICAgICAgIHdoaWxlICghdGhpcy5zY2FubmVyLmVvZigpKSB7Ci0gICAgICAg
ICAgICAgICAgZWwuY2hpbGRyZW4gPSBlbC5jaGlsZHJlbi5jb25jYXQodGhpcy5wYXJzZUpTWENo
aWxkcmVuKCkpOwotICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hDaGls
ZE5vZGUoKTsKLSAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMucGFyc2VKU1hCb3Vu
ZGFyeUVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBqc3hf
c3ludGF4XzEuSlNYU3ludGF4LkpTWE9wZW5pbmdFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBvcGVuaW5nID0gZWxlbWVudDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9wZW5p
bmcuc2VsZkNsb3NpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYRWxlbWVudChvcGVuaW5nLCBbXSwgbnVs
bCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWwuY2hpbGRyZW4ucHVzaChjaGlsZCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGVsKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsID0geyBub2RlOiBub2RlLCBvcGVuaW5nOiBvcGVuaW5nLCBjbG9zaW5nOiBudWxsLCBjaGls
ZHJlbjogW10gfTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBqc3hfc3ludGF4XzEuSlNYU3ludGF4
LkpTWENsb3NpbmdFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGVsLmNsb3NpbmcgPSBl
bGVtZW50OwotICAgICAgICAgICAgICAgICAgICB2YXIgb3Blbl8xID0gZ2V0UXVhbGlmaWVkRWxl
bWVudE5hbWUoZWwub3BlbmluZy5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNsb3Nl
XzEgPSBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShlbC5jbG9zaW5nLm5hbWUpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAob3Blbl8xICE9PSBjbG9zZV8xKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnRvbGVyYXRlRXJyb3IoJ0V4cGVjdGVkIGNvcnJlc3BvbmRpbmcgSlNYIGNsb3Np
bmcgdGFnIGZvciAlMCcsIG9wZW5fMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBjaGlsZCA9IHRoaXMuZmluYWxpemUoZWwubm9kZSwgbmV3IEpTWE5vZGUuSlNYRWxl
bWVudChlbC5vcGVuaW5nLCBlbC5jaGlsZHJlbiwgZWwuY2xvc2luZykpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZWwgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsLmNoaWxkcmVuLnB1c2goY2hpbGQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhY2sucG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBlbDsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpT
WEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3Jl
YXRlSlNYTm9kZSgpOwotICAgICAgICAgICAgdmFyIG9wZW5pbmcgPSB0aGlzLnBhcnNlSlNYT3Bl
bmluZ0VsZW1lbnQoKTsKLSAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IFtdOwotICAgICAgICAg
ICAgdmFyIGNsb3NpbmcgPSBudWxsOwotICAgICAgICAgICAgaWYgKCFvcGVuaW5nLnNlbGZDbG9z
aW5nKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5wYXJzZUNvbXBsZXhKU1hFbGVt
ZW50KHsgbm9kZTogbm9kZSwgb3BlbmluZzogb3BlbmluZywgY2xvc2luZzogY2xvc2luZywgY2hp
bGRyZW46IGNoaWxkcmVuIH0pOwotICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gZWwuY2hpbGRy
ZW47Ci0gICAgICAgICAgICAgICAgY2xvc2luZyA9IGVsLmNsb3Npbmc7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hF
bGVtZW50KG9wZW5pbmcsIGNoaWxkcmVuLCBjbG9zaW5nKSk7Ci0gICAgICAgIH07Ci0gICAgICAg
IEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hSb290ID0gZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgLy8gUG9wIHRoZSBvcGVuaW5nICc8JyBhZGRlZCBmcm9tIHRoZSBsb29rYWhlYWQuCi0g
ICAgICAgICAgICBpZiAodGhpcy5jb25maWcudG9rZW5zKSB7Ci0gICAgICAgICAgICAgICAgdGhp
cy50b2tlbnMucG9wKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLnN0YXJ0SlNY
KCk7Ci0gICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMucGFyc2VKU1hFbGVtZW50KCk7Ci0g
ICAgICAgICAgICB0aGlzLmZpbmlzaEpTWCgpOwotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7
Ci0gICAgICAgIH07Ci0gICAgICAgIHJldHVybiBKU1hQYXJzZXI7Ci0gICAgfShwYXJzZXJfMS5Q
YXJzZXIpKTsKLSAgICBleHBvcnRzLkpTWFBhcnNlciA9IEpTWFBhcnNlcjsKKwl2YXIgX19leHRl
bmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7CisJICAgIHZh
ciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHsKKwkgICAgICAgIGV4dGVuZFN0YXRp
Y3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwKKwkgICAgICAgICAgICAoeyBfX3Byb3RvX186
IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9
IGI7IH0pIHx8CisJICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBi
KSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07CisJICAgICAgICByZXR1
cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTsKKwkgICAgfTsKKwkgICAgcmV0dXJuIGZ1bmN0aW9uIChk
LCBiKSB7CisJICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpOworCSAgICAgICAgZnVuY3Rpb24g
X18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9CisJICAgICAgICBkLnByb3RvdHlwZSA9IGIg
PT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBl
LCBuZXcgX18oKSk7CisJICAgIH07CisJfSkoKTsKKwlPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhw
b3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOworCXZhciBjaGFyYWN0ZXJfMSA9
IF9fd2VicGFja19yZXF1aXJlX18oNCk7CisJdmFyIEpTWE5vZGUgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDUpOworCXZhciBqc3hfc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOworCXZh
ciBOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTsKKwl2YXIgcGFyc2VyXzEgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDgpOworCXZhciB0b2tlbl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7
CisJdmFyIHhodG1sX2VudGl0aWVzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTsKKwl0b2tl
bl8xLlRva2VuTmFtZVsxMDAgLyogSWRlbnRpZmllciAqL10gPSAnSlNYSWRlbnRpZmllcic7CisJ
dG9rZW5fMS5Ub2tlbk5hbWVbMTAxIC8qIFRleHQgKi9dID0gJ0pTWFRleHQnOworCS8vIEZ1bGx5
IHF1YWxpZmllZCBlbGVtZW50IG5hbWUsIGUuZy4gPHN2ZzpwYXRoPiByZXR1cm5zICJzdmc6cGF0
aCIKKwlmdW5jdGlvbiBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShlbGVtZW50TmFtZSkgeworCSAg
ICB2YXIgcXVhbGlmaWVkTmFtZTsKKwkgICAgc3dpdGNoIChlbGVtZW50TmFtZS50eXBlKSB7CisJ
ICAgICAgICBjYXNlIGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYSWRlbnRpZmllcjoKKwkgICAg
ICAgICAgICB2YXIgaWQgPSBlbGVtZW50TmFtZTsKKwkgICAgICAgICAgICBxdWFsaWZpZWROYW1l
ID0gaWQubmFtZTsKKwkgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIGNhc2UganN4X3N5bnRh
eF8xLkpTWFN5bnRheC5KU1hOYW1lc3BhY2VkTmFtZToKKwkgICAgICAgICAgICB2YXIgbnMgPSBl
bGVtZW50TmFtZTsKKwkgICAgICAgICAgICBxdWFsaWZpZWROYW1lID0gZ2V0UXVhbGlmaWVkRWxl
bWVudE5hbWUobnMubmFtZXNwYWNlKSArICc6JyArCisJICAgICAgICAgICAgICAgIGdldFF1YWxp
ZmllZEVsZW1lbnROYW1lKG5zLm5hbWUpOworCSAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAg
Y2FzZSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWE1lbWJlckV4cHJlc3Npb246CisJICAgICAg
ICAgICAgdmFyIGV4cHIgPSBlbGVtZW50TmFtZTsKKwkgICAgICAgICAgICBxdWFsaWZpZWROYW1l
ID0gZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUoZXhwci5vYmplY3QpICsgJy4nICsKKwkgICAgICAg
ICAgICAgICAgZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUoZXhwci5wcm9wZXJ0eSk7CisJICAgICAg
ICAgICAgYnJlYWs7CisJICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLworCSAgICAg
ICAgZGVmYXVsdDoKKwkgICAgICAgICAgICBicmVhazsKKwkgICAgfQorCSAgICByZXR1cm4gcXVh
bGlmaWVkTmFtZTsKKwl9CisJdmFyIEpTWFBhcnNlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
IChfc3VwZXIpIHsKKwkgICAgX19leHRlbmRzKEpTWFBhcnNlciwgX3N1cGVyKTsKKwkgICAgZnVu
Y3Rpb24gSlNYUGFyc2VyKGNvZGUsIG9wdGlvbnMsIGRlbGVnYXRlKSB7CisJICAgICAgICByZXR1
cm4gX3N1cGVyLmNhbGwodGhpcywgY29kZSwgb3B0aW9ucywgZGVsZWdhdGUpIHx8IHRoaXM7CisJ
ICAgIH0KKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZVByaW1hcnlFeHByZXNzaW9uID0g
ZnVuY3Rpb24gKCkgeworCSAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2goJzwnKSA/IHRoaXMucGFy
c2VKU1hSb290KCkgOiBfc3VwZXIucHJvdG90eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24uY2Fs
bCh0aGlzKTsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5zdGFydEpTWCA9IGZ1
bmN0aW9uICgpIHsKKwkgICAgICAgIC8vIFVud2luZCB0aGUgc2Nhbm5lciBiZWZvcmUgdGhlIGxv
b2thaGVhZCB0b2tlbi4KKwkgICAgICAgIHRoaXMuc2Nhbm5lci5pbmRleCA9IHRoaXMuc3RhcnRN
YXJrZXIuaW5kZXg7CisJICAgICAgICB0aGlzLnNjYW5uZXIubGluZU51bWJlciA9IHRoaXMuc3Rh
cnRNYXJrZXIubGluZTsKKwkgICAgICAgIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQgPSB0aGlzLnN0
YXJ0TWFya2VyLmluZGV4IC0gdGhpcy5zdGFydE1hcmtlci5jb2x1bW47CisJICAgIH07CisJICAg
IEpTWFBhcnNlci5wcm90b3R5cGUuZmluaXNoSlNYID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAg
Ly8gUHJpbWUgdGhlIG5leHQgbG9va2FoZWFkLgorCSAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsK
KwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5yZWVudGVySlNYID0gZnVuY3Rpb24g
KCkgeworCSAgICAgICAgdGhpcy5zdGFydEpTWCgpOworCSAgICAgICAgdGhpcy5leHBlY3RKU1go
J30nKTsKKwkgICAgICAgIC8vIFBvcCB0aGUgY2xvc2luZyAnfScgYWRkZWQgZnJvbSB0aGUgbG9v
a2FoZWFkLgorCSAgICAgICAgaWYgKHRoaXMuY29uZmlnLnRva2VucykgeworCSAgICAgICAgICAg
IHRoaXMudG9rZW5zLnBvcCgpOworCSAgICAgICAgfQorCSAgICB9OworCSAgICBKU1hQYXJzZXIu
cHJvdG90eXBlLmNyZWF0ZUpTWE5vZGUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB0aGlzLmNv
bGxlY3RDb21tZW50cygpOworCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICBpbmRleDog
dGhpcy5zY2FubmVyLmluZGV4LAorCSAgICAgICAgICAgIGxpbmU6IHRoaXMuc2Nhbm5lci5saW5l
TnVtYmVyLAorCSAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5z
Y2FubmVyLmxpbmVTdGFydAorCSAgICAgICAgfTsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnBy
b3RvdHlwZS5jcmVhdGVKU1hDaGlsZE5vZGUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICByZXR1
cm4geworCSAgICAgICAgICAgIGluZGV4OiB0aGlzLnNjYW5uZXIuaW5kZXgsCisJICAgICAgICAg
ICAgbGluZTogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgY29sdW1uOiB0
aGlzLnNjYW5uZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0CisJICAgICAgICB9Owor
CSAgICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnNjYW5YSFRNTEVudGl0eSA9IGZ1bmN0
aW9uIChxdW90ZSkgeworCSAgICAgICAgdmFyIHJlc3VsdCA9ICcmJzsKKwkgICAgICAgIHZhciB2
YWxpZCA9IHRydWU7CisJICAgICAgICB2YXIgdGVybWluYXRlZCA9IGZhbHNlOworCSAgICAgICAg
dmFyIG51bWVyaWMgPSBmYWxzZTsKKwkgICAgICAgIHZhciBoZXggPSBmYWxzZTsKKwkgICAgICAg
IHdoaWxlICghdGhpcy5zY2FubmVyLmVvZigpICYmIHZhbGlkICYmICF0ZXJtaW5hdGVkKSB7CisJ
ICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5k
ZXhdOworCSAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHsKKwkgICAgICAgICAgICAgICAg
YnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHRlcm1pbmF0ZWQgPSAoY2ggPT09
ICc7Jyk7CisJICAgICAgICAgICAgcmVzdWx0ICs9IGNoOworCSAgICAgICAgICAgICsrdGhpcy5z
Y2FubmVyLmluZGV4OworCSAgICAgICAgICAgIGlmICghdGVybWluYXRlZCkgeworCSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHJlc3VsdC5sZW5ndGgpIHsKKwkgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjoKKwkgICAgICAgICAgICAgICAgICAgICAgICAvLyBlLmcuICcmIzEyMzsnCisJICAgICAg
ICAgICAgICAgICAgICAgICAgbnVtZXJpYyA9IChjaCA9PT0gJyMnKTsKKwkgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKwkgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobnVtZXJpYykgeworCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBlLmcuICcmI3g0MTsnCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleCA9
IChjaCA9PT0gJ3gnKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBoZXgg
fHwgY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkp
OworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljID0gbnVtZXJpYyAmJiAhaGV4
OworCSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKwkgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisJICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWQgPSB2YWxpZCAmJiAhKG51bWVyaWMgJiYgIWNoYXJhY3Rlcl8xLkNoYXJhY3Rl
ci5pc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSk7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWQgPSB2YWxpZCAmJiAhKGhleCAmJiAhY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlz
SGV4RGlnaXQoY2guY2hhckNvZGVBdCgwKSkpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAg
ICAgICAgaWYgKHZhbGlkICYmIHRlcm1pbmF0ZWQgJiYgcmVzdWx0Lmxlbmd0aCA+IDIpIHsKKwkg
ICAgICAgICAgICAvLyBlLmcuICcmI3g0MTsnIGJlY29tZXMganVzdCAnI3g0MScKKwkgICAgICAg
ICAgICB2YXIgc3RyID0gcmVzdWx0LnN1YnN0cigxLCByZXN1bHQubGVuZ3RoIC0gMik7CisJICAg
ICAgICAgICAgaWYgKG51bWVyaWMgJiYgc3RyLmxlbmd0aCA+IDEpIHsKKwkgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChzdHIuc3Vic3RyKDEpLCAx
MCkpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmIChoZXggJiYgc3RyLmxl
bmd0aCA+IDIpIHsKKwkgICAgICAgICAgICAgICAgcmVzdWx0ID0gU3RyaW5nLmZyb21DaGFyQ29k
ZShwYXJzZUludCgnMCcgKyBzdHIuc3Vic3RyKDEpLCAxNikpOworCSAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICBlbHNlIGlmICghbnVtZXJpYyAmJiAhaGV4ICYmIHhodG1sX2VudGl0aWVzXzEu
WEhUTUxFbnRpdGllc1tzdHJdKSB7CisJICAgICAgICAgICAgICAgIHJlc3VsdCA9IHhodG1sX2Vu
dGl0aWVzXzEuWEhUTUxFbnRpdGllc1tzdHJdOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0K
KwkgICAgICAgIHJldHVybiByZXN1bHQ7CisJICAgIH07CisJICAgIC8vIFNjYW4gdGhlIG5leHQg
SlNYIHRva2VuLiBUaGlzIHJlcGxhY2VzIFNjYW5uZXIjbGV4IHdoZW4gaW4gSlNYIG1vZGUuCisJ
ICAgIEpTWFBhcnNlci5wcm90b3R5cGUubGV4SlNYID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAg
dmFyIGNwID0gdGhpcy5zY2FubmVyLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuc2Nhbm5lci5pbmRl
eCk7CisJICAgICAgICAvLyA8ID4gLyA6ID0geyB9CisJICAgICAgICBpZiAoY3AgPT09IDYwIHx8
IGNwID09PSA2MiB8fCBjcCA9PT0gNDcgfHwgY3AgPT09IDU4IHx8IGNwID09PSA2MSB8fCBjcCA9
PT0gMTIzIHx8IGNwID09PSAxMjUpIHsKKwkgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnNj
YW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleCsrXTsKKwkgICAgICAgICAgICByZXR1cm4g
eworCSAgICAgICAgICAgICAgICB0eXBlOiA3IC8qIFB1bmN0dWF0b3IgKi8sCisJICAgICAgICAg
ICAgICAgIHZhbHVlOiB2YWx1ZSwKKwkgICAgICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5z
Y2FubmVyLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5zY2Fu
bmVyLmxpbmVTdGFydCwKKwkgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuc2Nhbm5lci5pbmRl
eCAtIDEsCisJICAgICAgICAgICAgICAgIGVuZDogdGhpcy5zY2FubmVyLmluZGV4CisJICAgICAg
ICAgICAgfTsKKwkgICAgICAgIH0KKwkgICAgICAgIC8vICIgJworCSAgICAgICAgaWYgKGNwID09
PSAzNCB8fCBjcCA9PT0gMzkpIHsKKwkgICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnNjYW5u
ZXIuaW5kZXg7CisJICAgICAgICAgICAgdmFyIHF1b3RlID0gdGhpcy5zY2FubmVyLnNvdXJjZVt0
aGlzLnNjYW5uZXIuaW5kZXgrK107CisJICAgICAgICAgICAgdmFyIHN0ciA9ICcnOworCSAgICAg
ICAgICAgIHdoaWxlICghdGhpcy5zY2FubmVyLmVvZigpKSB7CisJICAgICAgICAgICAgICAgIHZh
ciBjaCA9IHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4KytdOworCSAgICAg
ICAgICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSB7CisJICAgICAgICAgICAgICAgICAgICBicmVh
azsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0g
JyYnKSB7CisJICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdGhpcy5zY2FuWEhUTUxFbnRpdHko
cXVvdGUpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgeworCSAg
ICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOworCSAgICAgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIHJldHVybiB7CisJICAgICAgICAgICAgICAgIHR5cGU6IDgg
LyogU3RyaW5nTGl0ZXJhbCAqLywKKwkgICAgICAgICAgICAgICAgdmFsdWU6IHN0ciwKKwkgICAg
ICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCisJICAgICAg
ICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5zY2FubmVyLmxpbmVTdGFydCwKKwkgICAgICAgICAg
ICAgICAgc3RhcnQ6IHN0YXJ0LAorCSAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuc2Nhbm5lci5p
bmRleAorCSAgICAgICAgICAgIH07CisJICAgICAgICB9CisJICAgICAgICAvLyAuLi4gb3IgLgor
CSAgICAgICAgaWYgKGNwID09PSA0NikgeworCSAgICAgICAgICAgIHZhciBuMSA9IHRoaXMuc2Nh
bm5lci5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5kZXggKyAxKTsKKwkgICAgICAg
ICAgICB2YXIgbjIgPSB0aGlzLnNjYW5uZXIuc291cmNlLmNoYXJDb2RlQXQodGhpcy5zY2FubmVy
LmluZGV4ICsgMik7CisJICAgICAgICAgICAgdmFyIHZhbHVlID0gKG4xID09PSA0NiAmJiBuMiA9
PT0gNDYpID8gJy4uLicgOiAnLic7CisJICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5zY2Fu
bmVyLmluZGV4OworCSAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5pbmRleCArPSB2YWx1ZS5sZW5n
dGg7CisJICAgICAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICAgICAgdHlwZTogNyAvKiBQ
dW5jdHVhdG9yICovLAorCSAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisJICAgICAgICAg
ICAgICAgIGxpbmVOdW1iZXI6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLAorCSAgICAgICAgICAg
ICAgICBsaW5lU3RhcnQ6IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQsCisJICAgICAgICAgICAgICAg
IHN0YXJ0OiBzdGFydCwKKwkgICAgICAgICAgICAgICAgZW5kOiB0aGlzLnNjYW5uZXIuaW5kZXgK
KwkgICAgICAgICAgICB9OworCSAgICAgICAgfQorCSAgICAgICAgLy8gYAorCSAgICAgICAgaWYg
KGNwID09PSA5NikgeworCSAgICAgICAgICAgIC8vIE9ubHkgcGxhY2Vob2xkZXIsIHNpbmNlIGl0
IHdpbGwgYmUgcmVzY2FubmVkIGFzIGEgcmVhbCBhc3NpZ25tZW50IGV4cHJlc3Npb24uCisJICAg
ICAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICAgICAgdHlwZTogMTAgLyogVGVtcGxhdGUg
Ki8sCisJICAgICAgICAgICAgICAgIHZhbHVlOiAnJywKKwkgICAgICAgICAgICAgICAgbGluZU51
bWJlcjogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgICAgIGxpbmVTdGFy
dDogdGhpcy5zY2FubmVyLmxpbmVTdGFydCwKKwkgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMu
c2Nhbm5lci5pbmRleCwKKwkgICAgICAgICAgICAgICAgZW5kOiB0aGlzLnNjYW5uZXIuaW5kZXgK
KwkgICAgICAgICAgICB9OworCSAgICAgICAgfQorCSAgICAgICAgLy8gSWRlbnRpZmVyIGNhbiBu
b3QgY29udGFpbiBiYWNrc2xhc2ggKGNoYXIgY29kZSA5MikuCisJICAgICAgICBpZiAoY2hhcmFj
dGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KGNwKSAmJiAoY3AgIT09IDkyKSkgewor
CSAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKKwkgICAgICAgICAg
ICArK3RoaXMuc2Nhbm5lci5pbmRleDsKKwkgICAgICAgICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5l
ci5lb2YoKSkgeworCSAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNjYW5uZXIuc291cmNl
LmNoYXJDb2RlQXQodGhpcy5zY2FubmVyLmluZGV4KTsKKwkgICAgICAgICAgICAgICAgaWYgKGNo
YXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJQYXJ0KGNoKSAmJiAoY2ggIT09IDkyKSkg
eworCSAgICAgICAgICAgICAgICAgICAgKyt0aGlzLnNjYW5uZXIuaW5kZXg7CisJICAgICAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT09IDQ1KSB7CisJICAgICAg
ICAgICAgICAgICAgICAvLyBIeXBoZW4gKGNoYXIgY29kZSA0NSkgY2FuIGJlIHBhcnQgb2YgYW4g
aWRlbnRpZmllci4KKwkgICAgICAgICAgICAgICAgICAgICsrdGhpcy5zY2FubmVyLmluZGV4Owor
CSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgdmFyIGlkID0gdGhpcy5zY2FubmVyLnNvdXJjZS5zbGljZShzdGFydCwgdGhpcy5z
Y2FubmVyLmluZGV4KTsKKwkgICAgICAgICAgICByZXR1cm4geworCSAgICAgICAgICAgICAgICB0
eXBlOiAxMDAgLyogSWRlbnRpZmllciAqLywKKwkgICAgICAgICAgICAgICAgdmFsdWU6IGlkLAor
CSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwKKwkg
ICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLnNjYW5uZXIubGluZVN0YXJ0LAorCSAgICAg
ICAgICAgICAgICBzdGFydDogc3RhcnQsCisJICAgICAgICAgICAgICAgIGVuZDogdGhpcy5zY2Fu
bmVyLmluZGV4CisJICAgICAgICAgICAgfTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0
aGlzLnNjYW5uZXIubGV4KCk7CisJICAgIH07CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUubmV4
dEpTWFRva2VuID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMo
KTsKKwkgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7
CisJICAgICAgICB0aGlzLnN0YXJ0TWFya2VyLmxpbmUgPSB0aGlzLnNjYW5uZXIubGluZU51bWJl
cjsKKwkgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIuY29sdW1uID0gdGhpcy5zY2FubmVyLmluZGV4
IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKKwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubGV4
SlNYKCk7CisJICAgICAgICB0aGlzLmxhc3RNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5k
ZXg7CisJICAgICAgICB0aGlzLmxhc3RNYXJrZXIubGluZSA9IHRoaXMuc2Nhbm5lci5saW5lTnVt
YmVyOworCSAgICAgICAgdGhpcy5sYXN0TWFya2VyLmNvbHVtbiA9IHRoaXMuc2Nhbm5lci5pbmRl
eCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7CisJICAgICAgICBpZiAodGhpcy5jb25maWcudG9r
ZW5zKSB7CisJICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaCh0aGlzLmNvbnZlcnRUb2tlbih0
b2tlbikpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRva2VuOworCSAgICB9OworCSAg
ICBKU1hQYXJzZXIucHJvdG90eXBlLm5leHRKU1hUZXh0ID0gZnVuY3Rpb24gKCkgeworCSAgICAg
ICAgdGhpcy5zdGFydE1hcmtlci5pbmRleCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKKwkgICAgICAg
IHRoaXMuc3RhcnRNYXJrZXIubGluZSA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOworCSAgICAg
ICAgdGhpcy5zdGFydE1hcmtlci5jb2x1bW4gPSB0aGlzLnNjYW5uZXIuaW5kZXggLSB0aGlzLnNj
YW5uZXIubGluZVN0YXJ0OworCSAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5zY2FubmVyLmluZGV4
OworCSAgICAgICAgdmFyIHRleHQgPSAnJzsKKwkgICAgICAgIHdoaWxlICghdGhpcy5zY2FubmVy
LmVvZigpKSB7CisJICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zY2FubmVyLnNvdXJjZVt0aGlz
LnNjYW5uZXIuaW5kZXhdOworCSAgICAgICAgICAgIGlmIChjaCA9PT0gJ3snIHx8IGNoID09PSAn
PCcpIHsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgICsrdGhpcy5zY2FubmVyLmluZGV4OworCSAgICAgICAgICAgIHRleHQgKz0gY2g7CisJICAg
ICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoLmNo
YXJDb2RlQXQoMCkpKSB7CisJICAgICAgICAgICAgICAgICsrdGhpcy5zY2FubmVyLmxpbmVOdW1i
ZXI7CisJICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xyJyAmJiB0aGlzLnNjYW5uZXIuc291
cmNlW3RoaXMuc2Nhbm5lci5pbmRleF0gPT09ICdcbicpIHsKKwkgICAgICAgICAgICAgICAgICAg
ICsrdGhpcy5zY2FubmVyLmluZGV4OworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
ICAgIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQgPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhp
cy5zY2FubmVyLmluZGV4OworCSAgICAgICAgdGhpcy5sYXN0TWFya2VyLmxpbmUgPSB0aGlzLnNj
YW5uZXIubGluZU51bWJlcjsKKwkgICAgICAgIHRoaXMubGFzdE1hcmtlci5jb2x1bW4gPSB0aGlz
LnNjYW5uZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0OworCSAgICAgICAgdmFyIHRv
a2VuID0geworCSAgICAgICAgICAgIHR5cGU6IDEwMSAvKiBUZXh0ICovLAorCSAgICAgICAgICAg
IHZhbHVlOiB0ZXh0LAorCSAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMuc2Nhbm5lci5saW5l
TnVtYmVyLAorCSAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5zY2FubmVyLmxpbmVTdGFydCwK
KwkgICAgICAgICAgICBzdGFydDogc3RhcnQsCisJICAgICAgICAgICAgZW5kOiB0aGlzLnNjYW5u
ZXIuaW5kZXgKKwkgICAgICAgIH07CisJICAgICAgICBpZiAoKHRleHQubGVuZ3RoID4gMCkgJiYg
dGhpcy5jb25maWcudG9rZW5zKSB7CisJICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaCh0aGlz
LmNvbnZlcnRUb2tlbih0b2tlbikpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRva2Vu
OworCSAgICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBlZWtKU1hUb2tlbiA9IGZ1bmN0
aW9uICgpIHsKKwkgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc2Nhbm5lci5zYXZlU3RhdGUoKTsK
KwkgICAgICAgIHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTsKKwkgICAgICAgIHZhciBuZXh0
ID0gdGhpcy5sZXhKU1goKTsKKwkgICAgICAgIHRoaXMuc2Nhbm5lci5yZXN0b3JlU3RhdGUoc3Rh
dGUpOworCSAgICAgICAgcmV0dXJuIG5leHQ7CisJICAgIH07CisJICAgIC8vIEV4cGVjdCB0aGUg
bmV4dCBKU1ggdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgorCSAgICAv
LyBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KKwkgICAgSlNYUGFyc2VyLnBy
b3RvdHlwZS5leHBlY3RKU1ggPSBmdW5jdGlvbiAodmFsdWUpIHsKKwkgICAgICAgIHZhciB0b2tl
biA9IHRoaXMubmV4dEpTWFRva2VuKCk7CisJICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gNyAv
KiBQdW5jdHVhdG9yICovIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkgeworCSAgICAgICAgICAg
IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOworCSAgICAgICAgfQorCSAgICB9Owor
CSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCBKU1ggdG9rZW4gbWF0Y2hlcyB0aGUgc3Bl
Y2lmaWVkIHB1bmN0dWF0b3IuCisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUubWF0Y2hKU1ggPSBm
dW5jdGlvbiAodmFsdWUpIHsKKwkgICAgICAgIHZhciBuZXh0ID0gdGhpcy5wZWVrSlNYVG9rZW4o
KTsKKwkgICAgICAgIHJldHVybiBuZXh0LnR5cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLyAmJiBu
ZXh0LnZhbHVlID09PSB2YWx1ZTsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5w
YXJzZUpTWElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRo
aXMuY3JlYXRlSlNYTm9kZSgpOworCSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0SlNYVG9r
ZW4oKTsKKwkgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSAxMDAgLyogSWRlbnRpZmllciAqLykg
eworCSAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOworCSAgICAg
ICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNY
SWRlbnRpZmllcih0b2tlbi52YWx1ZSkpOworCSAgICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90
eXBlLnBhcnNlSlNYRWxlbWVudE5hbWUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpOworCSAgICAgICAgdmFyIGVsZW1lbnROYW1lID0gdGhp
cy5wYXJzZUpTWElkZW50aWZpZXIoKTsKKwkgICAgICAgIGlmICh0aGlzLm1hdGNoSlNYKCc6Jykp
IHsKKwkgICAgICAgICAgICB2YXIgbmFtZXNwYWNlID0gZWxlbWVudE5hbWU7CisJICAgICAgICAg
ICAgdGhpcy5leHBlY3RKU1goJzonKTsKKwkgICAgICAgICAgICB2YXIgbmFtZV8xID0gdGhpcy5w
YXJzZUpTWElkZW50aWZpZXIoKTsKKwkgICAgICAgICAgICBlbGVtZW50TmFtZSA9IHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYTmFtZXNwYWNlZE5hbWUobmFtZXNwYWNlLCBuYW1l
XzEpKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hKU1goJy4nKSkg
eworCSAgICAgICAgICAgIHdoaWxlICh0aGlzLm1hdGNoSlNYKCcuJykpIHsKKwkgICAgICAgICAg
ICAgICAgdmFyIG9iamVjdCA9IGVsZW1lbnROYW1lOworCSAgICAgICAgICAgICAgICB0aGlzLmV4
cGVjdEpTWCgnLicpOworCSAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnBhcnNl
SlNYSWRlbnRpZmllcigpOworCSAgICAgICAgICAgICAgICBlbGVtZW50TmFtZSA9IHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYTWVtYmVyRXhwcmVzc2lvbihvYmplY3QsIHByb3Bl
cnR5KSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGVsZW1l
bnROYW1lOworCSAgICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYQXR0cmli
dXRlTmFtZSA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVK
U1hOb2RlKCk7CisJICAgICAgICB2YXIgYXR0cmlidXRlTmFtZTsKKwkgICAgICAgIHZhciBpZGVu
dGlmaWVyID0gdGhpcy5wYXJzZUpTWElkZW50aWZpZXIoKTsKKwkgICAgICAgIGlmICh0aGlzLm1h
dGNoSlNYKCc6JykpIHsKKwkgICAgICAgICAgICB2YXIgbmFtZXNwYWNlID0gaWRlbnRpZmllcjsK
KwkgICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgnOicpOworCSAgICAgICAgICAgIHZhciBuYW1l
XzIgPSB0aGlzLnBhcnNlSlNYSWRlbnRpZmllcigpOworCSAgICAgICAgICAgIGF0dHJpYnV0ZU5h
bWUgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWE5hbWVzcGFjZWROYW1lKG5h
bWVzcGFjZSwgbmFtZV8yKSk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAg
ICAgICBhdHRyaWJ1dGVOYW1lID0gaWRlbnRpZmllcjsKKwkgICAgICAgIH0KKwkgICAgICAgIHJl
dHVybiBhdHRyaWJ1dGVOYW1lOworCSAgICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBh
cnNlSlNYU3RyaW5nTGl0ZXJhbEF0dHJpYnV0ZSA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZh
ciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CisJICAgICAgICB2YXIgdG9rZW4gPSB0aGlz
Lm5leHRKU1hUb2tlbigpOworCSAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IDggLyogU3RyaW5n
TGl0ZXJhbCAqLykgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9r
ZW4pOworCSAgICAgICAgfQorCSAgICAgICAgdmFyIHJhdyA9IHRoaXMuZ2V0VG9rZW5SYXcodG9r
ZW4pOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuTGl0ZXJh
bCh0b2tlbi52YWx1ZSwgcmF3KSk7CisJICAgIH07CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUu
cGFyc2VKU1hFeHByZXNzaW9uQXR0cmlidXRlID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0SlNYKCd7
Jyk7CisJICAgICAgICB0aGlzLmZpbmlzaEpTWCgpOworCSAgICAgICAgaWYgKHRoaXMubWF0Y2go
J30nKSkgeworCSAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcignSlNYIGF0dHJpYnV0ZXMg
bXVzdCBvbmx5IGJlIGFzc2lnbmVkIGEgbm9uLWVtcHR5IGV4cHJlc3Npb24nKTsKKwkgICAgICAg
IH0KKwkgICAgICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKCk7CisJICAgICAgICB0aGlzLnJlZW50ZXJKU1goKTsKKwkgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWEV4cHJlc3Npb25Db250YWluZXIoZXhwcmVz
c2lvbikpOworCSAgICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYQXR0cmli
dXRlVmFsdWUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICByZXR1cm4gdGhpcy5tYXRjaEpTWCgn
eycpID8gdGhpcy5wYXJzZUpTWEV4cHJlc3Npb25BdHRyaWJ1dGUoKSA6CisJICAgICAgICAgICAg
dGhpcy5tYXRjaEpTWCgnPCcpID8gdGhpcy5wYXJzZUpTWEVsZW1lbnQoKSA6IHRoaXMucGFyc2VK
U1hTdHJpbmdMaXRlcmFsQXR0cmlidXRlKCk7CisJICAgIH07CisJICAgIEpTWFBhcnNlci5wcm90
b3R5cGUucGFyc2VKU1hOYW1lVmFsdWVBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpOworCSAgICAgICAgdmFyIG5hbWUgPSB0
aGlzLnBhcnNlSlNYQXR0cmlidXRlTmFtZSgpOworCSAgICAgICAgdmFyIHZhbHVlID0gbnVsbDsK
KwkgICAgICAgIGlmICh0aGlzLm1hdGNoSlNYKCc9JykpIHsKKwkgICAgICAgICAgICB0aGlzLmV4
cGVjdEpTWCgnPScpOworCSAgICAgICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZUpTWEF0dHJpYnV0
ZVZhbHVlKCk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgSlNYTm9kZS5KU1hBdHRyaWJ1dGUobmFtZSwgdmFsdWUpKTsKKwkgICAgfTsKKwkgICAg
SlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWFNwcmVhZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uICgp
IHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CisJICAgICAgICB0
aGlzLmV4cGVjdEpTWCgneycpOworCSAgICAgICAgdGhpcy5leHBlY3RKU1goJy4uLicpOworCSAg
ICAgICAgdGhpcy5maW5pc2hKU1goKTsKKwkgICAgICAgIHZhciBhcmd1bWVudCA9IHRoaXMucGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCSAgICAgICAgdGhpcy5yZWVudGVySlNYKCk7CisJ
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hTcHJlYWRB
dHRyaWJ1dGUoYXJndW1lbnQpKTsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5w
YXJzZUpTWEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgYXR0cmlidXRl
cyA9IFtdOworCSAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoSlNYKCcvJykgJiYgIXRoaXMubWF0
Y2hKU1goJz4nKSkgeworCSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSB0aGlzLm1hdGNoSlNY
KCd7JykgPyB0aGlzLnBhcnNlSlNYU3ByZWFkQXR0cmlidXRlKCkgOgorCSAgICAgICAgICAgICAg
ICB0aGlzLnBhcnNlSlNYTmFtZVZhbHVlQXR0cmlidXRlKCk7CisJICAgICAgICAgICAgYXR0cmli
dXRlcy5wdXNoKGF0dHJpYnV0ZSk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gYXR0cmli
dXRlczsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWE9wZW5pbmdF
bGVtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpT
WE5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc8Jyk7CisJICAgICAgICB2YXIgbmFt
ZSA9IHRoaXMucGFyc2VKU1hFbGVtZW50TmFtZSgpOworCSAgICAgICAgdmFyIGF0dHJpYnV0ZXMg
PSB0aGlzLnBhcnNlSlNYQXR0cmlidXRlcygpOworCSAgICAgICAgdmFyIHNlbGZDbG9zaW5nID0g
dGhpcy5tYXRjaEpTWCgnLycpOworCSAgICAgICAgaWYgKHNlbGZDbG9zaW5nKSB7CisJICAgICAg
ICAgICAgdGhpcy5leHBlY3RKU1goJy8nKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZXhw
ZWN0SlNYKCc+Jyk7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNY
Tm9kZS5KU1hPcGVuaW5nRWxlbWVudChuYW1lLCBzZWxmQ2xvc2luZywgYXR0cmlidXRlcykpOwor
CSAgICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYQm91bmRhcnlFbGVtZW50
ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUo
KTsKKwkgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc8Jyk7CisJICAgICAgICBpZiAodGhpcy5tYXRj
aEpTWCgnLycpKSB7CisJICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJy8nKTsKKwkgICAgICAg
ICAgICB2YXIgZWxlbWVudE5hbWUgPSB0aGlzLnBhcnNlSlNYRWxlbWVudE5hbWUoKTsKKwkgICAg
ICAgICAgICB0aGlzLmV4cGVjdEpTWCgnPicpOworCSAgICAgICAgICAgIHJldHVybiB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWENsb3NpbmdFbGVtZW50KGVsZW1lbnROYW1lKSk7
CisJICAgICAgICB9CisJICAgICAgICB2YXIgbmFtZSA9IHRoaXMucGFyc2VKU1hFbGVtZW50TmFt
ZSgpOworCSAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLnBhcnNlSlNYQXR0cmlidXRlcygp
OworCSAgICAgICAgdmFyIHNlbGZDbG9zaW5nID0gdGhpcy5tYXRjaEpTWCgnLycpOworCSAgICAg
ICAgaWYgKHNlbGZDbG9zaW5nKSB7CisJICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJy8nKTsK
KwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc+Jyk7CisJICAgICAgICByZXR1
cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hPcGVuaW5nRWxlbWVudChuYW1l
LCBzZWxmQ2xvc2luZywgYXR0cmlidXRlcykpOworCSAgICB9OworCSAgICBKU1hQYXJzZXIucHJv
dG90eXBlLnBhcnNlSlNYRW1wdHlFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAg
dmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWENoaWxkTm9kZSgpOworCSAgICAgICAgdGhpcy5jb2xs
ZWN0Q29tbWVudHMoKTsKKwkgICAgICAgIHRoaXMubGFzdE1hcmtlci5pbmRleCA9IHRoaXMuc2Nh
bm5lci5pbmRleDsKKwkgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lID0gdGhpcy5zY2FubmVy
LmxpbmVOdW1iZXI7CisJICAgICAgICB0aGlzLmxhc3RNYXJrZXIuY29sdW1uID0gdGhpcy5zY2Fu
bmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKKwkgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWEVtcHR5RXhwcmVzc2lvbigpKTsKKwkgICAg
fTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEV4cHJlc3Npb25Db250YWluZXIg
PSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgp
OworCSAgICAgICAgdGhpcy5leHBlY3RKU1goJ3snKTsKKwkgICAgICAgIHZhciBleHByZXNzaW9u
OworCSAgICAgICAgaWYgKHRoaXMubWF0Y2hKU1goJ30nKSkgeworCSAgICAgICAgICAgIGV4cHJl
c3Npb24gPSB0aGlzLnBhcnNlSlNYRW1wdHlFeHByZXNzaW9uKCk7CisJICAgICAgICAgICAgdGhp
cy5leHBlY3RKU1goJ30nKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAg
ICAgIHRoaXMuZmluaXNoSlNYKCk7CisJICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHRoaXMucGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCSAgICAgICAgICAgIHRoaXMucmVlbnRlckpTWCgp
OworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpT
WE5vZGUuSlNYRXhwcmVzc2lvbkNvbnRhaW5lcihleHByZXNzaW9uKSk7CisJICAgIH07CisJICAg
IEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hDaGlsZHJlbiA9IGZ1bmN0aW9uICgpIHsKKwkg
ICAgICAgIHZhciBjaGlsZHJlbiA9IFtdOworCSAgICAgICAgd2hpbGUgKCF0aGlzLnNjYW5uZXIu
ZW9mKCkpIHsKKwkgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYQ2hpbGROb2Rl
KCk7CisJICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0SlNYVGV4dCgpOworCSAgICAg
ICAgICAgIGlmICh0b2tlbi5zdGFydCA8IHRva2VuLmVuZCkgeworCSAgICAgICAgICAgICAgICB2
YXIgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7CisJICAgICAgICAgICAgICAgIHZhciBj
aGlsZCA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYVGV4dCh0b2tlbi52YWx1
ZSwgcmF3KSk7CisJICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpOworCSAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5u
ZXIuaW5kZXhdID09PSAneycpIHsKKwkgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRo
aXMucGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyKCk7CisJICAgICAgICAgICAgICAgIGNoaWxk
cmVuLnB1c2goY29udGFpbmVyKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7
CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkg
ICAgICAgIHJldHVybiBjaGlsZHJlbjsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlw
ZS5wYXJzZUNvbXBsZXhKU1hFbGVtZW50ID0gZnVuY3Rpb24gKGVsKSB7CisJICAgICAgICB2YXIg
c3RhY2sgPSBbXTsKKwkgICAgICAgIHdoaWxlICghdGhpcy5zY2FubmVyLmVvZigpKSB7CisJICAg
ICAgICAgICAgZWwuY2hpbGRyZW4gPSBlbC5jaGlsZHJlbi5jb25jYXQodGhpcy5wYXJzZUpTWENo
aWxkcmVuKCkpOworCSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hDaGlsZE5v
ZGUoKTsKKwkgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMucGFyc2VKU1hCb3VuZGFyeUVs
ZW1lbnQoKTsKKwkgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBqc3hfc3ludGF4XzEu
SlNYU3ludGF4LkpTWE9wZW5pbmdFbGVtZW50KSB7CisJICAgICAgICAgICAgICAgIHZhciBvcGVu
aW5nID0gZWxlbWVudDsKKwkgICAgICAgICAgICAgICAgaWYgKG9wZW5pbmcuc2VsZkNsb3Npbmcp
IHsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IEpTWE5vZGUuSlNYRWxlbWVudChvcGVuaW5nLCBbXSwgbnVsbCkpOworCSAgICAgICAgICAg
ICAgICAgICAgZWwuY2hpbGRyZW4ucHVzaChjaGlsZCk7CisJICAgICAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGVs
KTsKKwkgICAgICAgICAgICAgICAgICAgIGVsID0geyBub2RlOiBub2RlLCBvcGVuaW5nOiBvcGVu
aW5nLCBjbG9zaW5nOiBudWxsLCBjaGlsZHJlbjogW10gfTsKKwkgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBqc3hfc3lu
dGF4XzEuSlNYU3ludGF4LkpTWENsb3NpbmdFbGVtZW50KSB7CisJICAgICAgICAgICAgICAgIGVs
LmNsb3NpbmcgPSBlbGVtZW50OworCSAgICAgICAgICAgICAgICB2YXIgb3Blbl8xID0gZ2V0UXVh
bGlmaWVkRWxlbWVudE5hbWUoZWwub3BlbmluZy5uYW1lKTsKKwkgICAgICAgICAgICAgICAgdmFy
IGNsb3NlXzEgPSBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShlbC5jbG9zaW5nLm5hbWUpOworCSAg
ICAgICAgICAgICAgICBpZiAob3Blbl8xICE9PSBjbG9zZV8xKSB7CisJICAgICAgICAgICAgICAg
ICAgICB0aGlzLnRvbGVyYXRlRXJyb3IoJ0V4cGVjdGVkIGNvcnJlc3BvbmRpbmcgSlNYIGNsb3Np
bmcgdGFnIGZvciAlMCcsIG9wZW5fMSk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBj
aGlsZCA9IHRoaXMuZmluYWxpemUoZWwubm9kZSwgbmV3IEpTWE5vZGUuSlNYRWxlbWVudChlbC5v
cGVuaW5nLCBlbC5jaGlsZHJlbiwgZWwuY2xvc2luZykpOworCSAgICAgICAgICAgICAgICAgICAg
ZWwgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTsKKwkgICAgICAgICAgICAgICAgICAgIGVsLmNo
aWxkcmVuLnB1c2goY2hpbGQpOworCSAgICAgICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7CisJ
ICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAg
ICAgIH0KKwkgICAgICAgIHJldHVybiBlbDsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZUpTWEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlSlNYTm9kZSgpOworCSAgICAgICAgdmFyIG9wZW5pbmcgPSB0aGlzLnBhcnNl
SlNYT3BlbmluZ0VsZW1lbnQoKTsKKwkgICAgICAgIHZhciBjaGlsZHJlbiA9IFtdOworCSAgICAg
ICAgdmFyIGNsb3NpbmcgPSBudWxsOworCSAgICAgICAgaWYgKCFvcGVuaW5nLnNlbGZDbG9zaW5n
KSB7CisJICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5wYXJzZUNvbXBsZXhKU1hFbGVtZW50KHsg
bm9kZTogbm9kZSwgb3BlbmluZzogb3BlbmluZywgY2xvc2luZzogY2xvc2luZywgY2hpbGRyZW46
IGNoaWxkcmVuIH0pOworCSAgICAgICAgICAgIGNoaWxkcmVuID0gZWwuY2hpbGRyZW47CisJICAg
ICAgICAgICAgY2xvc2luZyA9IGVsLmNsb3Npbmc7CisJICAgICAgICB9CisJICAgICAgICByZXR1
cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hFbGVtZW50KG9wZW5pbmcsIGNo
aWxkcmVuLCBjbG9zaW5nKSk7CisJICAgIH07CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFy
c2VKU1hSb290ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgLy8gUG9wIHRoZSBvcGVuaW5nICc8
JyBhZGRlZCBmcm9tIHRoZSBsb29rYWhlYWQuCisJICAgICAgICBpZiAodGhpcy5jb25maWcudG9r
ZW5zKSB7CisJICAgICAgICAgICAgdGhpcy50b2tlbnMucG9wKCk7CisJICAgICAgICB9CisJICAg
ICAgICB0aGlzLnN0YXJ0SlNYKCk7CisJICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMucGFyc2VK
U1hFbGVtZW50KCk7CisJICAgICAgICB0aGlzLmZpbmlzaEpTWCgpOworCSAgICAgICAgcmV0dXJu
IGVsZW1lbnQ7CisJICAgIH07CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUuaXNTdGFydE9mRXhw
cmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBl
LmlzU3RhcnRPZkV4cHJlc3Npb24uY2FsbCh0aGlzKSB8fCB0aGlzLm1hdGNoKCc8Jyk7CisJICAg
IH07CisJICAgIHJldHVybiBKU1hQYXJzZXI7CisJfShwYXJzZXJfMS5QYXJzZXIpKTsKKwlleHBv
cnRzLkpTWFBhcnNlciA9IEpTWFBhcnNlcjsKIAogCiAvKioqLyB9LAogLyogNCAqLwogLyoqKi8g
ZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CiAKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgLy8g
U2VlIGFsc28gdG9vbHMvZ2VuZXJhdGUtdW5pY29kZS1yZWdleC5qcy4KLSAgICB2YXIgUmVnZXgg
PSB7Ci0gICAgICAgIC8vIFVuaWNvZGUgdjguMC4wIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0Ogot
ICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogL1tceEFBXHhCNVx4QkFceEMwLVx4RDZc
eEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVF
XHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzN0ZcdTAzODZcdTAzODgt
XHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDhB
LVx1MDUyRlx1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQVx1MDVG
MC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZF
NVx1MDZFNlx1MDZFRVx1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJG
XHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAt
XHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMC1cdTA4QjRcdTA5MDQt
XHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5ODBcdTA5ODUtXHUwOThD
XHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5
XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1c
dTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1
MEEzNVx1MEEzNlx1MEEzOFx1MEEzOVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUw
QTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1
MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBBRjlcdTBCMDUtXHUw
QjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBC
MzUtXHUwQjM5XHUwQjNEXHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4
NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OVx1MEI5QVx1MEI5Q1x1MEI5
RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXHUwQzA1
LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzOVx1MEMzRFx1MEM1
OC1cdTBDNUFcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBD
QThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENG
MVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0
RVx1MEQ1Ri1cdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFcdTBE
QjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBF
NDAtXHUwRTQ2XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0
LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFC
XHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFREMt
XHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAw
LVx1MTAyQVx1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2
XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENE
XHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUwLVx1MTI1Nlx1MTI1
OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBcdTEy
QjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUx
MkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1c
dTEzRjVcdTEzRjgtXHUxM0ZEXHUxNDAxLVx1MTY2Q1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlB
XHUxNkEwLVx1MTZFQVx1MTZFRS1cdTE2RjhcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMVx1MTcy
MC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUx
N0IzXHUxN0Q3XHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUx
OEY1XHUxOTAwLVx1MTkxRVx1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1
MTlCMC1cdTE5QzlcdTFBMDAtXHUxQTE2XHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNc
dTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRlx1MUJCQS1cdTFCRTVcdTFDMDAt
XHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXHUxQ0VFLVx1MUNG
MVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYy
MC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1
Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFG
QzYtXHUxRkNDXHUxRkQwLVx1MUZEM1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1
MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUy
MTBBLVx1MjExM1x1MjExNVx1MjExOC1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMkEtXHUy
MTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxNjAtXHUyMTg4XHUyQzAwLVx1
MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM1x1
MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1
MkRBMC1cdTJEQTZcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAt
XHUyREM2XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUzMDA1LVx1MzAw
N1x1MzAyMS1cdTMwMjlcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMwOTZcdTMw
OUItXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXHUzMTMxLVx1
MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGRDVc
dUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJB
XHVBNjJCXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OURcdUE2QTAtXHVBNkVGXHVBNzE3LVx1QTcx
Rlx1QTcyMi1cdUE3ODhcdUE3OEItXHVBN0FEXHVBN0IwLVx1QTdCN1x1QTdGNy1cdUE4MDFcdUE4
MDMtXHVBODA1XHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1
QThCM1x1QThGMi1cdUE4RjdcdUE4RkJcdUE4RkRcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1
QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBOUUwLVx1QTlFNFx1QTlFNi1cdUE5RUZc
dUE5RkEtXHVBOUZFXHVBQTAwLVx1QUEyOFx1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYw
LVx1QUE3Nlx1QUE3QVx1QUE3RS1cdUFBQUZcdUFBQjFcdUFBQjVcdUFBQjZcdUFBQjktXHVBQUJE
XHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XHVBQjAx
LVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFC
MkVcdUFCMzAtXHVBQjVBXHVBQjVDLVx1QUI2NVx1QUI3MC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVE
N0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1c
dUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgt
XHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1c
dUZEM0RcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0
XHVGRTc2LVx1RkVGQ1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZD
Mi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdfFx1RDgwMFtc
dURDMDAtXHVEQzBCXHVEQzBELVx1REMyNlx1REMyOC1cdURDM0FcdURDM0NcdURDM0RcdURDM0Yt
XHVEQzREXHVEQzUwLVx1REM1RFx1REM4MC1cdURDRkFcdURENDAtXHVERDc0XHVERTgwLVx1REU5
Q1x1REVBMC1cdURFRDBcdURGMDAtXHVERjFGXHVERjMwLVx1REY0QVx1REY1MC1cdURGNzVcdURG
ODAtXHVERjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURGQ0ZcdURGRDEtXHVERkQ1XXxcdUQ4MDFb
XHVEQzAwLVx1REM5RFx1REQwMC1cdUREMjdcdUREMzAtXHVERDYzXHVERTAwLVx1REYzNlx1REY0
MC1cdURGNTVcdURGNjAtXHVERjY3XXxcdUQ4MDJbXHVEQzAwLVx1REMwNVx1REMwOFx1REMwQS1c
dURDMzVcdURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVEQzU1XHVEQzYwLVx1REM3Nlx1REM4MC1c
dURDOUVcdURDRTAtXHVEQ0YyXHVEQ0Y0XHVEQ0Y1XHVERDAwLVx1REQxNVx1REQyMC1cdUREMzlc
dUREODAtXHVEREI3XHVEREJFXHVEREJGXHVERTAwXHVERTEwLVx1REUxM1x1REUxNS1cdURFMTdc
dURFMTktXHVERTMzXHVERTYwLVx1REU3Q1x1REU4MC1cdURFOUNcdURFQzAtXHVERUM3XHVERUM5
LVx1REVFNFx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjYwLVx1REY3Mlx1REY4MC1cdURG
OTFdfFx1RDgwM1tcdURDMDAtXHVEQzQ4XHVEQzgwLVx1RENCMlx1RENDMC1cdURDRjJdfFx1RDgw
NFtcdURDMDMtXHVEQzM3XHVEQzgzLVx1RENBRlx1RENEMC1cdURDRThcdUREMDMtXHVERDI2XHVE
RDUwLVx1REQ3Mlx1REQ3Nlx1REQ4My1cdUREQjJcdUREQzEtXHVEREM0XHVERERBXHVERERDXHVE
RTAwLVx1REUxMVx1REUxMy1cdURFMkJcdURFODAtXHVERTg2XHVERTg4XHVERThBLVx1REU4RFx1
REU4Ri1cdURFOURcdURFOUYtXHVERUE4XHVERUIwLVx1REVERVx1REYwNS1cdURGMENcdURGMEZc
dURGMTBcdURGMTMtXHVERjI4XHVERjJBLVx1REYzMFx1REYzMlx1REYzM1x1REYzNS1cdURGMzlc
dURGM0RcdURGNTBcdURGNUQtXHVERjYxXXxcdUQ4MDVbXHVEQzgwLVx1RENBRlx1RENDNFx1REND
NVx1RENDN1x1REQ4MC1cdUREQUVcdURERDgtXHVERERCXHVERTAwLVx1REUyRlx1REU0NFx1REU4
MC1cdURFQUFcdURGMDAtXHVERjE5XXxcdUQ4MDZbXHVEQ0EwLVx1RENERlx1RENGRlx1REVDMC1c
dURFRjhdfFx1RDgwOFtcdURDMDAtXHVERjk5XXxcdUQ4MDlbXHVEQzAwLVx1REM2RVx1REM4MC1c
dURENDNdfFtcdUQ4MENcdUQ4NDAtXHVEODY4XHVEODZBLVx1RDg2Q1x1RDg2Ri1cdUQ4NzJdW1x1
REMwMC1cdURGRkZdfFx1RDgwRFtcdURDMDAtXHVEQzJFXXxcdUQ4MTFbXHVEQzAwLVx1REU0Nl18
XHVEODFBW1x1REMwMC1cdURFMzhcdURFNDAtXHVERTVFXHVERUQwLVx1REVFRFx1REYwMC1cdURG
MkZcdURGNDAtXHVERjQzXHVERjYzLVx1REY3N1x1REY3RC1cdURGOEZdfFx1RDgxQltcdURGMDAt
XHVERjQ0XHVERjUwXHVERjkzLVx1REY5Rl18XHVEODJDW1x1REMwMFx1REMwMV18XHVEODJGW1x1
REMwMC1cdURDNkFcdURDNzAtXHVEQzdDXHVEQzgwLVx1REM4OFx1REM5MC1cdURDOTldfFx1RDgz
NVtcdURDMDAtXHVEQzU0XHVEQzU2LVx1REM5Q1x1REM5RVx1REM5Rlx1RENBMlx1RENBNVx1RENB
Nlx1RENBOS1cdURDQUNcdURDQUUtXHVEQ0I5XHVEQ0JCXHVEQ0JELVx1RENDM1x1RENDNS1cdURE
MDVcdUREMDctXHVERDBBXHVERDBELVx1REQxNFx1REQxNi1cdUREMUNcdUREMUUtXHVERDM5XHVE
RDNCLVx1REQzRVx1REQ0MC1cdURENDRcdURENDZcdURENEEtXHVERDUwXHVERDUyLVx1REVBNVx1
REVBOC1cdURFQzBcdURFQzItXHVERURBXHVERURDLVx1REVGQVx1REVGQy1cdURGMTRcdURGMTYt
XHVERjM0XHVERjM2LVx1REY0RVx1REY1MC1cdURGNkVcdURGNzAtXHVERjg4XHVERjhBLVx1REZB
OFx1REZBQS1cdURGQzJcdURGQzQtXHVERkNCXXxcdUQ4M0FbXHVEQzAwLVx1RENDNF18XHVEODNC
W1x1REUwMC1cdURFMDNcdURFMDUtXHVERTFGXHVERTIxXHVERTIyXHVERTI0XHVERTI3XHVERTI5
LVx1REUzMlx1REUzNC1cdURFMzdcdURFMzlcdURFM0JcdURFNDJcdURFNDdcdURFNDlcdURFNEJc
dURFNEQtXHVERTRGXHVERTUxXHVERTUyXHVERTU0XHVERTU3XHVERTU5XHVERTVCXHVERTVEXHVE
RTVGXHVERTYxXHVERTYyXHVERTY0XHVERTY3LVx1REU2QVx1REU2Qy1cdURFNzJcdURFNzQtXHVE
RTc3XHVERTc5LVx1REU3Q1x1REU3RVx1REU4MC1cdURFODlcdURFOEItXHVERTlCXHVERUExLVx1
REVBM1x1REVBNS1cdURFQTlcdURFQUItXHVERUJCXXxcdUQ4NjlbXHVEQzAwLVx1REVENlx1REYw
MC1cdURGRkZdfFx1RDg2RFtcdURDMDAtXHVERjM0XHVERjQwLVx1REZGRl18XHVEODZFW1x1REMw
MC1cdURDMURcdURDMjAtXHVERkZGXXxcdUQ4NzNbXHVEQzAwLVx1REVBMV18XHVEODdFW1x1REMw
MC1cdURFMURdLywKLSAgICAgICAgLy8gVW5pY29kZSB2OC4wLjAgTm9uQXNjaWlJZGVudGlmaWVy
UGFydDoKLSAgICAgICAgTm9uQXNjaWlJZGVudGlmaWVyUGFydDogL1tceEFBXHhCNVx4QjdceEJB
XHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1
MDJFQ1x1MDJFRVx1MDMwMC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzdGXHUw
Mzg2LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1
MDQ4My1cdTA0ODdcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdc
dTA1OTEtXHUwNUJEXHUwNUJGXHUwNUMxXHUwNUMyXHUwNUM0XHUwNUM1XHUwNUM3XHUwNUQwLVx1
MDVFQVx1MDVGMC1cdTA1RjJcdTA2MTAtXHUwNjFBXHUwNjIwLVx1MDY2OVx1MDY2RS1cdTA2RDNc
dTA2RDUtXHUwNkRDXHUwNkRGLVx1MDZFOFx1MDZFQS1cdTA2RkNcdTA2RkZcdTA3MTAtXHUwNzRB
XHUwNzRELVx1MDdCMVx1MDdDMC1cdTA3RjVcdTA3RkFcdTA4MDAtXHUwODJEXHUwODQwLVx1MDg1
Qlx1MDhBMC1cdTA4QjRcdTA4RTMtXHUwOTYzXHUwOTY2LVx1MDk2Rlx1MDk3MS1cdTA5ODNcdTA5
ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5
QjYtXHUwOUI5XHUwOUJDLVx1MDlDNFx1MDlDN1x1MDlDOFx1MDlDQi1cdTA5Q0VcdTA5RDdcdTA5
RENcdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2LVx1MDlGMVx1MEEwMS1cdTBBMDNcdTBBMDUtXHUw
QTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBB
MzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBM0NcdTBBM0UtXHUwQTQyXHUwQTQ3XHUwQTQ4XHUwQTRC
LVx1MEE0RFx1MEE1MVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNjYtXHUwQTc1XHUwQTgxLVx1MEE4
M1x1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBB
QjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJDLVx1MEFDNVx1MEFDNy1cdTBBQzlcdTBBQ0ItXHUw
QUNEXHUwQUQwXHUwQUUwLVx1MEFFM1x1MEFFNi1cdTBBRUZcdTBBRjlcdTBCMDEtXHUwQjAzXHUw
QjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUw
QjMzXHUwQjM1LVx1MEIzOVx1MEIzQy1cdTBCNDRcdTBCNDdcdTBCNDhcdTBCNEItXHUwQjREXHUw
QjU2XHUwQjU3XHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2M1x1MEI2Ni1cdTBCNkZcdTBCNzFcdTBC
ODJcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBC
OUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJC
OVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNBLVx1MEJDRFx1MEJEMFx1MEJEN1x1MEJF
Ni1cdTBCRUZcdTBDMDAtXHUwQzAzXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUw
QzI4XHUwQzJBLVx1MEMzOVx1MEMzRC1cdTBDNDRcdTBDNDYtXHUwQzQ4XHUwQzRBLVx1MEM0RFx1
MEM1NVx1MEM1Nlx1MEM1OC1cdTBDNUFcdTBDNjAtXHUwQzYzXHUwQzY2LVx1MEM2Rlx1MEM4MS1c
dTBDODNcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0Iz
XHUwQ0I1LVx1MENCOVx1MENCQy1cdTBDQzRcdTBDQzYtXHUwQ0M4XHUwQ0NBLVx1MENDRFx1MENE
NVx1MENENlx1MENERVx1MENFMC1cdTBDRTNcdTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0YyXHUwRDAx
LVx1MEQwM1x1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRC1cdTBE
NDRcdTBENDYtXHUwRDQ4XHUwRDRBLVx1MEQ0RVx1MEQ1N1x1MEQ1Ri1cdTBENjNcdTBENjYtXHUw
RDZGXHUwRDdBLVx1MEQ3Rlx1MEQ4Mlx1MEQ4M1x1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUw
REIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBEQ0FcdTBEQ0YtXHUwREQ0XHUwREQ2XHUw
REQ4LVx1MERERlx1MERFNi1cdTBERUZcdTBERjJcdTBERjNcdTBFMDEtXHUwRTNBXHUwRTQwLVx1
MEU0RVx1MEU1MC1cdTBFNTlcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBF
OERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBF
QUFcdTBFQUJcdTBFQUQtXHUwRUI5XHUwRUJCLVx1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBF
QzgtXHUwRUNEXHUwRUQwLVx1MEVEOVx1MEVEQy1cdTBFREZcdTBGMDBcdTBGMThcdTBGMTlcdTBG
MjAtXHUwRjI5XHUwRjM1XHUwRjM3XHUwRjM5XHUwRjNFLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBG
NzEtXHUwRjg0XHUwRjg2LVx1MEY5N1x1MEY5OS1cdTBGQkNcdTBGQzZcdTEwMDAtXHUxMDQ5XHUx
MDUwLVx1MTA5RFx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1
MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1c
dTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJF
XHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMx
NVx1MTMxOC1cdTEzNUFcdTEzNUQtXHUxMzVGXHUxMzY5LVx1MTM3MVx1MTM4MC1cdTEzOEZcdTEz
QTAtXHUxM0Y1XHUxM0Y4LVx1MTNGRFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1
MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTRc
dTE3MjAtXHUxNzM0XHUxNzQwLVx1MTc1M1x1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzcy
XHUxNzczXHUxNzgwLVx1MTdEM1x1MTdEN1x1MTdEQ1x1MTdERFx1MTdFMC1cdTE3RTlcdTE4MEIt
XHUxODBEXHUxODEwLVx1MTgxOVx1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEFBXHUxOEIwLVx1MThG
NVx1MTkwMC1cdTE5MUVcdTE5MjAtXHUxOTJCXHUxOTMwLVx1MTkzQlx1MTk0Ni1cdTE5NkRcdTE5
NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlCMC1cdTE5QzlcdTE5RDAtXHUxOURBXHUxQTAwLVx1
MUExQlx1MUEyMC1cdTFBNUVcdTFBNjAtXHUxQTdDXHUxQTdGLVx1MUE4OVx1MUE5MC1cdTFBOTlc
dTFBQTdcdTFBQjAtXHUxQUJEXHUxQjAwLVx1MUI0Qlx1MUI1MC1cdTFCNTlcdTFCNkItXHUxQjcz
XHUxQjgwLVx1MUJGM1x1MUMwMC1cdTFDMzdcdTFDNDAtXHUxQzQ5XHUxQzRELVx1MUM3RFx1MUNE
MC1cdTFDRDJcdTFDRDQtXHUxQ0Y2XHUxQ0Y4XHUxQ0Y5XHUxRDAwLVx1MURGNVx1MURGQy1cdTFG
MTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUx
RjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUx
RkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1
MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjAwQ1x1MjAwRFx1MjAzRlx1
MjA0MFx1MjA1NFx1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIwRDAtXHUyMERDXHUyMEUxXHUy
MEU1LVx1MjBGMFx1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTgtXHUyMTFEXHUy
MTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUy
MTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1
MkNFQi1cdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1
MkQ3Ri1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgt
XHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRE
RVx1MkRFMC1cdTJERkZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyRlx1MzAzMS1cdTMwMzVcdTMw
MzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5OS1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1
MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZc
dTM0MDAtXHU0REI1XHU0RTAwLVx1OUZENVx1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAw
LVx1QTYwQ1x1QTYxMC1cdUE2MkJcdUE2NDAtXHVBNjZGXHVBNjc0LVx1QTY3RFx1QTY3Ri1cdUE2
RjFcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3QURcdUE3QjAtXHVBN0I3XHVB
N0Y3LVx1QTgyN1x1QTg0MC1cdUE4NzNcdUE4ODAtXHVBOEM0XHVBOEQwLVx1QThEOVx1QThFMC1c
dUE4RjdcdUE4RkJcdUE4RkRcdUE5MDAtXHVBOTJEXHVBOTMwLVx1QTk1M1x1QTk2MC1cdUE5N0Nc
dUE5ODAtXHVBOUMwXHVBOUNGLVx1QTlEOVx1QTlFMC1cdUE5RkVcdUFBMDAtXHVBQTM2XHVBQTQw
LVx1QUE0RFx1QUE1MC1cdUFBNTlcdUFBNjAtXHVBQTc2XHVBQTdBLVx1QUFDMlx1QUFEQi1cdUFB
RERcdUFBRTAtXHVBQUVGXHVBQUYyLVx1QUFGNlx1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVB
QjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXHVBQjMwLVx1QUI1QVx1QUI1Qy1c
dUFCNjVcdUFCNzAtXHVBQkVBXHVBQkVDXHVBQkVEXHVBQkYwLVx1QUJGOVx1QUMwMC1cdUQ3QTNc
dUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAw
LVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMUQtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZC
M0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQz
RFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUwMC1cdUZFMEZcdUZF
MjAtXHVGRTJGXHVGRTMzXHVGRTM0XHVGRTRELVx1RkU0Rlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVG
RUZDXHVGRjEwLVx1RkYxOVx1RkYyMS1cdUZGM0FcdUZGM0ZcdUZGNDEtXHVGRjVBXHVGRjY2LVx1
RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENd
fFx1RDgwMFtcdURDMDAtXHVEQzBCXHVEQzBELVx1REMyNlx1REMyOC1cdURDM0FcdURDM0NcdURD
M0RcdURDM0YtXHVEQzREXHVEQzUwLVx1REM1RFx1REM4MC1cdURDRkFcdURENDAtXHVERDc0XHVE
REZEXHVERTgwLVx1REU5Q1x1REVBMC1cdURFRDBcdURFRTBcdURGMDAtXHVERjFGXHVERjMwLVx1
REY0QVx1REY1MC1cdURGN0FcdURGODAtXHVERjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURGQ0Zc
dURGRDEtXHVERkQ1XXxcdUQ4MDFbXHVEQzAwLVx1REM5RFx1RENBMC1cdURDQTlcdUREMDAtXHVE
RDI3XHVERDMwLVx1REQ2M1x1REUwMC1cdURGMzZcdURGNDAtXHVERjU1XHVERjYwLVx1REY2N118
XHVEODAyW1x1REMwMC1cdURDMDVcdURDMDhcdURDMEEtXHVEQzM1XHVEQzM3XHVEQzM4XHVEQzND
XHVEQzNGLVx1REM1NVx1REM2MC1cdURDNzZcdURDODAtXHVEQzlFXHVEQ0UwLVx1RENGMlx1RENG
NFx1RENGNVx1REQwMC1cdUREMTVcdUREMjAtXHVERDM5XHVERDgwLVx1RERCN1x1RERCRVx1RERC
Rlx1REUwMC1cdURFMDNcdURFMDVcdURFMDZcdURFMEMtXHVERTEzXHVERTE1LVx1REUxN1x1REUx
OS1cdURFMzNcdURFMzgtXHVERTNBXHVERTNGXHVERTYwLVx1REU3Q1x1REU4MC1cdURFOUNcdURF
QzAtXHVERUM3XHVERUM5LVx1REVFNlx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjYwLVx1
REY3Mlx1REY4MC1cdURGOTFdfFx1RDgwM1tcdURDMDAtXHVEQzQ4XHVEQzgwLVx1RENCMlx1REND
MC1cdURDRjJdfFx1RDgwNFtcdURDMDAtXHVEQzQ2XHVEQzY2LVx1REM2Rlx1REM3Ri1cdURDQkFc
dURDRDAtXHVEQ0U4XHVEQ0YwLVx1RENGOVx1REQwMC1cdUREMzRcdUREMzYtXHVERDNGXHVERDUw
LVx1REQ3M1x1REQ3Nlx1REQ4MC1cdUREQzRcdUREQ0EtXHVERENDXHVEREQwLVx1REREQVx1RERE
Q1x1REUwMC1cdURFMTFcdURFMTMtXHVERTM3XHVERTgwLVx1REU4Nlx1REU4OFx1REU4QS1cdURF
OERcdURFOEYtXHVERTlEXHVERTlGLVx1REVBOFx1REVCMC1cdURFRUFcdURFRjAtXHVERUY5XHVE
RjAwLVx1REYwM1x1REYwNS1cdURGMENcdURGMEZcdURGMTBcdURGMTMtXHVERjI4XHVERjJBLVx1
REYzMFx1REYzMlx1REYzM1x1REYzNS1cdURGMzlcdURGM0MtXHVERjQ0XHVERjQ3XHVERjQ4XHVE
RjRCLVx1REY0RFx1REY1MFx1REY1N1x1REY1RC1cdURGNjNcdURGNjYtXHVERjZDXHVERjcwLVx1
REY3NF18XHVEODA1W1x1REM4MC1cdURDQzVcdURDQzdcdURDRDAtXHVEQ0Q5XHVERDgwLVx1RERC
NVx1RERCOC1cdUREQzBcdURERDgtXHVEREREXHVERTAwLVx1REU0MFx1REU0NFx1REU1MC1cdURF
NTlcdURFODAtXHVERUI3XHVERUMwLVx1REVDOVx1REYwMC1cdURGMTlcdURGMUQtXHVERjJCXHVE
RjMwLVx1REYzOV18XHVEODA2W1x1RENBMC1cdURDRTlcdURDRkZcdURFQzAtXHVERUY4XXxcdUQ4
MDhbXHVEQzAwLVx1REY5OV18XHVEODA5W1x1REMwMC1cdURDNkVcdURDODAtXHVERDQzXXxbXHVE
ODBDXHVEODQwLVx1RDg2OFx1RDg2QS1cdUQ4NkNcdUQ4NkYtXHVEODcyXVtcdURDMDAtXHVERkZG
XXxcdUQ4MERbXHVEQzAwLVx1REMyRV18XHVEODExW1x1REMwMC1cdURFNDZdfFx1RDgxQVtcdURD
MDAtXHVERTM4XHVERTQwLVx1REU1RVx1REU2MC1cdURFNjlcdURFRDAtXHVERUVEXHVERUYwLVx1
REVGNFx1REYwMC1cdURGMzZcdURGNDAtXHVERjQzXHVERjUwLVx1REY1OVx1REY2My1cdURGNzdc
dURGN0QtXHVERjhGXXxcdUQ4MUJbXHVERjAwLVx1REY0NFx1REY1MC1cdURGN0VcdURGOEYtXHVE
RjlGXXxcdUQ4MkNbXHVEQzAwXHVEQzAxXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURD
N0NcdURDODAtXHVEQzg4XHVEQzkwLVx1REM5OVx1REM5RFx1REM5RV18XHVEODM0W1x1REQ2NS1c
dURENjlcdURENkQtXHVERDcyXHVERDdCLVx1REQ4Mlx1REQ4NS1cdUREOEJcdUREQUEtXHVEREFE
XHVERTQyLVx1REU0NF18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVE
QzlGXHVEQ0EyXHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURD
QkQtXHVEQ0MzXHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1
REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1c
dURENTBcdURENTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZB
XHVERUZDLVx1REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3
MC1cdURGODhcdURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JcdURGQ0UtXHVE
RkZGXXxcdUQ4MzZbXHVERTAwLVx1REUzNlx1REUzQi1cdURFNkNcdURFNzVcdURFODRcdURFOUIt
XHVERTlGXHVERUExLVx1REVBRl18XHVEODNBW1x1REMwMC1cdURDQzRcdURDRDAtXHVEQ0Q2XXxc
dUQ4M0JbXHVERTAwLVx1REUwM1x1REUwNS1cdURFMUZcdURFMjFcdURFMjJcdURFMjRcdURFMjdc
dURFMjktXHVERTMyXHVERTM0LVx1REUzN1x1REUzOVx1REUzQlx1REU0Mlx1REU0N1x1REU0OVx1
REU0Qlx1REU0RC1cdURFNEZcdURFNTFcdURFNTJcdURFNTRcdURFNTdcdURFNTlcdURFNUJcdURF
NURcdURFNUZcdURFNjFcdURFNjJcdURFNjRcdURFNjctXHVERTZBXHVERTZDLVx1REU3Mlx1REU3
NC1cdURFNzdcdURFNzktXHVERTdDXHVERTdFXHVERTgwLVx1REU4OVx1REU4Qi1cdURFOUJcdURF
QTEtXHVERUEzXHVERUE1LVx1REVBOVx1REVBQi1cdURFQkJdfFx1RDg2OVtcdURDMDAtXHVERUQ2
XHVERjAwLVx1REZGRl18XHVEODZEW1x1REMwMC1cdURGMzRcdURGNDAtXHVERkZGXXxcdUQ4NkVb
XHVEQzAwLVx1REMxRFx1REMyMC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXXxcdUQ4N0Vb
XHVEQzAwLVx1REUxRF18XHVEQjQwW1x1REQwMC1cdURERUZdLwotICAgIH07Ci0gICAgZXhwb3J0
cy5DaGFyYWN0ZXIgPSB7Ci0gICAgICAgIC8qIHRzbGludDpkaXNhYmxlOm5vLWJpdHdpc2UgKi8K
LSAgICAgICAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gKGNwKSB7Ci0gICAgICAgICAgICByZXR1
cm4gKGNwIDwgMHgxMDAwMCkgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKSA6Ci0gICAgICAgICAg
ICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MDAgKyAoKGNwIC0gMHgxMDAwMCkgPj4gMTAp
KSArCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEQzAwICsgKChj
cCAtIDB4MTAwMDApICYgMTAyMykpOwotICAgICAgICB9LAotICAgICAgICAvLyBodHRwczovL3Rj
MzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy13aGl0ZS1zcGFjZQotICAgICAgICBpc1doaXRlU3Bh
Y2U6IGZ1bmN0aW9uIChjcCkgewotICAgICAgICAgICAgcmV0dXJuIChjcCA9PT0gMHgyMCkgfHwg
KGNwID09PSAweDA5KSB8fCAoY3AgPT09IDB4MEIpIHx8IChjcCA9PT0gMHgwQykgfHwgKGNwID09
PSAweEEwKSB8fAotICAgICAgICAgICAgICAgIChjcCA+PSAweDE2ODAgJiYgWzB4MTY4MCwgMHgy
MDAwLCAweDIwMDEsIDB4MjAwMiwgMHgyMDAzLCAweDIwMDQsIDB4MjAwNSwgMHgyMDA2LCAweDIw
MDcsIDB4MjAwOCwgMHgyMDA5LCAweDIwMEEsIDB4MjAyRiwgMHgyMDVGLCAweDMwMDAsIDB4RkVG
Rl0uaW5kZXhPZihjcCkgPj0gMCk7Ci0gICAgICAgIH0sCi0gICAgICAgIC8vIGh0dHBzOi8vdGMz
OS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxpbmUtdGVybWluYXRvcnMKLSAgICAgICAgaXNMaW5l
VGVybWluYXRvcjogZnVuY3Rpb24gKGNwKSB7Ci0gICAgICAgICAgICByZXR1cm4gKGNwID09PSAw
eDBBKSB8fCAoY3AgPT09IDB4MEQpIHx8IChjcCA9PT0gMHgyMDI4KSB8fCAoY3AgPT09IDB4MjAy
OSk7Ci0gICAgICAgIH0sCi0gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2
Mi8jc2VjLW5hbWVzLWFuZC1rZXl3b3JkcwotICAgICAgICBpc0lkZW50aWZpZXJTdGFydDogZnVu
Y3Rpb24gKGNwKSB7Ci0gICAgICAgICAgICByZXR1cm4gKGNwID09PSAweDI0KSB8fCAoY3AgPT09
IDB4NUYpIHx8Ci0gICAgICAgICAgICAgICAgKGNwID49IDB4NDEgJiYgY3AgPD0gMHg1QSkgfHwK
LSAgICAgICAgICAgICAgICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDdBKSB8fAotICAgICAgICAg
ICAgICAgIChjcCA9PT0gMHg1QykgfHwKLSAgICAgICAgICAgICAgICAoKGNwID49IDB4ODApICYm
IFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoZXhwb3J0cy5DaGFyYWN0ZXIuZnJv
bUNvZGVQb2ludChjcCkpKTsKLSAgICAgICAgfSwKLSAgICAgICAgaXNJZGVudGlmaWVyUGFydDog
ZnVuY3Rpb24gKGNwKSB7Ci0gICAgICAgICAgICByZXR1cm4gKGNwID09PSAweDI0KSB8fCAoY3Ag
PT09IDB4NUYpIHx8Ci0gICAgICAgICAgICAgICAgKGNwID49IDB4NDEgJiYgY3AgPD0gMHg1QSkg
fHwKLSAgICAgICAgICAgICAgICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDdBKSB8fAotICAgICAg
ICAgICAgICAgIChjcCA+PSAweDMwICYmIGNwIDw9IDB4MzkpIHx8Ci0gICAgICAgICAgICAgICAg
KGNwID09PSAweDVDKSB8fAotICAgICAgICAgICAgICAgICgoY3AgPj0gMHg4MCkgJiYgUmVnZXgu
Tm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KGV4cG9ydHMuQ2hhcmFjdGVyLmZyb21Db2RlUG9p
bnQoY3ApKSk7Ci0gICAgICAgIH0sCi0gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8v
ZWNtYTI2Mi8jc2VjLWxpdGVyYWxzLW51bWVyaWMtbGl0ZXJhbHMKLSAgICAgICAgaXNEZWNpbWFs
RGlnaXQ6IGZ1bmN0aW9uIChjcCkgewotICAgICAgICAgICAgcmV0dXJuIChjcCA+PSAweDMwICYm
IGNwIDw9IDB4MzkpOyAvLyAwLi45Ci0gICAgICAgIH0sCi0gICAgICAgIGlzSGV4RGlnaXQ6IGZ1
bmN0aW9uIChjcCkgewotICAgICAgICAgICAgcmV0dXJuIChjcCA+PSAweDMwICYmIGNwIDw9IDB4
MzkpIHx8Ci0gICAgICAgICAgICAgICAgKGNwID49IDB4NDEgJiYgY3AgPD0gMHg0NikgfHwKLSAg
ICAgICAgICAgICAgICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDY2KTsgLy8gYS4uZgotICAgICAg
ICB9LAotICAgICAgICBpc09jdGFsRGlnaXQ6IGZ1bmN0aW9uIChjcCkgewotICAgICAgICAgICAg
cmV0dXJuIChjcCA+PSAweDMwICYmIGNwIDw9IDB4MzcpOyAvLyAwLi43Ci0gICAgICAgIH0KLSAg
ICB9OworCSJ1c2Ugc3RyaWN0IjsKKwlPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9f
ZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOworCS8vIFNlZSBhbHNvIHRvb2xzL2dlbmVyYXRl
LXVuaWNvZGUtcmVnZXguanMuCisJdmFyIFJlZ2V4ID0geworCSAgICAvLyBVbmljb2RlIHYxMi4x
LjAgTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6CisJICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0
OiAvW1x4QUFceEI1XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJE
MVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdB
LVx1MDM3RFx1MDM3Rlx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0Ez
LVx1MDNGNVx1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2
MC1cdTA1ODhcdTA1RDAtXHUwNUVBXHUwNUVGLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2
NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXHUwNkVGXHUwNkZBLVx1MDZG
Q1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdF
QVx1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAt
XHUwODU4XHUwODYwLVx1MDg2QVx1MDhBMC1cdTA4QjRcdTA4QjYtXHUwOEJEXHUwOTA0LVx1MDkz
OVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTgwXHUwOTg1LVx1MDk4Q1x1MDk4
Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlC
RFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTA5RkNcdTBBMDUt
XHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNc
dTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1
MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJc
dTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQUY5XHUwQjA1LVx1
MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUw
QjM1LVx1MEIzOVx1MEIzRFx1MEI1Q1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBC
ODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBC
OUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMFx1MEMw
NS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzlcdTBDM0RcdTBD
NTgtXHUwQzVBXHUwQzYwXHUwQzYxXHUwQzgwXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBD
OTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBD
RTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMFx1MEQxMi1cdTBEM0FcdTBE
M0RcdTBENEVcdTBENTQtXHUwRDU2XHUwRDVGLVx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUw
RDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1
MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFcdTBFODJcdTBFODRcdTBFODYtXHUw
RThBXHUwRThDLVx1MEVBM1x1MEVBNVx1MEVBNy1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBF
QzAtXHUwRUM0XHUwRUM2XHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUw
RjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1
MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXHUxMDhFXHUx
MEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1
MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1c
dTEyOERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzIt
XHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1
QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y1XHUxM0Y4LVx1MTNGRFx1MTQwMS1cdTE2NkNcdTE2
NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1
MTcwQ1x1MTcwRS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNc
dTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN1x1MTdEQ1x1MTgyMC1cdTE4NzhcdTE4ODAt
XHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5NTAtXHUxOTZEXHUxOTcw
LVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QjAtXHUxOUM5XHUxQTAwLVx1MUExNlx1MUEyMC1cdTFB
NTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFC
QUZcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUx
QzgwLVx1MUM4OFx1MUM5MC1cdTFDQkFcdTFDQkQtXHUxQ0JGXHUxQ0U5LVx1MUNFQ1x1MUNFRS1c
dTFDRjNcdTFDRjVcdTFDRjZcdTFDRkFcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1c
dTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJc
dTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzIt
XHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZF
Q1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXHUyMDkwLVx1MjA5Q1x1MjEw
Mlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTgtXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4
XHUyMTJBLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1MjE4
OFx1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJD
RjJcdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4
MC1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUy
REJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1
MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDI5XHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0NcdTMwNDEt
XHUzMDk2XHUzMDlCLVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEy
Rlx1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRF
MDAtXHU5RkVGXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1
QTYxRlx1QTYyQVx1QTYyQlx1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjlEXHVBNkEwLVx1QTZFRlx1
QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XHVBNzhCLVx1QTdCRlx1QTdDMi1cdUE3QzZcdUE3Rjct
XHVBODAxXHVBODAzLVx1QTgwNVx1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3
M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXHVBOEZEXHVBOEZFXHVBOTBBLVx1QTky
NVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QTlFMC1cdUE5
RTRcdUE5RTYtXHVBOUVGXHVBOUZBLVx1QTlGRVx1QUEwMC1cdUFBMjhcdUFBNDAtXHVBQTQyXHVB
QTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBN0UtXHVBQUFGXHVBQUIxXHVBQUI1XHVB
QUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVB
QUYyLVx1QUFGNFx1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1c
dUFCMjZcdUFCMjgtXHVBQjJFXHVBQjMwLVx1QUI1QVx1QUI1Qy1cdUFCNjdcdUFCNzAtXHVBQkUy
XHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3
MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZC
MkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0
Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVG
REZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1
RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEt
XHVGRkRDXXxcdUQ4MDBbXHVEQzAwLVx1REMwQlx1REMwRC1cdURDMjZcdURDMjgtXHVEQzNBXHVE
QzNDXHVEQzNEXHVEQzNGLVx1REM0RFx1REM1MC1cdURDNURcdURDODAtXHVEQ0ZBXHVERDQwLVx1
REQ3NFx1REU4MC1cdURFOUNcdURFQTAtXHVERUQwXHVERjAwLVx1REYxRlx1REYyRC1cdURGNEFc
dURGNTAtXHVERjc1XHVERjgwLVx1REY5RFx1REZBMC1cdURGQzNcdURGQzgtXHVERkNGXHVERkQx
LVx1REZENV18XHVEODAxW1x1REMwMC1cdURDOURcdURDQjAtXHVEQ0QzXHVEQ0Q4LVx1RENGQlx1
REQwMC1cdUREMjdcdUREMzAtXHVERDYzXHVERTAwLVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAt
XHVERjY3XXxcdUQ4MDJbXHVEQzAwLVx1REMwNVx1REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURD
MzhcdURDM0NcdURDM0YtXHVEQzU1XHVEQzYwLVx1REM3Nlx1REM4MC1cdURDOUVcdURDRTAtXHVE
Q0YyXHVEQ0Y0XHVEQ0Y1XHVERDAwLVx1REQxNVx1REQyMC1cdUREMzlcdUREODAtXHVEREI3XHVE
REJFXHVEREJGXHVERTAwXHVERTEwLVx1REUxM1x1REUxNS1cdURFMTdcdURFMTktXHVERTM1XHVE
RTYwLVx1REU3Q1x1REU4MC1cdURFOUNcdURFQzAtXHVERUM3XHVERUM5LVx1REVFNFx1REYwMC1c
dURGMzVcdURGNDAtXHVERjU1XHVERjYwLVx1REY3Mlx1REY4MC1cdURGOTFdfFx1RDgwM1tcdURD
MDAtXHVEQzQ4XHVEQzgwLVx1RENCMlx1RENDMC1cdURDRjJcdUREMDAtXHVERDIzXHVERjAwLVx1
REYxQ1x1REYyN1x1REYzMC1cdURGNDVcdURGRTAtXHVERkY2XXxcdUQ4MDRbXHVEQzAzLVx1REMz
N1x1REM4My1cdURDQUZcdURDRDAtXHVEQ0U4XHVERDAzLVx1REQyNlx1REQ0NFx1REQ1MC1cdURE
NzJcdURENzZcdUREODMtXHVEREIyXHVEREMxLVx1RERDNFx1REREQVx1REREQ1x1REUwMC1cdURF
MTFcdURFMTMtXHVERTJCXHVERTgwLVx1REU4Nlx1REU4OFx1REU4QS1cdURFOERcdURFOEYtXHVE
RTlEXHVERTlGLVx1REVBOFx1REVCMC1cdURFREVcdURGMDUtXHVERjBDXHVERjBGXHVERjEwXHVE
RjEzLVx1REYyOFx1REYyQS1cdURGMzBcdURGMzJcdURGMzNcdURGMzUtXHVERjM5XHVERjNEXHVE
RjUwXHVERjVELVx1REY2MV18XHVEODA1W1x1REMwMC1cdURDMzRcdURDNDctXHVEQzRBXHVEQzVG
XHVEQzgwLVx1RENBRlx1RENDNFx1RENDNVx1RENDN1x1REQ4MC1cdUREQUVcdURERDgtXHVERERC
XHVERTAwLVx1REUyRlx1REU0NFx1REU4MC1cdURFQUFcdURFQjhcdURGMDAtXHVERjFBXXxcdUQ4
MDZbXHVEQzAwLVx1REMyQlx1RENBMC1cdURDREZcdURDRkZcdUREQTAtXHVEREE3XHVEREFBLVx1
REREMFx1RERFMVx1RERFM1x1REUwMFx1REUwQi1cdURFMzJcdURFM0FcdURFNTBcdURFNUMtXHVE
RTg5XHVERTlEXHVERUMwLVx1REVGOF18XHVEODA3W1x1REMwMC1cdURDMDhcdURDMEEtXHVEQzJF
XHVEQzQwXHVEQzcyLVx1REM4Rlx1REQwMC1cdUREMDZcdUREMDhcdUREMDlcdUREMEItXHVERDMw
XHVERDQ2XHVERDYwLVx1REQ2NVx1REQ2N1x1REQ2OFx1REQ2QS1cdUREODlcdUREOThcdURFRTAt
XHVERUYyXXxcdUQ4MDhbXHVEQzAwLVx1REY5OV18XHVEODA5W1x1REMwMC1cdURDNkVcdURDODAt
XHVERDQzXXxbXHVEODBDXHVEODFDLVx1RDgyMFx1RDg0MC1cdUQ4NjhcdUQ4NkEtXHVEODZDXHVE
ODZGLVx1RDg3Mlx1RDg3NC1cdUQ4NzldW1x1REMwMC1cdURGRkZdfFx1RDgwRFtcdURDMDAtXHVE
QzJFXXxcdUQ4MTFbXHVEQzAwLVx1REU0Nl18XHVEODFBW1x1REMwMC1cdURFMzhcdURFNDAtXHVE
RTVFXHVERUQwLVx1REVFRFx1REYwMC1cdURGMkZcdURGNDAtXHVERjQzXHVERjYzLVx1REY3N1x1
REY3RC1cdURGOEZdfFx1RDgxQltcdURFNDAtXHVERTdGXHVERjAwLVx1REY0QVx1REY1MFx1REY5
My1cdURGOUZcdURGRTBcdURGRTFcdURGRTNdfFx1RDgyMVtcdURDMDAtXHVERkY3XXxcdUQ4MjJb
XHVEQzAwLVx1REVGMl18XHVEODJDW1x1REMwMC1cdUREMUVcdURENTAtXHVERDUyXHVERDY0LVx1
REQ2N1x1REQ3MC1cdURFRkJdfFx1RDgyRltcdURDMDAtXHVEQzZBXHVEQzcwLVx1REM3Q1x1REM4
MC1cdURDODhcdURDOTAtXHVEQzk5XXxcdUQ4MzVbXHVEQzAwLVx1REM1NFx1REM1Ni1cdURDOUNc
dURDOUVcdURDOUZcdURDQTJcdURDQTVcdURDQTZcdURDQTktXHVEQ0FDXHVEQ0FFLVx1RENCOVx1
RENCQlx1RENCRC1cdURDQzNcdURDQzUtXHVERDA1XHVERDA3LVx1REQwQVx1REQwRC1cdUREMTRc
dUREMTYtXHVERDFDXHVERDFFLVx1REQzOVx1REQzQi1cdUREM0VcdURENDAtXHVERDQ0XHVERDQ2
XHVERDRBLVx1REQ1MFx1REQ1Mi1cdURFQTVcdURFQTgtXHVERUMwXHVERUMyLVx1REVEQVx1REVE
Qy1cdURFRkFcdURFRkMtXHVERjE0XHVERjE2LVx1REYzNFx1REYzNi1cdURGNEVcdURGNTAtXHVE
RjZFXHVERjcwLVx1REY4OFx1REY4QS1cdURGQThcdURGQUEtXHVERkMyXHVERkM0LVx1REZDQl18
XHVEODM4W1x1REQwMC1cdUREMkNcdUREMzctXHVERDNEXHVERDRFXHVERUMwLVx1REVFQl18XHVE
ODNBW1x1REMwMC1cdURDQzRcdUREMDAtXHVERDQzXHVERDRCXXxcdUQ4M0JbXHVERTAwLVx1REUw
M1x1REUwNS1cdURFMUZcdURFMjFcdURFMjJcdURFMjRcdURFMjdcdURFMjktXHVERTMyXHVERTM0
LVx1REUzN1x1REUzOVx1REUzQlx1REU0Mlx1REU0N1x1REU0OVx1REU0Qlx1REU0RC1cdURFNEZc
dURFNTFcdURFNTJcdURFNTRcdURFNTdcdURFNTlcdURFNUJcdURFNURcdURFNUZcdURFNjFcdURF
NjJcdURFNjRcdURFNjctXHVERTZBXHVERTZDLVx1REU3Mlx1REU3NC1cdURFNzdcdURFNzktXHVE
RTdDXHVERTdFXHVERTgwLVx1REU4OVx1REU4Qi1cdURFOUJcdURFQTEtXHVERUEzXHVERUE1LVx1
REVBOVx1REVBQi1cdURFQkJdfFx1RDg2OVtcdURDMDAtXHVERUQ2XHVERjAwLVx1REZGRl18XHVE
ODZEW1x1REMwMC1cdURGMzRcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMxRFx1REMy
MC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXHVERUIwLVx1REZGRl18XHVEODdBW1x1REMw
MC1cdURGRTBdfFx1RDg3RVtcdURDMDAtXHVERTFEXS8sCisJICAgIC8vIFVuaWNvZGUgdjEyLjEu
MCBOb25Bc2NpaUlkZW50aWZpZXJQYXJ0OgorCSAgICBOb25Bc2NpaUlkZW50aWZpZXJQYXJ0OiAv
W1x4QUFceEI1XHhCN1x4QkFceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAy
RDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzAwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3
QS1cdTAzN0RcdTAzN0ZcdTAzODYtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAz
RjVcdTAzRjctXHUwNDgxXHUwNDgzLVx1MDQ4N1x1MDQ4QS1cdTA1MkZcdTA1MzEtXHUwNTU2XHUw
NTU5XHUwNTYwLVx1MDU4OFx1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzFcdTA1QzJcdTA1QzRcdTA1
QzVcdTA1QzdcdTA1RDAtXHUwNUVBXHUwNUVGLVx1MDVGMlx1MDYxMC1cdTA2MUFcdTA2MjAtXHUw
NjY5XHUwNjZFLVx1MDZEM1x1MDZENS1cdTA2RENcdTA2REYtXHUwNkU4XHUwNkVBLVx1MDZGQ1x1
MDZGRlx1MDcxMC1cdTA3NEFcdTA3NEQtXHUwN0IxXHUwN0MwLVx1MDdGNVx1MDdGQVx1MDdGRFx1
MDgwMC1cdTA4MkRcdTA4NDAtXHUwODVCXHUwODYwLVx1MDg2QVx1MDhBMC1cdTA4QjRcdTA4QjYt
XHUwOEJEXHUwOEQzLVx1MDhFMVx1MDhFMy1cdTA5NjNcdTA5NjYtXHUwOTZGXHUwOTcxLVx1MDk4
M1x1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlC
Mlx1MDlCNi1cdTA5QjlcdTA5QkMtXHUwOUM0XHUwOUM3XHUwOUM4XHUwOUNCLVx1MDlDRVx1MDlE
N1x1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTNcdTA5RTYtXHUwOUYxXHUwOUZDXHUwOUZFXHUwQTAx
LVx1MEEwM1x1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEz
MFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOVx1MEEzQ1x1MEEzRS1cdTBBNDJc
dTBBNDdcdTBBNDhcdTBBNEItXHUwQTREXHUwQTUxXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE2Ni1c
dTBBNzVcdTBBODEtXHUwQTgzXHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4
XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkMtXHUwQUM1XHUwQUM3
LVx1MEFDOVx1MEFDQi1cdTBBQ0RcdTBBRDBcdTBBRTAtXHUwQUUzXHUwQUU2LVx1MEFFRlx1MEFG
OS1cdTBBRkZcdTBCMDEtXHUwQjAzXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBC
MjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzQy1cdTBCNDRcdTBC
NDdcdTBCNDhcdTBCNEItXHUwQjREXHUwQjU2XHUwQjU3XHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2
M1x1MEI2Ni1cdTBCNkZcdTBCNzFcdTBCODJcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5
MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRc
dTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNB
LVx1MEJDRFx1MEJEMFx1MEJEN1x1MEJFNi1cdTBCRUZcdTBDMDAtXHUwQzBDXHUwQzBFLVx1MEMx
MFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzM5XHUwQzNELVx1MEM0NFx1MEM0Ni1cdTBDNDhcdTBD
NEEtXHUwQzREXHUwQzU1XHUwQzU2XHUwQzU4LVx1MEM1QVx1MEM2MC1cdTBDNjNcdTBDNjYtXHUw
QzZGXHUwQzgwLVx1MEM4M1x1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1
MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JDLVx1MENDNFx1MENDNi1cdTBDQzhcdTBDQ0Et
XHUwQ0NEXHUwQ0Q1XHUwQ0Q2XHUwQ0RFXHUwQ0UwLVx1MENFM1x1MENFNi1cdTBDRUZcdTBDRjFc
dTBDRjJcdTBEMDAtXHUwRDAzXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDQ0
XHUwRDQ2LVx1MEQ0OFx1MEQ0QS1cdTBENEVcdTBENTQtXHUwRDU3XHUwRDVGLVx1MEQ2M1x1MEQ2
Ni1cdTBENkZcdTBEN0EtXHUwRDdGXHUwRDgyXHUwRDgzXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBE
QjFcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MERDQVx1MERDRi1cdTBERDRcdTBE
RDZcdTBERDgtXHUwRERGXHUwREU2LVx1MERFRlx1MERGMlx1MERGM1x1MEUwMS1cdTBFM0FcdTBF
NDAtXHUwRTRFXHUwRTUwLVx1MEU1OVx1MEU4MVx1MEU4Mlx1MEU4NFx1MEU4Ni1cdTBFOEFcdTBF
OEMtXHUwRUEzXHUwRUE1XHUwRUE3LVx1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFQzgtXHUw
RUNEXHUwRUQwLVx1MEVEOVx1MEVEQy1cdTBFREZcdTBGMDBcdTBGMThcdTBGMTlcdTBGMjAtXHUw
RjI5XHUwRjM1XHUwRjM3XHUwRjM5XHUwRjNFLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGNzEtXHUw
Rjg0XHUwRjg2LVx1MEY5N1x1MEY5OS1cdTBGQkNcdTBGQzZcdTEwMDAtXHUxMDQ5XHUxMDUwLVx1
MTA5RFx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1
MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhc
dTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMw
XHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMx
OC1cdTEzNUFcdTEzNUQtXHUxMzVGXHUxMzY5LVx1MTM3MVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUx
M0Y1XHUxM0Y4LVx1MTNGRFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1
MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTRcdTE3MjAt
XHUxNzM0XHUxNzQwLVx1MTc1M1x1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzcyXHUxNzcz
XHUxNzgwLVx1MTdEM1x1MTdEN1x1MTdEQ1x1MTdERFx1MTdFMC1cdTE3RTlcdTE4MEItXHUxODBE
XHUxODEwLVx1MTgxOVx1MTgyMC1cdTE4NzhcdTE4ODAtXHUxOEFBXHUxOEIwLVx1MThGNVx1MTkw
MC1cdTE5MUVcdTE5MjAtXHUxOTJCXHUxOTMwLVx1MTkzQlx1MTk0Ni1cdTE5NkRcdTE5NzAtXHUx
OTc0XHUxOTgwLVx1MTlBQlx1MTlCMC1cdTE5QzlcdTE5RDAtXHUxOURBXHUxQTAwLVx1MUExQlx1
MUEyMC1cdTFBNUVcdTFBNjAtXHUxQTdDXHUxQTdGLVx1MUE4OVx1MUE5MC1cdTFBOTlcdTFBQTdc
dTFBQjAtXHUxQUJEXHUxQjAwLVx1MUI0Qlx1MUI1MC1cdTFCNTlcdTFCNkItXHUxQjczXHUxQjgw
LVx1MUJGM1x1MUMwMC1cdTFDMzdcdTFDNDAtXHUxQzQ5XHUxQzRELVx1MUM3RFx1MUM4MC1cdTFD
ODhcdTFDOTAtXHUxQ0JBXHUxQ0JELVx1MUNCRlx1MUNEMC1cdTFDRDJcdTFDRDQtXHUxQ0ZBXHUx
RDAwLVx1MURGOVx1MURGQi1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1c
dTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1c
dTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAt
XHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZG
Q1x1MjAwQ1x1MjAwRFx1MjAzRlx1MjA0MFx1MjA1NFx1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNc
dTIwRDAtXHUyMERDXHUyMEUxXHUyMEU1LVx1MjBGMFx1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNc
dTIxMTVcdTIxMTgtXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEzOVx1MjEzQy1c
dTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJDMkVcdTJDMzAt
XHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJE
XHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ3Ri1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1MkRB
RVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJE
RDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkRFMC1cdTJERkZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1
MzAyRlx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5OS1cdTMwOUZc
dTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkZcdTMxMzEtXHUzMThFXHUzMUEw
LVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZFRlx1QTAwMC1cdUE0
OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MkJcdUE2NDAtXHVBNjZGXHVB
Njc0LVx1QTY3RFx1QTY3Ri1cdUE2RjFcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1c
dUE3QkZcdUE3QzItXHVBN0M2XHVBN0Y3LVx1QTgyN1x1QTg0MC1cdUE4NzNcdUE4ODAtXHVBOEM1
XHVBOEQwLVx1QThEOVx1QThFMC1cdUE4RjdcdUE4RkJcdUE4RkQtXHVBOTJEXHVBOTMwLVx1QTk1
M1x1QTk2MC1cdUE5N0NcdUE5ODAtXHVBOUMwXHVBOUNGLVx1QTlEOVx1QTlFMC1cdUE5RkVcdUFB
MDAtXHVBQTM2XHVBQTQwLVx1QUE0RFx1QUE1MC1cdUFBNTlcdUFBNjAtXHVBQTc2XHVBQTdBLVx1
QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVGXHVBQUYyLVx1QUFGNlx1QUIwMS1cdUFCMDZc
dUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXHVBQjMw
LVx1QUI1QVx1QUI1Qy1cdUFCNjdcdUFCNzAtXHVBQkVBXHVBQkVDXHVBQkVEXHVBQkYwLVx1QUJG
OVx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZB
NzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMUQtXHVGQjI4XHVGQjJBLVx1
RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVG
QkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1
RkUwMC1cdUZFMEZcdUZFMjAtXHVGRTJGXHVGRTMzXHVGRTM0XHVGRTRELVx1RkU0Rlx1RkU3MC1c
dUZFNzRcdUZFNzYtXHVGRUZDXHVGRjEwLVx1RkYxOVx1RkYyMS1cdUZGM0FcdUZGM0ZcdUZGNDEt
XHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZE
N1x1RkZEQS1cdUZGRENdfFx1RDgwMFtcdURDMDAtXHVEQzBCXHVEQzBELVx1REMyNlx1REMyOC1c
dURDM0FcdURDM0NcdURDM0RcdURDM0YtXHVEQzREXHVEQzUwLVx1REM1RFx1REM4MC1cdURDRkFc
dURENDAtXHVERDc0XHVEREZEXHVERTgwLVx1REU5Q1x1REVBMC1cdURFRDBcdURFRTBcdURGMDAt
XHVERjFGXHVERjJELVx1REY0QVx1REY1MC1cdURGN0FcdURGODAtXHVERjlEXHVERkEwLVx1REZD
M1x1REZDOC1cdURGQ0ZcdURGRDEtXHVERkQ1XXxcdUQ4MDFbXHVEQzAwLVx1REM5RFx1RENBMC1c
dURDQTlcdURDQjAtXHVEQ0QzXHVEQ0Q4LVx1RENGQlx1REQwMC1cdUREMjdcdUREMzAtXHVERDYz
XHVERTAwLVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAtXHVERjY3XXxcdUQ4MDJbXHVEQzAwLVx1
REMwNVx1REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVEQzU1XHVE
QzYwLVx1REM3Nlx1REM4MC1cdURDOUVcdURDRTAtXHVEQ0YyXHVEQ0Y0XHVEQ0Y1XHVERDAwLVx1
REQxNVx1REQyMC1cdUREMzlcdUREODAtXHVEREI3XHVEREJFXHVEREJGXHVERTAwLVx1REUwM1x1
REUwNVx1REUwNlx1REUwQy1cdURFMTNcdURFMTUtXHVERTE3XHVERTE5LVx1REUzNVx1REUzOC1c
dURFM0FcdURFM0ZcdURFNjAtXHVERTdDXHVERTgwLVx1REU5Q1x1REVDMC1cdURFQzdcdURFQzkt
XHVERUU2XHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURGNjAtXHVERjcyXHVERjgwLVx1REY5
MV18XHVEODAzW1x1REMwMC1cdURDNDhcdURDODAtXHVEQ0IyXHVEQ0MwLVx1RENGMlx1REQwMC1c
dUREMjdcdUREMzAtXHVERDM5XHVERjAwLVx1REYxQ1x1REYyN1x1REYzMC1cdURGNTBcdURGRTAt
XHVERkY2XXxcdUQ4MDRbXHVEQzAwLVx1REM0Nlx1REM2Ni1cdURDNkZcdURDN0YtXHVEQ0JBXHVE
Q0QwLVx1RENFOFx1RENGMC1cdURDRjlcdUREMDAtXHVERDM0XHVERDM2LVx1REQzRlx1REQ0NC1c
dURENDZcdURENTAtXHVERDczXHVERDc2XHVERDgwLVx1RERDNFx1RERDOS1cdUREQ0NcdURERDAt
XHVERERBXHVERERDXHVERTAwLVx1REUxMVx1REUxMy1cdURFMzdcdURFM0VcdURFODAtXHVERTg2
XHVERTg4XHVERThBLVx1REU4RFx1REU4Ri1cdURFOURcdURFOUYtXHVERUE4XHVERUIwLVx1REVF
QVx1REVGMC1cdURFRjlcdURGMDAtXHVERjAzXHVERjA1LVx1REYwQ1x1REYwRlx1REYxMFx1REYx
My1cdURGMjhcdURGMkEtXHVERjMwXHVERjMyXHVERjMzXHVERjM1LVx1REYzOVx1REYzQi1cdURG
NDRcdURGNDdcdURGNDhcdURGNEItXHVERjREXHVERjUwXHVERjU3XHVERjVELVx1REY2M1x1REY2
Ni1cdURGNkNcdURGNzAtXHVERjc0XXxcdUQ4MDVbXHVEQzAwLVx1REM0QVx1REM1MC1cdURDNTlc
dURDNUVcdURDNUZcdURDODAtXHVEQ0M1XHVEQ0M3XHVEQ0QwLVx1RENEOVx1REQ4MC1cdUREQjVc
dUREQjgtXHVEREMwXHVEREQ4LVx1RERERFx1REUwMC1cdURFNDBcdURFNDRcdURFNTAtXHVERTU5
XHVERTgwLVx1REVCOFx1REVDMC1cdURFQzlcdURGMDAtXHVERjFBXHVERjFELVx1REYyQlx1REYz
MC1cdURGMzldfFx1RDgwNltcdURDMDAtXHVEQzNBXHVEQ0EwLVx1RENFOVx1RENGRlx1RERBMC1c
dUREQTdcdUREQUEtXHVEREQ3XHVERERBLVx1RERFMVx1RERFM1x1RERFNFx1REUwMC1cdURFM0Vc
dURFNDdcdURFNTAtXHVERTk5XHVERTlEXHVERUMwLVx1REVGOF18XHVEODA3W1x1REMwMC1cdURD
MDhcdURDMEEtXHVEQzM2XHVEQzM4LVx1REM0MFx1REM1MC1cdURDNTlcdURDNzItXHVEQzhGXHVE
QzkyLVx1RENBN1x1RENBOS1cdURDQjZcdUREMDAtXHVERDA2XHVERDA4XHVERDA5XHVERDBCLVx1
REQzNlx1REQzQVx1REQzQ1x1REQzRFx1REQzRi1cdURENDdcdURENTAtXHVERDU5XHVERDYwLVx1
REQ2NVx1REQ2N1x1REQ2OFx1REQ2QS1cdUREOEVcdUREOTBcdUREOTFcdUREOTMtXHVERDk4XHVE
REEwLVx1RERBOVx1REVFMC1cdURFRjZdfFx1RDgwOFtcdURDMDAtXHVERjk5XXxcdUQ4MDlbXHVE
QzAwLVx1REM2RVx1REM4MC1cdURENDNdfFtcdUQ4MENcdUQ4MUMtXHVEODIwXHVEODQwLVx1RDg2
OFx1RDg2QS1cdUQ4NkNcdUQ4NkYtXHVEODcyXHVEODc0LVx1RDg3OV1bXHVEQzAwLVx1REZGRl18
XHVEODBEW1x1REMwMC1cdURDMkVdfFx1RDgxMVtcdURDMDAtXHVERTQ2XXxcdUQ4MUFbXHVEQzAw
LVx1REUzOFx1REU0MC1cdURFNUVcdURFNjAtXHVERTY5XHVERUQwLVx1REVFRFx1REVGMC1cdURF
RjRcdURGMDAtXHVERjM2XHVERjQwLVx1REY0M1x1REY1MC1cdURGNTlcdURGNjMtXHVERjc3XHVE
RjdELVx1REY4Rl18XHVEODFCW1x1REU0MC1cdURFN0ZcdURGMDAtXHVERjRBXHVERjRGLVx1REY4
N1x1REY4Ri1cdURGOUZcdURGRTBcdURGRTFcdURGRTNdfFx1RDgyMVtcdURDMDAtXHVERkY3XXxc
dUQ4MjJbXHVEQzAwLVx1REVGMl18XHVEODJDW1x1REMwMC1cdUREMUVcdURENTAtXHVERDUyXHVE
RDY0LVx1REQ2N1x1REQ3MC1cdURFRkJdfFx1RDgyRltcdURDMDAtXHVEQzZBXHVEQzcwLVx1REM3
Q1x1REM4MC1cdURDODhcdURDOTAtXHVEQzk5XHVEQzlEXHVEQzlFXXxcdUQ4MzRbXHVERDY1LVx1
REQ2OVx1REQ2RC1cdURENzJcdUREN0ItXHVERDgyXHVERDg1LVx1REQ4Qlx1RERBQS1cdUREQURc
dURFNDItXHVERTQ0XXxcdUQ4MzVbXHVEQzAwLVx1REM1NFx1REM1Ni1cdURDOUNcdURDOUVcdURD
OUZcdURDQTJcdURDQTVcdURDQTZcdURDQTktXHVEQ0FDXHVEQ0FFLVx1RENCOVx1RENCQlx1RENC
RC1cdURDQzNcdURDQzUtXHVERDA1XHVERDA3LVx1REQwQVx1REQwRC1cdUREMTRcdUREMTYtXHVE
RDFDXHVERDFFLVx1REQzOVx1REQzQi1cdUREM0VcdURENDAtXHVERDQ0XHVERDQ2XHVERDRBLVx1
REQ1MFx1REQ1Mi1cdURFQTVcdURFQTgtXHVERUMwXHVERUMyLVx1REVEQVx1REVEQy1cdURFRkFc
dURFRkMtXHVERjE0XHVERjE2LVx1REYzNFx1REYzNi1cdURGNEVcdURGNTAtXHVERjZFXHVERjcw
LVx1REY4OFx1REY4QS1cdURGQThcdURGQUEtXHVERkMyXHVERkM0LVx1REZDQlx1REZDRS1cdURG
RkZdfFx1RDgzNltcdURFMDAtXHVERTM2XHVERTNCLVx1REU2Q1x1REU3NVx1REU4NFx1REU5Qi1c
dURFOUZcdURFQTEtXHVERUFGXXxcdUQ4MzhbXHVEQzAwLVx1REMwNlx1REMwOC1cdURDMThcdURD
MUItXHVEQzIxXHVEQzIzXHVEQzI0XHVEQzI2LVx1REMyQVx1REQwMC1cdUREMkNcdUREMzAtXHVE
RDNEXHVERDQwLVx1REQ0OVx1REQ0RVx1REVDMC1cdURFRjldfFx1RDgzQVtcdURDMDAtXHVEQ0M0
XHVEQ0QwLVx1RENENlx1REQwMC1cdURENEJcdURENTAtXHVERDU5XXxcdUQ4M0JbXHVERTAwLVx1
REUwM1x1REUwNS1cdURFMUZcdURFMjFcdURFMjJcdURFMjRcdURFMjdcdURFMjktXHVERTMyXHVE
RTM0LVx1REUzN1x1REUzOVx1REUzQlx1REU0Mlx1REU0N1x1REU0OVx1REU0Qlx1REU0RC1cdURF
NEZcdURFNTFcdURFNTJcdURFNTRcdURFNTdcdURFNTlcdURFNUJcdURFNURcdURFNUZcdURFNjFc
dURFNjJcdURFNjRcdURFNjctXHVERTZBXHVERTZDLVx1REU3Mlx1REU3NC1cdURFNzdcdURFNzkt
XHVERTdDXHVERTdFXHVERTgwLVx1REU4OVx1REU4Qi1cdURFOUJcdURFQTEtXHVERUEzXHVERUE1
LVx1REVBOVx1REVBQi1cdURFQkJdfFx1RDg2OVtcdURDMDAtXHVERUQ2XHVERjAwLVx1REZGRl18
XHVEODZEW1x1REMwMC1cdURGMzRcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMxRFx1
REMyMC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXHVERUIwLVx1REZGRl18XHVEODdBW1x1
REMwMC1cdURGRTBdfFx1RDg3RVtcdURDMDAtXHVERTFEXXxcdURCNDBbXHVERDAwLVx1RERFRl0v
CisJfTsKKwlleHBvcnRzLkNoYXJhY3RlciA9IHsKKwkgICAgLyogdHNsaW50OmRpc2FibGU6bm8t
Yml0d2lzZSAqLworCSAgICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiAoY3ApIHsKKwkgICAgICAg
IHJldHVybiAoY3AgPCAweDEwMDAwKSA/IFN0cmluZy5mcm9tQ2hhckNvZGUoY3ApIDoKKwkgICAg
ICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgwMCArICgoY3AgLSAweDEwMDAwKSA+PiAx
MCkpICsKKwkgICAgICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgweERDMDAgKyAoKGNw
IC0gMHgxMDAwMCkgJiAxMDIzKSk7CisJICAgIH0sCisJICAgIC8vIGh0dHBzOi8vdGMzOS5naXRo
dWIuaW8vZWNtYTI2Mi8jc2VjLXdoaXRlLXNwYWNlCisJICAgIGlzV2hpdGVTcGFjZTogZnVuY3Rp
b24gKGNwKSB7CisJICAgICAgICByZXR1cm4gKGNwID09PSAweDIwKSB8fCAoY3AgPT09IDB4MDkp
IHx8IChjcCA9PT0gMHgwQikgfHwgKGNwID09PSAweDBDKSB8fCAoY3AgPT09IDB4QTApIHx8CisJ
ICAgICAgICAgICAgKGNwID49IDB4MTY4MCAmJiBbMHgxNjgwLCAweDIwMDAsIDB4MjAwMSwgMHgy
MDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAwNywgMHgyMDA4LCAweDIw
MDksIDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAwMCwgMHhGRUZGXS5pbmRleE9mKGNwKSA+
PSAwKTsKKwkgICAgfSwKKwkgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNz
ZWMtbGluZS10ZXJtaW5hdG9ycworCSAgICBpc0xpbmVUZXJtaW5hdG9yOiBmdW5jdGlvbiAoY3Ap
IHsKKwkgICAgICAgIHJldHVybiAoY3AgPT09IDB4MEEpIHx8IChjcCA9PT0gMHgwRCkgfHwgKGNw
ID09PSAweDIwMjgpIHx8IChjcCA9PT0gMHgyMDI5KTsKKwkgICAgfSwKKwkgICAgLy8gaHR0cHM6
Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbmFtZXMtYW5kLWtleXdvcmRzCisJICAgIGlz
SWRlbnRpZmllclN0YXJ0OiBmdW5jdGlvbiAoY3ApIHsKKwkgICAgICAgIHJldHVybiAoY3AgPT09
IDB4MjQpIHx8IChjcCA9PT0gMHg1RikgfHwgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29y
ZSkKKwkgICAgICAgICAgICAoY3AgPj0gMHg0MSAmJiBjcCA8PSAweDVBKSB8fCAvLyBBLi5aCisJ
ICAgICAgICAgICAgKGNwID49IDB4NjEgJiYgY3AgPD0gMHg3QSkgfHwgLy8gYS4uegorCSAgICAg
ICAgICAgIChjcCA9PT0gMHg1QykgfHwgLy8gXCAoYmFja3NsYXNoKQorCSAgICAgICAgICAgICgo
Y3AgPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQudGVzdChleHBvcnRz
LkNoYXJhY3Rlci5mcm9tQ29kZVBvaW50KGNwKSkpOworCSAgICB9LAorCSAgICBpc0lkZW50aWZp
ZXJQYXJ0OiBmdW5jdGlvbiAoY3ApIHsKKwkgICAgICAgIHJldHVybiAoY3AgPT09IDB4MjQpIHx8
IChjcCA9PT0gMHg1RikgfHwgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSkKKwkgICAg
ICAgICAgICAoY3AgPj0gMHg0MSAmJiBjcCA8PSAweDVBKSB8fCAvLyBBLi5aCisJICAgICAgICAg
ICAgKGNwID49IDB4NjEgJiYgY3AgPD0gMHg3QSkgfHwgLy8gYS4uegorCSAgICAgICAgICAgIChj
cCA+PSAweDMwICYmIGNwIDw9IDB4MzkpIHx8IC8vIDAuLjkKKwkgICAgICAgICAgICAoY3AgPT09
IDB4NUMpIHx8IC8vIFwgKGJhY2tzbGFzaCkKKwkgICAgICAgICAgICAoKGNwID49IDB4ODApICYm
IFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclBhcnQudGVzdChleHBvcnRzLkNoYXJhY3Rlci5mcm9t
Q29kZVBvaW50KGNwKSkpOworCSAgICB9LAorCSAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlv
L2VjbWEyNjIvI3NlYy1saXRlcmFscy1udW1lcmljLWxpdGVyYWxzCisJICAgIGlzRGVjaW1hbERp
Z2l0OiBmdW5jdGlvbiAoY3ApIHsKKwkgICAgICAgIHJldHVybiAoY3AgPj0gMHgzMCAmJiBjcCA8
PSAweDM5KTsgLy8gMC4uOQorCSAgICB9LAorCSAgICBpc0hleERpZ2l0OiBmdW5jdGlvbiAoY3Ap
IHsKKwkgICAgICAgIHJldHVybiAoY3AgPj0gMHgzMCAmJiBjcCA8PSAweDM5KSB8fCAvLyAwLi45
CisJICAgICAgICAgICAgKGNwID49IDB4NDEgJiYgY3AgPD0gMHg0NikgfHwgLy8gQS4uRgorCSAg
ICAgICAgICAgIChjcCA+PSAweDYxICYmIGNwIDw9IDB4NjYpOyAvLyBhLi5mCisJICAgIH0sCisJ
ICAgIGlzT2N0YWxEaWdpdDogZnVuY3Rpb24gKGNwKSB7CisJICAgICAgICByZXR1cm4gKGNwID49
IDB4MzAgJiYgY3AgPD0gMHgzNyk7IC8vIDAuLjcKKwkgICAgfQorCX07CiAKIAogLyoqKi8gfSwK
IC8qIDUgKi8KIC8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVp
cmVfXykgewogCi0gICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBqc3hfc3ludGF4XzEgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDYpOwotICAgIC8qIHRzbGludDpkaXNhYmxlOm1heC1jbGFzc2VzLXBl
ci1maWxlICovCi0gICAgdmFyIEpTWENsb3NpbmdFbGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgZnVuY3Rpb24gSlNYQ2xvc2luZ0VsZW1lbnQobmFtZSkgewotICAgICAgICAgICAgdGhp
cy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hDbG9zaW5nRWxlbWVudDsKLSAgICAg
ICAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTWENs
b3NpbmdFbGVtZW50OwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5KU1hDbG9zaW5nRWxlbWVudCA9
IEpTWENsb3NpbmdFbGVtZW50OwotICAgIHZhciBKU1hFbGVtZW50ID0gKGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgZnVuY3Rpb24gSlNYRWxlbWVudChvcGVuaW5nRWxlbWVudCwgY2hpbGRyZW4sIGNs
b3NpbmdFbGVtZW50KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNY
U3ludGF4LkpTWEVsZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLm9wZW5pbmdFbGVtZW50ID0gb3Bl
bmluZ0VsZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47Ci0gICAg
ICAgICAgICB0aGlzLmNsb3NpbmdFbGVtZW50ID0gY2xvc2luZ0VsZW1lbnQ7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIEpTWEVsZW1lbnQ7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkpTWEVs
ZW1lbnQgPSBKU1hFbGVtZW50OwotICAgIHZhciBKU1hFbXB0eUV4cHJlc3Npb24gPSAoZnVuY3Rp
b24gKCkgewotICAgICAgICBmdW5jdGlvbiBKU1hFbXB0eUV4cHJlc3Npb24oKSB7Ci0gICAgICAg
ICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWEVtcHR5RXhwcmVzc2lv
bjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSlNYRW1wdHlFeHByZXNzaW9uOwotICAgIH0o
KSk7Ci0gICAgZXhwb3J0cy5KU1hFbXB0eUV4cHJlc3Npb24gPSBKU1hFbXB0eUV4cHJlc3Npb247
Ci0gICAgdmFyIEpTWEV4cHJlc3Npb25Db250YWluZXIgPSAoZnVuY3Rpb24gKCkgewotICAgICAg
ICBmdW5jdGlvbiBKU1hFeHByZXNzaW9uQ29udGFpbmVyKGV4cHJlc3Npb24pIHsKLSAgICAgICAg
ICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYRXhwcmVzc2lvbkNvbnRh
aW5lcjsKLSAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIEpTWEV4cHJlc3Npb25Db250YWluZXI7Ci0gICAgfSgpKTsKLSAg
ICBleHBvcnRzLkpTWEV4cHJlc3Npb25Db250YWluZXIgPSBKU1hFeHByZXNzaW9uQ29udGFpbmVy
OwotICAgIHZhciBKU1hJZGVudGlmaWVyID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rp
b24gSlNYSWRlbnRpZmllcihuYW1lKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3lu
dGF4XzEuSlNYU3ludGF4LkpTWElkZW50aWZpZXI7Ci0gICAgICAgICAgICB0aGlzLm5hbWUgPSBu
YW1lOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBKU1hJZGVudGlmaWVyOwotICAgIH0oKSk7
Ci0gICAgZXhwb3J0cy5KU1hJZGVudGlmaWVyID0gSlNYSWRlbnRpZmllcjsKLSAgICB2YXIgSlNY
TWVtYmVyRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEpTWE1l
bWJlckV4cHJlc3Npb24ob2JqZWN0LCBwcm9wZXJ0eSkgewotICAgICAgICAgICAgdGhpcy50eXBl
ID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hNZW1iZXJFeHByZXNzaW9uOwotICAgICAgICAg
ICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7Ci0gICAgICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJv
cGVydHk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTWE1lbWJlckV4cHJlc3Npb247Ci0g
ICAgfSgpKTsKLSAgICBleHBvcnRzLkpTWE1lbWJlckV4cHJlc3Npb24gPSBKU1hNZW1iZXJFeHBy
ZXNzaW9uOwotICAgIHZhciBKU1hBdHRyaWJ1dGUgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBm
dW5jdGlvbiBKU1hBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHsKLSAgICAgICAgICAgIHRoaXMudHlw
ZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYQXR0cmlidXRlOwotICAgICAgICAgICAgdGhp
cy5uYW1lID0gbmFtZTsKLSAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gSlNYQXR0cmlidXRlOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5K
U1hBdHRyaWJ1dGUgPSBKU1hBdHRyaWJ1dGU7Ci0gICAgdmFyIEpTWE5hbWVzcGFjZWROYW1lID0g
KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSlNYTmFtZXNwYWNlZE5hbWUobmFtZXNw
YWNlLCBuYW1lKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3lu
dGF4LkpTWE5hbWVzcGFjZWROYW1lOwotICAgICAgICAgICAgdGhpcy5uYW1lc3BhY2UgPSBuYW1l
c3BhY2U7Ci0gICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBKU1hOYW1lc3BhY2VkTmFtZTsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuSlNYTmFt
ZXNwYWNlZE5hbWUgPSBKU1hOYW1lc3BhY2VkTmFtZTsKLSAgICB2YXIgSlNYT3BlbmluZ0VsZW1l
bnQgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBKU1hPcGVuaW5nRWxlbWVudChu
YW1lLCBzZWxmQ2xvc2luZywgYXR0cmlidXRlcykgewotICAgICAgICAgICAgdGhpcy50eXBlID0g
anN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hPcGVuaW5nRWxlbWVudDsKLSAgICAgICAgICAgIHRo
aXMubmFtZSA9IG5hbWU7Ci0gICAgICAgICAgICB0aGlzLnNlbGZDbG9zaW5nID0gc2VsZkNsb3Np
bmc7Ci0gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBKU1hPcGVuaW5nRWxlbWVudDsKLSAgICB9KCkpOwotICAgIGV4cG9y
dHMuSlNYT3BlbmluZ0VsZW1lbnQgPSBKU1hPcGVuaW5nRWxlbWVudDsKLSAgICB2YXIgSlNYU3By
ZWFkQXR0cmlidXRlID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSlNYU3ByZWFk
QXR0cmlidXRlKGFyZ3VtZW50KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4
XzEuSlNYU3ludGF4LkpTWFNwcmVhZEF0dHJpYnV0ZTsKLSAgICAgICAgICAgIHRoaXMuYXJndW1l
bnQgPSBhcmd1bWVudDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSlNYU3ByZWFkQXR0cmli
dXRlOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5KU1hTcHJlYWRBdHRyaWJ1dGUgPSBKU1hTcHJl
YWRBdHRyaWJ1dGU7Ci0gICAgdmFyIEpTWFRleHQgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBm
dW5jdGlvbiBKU1hUZXh0KHZhbHVlLCByYXcpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IGpz
eF9zeW50YXhfMS5KU1hTeW50YXguSlNYVGV4dDsKLSAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKLSAgICAgICAgICAgIHRoaXMucmF3ID0gcmF3OwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBKU1hUZXh0OwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5KU1hUZXh0ID0gSlNYVGV4dDsK
KwkidXNlIHN0cmljdCI7CisJT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9k
dWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKKwl2YXIganN4X3N5bnRheF8xID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg2KTsKKwkvKiB0c2xpbnQ6ZGlzYWJsZTptYXgtY2xhc3Nlcy1wZXItZmlsZSAqLwor
CXZhciBKU1hDbG9zaW5nRWxlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkg
ICAgZnVuY3Rpb24gSlNYQ2xvc2luZ0VsZW1lbnQobmFtZSkgeworCSAgICAgICAgdGhpcy50eXBl
ID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hDbG9zaW5nRWxlbWVudDsKKwkgICAgICAgIHRo
aXMubmFtZSA9IG5hbWU7CisJICAgIH0KKwkgICAgcmV0dXJuIEpTWENsb3NpbmdFbGVtZW50Owor
CX0oKSk7CisJZXhwb3J0cy5KU1hDbG9zaW5nRWxlbWVudCA9IEpTWENsb3NpbmdFbGVtZW50Owor
CXZhciBKU1hFbGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5j
dGlvbiBKU1hFbGVtZW50KG9wZW5pbmdFbGVtZW50LCBjaGlsZHJlbiwgY2xvc2luZ0VsZW1lbnQp
IHsKKwkgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYRWxlbWVu
dDsKKwkgICAgICAgIHRoaXMub3BlbmluZ0VsZW1lbnQgPSBvcGVuaW5nRWxlbWVudDsKKwkgICAg
ICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjsKKwkgICAgICAgIHRoaXMuY2xvc2luZ0VsZW1l
bnQgPSBjbG9zaW5nRWxlbWVudDsKKwkgICAgfQorCSAgICByZXR1cm4gSlNYRWxlbWVudDsKKwl9
KCkpOworCWV4cG9ydHMuSlNYRWxlbWVudCA9IEpTWEVsZW1lbnQ7CisJdmFyIEpTWEVtcHR5RXhw
cmVzc2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gSlNY
RW1wdHlFeHByZXNzaW9uKCkgeworCSAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpT
WFN5bnRheC5KU1hFbXB0eUV4cHJlc3Npb247CisJICAgIH0KKwkgICAgcmV0dXJuIEpTWEVtcHR5
RXhwcmVzc2lvbjsKKwl9KCkpOworCWV4cG9ydHMuSlNYRW1wdHlFeHByZXNzaW9uID0gSlNYRW1w
dHlFeHByZXNzaW9uOworCXZhciBKU1hFeHByZXNzaW9uQ29udGFpbmVyID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBKU1hFeHByZXNzaW9uQ29udGFpbmVyKGV4
cHJlc3Npb24pIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXgu
SlNYRXhwcmVzc2lvbkNvbnRhaW5lcjsKKwkgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJl
c3Npb247CisJICAgIH0KKwkgICAgcmV0dXJuIEpTWEV4cHJlc3Npb25Db250YWluZXI7CisJfSgp
KTsKKwlleHBvcnRzLkpTWEV4cHJlc3Npb25Db250YWluZXIgPSBKU1hFeHByZXNzaW9uQ29udGFp
bmVyOworCXZhciBKU1hJZGVudGlmaWVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewor
CSAgICBmdW5jdGlvbiBKU1hJZGVudGlmaWVyKG5hbWUpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9
IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYSWRlbnRpZmllcjsKKwkgICAgICAgIHRoaXMubmFt
ZSA9IG5hbWU7CisJICAgIH0KKwkgICAgcmV0dXJuIEpTWElkZW50aWZpZXI7CisJfSgpKTsKKwll
eHBvcnRzLkpTWElkZW50aWZpZXIgPSBKU1hJZGVudGlmaWVyOworCXZhciBKU1hNZW1iZXJFeHBy
ZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBKU1hN
ZW1iZXJFeHByZXNzaW9uKG9iamVjdCwgcHJvcGVydHkpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9
IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYTWVtYmVyRXhwcmVzc2lvbjsKKwkgICAgICAgIHRo
aXMub2JqZWN0ID0gb2JqZWN0OworCSAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5Owor
CSAgICB9CisJICAgIHJldHVybiBKU1hNZW1iZXJFeHByZXNzaW9uOworCX0oKSk7CisJZXhwb3J0
cy5KU1hNZW1iZXJFeHByZXNzaW9uID0gSlNYTWVtYmVyRXhwcmVzc2lvbjsKKwl2YXIgSlNYQXR0
cmlidXRlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBKU1hB
dHRyaWJ1dGUobmFtZSwgdmFsdWUpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhf
MS5KU1hTeW50YXguSlNYQXR0cmlidXRlOworCSAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKwkg
ICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKwkgICAgfQorCSAgICByZXR1cm4gSlNYQXR0cmli
dXRlOworCX0oKSk7CisJZXhwb3J0cy5KU1hBdHRyaWJ1dGUgPSBKU1hBdHRyaWJ1dGU7CisJdmFy
IEpTWE5hbWVzcGFjZWROYW1lID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBm
dW5jdGlvbiBKU1hOYW1lc3BhY2VkTmFtZShuYW1lc3BhY2UsIG5hbWUpIHsKKwkgICAgICAgIHRo
aXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYTmFtZXNwYWNlZE5hbWU7CisJICAg
ICAgICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKKwkgICAgICAgIHRoaXMubmFtZSA9IG5h
bWU7CisJICAgIH0KKwkgICAgcmV0dXJuIEpTWE5hbWVzcGFjZWROYW1lOworCX0oKSk7CisJZXhw
b3J0cy5KU1hOYW1lc3BhY2VkTmFtZSA9IEpTWE5hbWVzcGFjZWROYW1lOworCXZhciBKU1hPcGVu
aW5nRWxlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24g
SlNYT3BlbmluZ0VsZW1lbnQobmFtZSwgc2VsZkNsb3NpbmcsIGF0dHJpYnV0ZXMpIHsKKwkgICAg
ICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYT3BlbmluZ0VsZW1lbnQ7
CisJICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworCSAgICAgICAgdGhpcy5zZWxmQ2xvc2luZyA9
IHNlbGZDbG9zaW5nOworCSAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKwkg
ICAgfQorCSAgICByZXR1cm4gSlNYT3BlbmluZ0VsZW1lbnQ7CisJfSgpKTsKKwlleHBvcnRzLkpT
WE9wZW5pbmdFbGVtZW50ID0gSlNYT3BlbmluZ0VsZW1lbnQ7CisJdmFyIEpTWFNwcmVhZEF0dHJp
YnV0ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gSlNYU3By
ZWFkQXR0cmlidXRlKGFyZ3VtZW50KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4
XzEuSlNYU3ludGF4LkpTWFNwcmVhZEF0dHJpYnV0ZTsKKwkgICAgICAgIHRoaXMuYXJndW1lbnQg
PSBhcmd1bWVudDsKKwkgICAgfQorCSAgICByZXR1cm4gSlNYU3ByZWFkQXR0cmlidXRlOworCX0o
KSk7CisJZXhwb3J0cy5KU1hTcHJlYWRBdHRyaWJ1dGUgPSBKU1hTcHJlYWRBdHRyaWJ1dGU7CisJ
dmFyIEpTWFRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9u
IEpTWFRleHQodmFsdWUsIHJhdykgeworCSAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8x
LkpTWFN5bnRheC5KU1hUZXh0OworCSAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworCSAgICAg
ICAgdGhpcy5yYXcgPSByYXc7CisJICAgIH0KKwkgICAgcmV0dXJuIEpTWFRleHQ7CisJfSgpKTsK
KwlleHBvcnRzLkpTWFRleHQgPSBKU1hUZXh0OwogCiAKIC8qKiovIH0sCiAvKiA2ICovCiAvKioq
LyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKIAotICAgICJ1c2Ugc3RyaWN0IjsKLSAgICBl
eHBvcnRzLkpTWFN5bnRheCA9IHsKLSAgICAgICAgSlNYQXR0cmlidXRlOiAnSlNYQXR0cmlidXRl
JywKLSAgICAgICAgSlNYQ2xvc2luZ0VsZW1lbnQ6ICdKU1hDbG9zaW5nRWxlbWVudCcsCi0gICAg
ICAgIEpTWEVsZW1lbnQ6ICdKU1hFbGVtZW50JywKLSAgICAgICAgSlNYRW1wdHlFeHByZXNzaW9u
OiAnSlNYRW1wdHlFeHByZXNzaW9uJywKLSAgICAgICAgSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjog
J0pTWEV4cHJlc3Npb25Db250YWluZXInLAotICAgICAgICBKU1hJZGVudGlmaWVyOiAnSlNYSWRl
bnRpZmllcicsCi0gICAgICAgIEpTWE1lbWJlckV4cHJlc3Npb246ICdKU1hNZW1iZXJFeHByZXNz
aW9uJywKLSAgICAgICAgSlNYTmFtZXNwYWNlZE5hbWU6ICdKU1hOYW1lc3BhY2VkTmFtZScsCi0g
ICAgICAgIEpTWE9wZW5pbmdFbGVtZW50OiAnSlNYT3BlbmluZ0VsZW1lbnQnLAotICAgICAgICBK
U1hTcHJlYWRBdHRyaWJ1dGU6ICdKU1hTcHJlYWRBdHRyaWJ1dGUnLAotICAgICAgICBKU1hUZXh0
OiAnSlNYVGV4dCcKLSAgICB9OworCSJ1c2Ugc3RyaWN0IjsKKwlPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOworCWV4cG9ydHMuSlNY
U3ludGF4ID0geworCSAgICBKU1hBdHRyaWJ1dGU6ICdKU1hBdHRyaWJ1dGUnLAorCSAgICBKU1hD
bG9zaW5nRWxlbWVudDogJ0pTWENsb3NpbmdFbGVtZW50JywKKwkgICAgSlNYRWxlbWVudDogJ0pT
WEVsZW1lbnQnLAorCSAgICBKU1hFbXB0eUV4cHJlc3Npb246ICdKU1hFbXB0eUV4cHJlc3Npb24n
LAorCSAgICBKU1hFeHByZXNzaW9uQ29udGFpbmVyOiAnSlNYRXhwcmVzc2lvbkNvbnRhaW5lcics
CisJICAgIEpTWElkZW50aWZpZXI6ICdKU1hJZGVudGlmaWVyJywKKwkgICAgSlNYTWVtYmVyRXhw
cmVzc2lvbjogJ0pTWE1lbWJlckV4cHJlc3Npb24nLAorCSAgICBKU1hOYW1lc3BhY2VkTmFtZTog
J0pTWE5hbWVzcGFjZWROYW1lJywKKwkgICAgSlNYT3BlbmluZ0VsZW1lbnQ6ICdKU1hPcGVuaW5n
RWxlbWVudCcsCisJICAgIEpTWFNwcmVhZEF0dHJpYnV0ZTogJ0pTWFNwcmVhZEF0dHJpYnV0ZScs
CisJICAgIEpTWFRleHQ6ICdKU1hUZXh0JworCX07CiAKIAogLyoqKi8gfSwKIC8qIDcgKi8KIC8q
KiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewogCi0g
ICAgInVzZSBzdHJpY3QiOwotICAgIHZhciBzeW50YXhfMSA9IF9fd2VicGFja19yZXF1aXJlX18o
Mik7Ci0gICAgLyogdHNsaW50OmRpc2FibGU6bWF4LWNsYXNzZXMtcGVyLWZpbGUgKi8KLSAgICB2
YXIgQXJyYXlFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQXJy
YXlFeHByZXNzaW9uKGVsZW1lbnRzKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhf
MS5TeW50YXguQXJyYXlFeHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5lbGVtZW50cyA9IGVs
ZW1lbnRzOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBBcnJheUV4cHJlc3Npb247Ci0gICAg
fSgpKTsKLSAgICBleHBvcnRzLkFycmF5RXhwcmVzc2lvbiA9IEFycmF5RXhwcmVzc2lvbjsKLSAg
ICB2YXIgQXJyYXlQYXR0ZXJuID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQXJy
YXlQYXR0ZXJuKGVsZW1lbnRzKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5T
eW50YXguQXJyYXlQYXR0ZXJuOwotICAgICAgICAgICAgdGhpcy5lbGVtZW50cyA9IGVsZW1lbnRz
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBBcnJheVBhdHRlcm47Ci0gICAgfSgpKTsKLSAg
ICBleHBvcnRzLkFycmF5UGF0dGVybiA9IEFycmF5UGF0dGVybjsKLSAgICB2YXIgQXJyb3dGdW5j
dGlvbkV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBBcnJvd0Z1
bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMsIGJvZHksIGV4cHJlc3Npb24pIHsKLSAgICAgICAgICAg
IHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjsKLSAg
ICAgICAgICAgIHRoaXMuaWQgPSBudWxsOwotICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJh
bXM7Ci0gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAgICAgICAgdGhpcy5nZW5l
cmF0b3IgPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247
Ci0gICAgICAgICAgICB0aGlzLmFzeW5jID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5BcnJv
d0Z1bmN0aW9uRXhwcmVzc2lvbiA9IEFycm93RnVuY3Rpb25FeHByZXNzaW9uOwotICAgIHZhciBB
c3NpZ25tZW50RXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEFz
c2lnbm1lbnRFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkgewotICAgICAgICAgICAg
dGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uOwotICAgICAg
ICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yOwotICAgICAgICAgICAgdGhpcy5sZWZ0ID0g
bGVmdDsKLSAgICAgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gQXNzaWdubWVudEV4cHJlc3Npb247Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkFz
c2lnbm1lbnRFeHByZXNzaW9uID0gQXNzaWdubWVudEV4cHJlc3Npb247Ci0gICAgdmFyIEFzc2ln
bm1lbnRQYXR0ZXJuID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQXNzaWdubWVu
dFBhdHRlcm4obGVmdCwgcmlnaHQpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8x
LlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjsKLSAgICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7
Ci0gICAgICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIEFzc2lnbm1lbnRQYXR0ZXJuOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5Bc3NpZ25tZW50
UGF0dGVybiA9IEFzc2lnbm1lbnRQYXR0ZXJuOwotICAgIHZhciBBc3luY0Fycm93RnVuY3Rpb25F
eHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQXN5bmNBcnJvd0Z1
bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMsIGJvZHksIGV4cHJlc3Npb24pIHsKLSAgICAgICAgICAg
IHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjsKLSAg
ICAgICAgICAgIHRoaXMuaWQgPSBudWxsOwotICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJh
bXM7Ci0gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAgICAgICAgdGhpcy5nZW5l
cmF0b3IgPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247
Ci0gICAgICAgICAgICB0aGlzLmFzeW5jID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gQXN5bmNBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMu
QXN5bmNBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiA9IEFzeW5jQXJyb3dGdW5jdGlvbkV4cHJlc3Np
b247Ci0gICAgdmFyIEFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbiA9IChmdW5jdGlvbiAoKSB7Ci0g
ICAgICAgIGZ1bmN0aW9uIEFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbihpZCwgcGFyYW1zLCBib2R5
KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRnVuY3Rpb25EZWNs
YXJhdGlvbjsKLSAgICAgICAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICAgICAgICAgIHRoaXMucGFy
YW1zID0gcGFyYW1zOwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAgICAg
IHRoaXMuZ2VuZXJhdG9yID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBm
YWxzZTsKLSAgICAgICAgICAgIHRoaXMuYXN5bmMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb247Ci0gICAgfSgpKTsKLSAgICBleHBvcnRz
LkFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbiA9IEFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbjsKLSAg
ICB2YXIgQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBm
dW5jdGlvbiBBc3luY0Z1bmN0aW9uRXhwcmVzc2lvbihpZCwgcGFyYW1zLCBib2R5KSB7Ci0gICAg
ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRnVuY3Rpb25FeHByZXNzaW9uOwot
ICAgICAgICAgICAgdGhpcy5pZCA9IGlkOwotICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJh
bXM7Ci0gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAgICAgICAgdGhpcy5nZW5l
cmF0b3IgPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGZhbHNlOwotICAg
ICAgICAgICAgdGhpcy5hc3luYyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEFz
eW5jRnVuY3Rpb25FeHByZXNzaW9uOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5Bc3luY0Z1bmN0
aW9uRXhwcmVzc2lvbiA9IEFzeW5jRnVuY3Rpb25FeHByZXNzaW9uOwotICAgIHZhciBBd2FpdEV4
cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBBd2FpdEV4cHJlc3Np
b24oYXJndW1lbnQpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5B
d2FpdEV4cHJlc3Npb247Ci0gICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEF3YWl0RXhwcmVzc2lvbjsKLSAgICB9KCkpOwotICAg
IGV4cG9ydHMuQXdhaXRFeHByZXNzaW9uID0gQXdhaXRFeHByZXNzaW9uOwotICAgIHZhciBCaW5h
cnlFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQmluYXJ5RXhw
cmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHsKLSAgICAgICAgICAgIHZhciBsb2dpY2Fs
ID0gKG9wZXJhdG9yID09PSAnfHwnIHx8IG9wZXJhdG9yID09PSAnJiYnKTsKLSAgICAgICAgICAg
IHRoaXMudHlwZSA9IGxvZ2ljYWwgPyBzeW50YXhfMS5TeW50YXguTG9naWNhbEV4cHJlc3Npb24g
OiBzeW50YXhfMS5TeW50YXguQmluYXJ5RXhwcmVzc2lvbjsKLSAgICAgICAgICAgIHRoaXMub3Bl
cmF0b3IgPSBvcGVyYXRvcjsKLSAgICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7Ci0gICAgICAg
ICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEJpbmFy
eUV4cHJlc3Npb247Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkJpbmFyeUV4cHJlc3Npb24gPSBC
aW5hcnlFeHByZXNzaW9uOwotICAgIHZhciBCbG9ja1N0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7
Ci0gICAgICAgIGZ1bmN0aW9uIEJsb2NrU3RhdGVtZW50KGJvZHkpIHsKLSAgICAgICAgICAgIHRo
aXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5CbG9ja1N0YXRlbWVudDsKLSAgICAgICAgICAgIHRo
aXMuYm9keSA9IGJvZHk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEJsb2NrU3RhdGVtZW50
OwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5CbG9ja1N0YXRlbWVudCA9IEJsb2NrU3RhdGVtZW50
OwotICAgIHZhciBCcmVha1N0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0
aW9uIEJyZWFrU3RhdGVtZW50KGxhYmVsKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50
YXhfMS5TeW50YXguQnJlYWtTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmxhYmVsID0gbGFi
ZWw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEJyZWFrU3RhdGVtZW50OwotICAgIH0oKSk7
Ci0gICAgZXhwb3J0cy5CcmVha1N0YXRlbWVudCA9IEJyZWFrU3RhdGVtZW50OwotICAgIHZhciBD
YWxsRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIENhbGxFeHBy
ZXNzaW9uKGNhbGxlZSwgYXJncykgewotICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEu
U3ludGF4LkNhbGxFeHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7
Ci0gICAgICAgICAgICB0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIENhbGxFeHByZXNzaW9uOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5DYWxsRXhwcmVz
c2lvbiA9IENhbGxFeHByZXNzaW9uOwotICAgIHZhciBDYXRjaENsYXVzZSA9IChmdW5jdGlvbiAo
KSB7Ci0gICAgICAgIGZ1bmN0aW9uIENhdGNoQ2xhdXNlKHBhcmFtLCBib2R5KSB7Ci0gICAgICAg
ICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQ2F0Y2hDbGF1c2U7Ci0gICAgICAgICAg
ICB0aGlzLnBhcmFtID0gcGFyYW07Ci0gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBDYXRjaENsYXVzZTsKLSAgICB9KCkpOwotICAgIGV4cG9y
dHMuQ2F0Y2hDbGF1c2UgPSBDYXRjaENsYXVzZTsKLSAgICB2YXIgQ2xhc3NCb2R5ID0gKGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQ2xhc3NCb2R5KGJvZHkpIHsKLSAgICAgICAgICAg
IHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5DbGFzc0JvZHk7Ci0gICAgICAgICAgICB0aGlz
LmJvZHkgPSBib2R5OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBDbGFzc0JvZHk7Ci0gICAg
fSgpKTsKLSAgICBleHBvcnRzLkNsYXNzQm9keSA9IENsYXNzQm9keTsKLSAgICB2YXIgQ2xhc3NE
ZWNsYXJhdGlvbiA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIENsYXNzRGVjbGFy
YXRpb24oaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5
bnRheF8xLlN5bnRheC5DbGFzc0RlY2xhcmF0aW9uOwotICAgICAgICAgICAgdGhpcy5pZCA9IGlk
OwotICAgICAgICAgICAgdGhpcy5zdXBlckNsYXNzID0gc3VwZXJDbGFzczsKLSAgICAgICAgICAg
IHRoaXMuYm9keSA9IGJvZHk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIENsYXNzRGVjbGFy
YXRpb247Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkNsYXNzRGVjbGFyYXRpb24gPSBDbGFzc0Rl
Y2xhcmF0aW9uOwotICAgIHZhciBDbGFzc0V4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgewotICAg
ICAgICBmdW5jdGlvbiBDbGFzc0V4cHJlc3Npb24oaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsKLSAg
ICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5DbGFzc0V4cHJlc3Npb247Ci0g
ICAgICAgICAgICB0aGlzLmlkID0gaWQ7Ci0gICAgICAgICAgICB0aGlzLnN1cGVyQ2xhc3MgPSBz
dXBlckNsYXNzOwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gQ2xhc3NFeHByZXNzaW9uOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5DbGFz
c0V4cHJlc3Npb24gPSBDbGFzc0V4cHJlc3Npb247Ci0gICAgdmFyIENvbXB1dGVkTWVtYmVyRXhw
cmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIENvbXB1dGVkTWVtYmVy
RXhwcmVzc2lvbihvYmplY3QsIHByb3BlcnR5KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBz
eW50YXhfMS5TeW50YXguTWVtYmVyRXhwcmVzc2lvbjsKLSAgICAgICAgICAgIHRoaXMuY29tcHV0
ZWQgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7Ci0gICAgICAgICAg
ICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIENv
bXB1dGVkTWVtYmVyRXhwcmVzc2lvbjsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuQ29tcHV0ZWRN
ZW1iZXJFeHByZXNzaW9uID0gQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uOwotICAgIHZhciBDb25k
aXRpb25hbEV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBDb25k
aXRpb25hbEV4cHJlc3Npb24odGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7Ci0gICAgICAg
ICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQ29uZGl0aW9uYWxFeHByZXNzaW9uOwot
ICAgICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKLSAgICAgICAgICAgIHRoaXMuY29uc2VxdWVu
dCA9IGNvbnNlcXVlbnQ7Ci0gICAgICAgICAgICB0aGlzLmFsdGVybmF0ZSA9IGFsdGVybmF0ZTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gQ29uZGl0aW9uYWxFeHByZXNzaW9uOwotICAgIH0o
KSk7Ci0gICAgZXhwb3J0cy5Db25kaXRpb25hbEV4cHJlc3Npb24gPSBDb25kaXRpb25hbEV4cHJl
c3Npb247Ci0gICAgdmFyIENvbnRpbnVlU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgZnVuY3Rpb24gQ29udGludWVTdGF0ZW1lbnQobGFiZWwpIHsKLSAgICAgICAgICAgIHRoaXMu
dHlwZSA9IHN5bnRheF8xLlN5bnRheC5Db250aW51ZVN0YXRlbWVudDsKLSAgICAgICAgICAgIHRo
aXMubGFiZWwgPSBsYWJlbDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQ29udGludWVTdGF0
ZW1lbnQ7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkNvbnRpbnVlU3RhdGVtZW50ID0gQ29udGlu
dWVTdGF0ZW1lbnQ7Ci0gICAgdmFyIERlYnVnZ2VyU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgZnVuY3Rpb24gRGVidWdnZXJTdGF0ZW1lbnQoKSB7Ci0gICAgICAgICAgICB0aGlz
LnR5cGUgPSBzeW50YXhfMS5TeW50YXguRGVidWdnZXJTdGF0ZW1lbnQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIERlYnVnZ2VyU3RhdGVtZW50OwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5E
ZWJ1Z2dlclN0YXRlbWVudCA9IERlYnVnZ2VyU3RhdGVtZW50OwotICAgIHZhciBEaXJlY3RpdmUg
PSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBEaXJlY3RpdmUoZXhwcmVzc2lvbiwg
ZGlyZWN0aXZlKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRXhw
cmVzc2lvblN0YXRlbWVudDsKLSAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Np
b247Ci0gICAgICAgICAgICB0aGlzLmRpcmVjdGl2ZSA9IGRpcmVjdGl2ZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gRGlyZWN0aXZlOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5EaXJlY3Rp
dmUgPSBEaXJlY3RpdmU7Ci0gICAgdmFyIERvV2hpbGVTdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkg
ewotICAgICAgICBmdW5jdGlvbiBEb1doaWxlU3RhdGVtZW50KGJvZHksIHRlc3QpIHsKLSAgICAg
ICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Eb1doaWxlU3RhdGVtZW50OwotICAg
ICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIERvV2hpbGVTdGF0ZW1lbnQ7Ci0gICAgfSgpKTsK
LSAgICBleHBvcnRzLkRvV2hpbGVTdGF0ZW1lbnQgPSBEb1doaWxlU3RhdGVtZW50OwotICAgIHZh
ciBFbXB0eVN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEVtcHR5
U3RhdGVtZW50KCkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkVt
cHR5U3RhdGVtZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBFbXB0eVN0YXRlbWVudDsK
LSAgICB9KCkpOwotICAgIGV4cG9ydHMuRW1wdHlTdGF0ZW1lbnQgPSBFbXB0eVN0YXRlbWVudDsK
LSAgICB2YXIgRXhwb3J0QWxsRGVjbGFyYXRpb24gPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBm
dW5jdGlvbiBFeHBvcnRBbGxEZWNsYXJhdGlvbihzb3VyY2UpIHsKLSAgICAgICAgICAgIHRoaXMu
dHlwZSA9IHN5bnRheF8xLlN5bnRheC5FeHBvcnRBbGxEZWNsYXJhdGlvbjsKLSAgICAgICAgICAg
IHRoaXMuc291cmNlID0gc291cmNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBFeHBvcnRB
bGxEZWNsYXJhdGlvbjsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuRXhwb3J0QWxsRGVjbGFyYXRp
b24gPSBFeHBvcnRBbGxEZWNsYXJhdGlvbjsKLSAgICB2YXIgRXhwb3J0RGVmYXVsdERlY2xhcmF0
aW9uID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gRXhwb3J0RGVmYXVsdERlY2xh
cmF0aW9uKGRlY2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5T
eW50YXguRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOwotICAgICAgICAgICAgdGhpcy5kZWNsYXJh
dGlvbiA9IGRlY2xhcmF0aW9uOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBFeHBvcnREZWZh
dWx0RGVjbGFyYXRpb247Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkV4cG9ydERlZmF1bHREZWNs
YXJhdGlvbiA9IEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjsKLSAgICB2YXIgRXhwb3J0TmFtZWRE
ZWNsYXJhdGlvbiA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEV4cG9ydE5hbWVk
RGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIHNvdXJjZSkgewotICAgICAgICAg
ICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkV4cG9ydE5hbWVkRGVjbGFyYXRpb247Ci0g
ICAgICAgICAgICB0aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb247Ci0gICAgICAgICAgICB0
aGlzLnNwZWNpZmllcnMgPSBzcGVjaWZpZXJzOwotICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBz
b3VyY2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEV4cG9ydE5hbWVkRGVjbGFyYXRpb247
Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24gPSBFeHBvcnRO
YW1lZERlY2xhcmF0aW9uOwotICAgIHZhciBFeHBvcnRTcGVjaWZpZXIgPSAoZnVuY3Rpb24gKCkg
ewotICAgICAgICBmdW5jdGlvbiBFeHBvcnRTcGVjaWZpZXIobG9jYWwsIGV4cG9ydGVkKSB7Ci0g
ICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRXhwb3J0U3BlY2lmaWVyOwot
ICAgICAgICAgICAgdGhpcy5leHBvcnRlZCA9IGV4cG9ydGVkOwotICAgICAgICAgICAgdGhpcy5s
b2NhbCA9IGxvY2FsOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBFeHBvcnRTcGVjaWZpZXI7
Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkV4cG9ydFNwZWNpZmllciA9IEV4cG9ydFNwZWNpZmll
cjsKLSAgICB2YXIgRXhwcmVzc2lvblN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAg
IGZ1bmN0aW9uIEV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcmVzc2lvbikgewotICAgICAgICAgICAg
dGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkV4cHJlc3Npb25TdGF0ZW1lbnQ7Ci0gICAgICAg
ICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBFeHByZXNzaW9uU3RhdGVtZW50OwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5FeHByZXNz
aW9uU3RhdGVtZW50ID0gRXhwcmVzc2lvblN0YXRlbWVudDsKLSAgICB2YXIgRm9ySW5TdGF0ZW1l
bnQgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBGb3JJblN0YXRlbWVudChsZWZ0
LCByaWdodCwgYm9keSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4
LkZvckluU3RhdGVtZW50OwotICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsKLSAgICAgICAg
ICAgIHRoaXMucmlnaHQgPSByaWdodDsKLSAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7Ci0g
ICAgICAgICAgICB0aGlzLmVhY2ggPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
Rm9ySW5TdGF0ZW1lbnQ7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkZvckluU3RhdGVtZW50ID0g
Rm9ySW5TdGF0ZW1lbnQ7Ci0gICAgdmFyIEZvck9mU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgZnVuY3Rpb24gRm9yT2ZTdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpIHsKLSAg
ICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Gb3JPZlN0YXRlbWVudDsKLSAg
ICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7Ci0gICAgICAgICAgICB0aGlzLnJpZ2h0ID0gcmln
aHQ7Ci0gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBGb3JPZlN0YXRlbWVudDsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuRm9yT2ZTdGF0ZW1l
bnQgPSBGb3JPZlN0YXRlbWVudDsKLSAgICB2YXIgRm9yU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgZnVuY3Rpb24gRm9yU3RhdGVtZW50KGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9k
eSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkZvclN0YXRlbWVu
dDsKLSAgICAgICAgICAgIHRoaXMuaW5pdCA9IGluaXQ7Ci0gICAgICAgICAgICB0aGlzLnRlc3Qg
PSB0ZXN0OwotICAgICAgICAgICAgdGhpcy51cGRhdGUgPSB1cGRhdGU7Ci0gICAgICAgICAgICB0
aGlzLmJvZHkgPSBib2R5OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBGb3JTdGF0ZW1lbnQ7
Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkZvclN0YXRlbWVudCA9IEZvclN0YXRlbWVudDsKLSAg
ICB2YXIgRnVuY3Rpb25EZWNsYXJhdGlvbiA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0
aW9uIEZ1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHBhcmFtcywgYm9keSwgZ2VuZXJhdG9yKSB7Ci0g
ICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRnVuY3Rpb25EZWNsYXJhdGlv
bjsKLSAgICAgICAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICAgICAgICAgIHRoaXMucGFyYW1zID0g
cGFyYW1zOwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAgICAgIHRoaXMu
Z2VuZXJhdG9yID0gZ2VuZXJhdG9yOwotICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZmFs
c2U7Ci0gICAgICAgICAgICB0aGlzLmFzeW5jID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uRGVjbGFyYXRpb247Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkZ1bmN0
aW9uRGVjbGFyYXRpb24gPSBGdW5jdGlvbkRlY2xhcmF0aW9uOwotICAgIHZhciBGdW5jdGlvbkV4
cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBGdW5jdGlvbkV4cHJl
c3Npb24oaWQsIHBhcmFtcywgYm9keSwgZ2VuZXJhdG9yKSB7Ci0gICAgICAgICAgICB0aGlzLnR5
cGUgPSBzeW50YXhfMS5TeW50YXguRnVuY3Rpb25FeHByZXNzaW9uOwotICAgICAgICAgICAgdGhp
cy5pZCA9IGlkOwotICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7Ci0gICAgICAgICAg
ICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBnZW5lcmF0
b3I7Ci0gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAgIHRo
aXMuYXN5bmMgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gRnVuY3Rpb25FeHBy
ZXNzaW9uOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5GdW5jdGlvbkV4cHJlc3Npb24gPSBGdW5j
dGlvbkV4cHJlc3Npb247Ci0gICAgdmFyIElkZW50aWZpZXIgPSAoZnVuY3Rpb24gKCkgewotICAg
ICAgICBmdW5jdGlvbiBJZGVudGlmaWVyKG5hbWUpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9
IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyOwotICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFt
ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjsKLSAgICB9KCkpOwotICAg
IGV4cG9ydHMuSWRlbnRpZmllciA9IElkZW50aWZpZXI7Ci0gICAgdmFyIElmU3RhdGVtZW50ID0g
KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSWZTdGF0ZW1lbnQodGVzdCwgY29uc2Vx
dWVudCwgYWx0ZXJuYXRlKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50
YXguSWZTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OwotICAgICAgICAg
ICAgdGhpcy5jb25zZXF1ZW50ID0gY29uc2VxdWVudDsKLSAgICAgICAgICAgIHRoaXMuYWx0ZXJu
YXRlID0gYWx0ZXJuYXRlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJZlN0YXRlbWVudDsK
LSAgICB9KCkpOwotICAgIGV4cG9ydHMuSWZTdGF0ZW1lbnQgPSBJZlN0YXRlbWVudDsKLSAgICB2
YXIgSW1wb3J0ID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSW1wb3J0KCkgewot
ICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkltcG9ydDsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gSW1wb3J0OwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5JbXBvcnQg
PSBJbXBvcnQ7Ci0gICAgdmFyIEltcG9ydERlY2xhcmF0aW9uID0gKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgZnVuY3Rpb24gSW1wb3J0RGVjbGFyYXRpb24oc3BlY2lmaWVycywgc291cmNlKSB7Ci0g
ICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguSW1wb3J0RGVjbGFyYXRpb247
Ci0gICAgICAgICAgICB0aGlzLnNwZWNpZmllcnMgPSBzcGVjaWZpZXJzOwotICAgICAgICAgICAg
dGhpcy5zb3VyY2UgPSBzb3VyY2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEltcG9ydERl
Y2xhcmF0aW9uOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5JbXBvcnREZWNsYXJhdGlvbiA9IElt
cG9ydERlY2xhcmF0aW9uOwotICAgIHZhciBJbXBvcnREZWZhdWx0U3BlY2lmaWVyID0gKGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSW1wb3J0RGVmYXVsdFNwZWNpZmllcihsb2NhbCkg
ewotICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkltcG9ydERlZmF1bHRT
cGVjaWZpZXI7Ci0gICAgICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWw7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIEltcG9ydERlZmF1bHRTcGVjaWZpZXI7Ci0gICAgfSgpKTsKLSAgICBleHBv
cnRzLkltcG9ydERlZmF1bHRTcGVjaWZpZXIgPSBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOwotICAg
IHZhciBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBm
dW5jdGlvbiBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIobG9jYWwpIHsKLSAgICAgICAgICAgIHRo
aXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI7Ci0gICAg
ICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIElt
cG9ydE5hbWVzcGFjZVNwZWNpZmllcjsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuSW1wb3J0TmFt
ZXNwYWNlU3BlY2lmaWVyID0gSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOwotICAgIHZhciBJbXBv
cnRTcGVjaWZpZXIgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBJbXBvcnRTcGVj
aWZpZXIobG9jYWwsIGltcG9ydGVkKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhf
MS5TeW50YXguSW1wb3J0U3BlY2lmaWVyOwotICAgICAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2Fs
OwotICAgICAgICAgICAgdGhpcy5pbXBvcnRlZCA9IGltcG9ydGVkOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBJbXBvcnRTcGVjaWZpZXI7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkltcG9y
dFNwZWNpZmllciA9IEltcG9ydFNwZWNpZmllcjsKLSAgICB2YXIgTGFiZWxlZFN0YXRlbWVudCA9
IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIExhYmVsZWRTdGF0ZW1lbnQobGFiZWws
IGJvZHkpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5MYWJlbGVk
U3RhdGVtZW50OwotICAgICAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsOwotICAgICAgICAgICAg
dGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gTGFiZWxlZFN0YXRl
bWVudDsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuTGFiZWxlZFN0YXRlbWVudCA9IExhYmVsZWRT
dGF0ZW1lbnQ7Ci0gICAgdmFyIExpdGVyYWwgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5j
dGlvbiBMaXRlcmFsKHZhbHVlLCByYXcpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRh
eF8xLlN5bnRheC5MaXRlcmFsOwotICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAg
ICAgICAgICAgdGhpcy5yYXcgPSByYXc7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIExpdGVy
YWw7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLkxpdGVyYWwgPSBMaXRlcmFsOwotICAgIHZhciBN
ZXRhUHJvcGVydHkgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBNZXRhUHJvcGVy
dHkobWV0YSwgcHJvcGVydHkpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5
bnRheC5NZXRhUHJvcGVydHk7Ci0gICAgICAgICAgICB0aGlzLm1ldGEgPSBtZXRhOwotICAgICAg
ICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5OwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBNZXRhUHJvcGVydHk7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLk1ldGFQcm9wZXJ0eSA9IE1l
dGFQcm9wZXJ0eTsKLSAgICB2YXIgTWV0aG9kRGVmaW5pdGlvbiA9IChmdW5jdGlvbiAoKSB7Ci0g
ICAgICAgIGZ1bmN0aW9uIE1ldGhvZERlZmluaXRpb24oa2V5LCBjb21wdXRlZCwgdmFsdWUsIGtp
bmQsIGlzU3RhdGljKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXgu
TWV0aG9kRGVmaW5pdGlvbjsKLSAgICAgICAgICAgIHRoaXMua2V5ID0ga2V5OwotICAgICAgICAg
ICAgdGhpcy5jb21wdXRlZCA9IGNvbXB1dGVkOwotICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZh
bHVlOwotICAgICAgICAgICAgdGhpcy5raW5kID0ga2luZDsKLSAgICAgICAgICAgIHRoaXMuc3Rh
dGljID0gaXNTdGF0aWM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE1ldGhvZERlZmluaXRp
b247Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLk1ldGhvZERlZmluaXRpb24gPSBNZXRob2REZWZp
bml0aW9uOwotICAgIHZhciBNb2R1bGUgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlv
biBNb2R1bGUoYm9keSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4
LlByb2dyYW07Ci0gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAgICAgICAgdGhp
cy5zb3VyY2VUeXBlID0gJ21vZHVsZSc7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE1vZHVs
ZTsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuTW9kdWxlID0gTW9kdWxlOwotICAgIHZhciBOZXdF
eHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gTmV3RXhwcmVzc2lv
bihjYWxsZWUsIGFyZ3MpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRh
eC5OZXdFeHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7Ci0gICAg
ICAgICAgICB0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IE5ld0V4cHJlc3Npb247Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLk5ld0V4cHJlc3Npb24gPSBO
ZXdFeHByZXNzaW9uOwotICAgIHZhciBPYmplY3RFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgZnVuY3Rpb24gT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKSB7Ci0gICAgICAg
ICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguT2JqZWN0RXhwcmVzc2lvbjsKLSAgICAg
ICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIE9iamVjdEV4cHJlc3Npb247Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLk9iamVjdEV4
cHJlc3Npb24gPSBPYmplY3RFeHByZXNzaW9uOwotICAgIHZhciBPYmplY3RQYXR0ZXJuID0gKGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gT2JqZWN0UGF0dGVybihwcm9wZXJ0aWVzKSB7
Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguT2JqZWN0UGF0dGVybjsK
LSAgICAgICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIE9iamVjdFBhdHRlcm47Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLk9iamVj
dFBhdHRlcm4gPSBPYmplY3RQYXR0ZXJuOwotICAgIHZhciBQcm9wZXJ0eSA9IChmdW5jdGlvbiAo
KSB7Ci0gICAgICAgIGZ1bmN0aW9uIFByb3BlcnR5KGtpbmQsIGtleSwgY29tcHV0ZWQsIHZhbHVl
LCBtZXRob2QsIHNob3J0aGFuZCkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEu
U3ludGF4LlByb3BlcnR5OwotICAgICAgICAgICAgdGhpcy5rZXkgPSBrZXk7Ci0gICAgICAgICAg
ICB0aGlzLmNvbXB1dGVkID0gY29tcHV0ZWQ7Ci0gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFs
dWU7Ci0gICAgICAgICAgICB0aGlzLmtpbmQgPSBraW5kOwotICAgICAgICAgICAgdGhpcy5tZXRo
b2QgPSBtZXRob2Q7Ci0gICAgICAgICAgICB0aGlzLnNob3J0aGFuZCA9IHNob3J0aGFuZDsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gUHJvcGVydHk7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRz
LlByb3BlcnR5ID0gUHJvcGVydHk7Ci0gICAgdmFyIFJlZ2V4TGl0ZXJhbCA9IChmdW5jdGlvbiAo
KSB7Ci0gICAgICAgIGZ1bmN0aW9uIFJlZ2V4TGl0ZXJhbCh2YWx1ZSwgcmF3LCBwYXR0ZXJuLCBm
bGFncykgewotICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkxpdGVyYWw7
Ci0gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7Ci0gICAgICAgICAgICB0aGlzLnJhdyA9
IHJhdzsKLSAgICAgICAgICAgIHRoaXMucmVnZXggPSB7IHBhdHRlcm46IHBhdHRlcm4sIGZsYWdz
OiBmbGFncyB9OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBSZWdleExpdGVyYWw7Ci0gICAg
fSgpKTsKLSAgICBleHBvcnRzLlJlZ2V4TGl0ZXJhbCA9IFJlZ2V4TGl0ZXJhbDsKLSAgICB2YXIg
UmVzdEVsZW1lbnQgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBSZXN0RWxlbWVu
dChhcmd1bWVudCkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlJl
c3RFbGVtZW50OwotICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBSZXN0RWxlbWVudDsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMu
UmVzdEVsZW1lbnQgPSBSZXN0RWxlbWVudDsKLSAgICB2YXIgUmVzdFByb3BlcnR5ID0gKGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gUmVzdFByb3BlcnR5KGFyZ3VtZW50KSB7Ci0gICAg
ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguUmVzdFByb3BlcnR5OwotICAgICAg
ICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBSZXN0UHJvcGVydHk7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLlJlc3RQcm9wZXJ0eSA9IFJl
c3RQcm9wZXJ0eTsKLSAgICB2YXIgUmV0dXJuU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgZnVuY3Rpb24gUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KSB7Ci0gICAgICAgICAgICB0
aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguUmV0dXJuU3RhdGVtZW50OwotICAgICAgICAgICAg
dGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBSZXR1
cm5TdGF0ZW1lbnQ7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLlJldHVyblN0YXRlbWVudCA9IFJl
dHVyblN0YXRlbWVudDsKLSAgICB2YXIgU2NyaXB0ID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ZnVuY3Rpb24gU2NyaXB0KGJvZHkpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8x
LlN5bnRheC5Qcm9ncmFtOwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAg
ICAgIHRoaXMuc291cmNlVHlwZSA9ICdzY3JpcHQnOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBTY3JpcHQ7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLlNjcmlwdCA9IFNjcmlwdDsKLSAgICB2
YXIgU2VxdWVuY2VFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24g
U2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUg
PSBzeW50YXhfMS5TeW50YXguU2VxdWVuY2VFeHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5l
eHByZXNzaW9ucyA9IGV4cHJlc3Npb25zOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTZXF1
ZW5jZUV4cHJlc3Npb247Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLlNlcXVlbmNlRXhwcmVzc2lv
biA9IFNlcXVlbmNlRXhwcmVzc2lvbjsKLSAgICB2YXIgU3ByZWFkRWxlbWVudCA9IChmdW5jdGlv
biAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFNwcmVhZEVsZW1lbnQoYXJndW1lbnQpIHsKLSAgICAg
ICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5TcHJlYWRFbGVtZW50OwotICAgICAg
ICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBTcHJlYWRFbGVtZW50OwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5TcHJlYWRFbGVtZW50ID0g
U3ByZWFkRWxlbWVudDsKLSAgICB2YXIgU3ByZWFkUHJvcGVydHkgPSAoZnVuY3Rpb24gKCkgewot
ICAgICAgICBmdW5jdGlvbiBTcHJlYWRQcm9wZXJ0eShhcmd1bWVudCkgewotICAgICAgICAgICAg
dGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlNwcmVhZFByb3BlcnR5OwotICAgICAgICAgICAg
dGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTcHJl
YWRQcm9wZXJ0eTsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuU3ByZWFkUHJvcGVydHkgPSBTcHJl
YWRQcm9wZXJ0eTsKLSAgICB2YXIgU3RhdGljTWVtYmVyRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAo
KSB7Ci0gICAgICAgIGZ1bmN0aW9uIFN0YXRpY01lbWJlckV4cHJlc3Npb24ob2JqZWN0LCBwcm9w
ZXJ0eSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4Lk1lbWJlckV4
cHJlc3Npb247Ci0gICAgICAgICAgICB0aGlzLmNvbXB1dGVkID0gZmFsc2U7Ci0gICAgICAgICAg
ICB0aGlzLm9iamVjdCA9IG9iamVjdDsKLSAgICAgICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9w
ZXJ0eTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RhdGljTWVtYmVyRXhwcmVzc2lvbjsK
LSAgICB9KCkpOwotICAgIGV4cG9ydHMuU3RhdGljTWVtYmVyRXhwcmVzc2lvbiA9IFN0YXRpY01l
bWJlckV4cHJlc3Npb247Ci0gICAgdmFyIFN1cGVyID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ZnVuY3Rpb24gU3VwZXIoKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50
YXguU3VwZXI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN1cGVyOwotICAgIH0oKSk7Ci0g
ICAgZXhwb3J0cy5TdXBlciA9IFN1cGVyOwotICAgIHZhciBTd2l0Y2hDYXNlID0gKGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgZnVuY3Rpb24gU3dpdGNoQ2FzZSh0ZXN0LCBjb25zZXF1ZW50KSB7Ci0g
ICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguU3dpdGNoQ2FzZTsKLSAgICAg
ICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7Ci0gICAgICAgICAgICB0aGlzLmNvbnNlcXVlbnQgPSBj
b25zZXF1ZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTd2l0Y2hDYXNlOwotICAgIH0o
KSk7Ci0gICAgZXhwb3J0cy5Td2l0Y2hDYXNlID0gU3dpdGNoQ2FzZTsKLSAgICB2YXIgU3dpdGNo
U3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gU3dpdGNoU3RhdGVt
ZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRh
eF8xLlN5bnRheC5Td2l0Y2hTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmRpc2NyaW1pbmFu
dCA9IGRpc2NyaW1pbmFudDsKLSAgICAgICAgICAgIHRoaXMuY2FzZXMgPSBjYXNlczsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gU3dpdGNoU3RhdGVtZW50OwotICAgIH0oKSk7Ci0gICAgZXhw
b3J0cy5Td2l0Y2hTdGF0ZW1lbnQgPSBTd2l0Y2hTdGF0ZW1lbnQ7Ci0gICAgdmFyIFRhZ2dlZFRl
bXBsYXRlRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFRhZ2dl
ZFRlbXBsYXRlRXhwcmVzc2lvbih0YWcsIHF1YXNpKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUg
PSBzeW50YXhfMS5TeW50YXguVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOwotICAgICAgICAgICAg
dGhpcy50YWcgPSB0YWc7Ci0gICAgICAgICAgICB0aGlzLnF1YXNpID0gcXVhc2k7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjsKLSAgICB9KCkpOwot
ICAgIGV4cG9ydHMuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uID0gVGFnZ2VkVGVtcGxhdGVFeHBy
ZXNzaW9uOwotICAgIHZhciBUZW1wbGF0ZUVsZW1lbnQgPSAoZnVuY3Rpb24gKCkgewotICAgICAg
ICBmdW5jdGlvbiBUZW1wbGF0ZUVsZW1lbnQodmFsdWUsIHRhaWwpIHsKLSAgICAgICAgICAgIHRo
aXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5UZW1wbGF0ZUVsZW1lbnQ7Ci0gICAgICAgICAgICB0
aGlzLnZhbHVlID0gdmFsdWU7Ci0gICAgICAgICAgICB0aGlzLnRhaWwgPSB0YWlsOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBUZW1wbGF0ZUVsZW1lbnQ7Ci0gICAgfSgpKTsKLSAgICBleHBv
cnRzLlRlbXBsYXRlRWxlbWVudCA9IFRlbXBsYXRlRWxlbWVudDsKLSAgICB2YXIgVGVtcGxhdGVM
aXRlcmFsID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gVGVtcGxhdGVMaXRlcmFs
KHF1YXNpcywgZXhwcmVzc2lvbnMpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8x
LlN5bnRheC5UZW1wbGF0ZUxpdGVyYWw7Ci0gICAgICAgICAgICB0aGlzLnF1YXNpcyA9IHF1YXNp
czsKLSAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uczsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gVGVtcGxhdGVMaXRlcmFsOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0
cy5UZW1wbGF0ZUxpdGVyYWwgPSBUZW1wbGF0ZUxpdGVyYWw7Ci0gICAgdmFyIFRoaXNFeHByZXNz
aW9uID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gVGhpc0V4cHJlc3Npb24oKSB7
Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguVGhpc0V4cHJlc3Npb247
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFRoaXNFeHByZXNzaW9uOwotICAgIH0oKSk7Ci0g
ICAgZXhwb3J0cy5UaGlzRXhwcmVzc2lvbiA9IFRoaXNFeHByZXNzaW9uOwotICAgIHZhciBUaHJv
d1N0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFRocm93U3RhdGVt
ZW50KGFyZ3VtZW50KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXgu
VGhyb3dTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFRocm93U3RhdGVtZW50OwotICAgIH0oKSk7Ci0gICAg
ZXhwb3J0cy5UaHJvd1N0YXRlbWVudCA9IFRocm93U3RhdGVtZW50OwotICAgIHZhciBUcnlTdGF0
ZW1lbnQgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBUcnlTdGF0ZW1lbnQoYmxv
Y2ssIGhhbmRsZXIsIGZpbmFsaXplcikgewotICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4
XzEuU3ludGF4LlRyeVN0YXRlbWVudDsKLSAgICAgICAgICAgIHRoaXMuYmxvY2sgPSBibG9jazsK
LSAgICAgICAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7Ci0gICAgICAgICAgICB0aGlzLmZp
bmFsaXplciA9IGZpbmFsaXplcjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gVHJ5U3RhdGVt
ZW50OwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5UcnlTdGF0ZW1lbnQgPSBUcnlTdGF0ZW1lbnQ7
Ci0gICAgdmFyIFVuYXJ5RXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0
aW9uIFVuYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgYXJndW1lbnQpIHsKLSAgICAgICAgICAgIHRo
aXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5VbmFyeUV4cHJlc3Npb247Ci0gICAgICAgICAgICB0
aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7Ci0gICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJn
dW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLnByZWZpeCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIFVuYXJ5RXhwcmVzc2lvbjsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuVW5hcnlF
eHByZXNzaW9uID0gVW5hcnlFeHByZXNzaW9uOwotICAgIHZhciBVcGRhdGVFeHByZXNzaW9uID0g
KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gVXBkYXRlRXhwcmVzc2lvbihvcGVyYXRv
ciwgYXJndW1lbnQsIHByZWZpeCkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEu
U3ludGF4LlVwZGF0ZUV4cHJlc3Npb247Ci0gICAgICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3Bl
cmF0b3I7Ci0gICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7Ci0gICAgICAgICAg
ICB0aGlzLnByZWZpeCA9IHByZWZpeDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gVXBkYXRl
RXhwcmVzc2lvbjsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuVXBkYXRlRXhwcmVzc2lvbiA9IFVw
ZGF0ZUV4cHJlc3Npb247Ci0gICAgdmFyIFZhcmlhYmxlRGVjbGFyYXRpb24gPSAoZnVuY3Rpb24g
KCkgewotICAgICAgICBmdW5jdGlvbiBWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywg
a2luZCkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlZhcmlhYmxl
RGVjbGFyYXRpb247Ci0gICAgICAgICAgICB0aGlzLmRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9u
czsKLSAgICAgICAgICAgIHRoaXMua2luZCA9IGtpbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIFZhcmlhYmxlRGVjbGFyYXRpb247Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLlZhcmlhYmxl
RGVjbGFyYXRpb24gPSBWYXJpYWJsZURlY2xhcmF0aW9uOwotICAgIHZhciBWYXJpYWJsZURlY2xh
cmF0b3IgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBWYXJpYWJsZURlY2xhcmF0
b3IoaWQsIGluaXQpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5W
YXJpYWJsZURlY2xhcmF0b3I7Ci0gICAgICAgICAgICB0aGlzLmlkID0gaWQ7Ci0gICAgICAgICAg
ICB0aGlzLmluaXQgPSBpbml0OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBWYXJpYWJsZURl
Y2xhcmF0b3I7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLlZhcmlhYmxlRGVjbGFyYXRvciA9IFZh
cmlhYmxlRGVjbGFyYXRvcjsKLSAgICB2YXIgV2hpbGVTdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkg
ewotICAgICAgICBmdW5jdGlvbiBXaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KSB7Ci0gICAgICAg
ICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguV2hpbGVTdGF0ZW1lbnQ7Ci0gICAgICAg
ICAgICB0aGlzLnRlc3QgPSB0ZXN0OwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gV2hpbGVTdGF0ZW1lbnQ7Ci0gICAgfSgpKTsKLSAgICBl
eHBvcnRzLldoaWxlU3RhdGVtZW50ID0gV2hpbGVTdGF0ZW1lbnQ7Ci0gICAgdmFyIFdpdGhTdGF0
ZW1lbnQgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBXaXRoU3RhdGVtZW50KG9i
amVjdCwgYm9keSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4Lldp
dGhTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDsKLSAgICAgICAg
ICAgIHRoaXMuYm9keSA9IGJvZHk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFdpdGhTdGF0
ZW1lbnQ7Ci0gICAgfSgpKTsKLSAgICBleHBvcnRzLldpdGhTdGF0ZW1lbnQgPSBXaXRoU3RhdGVt
ZW50OwotICAgIHZhciBZaWVsZEV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBm
dW5jdGlvbiBZaWVsZEV4cHJlc3Npb24oYXJndW1lbnQsIGRlbGVnYXRlKSB7Ci0gICAgICAgICAg
ICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguWWllbGRFeHByZXNzaW9uOwotICAgICAgICAg
ICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OwotICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9
IGRlbGVnYXRlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBZaWVsZEV4cHJlc3Npb247Ci0g
ICAgfSgpKTsKLSAgICBleHBvcnRzLllpZWxkRXhwcmVzc2lvbiA9IFlpZWxkRXhwcmVzc2lvbjsK
KwkidXNlIHN0cmljdCI7CisJT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9k
dWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKKwl2YXIgc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDIpOworCS8qIHRzbGludDpkaXNhYmxlOm1heC1jbGFzc2VzLXBlci1maWxlICovCisJdmFy
IEFycmF5RXhwcmVzc2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVu
Y3Rpb24gQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBz
eW50YXhfMS5TeW50YXguQXJyYXlFeHByZXNzaW9uOworCSAgICAgICAgdGhpcy5lbGVtZW50cyA9
IGVsZW1lbnRzOworCSAgICB9CisJICAgIHJldHVybiBBcnJheUV4cHJlc3Npb247CisJfSgpKTsK
KwlleHBvcnRzLkFycmF5RXhwcmVzc2lvbiA9IEFycmF5RXhwcmVzc2lvbjsKKwl2YXIgQXJyYXlQ
YXR0ZXJuID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBBcnJh
eVBhdHRlcm4oZWxlbWVudHMpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRh
eC5BcnJheVBhdHRlcm47CisJICAgICAgICB0aGlzLmVsZW1lbnRzID0gZWxlbWVudHM7CisJICAg
IH0KKwkgICAgcmV0dXJuIEFycmF5UGF0dGVybjsKKwl9KCkpOworCWV4cG9ydHMuQXJyYXlQYXR0
ZXJuID0gQXJyYXlQYXR0ZXJuOworCXZhciBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gQXJyb3dGdW5jdGlvbkV4cHJl
c3Npb24ocGFyYW1zLCBib2R5LCBleHByZXNzaW9uKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBz
eW50YXhfMS5TeW50YXguQXJyb3dGdW5jdGlvbkV4cHJlc3Npb247CisJICAgICAgICB0aGlzLmlk
ID0gbnVsbDsKKwkgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOworCSAgICAgICAgdGhpcy5i
b2R5ID0gYm9keTsKKwkgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZmFsc2U7CisJICAgICAgICB0
aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uOworCSAgICAgICAgdGhpcy5hc3luYyA9IGZhbHNl
OworCSAgICB9CisJICAgIHJldHVybiBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjsKKwl9KCkpOwor
CWV4cG9ydHMuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gPSBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lv
bjsKKwl2YXIgQXNzaWdubWVudEV4cHJlc3Npb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
KSB7CisJICAgIGZ1bmN0aW9uIEFzc2lnbm1lbnRFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCBy
aWdodCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRF
eHByZXNzaW9uOworCSAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yOworCSAgICAgICAg
dGhpcy5sZWZ0ID0gbGVmdDsKKwkgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDsKKwkgICAgfQor
CSAgICByZXR1cm4gQXNzaWdubWVudEV4cHJlc3Npb247CisJfSgpKTsKKwlleHBvcnRzLkFzc2ln
bm1lbnRFeHByZXNzaW9uID0gQXNzaWdubWVudEV4cHJlc3Npb247CisJdmFyIEFzc2lnbm1lbnRQ
YXR0ZXJuID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBBc3Np
Z25tZW50UGF0dGVybihsZWZ0LCByaWdodCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4
XzEuU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOworCSAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsK
KwkgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDsKKwkgICAgfQorCSAgICByZXR1cm4gQXNzaWdu
bWVudFBhdHRlcm47CisJfSgpKTsKKwlleHBvcnRzLkFzc2lnbm1lbnRQYXR0ZXJuID0gQXNzaWdu
bWVudFBhdHRlcm47CisJdmFyIEFzeW5jQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEFzeW5jQXJyb3dGdW5jdGlvbkV4
cHJlc3Npb24ocGFyYW1zLCBib2R5LCBleHByZXNzaW9uKSB7CisJICAgICAgICB0aGlzLnR5cGUg
PSBzeW50YXhfMS5TeW50YXguQXJyb3dGdW5jdGlvbkV4cHJlc3Npb247CisJICAgICAgICB0aGlz
LmlkID0gbnVsbDsKKwkgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOworCSAgICAgICAgdGhp
cy5ib2R5ID0gYm9keTsKKwkgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZmFsc2U7CisJICAgICAg
ICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uOworCSAgICAgICAgdGhpcy5hc3luYyA9IHRy
dWU7CisJICAgIH0KKwkgICAgcmV0dXJuIEFzeW5jQXJyb3dGdW5jdGlvbkV4cHJlc3Npb247CisJ
fSgpKTsKKwlleHBvcnRzLkFzeW5jQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gPSBBc3luY0Fycm93
RnVuY3Rpb25FeHByZXNzaW9uOworCXZhciBBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb24gPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEFzeW5jRnVuY3Rpb25EZWNs
YXJhdGlvbihpZCwgcGFyYW1zLCBib2R5KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhf
MS5TeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbjsKKwkgICAgICAgIHRoaXMuaWQgPSBpZDsKKwkg
ICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOworCSAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsK
KwkgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZmFsc2U7CisJICAgICAgICB0aGlzLmV4cHJlc3Np
b24gPSBmYWxzZTsKKwkgICAgICAgIHRoaXMuYXN5bmMgPSB0cnVlOworCSAgICB9CisJICAgIHJl
dHVybiBBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb247CisJfSgpKTsKKwlleHBvcnRzLkFzeW5jRnVu
Y3Rpb25EZWNsYXJhdGlvbiA9IEFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbjsKKwl2YXIgQXN5bmNG
dW5jdGlvbkV4cHJlc3Npb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1
bmN0aW9uIEFzeW5jRnVuY3Rpb25FeHByZXNzaW9uKGlkLCBwYXJhbXMsIGJvZHkpIHsKKwkgICAg
ICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5GdW5jdGlvbkV4cHJlc3Npb247CisJICAg
ICAgICB0aGlzLmlkID0gaWQ7CisJICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKKwkgICAg
ICAgIHRoaXMuYm9keSA9IGJvZHk7CisJICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGZhbHNlOwor
CSAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZmFsc2U7CisJICAgICAgICB0aGlzLmFzeW5jID0g
dHJ1ZTsKKwkgICAgfQorCSAgICByZXR1cm4gQXN5bmNGdW5jdGlvbkV4cHJlc3Npb247CisJfSgp
KTsKKwlleHBvcnRzLkFzeW5jRnVuY3Rpb25FeHByZXNzaW9uID0gQXN5bmNGdW5jdGlvbkV4cHJl
c3Npb247CisJdmFyIEF3YWl0RXhwcmVzc2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgp
IHsKKwkgICAgZnVuY3Rpb24gQXdhaXRFeHByZXNzaW9uKGFyZ3VtZW50KSB7CisJICAgICAgICB0
aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQXdhaXRFeHByZXNzaW9uOworCSAgICAgICAgdGhp
cy5hcmd1bWVudCA9IGFyZ3VtZW50OworCSAgICB9CisJICAgIHJldHVybiBBd2FpdEV4cHJlc3Np
b247CisJfSgpKTsKKwlleHBvcnRzLkF3YWl0RXhwcmVzc2lvbiA9IEF3YWl0RXhwcmVzc2lvbjsK
Kwl2YXIgQmluYXJ5RXhwcmVzc2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkg
ICAgZnVuY3Rpb24gQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHsKKwkg
ICAgICAgIHZhciBsb2dpY2FsID0gKG9wZXJhdG9yID09PSAnfHwnIHx8IG9wZXJhdG9yID09PSAn
JiYnKTsKKwkgICAgICAgIHRoaXMudHlwZSA9IGxvZ2ljYWwgPyBzeW50YXhfMS5TeW50YXguTG9n
aWNhbEV4cHJlc3Npb24gOiBzeW50YXhfMS5TeW50YXguQmluYXJ5RXhwcmVzc2lvbjsKKwkgICAg
ICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjsKKwkgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7
CisJICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7CisJICAgIH0KKwkgICAgcmV0dXJuIEJpbmFy
eUV4cHJlc3Npb247CisJfSgpKTsKKwlleHBvcnRzLkJpbmFyeUV4cHJlc3Npb24gPSBCaW5hcnlF
eHByZXNzaW9uOworCXZhciBCbG9ja1N0YXRlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKwkgICAgZnVuY3Rpb24gQmxvY2tTdGF0ZW1lbnQoYm9keSkgeworCSAgICAgICAgdGhp
cy50eXBlID0gc3ludGF4XzEuU3ludGF4LkJsb2NrU3RhdGVtZW50OworCSAgICAgICAgdGhpcy5i
b2R5ID0gYm9keTsKKwkgICAgfQorCSAgICByZXR1cm4gQmxvY2tTdGF0ZW1lbnQ7CisJfSgpKTsK
KwlleHBvcnRzLkJsb2NrU3RhdGVtZW50ID0gQmxvY2tTdGF0ZW1lbnQ7CisJdmFyIEJyZWFrU3Rh
dGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBCcmVh
a1N0YXRlbWVudChsYWJlbCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4
LkJyZWFrU3RhdGVtZW50OworCSAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsOworCSAgICB9CisJ
ICAgIHJldHVybiBCcmVha1N0YXRlbWVudDsKKwl9KCkpOworCWV4cG9ydHMuQnJlYWtTdGF0ZW1l
bnQgPSBCcmVha1N0YXRlbWVudDsKKwl2YXIgQ2FsbEV4cHJlc3Npb24gPSAvKiogQGNsYXNzICov
IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIENhbGxFeHByZXNzaW9uKGNhbGxlZSwgYXJn
cykgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkNhbGxFeHByZXNzaW9u
OworCSAgICAgICAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7CisJICAgICAgICB0aGlzLmFyZ3VtZW50
cyA9IGFyZ3M7CisJICAgIH0KKwkgICAgcmV0dXJuIENhbGxFeHByZXNzaW9uOworCX0oKSk7CisJ
ZXhwb3J0cy5DYWxsRXhwcmVzc2lvbiA9IENhbGxFeHByZXNzaW9uOworCXZhciBDYXRjaENsYXVz
ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gQ2F0Y2hDbGF1
c2UocGFyYW0sIGJvZHkpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5D
YXRjaENsYXVzZTsKKwkgICAgICAgIHRoaXMucGFyYW0gPSBwYXJhbTsKKwkgICAgICAgIHRoaXMu
Ym9keSA9IGJvZHk7CisJICAgIH0KKwkgICAgcmV0dXJuIENhdGNoQ2xhdXNlOworCX0oKSk7CisJ
ZXhwb3J0cy5DYXRjaENsYXVzZSA9IENhdGNoQ2xhdXNlOworCXZhciBDbGFzc0JvZHkgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIENsYXNzQm9keShib2R5KSB7
CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQ2xhc3NCb2R5OworCSAgICAg
ICAgdGhpcy5ib2R5ID0gYm9keTsKKwkgICAgfQorCSAgICByZXR1cm4gQ2xhc3NCb2R5OworCX0o
KSk7CisJZXhwb3J0cy5DbGFzc0JvZHkgPSBDbGFzc0JvZHk7CisJdmFyIENsYXNzRGVjbGFyYXRp
b24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIENsYXNzRGVj
bGFyYXRpb24oaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5
bnRheF8xLlN5bnRheC5DbGFzc0RlY2xhcmF0aW9uOworCSAgICAgICAgdGhpcy5pZCA9IGlkOwor
CSAgICAgICAgdGhpcy5zdXBlckNsYXNzID0gc3VwZXJDbGFzczsKKwkgICAgICAgIHRoaXMuYm9k
eSA9IGJvZHk7CisJICAgIH0KKwkgICAgcmV0dXJuIENsYXNzRGVjbGFyYXRpb247CisJfSgpKTsK
KwlleHBvcnRzLkNsYXNzRGVjbGFyYXRpb24gPSBDbGFzc0RlY2xhcmF0aW9uOworCXZhciBDbGFz
c0V4cHJlc3Npb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9u
IENsYXNzRXhwcmVzc2lvbihpZCwgc3VwZXJDbGFzcywgYm9keSkgeworCSAgICAgICAgdGhpcy50
eXBlID0gc3ludGF4XzEuU3ludGF4LkNsYXNzRXhwcmVzc2lvbjsKKwkgICAgICAgIHRoaXMuaWQg
PSBpZDsKKwkgICAgICAgIHRoaXMuc3VwZXJDbGFzcyA9IHN1cGVyQ2xhc3M7CisJICAgICAgICB0
aGlzLmJvZHkgPSBib2R5OworCSAgICB9CisJICAgIHJldHVybiBDbGFzc0V4cHJlc3Npb247CisJ
fSgpKTsKKwlleHBvcnRzLkNsYXNzRXhwcmVzc2lvbiA9IENsYXNzRXhwcmVzc2lvbjsKKwl2YXIg
Q29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewor
CSAgICBmdW5jdGlvbiBDb21wdXRlZE1lbWJlckV4cHJlc3Npb24ob2JqZWN0LCBwcm9wZXJ0eSkg
eworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4Lk1lbWJlckV4cHJlc3Npb247
CisJICAgICAgICB0aGlzLmNvbXB1dGVkID0gdHJ1ZTsKKwkgICAgICAgIHRoaXMub2JqZWN0ID0g
b2JqZWN0OworCSAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5OworCSAgICB9CisJICAg
IHJldHVybiBDb21wdXRlZE1lbWJlckV4cHJlc3Npb247CisJfSgpKTsKKwlleHBvcnRzLkNvbXB1
dGVkTWVtYmVyRXhwcmVzc2lvbiA9IENvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbjsKKwl2YXIgQ29u
ZGl0aW9uYWxFeHByZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBm
dW5jdGlvbiBDb25kaXRpb25hbEV4cHJlc3Npb24odGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRl
KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQ29uZGl0aW9uYWxFeHBy
ZXNzaW9uOworCSAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKKwkgICAgICAgIHRoaXMuY29uc2Vx
dWVudCA9IGNvbnNlcXVlbnQ7CisJICAgICAgICB0aGlzLmFsdGVybmF0ZSA9IGFsdGVybmF0ZTsK
KwkgICAgfQorCSAgICByZXR1cm4gQ29uZGl0aW9uYWxFeHByZXNzaW9uOworCX0oKSk7CisJZXhw
b3J0cy5Db25kaXRpb25hbEV4cHJlc3Npb24gPSBDb25kaXRpb25hbEV4cHJlc3Npb247CisJdmFy
IENvbnRpbnVlU3RhdGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBm
dW5jdGlvbiBDb250aW51ZVN0YXRlbWVudChsYWJlbCkgeworCSAgICAgICAgdGhpcy50eXBlID0g
c3ludGF4XzEuU3ludGF4LkNvbnRpbnVlU3RhdGVtZW50OworCSAgICAgICAgdGhpcy5sYWJlbCA9
IGxhYmVsOworCSAgICB9CisJICAgIHJldHVybiBDb250aW51ZVN0YXRlbWVudDsKKwl9KCkpOwor
CWV4cG9ydHMuQ29udGludWVTdGF0ZW1lbnQgPSBDb250aW51ZVN0YXRlbWVudDsKKwl2YXIgRGVi
dWdnZXJTdGF0ZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0
aW9uIERlYnVnZ2VyU3RhdGVtZW50KCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEu
U3ludGF4LkRlYnVnZ2VyU3RhdGVtZW50OworCSAgICB9CisJICAgIHJldHVybiBEZWJ1Z2dlclN0
YXRlbWVudDsKKwl9KCkpOworCWV4cG9ydHMuRGVidWdnZXJTdGF0ZW1lbnQgPSBEZWJ1Z2dlclN0
YXRlbWVudDsKKwl2YXIgRGlyZWN0aXZlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewor
CSAgICBmdW5jdGlvbiBEaXJlY3RpdmUoZXhwcmVzc2lvbiwgZGlyZWN0aXZlKSB7CisJICAgICAg
ICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRXhwcmVzc2lvblN0YXRlbWVudDsKKwkgICAg
ICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247CisJICAgICAgICB0aGlzLmRpcmVjdGl2
ZSA9IGRpcmVjdGl2ZTsKKwkgICAgfQorCSAgICByZXR1cm4gRGlyZWN0aXZlOworCX0oKSk7CisJ
ZXhwb3J0cy5EaXJlY3RpdmUgPSBEaXJlY3RpdmU7CisJdmFyIERvV2hpbGVTdGF0ZW1lbnQgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIERvV2hpbGVTdGF0ZW1l
bnQoYm9keSwgdGVzdCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkRv
V2hpbGVTdGF0ZW1lbnQ7CisJICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworCSAgICAgICAgdGhp
cy50ZXN0ID0gdGVzdDsKKwkgICAgfQorCSAgICByZXR1cm4gRG9XaGlsZVN0YXRlbWVudDsKKwl9
KCkpOworCWV4cG9ydHMuRG9XaGlsZVN0YXRlbWVudCA9IERvV2hpbGVTdGF0ZW1lbnQ7CisJdmFy
IEVtcHR5U3RhdGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5j
dGlvbiBFbXB0eVN0YXRlbWVudCgpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5
bnRheC5FbXB0eVN0YXRlbWVudDsKKwkgICAgfQorCSAgICByZXR1cm4gRW1wdHlTdGF0ZW1lbnQ7
CisJfSgpKTsKKwlleHBvcnRzLkVtcHR5U3RhdGVtZW50ID0gRW1wdHlTdGF0ZW1lbnQ7CisJdmFy
IEV4cG9ydEFsbERlY2xhcmF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAg
ICBmdW5jdGlvbiBFeHBvcnRBbGxEZWNsYXJhdGlvbihzb3VyY2UpIHsKKwkgICAgICAgIHRoaXMu
dHlwZSA9IHN5bnRheF8xLlN5bnRheC5FeHBvcnRBbGxEZWNsYXJhdGlvbjsKKwkgICAgICAgIHRo
aXMuc291cmNlID0gc291cmNlOworCSAgICB9CisJICAgIHJldHVybiBFeHBvcnRBbGxEZWNsYXJh
dGlvbjsKKwl9KCkpOworCWV4cG9ydHMuRXhwb3J0QWxsRGVjbGFyYXRpb24gPSBFeHBvcnRBbGxE
ZWNsYXJhdGlvbjsKKwl2YXIgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24o
ZGVjbGFyYXRpb24pIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5FeHBv
cnREZWZhdWx0RGVjbGFyYXRpb247CisJICAgICAgICB0aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFy
YXRpb247CisJICAgIH0KKwkgICAgcmV0dXJuIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjsKKwl9
KCkpOworCWV4cG9ydHMuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uID0gRXhwb3J0RGVmYXVsdERl
Y2xhcmF0aW9uOworCXZhciBFeHBvcnROYW1lZERlY2xhcmF0aW9uID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBFeHBvcnROYW1lZERlY2xhcmF0aW9uKGRlY2xh
cmF0aW9uLCBzcGVjaWZpZXJzLCBzb3VyY2UpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRh
eF8xLlN5bnRheC5FeHBvcnROYW1lZERlY2xhcmF0aW9uOworCSAgICAgICAgdGhpcy5kZWNsYXJh
dGlvbiA9IGRlY2xhcmF0aW9uOworCSAgICAgICAgdGhpcy5zcGVjaWZpZXJzID0gc3BlY2lmaWVy
czsKKwkgICAgICAgIHRoaXMuc291cmNlID0gc291cmNlOworCSAgICB9CisJICAgIHJldHVybiBF
eHBvcnROYW1lZERlY2xhcmF0aW9uOworCX0oKSk7CisJZXhwb3J0cy5FeHBvcnROYW1lZERlY2xh
cmF0aW9uID0gRXhwb3J0TmFtZWREZWNsYXJhdGlvbjsKKwl2YXIgRXhwb3J0U3BlY2lmaWVyID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBFeHBvcnRTcGVjaWZp
ZXIobG9jYWwsIGV4cG9ydGVkKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50
YXguRXhwb3J0U3BlY2lmaWVyOworCSAgICAgICAgdGhpcy5leHBvcnRlZCA9IGV4cG9ydGVkOwor
CSAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsOworCSAgICB9CisJICAgIHJldHVybiBFeHBvcnRT
cGVjaWZpZXI7CisJfSgpKTsKKwlleHBvcnRzLkV4cG9ydFNwZWNpZmllciA9IEV4cG9ydFNwZWNp
ZmllcjsKKwl2YXIgRXhwcmVzc2lvblN0YXRlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKKwkgICAgZnVuY3Rpb24gRXhwcmVzc2lvblN0YXRlbWVudChleHByZXNzaW9uKSB7CisJ
ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRXhwcmVzc2lvblN0YXRlbWVudDsK
KwkgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247CisJICAgIH0KKwkgICAgcmV0
dXJuIEV4cHJlc3Npb25TdGF0ZW1lbnQ7CisJfSgpKTsKKwlleHBvcnRzLkV4cHJlc3Npb25TdGF0
ZW1lbnQgPSBFeHByZXNzaW9uU3RhdGVtZW50OworCXZhciBGb3JJblN0YXRlbWVudCA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gRm9ySW5TdGF0ZW1lbnQobGVm
dCwgcmlnaHQsIGJvZHkpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5G
b3JJblN0YXRlbWVudDsKKwkgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7CisJICAgICAgICB0aGlz
LnJpZ2h0ID0gcmlnaHQ7CisJICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworCSAgICAgICAgdGhp
cy5lYWNoID0gZmFsc2U7CisJICAgIH0KKwkgICAgcmV0dXJuIEZvckluU3RhdGVtZW50OworCX0o
KSk7CisJZXhwb3J0cy5Gb3JJblN0YXRlbWVudCA9IEZvckluU3RhdGVtZW50OworCXZhciBGb3JP
ZlN0YXRlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24g
Rm9yT2ZTdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9
IHN5bnRheF8xLlN5bnRheC5Gb3JPZlN0YXRlbWVudDsKKwkgICAgICAgIHRoaXMubGVmdCA9IGxl
ZnQ7CisJICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7CisJICAgICAgICB0aGlzLmJvZHkgPSBi
b2R5OworCSAgICB9CisJICAgIHJldHVybiBGb3JPZlN0YXRlbWVudDsKKwl9KCkpOworCWV4cG9y
dHMuRm9yT2ZTdGF0ZW1lbnQgPSBGb3JPZlN0YXRlbWVudDsKKwl2YXIgRm9yU3RhdGVtZW50ID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBGb3JTdGF0ZW1lbnQo
aW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhf
MS5TeW50YXguRm9yU3RhdGVtZW50OworCSAgICAgICAgdGhpcy5pbml0ID0gaW5pdDsKKwkgICAg
ICAgIHRoaXMudGVzdCA9IHRlc3Q7CisJICAgICAgICB0aGlzLnVwZGF0ZSA9IHVwZGF0ZTsKKwkg
ICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CisJICAgIH0KKwkgICAgcmV0dXJuIEZvclN0YXRlbWVu
dDsKKwl9KCkpOworCWV4cG9ydHMuRm9yU3RhdGVtZW50ID0gRm9yU3RhdGVtZW50OworCXZhciBG
dW5jdGlvbkRlY2xhcmF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBm
dW5jdGlvbiBGdW5jdGlvbkRlY2xhcmF0aW9uKGlkLCBwYXJhbXMsIGJvZHksIGdlbmVyYXRvcikg
eworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkZ1bmN0aW9uRGVjbGFyYXRp
b247CisJICAgICAgICB0aGlzLmlkID0gaWQ7CisJICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFt
czsKKwkgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CisJICAgICAgICB0aGlzLmdlbmVyYXRvciA9
IGdlbmVyYXRvcjsKKwkgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGZhbHNlOworCSAgICAgICAg
dGhpcy5hc3luYyA9IGZhbHNlOworCSAgICB9CisJICAgIHJldHVybiBGdW5jdGlvbkRlY2xhcmF0
aW9uOworCX0oKSk7CisJZXhwb3J0cy5GdW5jdGlvbkRlY2xhcmF0aW9uID0gRnVuY3Rpb25EZWNs
YXJhdGlvbjsKKwl2YXIgRnVuY3Rpb25FeHByZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKCkgeworCSAgICBmdW5jdGlvbiBGdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgYm9k
eSwgZ2VuZXJhdG9yKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRnVu
Y3Rpb25FeHByZXNzaW9uOworCSAgICAgICAgdGhpcy5pZCA9IGlkOworCSAgICAgICAgdGhpcy5w
YXJhbXMgPSBwYXJhbXM7CisJICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworCSAgICAgICAgdGhp
cy5nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisJICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBmYWxz
ZTsKKwkgICAgICAgIHRoaXMuYXN5bmMgPSBmYWxzZTsKKwkgICAgfQorCSAgICByZXR1cm4gRnVu
Y3Rpb25FeHByZXNzaW9uOworCX0oKSk7CisJZXhwb3J0cy5GdW5jdGlvbkV4cHJlc3Npb24gPSBG
dW5jdGlvbkV4cHJlc3Npb247CisJdmFyIElkZW50aWZpZXIgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIElkZW50aWZpZXIobmFtZSkgeworCSAgICAgICAgdGhp
cy50eXBlID0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXI7CisJICAgICAgICB0aGlzLm5hbWUg
PSBuYW1lOworCSAgICB9CisJICAgIHJldHVybiBJZGVudGlmaWVyOworCX0oKSk7CisJZXhwb3J0
cy5JZGVudGlmaWVyID0gSWRlbnRpZmllcjsKKwl2YXIgSWZTdGF0ZW1lbnQgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIElmU3RhdGVtZW50KHRlc3QsIGNvbnNl
cXVlbnQsIGFsdGVybmF0ZSkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4
LklmU3RhdGVtZW50OworCSAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKKwkgICAgICAgIHRoaXMu
Y29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7CisJICAgICAgICB0aGlzLmFsdGVybmF0ZSA9IGFsdGVy
bmF0ZTsKKwkgICAgfQorCSAgICByZXR1cm4gSWZTdGF0ZW1lbnQ7CisJfSgpKTsKKwlleHBvcnRz
LklmU3RhdGVtZW50ID0gSWZTdGF0ZW1lbnQ7CisJdmFyIEltcG9ydCA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gSW1wb3J0KCkgeworCSAgICAgICAgdGhpcy50
eXBlID0gc3ludGF4XzEuU3ludGF4LkltcG9ydDsKKwkgICAgfQorCSAgICByZXR1cm4gSW1wb3J0
OworCX0oKSk7CisJZXhwb3J0cy5JbXBvcnQgPSBJbXBvcnQ7CisJdmFyIEltcG9ydERlY2xhcmF0
aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBJbXBvcnRE
ZWNsYXJhdGlvbihzcGVjaWZpZXJzLCBzb3VyY2UpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5
bnRheF8xLlN5bnRheC5JbXBvcnREZWNsYXJhdGlvbjsKKwkgICAgICAgIHRoaXMuc3BlY2lmaWVy
cyA9IHNwZWNpZmllcnM7CisJICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTsKKwkgICAgfQor
CSAgICByZXR1cm4gSW1wb3J0RGVjbGFyYXRpb247CisJfSgpKTsKKwlleHBvcnRzLkltcG9ydERl
Y2xhcmF0aW9uID0gSW1wb3J0RGVjbGFyYXRpb247CisJdmFyIEltcG9ydERlZmF1bHRTcGVjaWZp
ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEltcG9ydERl
ZmF1bHRTcGVjaWZpZXIobG9jYWwpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5
bnRheC5JbXBvcnREZWZhdWx0U3BlY2lmaWVyOworCSAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2Fs
OworCSAgICB9CisJICAgIHJldHVybiBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOworCX0oKSk7CisJ
ZXhwb3J0cy5JbXBvcnREZWZhdWx0U3BlY2lmaWVyID0gSW1wb3J0RGVmYXVsdFNwZWNpZmllcjsK
Kwl2YXIgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KCkgeworCSAgICBmdW5jdGlvbiBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIobG9jYWwpIHsKKwkg
ICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5JbXBvcnROYW1lc3BhY2VTcGVjaWZp
ZXI7CisJICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWw7CisJICAgIH0KKwkgICAgcmV0dXJuIElt
cG9ydE5hbWVzcGFjZVNwZWNpZmllcjsKKwl9KCkpOworCWV4cG9ydHMuSW1wb3J0TmFtZXNwYWNl
U3BlY2lmaWVyID0gSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOworCXZhciBJbXBvcnRTcGVjaWZp
ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEltcG9ydFNw
ZWNpZmllcihsb2NhbCwgaW1wb3J0ZWQpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8x
LlN5bnRheC5JbXBvcnRTcGVjaWZpZXI7CisJICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWw7CisJ
ICAgICAgICB0aGlzLmltcG9ydGVkID0gaW1wb3J0ZWQ7CisJICAgIH0KKwkgICAgcmV0dXJuIElt
cG9ydFNwZWNpZmllcjsKKwl9KCkpOworCWV4cG9ydHMuSW1wb3J0U3BlY2lmaWVyID0gSW1wb3J0
U3BlY2lmaWVyOworCXZhciBMYWJlbGVkU3RhdGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKCkgeworCSAgICBmdW5jdGlvbiBMYWJlbGVkU3RhdGVtZW50KGxhYmVsLCBib2R5KSB7CisJ
ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguTGFiZWxlZFN0YXRlbWVudDsKKwkg
ICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKKwkgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CisJ
ICAgIH0KKwkgICAgcmV0dXJuIExhYmVsZWRTdGF0ZW1lbnQ7CisJfSgpKTsKKwlleHBvcnRzLkxh
YmVsZWRTdGF0ZW1lbnQgPSBMYWJlbGVkU3RhdGVtZW50OworCXZhciBMaXRlcmFsID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBMaXRlcmFsKHZhbHVlLCByYXcp
IHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5MaXRlcmFsOworCSAgICAg
ICAgdGhpcy52YWx1ZSA9IHZhbHVlOworCSAgICAgICAgdGhpcy5yYXcgPSByYXc7CisJICAgIH0K
KwkgICAgcmV0dXJuIExpdGVyYWw7CisJfSgpKTsKKwlleHBvcnRzLkxpdGVyYWwgPSBMaXRlcmFs
OworCXZhciBNZXRhUHJvcGVydHkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAg
IGZ1bmN0aW9uIE1ldGFQcm9wZXJ0eShtZXRhLCBwcm9wZXJ0eSkgeworCSAgICAgICAgdGhpcy50
eXBlID0gc3ludGF4XzEuU3ludGF4Lk1ldGFQcm9wZXJ0eTsKKwkgICAgICAgIHRoaXMubWV0YSA9
IG1ldGE7CisJICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7CisJICAgIH0KKwkgICAg
cmV0dXJuIE1ldGFQcm9wZXJ0eTsKKwl9KCkpOworCWV4cG9ydHMuTWV0YVByb3BlcnR5ID0gTWV0
YVByb3BlcnR5OworCXZhciBNZXRob2REZWZpbml0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKCkgeworCSAgICBmdW5jdGlvbiBNZXRob2REZWZpbml0aW9uKGtleSwgY29tcHV0ZWQsIHZh
bHVlLCBraW5kLCBpc1N0YXRpYykgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3lu
dGF4Lk1ldGhvZERlZmluaXRpb247CisJICAgICAgICB0aGlzLmtleSA9IGtleTsKKwkgICAgICAg
IHRoaXMuY29tcHV0ZWQgPSBjb21wdXRlZDsKKwkgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsK
KwkgICAgICAgIHRoaXMua2luZCA9IGtpbmQ7CisJICAgICAgICB0aGlzLnN0YXRpYyA9IGlzU3Rh
dGljOworCSAgICB9CisJICAgIHJldHVybiBNZXRob2REZWZpbml0aW9uOworCX0oKSk7CisJZXhw
b3J0cy5NZXRob2REZWZpbml0aW9uID0gTWV0aG9kRGVmaW5pdGlvbjsKKwl2YXIgTW9kdWxlID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBNb2R1bGUoYm9keSkg
eworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlByb2dyYW07CisJICAgICAg
ICB0aGlzLmJvZHkgPSBib2R5OworCSAgICAgICAgdGhpcy5zb3VyY2VUeXBlID0gJ21vZHVsZSc7
CisJICAgIH0KKwkgICAgcmV0dXJuIE1vZHVsZTsKKwl9KCkpOworCWV4cG9ydHMuTW9kdWxlID0g
TW9kdWxlOworCXZhciBOZXdFeHByZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
eworCSAgICBmdW5jdGlvbiBOZXdFeHByZXNzaW9uKGNhbGxlZSwgYXJncykgeworCSAgICAgICAg
dGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4Lk5ld0V4cHJlc3Npb247CisJICAgICAgICB0aGlz
LmNhbGxlZSA9IGNhbGxlZTsKKwkgICAgICAgIHRoaXMuYXJndW1lbnRzID0gYXJnczsKKwkgICAg
fQorCSAgICByZXR1cm4gTmV3RXhwcmVzc2lvbjsKKwl9KCkpOworCWV4cG9ydHMuTmV3RXhwcmVz
c2lvbiA9IE5ld0V4cHJlc3Npb247CisJdmFyIE9iamVjdEV4cHJlc3Npb24gPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIE9iamVjdEV4cHJlc3Npb24ocHJvcGVy
dGllcykgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4Lk9iamVjdEV4cHJl
c3Npb247CisJICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworCSAgICB9CisJ
ICAgIHJldHVybiBPYmplY3RFeHByZXNzaW9uOworCX0oKSk7CisJZXhwb3J0cy5PYmplY3RFeHBy
ZXNzaW9uID0gT2JqZWN0RXhwcmVzc2lvbjsKKwl2YXIgT2JqZWN0UGF0dGVybiA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gT2JqZWN0UGF0dGVybihwcm9wZXJ0
aWVzKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguT2JqZWN0UGF0dGVy
bjsKKwkgICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7CisJICAgIH0KKwkgICAg
cmV0dXJuIE9iamVjdFBhdHRlcm47CisJfSgpKTsKKwlleHBvcnRzLk9iamVjdFBhdHRlcm4gPSBP
YmplY3RQYXR0ZXJuOworCXZhciBQcm9wZXJ0eSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgp
IHsKKwkgICAgZnVuY3Rpb24gUHJvcGVydHkoa2luZCwga2V5LCBjb21wdXRlZCwgdmFsdWUsIG1l
dGhvZCwgc2hvcnRoYW5kKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXgu
UHJvcGVydHk7CisJICAgICAgICB0aGlzLmtleSA9IGtleTsKKwkgICAgICAgIHRoaXMuY29tcHV0
ZWQgPSBjb21wdXRlZDsKKwkgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKwkgICAgICAgIHRo
aXMua2luZCA9IGtpbmQ7CisJICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDsKKwkgICAgICAg
IHRoaXMuc2hvcnRoYW5kID0gc2hvcnRoYW5kOworCSAgICB9CisJICAgIHJldHVybiBQcm9wZXJ0
eTsKKwl9KCkpOworCWV4cG9ydHMuUHJvcGVydHkgPSBQcm9wZXJ0eTsKKwl2YXIgUmVnZXhMaXRl
cmFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBSZWdleExp
dGVyYWwodmFsdWUsIHJhdywgcGF0dGVybiwgZmxhZ3MpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9
IHN5bnRheF8xLlN5bnRheC5MaXRlcmFsOworCSAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwor
CSAgICAgICAgdGhpcy5yYXcgPSByYXc7CisJICAgICAgICB0aGlzLnJlZ2V4ID0geyBwYXR0ZXJu
OiBwYXR0ZXJuLCBmbGFnczogZmxhZ3MgfTsKKwkgICAgfQorCSAgICByZXR1cm4gUmVnZXhMaXRl
cmFsOworCX0oKSk7CisJZXhwb3J0cy5SZWdleExpdGVyYWwgPSBSZWdleExpdGVyYWw7CisJdmFy
IFJlc3RFbGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlv
biBSZXN0RWxlbWVudChhcmd1bWVudCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEu
U3ludGF4LlJlc3RFbGVtZW50OworCSAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50Owor
CSAgICB9CisJICAgIHJldHVybiBSZXN0RWxlbWVudDsKKwl9KCkpOworCWV4cG9ydHMuUmVzdEVs
ZW1lbnQgPSBSZXN0RWxlbWVudDsKKwl2YXIgUmV0dXJuU3RhdGVtZW50ID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQp
IHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5SZXR1cm5TdGF0ZW1lbnQ7
CisJICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7CisJICAgIH0KKwkgICAgcmV0dXJu
IFJldHVyblN0YXRlbWVudDsKKwl9KCkpOworCWV4cG9ydHMuUmV0dXJuU3RhdGVtZW50ID0gUmV0
dXJuU3RhdGVtZW50OworCXZhciBTY3JpcHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
CisJICAgIGZ1bmN0aW9uIFNjcmlwdChib2R5KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50
YXhfMS5TeW50YXguUHJvZ3JhbTsKKwkgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CisJICAgICAg
ICB0aGlzLnNvdXJjZVR5cGUgPSAnc2NyaXB0JzsKKwkgICAgfQorCSAgICByZXR1cm4gU2NyaXB0
OworCX0oKSk7CisJZXhwb3J0cy5TY3JpcHQgPSBTY3JpcHQ7CisJdmFyIFNlcXVlbmNlRXhwcmVz
c2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gU2VxdWVu
Y2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhf
MS5TeW50YXguU2VxdWVuY2VFeHByZXNzaW9uOworCSAgICAgICAgdGhpcy5leHByZXNzaW9ucyA9
IGV4cHJlc3Npb25zOworCSAgICB9CisJICAgIHJldHVybiBTZXF1ZW5jZUV4cHJlc3Npb247CisJ
fSgpKTsKKwlleHBvcnRzLlNlcXVlbmNlRXhwcmVzc2lvbiA9IFNlcXVlbmNlRXhwcmVzc2lvbjsK
Kwl2YXIgU3ByZWFkRWxlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAg
ZnVuY3Rpb24gU3ByZWFkRWxlbWVudChhcmd1bWVudCkgeworCSAgICAgICAgdGhpcy50eXBlID0g
c3ludGF4XzEuU3ludGF4LlNwcmVhZEVsZW1lbnQ7CisJICAgICAgICB0aGlzLmFyZ3VtZW50ID0g
YXJndW1lbnQ7CisJICAgIH0KKwkgICAgcmV0dXJuIFNwcmVhZEVsZW1lbnQ7CisJfSgpKTsKKwll
eHBvcnRzLlNwcmVhZEVsZW1lbnQgPSBTcHJlYWRFbGVtZW50OworCXZhciBTdGF0aWNNZW1iZXJF
eHByZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBT
dGF0aWNNZW1iZXJFeHByZXNzaW9uKG9iamVjdCwgcHJvcGVydHkpIHsKKwkgICAgICAgIHRoaXMu
dHlwZSA9IHN5bnRheF8xLlN5bnRheC5NZW1iZXJFeHByZXNzaW9uOworCSAgICAgICAgdGhpcy5j
b21wdXRlZCA9IGZhbHNlOworCSAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7CisJICAgICAg
ICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7CisJICAgIH0KKwkgICAgcmV0dXJuIFN0YXRpY01l
bWJlckV4cHJlc3Npb247CisJfSgpKTsKKwlleHBvcnRzLlN0YXRpY01lbWJlckV4cHJlc3Npb24g
PSBTdGF0aWNNZW1iZXJFeHByZXNzaW9uOworCXZhciBTdXBlciA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gU3VwZXIoKSB7CisJICAgICAgICB0aGlzLnR5cGUg
PSBzeW50YXhfMS5TeW50YXguU3VwZXI7CisJICAgIH0KKwkgICAgcmV0dXJuIFN1cGVyOworCX0o
KSk7CisJZXhwb3J0cy5TdXBlciA9IFN1cGVyOworCXZhciBTd2l0Y2hDYXNlID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBTd2l0Y2hDYXNlKHRlc3QsIGNvbnNl
cXVlbnQpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Td2l0Y2hDYXNl
OworCSAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKKwkgICAgICAgIHRoaXMuY29uc2VxdWVudCA9
IGNvbnNlcXVlbnQ7CisJICAgIH0KKwkgICAgcmV0dXJuIFN3aXRjaENhc2U7CisJfSgpKTsKKwll
eHBvcnRzLlN3aXRjaENhc2UgPSBTd2l0Y2hDYXNlOworCXZhciBTd2l0Y2hTdGF0ZW1lbnQgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFN3aXRjaFN0YXRlbWVu
dChkaXNjcmltaW5hbnQsIGNhc2VzKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5T
eW50YXguU3dpdGNoU3RhdGVtZW50OworCSAgICAgICAgdGhpcy5kaXNjcmltaW5hbnQgPSBkaXNj
cmltaW5hbnQ7CisJICAgICAgICB0aGlzLmNhc2VzID0gY2FzZXM7CisJICAgIH0KKwkgICAgcmV0
dXJuIFN3aXRjaFN0YXRlbWVudDsKKwl9KCkpOworCWV4cG9ydHMuU3dpdGNoU3RhdGVtZW50ID0g
U3dpdGNoU3RhdGVtZW50OworCXZhciBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24gPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFRhZ2dlZFRlbXBsYXRlRXhwcmVz
c2lvbih0YWcsIHF1YXNpKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXgu
VGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOworCSAgICAgICAgdGhpcy50YWcgPSB0YWc7CisJICAg
ICAgICB0aGlzLnF1YXNpID0gcXVhc2k7CisJICAgIH0KKwkgICAgcmV0dXJuIFRhZ2dlZFRlbXBs
YXRlRXhwcmVzc2lvbjsKKwl9KCkpOworCWV4cG9ydHMuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9u
ID0gVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOworCXZhciBUZW1wbGF0ZUVsZW1lbnQgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFRlbXBsYXRlRWxlbWVudCh2
YWx1ZSwgdGFpbCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlRlbXBs
YXRlRWxlbWVudDsKKwkgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKwkgICAgICAgIHRoaXMu
dGFpbCA9IHRhaWw7CisJICAgIH0KKwkgICAgcmV0dXJuIFRlbXBsYXRlRWxlbWVudDsKKwl9KCkp
OworCWV4cG9ydHMuVGVtcGxhdGVFbGVtZW50ID0gVGVtcGxhdGVFbGVtZW50OworCXZhciBUZW1w
bGF0ZUxpdGVyYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9u
IFRlbXBsYXRlTGl0ZXJhbChxdWFzaXMsIGV4cHJlc3Npb25zKSB7CisJICAgICAgICB0aGlzLnR5
cGUgPSBzeW50YXhfMS5TeW50YXguVGVtcGxhdGVMaXRlcmFsOworCSAgICAgICAgdGhpcy5xdWFz
aXMgPSBxdWFzaXM7CisJICAgICAgICB0aGlzLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnM7CisJ
ICAgIH0KKwkgICAgcmV0dXJuIFRlbXBsYXRlTGl0ZXJhbDsKKwl9KCkpOworCWV4cG9ydHMuVGVt
cGxhdGVMaXRlcmFsID0gVGVtcGxhdGVMaXRlcmFsOworCXZhciBUaGlzRXhwcmVzc2lvbiA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gVGhpc0V4cHJlc3Npb24o
KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguVGhpc0V4cHJlc3Npb247
CisJICAgIH0KKwkgICAgcmV0dXJuIFRoaXNFeHByZXNzaW9uOworCX0oKSk7CisJZXhwb3J0cy5U
aGlzRXhwcmVzc2lvbiA9IFRoaXNFeHByZXNzaW9uOworCXZhciBUaHJvd1N0YXRlbWVudCA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gVGhyb3dTdGF0ZW1lbnQo
YXJndW1lbnQpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5UaHJvd1N0
YXRlbWVudDsKKwkgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKKwkgICAgfQorCSAg
ICByZXR1cm4gVGhyb3dTdGF0ZW1lbnQ7CisJfSgpKTsKKwlleHBvcnRzLlRocm93U3RhdGVtZW50
ID0gVGhyb3dTdGF0ZW1lbnQ7CisJdmFyIFRyeVN0YXRlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gVHJ5U3RhdGVtZW50KGJsb2NrLCBoYW5kbGVyLCBm
aW5hbGl6ZXIpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5UcnlTdGF0
ZW1lbnQ7CisJICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2s7CisJICAgICAgICB0aGlzLmhhbmRs
ZXIgPSBoYW5kbGVyOworCSAgICAgICAgdGhpcy5maW5hbGl6ZXIgPSBmaW5hbGl6ZXI7CisJICAg
IH0KKwkgICAgcmV0dXJuIFRyeVN0YXRlbWVudDsKKwl9KCkpOworCWV4cG9ydHMuVHJ5U3RhdGVt
ZW50ID0gVHJ5U3RhdGVtZW50OworCXZhciBVbmFyeUV4cHJlc3Npb24gPSAvKiogQGNsYXNzICov
IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFVuYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwg
YXJndW1lbnQpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5VbmFyeUV4
cHJlc3Npb247CisJICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7CisJICAgICAgICB0
aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7CisJICAgICAgICB0aGlzLnByZWZpeCA9IHRydWU7CisJ
ICAgIH0KKwkgICAgcmV0dXJuIFVuYXJ5RXhwcmVzc2lvbjsKKwl9KCkpOworCWV4cG9ydHMuVW5h
cnlFeHByZXNzaW9uID0gVW5hcnlFeHByZXNzaW9uOworCXZhciBVcGRhdGVFeHByZXNzaW9uID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBVcGRhdGVFeHByZXNz
aW9uKG9wZXJhdG9yLCBhcmd1bWVudCwgcHJlZml4KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBz
eW50YXhfMS5TeW50YXguVXBkYXRlRXhwcmVzc2lvbjsKKwkgICAgICAgIHRoaXMub3BlcmF0b3Ig
PSBvcGVyYXRvcjsKKwkgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKKwkgICAgICAg
IHRoaXMucHJlZml4ID0gcHJlZml4OworCSAgICB9CisJICAgIHJldHVybiBVcGRhdGVFeHByZXNz
aW9uOworCX0oKSk7CisJZXhwb3J0cy5VcGRhdGVFeHByZXNzaW9uID0gVXBkYXRlRXhwcmVzc2lv
bjsKKwl2YXIgVmFyaWFibGVEZWNsYXJhdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgp
IHsKKwkgICAgZnVuY3Rpb24gVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQp
IHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5WYXJpYWJsZURlY2xhcmF0
aW9uOworCSAgICAgICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7CisJICAgICAg
ICB0aGlzLmtpbmQgPSBraW5kOworCSAgICB9CisJICAgIHJldHVybiBWYXJpYWJsZURlY2xhcmF0
aW9uOworCX0oKSk7CisJZXhwb3J0cy5WYXJpYWJsZURlY2xhcmF0aW9uID0gVmFyaWFibGVEZWNs
YXJhdGlvbjsKKwl2YXIgVmFyaWFibGVEZWNsYXJhdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKCkgeworCSAgICBmdW5jdGlvbiBWYXJpYWJsZURlY2xhcmF0b3IoaWQsIGluaXQpIHsKKwkg
ICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5WYXJpYWJsZURlY2xhcmF0b3I7CisJ
ICAgICAgICB0aGlzLmlkID0gaWQ7CisJICAgICAgICB0aGlzLmluaXQgPSBpbml0OworCSAgICB9
CisJICAgIHJldHVybiBWYXJpYWJsZURlY2xhcmF0b3I7CisJfSgpKTsKKwlleHBvcnRzLlZhcmlh
YmxlRGVjbGFyYXRvciA9IFZhcmlhYmxlRGVjbGFyYXRvcjsKKwl2YXIgV2hpbGVTdGF0ZW1lbnQg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFdoaWxlU3RhdGVt
ZW50KHRlc3QsIGJvZHkpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5X
aGlsZVN0YXRlbWVudDsKKwkgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7CisJICAgICAgICB0aGlz
LmJvZHkgPSBib2R5OworCSAgICB9CisJICAgIHJldHVybiBXaGlsZVN0YXRlbWVudDsKKwl9KCkp
OworCWV4cG9ydHMuV2hpbGVTdGF0ZW1lbnQgPSBXaGlsZVN0YXRlbWVudDsKKwl2YXIgV2l0aFN0
YXRlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gV2l0
aFN0YXRlbWVudChvYmplY3QsIGJvZHkpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8x
LlN5bnRheC5XaXRoU3RhdGVtZW50OworCSAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7CisJ
ICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworCSAgICB9CisJICAgIHJldHVybiBXaXRoU3RhdGVt
ZW50OworCX0oKSk7CisJZXhwb3J0cy5XaXRoU3RhdGVtZW50ID0gV2l0aFN0YXRlbWVudDsKKwl2
YXIgWWllbGRFeHByZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBm
dW5jdGlvbiBZaWVsZEV4cHJlc3Npb24oYXJndW1lbnQsIGRlbGVnYXRlKSB7CisJICAgICAgICB0
aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguWWllbGRFeHByZXNzaW9uOworCSAgICAgICAgdGhp
cy5hcmd1bWVudCA9IGFyZ3VtZW50OworCSAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRl
OworCSAgICB9CisJICAgIHJldHVybiBZaWVsZEV4cHJlc3Npb247CisJfSgpKTsKKwlleHBvcnRz
LllpZWxkRXhwcmVzc2lvbiA9IFlpZWxkRXhwcmVzc2lvbjsKIAogCiAvKioqLyB9LAogLyogOCAq
LwogLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CiAKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgdmFyIGFzc2VydF8xID0gX193ZWJwYWNrX3JlcXVp
cmVfXyg5KTsKLSAgICB2YXIgZXJyb3JfaGFuZGxlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygx
MCk7Ci0gICAgdmFyIG1lc3NhZ2VzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTsKLSAgICB2
YXIgTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7Ci0gICAgdmFyIHNjYW5uZXJfMSA9IF9f
d2VicGFja19yZXF1aXJlX18oMTIpOwotICAgIHZhciBzeW50YXhfMSA9IF9fd2VicGFja19yZXF1
aXJlX18oMik7Ci0gICAgdmFyIHRva2VuXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKLSAg
ICB2YXIgQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciA9ICdBcnJvd1BhcmFtZXRlclBsYWNlSG9s
ZGVyJzsKLSAgICB2YXIgUGFyc2VyID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24g
UGFyc2VyKGNvZGUsIG9wdGlvbnMsIGRlbGVnYXRlKSB7Ci0gICAgICAgICAgICBpZiAob3B0aW9u
cyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfQotICAgICAgICAgICAgdGhpcy5jb25maWcg
PSB7Ci0gICAgICAgICAgICAgICAgcmFuZ2U6ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gJ2Jv
b2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlLAotICAgICAgICAgICAgICAgIGxvYzogKHR5cGVvZiBv
cHRpb25zLmxvYyA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLmxvYywKLSAgICAgICAgICAgICAg
ICBzb3VyY2U6IG51bGwsCi0gICAgICAgICAgICAgICAgdG9rZW5zOiAodHlwZW9mIG9wdGlvbnMu
dG9rZW5zID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMudG9rZW5zLAotICAgICAgICAgICAgICAg
IGNvbW1lbnQ6ICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAnYm9vbGVhbicpICYmIG9wdGlv
bnMuY29tbWVudCwKLSAgICAgICAgICAgICAgICB0b2xlcmFudDogKHR5cGVvZiBvcHRpb25zLnRv
bGVyYW50ID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMudG9sZXJhbnQKLSAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICBpZiAodGhpcy5jb25maWcubG9jICYmIG9wdGlvbnMuc291cmNlICYmIG9w
dGlvbnMuc291cmNlICE9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuc291
cmNlID0gU3RyaW5nKG9wdGlvbnMuc291cmNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLSAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVy
ID0gbmV3IGVycm9yX2hhbmRsZXJfMS5FcnJvckhhbmRsZXIoKTsKLSAgICAgICAgICAgIHRoaXMu
ZXJyb3JIYW5kbGVyLnRvbGVyYW50ID0gdGhpcy5jb25maWcudG9sZXJhbnQ7Ci0gICAgICAgICAg
ICB0aGlzLnNjYW5uZXIgPSBuZXcgc2Nhbm5lcl8xLlNjYW5uZXIoY29kZSwgdGhpcy5lcnJvckhh
bmRsZXIpOwotICAgICAgICAgICAgdGhpcy5zY2FubmVyLnRyYWNrQ29tbWVudCA9IHRoaXMuY29u
ZmlnLmNvbW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLm9wZXJhdG9yUHJlY2VkZW5jZSA9IHsKLSAg
ICAgICAgICAgICAgICAnKSc6IDAsCi0gICAgICAgICAgICAgICAgJzsnOiAwLAotICAgICAgICAg
ICAgICAgICcsJzogMCwKLSAgICAgICAgICAgICAgICAnPSc6IDAsCi0gICAgICAgICAgICAgICAg
J10nOiAwLAotICAgICAgICAgICAgICAgICd8fCc6IDEsCi0gICAgICAgICAgICAgICAgJyYmJzog
MiwKLSAgICAgICAgICAgICAgICAnfCc6IDMsCi0gICAgICAgICAgICAgICAgJ14nOiA0LAotICAg
ICAgICAgICAgICAgICcmJzogNSwKLSAgICAgICAgICAgICAgICAnPT0nOiA2LAotICAgICAgICAg
ICAgICAgICchPSc6IDYsCi0gICAgICAgICAgICAgICAgJz09PSc6IDYsCi0gICAgICAgICAgICAg
ICAgJyE9PSc6IDYsCi0gICAgICAgICAgICAgICAgJzwnOiA3LAotICAgICAgICAgICAgICAgICc+
JzogNywKLSAgICAgICAgICAgICAgICAnPD0nOiA3LAotICAgICAgICAgICAgICAgICc+PSc6IDcs
Ci0gICAgICAgICAgICAgICAgJzw8JzogOCwKLSAgICAgICAgICAgICAgICAnPj4nOiA4LAotICAg
ICAgICAgICAgICAgICc+Pj4nOiA4LAotICAgICAgICAgICAgICAgICcrJzogOSwKLSAgICAgICAg
ICAgICAgICAnLSc6IDksCi0gICAgICAgICAgICAgICAgJyonOiAxMSwKLSAgICAgICAgICAgICAg
ICAnLyc6IDExLAotICAgICAgICAgICAgICAgICclJzogMTEKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICB0aGlzLmxvb2thaGVhZCA9IHsKLSAgICAgICAgICAgICAgICB0eXBlOiAyIC8qIEVP
RiAqLywKLSAgICAgICAgICAgICAgICB2YWx1ZTogJycsCi0gICAgICAgICAgICAgICAgbGluZU51
bWJlcjogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgbGluZVN0YXJ0
OiAwLAotICAgICAgICAgICAgICAgIHN0YXJ0OiAwLAotICAgICAgICAgICAgICAgIGVuZDogMAot
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHRoaXMuaGFzTGluZVRlcm1pbmF0b3IgPSBmYWxz
ZTsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHsKLSAgICAgICAgICAgICAgICBpc01vZHVs
ZTogZmFsc2UsCi0gICAgICAgICAgICAgICAgYXdhaXQ6IGZhbHNlLAotICAgICAgICAgICAgICAg
IGFsbG93SW46IHRydWUsCi0gICAgICAgICAgICAgICAgYWxsb3dTdHJpY3REaXJlY3RpdmU6IHRy
dWUsCi0gICAgICAgICAgICAgICAgYWxsb3dZaWVsZDogdHJ1ZSwKLSAgICAgICAgICAgICAgICBm
aXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I6IG51bGwsCi0gICAgICAgICAgICAgICAgaXNB
c3NpZ25tZW50VGFyZ2V0OiBmYWxzZSwKLSAgICAgICAgICAgICAgICBpc0JpbmRpbmdFbGVtZW50
OiBmYWxzZSwKLSAgICAgICAgICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsCi0gICAgICAg
ICAgICAgICAgaW5JdGVyYXRpb246IGZhbHNlLAotICAgICAgICAgICAgICAgIGluU3dpdGNoOiBm
YWxzZSwKLSAgICAgICAgICAgICAgICBsYWJlbFNldDoge30sCi0gICAgICAgICAgICAgICAgc3Ry
aWN0OiBmYWxzZQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHRoaXMudG9rZW5zID0gW107
Ci0gICAgICAgICAgICB0aGlzLnN0YXJ0TWFya2VyID0gewotICAgICAgICAgICAgICAgIGluZGV4
OiAwLAotICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLAotICAg
ICAgICAgICAgICAgIGNvbHVtbjogMAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHRoaXMu
bGFzdE1hcmtlciA9IHsKLSAgICAgICAgICAgICAgICBpbmRleDogMCwKLSAgICAgICAgICAgICAg
ICBsaW5lOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBjb2x1bW46
IDAKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAg
ICAgICAgdGhpcy5sYXN0TWFya2VyID0gewotICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLnNj
YW5uZXIuaW5kZXgsCi0gICAgICAgICAgICAgICAgbGluZTogdGhpcy5zY2FubmVyLmxpbmVOdW1i
ZXIsCi0gICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLnNjYW5uZXIuaW5kZXggLSB0aGlzLnNj
YW5uZXIubGluZVN0YXJ0Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgICAgIFBhcnNl
ci5wcm90b3R5cGUudGhyb3dFcnJvciA9IGZ1bmN0aW9uIChtZXNzYWdlRm9ybWF0KSB7Ci0gICAg
ICAgICAgICB2YXIgdmFsdWVzID0gW107Ci0gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9p
IDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewotICAgICAgICAgICAgICAgIHZhbHVlc1tfaSAt
IDFdID0gYXJndW1lbnRzW19pXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBhcmdz
ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKLSAgICAgICAgICAg
IHZhciBtc2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxhY2UoLyUoXGQpL2csIGZ1bmN0aW9uICh3aG9s
ZSwgaWR4KSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGlkeCA8IGFyZ3MubGVu
Z3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZScpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBhcmdzW2lkeF07Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHZhciBp
bmRleCA9IHRoaXMubGFzdE1hcmtlci5pbmRleDsKLSAgICAgICAgICAgIHZhciBsaW5lID0gdGhp
cy5sYXN0TWFya2VyLmxpbmU7Ci0gICAgICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5sYXN0TWFy
a2VyLmNvbHVtbiArIDE7Ci0gICAgICAgICAgICB0aHJvdyB0aGlzLmVycm9ySGFuZGxlci5jcmVh
dGVFcnJvcihpbmRleCwgbGluZSwgY29sdW1uLCBtc2cpOwotICAgICAgICB9OwotICAgICAgICBQ
YXJzZXIucHJvdG90eXBlLnRvbGVyYXRlRXJyb3IgPSBmdW5jdGlvbiAobWVzc2FnZUZvcm1hdCkg
ewotICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwotICAgICAgICAgICAgZm9yICh2YXIgX2kg
PSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKLSAgICAgICAgICAgICAgICB2YWx1
ZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2
YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Ci0gICAg
ICAgICAgICB2YXIgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKC8lKFxkKS9nLCBmdW5jdGlv
biAod2hvbGUsIGlkeCkgewotICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChpZHggPCBh
cmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UnKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gYXJnc1tpZHhdOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB2YXIgaW5kZXggPSB0aGlzLmxhc3RNYXJrZXIuaW5kZXg7Ci0gICAgICAgICAgICB2YXIgbGlu
ZSA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOwotICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRo
aXMubGFzdE1hcmtlci5jb2x1bW4gKyAxOwotICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIu
dG9sZXJhdGVFcnJvcihpbmRleCwgbGluZSwgY29sdW1uLCBtc2cpOwotICAgICAgICB9OwotICAg
ICAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiB0aGUgdG9rZW4uCi0gICAgICAg
IFBhcnNlci5wcm90b3R5cGUudW5leHBlY3RlZFRva2VuRXJyb3IgPSBmdW5jdGlvbiAodG9rZW4s
IG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHZhciBtc2cgPSBtZXNzYWdlIHx8IG1lc3NhZ2VzXzEu
TWVzc2FnZXMuVW5leHBlY3RlZFRva2VuOwotICAgICAgICAgICAgdmFyIHZhbHVlOwotICAgICAg
ICAgICAgaWYgKHRva2VuKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtZXNzYWdlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1zZyA9ICh0b2tlbi50eXBlID09PSAyIC8qIEVPRiAqLykgPyBtZXNz
YWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRFT1MgOgotICAgICAgICAgICAgICAgICAgICAgICAg
KHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLykgPyBtZXNzYWdlc18xLk1lc3NhZ2Vz
LlVuZXhwZWN0ZWRJZGVudGlmaWVyIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9r
ZW4udHlwZSA9PT0gNiAvKiBOdW1lcmljTGl0ZXJhbCAqLykgPyBtZXNzYWdlc18xLk1lc3NhZ2Vz
LlVuZXhwZWN0ZWROdW1iZXIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9r
ZW4udHlwZSA9PT0gOCAvKiBTdHJpbmdMaXRlcmFsICovKSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMu
VW5leHBlY3RlZFN0cmluZyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
dG9rZW4udHlwZSA9PT0gMTAgLyogVGVtcGxhdGUgKi8pID8gbWVzc2FnZXNfMS5NZXNzYWdlcy5V
bmV4cGVjdGVkVGVtcGxhdGUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuOwotICAgICAgICAgICAgICAg
ICAgICBpZiAodG9rZW4udHlwZSA9PT0gNCAvKiBLZXl3b3JkICovKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzRnV0dXJlUmVzZXJ2ZWRXb3JkKHRva2VuLnZh
bHVlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IG1lc3NhZ2VzXzEuTWVz
c2FnZXMuVW5leHBlY3RlZFJlc2VydmVkOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiB0aGlz
LnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVz
ZXJ2ZWRXb3JkOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhbHVlID0gdG9rZW4udmFs
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB2
YWx1ZSA9ICdJTExFR0FMJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1zZyA9IG1zZy5y
ZXBsYWNlKCclMCcsIHZhbHVlKTsKLSAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0eXBlb2YgdG9r
ZW4ubGluZU51bWJlciA9PT0gJ251bWJlcicpIHsKLSAgICAgICAgICAgICAgICB2YXIgaW5kZXgg
PSB0b2tlbi5zdGFydDsKLSAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHRva2VuLmxpbmVOdW1i
ZXI7Ci0gICAgICAgICAgICAgICAgdmFyIGxhc3RNYXJrZXJMaW5lU3RhcnQgPSB0aGlzLmxhc3RN
YXJrZXIuaW5kZXggLSB0aGlzLmxhc3RNYXJrZXIuY29sdW1uOwotICAgICAgICAgICAgICAgIHZh
ciBjb2x1bW4gPSB0b2tlbi5zdGFydCAtIGxhc3RNYXJrZXJMaW5lU3RhcnQgKyAxOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5jcmVhdGVFcnJvcihpbmRleCwgbGlu
ZSwgY29sdW1uLCBtc2cpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5sYXN0TWFya2VyLmluZGV4OwotICAgICAgICAg
ICAgICAgIHZhciBsaW5lID0gdGhpcy5sYXN0TWFya2VyLmxpbmU7Ci0gICAgICAgICAgICAgICAg
dmFyIGNvbHVtbiA9IHRoaXMubGFzdE1hcmtlci5jb2x1bW4gKyAxOwotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5jcmVhdGVFcnJvcihpbmRleCwgbGluZSwgY29sdW1u
LCBtc2cpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90
eXBlLnRocm93VW5leHBlY3RlZFRva2VuID0gZnVuY3Rpb24gKHRva2VuLCBtZXNzYWdlKSB7Ci0g
ICAgICAgICAgICB0aHJvdyB0aGlzLnVuZXhwZWN0ZWRUb2tlbkVycm9yKHRva2VuLCBtZXNzYWdl
KTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS50b2xlcmF0ZVVuZXhwZWN0
ZWRUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbiwgbWVzc2FnZSkgewotICAgICAgICAgICAgdGhpcy5l
cnJvckhhbmRsZXIudG9sZXJhdGUodGhpcy51bmV4cGVjdGVkVG9rZW5FcnJvcih0b2tlbiwgbWVz
c2FnZSkpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLmNvbGxlY3RDb21t
ZW50cyA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGlmICghdGhpcy5jb25maWcuY29tbWVu
dCkgewotICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHZhciBjb21tZW50
cyA9IHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTsKLSAgICAgICAgICAgICAgICBpZiAoY29t
bWVudHMubGVuZ3RoID4gMCAmJiB0aGlzLmRlbGVnYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWVudHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBlID0gY29tbWVudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgbm9kZSA9IHZvaWQgMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZS5tdWx0aUxpbmUgPyAnQmxvY2tDb21t
ZW50JyA6ICdMaW5lQ29tbWVudCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6
IHRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2UoZS5zbGljZVswXSwgZS5zbGljZVsxXSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5j
b25maWcucmFuZ2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnJhbmdlID0g
ZS5yYW5nZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0aGlzLmNvbmZpZy5sb2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLmxvYyA9IGUubG9jOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIG1ldGFkYXRhID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJ0OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGUubG9jLnN0
YXJ0LmxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogZS5sb2Mu
c3RhcnQuY29sdW1uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGUu
cmFuZ2VbMF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVuZDogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5l
OiBlLmxvYy5lbmQubGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1u
OiBlLmxvYy5lbmQuY29sdW1uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZz
ZXQ6IGUucmFuZ2VbMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShu
b2RlLCBtZXRhZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIEZyb20gaW50ZXJuYWwgcmVw
cmVzZW50YXRpb24gdG8gYW4gZXh0ZXJuYWwgc3RydWN0dXJlCi0gICAgICAgIFBhcnNlci5wcm90
b3R5cGUuZ2V0VG9rZW5SYXcgPSBmdW5jdGlvbiAodG9rZW4pIHsKLSAgICAgICAgICAgIHJldHVy
biB0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpOwotICAg
ICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLmNvbnZlcnRUb2tlbiA9IGZ1bmN0aW9u
ICh0b2tlbikgewotICAgICAgICAgICAgdmFyIHQgPSB7Ci0gICAgICAgICAgICAgICAgdHlwZTog
dG9rZW5fMS5Ub2tlbk5hbWVbdG9rZW4udHlwZV0sCi0gICAgICAgICAgICAgICAgdmFsdWU6IHRo
aXMuZ2V0VG9rZW5SYXcodG9rZW4pCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAgaWYgKHRo
aXMuY29uZmlnLnJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgdC5yYW5nZSA9IFt0b2tlbi5zdGFy
dCwgdG9rZW4uZW5kXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0aGlzLmNvbmZp
Zy5sb2MpIHsKLSAgICAgICAgICAgICAgICB0LmxvYyA9IHsKLSAgICAgICAgICAgICAgICAgICAg
c3RhcnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMuc3RhcnRNYXJrZXIu
bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zdGFydE1hcmtlci5j
b2x1bW4KLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgZW5kOiB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zY2FubmVyLmluZGV4IC0gdGhp
cy5zY2FubmVyLmxpbmVTdGFydAotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSA5IC8q
IFJlZ3VsYXJFeHByZXNzaW9uICovKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSB0
b2tlbi5wYXR0ZXJuOwotICAgICAgICAgICAgICAgIHZhciBmbGFncyA9IHRva2VuLmZsYWdzOwot
ICAgICAgICAgICAgICAgIHQucmVnZXggPSB7IHBhdHRlcm46IHBhdHRlcm4sIGZsYWdzOiBmbGFn
cyB9OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHQ7Ci0gICAgICAgIH07Ci0g
ICAgICAgIFBhcnNlci5wcm90b3R5cGUubmV4dFRva2VuID0gZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICB0aGlzLmxhc3RN
YXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7Ci0gICAgICAgICAgICB0aGlzLmxhc3RN
YXJrZXIubGluZSA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOwotICAgICAgICAgICAgdGhpcy5s
YXN0TWFya2VyLmNvbHVtbiA9IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5l
U3RhcnQ7Ci0gICAgICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50cygpOwotICAgICAgICAgICAg
aWYgKHRoaXMuc2Nhbm5lci5pbmRleCAhPT0gdGhpcy5zdGFydE1hcmtlci5pbmRleCkgewotICAg
ICAgICAgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7
Ci0gICAgICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtlci5saW5lID0gdGhpcy5zY2FubmVyLmxp
bmVOdW1iZXI7Ci0gICAgICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtlci5jb2x1bW4gPSB0aGlz
LnNjYW5uZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0OwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7Ci0gICAgICAgICAgICB0
aGlzLmhhc0xpbmVUZXJtaW5hdG9yID0gKHRva2VuLmxpbmVOdW1iZXIgIT09IG5leHQubGluZU51
bWJlcik7Ci0gICAgICAgICAgICBpZiAobmV4dCAmJiB0aGlzLmNvbnRleHQuc3RyaWN0ICYmIG5l
eHQudHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRo
aXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQobmV4dC52YWx1ZSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbmV4dC50eXBlID0gNCAvKiBLZXl3b3JkICovOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMubG9va2FoZWFkID0gbmV4dDsK
LSAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy50b2tlbnMgJiYgbmV4dC50eXBlICE9PSAyIC8q
IEVPRiAqLykgewotICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2godGhpcy5jb252ZXJ0
VG9rZW4obmV4dCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRva2VuOwot
ICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLm5leHRSZWdleFRva2VuID0gZnVu
Y3Rpb24gKCkgewotICAgICAgICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMoKTsKLSAgICAgICAg
ICAgIHZhciB0b2tlbiA9IHRoaXMuc2Nhbm5lci5zY2FuUmVnRXhwKCk7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5jb25maWcudG9rZW5zKSB7Ci0gICAgICAgICAgICAgICAgLy8gUG9wIHRoZSBwcmV2
aW91cyB0b2tlbiwgJy8nIG9yICcvPScKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFkZGVk
IGZyb20gdGhlIGxvb2thaGVhZCB0b2tlbi4KLSAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5w
b3AoKTsKLSAgICAgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHRoaXMuY29udmVydFRva2Vu
KHRva2VuKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBQcmltZSB0aGUgbmV4dCBs
b29rYWhlYWQuCi0gICAgICAgICAgICB0aGlzLmxvb2thaGVhZCA9IHRva2VuOwotICAgICAgICAg
ICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgIHJldHVybiB0b2tlbjsKLSAgICAgICAg
fTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5jcmVhdGVOb2RlID0gZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5zdGFydE1h
cmtlci5pbmRleCwKLSAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLnN0YXJ0TWFya2VyLmxpbmUs
Ci0gICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLnN0YXJ0TWFya2VyLmNvbHVtbgotICAgICAg
ICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5zdGFydE5vZGUg
PSBmdW5jdGlvbiAodG9rZW4pIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAg
ICAgaW5kZXg6IHRva2VuLnN0YXJ0LAotICAgICAgICAgICAgICAgIGxpbmU6IHRva2VuLmxpbmVO
dW1iZXIsCi0gICAgICAgICAgICAgICAgY29sdW1uOiB0b2tlbi5zdGFydCAtIHRva2VuLmxpbmVT
dGFydAotICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlw
ZS5maW5hbGl6ZSA9IGZ1bmN0aW9uIChtYXJrZXIsIG5vZGUpIHsKLSAgICAgICAgICAgIGlmICh0
aGlzLmNvbmZpZy5yYW5nZSkgewotICAgICAgICAgICAgICAgIG5vZGUucmFuZ2UgPSBbbWFya2Vy
LmluZGV4LCB0aGlzLmxhc3RNYXJrZXIuaW5kZXhdOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKHRoaXMuY29uZmlnLmxvYykgewotICAgICAgICAgICAgICAgIG5vZGUubG9jID0gewot
ICAgICAgICAgICAgICAgICAgICBzdGFydDogewotICAgICAgICAgICAgICAgICAgICAgICAgbGlu
ZTogbWFya2VyLmxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IG1hcmtlci5j
b2x1bW4sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIGVuZDog
ewotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5sYXN0TWFya2VyLmxpbmUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMubGFzdE1hcmtlci5jb2x1bW4KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAg
aWYgKHRoaXMuY29uZmlnLnNvdXJjZSkgewotICAgICAgICAgICAgICAgICAgICBub2RlLmxvYy5z
b3VyY2UgPSB0aGlzLmNvbmZpZy5zb3VyY2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKHRoaXMuZGVsZWdhdGUpIHsKLSAgICAgICAgICAgICAgICB2
YXIgbWV0YWRhdGEgPSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBsaW5lOiBtYXJrZXIubGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbHVtbjogbWFya2VyLmNvbHVtbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDog
bWFya2VyLmluZGV4Ci0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAg
IGVuZDogewotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5sYXN0TWFya2VyLmxp
bmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMubGFzdE1hcmtlci5jb2x1
bW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMubGFzdE1hcmtlci5pbmRl
eAotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
ICAgICB0aGlzLmRlbGVnYXRlKG5vZGUsIG1ldGFkYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiBub2RlOwotICAgICAgICB9OwotICAgICAgICAvLyBFeHBlY3QgdGhlIG5l
eHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgotICAgICAgICAvLyBJ
ZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KLSAgICAgICAgUGFyc2VyLnByb3Rv
dHlwZS5leHBlY3QgPSBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9
IHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gNyAvKiBQ
dW5jdHVhdG9yICovIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkgewotICAgICAgICAgICAgICAg
IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOwotICAgICAgICAgICAgfQotICAgICAg
ICB9OwotICAgICAgICAvLyBRdWlldGx5IGV4cGVjdCBhIGNvbW1hIHdoZW4gaW4gdG9sZXJhbnQg
bW9kZSwgb3RoZXJ3aXNlIGRlbGVnYXRlcyB0byBleHBlY3QoKS4KLSAgICAgICAgUGFyc2VyLnBy
b3RvdHlwZS5leHBlY3RDb21tYVNlcGFyYXRvciA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAg
IGlmICh0aGlzLmNvbmZpZy50b2xlcmFudCkgewotICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9
IHRoaXMubG9va2FoZWFkOwotICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSA3IC8q
IFB1bmN0dWF0b3IgKi8gJiYgdG9rZW4udmFsdWUgPT09ICcsJykgewotICAgICAgICAgICAgICAg
ICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBlbHNlIGlmICh0b2tlbi50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYgdG9rZW4udmFs
dWUgPT09ICc7JykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAg
ICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICAvLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4g
dG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBrZXl3b3JkLgotICAgICAgICAvLyBJZiBub3QsIGFuIGV4
Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5leHBlY3RL
ZXl3b3JkID0gZnVuY3Rpb24gKGtleXdvcmQpIHsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRo
aXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gNCAvKiBLZXl3
b3JkICovIHx8IHRva2VuLnZhbHVlICE9PSBrZXl3b3JkKSB7Ci0gICAgICAgICAgICAgICAgdGhp
cy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07
Ci0gICAgICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNw
ZWNpZmllZCBwdW5jdHVhdG9yLgotICAgICAgICBQYXJzZXIucHJvdG90eXBlLm1hdGNoID0gZnVu
Y3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5sb29rYWhlYWQudHlwZSA9
PT0gNyAvKiBQdW5jdHVhdG9yICovICYmIHRoaXMubG9va2FoZWFkLnZhbHVlID09PSB2YWx1ZTsK
LSAgICAgICAgfTsKLSAgICAgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0
Y2hlcyB0aGUgc3BlY2lmaWVkIGtleXdvcmQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5tYXRj
aEtleXdvcmQgPSBmdW5jdGlvbiAoa2V5d29yZCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
bG9va2FoZWFkLnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyAmJiB0aGlzLmxvb2thaGVhZC52YWx1
ZSA9PT0ga2V5d29yZDsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhl
IG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNvbnRleHR1YWwga2V5d29yZAotICAg
ICAgICAvLyAod2hlcmUgYW4gaWRlbnRpZmllciBpcyBzb21ldGltZXMgYSBrZXl3b3JkIGRlcGVu
ZGluZyBvbiB0aGUgY29udGV4dCkKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5tYXRjaENvbnRl
eHR1YWxLZXl3b3JkID0gZnVuY3Rpb24gKGtleXdvcmQpIHsKLSAgICAgICAgICAgIHJldHVybiB0
aGlzLmxvb2thaGVhZC50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8gJiYgdGhpcy5sb29rYWhl
YWQudmFsdWUgPT09IGtleXdvcmQ7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIFJldHVybiB0cnVl
IGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IKLSAgICAgICAgUGFy
c2VyLnByb3RvdHlwZS5tYXRjaEFzc2lnbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGlm
ICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSA3IC8qIFB1bmN0dWF0b3IgKi8pIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgb3Ag
PSB0aGlzLmxvb2thaGVhZC52YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiBvcCA9PT0gJz0nIHx8
Ci0gICAgICAgICAgICAgICAgb3AgPT09ICcqPScgfHwKLSAgICAgICAgICAgICAgICBvcCA9PT0g
JyoqPScgfHwKLSAgICAgICAgICAgICAgICBvcCA9PT0gJy89JyB8fAotICAgICAgICAgICAgICAg
IG9wID09PSAnJT0nIHx8Ci0gICAgICAgICAgICAgICAgb3AgPT09ICcrPScgfHwKLSAgICAgICAg
ICAgICAgICBvcCA9PT0gJy09JyB8fAotICAgICAgICAgICAgICAgIG9wID09PSAnPDw9JyB8fAot
ICAgICAgICAgICAgICAgIG9wID09PSAnPj49JyB8fAotICAgICAgICAgICAgICAgIG9wID09PSAn
Pj4+PScgfHwKLSAgICAgICAgICAgICAgICBvcCA9PT0gJyY9JyB8fAotICAgICAgICAgICAgICAg
IG9wID09PSAnXj0nIHx8Ci0gICAgICAgICAgICAgICAgb3AgPT09ICd8PSc7Ci0gICAgICAgIH07
Ci0gICAgICAgIC8vIENvdmVyIGdyYW1tYXIgc3VwcG9ydC4KLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gV2hlbiBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb24gcG9zaXRpb24gc3RhcnRzIHdpdGggYW4g
bGVmdCBwYXJlbnRoZXNpcywgdGhlIGRldGVybWluYXRpb24gb2YgdGhlIHR5cGUKLSAgICAgICAg
Ly8gb2YgdGhlIHN5bnRheCBpcyB0byBiZSBkZWZlcnJlZCBhcmJpdHJhcmlseSBsb25nIHVudGls
IHRoZSBlbmQgb2YgdGhlIHBhcmVudGhlc2VzIHBhaXIgKHBsdXMgYSBsb29rYWhlYWQpCi0gICAg
ICAgIC8vIG9yIHRoZSBmaXJzdCBjb21tYS4gVGhpcyBzaXR1YXRpb24gYWxzbyBkZWZlcnMgdGhl
IGRldGVybWluYXRpb24gb2YgYWxsIHRoZSBleHByZXNzaW9ucyBuZXN0ZWQgaW4gdGhlIHBhaXIu
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBwcm9kdWN0aW9ucyB0aGF0
IGNhbiBiZSBwYXJzZWQgaW4gYSBwYXJlbnRoZXNlcyBwYWlyIHRoYXQgbmVlZHMgdG8gYmUgZGV0
ZXJtaW5lZAotICAgICAgICAvLyBhZnRlciB0aGUgb3V0ZXJtb3N0IHBhaXIgaXMgY2xvc2VkLiBU
aGV5IGFyZToKLSAgICAgICAgLy8KLSAgICAgICAgLy8gICAxLiBBc3NpZ25tZW50RXhwcmVzc2lv
bgotICAgICAgICAvLyAgIDIuIEJpbmRpbmdFbGVtZW50cwotICAgICAgICAvLyAgIDMuIEFzc2ln
bm1lbnRUYXJnZXRzCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGV4
cG9uZW50aWFsIGJhY2t0cmFja2luZywgd2UgdXNlIHR3byBmbGFncyB0byBkZW5vdGUgaWYgdGhl
IHByb2R1Y3Rpb24gY2FuIGJlCi0gICAgICAgIC8vIGJpbmRpbmcgZWxlbWVudCBvciBhc3NpZ25t
ZW50IHRhcmdldC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIHRocmVlIHByb2R1Y3Rpb25z
IGhhdmUgdGhlIHJlbGF0aW9uc2hpcDoKLSAgICAgICAgLy8KLSAgICAgICAgLy8gICBCaW5kaW5n
RWxlbWVudHMg4oqGIEFzc2lnbm1lbnRUYXJnZXRzIOKKhiBBc3NpZ25tZW50RXhwcmVzc2lvbgot
ICAgICAgICAvLwotICAgICAgICAvLyB3aXRoIGEgc2luZ2xlIGV4Y2VwdGlvbiB0aGF0IENvdmVy
SW5pdGlhbGl6ZWROYW1lIHdoZW4gdXNlZCBkaXJlY3RseSBpbiBhbiBFeHByZXNzaW9uLCBnZW5l
cmF0ZXMKLSAgICAgICAgLy8gYW4gZWFybHkgZXJyb3IuIFRoZXJlZm9yZSwgd2UgbmVlZCB0aGUg
dGhpcmQgc3RhdGUsIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciwgdG8gdHJhY2sgdGhl
Ci0gICAgICAgIC8vIGZpcnN0IHVzYWdlIG9mIENvdmVySW5pdGlhbGl6ZWROYW1lIGFuZCByZXBv
cnQgaXQgd2hlbiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHBhcmVudGhlc2VzIHBhaXIuCi0g
ICAgICAgIC8vCi0gICAgICAgIC8vIGlzb2xhdGVDb3ZlckdyYW1tYXIgZnVuY3Rpb24gcnVucyB0
aGUgZ2l2ZW4gcGFyc2VyIGZ1bmN0aW9uIHdpdGggYSBuZXcgY292ZXIgZ3JhbW1hciBjb250ZXh0
LCBhbmQgaXQgZG9lcyBub3QKLSAgICAgICAgLy8gZWZmZWN0IHRoZSBjdXJyZW50IGZsYWdzLiBU
aGlzIG1lYW5zIHRoZSBwcm9kdWN0aW9uIHRoZSBwYXJzZXIgcGFyc2VzIGlzIG9ubHkgdXNlZCBh
cyBhbiBleHByZXNzaW9uLiBUaGVyZWZvcmUKLSAgICAgICAgLy8gdGhlIENvdmVySW5pdGlhbGl6
ZWROYW1lIGNoZWNrIGlzIGNvbmR1Y3RlZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gaW5oZXJp
dENvdmVyR3JhbW1hciBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBwYXJzZSBmdW5jdGlvbiB3aXRo
IGEgbmV3IGNvdmVyIGdyYW1tYXIgY29udGV4dCwgYW5kIGl0IHByb3BhZ2F0ZXMKLSAgICAgICAg
Ly8gdGhlIGZsYWdzIG91dHNpZGUgb2YgdGhlIHBhcnNlci4gVGhpcyBtZWFucyB0aGUgcHJvZHVj
dGlvbiB0aGUgcGFyc2VyIHBhcnNlcyBpcyB1c2VkIGFzIGEgcGFydCBvZiBhIHBvdGVudGlhbAot
ICAgICAgICAvLyBwYXR0ZXJuLiBUaGUgQ292ZXJJbml0aWFsaXplZE5hbWUgY2hlY2sgaXMgZGVm
ZXJyZWQuCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUuaXNvbGF0ZUNvdmVyR3JhbW1hciA9IGZ1
bmN0aW9uIChwYXJzZUZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNJc0JpbmRp
bmdFbGVtZW50ID0gdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ7Ci0gICAgICAgICAgICB2
YXIgcHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQgPSB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50
VGFyZ2V0OwotICAgICAgICAgICAgdmFyIHByZXZpb3VzRmlyc3RDb3ZlckluaXRpYWxpemVkTmFt
ZUVycm9yID0gdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjsKLSAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gdHJ1ZTsKLSAgICAgICAg
ICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOwotICAgICAgICAgICAg
dGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7Ci0gICAg
ICAgICAgICB2YXIgcmVzdWx0ID0gcGFyc2VGdW5jdGlvbi5jYWxsKHRoaXMpOwotICAgICAgICAg
ICAgaWYgKHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgIT09IG51
bGwpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMuY29u
dGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBwcmV2aW91c0lzQmluZGlu
Z0VsZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0g
cHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQ7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmly
c3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gcHJldmlvdXNGaXJzdENvdmVySW5pdGlhbGl6
ZWROYW1lRXJyb3I7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9OwotICAg
ICAgICBQYXJzZXIucHJvdG90eXBlLmluaGVyaXRDb3ZlckdyYW1tYXIgPSBmdW5jdGlvbiAocGFy
c2VGdW5jdGlvbikgewotICAgICAgICAgICAgdmFyIHByZXZpb3VzSXNCaW5kaW5nRWxlbWVudCA9
IHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50OwotICAgICAgICAgICAgdmFyIHByZXZpb3Vz
SXNBc3NpZ25tZW50VGFyZ2V0ID0gdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldDsKLSAg
ICAgICAgICAgIHZhciBwcmV2aW91c0ZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IHRo
aXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I7Ci0gICAgICAgICAgICB0
aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICB0aGlzLmNv
bnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuY29udGV4
dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsOwotICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IHBhcnNlRnVuY3Rpb24uY2FsbCh0aGlzKTsKLSAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgJiYg
cHJldmlvdXNJc0JpbmRpbmdFbGVtZW50OwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNz
aWdubWVudFRhcmdldCA9IHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgJiYgcHJldmlv
dXNJc0Fzc2lnbm1lbnRUYXJnZXQ7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyc3RDb3Zl
ckluaXRpYWxpemVkTmFtZUVycm9yID0gcHJldmlvdXNGaXJzdENvdmVySW5pdGlhbGl6ZWROYW1l
RXJyb3IgfHwgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjsKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90
b3R5cGUuY29uc3VtZVNlbWljb2xvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGlmICh0
aGlzLm1hdGNoKCc7JykpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuaGFzTGluZVRlcm1pbmF0b3Ip
IHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMiAvKiBFT0Yg
Ki8gJiYgIXRoaXMubWF0Y2goJ30nKSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgdGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhpcy5zdGFydE1hcmtlci5pbmRl
eDsKLSAgICAgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIubGluZSA9IHRoaXMuc3RhcnRNYXJr
ZXIubGluZTsKLSAgICAgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIuY29sdW1uID0gdGhpcy5z
dGFydE1hcmtlci5jb2x1bW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIC8v
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByaW1hcnktZXhwcmVzc2lvbgot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24gPSBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAg
ICAgICAgdmFyIGV4cHI7Ci0gICAgICAgICAgICB2YXIgdG9rZW4sIHJhdzsKLSAgICAgICAgICAg
IHN3aXRjaCAodGhpcy5sb29rYWhlYWQudHlwZSkgewotICAgICAgICAgICAgICAgIGNhc2UgMyAv
KiBJZGVudGlmaWVyICovOgotICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuY29udGV4dC5p
c01vZHVsZSB8fCB0aGlzLmNvbnRleHQuYXdhaXQpICYmIHRoaXMubG9va2FoZWFkLnZhbHVlID09
PSAnYXdhaXQnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBl
Y3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBleHByID0gdGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKSA/IHRoaXMucGFy
c2VGdW5jdGlvbkV4cHJlc3Npb24oKSA6IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWRl
bnRpZmllcih0aGlzLm5leHRUb2tlbigpLnZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNiAvKiBOdW1lcmljTGl0ZXJhbCAqLzoKLSAgICAg
ICAgICAgICAgICBjYXNlIDggLyogU3RyaW5nTGl0ZXJhbCAqLzoKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgdGhpcy5sb29rYWhlYWQub2N0YWwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5s
b29rYWhlYWQsIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3Np
Z25tZW50VGFyZ2V0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5p
c0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhp
cy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgcmF3ID0gdGhpcy5nZXRUb2tlblJh
dyh0b2tlbik7Ci0gICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLkxpdGVyYWwodG9rZW4udmFsdWUsIHJhdykpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDEgLyogQm9vbGVhbkxpdGVyYWwgKi86Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOwotICAg
ICAgICAgICAgICAgICAgICByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsKLSAgICAgICAg
ICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuTGl0ZXJhbCh0
b2tlbi52YWx1ZSA9PT0gJ3RydWUnLCByYXcpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSA1IC8qIE51bGxMaXRlcmFsICovOgotICAgICAgICAgICAg
ICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7Ci0gICAgICAgICAgICAgICAgICAg
IGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwobnVsbCwgcmF3KSk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMTAgLyog
VGVtcGxhdGUgKi86Ci0gICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLnBhcnNlVGVtcGxh
dGVMaXRlcmFsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgNyAvKiBQdW5jdHVhdG9yICovOgotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRo
aXMubG9va2FoZWFkLnZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcoJzoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVu
dCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVy
aXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUdyb3VwRXhwcmVzc2lvbik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdbJzoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFt
bWFyKHRoaXMucGFyc2VBcnJheUluaXRpYWxpemVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3snOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5w
YXJzZU9iamVjdEluaXRpYWxpemVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy8nOgotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnLz0nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4
dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5pbmRleCA9IHRoaXMuc3RhcnRNYXJrZXIuaW5kZXg7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLm5leHRSZWdleFRva2Vu
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0
b2tlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuUmVnZXhMaXRlcmFsKHRva2VuLnJlZ2V4LCByYXcsIHRva2VuLnBhdHRl
cm4sIHRva2VuLmZsYWdzKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cHIgPSB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGNhc2UgNCAvKiBLZXl3b3JkICovOgotICAgICAgICAgICAgICAgICAgICBpZiAo
IXRoaXMuY29udGV4dC5zdHJpY3QgJiYgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgJiYgdGhpcy5t
YXRjaEtleXdvcmQoJ3lpZWxkJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0
aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5jb250ZXh0LnN0cmljdCAmJiB0aGlzLm1hdGNo
S2V5d29yZCgnbGV0JykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIodGhpcy5uZXh0VG9rZW4oKS52YWx1ZSkp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1l
bnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29y
ZCgnZnVuY3Rpb24nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlz
LnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoS2V5d29yZCgndGhpcycp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9k
ZS5UaGlzRXhwcmVzc2lvbigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdjbGFzcycpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VDbGFzc0V4cHJlc3Np
b24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHRoaXMubWF0Y2hJbXBvcnRDYWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHByID0gdGhpcy5wYXJzZUltcG9ydENhbGwoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cHIgPSB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRv
a2VuKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMu
bmV4dFRva2VuKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGV4cHI7Ci0g
ICAgICAgIH07Ci0gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2Vj
LWFycmF5LWluaXRpYWxpemVyCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTcHJlYWRF
bGVtZW50ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0
ZU5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTsKLSAgICAgICAgICAgIHZh
ciBhcmcgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHBy
ZXNzaW9uKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LlNwcmVhZEVsZW1lbnQoYXJnKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5
cGUucGFyc2VBcnJheUluaXRpYWxpemVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IFtd
OwotICAgICAgICAgICAgdGhpcy5leHBlY3QoJ1snKTsKLSAgICAgICAgICAgIHdoaWxlICghdGhp
cy5tYXRjaCgnXScpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJywnKSkgewot
ICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50cy5wdXNoKG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBlbHNlIGlmICh0aGlzLm1hdGNoKCcuLi4nKSkgewotICAgICAgICAgICAgICAgICAgICB2YXIg
ZWxlbWVudCA9IHRoaXMucGFyc2VTcHJlYWRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghdGhpcy5tYXRjaCgnXScpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNv
bnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5leHBlY3QoJywnKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVz
aCh0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnXScpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5leHBl
Y3QoJ10nKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LkFycmF5RXhwcmVzc2lvbihlbGVtZW50cykpOwotICAgICAgICB9OwotICAgICAgICAvLyBodHRw
czovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QtaW5pdGlhbGl6ZXIKLSAgICAg
ICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVByb3BlcnR5TWV0aG9kID0gZnVuY3Rpb24gKHBhcmFt
cykgewotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNl
OwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHRoaXMuY29udGV4dC5zdHJpY3Q7Ci0gICAg
ICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZSA9IHRoaXMuY29udGV4dC5h
bGxvd1N0cmljdERpcmVjdGl2ZTsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1N0cmlj
dERpcmVjdGl2ZSA9IHBhcmFtcy5zaW1wbGU7Ci0gICAgICAgICAgICB2YXIgYm9keSA9IHRoaXMu
aXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyk7Ci0g
ICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBwYXJhbXMuZmlyc3RSZXN0cmlj
dGVkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihwYXJh
bXMuZmlyc3RSZXN0cmljdGVkLCBwYXJhbXMubWVzc2FnZSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBwYXJhbXMuc3RyaWN0ZWQpIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHBhcmFtcy5zdHJpY3Rl
ZCwgcGFyYW1zLm1lc3NhZ2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5jb250
ZXh0LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0OwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFs
bG93U3RyaWN0RGlyZWN0aXZlID0gcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZTsKLSAgICAg
ICAgICAgIHJldHVybiBib2R5OwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBl
LnBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAg
IHZhciBpc0dlbmVyYXRvciA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNv
bnRleHQuYWxsb3dZaWVsZDsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0g
ZmFsc2U7Ci0gICAgICAgICAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRl
cnMoKTsKLSAgICAgICAgICAgIHZhciBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2Qo
cGFyYW1zKTsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNB
bGxvd1lpZWxkOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5v
ZGUuRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIHBhcmFtcy5wYXJhbXMsIG1ldGhvZCwgaXNHZW5l
cmF0b3IpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVByb3Bl
cnR5TWV0aG9kQXN5bmNGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lp
ZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNB
d2FpdCA9IHRoaXMuY29udGV4dC5hd2FpdDsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxv
d1lpZWxkID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQgPSB0cnVlOwot
ICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCk7Ci0g
ICAgICAgICAgICB2YXIgbWV0aG9kID0gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKHBhcmFtcyk7
Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVs
ZDsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5hd2FpdCA9IHByZXZpb3VzQXdhaXQ7Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Bc3luY0Z1bmN0aW9u
RXhwcmVzc2lvbihudWxsLCBwYXJhbXMucGFyYW1zLCBtZXRob2QpKTsKLSAgICAgICAgfTsKLSAg
ICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU9iamVjdFByb3BlcnR5S2V5ID0gZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAg
ICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICB2YXIga2V5Owot
ICAgICAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSA4
IC8qIFN0cmluZ0xpdGVyYWwgKi86Ci0gICAgICAgICAgICAgICAgY2FzZSA2IC8qIE51bWVyaWNM
aXRlcmFsICovOgotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAm
JiB0b2tlbi5vY3RhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVu
ZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVy
YWwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZhciByYXcg
PSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsKLSAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhp
cy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRlcmFsKHRva2VuLnZhbHVlLCByYXcpKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzIC8qIElkZW50
aWZpZXIgKi86Ci0gICAgICAgICAgICAgICAgY2FzZSAxIC8qIEJvb2xlYW5MaXRlcmFsICovOgot
ICAgICAgICAgICAgICAgIGNhc2UgNSAvKiBOdWxsTGl0ZXJhbCAqLzoKLSAgICAgICAgICAgICAg
ICBjYXNlIDQgLyogS2V5d29yZCAqLzoKLSAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNyAvKiBQdW5jdHVhdG9y
ICovOgotICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdbJykgewotICAg
ICAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMu
cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmV4cGVjdCgnXScpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy50aHJvd1VuZXhwZWN0
ZWRUb2tlbih0b2tlbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
a2V5ID0gdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4ga2V5OwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90
eXBlLmlzUHJvcGVydHlLZXkgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewotICAgICAgICAgICAg
cmV0dXJuIChrZXkudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIgJiYga2V5Lm5h
bWUgPT09IHZhbHVlKSB8fAotICAgICAgICAgICAgICAgIChrZXkudHlwZSA9PT0gc3ludGF4XzEu
U3ludGF4LkxpdGVyYWwgJiYga2V5LnZhbHVlID09PSB2YWx1ZSk7Ci0gICAgICAgIH07Ci0gICAg
ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VPYmplY3RQcm9wZXJ0eSA9IGZ1bmN0aW9uIChoYXNQ
cm90bykgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAg
ICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAgICAgdmFyIGtpbmQ7
Ci0gICAgICAgICAgICB2YXIga2V5ID0gbnVsbDsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IG51
bGw7Ci0gICAgICAgICAgICB2YXIgY29tcHV0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBt
ZXRob2QgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBzaG9ydGhhbmQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIHZhciBpc0FzeW5jID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9
PT0gMyAvKiBJZGVudGlmaWVyICovKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGlkID0gdG9rZW4u
dmFsdWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAg
ICBpZiAoaWQgPT09ICdhc3luYycgJiYgIXRoaXMuaGFzTGluZVRlcm1pbmF0b3IpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChjb21wdXRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaXNBc3luYyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJv
cGVydHlLZXkoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdW5jdHVhdG9yID0gdGhpcy5sb29r
YWhlYWQudmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHVuY3R1YXRvciAhPT0g
JzonICYmIHB1bmN0dWF0b3IgIT09ICcoJyAmJiBwdW5jdHVhdG9yICE9PSAnKicpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpc0FzeW5jID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlkID0gdG9rZW4udmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGtleSA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWRlbnRpZmllcihp
ZCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBOb2RlLklkZW50aWZpZXIoaWQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcqJykpIHsKLSAgICAgICAg
ICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7Ci0gICAgICAg
ICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB2YXIgbG9va2FoZWFkUHJvcGVydHlLZXkgPSB0aGlzLnF1YWxpZmll
ZFByb3BlcnR5TmFtZSh0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAgICBpZiAodG9rZW4udHlw
ZSA9PT0gMyAvKiBJZGVudGlmaWVyICovICYmICFpc0FzeW5jICYmIHRva2VuLnZhbHVlID09PSAn
Z2V0JyAmJiBsb29rYWhlYWRQcm9wZXJ0eUtleSkgewotICAgICAgICAgICAgICAgIGtpbmQgPSAn
Z2V0JzsKLSAgICAgICAgICAgICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2goJ1snKTsKLSAgICAg
ICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKLSAgICAgICAg
ICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
IHZhbHVlID0gdGhpcy5wYXJzZUdldHRlck1ldGhvZCgpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovICYmICFpc0Fz
eW5jICYmIHRva2VuLnZhbHVlID09PSAnc2V0JyAmJiBsb29rYWhlYWRQcm9wZXJ0eUtleSkgewot
ICAgICAgICAgICAgICAgIGtpbmQgPSAnc2V0JzsKLSAgICAgICAgICAgICAgICBjb21wdXRlZCA9
IHRoaXMubWF0Y2goJ1snKTsKLSAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0
UHJvcGVydHlLZXkoKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VTZXR0ZXJN
ZXRob2QoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5cGUg
PT09IDcgLyogUHVuY3R1YXRvciAqLyAmJiB0b2tlbi52YWx1ZSA9PT0gJyonICYmIGxvb2thaGVh
ZFByb3BlcnR5S2V5KSB7Ci0gICAgICAgICAgICAgICAga2luZCA9ICdpbml0JzsKLSAgICAgICAg
ICAgICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2goJ1snKTsKLSAgICAgICAgICAgICAgICBrZXkg
PSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9
IHRoaXMucGFyc2VHZW5lcmF0b3JNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBtZXRob2QgPSB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFrZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tl
bih0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGtp
bmQgPSAnaW5pdCc7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJzonKSAmJiAhaXNB
c3luYykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXB1dGVkICYmIHRoaXMuaXNQcm9w
ZXJ0eUtleShrZXksICdfX3Byb3RvX18nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc1Byb3RvLnZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xl
cmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuRHVwbGljYXRlUHJvdG9Qcm9wZXJ0eSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNQcm90
by52YWx1ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmlu
aGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnKCcpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXNBc3luYyA/IHRoaXMucGFyc2VQcm9wZXJ0
eU1ldGhvZEFzeW5jRnVuY3Rpb24oKSA6IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmll
ciAqLykgewotICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLklkZW50aWZpZXIodG9rZW4udmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMubWF0Y2goJz0nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250
ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IHRoaXMubG9va2FoZWFkOwotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNob3J0aGFuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5p
dCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24pOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLkFzc2lnbm1lbnRQYXR0ZXJuKGlkLCBpbml0KSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzaG9ydGhhbmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpZDsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0
aGlzLm5leHRUb2tlbigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Qcm9wZXJ0eShraW5k
LCBrZXksIGNvbXB1dGVkLCB2YWx1ZSwgbWV0aG9kLCBzaG9ydGhhbmQpKTsKLSAgICAgICAgfTsK
LSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVNwcmVhZFByb3BlcnR5ID0gZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAg
ICAgIHRoaXMuZXhwZWN0KCcuLi4nKTsKLSAgICAgICAgICAgIHZhciBhcmcgPSB0aGlzLmluaGVy
aXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlNwcmVhZFByb3BlcnR5KGFy
ZykpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlT2JqZWN0SW5p
dGlhbGl6ZXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3Jl
YXRlTm9kZSgpOwotICAgICAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsKLSAgICAgICAgICAgIHZh
ciBwcm9wZXJ0aWVzID0gW107Ci0gICAgICAgICAgICB2YXIgaGFzUHJvdG8gPSB7IHZhbHVlOiBm
YWxzZSB9OwotICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHsKLSAgICAgICAg
ICAgICAgICBwcm9wZXJ0aWVzLnB1c2godGhpcy5tYXRjaCgnLi4uJykgPyB0aGlzLnBhcnNlU3By
ZWFkUHJvcGVydHkoKSA6IHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eShoYXNQcm90bykpOwotICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnfScpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMuZXhwZWN0Q29tbWFTZXBhcmF0b3IoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdCgnfScpOwotICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVz
KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2
Mi8jc2VjLXRlbXBsYXRlLWxpdGVyYWxzCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VU
ZW1wbGF0ZUhlYWQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQo
dGhpcy5sb29rYWhlYWQuaGVhZCwgJ1RlbXBsYXRlIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEg
dGVtcGxhdGUgaGVhZCcpOwotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAg
ICB2YXIgcmF3ID0gdG9rZW4udmFsdWU7Ci0gICAgICAgICAgICB2YXIgY29va2VkID0gdG9rZW4u
Y29va2VkOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUu
VGVtcGxhdGVFbGVtZW50KHsgcmF3OiByYXcsIGNvb2tlZDogY29va2VkIH0sIHRva2VuLnRhaWwp
KTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVRlbXBsYXRlRWxl
bWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBl
ICE9PSAxMCAvKiBUZW1wbGF0ZSAqLykgewotICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4
cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBub2RlID0gdGhp
cy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigp
OwotICAgICAgICAgICAgdmFyIHJhdyA9IHRva2VuLnZhbHVlOwotICAgICAgICAgICAgdmFyIGNv
b2tlZCA9IHRva2VuLmNvb2tlZDsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBOb2RlLlRlbXBsYXRlRWxlbWVudCh7IHJhdzogcmF3LCBjb29rZWQ6IGNvb2tlZCB9
LCB0b2tlbi50YWlsKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFy
c2VUZW1wbGF0ZUxpdGVyYWwgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGV4cHJlc3Npb25zID0gW107Ci0g
ICAgICAgICAgICB2YXIgcXVhc2lzID0gW107Ci0gICAgICAgICAgICB2YXIgcXVhc2kgPSB0aGlz
LnBhcnNlVGVtcGxhdGVIZWFkKCk7Ci0gICAgICAgICAgICBxdWFzaXMucHVzaChxdWFzaSk7Ci0g
ICAgICAgICAgICB3aGlsZSAoIXF1YXNpLnRhaWwpIHsKLSAgICAgICAgICAgICAgICBleHByZXNz
aW9ucy5wdXNoKHRoaXMucGFyc2VFeHByZXNzaW9uKCkpOwotICAgICAgICAgICAgICAgIHF1YXNp
ID0gdGhpcy5wYXJzZVRlbXBsYXRlRWxlbWVudCgpOwotICAgICAgICAgICAgICAgIHF1YXNpcy5w
dXNoKHF1YXNpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLlRlbXBsYXRlTGl0ZXJhbChxdWFzaXMsIGV4cHJlc3Npb25zKSk7
Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8j
c2VjLWdyb3VwaW5nLW9wZXJhdG9yCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucmVpbnRlcnBy
ZXRFeHByZXNzaW9uQXNQYXR0ZXJuID0gZnVuY3Rpb24gKGV4cHIpIHsKLSAgICAgICAgICAgIHN3
aXRjaCAoZXhwci50eXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXgu
SWRlbnRpZmllcjoKLSAgICAgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5NZW1iZXJF
eHByZXNzaW9uOgotICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LlJlc3RFbGVt
ZW50OgotICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRQYXR0
ZXJuOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIHN5
bnRheF8xLlN5bnRheC5TcHJlYWRFbGVtZW50OgotICAgICAgICAgICAgICAgICAgICBleHByLnR5
cGUgPSBzeW50YXhfMS5TeW50YXguUmVzdEVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuYXJndW1lbnQpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRh
eC5TcHJlYWRQcm9wZXJ0eToKLSAgICAgICAgICAgICAgICAgICAgZXhwci50eXBlID0gc3ludGF4
XzEuU3ludGF4LlJlc3RQcm9wZXJ0eTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVy
cHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwci5hcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LkFycmF5RXhw
cmVzc2lvbjoKLSAgICAgICAgICAgICAgICAgICAgZXhwci50eXBlID0gc3ludGF4XzEuU3ludGF4
LkFycmF5UGF0dGVybjsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBl
eHByLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZXhwci5lbGVtZW50c1tpXSAhPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuZWxlbWVudHNbaV0pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4
Lk9iamVjdEV4cHJlc3Npb246Ci0gICAgICAgICAgICAgICAgICAgIGV4cHIudHlwZSA9IHN5bnRh
eF8xLlN5bnRheC5PYmplY3RQYXR0ZXJuOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGV4cHIucHJvcGVydGllcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHByb3BlcnR5ID0gZXhwci5wcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4ocHJvcGVydHku
dHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LlNwcmVhZFByb3BlcnR5ID8gcHJvcGVydHkgOiBwcm9w
ZXJ0eS52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguQXNzaWdubWVudEV4
cHJlc3Npb246Ci0gICAgICAgICAgICAgICAgICAgIGV4cHIudHlwZSA9IHN5bnRheF8xLlN5bnRh
eC5Bc3NpZ25tZW50UGF0dGVybjsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGV4cHIub3Bl
cmF0b3I7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQ
YXR0ZXJuKGV4cHIubGVmdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFsbG93IG90aGVyIG5vZGUg
dHlwZSBmb3IgdG9sZXJhbnQgcGFyc2luZy4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VH
cm91cEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgZXhwcjsKLSAg
ICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgn
KScpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIXRoaXMubWF0Y2goJz0+JykpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBl
Y3QoJz0+Jyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGV4cHIgPSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCi0gICAg
ICAgICAgICAgICAgICAgIHBhcmFtczogW10sCi0gICAgICAgICAgICAgICAgICAgIGFzeW5jOiBm
YWxzZQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAg
ICAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5t
YXRjaCgnLi4uJykpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VSZXN0
RWxlbWVudChwYXJhbXMpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKScpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJz0+JykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc9PicpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBl
OiBBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zOiBbZXhwcl0sCi0gICAgICAgICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UKLSAgICAg
ICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcnJvdyA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJywn
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4cHJlc3Npb25zID0gW107Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKGV4cHIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09IDIgLyog
RU9GICovKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcs
JykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4
dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJykn
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJl
c3Npb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByZXNzaW9uc1tpXSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJyb3cgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eHByID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXJyb3dQ
YXJhbWV0ZXJQbGFjZUhvbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtczogZXhwcmVzc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhc3luYzogZmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAodGhpcy5tYXRjaCgnLi4uJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCF0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2th
aGVhZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaCh0aGlzLnBhcnNlUmVzdEVsZW1lbnQo
cGFyYW1zKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcp
Jyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnPT4n
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJz0+
Jyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNz
aW9ucy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcmVzc2lvbnNbaV0pOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFycm93ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhw
ciA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFy
YW1ldGVyUGxhY2VIb2xkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXM6IGV4cHJlc3Npb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXN5bmM6IGZhbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMu
aW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGFycm93KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJyb3cpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwg
bmV3IE5vZGUuU2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFhcnJvdykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJyknKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCc9PicpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4Lklk
ZW50aWZpZXIgJiYgZXhwci5uYW1lID09PSAneWllbGQnKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFycm93ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwciA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEFy
cm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXM6IFtleHByXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFzeW5jOiBmYWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWFycm93KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250
ZXh0LmlzQmluZGluZ0VsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5TZXF1ZW5jZUV4cHJlc3Npb24pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
ZXhwci5leHByZXNzaW9ucy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIu
ZXhwcmVzc2lvbnNbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBh
cmFtc18xID0gKGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LlNlcXVlbmNlRXhwcmVzc2lv
biA/IGV4cHIuZXhwcmVzc2lvbnMgOiBbZXhwcl0pOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHByID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtczogcGFyYW1zXzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhc3luYzogZmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9
IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAgIH07Ci0gICAgICAgIC8v
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxlZnQtaGFuZC1zaWRlLWV4cHJl
c3Npb25zCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VBcmd1bWVudHMgPSBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdCgnKCcpOwotICAgICAgICAgICAgdmFyIGFy
Z3MgPSBbXTsKLSAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpKSB7Ci0gICAgICAgICAg
ICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlz
Lm1hdGNoKCcuLi4nKSA/IHRoaXMucGFyc2VTcHJlYWRFbGVtZW50KCkgOgotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50
RXhwcmVzc2lvbik7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChleHByKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyknKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5leHBlY3RDb21tYVNlcGFyYXRvcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAodGhp
cy5tYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHRoaXMuZXhwZWN0KCcpJyk7Ci0gICAgICAgICAgICByZXR1cm4gYXJnczsKLSAgICAgICAg
fTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5pc0lkZW50aWZpZXJOYW1lID0gZnVuY3Rpb24g
KHRva2VuKSB7Ci0gICAgICAgICAgICByZXR1cm4gdG9rZW4udHlwZSA9PT0gMyAvKiBJZGVudGlm
aWVyICovIHx8Ci0gICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gNCAvKiBLZXl3b3JkICov
IHx8Ci0gICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gMSAvKiBCb29sZWFuTGl0ZXJhbCAq
LyB8fAotICAgICAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IDUgLyogTnVsbExpdGVyYWwgKi87
Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJZGVudGlmaWVyTmFt
ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2Rl
KCk7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAg
ICAgaWYgKCF0aGlzLmlzSWRlbnRpZmllck5hbWUodG9rZW4pKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVyKHRva2Vu
LnZhbHVlKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VOZXdF
eHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBpZCA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFt
ZSgpOwotICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGlkLm5hbWUgPT09ICduZXcnLCAnTmV3
IGV4cHJlc3Npb24gbXVzdCBzdGFydCB3aXRoIGBuZXdgJyk7Ci0gICAgICAgICAgICB2YXIgZXhw
cjsKLSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcuJykpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBl
ID09PSAzIC8qIElkZW50aWZpZXIgKi8gJiYgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5ICYm
IHRoaXMubG9va2FoZWFkLnZhbHVlID09PSAndGFyZ2V0JykgewotICAgICAgICAgICAgICAgICAg
ICB2YXIgcHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgZXhwciA9IG5ldyBOb2RlLk1ldGFQcm9wZXJ0eShpZCwgcHJvcGVydHkpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaEtl
eXdvcmQoJ2ltcG9ydCcpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRU
b2tlbih0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICB2YXIgY2FsbGVlID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRo
aXMucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICB2YXIgYXJn
cyA9IHRoaXMubWF0Y2goJygnKSA/IHRoaXMucGFyc2VBcmd1bWVudHMoKSA6IFtdOwotICAgICAg
ICAgICAgICAgIGV4cHIgPSBuZXcgTm9kZS5OZXdFeHByZXNzaW9uKGNhbGxlZSwgYXJncyk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBleHBy
KTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUFzeW5jQXJndW1l
bnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgYXJnID0gdGhpcy5wYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyc3RDb3Zlcklu
aXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDsKLSAgICAgICAgICAgIHJldHVybiBhcmc7Ci0gICAg
ICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VBc3luY0FyZ3VtZW50cyA9IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICB2
YXIgYXJncyA9IFtdOwotICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykpIHsKLSAgICAg
ICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgZXhwciA9
IHRoaXMubWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKSA6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzeW5j
QXJndW1lbnQpOwotICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goZXhwcik7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMuZXhwZWN0Q29tbWFTZXBhcmF0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
bWF0Y2goJyknKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB0aGlzLmV4cGVjdCgnKScpOwotICAgICAgICAgICAgcmV0dXJuIGFyZ3M7Ci0gICAgICAgIH07
Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUubWF0Y2hJbXBvcnRDYWxsID0gZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5tYXRjaEtleXdvcmQoJ2ltcG9ydCcpOwot
ICAgICAgICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhp
cy5zY2FubmVyLnNhdmVTdGF0ZSgpOwotICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5zY2Fu
Q29tbWVudHMoKTsKLSAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMuc2Nhbm5lci5sZXgo
KTsKLSAgICAgICAgICAgICAgICB0aGlzLnNjYW5uZXIucmVzdG9yZVN0YXRlKHN0YXRlKTsKLSAg
ICAgICAgICAgICAgICBtYXRjaCA9IChuZXh0LnR5cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLykg
JiYgKG5leHQudmFsdWUgPT09ICcoJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gbWF0Y2g7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJbXBv
cnRDYWxsID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0
ZU5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnaW1wb3J0Jyk7Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JbXBvcnQoKSk7Ci0g
ICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VMZWZ0SGFuZFNpZGVFeHBy
ZXNzaW9uQWxsb3dDYWxsID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHN0YXJ0VG9r
ZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgIHZhciBtYXliZUFzeW5jID0gdGhpcy5t
YXRjaENvbnRleHR1YWxLZXl3b3JkKCdhc3luYycpOwotICAgICAgICAgICAgdmFyIHByZXZpb3Vz
QWxsb3dJbiA9IHRoaXMuY29udGV4dC5hbGxvd0luOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0
LmFsbG93SW4gPSB0cnVlOwotICAgICAgICAgICAgdmFyIGV4cHI7Ci0gICAgICAgICAgICBpZiAo
dGhpcy5tYXRjaEtleXdvcmQoJ3N1cGVyJykgJiYgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5
KSB7Ci0gICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAg
ICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmlu
YWxpemUoZXhwciwgbmV3IE5vZGUuU3VwZXIoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlz
Lm1hdGNoKCcoJykgJiYgIXRoaXMubWF0Y2goJy4nKSAmJiAhdGhpcy5tYXRjaCgnWycpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhl
YWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5t
YXRjaEtleXdvcmQoJ25ldycpID8gdGhpcy5wYXJzZU5ld0V4cHJlc3Npb24gOiB0aGlzLnBhcnNl
UHJpbWFyeUV4cHJlc3Npb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKHRy
dWUpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLicpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLicpOwotICAgICAgICAgICAgICAgICAgICB2
YXIgcHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5l
dyBOb2RlLlN0YXRpY01lbWJlckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkpKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnKCcpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBhc3luY0Fycm93ID0gbWF5YmVBc3luYyAmJiAoc3RhcnRU
b2tlbi5saW5lTnVtYmVyID09PSB0aGlzLmxvb2thaGVhZC5saW5lTnVtYmVyKTsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFzeW5jQXJyb3cgPyB0aGlzLnBhcnNlQXN5
bmNBcmd1bWVudHMoKSA6IHRoaXMucGFyc2VBcmd1bWVudHMoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LkltcG9ydCAmJiBhcmdzLmxlbmd0
aCAhPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1l
c3NhZ2VzXzEuTWVzc2FnZXMuQmFkSW1wb3J0Q2FsbEFyaXR5KTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0
Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUuQ2FsbEV4cHJlc3Npb24oZXhwciwgYXJncykpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoYXN5bmNBcnJvdyAmJiB0aGlzLm1hdGNoKCc9PicpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHByID0gewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zOiBhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFz
eW5jOiB0cnVlCi0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0
Y2goJ1snKSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxl
bWVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25t
ZW50VGFyZ2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJ1snKTsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFt
bWFyKHRoaXMucGFyc2VFeHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBl
Y3QoJ10nKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5z
dGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkNvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbihl
eHByLCBwcm9wZXJ0eSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNl
IGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSAxMCAvKiBUZW1wbGF0ZSAqLyAmJiB0aGlzLmxv
b2thaGVhZC5oZWFkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBxdWFzaSA9IHRoaXMucGFy
c2VUZW1wbGF0ZUxpdGVyYWwoKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmlu
YWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLlRhZ2dlZFRlbXBsYXRl
RXhwcmVzc2lvbihleHByLCBxdWFzaSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSBwcmV2
aW91c0FsbG93SW47Ci0gICAgICAgICAgICByZXR1cm4gZXhwcjsKLSAgICAgICAgfTsKLSAgICAg
ICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVN1cGVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAg
ICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0
S2V5d29yZCgnc3VwZXInKTsKLSAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnWycpICYmICF0
aGlzLm1hdGNoKCcuJykpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRv
a2VuKHRoaXMubG9va2FoZWFkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlN1cGVyKCkpOwotICAgICAgICB9OwotICAgICAg
ICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbiA9IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0aGlzLmNvbnRleHQuYWxsb3dJbiwg
J2NhbGxlZSBvZiBuZXcgZXhwcmVzc2lvbiBhbHdheXMgYWxsb3cgaW4ga2V5d29yZC4nKTsKLSAg
ICAgICAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUodGhpcy5sb29rYWhlYWQpOwotICAg
ICAgICAgICAgdmFyIGV4cHIgPSAodGhpcy5tYXRjaEtleXdvcmQoJ3N1cGVyJykgJiYgdGhpcy5j
b250ZXh0LmluRnVuY3Rpb25Cb2R5KSA/IHRoaXMucGFyc2VTdXBlcigpIDoKLSAgICAgICAgICAg
ICAgICB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5tYXRjaEtleXdvcmQoJ25ldycpID8g
dGhpcy5wYXJzZU5ld0V4cHJlc3Npb24gOiB0aGlzLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOwot
ICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRj
aCgnWycpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVt
ZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1l
bnRUYXJnZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnWycpOwot
ICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1t
YXIodGhpcy5wYXJzZUV4cHJlc3Npb24pOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVj
dCgnXScpOwotICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBu
ZXcgTm9kZS5Db21wdXRlZE1lbWJlckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnLicpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLicpOwotICAgICAgICAg
ICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuU3Rh
dGljTWVtYmVyRXhwcmVzc2lvbihleHByLCBwcm9wZXJ0eSkpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSAxMCAvKiBU
ZW1wbGF0ZSAqLyAmJiB0aGlzLmxvb2thaGVhZC5oZWFkKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBxdWFzaSA9IHRoaXMucGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTsKLSAgICAgICAgICAgICAg
ICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVGFnZ2VkVGVtcGxhdGVF
eHByZXNzaW9uKGV4cHIsIHF1YXNpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZXhwcjsKLSAgICAgICAgfTsKLSAg
ICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdXBkYXRlLWV4cHJl
c3Npb25zCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VVcGRhdGVFeHByZXNzaW9uID0g
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGV4cHI7Ci0gICAgICAgICAgICB2YXIgc3Rh
cnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJysr
JykgfHwgdGhpcy5tYXRjaCgnLS0nKSkgewotICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhp
cy5zdGFydE5vZGUoc3RhcnRUb2tlbik7Ci0gICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdGhp
cy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5pbmhlcml0Q292ZXJH
cmFtbWFyKHRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24pOwotICAgICAgICAgICAgICAgIGlmICh0
aGlzLmNvbnRleHQuc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50
aWZpZXIgJiYgdGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkgewotICAg
ICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5T
dHJpY3RMSFNQcmVmaXgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
IXRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQpIHsKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdu
bWVudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhciBwcmVmaXggPSB0
cnVlOwotICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LlVwZGF0ZUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIsIHByZWZpeCkpOwotICAgICAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuaW5o
ZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2Fs
bCk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yICYmIHRoaXMu
bG9va2FoZWFkLnR5cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy5tYXRjaCgnKysnKSB8fCB0aGlzLm1hdGNoKCctLScpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBleHByLnR5cGUgPT09
IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyICYmIHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRX
b3JkKGV4cHIubmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVy
YXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RMSFNQb3N0Zml4KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250
ZXh0LmlzQXNzaWdubWVudFRhcmdldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1l
bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvciA9IHRoaXMubmV4dFRva2VuKCkudmFsdWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlZml4ID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2Vu
KSwgbmV3IE5vZGUuVXBkYXRlRXhwcmVzc2lvbihvcGVyYXRvciwgZXhwciwgcHJlZml4KSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gZXhwcjsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gaHR0cHM6Ly90
YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdW5hcnktb3BlcmF0b3JzCi0gICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VBd2FpdEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdGhpcy5uZXh0
VG9rZW4oKTsKLSAgICAgICAgICAgIHZhciBhcmd1bWVudCA9IHRoaXMucGFyc2VVbmFyeUV4cHJl
c3Npb24oKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LkF3YWl0RXhwcmVzc2lvbihhcmd1bWVudCkpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlVW5hcnlFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAg
ICAgdmFyIGV4cHI7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKycpIHx8IHRoaXMubWF0
Y2goJy0nKSB8fCB0aGlzLm1hdGNoKCd+JykgfHwgdGhpcy5tYXRjaCgnIScpIHx8Ci0gICAgICAg
ICAgICAgICAgdGhpcy5tYXRjaEtleXdvcmQoJ2RlbGV0ZScpIHx8IHRoaXMubWF0Y2hLZXl3b3Jk
KCd2b2lkJykgfHwgdGhpcy5tYXRjaEtleXdvcmQoJ3R5cGVvZicpKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSh0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAg
ICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICBleHBy
ID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24pOwot
ICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlVuYXJ5
RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcikpOwotICAgICAgICAgICAgICAgIGlmICh0aGlz
LmNvbnRleHQuc3RyaWN0ICYmIGV4cHIub3BlcmF0b3IgPT09ICdkZWxldGUnICYmIGV4cHIuYXJn
dW1lbnQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0RGVs
ZXRlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmlz
QXNzaWdubWVudFRhcmdldCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5p
c0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IGlmICh0aGlzLmNvbnRleHQuYXdhaXQgJiYgdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdh
d2FpdCcpKSB7Ci0gICAgICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VBd2FpdEV4cHJlc3Np
b24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
IGV4cHIgPSB0aGlzLnBhcnNlVXBkYXRlRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5
cGUucGFyc2VFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAgICAgdmFyIGV4
cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lvbik7
Ci0gICAgICAgICAgICBpZiAoZXhwci50eXBlICE9PSBzeW50YXhfMS5TeW50YXguVW5hcnlFeHBy
ZXNzaW9uICYmIHRoaXMubWF0Y2goJyoqJykpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm5leHRU
b2tlbigpOwotICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gZXhwcjsKLSAgICAgICAgICAgICAg
ICB2YXIgcmlnaHQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50
aWF0aW9uRXhwcmVzc2lvbik7Ci0gICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUo
dGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkJpbmFyeUV4cHJlc3Npb24oJyoq
JywgbGVmdCwgcmlnaHQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBleHBy
OwotICAgICAgICB9OwotICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIv
I3NlYy1leHAtb3BlcmF0b3IKLSAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
MjYyLyNzZWMtbXVsdGlwbGljYXRpdmUtb3BlcmF0b3JzCi0gICAgICAgIC8vIGh0dHBzOi8vdGMz
OS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkZGl0aXZlLW9wZXJhdG9ycwotICAgICAgICAvLyBo
dHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1iaXR3aXNlLXNoaWZ0LW9wZXJhdG9y
cwotICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWxhdGlv
bmFsLW9wZXJhdG9ycwotICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIv
I3NlYy1lcXVhbGl0eS1vcGVyYXRvcnMKLSAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5p
by9lY21hMjYyLyNzZWMtYmluYXJ5LWJpdHdpc2Utb3BlcmF0b3JzCi0gICAgICAgIC8vIGh0dHBz
Oi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWJpbmFyeS1sb2dpY2FsLW9wZXJhdG9ycwot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLmJpbmFyeVByZWNlZGVuY2UgPSBmdW5jdGlvbiAodG9r
ZW4pIHsKLSAgICAgICAgICAgIHZhciBvcCA9IHRva2VuLnZhbHVlOwotICAgICAgICAgICAgdmFy
IHByZWNlZGVuY2U7Ci0gICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gNyAvKiBQdW5jdHVh
dG9yICovKSB7Ci0gICAgICAgICAgICAgICAgcHJlY2VkZW5jZSA9IHRoaXMub3BlcmF0b3JQcmVj
ZWRlbmNlW29wXSB8fCAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodG9r
ZW4udHlwZSA9PT0gNCAvKiBLZXl3b3JkICovKSB7Ci0gICAgICAgICAgICAgICAgcHJlY2VkZW5j
ZSA9IChvcCA9PT0gJ2luc3RhbmNlb2YnIHx8ICh0aGlzLmNvbnRleHQuYWxsb3dJbiAmJiBvcCA9
PT0gJ2luJykpID8gNyA6IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBwcmVjZWRlbmNlID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiBwcmVjZWRlbmNlOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBl
LnBhcnNlQmluYXJ5RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBz
dGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMu
aW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKTsK
LSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAgICAgdmFy
IHByZWMgPSB0aGlzLmJpbmFyeVByZWNlZGVuY2UodG9rZW4pOwotICAgICAgICAgICAgaWYgKHBy
ZWMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICB2YXIgbWFya2VycyA9IFtzdGFydFRva2VuLCB0aGlzLmxvb2thaGVhZF07Ci0gICAgICAg
ICAgICAgICAgdmFyIGxlZnQgPSBleHByOwotICAgICAgICAgICAgICAgIHZhciByaWdodCA9IHRo
aXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9u
KTsKLSAgICAgICAgICAgICAgICB2YXIgc3RhY2sgPSBbbGVmdCwgdG9rZW4udmFsdWUsIHJpZ2h0
XTsKLSAgICAgICAgICAgICAgICB2YXIgcHJlY2VkZW5jZXMgPSBbcHJlY107Ci0gICAgICAgICAg
ICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJlYyA9IHRoaXMuYmlu
YXJ5UHJlY2VkZW5jZSh0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChw
cmVjIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJlZHVjZTogbWFrZSBhIGJpbmFyeSBl
eHByZXNzaW9uIGZyb20gdGhlIHRocmVlIHRvcG1vc3QgZW50cmllcy4KLSAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKChzdGFjay5sZW5ndGggPiAyKSAmJiAocHJlYyA8PSBwcmVjZWRlbmNlc1tw
cmVjZWRlbmNlcy5sZW5ndGggLSAxXSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0
ID0gc3RhY2sucG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3IgPSBz
dGFjay5wb3AoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2VzLnBvcCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHN0YWNrLnBvcCgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbWFya2Vycy5wb3AoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5zdGFydE5vZGUobWFya2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFdKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9k
ZS5CaW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkpKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBTaGlmdC4KLSAgICAgICAgICAgICAg
ICAgICAgc3RhY2sucHVzaCh0aGlzLm5leHRUb2tlbigpLnZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgcHJlY2VkZW5jZXMucHVzaChwcmVjKTsKLSAgICAgICAgICAgICAgICAgICAgbWFya2Vy
cy5wdXNoKHRoaXMubG9va2FoZWFkKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0
aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lv
bikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBGaW5hbCByZWR1Y2Ug
dG8gY2xlYW4tdXAgdGhlIHN0YWNrLgotICAgICAgICAgICAgICAgIHZhciBpID0gc3RhY2subGVu
Z3RoIC0gMTsKLSAgICAgICAgICAgICAgICBleHByID0gc3RhY2tbaV07Ci0gICAgICAgICAgICAg
ICAgbWFya2Vycy5wb3AoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoaSA+IDEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZShtYXJrZXJzLnBvcCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdG9yID0gc3RhY2tbaSAtIDFdOwotICAgICAg
ICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5CaW5hcnlF
eHByZXNzaW9uKG9wZXJhdG9yLCBzdGFja1tpIC0gMl0sIGV4cHIpKTsKLSAgICAgICAgICAgICAg
ICAgICAgaSAtPSAyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBleHByOwotICAgICAgICB9OwotICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0
aHViLmlvL2VjbWEyNjIvI3NlYy1jb25kaXRpb25hbC1vcGVyYXRvcgotICAgICAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgIHZh
ciBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VCaW5hcnlFeHByZXNz
aW9uKTsKLSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCc/JykpIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4g
PSB0aGlzLmNvbnRleHQuYWxsb3dJbjsKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxs
b3dJbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnNlcXVlbnQgPSB0aGlzLmlzb2xh
dGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKLSAgICAgICAg
ICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKLSAgICAgICAg
ICAgICAgICB0aGlzLmV4cGVjdCgnOicpOwotICAgICAgICAgICAgICAgIHZhciBhbHRlcm5hdGUg
PSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KTsKLSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShz
dGFydFRva2VuKSwgbmV3IE5vZGUuQ29uZGl0aW9uYWxFeHByZXNzaW9uKGV4cHIsIGNvbnNlcXVl
bnQsIGFsdGVybmF0ZSkpOwotICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1l
bnRUYXJnZXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5n
RWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGV4cHI7
Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8j
c2VjLWFzc2lnbm1lbnQtb3BlcmF0b3JzCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUuY2hlY2tQ
YXR0ZXJuUGFyYW0gPSBmdW5jdGlvbiAob3B0aW9ucywgcGFyYW0pIHsKLSAgICAgICAgICAgIHN3
aXRjaCAocGFyYW0udHlwZSkgewotICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4
LklkZW50aWZpZXI6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQYXJhbShvcHRp
b25zLCBwYXJhbSwgcGFyYW0ubmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LlJlc3RFbGVtZW50OgotICAgICAgICAg
ICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LlJlc3RQcm9wZXJ0eToKLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5jaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbS5hcmd1bWVudCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEu
U3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOgotICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNr
UGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtLmxlZnQpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5BcnJheVBhdHRlcm46
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW0uZWxlbWVudHMu
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS5lbGVtZW50
c1tpXSAhPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tQ
YXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0uZWxlbWVudHNbaV0pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4Lk9iamVjdFBhdHRlcm46
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW0ucHJvcGVydGll
cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0g
cGFyYW0ucHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tQ
YXR0ZXJuUGFyYW0ob3B0aW9ucywgKHByb3BlcnR5LnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5S
ZXN0UHJvcGVydHkpID8gcHJvcGVydHkgOiBwcm9wZXJ0eS52YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBvcHRpb25zLnNpbXBsZSA9IG9wdGlvbnMuc2ltcGxlICYmIChwYXJhbSBpbnN0YW5jZW9m
IE5vZGUuSWRlbnRpZmllcik7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUu
cmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QgPSBmdW5jdGlvbiAoZXhwcikgewotICAgICAg
ICAgICAgdmFyIHBhcmFtcyA9IFtleHByXTsKLSAgICAgICAgICAgIHZhciBvcHRpb25zOwotICAg
ICAgICAgICAgdmFyIGFzeW5jQXJyb3cgPSBmYWxzZTsKLSAgICAgICAgICAgIHN3aXRjaCAoZXhw
ci50eXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmll
cjoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBBcnJv
d1BhcmFtZXRlclBsYWNlSG9sZGVyOgotICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSBleHBy
LnBhcmFtczsKLSAgICAgICAgICAgICAgICAgICAgYXN5bmNBcnJvdyA9IGV4cHIuYXN5bmM7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
b3B0aW9ucyA9IHsKLSAgICAgICAgICAgICAgICBzaW1wbGU6IHRydWUsCi0gICAgICAgICAgICAg
ICAgcGFyYW1TZXQ6IHt9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyYW0g
PSBwYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09IHN5bnRheF8x
LlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybikgewotICAgICAgICAgICAgICAgICAgICBpZiAocGFy
YW0ucmlnaHQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LllpZWxkRXhwcmVzc2lvbikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnJpZ2h0LmFyZ3VtZW50KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2th
aGVhZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbS5yaWdodC50eXBlID0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXI7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbS5yaWdodC5uYW1lID0gJ3lpZWxkJzsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbS5yaWdodC5hcmd1bWVudDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZSBwYXJhbS5yaWdodC5kZWxlZ2F0ZTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhc3luY0Fy
cm93ICYmIHBhcmFtLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyICYmIHBhcmFt
Lm5hbWUgPT09ICdhd2FpdCcpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhw
ZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHRoaXMuY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0pOwotICAgICAgICAg
ICAgICAgIHBhcmFtc1tpXSA9IHBhcmFtOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KHRoaXMuY29udGV4dC5zdHJpY3QgfHwgIXRoaXMuY29udGV4dC5hbGxvd1lpZWxkKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtID0gcGFyYW1zW2ldOwotICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyYW0udHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LllpZWxkRXhwcmVzc2lvbikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlz
Lmxvb2thaGVhZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3B0aW9ucy5tZXNzYWdlID09PSBtZXNzYWdl
c18xLk1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZSkgewotICAgICAgICAgICAgICAgIHZhciB0b2tl
biA9IHRoaXMuY29udGV4dC5zdHJpY3QgPyBvcHRpb25zLnN0cmljdGVkIDogb3B0aW9ucy5maXJz
dFJlc3RyaWN0ZWQ7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0
b2tlbiwgb3B0aW9ucy5tZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biB7Ci0gICAgICAgICAgICAgICAgc2ltcGxlOiBvcHRpb25zLnNpbXBsZSwKLSAgICAgICAgICAg
ICAgICBwYXJhbXM6IHBhcmFtcywKLSAgICAgICAgICAgICAgICBzdHJpY3RlZDogb3B0aW9ucy5z
dHJpY3RlZCwKLSAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG9wdGlvbnMuZmlyc3RS
ZXN0cmljdGVkLAotICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZQotICAg
ICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGV4cHI7
Ci0gICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5hbGxvd1lpZWxkICYmIHRoaXMubWF0Y2hL
ZXl3b3JkKCd5aWVsZCcpKSB7Ci0gICAgICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VZaWVs
ZEV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICAg
ICAgdmFyIHRva2VuID0gc3RhcnRUb2tlbjsKLSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5w
YXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgICAgIGlmICh0b2tlbi50
eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8gJiYgKHRva2VuLmxpbmVOdW1iZXIgPT09IHRoaXMu
bG9va2FoZWFkLmxpbmVOdW1iZXIpICYmIHRva2VuLnZhbHVlID09PSAnYXN5bmMnICYmICh0aGlz
Lmxvb2thaGVhZC50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBhcmcgPSB0aGlzLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTsKLSAgICAgICAg
ICAgICAgICAgICAgZXhwciA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEFycm93
UGFyYW1ldGVyUGxhY2VIb2xkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFth
cmddLAotICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmM6IHRydWUKLSAgICAgICAgICAgICAg
ICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGV4cHIudHlw
ZSA9PT0gQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciB8fCB0aGlzLm1hdGNoKCc9PicpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2Vj
LWFycm93LWZ1bmN0aW9uLWRlZmluaXRpb25zCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIGlzQXN5bmMgPSBleHByLmFzeW5jOwotICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9
IHRoaXMucmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoZXhwcik7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChsaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNM
aW5lVGVybWluYXRvcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJh
dGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0
aWFsaXplZE5hbWVFcnJvciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJl
dmlvdXNTdHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0OwotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHByZXZpb3VzQWxsb3dTdHJpY3REaXJlY3RpdmUgPSB0aGlzLmNvbnRleHQuYWxsb3dT
dHJpY3REaXJlY3RpdmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxs
b3dTdHJpY3REaXJlY3RpdmUgPSBsaXN0LnNpbXBsZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0F3YWl0ID0gdGhpcy5jb250ZXh0LmF3YWl0
OwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmF3YWl0ID0gaXNBc3luYzsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoc3RhcnRU
b2tlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnPT4nKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBib2R5ID0gdGhpcy5tYXRjaCgneycpID8gdGhpcy5wYXJz
ZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhwcmVzc2lvbiA9IGJvZHkudHlwZSAhPT0g
c3ludGF4XzEuU3ludGF4LkJsb2NrU3RhdGVtZW50OwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgbGlzdC5maXJzdFJlc3RyaWN0ZWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKGxpc3QuZmly
c3RSZXN0cmljdGVkLCBsaXN0Lm1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgbGlzdC5z
dHJpY3RlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4
cGVjdGVkVG9rZW4obGlzdC5zdHJpY3RlZCwgbGlzdC5tZXNzYWdlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSBpc0FzeW5jID8gdGhp
cy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Bc3luY0Fycm93RnVuY3Rpb25FeHByZXNzaW9uKGxp
c3QucGFyYW1zLCBib2R5LCBleHByZXNzaW9uKSkgOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24o
bGlzdC5wYXJhbXMsIGJvZHksIGV4cHJlc3Npb24pKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuY29udGV4dC5zdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZSA9IHByZXZpb3VzQWxsb3dT
dHJpY3REaXJlY3RpdmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxs
b3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuY29udGV4dC5hd2FpdCA9IHByZXZpb3VzQXdhaXQ7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh0aGlzLm1hdGNoQXNzaWduKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFs
aWRMSFNJbkFzc2lnbm1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgZXhwci50eXBlID09PSBz
eW50YXhfMS5TeW50YXguSWRlbnRpZmllcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBpZCA9IGV4cHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Nh
bm5lci5pc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEu
TWVzc2FnZXMuU3RyaWN0TEhTQXNzaWdubWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNTdHJp
Y3RNb2RlUmVzZXJ2ZWRXb3JkKGlkLm5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVz
c2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXRoaXMubWF0Y2goJz0nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhw
cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3Bl
cmF0b3IgPSB0b2tlbi52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciByaWdodCA9
IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24p
OwotICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFy
dE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkFzc2lnbm1lbnRFeHByZXNzaW9uKG9wZXJhdG9y
LCBleHByLCByaWdodCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZp
cnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
ZXhwcjsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
MjYyLyNzZWMtY29tbWEtb3BlcmF0b3IKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUV4
cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRo
aXMubG9va2FoZWFkOwotICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlzLmlzb2xhdGVDb3Zlckdy
YW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKLSAgICAgICAgICAgIGlmICh0
aGlzLm1hdGNoKCcsJykpIHsKLSAgICAgICAgICAgICAgICB2YXIgZXhwcmVzc2lvbnMgPSBbXTsK
LSAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKGV4cHIpOwotICAgICAgICAgICAgICAg
IHdoaWxlICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSAyIC8qIEVPRiAqLykgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJywnKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaCh0aGlz
Lmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKHRo
aXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5TZXF1ZW5jZUV4cHJlc3Npb24oZXhw
cmVzc2lvbnMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBleHByOwotICAg
ICAgICB9OwotICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1i
bG9jawotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0gPSBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgc3RhdGVtZW50OwotICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7Ci0gICAgICAgICAgICB0aGlzLmNv
bnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAodGhpcy5sb29r
YWhlYWQudHlwZSA9PT0gNCAvKiBLZXl3b3JkICovKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNo
ICh0aGlzLmxvb2thaGVhZC52YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlICdleHBv
cnQnOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNNb2R1bGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRv
a2VuKHRoaXMubG9va2FoZWFkLCBtZXNzYWdlc18xLk1lc3NhZ2VzLklsbGVnYWxFeHBvcnREZWNs
YXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdpbXBvcnQn
OgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hJbXBvcnRDYWxsKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVz
c2lvblN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlz
LmNvbnRleHQuaXNNb2R1bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCwgbWVzc2FnZXNfMS5NZXNz
YWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNl
SW1wb3J0RGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdjb25zdCc6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlTGV4aWNhbERl
Y2xhcmF0aW9uKHsgaW5Gb3I6IGZhbHNlIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAn
Y2xhc3MnOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUNs
YXNzRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlICdsZXQnOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVt
ZW50ID0gdGhpcy5pc0xleGljYWxEZWNsYXJhdGlvbigpID8gdGhpcy5wYXJzZUxleGljYWxEZWNs
YXJhdGlvbih7IGluRm9yOiBmYWxzZSB9KSA6IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RhdGVtZW50
ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRlbWVudDsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJz
ZUJsb2NrID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0
ZU5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7Ci0gICAgICAgICAgICB2YXIg
YmxvY2sgPSBbXTsKLSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHRoaXMubWF0Y2goJ30nKSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYmxvY2sucHVzaCh0aGlzLnBhcnNlU3RhdGVt
ZW50TGlzdEl0ZW0oKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdCgn
fScpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQmxv
Y2tTdGF0ZW1lbnQoYmxvY2spKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gaHR0cHM6Ly90YzM5
LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbGV0LWFuZC1jb25zdC1kZWNsYXJhdGlvbnMKLSAgICAg
ICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUxleGljYWxCaW5kaW5nID0gZnVuY3Rpb24gKGtpbmQs
IG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0g
ICAgICAgICAgICB2YXIgcGFyYW1zID0gW107Ci0gICAgICAgICAgICB2YXIgaWQgPSB0aGlzLnBh
cnNlUGF0dGVybihwYXJhbXMsIGtpbmQpOwotICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5z
dHJpY3QgJiYgaWQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIpIHsKLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoaWQubmFtZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuU3RyaWN0VmFyTmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdmFyIGluaXQgPSBudWxsOwotICAgICAgICAgICAgaWYgKGtpbmQgPT09ICdjb25z
dCcpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2hLZXl3b3JkKCdpbicpICYmICF0
aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMubWF0Y2goJz0nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0
VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmlzb2xhdGVDb3Zl
ckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkRlY2xhcmF0aW9uTWlzc2lu
Z0luaXRpYWxpemVyLCAnY29uc3QnKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKCghb3B0aW9ucy5p
bkZvciAmJiBpZC50eXBlICE9PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcikgfHwgdGhpcy5t
YXRjaCgnPScpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJz0nKTsKLSAgICAgICAg
ICAgICAgICBpbml0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0b3IoaWQsIGluaXQpKTsKLSAg
ICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUJpbmRpbmdMaXN0ID0gZnVu
Y3Rpb24gKGtpbmQsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBsaXN0ID0gW3RoaXMucGFy
c2VMZXhpY2FsQmluZGluZyhraW5kLCBvcHRpb25zKV07Ci0gICAgICAgICAgICB3aGlsZSAodGhp
cy5tYXRjaCgnLCcpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAg
ICAgICAgICAgICBsaXN0LnB1c2godGhpcy5wYXJzZUxleGljYWxCaW5kaW5nKGtpbmQsIG9wdGlv
bnMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBsaXN0OwotICAgICAgICB9
OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLmlzTGV4aWNhbERlY2xhcmF0aW9uID0gZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zY2FubmVyLnNhdmVTdGF0ZSgp
OwotICAgICAgICAgICAgdGhpcy5zY2FubmVyLnNjYW5Db21tZW50cygpOwotICAgICAgICAgICAg
dmFyIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7Ci0gICAgICAgICAgICB0aGlzLnNjYW5uZXIu
cmVzdG9yZVN0YXRlKHN0YXRlKTsKLSAgICAgICAgICAgIHJldHVybiAobmV4dC50eXBlID09PSAz
IC8qIElkZW50aWZpZXIgKi8pIHx8Ci0gICAgICAgICAgICAgICAgKG5leHQudHlwZSA9PT0gNyAv
KiBQdW5jdHVhdG9yICovICYmIG5leHQudmFsdWUgPT09ICdbJykgfHwKLSAgICAgICAgICAgICAg
ICAobmV4dC50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYgbmV4dC52YWx1ZSA9PT0gJ3sn
KSB8fAotICAgICAgICAgICAgICAgIChuZXh0LnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyAmJiBu
ZXh0LnZhbHVlID09PSAnbGV0JykgfHwKLSAgICAgICAgICAgICAgICAobmV4dC50eXBlID09PSA0
IC8qIEtleXdvcmQgKi8gJiYgbmV4dC52YWx1ZSA9PT0gJ3lpZWxkJyk7Ci0gICAgICAgIH07Ci0g
ICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VMZXhpY2FsRGVjbGFyYXRpb24gPSBmdW5jdGlv
biAob3B0aW9ucykgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
LSAgICAgICAgICAgIHZhciBraW5kID0gdGhpcy5uZXh0VG9rZW4oKS52YWx1ZTsKLSAgICAgICAg
ICAgIGFzc2VydF8xLmFzc2VydChraW5kID09PSAnbGV0JyB8fCBraW5kID09PSAnY29uc3QnLCAn
TGV4aWNhbCBkZWNsYXJhdGlvbiBtdXN0IGJlIGVpdGhlciBsZXQgb3IgY29uc3QnKTsKLSAgICAg
ICAgICAgIHZhciBkZWNsYXJhdGlvbnMgPSB0aGlzLnBhcnNlQmluZGluZ0xpc3Qoa2luZCwgb3B0
aW9ucyk7Ci0gICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKLSAgICAgICAgICAg
IHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24o
ZGVjbGFyYXRpb25zLCBraW5kKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIGh0dHBzOi8vdGMz
OS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWRlc3RydWN0dXJpbmctYmluZGluZy1wYXR0ZXJucwot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQmluZGluZ1Jlc3RFbGVtZW50ID0gZnVuY3Rp
b24gKHBhcmFtcywga2luZCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTsKLSAgICAgICAgICAgIHZhciBh
cmcgPSB0aGlzLnBhcnNlUGF0dGVybihwYXJhbXMsIGtpbmQpOwotICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuUmVzdEVsZW1lbnQoYXJnKSk7Ci0gICAgICAg
IH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VBcnJheVBhdHRlcm4gPSBmdW5jdGlv
biAocGFyYW1zLCBraW5kKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9k
ZSgpOwotICAgICAgICAgICAgdGhpcy5leHBlY3QoJ1snKTsKLSAgICAgICAgICAgIHZhciBlbGVt
ZW50cyA9IFtdOwotICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCddJykpIHsKLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5tYXRjaCgnLi4uJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW1lbnRzLnB1c2godGhpcy5wYXJzZUJpbmRpbmdSZXN0RWxlbWVudChwYXJhbXMsIGtpbmQp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bWVudHMucHVzaCh0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcywga2luZCkpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRj
aCgnXScpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdGhpcy5leHBlY3QoJ10nKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLkFycmF5UGF0dGVybihlbGVtZW50cykpOwotICAgICAgICB9Owot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJvcGVydHlQYXR0ZXJuID0gZnVuY3Rpb24g
KHBhcmFtcywga2luZCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKLSAgICAgICAgICAgIHZhciBjb21wdXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIHNo
b3J0aGFuZCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIG1ldGhvZCA9IGZhbHNlOwotICAgICAg
ICAgICAgdmFyIGtleTsKLSAgICAgICAgICAgIHZhciB2YWx1ZTsKLSAgICAgICAgICAgIGlmICh0
aGlzLmxvb2thaGVhZC50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pIHsKLSAgICAgICAgICAg
ICAgICB2YXIga2V5VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgICAgICBrZXkg
PSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgdmFyIGlu
aXQgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIoa2V5VG9rZW4udmFs
dWUpKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHBhcmFtcy5wdXNoKGtleVRva2VuKTsKLSAgICAgICAgICAgICAgICAgICAgc2hv
cnRoYW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24oKTsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmZpbmFsaXplKHRoaXMuc3Rh
cnROb2RlKGtleVRva2VuKSwgbmV3IE5vZGUuQXNzaWdubWVudFBhdHRlcm4oaW5pdCwgZXhwcikp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5tYXRj
aCgnOicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGtleVRva2VuKTsKLSAg
ICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBpbml0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJzonKTsKLSAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSB0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcywga2luZCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7Ci0gICAgICAgICAgICAgICAg
a2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Ci0gICAgICAgICAgICAgICAgdGhp
cy5leHBlY3QoJzonKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VQYXR0ZXJu
V2l0aERlZmF1bHQocGFyYW1zLCBraW5kKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlByb3BlcnR5KCdpbml0Jywga2V5LCBj
b21wdXRlZCwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kKSk7Ci0gICAgICAgIH07Ci0gICAgICAg
IFBhcnNlci5wcm90b3R5cGUucGFyc2VSZXN0UHJvcGVydHkgPSBmdW5jdGlvbiAocGFyYW1zLCBr
aW5kKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAg
ICAgICAgdGhpcy5leHBlY3QoJy4uLicpOwotICAgICAgICAgICAgdmFyIGFyZyA9IHRoaXMucGFy
c2VQYXR0ZXJuKHBhcmFtcyk7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuRGVmYXVs
dFJlc3RQcm9wZXJ0eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXRoaXMubWF0
Y2goJ30nKSkgewotICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1l
c3NhZ2VzLlByb3BlcnR5QWZ0ZXJSZXN0UHJvcGVydHkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuUmVzdFByb3BlcnR5KGFy
ZykpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlT2JqZWN0UGF0
dGVybiA9IGZ1bmN0aW9uIChwYXJhbXMsIGtpbmQpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0g
dGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdOwotICAg
ICAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsKLSAgICAgICAgICAgIHdoaWxlICghdGhpcy5tYXRj
aCgnfScpKSB7Ci0gICAgICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHRoaXMubWF0Y2goJy4u
LicpID8gdGhpcy5wYXJzZVJlc3RQcm9wZXJ0eShwYXJhbXMsIGtpbmQpIDogdGhpcy5wYXJzZVBy
b3BlcnR5UGF0dGVybihwYXJhbXMsIGtpbmQpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMu
bWF0Y2goJ30nKSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd9
Jyk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5PYmpl
Y3RQYXR0ZXJuKHByb3BlcnRpZXMpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZVBhdHRlcm4gPSBmdW5jdGlvbiAocGFyYW1zLCBraW5kKSB7Ci0gICAgICAgICAg
ICB2YXIgcGF0dGVybjsKLSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCdbJykpIHsKLSAgICAg
ICAgICAgICAgICBwYXR0ZXJuID0gdGhpcy5wYXJzZUFycmF5UGF0dGVybihwYXJhbXMsIGtpbmQp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgneycpKSB7
Ci0gICAgICAgICAgICAgICAgcGF0dGVybiA9IHRoaXMucGFyc2VPYmplY3RQYXR0ZXJuKHBhcmFt
cywga2luZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2xldCcpICYmIChraW5kID09PSAnY29uc3QnIHx8
IGtpbmQgPT09ICdsZXQnKSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5l
eHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkLCBtZXNzYWdlc18xLk1lc3NhZ2VzLkxldEluTGV4
aWNhbEJpbmRpbmcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYXJhbXMu
cHVzaCh0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAgICAgICAgcGF0dGVybiA9IHRoaXMucGFy
c2VWYXJpYWJsZUlkZW50aWZpZXIoa2luZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gcGF0dGVybjsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJz
ZVBhdHRlcm5XaXRoRGVmYXVsdCA9IGZ1bmN0aW9uIChwYXJhbXMsIGtpbmQpIHsKLSAgICAgICAg
ICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICB2YXIgcGF0
dGVybiA9IHRoaXMucGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCk7Ci0gICAgICAgICAgICBpZiAo
dGhpcy5tYXRjaCgnPScpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAg
ICAgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93
WWllbGQ7Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIHZhciByaWdodCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlz
LnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwotICAgICAgICAgICAgICAgIHRoaXMuY29udGV4
dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwotICAgICAgICAgICAgICAgIHBhdHRl
cm4gPSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5B
c3NpZ25tZW50UGF0dGVybihwYXR0ZXJuLCByaWdodCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHBhdHRlcm47Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIGh0dHBzOi8vdGMz
OS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXZhcmlhYmxlLXN0YXRlbWVudAotICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyID0gZnVuY3Rpb24gKGtpbmQpIHsK
LSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2
YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUg
PT09IDQgLyogS2V5d29yZCAqLyAmJiB0b2tlbi52YWx1ZSA9PT0gJ3lpZWxkJykgewotICAgICAg
ICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMu
U3RyaWN0UmVzZXJ2ZWRXb3JkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAoIXRoaXMuY29udGV4dC5hbGxvd1lpZWxkKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgIT09IDMgLyogSWRl
bnRpZmllciAqLykgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYm
IHRva2VuLnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyAmJiB0aGlzLnNjYW5uZXIuaXNTdHJpY3RN
b2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICB0aGlz
LnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmlj
dFJlc2VydmVkV29yZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCB8fCB0b2tlbi52
YWx1ZSAhPT0gJ2xldCcgfHwga2luZCAhPT0gJ3ZhcicpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAoKHRoaXMuY29udGV4dC5pc01vZHVsZSB8fCB0aGlzLmNvbnRleHQuYXdhaXQpICYmIHRva2Vu
LnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLyAmJiB0b2tlbi52YWx1ZSA9PT0gJ2F3YWl0Jykg
ewotICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4pOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpOwotICAgICAgICB9OwotICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIChvcHRpb25z
KSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAg
ICAgdmFyIHBhcmFtcyA9IFtdOwotICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5wYXJzZVBhdHRl
cm4ocGFyYW1zLCAndmFyJyk7Ci0gICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAm
JiBpZC50eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcikgewotICAgICAgICAgICAg
ICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgewotICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJp
Y3RWYXJOYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB2YXIgaW5pdCA9IG51bGw7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICBpbml0ID0g
dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChpZC50eXBlICE9PSBzeW50YXhf
MS5TeW50YXguSWRlbnRpZmllciAmJiAhb3B0aW9ucy5pbkZvcikgewotICAgICAgICAgICAgICAg
IHRoaXMuZXhwZWN0KCc9Jyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhp
cy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0b3IoaWQsIGluaXQpKTsK
LSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVZhcmlhYmxlRGVjbGFy
YXRpb25MaXN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBvcHQgPSB7
IGluRm9yOiBvcHRpb25zLmluRm9yIH07Ci0gICAgICAgICAgICB2YXIgbGlzdCA9IFtdOwotICAg
ICAgICAgICAgbGlzdC5wdXNoKHRoaXMucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKG9wdCkpOwot
ICAgICAgICAgICAgd2hpbGUgKHRoaXMubWF0Y2goJywnKSkgewotICAgICAgICAgICAgICAgIHRo
aXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgbGlzdC5wdXNoKHRoaXMucGFyc2VWYXJp
YWJsZURlY2xhcmF0aW9uKG9wdCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IGxpc3Q7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VWYXJpYWJs
ZVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5j
cmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3ZhcicpOwotICAg
ICAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IHRoaXMucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9u
TGlzdCh7IGluRm9yOiBmYWxzZSB9KTsKLSAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xv
bigpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVmFy
aWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsICd2YXInKSk7Ci0gICAgICAgIH07Ci0gICAg
ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVtcHR5LXN0YXRlbWVu
dAotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRW1wdHlTdGF0ZW1lbnQgPSBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAg
ICAgICAgdGhpcy5leHBlY3QoJzsnKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXpl
KG5vZGUsIG5ldyBOb2RlLkVtcHR5U3RhdGVtZW50KCkpOwotICAgICAgICB9OwotICAgICAgICAv
LyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1leHByZXNzaW9uLXN0YXRlbWVu
dAotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCA9IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0g
ICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgICAg
ICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLkV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcikpOwotICAgICAgICB9
OwotICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pZi1zdGF0
ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUlmQ2xhdXNlID0gZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgdGhpcy5tYXRjaEtl
eXdvcmQoJ2Z1bmN0aW9uJykpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3Io
bWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RGdW5jdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVN0YXRlbWVudCgpOwotICAgICAgICB9OwotICAgICAg
ICBQYXJzZXIucHJvdG90eXBlLnBhcnNlSWZTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGNv
bnNlcXVlbnQ7Ci0gICAgICAgICAgICB2YXIgYWx0ZXJuYXRlID0gbnVsbDsKLSAgICAgICAgICAg
IHRoaXMuZXhwZWN0S2V5d29yZCgnaWYnKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7
Ci0gICAgICAgICAgICB2YXIgdGVzdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAg
ICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSAmJiB0aGlzLmNvbmZpZy50b2xlcmFudCkgewotICAg
ICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4o
KSk7Ci0gICAgICAgICAgICAgICAgY29uc2VxdWVudCA9IHRoaXMuZmluYWxpemUodGhpcy5jcmVh
dGVOb2RlKCksIG5ldyBOb2RlLkVtcHR5U3RhdGVtZW50KCkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKLSAgICAg
ICAgICAgICAgICBjb25zZXF1ZW50ID0gdGhpcy5wYXJzZUlmQ2xhdXNlKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdlbHNlJykpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gdGhp
cy5wYXJzZUlmQ2xhdXNlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWZTdGF0ZW1lbnQo
dGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIGh0
dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWRvLXdoaWxlLXN0YXRlbWVudAotICAg
ICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRG9XaGlsZVN0YXRlbWVudCA9IGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAg
ICB0aGlzLmV4cGVjdEtleXdvcmQoJ2RvJyk7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNJbkl0
ZXJhdGlvbiA9IHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbjsKLSAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5pbkl0ZXJhdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICB2YXIgYm9keSA9IHRoaXMucGFy
c2VTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IHBy
ZXZpb3VzSW5JdGVyYXRpb247Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3doaWxl
Jyk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdCgnKCcpOwotICAgICAgICAgICAgdmFyIHRlc3Qg
PSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcp
JykgJiYgdGhpcy5jb25maWcudG9sZXJhbnQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRvbGVy
YXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnOycpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRG9XaGlsZVN0YXRlbWVu
dChib2R5LCB0ZXN0KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRo
dWIuaW8vZWNtYTI2Mi8jc2VjLXdoaWxlLXN0YXRlbWVudAotICAgICAgICBQYXJzZXIucHJvdG90
eXBlLnBhcnNlV2hpbGVTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIg
bm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGJvZHk7Ci0gICAgICAg
ICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3doaWxlJyk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVj
dCgnKCcpOwotICAgICAgICAgICAgdmFyIHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOwot
ICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykgJiYgdGhpcy5jb25maWcudG9sZXJhbnQp
IHsKLSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4
dFRva2VuKCkpOwotICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmZpbmFsaXplKHRoaXMuY3Jl
YXRlTm9kZSgpLCBuZXcgTm9kZS5FbXB0eVN0YXRlbWVudCgpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7Ci0gICAg
ICAgICAgICAgICAgdmFyIHByZXZpb3VzSW5JdGVyYXRpb24gPSB0aGlzLmNvbnRleHQuaW5JdGVy
YXRpb247Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOwotICAgICAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IHByZXZpb3VzSW5JdGVyYXRpb247Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5XaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8v
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWZvci1zdGF0ZW1lbnQKLSAgICAg
ICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZm9yLWluLWFuZC1mb3It
b2Ytc3RhdGVtZW50cwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRm9yU3RhdGVtZW50
ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGluaXQgPSBudWxsOwotICAgICAgICAg
ICAgdmFyIHRlc3QgPSBudWxsOwotICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IG51bGw7Ci0gICAg
ICAgICAgICB2YXIgZm9ySW4gPSB0cnVlOwotICAgICAgICAgICAgdmFyIGxlZnQsIHJpZ2h0Owot
ICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHRo
aXMuZXhwZWN0S2V5d29yZCgnZm9yJyk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdCgnKCcpOwot
ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJzsnKSkgewotICAgICAgICAgICAgICAgIHRoaXMu
bmV4dFRva2VuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ3ZhcicpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGluaXQgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5u
ZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJbiA9IHRo
aXMuY29udGV4dC5hbGxvd0luOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxs
b3dJbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRpb25zID0gdGhp
cy5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KHsgaW5Gb3I6IHRydWUgfSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiB0aGlzLm1h
dGNoS2V5d29yZCgnaW4nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY2wgPSBk
ZWNsYXJhdGlvbnNbMF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbC5pbml0ICYm
IChkZWNsLmlkLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5BcnJheVBhdHRlcm4gfHwgZGVjbC5p
ZC50eXBlID09PSBzeW50YXhfMS5TeW50YXguT2JqZWN0UGF0dGVybiB8fCB0aGlzLmNvbnRleHQu
c3RyaWN0KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJv
cihtZXNzYWdlc18xLk1lc3NhZ2VzLkZvckluT2ZMb29wSW5pdGlhbGl6ZXIsICdmb3ItaW4nKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGluaXQg
PSB0aGlzLmZpbmFsaXplKGluaXQsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFy
YXRpb25zLCAndmFyJykpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4o
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmlnaHQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaW5pdCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiBkZWNsYXJhdGlv
bnNbMF0uaW5pdCA9PT0gbnVsbCAmJiB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmZpbmFsaXplKGluaXQsIG5l
dyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCAndmFyJykpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnQgPSBpbml0OwotICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSB0aGlzLnBh
cnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluaXQg
PSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9ySW4gPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGluaXQgPSB0aGlzLmZpbmFsaXplKGluaXQsIG5ldyBOb2RlLlZhcmlhYmxlRGVj
bGFyYXRpb24oZGVjbGFyYXRpb25zLCAndmFyJykpOwotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5leHBlY3QoJzsnKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnY29uc3QnKSB8
fCB0aGlzLm1hdGNoS2V5d29yZCgnbGV0JykpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5pdCA9
IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgICAgICAgICB2YXIga2luZCA9IHRoaXMu
bmV4dFRva2VuKCkudmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0
LnN0cmljdCAmJiB0aGlzLmxvb2thaGVhZC52YWx1ZSA9PT0gJ2luJykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuSWRlbnRpZmll
cihraW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByaWdodCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpbml0ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4gPSB0
aGlzLmNvbnRleHQuYWxsb3dJbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4
dC5hbGxvd0luID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRp
b25zID0gdGhpcy5wYXJzZUJpbmRpbmdMaXN0KGtpbmQsIHsgaW5Gb3I6IHRydWUgfSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJ
bjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAx
ICYmIGRlY2xhcmF0aW9uc1swXS5pbml0ID09PSBudWxsICYmIHRoaXMubWF0Y2hLZXl3b3JkKCdp
bicpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxpemUo
aW5pdCwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJpZ2h0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbml0ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEgJiYgZGVj
bGFyYXRpb25zWzBdLmluaXQgPT09IG51bGwgJiYgdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3Jk
KCdvZicpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxp
emUoaW5pdCwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9ySW4gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
Y29uc3VtZVNlbWljb2xvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0
aGlzLmZpbmFsaXplKGluaXQsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRp
b25zLCBraW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBpbml0U3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAg
ICAgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0LmFsbG93SW47
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJz
ZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0
LmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlz
Lm1hdGNoS2V5d29yZCgnaW4nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlz
LmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0IHx8IGluaXQudHlwZSA9PT0gc3ludGF4XzEuU3lu
dGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZExIU0luRm9ySW4p
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRF
eHByZXNzaW9uQXNQYXR0ZXJuKGluaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9
IGluaXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IHRoaXMucGFyc2VFeHByZXNz
aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoQ29udGV4
dHVhbEtleXdvcmQoJ29mJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5j
b250ZXh0LmlzQXNzaWdubWVudFRhcmdldCB8fCBpbml0LnR5cGUgPT09IHN5bnRheF8xLlN5bnRh
eC5Bc3NpZ25tZW50RXhwcmVzc2lvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckxvb3Ap
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRF
eHByZXNzaW9uQXNQYXR0ZXJuKGluaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9
IGluaXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IHRoaXMucGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3JJbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMubWF0Y2goJywnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBp
bml0U2VxID0gW2luaXRdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0aGlz
Lm1hdGNoKCcsJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0
VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdFNlcS5wdXNoKHRo
aXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5pdCA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoaW5pdFN0YXJ0VG9rZW4pLCBu
ZXcgTm9kZS5TZXF1ZW5jZUV4cHJlc3Npb24oaW5pdFNlcSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJzsnKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIXRoaXMubWF0Y2goJzsnKSkgewotICAgICAgICAgICAgICAgICAgICB0ZXN0ID0gdGhp
cy5wYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
dGhpcy5leHBlY3QoJzsnKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSkg
ewotICAgICAgICAgICAgICAgICAgICB1cGRhdGUgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBib2R5Owot
ICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykgJiYgdGhpcy5jb25maWcudG9sZXJhbnQp
IHsKLSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4
dFRva2VuKCkpOwotICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLmZpbmFsaXplKHRoaXMuY3Jl
YXRlTm9kZSgpLCBuZXcgTm9kZS5FbXB0eVN0YXRlbWVudCgpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7Ci0gICAg
ICAgICAgICAgICAgdmFyIHByZXZpb3VzSW5JdGVyYXRpb24gPSB0aGlzLmNvbnRleHQuaW5JdGVy
YXRpb247Ci0gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBib2R5ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFy
c2VTdGF0ZW1lbnQpOwotICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9
IHByZXZpb3VzSW5JdGVyYXRpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
KHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgPwotICAgICAgICAgICAgICAgIHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuRm9yU3RhdGVtZW50KGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9k
eSkpIDoKLSAgICAgICAgICAgICAgICBmb3JJbiA/IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5v
ZGUuRm9ySW5TdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpKSA6Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRm9yT2ZTdGF0ZW1lbnQobGVmdCwgcmln
aHQsIGJvZHkpKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5p
by9lY21hMjYyLyNzZWMtY29udGludWUtc3RhdGVtZW50Ci0gICAgICAgIFBhcnNlci5wcm90b3R5
cGUucGFyc2VDb250aW51ZVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZh
ciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdv
cmQoJ2NvbnRpbnVlJyk7Ci0gICAgICAgICAgICB2YXIgbGFiZWwgPSBudWxsOwotICAgICAgICAg
ICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLyAmJiAhdGhp
cy5oYXNMaW5lVGVybWluYXRvcikgewotICAgICAgICAgICAgICAgIHZhciBpZCA9IHRoaXMucGFy
c2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgICAgICAgICBsYWJlbCA9IGlkOwotICAg
ICAgICAgICAgICAgIHZhciBrZXkgPSAnJCcgKyBpZC5uYW1lOwotICAgICAgICAgICAgICAgIGlm
ICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29udGV4dC5sYWJl
bFNldCwga2V5KSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2Fn
ZXNfMS5NZXNzYWdlcy5Vbmtub3duTGFiZWwsIGlkLm5hbWUpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOwotICAg
ICAgICAgICAgaWYgKGxhYmVsID09PSBudWxsICYmICF0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24p
IHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5J
bGxlZ2FsQ29udGludWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQ29udGludWVTdGF0ZW1lbnQobGFiZWwpKTsKLSAgICAg
ICAgfTsKLSAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYnJl
YWstc3RhdGVtZW50Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VCcmVha1N0YXRlbWVu
dCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2Rl
KCk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2JyZWFrJyk7Ci0gICAgICAgICAg
ICB2YXIgbGFiZWwgPSBudWxsOwotICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUg
PT09IDMgLyogSWRlbnRpZmllciAqLyAmJiAhdGhpcy5oYXNMaW5lVGVybWluYXRvcikgewotICAg
ICAgICAgICAgICAgIHZhciBpZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLSAg
ICAgICAgICAgICAgICB2YXIga2V5ID0gJyQnICsgaWQubmFtZTsKLSAgICAgICAgICAgICAgICBp
ZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbnRleHQubGFi
ZWxTZXQsIGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3Nh
Z2VzXzEuTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBpZC5uYW1lKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgbGFiZWwgPSBpZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHRoaXMuY29uc3VtZVNlbWljb2xvbigpOwotICAgICAgICAgICAgaWYgKGxhYmVsID09PSBudWxs
ICYmICF0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gJiYgIXRoaXMuY29udGV4dC5pblN3aXRjaCkg
ewotICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkls
bGVnYWxCcmVhayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5h
bGl6ZShub2RlLCBuZXcgTm9kZS5CcmVha1N0YXRlbWVudChsYWJlbCkpOwotICAgICAgICB9Owot
ICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZXR1cm4tc3Rh
dGVtZW50Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VSZXR1cm5TdGF0ZW1lbnQgPSBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9k
eSkgewotICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3Nh
Z2VzLklsbGVnYWxSZXR1cm4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG5vZGUg
PSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgncmV0
dXJuJyk7Ci0gICAgICAgICAgICB2YXIgaGFzQXJndW1lbnQgPSAhdGhpcy5tYXRjaCgnOycpICYm
ICF0aGlzLm1hdGNoKCd9JykgJiYKLSAgICAgICAgICAgICAgICAhdGhpcy5oYXNMaW5lVGVybWlu
YXRvciAmJiB0aGlzLmxvb2thaGVhZC50eXBlICE9PSAyIC8qIEVPRiAqLzsKLSAgICAgICAgICAg
IHZhciBhcmd1bWVudCA9IGhhc0FyZ3VtZW50ID8gdGhpcy5wYXJzZUV4cHJlc3Npb24oKSA6IG51
bGw7Ci0gICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlJldHVyblN0YXRlbWVudChhcmd1bWVu
dCkpOwotICAgICAgICB9OwotICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEy
NjIvI3NlYy13aXRoLXN0YXRlbWVudAotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlV2l0
aFN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQu
c3RyaWN0KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEu
TWVzc2FnZXMuU3RyaWN0TW9kZVdpdGgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBib2R5OwotICAgICAg
ICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCd3aXRoJyk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVj
dCgnKCcpOwotICAgICAgICAgICAgdmFyIG9iamVjdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7
Ci0gICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSAmJiB0aGlzLmNvbmZpZy50b2xlcmFu
dCkgewotICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5u
ZXh0VG9rZW4oKSk7Ci0gICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuZmluYWxpemUodGhpcy5j
cmVhdGVOb2RlKCksIG5ldyBOb2RlLkVtcHR5U3RhdGVtZW50KCkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKLSAg
ICAgICAgICAgICAgICBib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuV2l0aFN0
YXRlbWVudChvYmplY3QsIGJvZHkpKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gaHR0cHM6Ly90
YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3dpdGNoLXN0YXRlbWVudAotICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlU3dpdGNoQ2FzZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAg
IHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgdGVzdDsKLSAg
ICAgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICB0ZXN0ID0gbnVsbDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuZXhw
ZWN0S2V5d29yZCgnY2FzZScpOwotICAgICAgICAgICAgICAgIHRlc3QgPSB0aGlzLnBhcnNlRXhw
cmVzc2lvbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5leHBlY3QoJzonKTsK
LSAgICAgICAgICAgIHZhciBjb25zZXF1ZW50ID0gW107Ci0gICAgICAgICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd9JykgfHwgdGhpcy5tYXRjaEtl
eXdvcmQoJ2RlZmF1bHQnKSB8fCB0aGlzLm1hdGNoS2V5d29yZCgnY2FzZScpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBj
b25zZXF1ZW50LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuU3dp
dGNoQ2FzZSh0ZXN0LCBjb25zZXF1ZW50KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5w
cm90b3R5cGUucGFyc2VTd2l0Y2hTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdGhpcy5leHBlY3RL
ZXl3b3JkKCdzd2l0Y2gnKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7Ci0gICAgICAg
ICAgICB2YXIgZGlzY3JpbWluYW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAg
ICAgIHRoaXMuZXhwZWN0KCcpJyk7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNJblN3aXRjaCA9
IHRoaXMuY29udGV4dC5pblN3aXRjaDsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5pblN3aXRj
aCA9IHRydWU7Ci0gICAgICAgICAgICB2YXIgY2FzZXMgPSBbXTsKLSAgICAgICAgICAgIHZhciBk
ZWZhdWx0Rm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7Ci0gICAg
ICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd9
JykpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHZhciBjbGF1c2UgPSB0aGlzLnBhcnNlU3dpdGNoQ2FzZSgpOwotICAgICAg
ICAgICAgICAgIGlmIChjbGF1c2UudGVzdCA9PT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoZGVmYXVsdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93
RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5NdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2gpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGb3VuZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2VzLnB1c2goY2xhdXNl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7Ci0gICAgICAg
ICAgICB0aGlzLmNvbnRleHQuaW5Td2l0Y2ggPSBwcmV2aW91c0luU3dpdGNoOwotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuU3dpdGNoU3RhdGVtZW50KGRp
c2NyaW1pbmFudCwgY2FzZXMpKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gaHR0cHM6Ly90YzM5
LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbGFiZWxsZWQtc3RhdGVtZW50cwotICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlTGFiZWxsZWRTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGV4
cHIgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgdmFyIHN0YXRlbWVudDsK
LSAgICAgICAgICAgIGlmICgoZXhwci50eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmll
cikgJiYgdGhpcy5tYXRjaCgnOicpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4o
KTsKLSAgICAgICAgICAgICAgICB2YXIgaWQgPSBleHByOwotICAgICAgICAgICAgICAgIHZhciBr
ZXkgPSAnJCcgKyBpZC5uYW1lOwotICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBl
Lmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb250ZXh0LmxhYmVsU2V0LCBrZXkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlJlZGVj
bGFyYXRpb24sICdMYWJlbCcsIGlkLm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB0aGlzLmNvbnRleHQubGFiZWxTZXRba2V5XSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgdmFyIGJvZHkgPSB2b2lkIDA7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3
b3JkKCdjbGFzcycpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVj
dGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOwotICAgICAgICAgICAgICAgICAgICBib2R5ID0gdGhp
cy5wYXJzZUNsYXNzRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2Z1bmN0aW9uJykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBkZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdl
c18xLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWNsYXJhdGlvbi5nZW5lcmF0b3IpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1l
c3NhZ2VzXzEuTWVzc2FnZXMuR2VuZXJhdG9ySW5MZWdhY3lDb250ZXh0KTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBib2R5ID0gZGVjbGFyYXRpb247Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBkZWxldGUgdGhpcy5jb250ZXh0LmxhYmVsU2V0W2tleV07Ci0gICAgICAgICAg
ICAgICAgc3RhdGVtZW50ID0gbmV3IE5vZGUuTGFiZWxlZFN0YXRlbWVudChpZCwgYm9keSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLmNv
bnN1bWVTZW1pY29sb24oKTsKLSAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBuZXcgTm9kZS5F
eHByZXNzaW9uU3RhdGVtZW50KGV4cHIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZmluYWxpemUobm9kZSwgc3RhdGVtZW50KTsKLSAgICAgICAgfTsKLSAgICAgICAg
Ly8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdGhyb3ctc3RhdGVtZW50Ci0g
ICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VUaHJvd1N0YXRlbWVudCA9IGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAg
ICB0aGlzLmV4cGVjdEtleXdvcmQoJ3Rocm93Jyk7Ci0gICAgICAgICAgICBpZiAodGhpcy5oYXNM
aW5lVGVybWluYXRvcikgewotICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdl
c18xLk1lc3NhZ2VzLk5ld2xpbmVBZnRlclRocm93KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHZhciBhcmd1bWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICB0
aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXpl
KG5vZGUsIG5ldyBOb2RlLlRocm93U3RhdGVtZW50KGFyZ3VtZW50KSk7Ci0gICAgICAgIH07Ci0g
ICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRyeS1zdGF0ZW1l
bnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNhdGNoQ2xhdXNlID0gZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAg
ICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnY2F0Y2gnKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0
KCcoJyk7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB2YXIgcGFyYW1zID0gW107Ci0gICAgICAgICAgICB2YXIgcGFyYW0g
PSB0aGlzLnBhcnNlUGF0dGVybihwYXJhbXMpOwotICAgICAgICAgICAgdmFyIHBhcmFtTWFwID0g
e307Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgICAgIHZhciBrZXkgPSAnJCcgKyBwYXJhbXNbaV0udmFsdWU7Ci0gICAg
ICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJh
bU1hcCwga2V5KSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVz
c2FnZXNfMS5NZXNzYWdlcy5EdXBsaWNhdGVCaW5kaW5nLCBwYXJhbXNbaV0udmFsdWUpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYXJhbU1hcFtrZXldID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHBhcmFt
LnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtLm5hbWUpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmlj
dENhdGNoVmFyaWFibGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7Ci0gICAgICAgICAgICB2YXIgYm9keSA9IHRoaXMucGFy
c2VCbG9jaygpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5v
ZGUuQ2F0Y2hDbGF1c2UocGFyYW0sIGJvZHkpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZUZpbmFsbHlDbGF1c2UgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICB0aGlzLmV4cGVjdEtleXdvcmQoJ2ZpbmFsbHknKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlz
LnBhcnNlQmxvY2soKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJz
ZVRyeVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhp
cy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3RyeScpOwot
ICAgICAgICAgICAgdmFyIGJsb2NrID0gdGhpcy5wYXJzZUJsb2NrKCk7Ci0gICAgICAgICAgICB2
YXIgaGFuZGxlciA9IHRoaXMubWF0Y2hLZXl3b3JkKCdjYXRjaCcpID8gdGhpcy5wYXJzZUNhdGNo
Q2xhdXNlKCkgOiBudWxsOwotICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IHRoaXMubWF0Y2hL
ZXl3b3JkKCdmaW5hbGx5JykgPyB0aGlzLnBhcnNlRmluYWxseUNsYXVzZSgpIDogbnVsbDsKLSAg
ICAgICAgICAgIGlmICghaGFuZGxlciAmJiAhZmluYWxpemVyKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuTm9DYXRjaE9yRmluYWxseSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5UcnlTdGF0ZW1lbnQoYmxvY2ssIGhhbmRsZXIsIGZpbmFsaXplcikpOwotICAgICAgICB9
OwotICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1kZWJ1Z2dl
ci1zdGF0ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZURlYnVnZ2VyU3RhdGVt
ZW50ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZGVidWdnZXInKTsKLSAgICAg
ICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRGVidWdnZXJTdGF0ZW1lbnQoKSk7Ci0gICAgICAgIH07
Ci0gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVjbWFzY3Jp
cHQtbGFuZ3VhZ2Utc3RhdGVtZW50cy1hbmQtZGVjbGFyYXRpb25zCi0gICAgICAgIFBhcnNlci5w
cm90b3R5cGUucGFyc2VTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIg
c3RhdGVtZW50OwotICAgICAgICAgICAgc3dpdGNoICh0aGlzLmxvb2thaGVhZC50eXBlKSB7Ci0g
ICAgICAgICAgICAgICAgY2FzZSAxIC8qIEJvb2xlYW5MaXRlcmFsICovOgotICAgICAgICAgICAg
ICAgIGNhc2UgNSAvKiBOdWxsTGl0ZXJhbCAqLzoKLSAgICAgICAgICAgICAgICBjYXNlIDYgLyog
TnVtZXJpY0xpdGVyYWwgKi86Ci0gICAgICAgICAgICAgICAgY2FzZSA4IC8qIFN0cmluZ0xpdGVy
YWwgKi86Ci0gICAgICAgICAgICAgICAgY2FzZSAxMCAvKiBUZW1wbGF0ZSAqLzoKLSAgICAgICAg
ICAgICAgICBjYXNlIDkgLyogUmVndWxhckV4cHJlc3Npb24gKi86Ci0gICAgICAgICAgICAgICAg
ICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNyAvKiBQdW5jdHVhdG9y
ICovOgotICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmxvb2thaGVhZC52YWx1
ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAneycpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VCbG9jaygpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAnKCcpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9u
U3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAodmFsdWUgPT09ICc7JykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVt
ZW50ID0gdGhpcy5wYXJzZUVtcHR5U3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
MyAvKiBJZGVudGlmaWVyICovOgotICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlz
Lm1hdGNoQXN5bmNGdW5jdGlvbigpID8gdGhpcy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSA6
IHRoaXMucGFyc2VMYWJlbGxlZFN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIDQgLyogS2V5d29yZCAqLzoKLSAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoICh0aGlzLmxvb2thaGVhZC52YWx1ZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnYnJlYWsnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVu
dCA9IHRoaXMucGFyc2VCcmVha1N0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29udGludWUnOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VDb250aW51ZVN0
YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnZGVidWdnZXInOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
ZG8nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VE
b1doaWxlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmb3InOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VGb3JTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Z1
bmN0aW9uJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBh
cnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaWYnOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VJZlN0YXRlbWVudCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAncmV0dXJuJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlz
LnBhcnNlUmV0dXJuU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzd2l0Y2gnOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ3Rocm93JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQg
PSB0aGlzLnBhcnNlVGhyb3dTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RyeSc6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVRyeVN0YXRlbWVudCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAndmFyJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0
aGlzLnBhcnNlVmFyaWFibGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3doaWxlJzoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlV2hpbGVTdGF0ZW1lbnQo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ3dpdGgnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVu
dCA9IHRoaXMucGFyc2VXaXRoU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy50aHJvd1VuZXhwZWN0ZWRU
b2tlbih0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
c3RhdGVtZW50OwotICAgICAgICB9OwotICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlv
L2VjbWEyNjIvI3NlYy1mdW5jdGlvbi1kZWZpbml0aW9ucwotICAgICAgICBQYXJzZXIucHJvdG90
eXBlLnBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB0aGlzLmV4cGVj
dCgneycpOwotICAgICAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlRGlyZWN0aXZlUHJvbG9n
dWVzKCk7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNMYWJlbFNldCA9IHRoaXMuY29udGV4dC5s
YWJlbFNldDsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0luSXRlcmF0aW9uID0gdGhpcy5jb250
ZXh0LmluSXRlcmF0aW9uOwotICAgICAgICAgICAgdmFyIHByZXZpb3VzSW5Td2l0Y2ggPSB0aGlz
LmNvbnRleHQuaW5Td2l0Y2g7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNJbkZ1bmN0aW9uQm9k
eSA9IHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keTsKLSAgICAgICAgICAgIHRoaXMuY29udGV4
dC5sYWJlbFNldCA9IHt9OwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uID0g
ZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5Td2l0Y2ggPSBmYWxzZTsKLSAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSA9IHRydWU7Ci0gICAgICAgICAgICB3
aGlsZSAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMiAvKiBFT0YgKi8pIHsKLSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5tYXRjaCgnfScpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBib2R5LnB1c2godGhpcy5wYXJzZVN0
YXRlbWVudExpc3RJdGVtKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5leHBl
Y3QoJ30nKTsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5sYWJlbFNldCA9IHByZXZpb3VzTGFi
ZWxTZXQ7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSBwcmV2aW91c0lu
SXRlcmF0aW9uOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluU3dpdGNoID0gcHJldmlvdXNJ
blN3aXRjaDsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSA9IHByZXZp
b3VzSW5GdW5jdGlvbkJvZHk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5CbG9ja1N0YXRlbWVudChib2R5KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBh
cnNlci5wcm90b3R5cGUudmFsaWRhdGVQYXJhbSA9IGZ1bmN0aW9uIChvcHRpb25zLCBwYXJhbSwg
bmFtZSkgewotICAgICAgICAgICAgdmFyIGtleSA9ICckJyArIG5hbWU7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5jb250ZXh0LnN0cmljdCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5u
ZXIuaXNSZXN0cmljdGVkV29yZChuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBvcHRpb25z
LnN0cmljdGVkID0gcGFyYW07Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9
IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxs
KG9wdGlvbnMucGFyYW1TZXQsIGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5z
dHJpY3RlZCA9IHBhcmFtOwotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBt
ZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICghb3B0aW9ucy5maXJzdFJlc3RyaWN0
ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQo
bmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQgPSBw
YXJhbTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gbWVzc2FnZXNfMS5N
ZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQobmFtZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQgPSBwYXJhbTsK
LSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gbWVzc2FnZXNfMS5NZXNzYWdl
cy5TdHJpY3RSZXNlcnZlZFdvcmQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLnBh
cmFtU2V0LCBrZXkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0ZWQgPSBw
YXJhbTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gbWVzc2FnZXNfMS5N
ZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KLSAgICAgICAgICAgIGlm
ICh0eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAg
ICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdGlvbnMucGFyYW1TZXQsIGtleSwgeyB2
YWx1ZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJs
ZTogdHJ1ZSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIG9wdGlvbnMucGFyYW1TZXRba2V5XSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VSZXN0RWxlbWVudCA9IGZ1bmN0
aW9uIChwYXJhbXMpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdCgnLi4uJyk7Ci0gICAgICAgICAgICB2YXIgYXJnID0g
dGhpcy5wYXJzZVBhdHRlcm4ocGFyYW1zKTsKLSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCc9
JykpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdl
cy5EZWZhdWx0UmVzdFBhcmFtZXRlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
IXRoaXMubWF0Y2goJyknKSkgewotICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNz
YWdlc18xLk1lc3NhZ2VzLlBhcmFtZXRlckFmdGVyUmVzdFBhcmFtZXRlcik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5SZXN0
RWxlbWVudChhcmcpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJz
ZUZvcm1hbFBhcmFtZXRlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIg
cGFyYW1zID0gW107Ci0gICAgICAgICAgICB2YXIgcGFyYW0gPSB0aGlzLm1hdGNoKCcuLi4nKSA/
IHRoaXMucGFyc2VSZXN0RWxlbWVudChwYXJhbXMpIDogdGhpcy5wYXJzZVBhdHRlcm5XaXRoRGVm
YXVsdChwYXJhbXMpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlUGFyYW0ob3B0aW9ucywg
cGFyYW1zW2ldLCBwYXJhbXNbaV0udmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
b3B0aW9ucy5zaW1wbGUgPSBvcHRpb25zLnNpbXBsZSAmJiAocGFyYW0gaW5zdGFuY2VvZiBOb2Rl
LklkZW50aWZpZXIpOwotICAgICAgICAgICAgb3B0aW9ucy5wYXJhbXMucHVzaChwYXJhbSk7Ci0g
ICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VGb3JtYWxQYXJhbWV0ZXJz
ID0gZnVuY3Rpb24gKGZpcnN0UmVzdHJpY3RlZCkgewotICAgICAgICAgICAgdmFyIG9wdGlvbnM7
Ci0gICAgICAgICAgICBvcHRpb25zID0gewotICAgICAgICAgICAgICAgIHNpbXBsZTogdHJ1ZSwK
LSAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLAotICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJp
Y3RlZDogZmlyc3RSZXN0cmljdGVkCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAgdGhpcy5l
eHBlY3QoJygnKTsKLSAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpKSB7Ci0gICAgICAg
ICAgICAgICAgb3B0aW9ucy5wYXJhbVNldCA9IHt9OwotICAgICAgICAgICAgICAgIHdoaWxlICh0
aGlzLmxvb2thaGVhZC50eXBlICE9PSAyIC8qIEVPRiAqLykgewotICAgICAgICAgICAgICAgICAg
ICB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVyKG9wdGlvbnMpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAodGhpcy5tYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgn
LCcpOwotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7Ci0g
ICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHNpbXBsZTogb3B0aW9ucy5zaW1w
bGUsCi0gICAgICAgICAgICAgICAgcGFyYW1zOiBvcHRpb25zLnBhcmFtcywKLSAgICAgICAgICAg
ICAgICBzdHJpY3RlZDogb3B0aW9ucy5zdHJpY3RlZCwKLSAgICAgICAgICAgICAgICBmaXJzdFJl
c3RyaWN0ZWQ6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLAotICAgICAgICAgICAgICAgIG1lc3Nh
Z2U6IG9wdGlvbnMubWVzc2FnZQotICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAg
UGFyc2VyLnByb3RvdHlwZS5tYXRjaEFzeW5jRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzeW5jJyk7
Ci0gICAgICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB0
aGlzLnNjYW5uZXIuc2F2ZVN0YXRlKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5zY2FubmVyLnNj
YW5Db21tZW50cygpOwotICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5zY2FubmVyLmxl
eCgpOwotICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5yZXN0b3JlU3RhdGUoc3RhdGUpOwot
ICAgICAgICAgICAgICAgIG1hdGNoID0gKHN0YXRlLmxpbmVOdW1iZXIgPT09IG5leHQubGluZU51
bWJlcikgJiYgKG5leHQudHlwZSA9PT0gNCAvKiBLZXl3b3JkICovKSAmJiAobmV4dC52YWx1ZSA9
PT0gJ2Z1bmN0aW9uJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2g7
Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VGdW5jdGlvbkRlY2xh
cmF0aW9uID0gZnVuY3Rpb24gKGlkZW50aWZpZXJJc09wdGlvbmFsKSB7Ci0gICAgICAgICAgICB2
YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGlzQXN5bmMgPSB0
aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzeW5jJyk7Ci0gICAgICAgICAgICBpZiAoaXNB
c3luYykgewotICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7Ci0gICAgICAgICAg
ICB2YXIgaXNHZW5lcmF0b3IgPSBpc0FzeW5jID8gZmFsc2UgOiB0aGlzLm1hdGNoKCcqJyk7Ci0g
ICAgICAgICAgICBpZiAoaXNHZW5lcmF0b3IpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm5leHRU
b2tlbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG1lc3NhZ2U7Ci0gICAgICAg
ICAgICB2YXIgaWQgPSBudWxsOwotICAgICAgICAgICAgdmFyIGZpcnN0UmVzdHJpY3RlZCA9IG51
bGw7Ci0gICAgICAgICAgICBpZiAoIWlkZW50aWZpZXJJc09wdGlvbmFsIHx8ICF0aGlzLm1hdGNo
KCcoJykpIHsKLSAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAg
ICAgICAgICAgICAgICBpZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBt
ZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1
ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOwot
ICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3Ry
aWN0RnVuY3Rpb25OYW1lOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4u
dmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tl
bjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2Vz
LlN0cmljdFJlc2VydmVkV29yZDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93QXdhaXQg
PSB0aGlzLmNvbnRleHQuYXdhaXQ7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxk
ID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuYXdh
aXQgPSBpc0FzeW5jOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSAhaXNH
ZW5lcmF0b3I7Ci0gICAgICAgICAgICB2YXIgZm9ybWFsUGFyYW1ldGVycyA9IHRoaXMucGFyc2VG
b3JtYWxQYXJhbWV0ZXJzKGZpcnN0UmVzdHJpY3RlZCk7Ci0gICAgICAgICAgICB2YXIgcGFyYW1z
ID0gZm9ybWFsUGFyYW1ldGVycy5wYXJhbXM7Ci0gICAgICAgICAgICB2YXIgc3RyaWN0ZWQgPSBm
b3JtYWxQYXJhbWV0ZXJzLnN0cmljdGVkOwotICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0g
Zm9ybWFsUGFyYW1ldGVycy5maXJzdFJlc3RyaWN0ZWQ7Ci0gICAgICAgICAgICBpZiAoZm9ybWFs
UGFyYW1ldGVycy5tZXNzYWdlKSB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGZvcm1hbFBh
cmFtZXRlcnMubWVzc2FnZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBwcmV2aW91
c1N0cmljdCA9IHRoaXMuY29udGV4dC5zdHJpY3Q7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNB
bGxvd1N0cmljdERpcmVjdGl2ZSA9IHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZTsK
LSAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZSA9IGZvcm1hbFBh
cmFtZXRlcnMuc2ltcGxlOwotICAgICAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlRnVuY3Rp
b25Tb3VyY2VFbGVtZW50cygpOwotICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3Qg
JiYgZmlyc3RSZXN0cmljdGVkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0
ZWRUb2tlbihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgc3RyaWN0ZWQpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHN0cmljdGVkLCBtZXNzYWdlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSBwcmV2aW91c1N0
cmljdDsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZSA9IHBy
ZXZpb3VzQWxsb3dTdHJpY3REaXJlY3RpdmU7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuYXdh
aXQgPSBwcmV2aW91c0FsbG93QXdhaXQ7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZ
aWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKLSAgICAgICAgICAgIHJldHVybiBpc0FzeW5jID8g
dGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Bc3luY0Z1bmN0aW9uRGVjbGFyYXRpb24oaWQs
IHBhcmFtcywgYm9keSkpIDoKLSAgICAgICAgICAgICAgICB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBOb2RlLkZ1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHBhcmFtcywgYm9keSwgaXNHZW5lcmF0b3Ip
KTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZ1bmN0aW9uRXhw
cmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVh
dGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgaXNBc3luYyA9IHRoaXMubWF0Y2hDb250ZXh0dWFs
S2V5d29yZCgnYXN5bmMnKTsKLSAgICAgICAgICAgIGlmIChpc0FzeW5jKSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMu
ZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKLSAgICAgICAgICAgIHZhciBpc0dlbmVyYXRvciA9
IGlzQXN5bmMgPyBmYWxzZSA6IHRoaXMubWF0Y2goJyonKTsKLSAgICAgICAgICAgIGlmIChpc0dl
bmVyYXRvcikgewotICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZTsKLSAgICAgICAgICAgIHZhciBpZCA9IG51bGw7
Ci0gICAgICAgICAgICB2YXIgZmlyc3RSZXN0cmljdGVkOwotICAgICAgICAgICAgdmFyIHByZXZp
b3VzQWxsb3dBd2FpdCA9IHRoaXMuY29udGV4dC5hd2FpdDsKLSAgICAgICAgICAgIHZhciBwcmV2
aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKLSAgICAgICAgICAgIHRo
aXMuY29udGV4dC5hd2FpdCA9IGlzQXN5bmM7Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxs
b3dZaWVsZCA9ICFpc0dlbmVyYXRvcjsKLSAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKCcp
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAg
ICAgICAgICAgaWQgPSAoIXRoaXMuY29udGV4dC5zdHJpY3QgJiYgIWlzR2VuZXJhdG9yICYmIHRo
aXMubWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSA/IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpIDog
dGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAgIGlmICh0aGlz
LmNvbnRleHQuc3RyaWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIu
aXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMu
U3RyaWN0RnVuY3Rpb25OYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtZXNzYWdlID0gbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5z
Y2FubmVyLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOwotICAgICAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3Jk
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgdmFyIGZvcm1hbFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlRm9ybWFsUGFy
YW1ldGVycyhmaXJzdFJlc3RyaWN0ZWQpOwotICAgICAgICAgICAgdmFyIHBhcmFtcyA9IGZvcm1h
bFBhcmFtZXRlcnMucGFyYW1zOwotICAgICAgICAgICAgdmFyIHN0cmljdGVkID0gZm9ybWFsUGFy
YW1ldGVycy5zdHJpY3RlZDsKLSAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IGZvcm1hbFBh
cmFtZXRlcnMuZmlyc3RSZXN0cmljdGVkOwotICAgICAgICAgICAgaWYgKGZvcm1hbFBhcmFtZXRl
cnMubWVzc2FnZSkgewotICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBmb3JtYWxQYXJhbWV0ZXJz
Lm1lc3NhZ2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3Qg
PSB0aGlzLmNvbnRleHQuc3RyaWN0OwotICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dTdHJp
Y3REaXJlY3RpdmUgPSB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU7Ci0gICAgICAg
ICAgICB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmUgPSBmb3JtYWxQYXJhbWV0ZXJz
LnNpbXBsZTsKLSAgICAgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZUZ1bmN0aW9uU291cmNl
RWxlbWVudHMoKTsKLSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGZpcnN0
UmVzdHJpY3RlZCkgewotICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4o
Zmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
ICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHN0cmljdGVkKSB7Ci0gICAgICAgICAgICAgICAgdGhp
cy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihzdHJpY3RlZCwgbWVzc2FnZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7Ci0g
ICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmUgPSBwcmV2aW91c0Fs
bG93U3RyaWN0RGlyZWN0aXZlOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmF3YWl0ID0gcHJl
dmlvdXNBbGxvd0F3YWl0OwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBw
cmV2aW91c0FsbG93WWllbGQ7Ci0gICAgICAgICAgICByZXR1cm4gaXNBc3luYyA/IHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywg
Ym9keSkpIDoKLSAgICAgICAgICAgICAgICB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkZ1
bmN0aW9uRXhwcmVzc2lvbihpZCwgcGFyYW1zLCBib2R5LCBpc0dlbmVyYXRvcikpOwotICAgICAg
ICB9OwotICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1kaXJl
Y3RpdmUtcHJvbG9ndWVzLWFuZC10aGUtdXNlLXN0cmljdC1kaXJlY3RpdmUKLSAgICAgICAgUGFy
c2VyLnByb3RvdHlwZS5wYXJzZURpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAg
IHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlz
LmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5wYXJzZUV4cHJlc3Np
b24oKTsKLSAgICAgICAgICAgIHZhciBkaXJlY3RpdmUgPSAoZXhwci50eXBlID09PSBzeW50YXhf
MS5TeW50YXguTGl0ZXJhbCkgPyB0aGlzLmdldFRva2VuUmF3KHRva2VuKS5zbGljZSgxLCAtMSkg
OiBudWxsOwotICAgICAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBkaXJlY3RpdmUgPyBuZXcgTm9kZS5EaXJlY3Rp
dmUoZXhwciwgZGlyZWN0aXZlKSA6IG5ldyBOb2RlLkV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcikp
OwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRGlyZWN0aXZlUHJv
bG9ndWVzID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGZpcnN0UmVzdHJpY3RlZCA9
IG51bGw7Ci0gICAgICAgICAgICB2YXIgYm9keSA9IFtdOwotICAgICAgICAgICAgd2hpbGUgKHRy
dWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAg
ICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gOCAvKiBTdHJpbmdMaXRlcmFsICovKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB2YXIgc3RhdGVtZW50ID0gdGhpcy5wYXJzZURpcmVjdGl2ZSgpOwotICAgICAgICAgICAg
ICAgIGJvZHkucHVzaChzdGF0ZW1lbnQpOwotICAgICAgICAgICAgICAgIHZhciBkaXJlY3RpdmUg
PSBzdGF0ZW1lbnQuZGlyZWN0aXZlOwotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGlyZWN0
aXZlICE9PSAnc3RyaW5nJykgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gJ3VzZSBzdHJpY3Qn
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGZpcnN0UmVzdHJpY3RlZCwgbWVz
c2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGly
ZWN0aXZlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3Rl
ZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLklsbGVnYWxMYW5ndWFnZU1vZGVEaXJl
Y3RpdmUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3Rl
ZCAmJiB0b2tlbi5vY3RhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmlj
dGVkID0gdG9rZW47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYm9keTsKLSAgICAgICAgfTsKLSAgICAg
ICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbWV0aG9kLWRlZmluaXRp
b25zCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucXVhbGlmaWVkUHJvcGVydHlOYW1lID0gZnVu
Y3Rpb24gKHRva2VuKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIDMgLyogSWRlbnRpZmllciAqLzoKLSAgICAgICAgICAgICAgICBjYXNl
IDggLyogU3RyaW5nTGl0ZXJhbCAqLzoKLSAgICAgICAgICAgICAgICBjYXNlIDEgLyogQm9vbGVh
bkxpdGVyYWwgKi86Ci0gICAgICAgICAgICAgICAgY2FzZSA1IC8qIE51bGxMaXRlcmFsICovOgot
ICAgICAgICAgICAgICAgIGNhc2UgNiAvKiBOdW1lcmljTGl0ZXJhbCAqLzoKLSAgICAgICAgICAg
ICAgICBjYXNlIDQgLyogS2V5d29yZCAqLzoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICAgICAgY2FzZSA3IC8qIFB1bmN0dWF0b3IgKi86Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0b2tlbi52YWx1ZSA9PT0gJ1snOwotICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBl
LnBhcnNlR2V0dGVyTWV0aG9kID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUg
PSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBpc0dlbmVyYXRvciA9IGZhbHNl
OwotICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29udGV4dC5hbGxv
d1lpZWxkOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIHZhciBmb3JtYWxQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRl
cnMoKTsKLSAgICAgICAgICAgIGlmIChmb3JtYWxQYXJhbWV0ZXJzLnBhcmFtcy5sZW5ndGggPiAw
KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuQmFkR2V0dGVyQXJpdHkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG1ldGhv
ZCA9IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChmb3JtYWxQYXJhbWV0ZXJzKTsKLSAgICAgICAg
ICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHByZXNz
aW9uKG51bGwsIGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zLCBtZXRob2QsIGlzR2VuZXJhdG9yKSk7
Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTZXR0ZXJNZXRob2Qg
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OwotICAgICAgICAgICAgdmFyIGlzR2VuZXJhdG9yID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIg
cHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7Ci0gICAgICAgICAg
ICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIGZvcm1h
bFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpOwotICAgICAgICAgICAg
aWYgKGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zLmxlbmd0aCAhPT0gMSkgewotICAgICAgICAgICAg
ICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkJhZFNldHRlckFyaXR5
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hbFBhcmFtZXRlcnMu
cGFyYW1zWzBdIGluc3RhbmNlb2YgTm9kZS5SZXN0RWxlbWVudCkgewotICAgICAgICAgICAgICAg
IHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkJhZFNldHRlclJlc3RQYXJh
bWV0ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG1ldGhvZCA9IHRoaXMucGFy
c2VQcm9wZXJ0eU1ldGhvZChmb3JtYWxQYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwotICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIGZv
cm1hbFBhcmFtZXRlcnMucGFyYW1zLCBtZXRob2QsIGlzR2VuZXJhdG9yKSk7Ci0gICAgICAgIH07
Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VHZW5lcmF0b3JNZXRob2QgPSBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAg
ICAgICAgdmFyIGlzR2VuZXJhdG9yID0gdHJ1ZTsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0Fs
bG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKLSAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5hbGxvd1lpZWxkID0gdHJ1ZTsKLSAgICAgICAgICAgIHZhciBwYXJhbXMgPSB0aGlzLnBh
cnNlRm9ybWFsUGFyYW1ldGVycygpOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWll
bGQgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlN
ZXRob2QocGFyYW1zKTsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJl
dmlvdXNBbGxvd1lpZWxkOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IE5vZGUuRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIHBhcmFtcy5wYXJhbXMsIG1ldGhvZCwg
aXNHZW5lcmF0b3IpKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1
Yi5pby9lY21hMjYyLyNzZWMtZ2VuZXJhdG9yLWZ1bmN0aW9uLWRlZmluaXRpb25zCi0gICAgICAg
IFBhcnNlci5wcm90b3R5cGUuaXNTdGFydE9mRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHZhciBzdGFydCA9IHRydWU7Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlz
Lmxvb2thaGVhZC52YWx1ZTsKLSAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQudHlw
ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgNyAvKiBQdW5jdHVhdG9yICovOgotICAgICAgICAg
ICAgICAgICAgICBzdGFydCA9ICh2YWx1ZSA9PT0gJ1snKSB8fCAodmFsdWUgPT09ICcoJykgfHwg
KHZhbHVlID09PSAneycpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPT09ICcr
JykgfHwgKHZhbHVlID09PSAnLScpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUg
PT09ICchJykgfHwgKHZhbHVlID09PSAnficpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAo
dmFsdWUgPT09ICcrKycpIHx8ICh2YWx1ZSA9PT0gJy0tJykgfHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICh2YWx1ZSA9PT0gJy8nKSB8fCAodmFsdWUgPT09ICcvPScpOyAvLyByZWd1bGFyIGV4
cHJlc3Npb24gbGl0ZXJhbAotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBjYXNlIDQgLyogS2V5d29yZCAqLzoKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAo
dmFsdWUgPT09ICdjbGFzcycpIHx8ICh2YWx1ZSA9PT0gJ2RlbGV0ZScpIHx8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAodmFsdWUgPT09ICdmdW5jdGlvbicpIHx8ICh2YWx1ZSA9PT0gJ2xldCcp
IHx8ICh2YWx1ZSA9PT0gJ25ldycpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUg
PT09ICdzdXBlcicpIHx8ICh2YWx1ZSA9PT0gJ3RoaXMnKSB8fCAodmFsdWUgPT09ICd0eXBlb2Yn
KSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID09PSAndm9pZCcpIHx8ICh2YWx1
ZSA9PT0gJ3lpZWxkJyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXJ0OwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJv
dG90eXBlLnBhcnNlWWllbGRFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg
dmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5
d29yZCgneWllbGQnKTsKLSAgICAgICAgICAgIHZhciBhcmd1bWVudCA9IG51bGw7Ci0gICAgICAg
ICAgICB2YXIgZGVsZWdhdGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmICghdGhpcy5oYXNMaW5l
VGVybWluYXRvcikgewotICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0
aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxs
b3dZaWVsZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGRlbGVnYXRlID0gdGhpcy5tYXRjaCgn
KicpOwotICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZSkgewotICAgICAgICAgICAgICAgICAg
ICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHRoaXMu
cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBlbHNlIGlmICh0aGlzLmlzU3RhcnRPZkV4cHJlc3Npb24oKSkgewotICAgICAgICAg
ICAgICAgICAgICBhcmd1bWVudCA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVs
ZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLllpZWxkRXhwcmVzc2lvbihhcmd1bWVudCwg
ZGVsZWdhdGUpKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5p
by9lY21hMjYyLyNzZWMtY2xhc3MtZGVmaW5pdGlvbnMKLSAgICAgICAgUGFyc2VyLnByb3RvdHlw
ZS5wYXJzZUNsYXNzRWxlbWVudCA9IGZ1bmN0aW9uIChoYXNDb25zdHJ1Y3RvcikgewotICAgICAg
ICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGtpbmQgPSAnJzsKLSAgICAgICAg
ICAgIHZhciBrZXkgPSBudWxsOwotICAgICAgICAgICAgdmFyIHZhbHVlID0gbnVsbDsKLSAgICAg
ICAgICAgIHZhciBjb21wdXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIG1ldGhvZCA9IGZh
bHNlOwotICAgICAgICAgICAgdmFyIGlzU3RhdGljID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIg
aXNBc3luYyA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyonKSkgewotICAg
ICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2goJ1snKTsKLSAg
ICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKLSAgICAg
ICAgICAgICAgICB2YXIgaWQgPSBrZXk7Ci0gICAgICAgICAgICAgICAgaWYgKGlkLm5hbWUgPT09
ICdzdGF0aWMnICYmICh0aGlzLnF1YWxpZmllZFByb3BlcnR5TmFtZSh0aGlzLmxvb2thaGVhZCkg
fHwgdGhpcy5tYXRjaCgnKicpKSkgewotICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMu
bG9va2FoZWFkOwotICAgICAgICAgICAgICAgICAgICBpc1N0YXRpYyA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy5tYXRjaCgnKicpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Lm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFBy
b3BlcnR5S2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKCh0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pICYm
ICF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yICYmICh0b2tlbi52YWx1ZSA9PT0gJ2FzeW5jJykpIHsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIHB1bmN0dWF0b3IgPSB0aGlzLmxvb2thaGVhZC52YWx1
ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHB1bmN0dWF0b3IgIT09ICc6JyAmJiBwdW5jdHVh
dG9yICE9PSAnKCcgJiYgcHVuY3R1YXRvciAhPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpc0FzeW5jID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhp
cy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2Jq
ZWN0UHJvcGVydHlLZXkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBl
ID09PSAzIC8qIElkZW50aWZpZXIgKi8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodG9rZW4udmFsdWUgPT09ICdnZXQnIHx8IHRva2VuLnZhbHVlID09PSAnc2V0JykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2Vu
KHRva2VuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICdjb25zdHJ1Y3RvcicpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tl
bih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5Db25zdHJ1Y3RvcklzQXN5bmMpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHZhciBsb29rYWhlYWRQcm9wZXJ0eUtleSA9IHRoaXMucXVhbGlmaWVkUHJvcGVydHlO
YW1lKHRoaXMubG9va2FoZWFkKTsKLSAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAzIC8q
IElkZW50aWZpZXIgKi8pIHsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdn
ZXQnICYmIGxvb2thaGVhZFByb3BlcnR5S2V5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGtpbmQg
PSAnZ2V0JzsKLSAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7
Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgp
OwotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VHZXR0ZXJNZXRob2QoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udmFsdWUgPT09
ICdzZXQnICYmIGxvb2thaGVhZFByb3BlcnR5S2V5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGtp
bmQgPSAnc2V0JzsKLSAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdb
Jyk7Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtl
eSgpOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VTZXR0ZXJNZXRob2Qo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm
ICh0b2tlbi50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYgdG9rZW4udmFsdWUgPT09ICcq
JyAmJiBsb29rYWhlYWRQcm9wZXJ0eUtleSkgewotICAgICAgICAgICAgICAgIGtpbmQgPSAnaW5p
dCc7Ci0gICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7Ci0gICAgICAg
ICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Ci0gICAgICAgICAg
ICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlR2VuZXJhdG9yTWV0aG9kKCk7Ci0gICAgICAgICAgICAg
ICAgbWV0aG9kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgha2luZCAm
JiBrZXkgJiYgdGhpcy5tYXRjaCgnKCcpKSB7Ci0gICAgICAgICAgICAgICAga2luZCA9ICdpbml0
JzsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGlzQXN5bmMgPyB0aGlzLnBhcnNlUHJvcGVydHlN
ZXRob2RBc3luY0Z1bmN0aW9uKCkgOiB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbigp
OwotICAgICAgICAgICAgICAgIG1ldGhvZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoIWtpbmQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRv
a2VuKHRoaXMubG9va2FoZWFkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChraW5k
ID09PSAnaW5pdCcpIHsKLSAgICAgICAgICAgICAgICBraW5kID0gJ21ldGhvZCc7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoIWNvbXB1dGVkKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzU3RhdGljICYmIHRoaXMuaXNQcm9wZXJ0eUtleShrZXksICdwcm90b3R5cGUnKSkgewotICAg
ICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdl
c18xLk1lc3NhZ2VzLlN0YXRpY1Byb3RvdHlwZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmICghaXNTdGF0aWMgJiYgdGhpcy5pc1Byb3BlcnR5S2V5KGtleSwgJ2NvbnN0
cnVjdG9yJykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgIT09ICdtZXRob2QnIHx8
ICFtZXRob2QgfHwgKHZhbHVlICYmIHZhbHVlLmdlbmVyYXRvcikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVz
c2FnZXMuQ29uc3RydWN0b3JTcGVjaWFsTWV0aG9kKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQ29uc3RydWN0b3IudmFsdWUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2Vz
XzEuTWVzc2FnZXMuRHVwbGljYXRlQ29uc3RydWN0b3IpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaGFz
Q29uc3RydWN0b3IudmFsdWUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGtpbmQgPSAnY29uc3RydWN0b3InOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBO
b2RlLk1ldGhvZERlZmluaXRpb24oa2V5LCBjb21wdXRlZCwgdmFsdWUsIGtpbmQsIGlzU3RhdGlj
KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDbGFzc0VsZW1l
bnRMaXN0ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGJvZHkgPSBbXTsKLSAgICAg
ICAgICAgIHZhciBoYXNDb25zdHJ1Y3RvciA9IHsgdmFsdWU6IGZhbHNlIH07Ci0gICAgICAgICAg
ICB0aGlzLmV4cGVjdCgneycpOwotICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9Jykp
IHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnOycpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBib2R5LnB1c2godGhpcy5wYXJzZUNsYXNz
RWxlbWVudChoYXNDb25zdHJ1Y3RvcikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7Ci0gICAgICAgICAgICByZXR1cm4gYm9k
eTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNsYXNzQm9keSA9
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
Ci0gICAgICAgICAgICB2YXIgZWxlbWVudExpc3QgPSB0aGlzLnBhcnNlQ2xhc3NFbGVtZW50TGlz
dCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQ2xh
c3NCb2R5KGVsZW1lbnRMaXN0KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5
cGUucGFyc2VDbGFzc0RlY2xhcmF0aW9uID0gZnVuY3Rpb24gKGlkZW50aWZpZXJJc09wdGlvbmFs
KSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAg
ICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gdGhpcy5jb250ZXh0LnN0cmljdDsKLSAgICAgICAgICAg
IHRoaXMuY29udGV4dC5zdHJpY3QgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3
b3JkKCdjbGFzcycpOwotICAgICAgICAgICAgdmFyIGlkID0gKGlkZW50aWZpZXJJc09wdGlvbmFs
ICYmICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSAzIC8qIElkZW50aWZpZXIgKi8pKSA/IG51bGwg
OiB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICB2YXIgc3VwZXJD
bGFzcyA9IG51bGw7Ci0gICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2V4dGVuZHMn
KSkgewotICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAg
c3VwZXJDbGFzcyA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlTGVmdEhhbmRT
aWRlRXhwcmVzc2lvbkFsbG93Q2FsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIg
Y2xhc3NCb2R5ID0gdGhpcy5wYXJzZUNsYXNzQm9keSgpOwotICAgICAgICAgICAgdGhpcy5jb250
ZXh0LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0OwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuQ2xhc3NEZWNsYXJhdGlvbihpZCwgc3VwZXJDbGFzcywgY2xh
c3NCb2R5KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDbGFz
c0V4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
Y3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gdGhpcy5jb250
ZXh0LnN0cmljdDsKLSAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSB0cnVlOwotICAg
ICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdjbGFzcycpOwotICAgICAgICAgICAgdmFyIGlk
ID0gKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLykgPyB0aGlzLnBh
cnNlVmFyaWFibGVJZGVudGlmaWVyKCkgOiBudWxsOwotICAgICAgICAgICAgdmFyIHN1cGVyQ2xh
c3MgPSBudWxsOwotICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdleHRlbmRzJykp
IHsKLSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgIHN1
cGVyQ2xhc3MgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxlZnRIYW5kU2lk
ZUV4cHJlc3Npb25BbGxvd0NhbGwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGNs
YXNzQm9keSA9IHRoaXMucGFyc2VDbGFzc0JvZHkoKTsKLSAgICAgICAgICAgIHRoaXMuY29udGV4
dC5zdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLkNsYXNzRXhwcmVzc2lvbihpZCwgc3VwZXJDbGFzcywgY2xhc3NC
b2R5KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNt
YTI2Mi8jc2VjLXNjcmlwdHMKLSAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
MjYyLyNzZWMtbW9kdWxlcwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTW9kdWxlID0g
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cmljdCA9IHRydWU7Ci0g
ICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNNb2R1bGUgPSB0cnVlOwotICAgICAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBib2R5ID0gdGhpcy5w
YXJzZURpcmVjdGl2ZVByb2xvZ3VlcygpOwotICAgICAgICAgICAgd2hpbGUgKHRoaXMubG9va2Fo
ZWFkLnR5cGUgIT09IDIgLyogRU9GICovKSB7Ci0gICAgICAgICAgICAgICAgYm9keS5wdXNoKHRo
aXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLk1vZHVsZShib2R5KSk7Ci0gICAg
ICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTY3JpcHQgPSBmdW5jdGlvbiAo
KSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAg
ICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlRGlyZWN0aXZlUHJvbG9ndWVzKCk7Ci0gICAgICAgICAg
ICB3aGlsZSAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMiAvKiBFT0YgKi8pIHsKLSAgICAgICAg
ICAgICAgICBib2R5LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUu
U2NyaXB0KGJvZHkpKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1
Yi5pby9lY21hMjYyLyNzZWMtaW1wb3J0cwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNl
TW9kdWxlU3BlY2lmaWVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBlICE9
PSA4IC8qIFN0cmluZ0xpdGVyYWwgKi8pIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJy
b3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTW9kdWxlU3BlY2lmaWVyKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAg
ICAgICB2YXIgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7Ci0gICAgICAgICAgICByZXR1
cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRlcmFsKHRva2VuLnZhbHVlLCByYXcp
KTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gaW1wb3J0IHs8Zm9vIGFzIGJhcj59IC4uLjsKLSAg
ICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUltcG9ydFNwZWNpZmllciA9IGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAg
ICB2YXIgaW1wb3J0ZWQ7Ci0gICAgICAgICAgICB2YXIgbG9jYWw7Ci0gICAgICAgICAgICBpZiAo
dGhpcy5sb29rYWhlYWQudHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovKSB7Ci0gICAgICAgICAg
ICAgICAgaW1wb3J0ZWQgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0gICAgICAg
ICAgICAgICAgbG9jYWwgPSBpbXBvcnRlZDsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRj
aENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMubmV4
dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsID0gdGhpcy5wYXJzZVZhcmlhYmxl
SWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGltcG9ydGVkID0gdGhpcy5wYXJzZUlkZW50aWZp
ZXJOYW1lKCk7Ci0gICAgICAgICAgICAgICAgbG9jYWwgPSBpbXBvcnRlZDsKLSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsID0g
dGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0
ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JbXBv
cnRTcGVjaWZpZXIobG9jYWwsIGltcG9ydGVkKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIHtm
b28sIGJhciBhcyBiYXN9Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VOYW1lZEltcG9y
dHMgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdCgneycpOwotICAgICAg
ICAgICAgdmFyIHNwZWNpZmllcnMgPSBbXTsKLSAgICAgICAgICAgIHdoaWxlICghdGhpcy5tYXRj
aCgnfScpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHRoaXMucGFyc2VJbXBv
cnRTcGVjaWZpZXIoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCd9JykpIHsK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJywnKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdCgnfScpOwotICAgICAgICAg
ICAgcmV0dXJuIHNwZWNpZmllcnM7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIGltcG9ydCA8Zm9v
PiAuLi47Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJbXBvcnREZWZhdWx0U3BlY2lm
aWVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKLSAgICAgICAgICAgIHZhciBsb2NhbCA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgp
OwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSW1wb3J0
RGVmYXVsdFNwZWNpZmllcihsb2NhbCkpOwotICAgICAgICB9OwotICAgICAgICAvLyBpbXBvcnQg
PCogYXMgZm9vPiAuLi47Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJbXBvcnROYW1l
c3BhY2VTcGVjaWZpZXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRo
aXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdGhpcy5leHBlY3QoJyonKTsKLSAgICAgICAg
ICAgIGlmICghdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuTm9Bc0FmdGVySW1wb3J0
TmFtZXNwYWNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7
Ci0gICAgICAgICAgICB2YXIgbG9jYWwgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkltcG9ydE5hbWVz
cGFjZVNwZWNpZmllcihsb2NhbCkpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90
eXBlLnBhcnNlSW1wb3J0RGVjbGFyYXRpb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50
aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
Ci0gICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2ltcG9ydCcpOwotICAgICAgICAgICAg
dmFyIHNyYzsKLSAgICAgICAgICAgIHZhciBzcGVjaWZpZXJzID0gW107Ci0gICAgICAgICAgICBp
ZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gOCAvKiBTdHJpbmdMaXRlcmFsICovKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gaW1wb3J0ICdmb28nOwotICAgICAgICAgICAgICAgIHNyYyA9IHRoaXMu
cGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd7JykpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gaW1wb3J0IHtiYXJ9Ci0gICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcnMgPSBz
cGVjaWZpZXJzLmNvbmNhdCh0aGlzLnBhcnNlTmFtZWRJbXBvcnRzKCkpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcqJykpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gaW1wb3J0ICogYXMgZm9vCi0gICAgICAgICAgICAgICAgICAgIHNw
ZWNpZmllcnMucHVzaCh0aGlzLnBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzSWRlbnRpZmll
ck5hbWUodGhpcy5sb29rYWhlYWQpICYmICF0aGlzLm1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGltcG9ydCBmb28KLSAgICAgICAgICAgICAgICAgICAg
c3BlY2lmaWVycy5wdXNoKHRoaXMucGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVyKCkpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMubWF0Y2goJyonKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltcG9ydCBm
b28sICogYXMgZm9vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNo
KHRoaXMucGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCd7
JykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBvcnQgZm9vLCB7YmFyfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcnMgPSBzcGVjaWZpZXJzLmNvbmNh
dCh0aGlzLnBhcnNlTmFtZWRJbXBvcnRzKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dV
bmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmxvb2thaGVhZC52YWx1ZSA/
IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDogbWVzc2FnZXNfMS5NZXNzYWdl
cy5NaXNzaW5nRnJvbUNsYXVzZTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9y
KG1lc3NhZ2UsIHRoaXMubG9va2FoZWFkLnZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICBzcmMgPSB0aGlz
LnBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlz
LmNvbnN1bWVTZW1pY29sb24oKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBOb2RlLkltcG9ydERlY2xhcmF0aW9uKHNwZWNpZmllcnMsIHNyYykpOwotICAgICAg
ICB9OwotICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1leHBv
cnRzCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VFeHBvcnRTcGVjaWZpZXIgPSBmdW5j
dGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAg
ICAgICAgICAgdmFyIGxvY2FsID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7Ci0gICAgICAg
ICAgICB2YXIgZXhwb3J0ZWQgPSBsb2NhbDsKLSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoQ29u
dGV4dHVhbEtleXdvcmQoJ2FzJykpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigp
OwotICAgICAgICAgICAgICAgIGV4cG9ydGVkID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBu
ZXcgTm9kZS5FeHBvcnRTcGVjaWZpZXIobG9jYWwsIGV4cG9ydGVkKSk7Ci0gICAgICAgIH07Ci0g
ICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VFeHBvcnREZWNsYXJhdGlvbiA9IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkpIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2Fs
RXhwb3J0RGVjbGFyYXRpb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG5vZGUg
PSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZXhw
b3J0Jyk7Ci0gICAgICAgICAgICB2YXIgZXhwb3J0RGVjbGFyYXRpb247Ci0gICAgICAgICAgICBp
ZiAodGhpcy5tYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkgewotICAgICAgICAgICAgICAgIC8vIGV4
cG9ydCBkZWZhdWx0IC4uLgotICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvbyAoKSB7fQotICAgICAg
ICAgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7fQotICAgICAgICAg
ICAgICAgICAgICB2YXIgZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlv
bih0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlv
bikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1h
dGNoS2V5d29yZCgnY2xhc3MnKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBleHBvcnQgZGVm
YXVsdCBjbGFzcyBmb28ge30KLSAgICAgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0g
dGhpcy5wYXJzZUNsYXNzRGVjbGFyYXRpb24odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGV4
cG9ydERlY2xhcmF0aW9uID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHBvcnREZWZh
dWx0RGVjbGFyYXRpb24oZGVjbGFyYXRpb24pKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhc3luYycpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGYg
KCkge30KLSAgICAgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rp
b24gKCkge30KLSAgICAgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgYXN5bmMgeCA9
PiB4Ci0gICAgICAgICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IHRoaXMubWF0Y2hBc3lu
Y0Z1bmN0aW9uKCkgPyB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbih0cnVlKSA6IHRoaXMu
cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgICAgICAgICBleHBvcnRE
ZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0RGVmYXVsdERl
Y2xhcmF0aW9uKGRlY2xhcmF0aW9uKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxL
ZXl3b3JkKCdmcm9tJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJv
cihtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdGhpcy5sb29rYWhlYWQudmFs
dWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIGV4cG9y
dCBkZWZhdWx0IHt9OwotICAgICAgICAgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBbXTsK
LSAgICAgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgKDEgKyAyKTsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gdGhpcy5tYXRjaCgneycpID8gdGhpcy5wYXJz
ZU9iamVjdEluaXRpYWxpemVyKCkgOgotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRj
aCgnWycpID8gdGhpcy5wYXJzZUFycmF5SW5pdGlhbGl6ZXIoKSA6IHRoaXMucGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29s
b24oKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYg
KHRoaXMubWF0Y2goJyonKSkgewotICAgICAgICAgICAgICAgIC8vIGV4cG9ydCAqIGZyb20gJ2Zv
byc7Ci0gICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnZnJvbScpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5sb29rYWhlYWQudmFsdWUgPyBtZXNzYWdlc18xLk1l
c3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IG1lc3NhZ2VzXzEuTWVzc2FnZXMuTWlzc2luZ0Zyb21D
bGF1c2U7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlLCB0aGlz
Lmxvb2thaGVhZC52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRo
aXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgdmFyIHNyYyA9IHRoaXMucGFyc2VNb2R1
bGVTcGVjaWZpZXIoKTsKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsK
LSAgICAgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IE5vZGUuRXhwb3J0QWxsRGVjbGFyYXRpb24oc3JjKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSA0IC8qIEtleXdvcmQgKi8p
IHsKLSAgICAgICAgICAgICAgICAvLyBleHBvcnQgdmFyIGYgPSAxOwotICAgICAgICAgICAgICAg
IHZhciBkZWNsYXJhdGlvbiA9IHZvaWQgMDsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMu
bG9va2FoZWFkLnZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xldCc6Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ2NvbnN0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
Y2xhcmF0aW9uID0gdGhpcy5wYXJzZUxleGljYWxEZWNsYXJhdGlvbih7IGluRm9yOiBmYWxzZSB9
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlICd2YXInOgotICAgICAgICAgICAgICAgICAgICBjYXNlICdjbGFzcyc6Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xh
cmF0aW9uID0gdGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9IHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0TmFtZWREZWNsYXJhdGlvbihkZWNsYXJh
dGlvbiwgW10sIG51bGwpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHRo
aXMubWF0Y2hBc3luY0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRp
b24gPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpOwotICAgICAgICAgICAgICAgIGV4
cG9ydERlY2xhcmF0aW9uID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHBvcnROYW1l
ZERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBbXSwgbnVsbCkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNwZWNpZmllcnMgPSBbXTsKLSAg
ICAgICAgICAgICAgICB2YXIgc291cmNlID0gbnVsbDsKLSAgICAgICAgICAgICAgICB2YXIgaXNF
eHBvcnRGcm9tSWRlbnRpZmllciA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0
KCd7Jyk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllciA9IGlzRXhwb3J0RnJvbUlkZW50
aWZpZXIgfHwgdGhpcy5tYXRjaEtleXdvcmQoJ2RlZmF1bHQnKTsKLSAgICAgICAgICAgICAgICAg
ICAgc3BlY2lmaWVycy5wdXNoKHRoaXMucGFyc2VFeHBvcnRTcGVjaWZpZXIoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnfScpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmV4cGVjdCgnLCcpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnZnJvbScpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH0gZnJvbSAnZm9vJzsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gZXhwb3J0IHtmb299IGZyb20gJ2Zvbyc7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHRoaXMucGFyc2VN
b2R1bGVTcGVjaWZpZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNv
bG9uKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRXhw
b3J0RnJvbUlkZW50aWZpZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZXhwb3J0IHtkZWZh
dWx0fTsgLy8gbWlzc2luZyBmcm9tQ2xhdXNlCi0gICAgICAgICAgICAgICAgICAgIHZhciBtZXNz
YWdlID0gdGhpcy5sb29rYWhlYWQudmFsdWUgPyBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0
ZWRUb2tlbiA6IG1lc3NhZ2VzXzEuTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2U7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlLCB0aGlzLmxvb2thaGVhZC52YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAvLyBleHBvcnQge2Zvb307Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29u
c3VtZVNlbWljb2xvbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBleHBv
cnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0TmFtZWRE
ZWNsYXJhdGlvbihudWxsLCBzcGVjaWZpZXJzLCBzb3VyY2UpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiBleHBvcnREZWNsYXJhdGlvbjsKLSAgICAgICAgfTsKLSAgICAgICAg
cmV0dXJuIFBhcnNlcjsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuUGFyc2VyID0gUGFyc2VyOwor
CSJ1c2Ugc3RyaWN0IjsKKwlPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1
bGUiLCB7IHZhbHVlOiB0cnVlIH0pOworCXZhciBhc3NlcnRfMSA9IF9fd2VicGFja19yZXF1aXJl
X18oOSk7CisJdmFyIGVycm9yX2hhbmRsZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApOwor
CXZhciBtZXNzYWdlc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7CisJdmFyIE5vZGUgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDcpOworCXZhciBzY2FubmVyXzEgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDEyKTsKKwl2YXIgc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOworCXZhciB0
b2tlbl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7CisJdmFyIEFycm93UGFyYW1ldGVyUGxh
Y2VIb2xkZXIgPSAnQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcic7CisJdmFyIFBhcnNlciA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gUGFyc2VyKGNvZGUsIG9w
dGlvbnMsIGRlbGVnYXRlKSB7CisJICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9w
dGlvbnMgPSB7fTsgfQorCSAgICAgICAgdGhpcy5jb25maWcgPSB7CisJICAgICAgICAgICAgcmFu
Z2U6ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdl
LAorCSAgICAgICAgICAgIGxvYzogKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gJ2Jvb2xlYW4nKSAm
JiBvcHRpb25zLmxvYywKKwkgICAgICAgICAgICBzb3VyY2U6IG51bGwsCisJICAgICAgICAgICAg
dG9rZW5zOiAodHlwZW9mIG9wdGlvbnMudG9rZW5zID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMu
dG9rZW5zLAorCSAgICAgICAgICAgIGNvbW1lbnQ6ICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09
PSAnYm9vbGVhbicpICYmIG9wdGlvbnMuY29tbWVudCwKKwkgICAgICAgICAgICB0b2xlcmFudDog
KHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMudG9sZXJh
bnQKKwkgICAgICAgIH07CisJICAgICAgICBpZiAodGhpcy5jb25maWcubG9jICYmIG9wdGlvbnMu
c291cmNlICYmIG9wdGlvbnMuc291cmNlICE9PSBudWxsKSB7CisJICAgICAgICAgICAgdGhpcy5j
b25maWcuc291cmNlID0gU3RyaW5nKG9wdGlvbnMuc291cmNlKTsKKwkgICAgICAgIH0KKwkgICAg
ICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKwkgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVy
ID0gbmV3IGVycm9yX2hhbmRsZXJfMS5FcnJvckhhbmRsZXIoKTsKKwkgICAgICAgIHRoaXMuZXJy
b3JIYW5kbGVyLnRvbGVyYW50ID0gdGhpcy5jb25maWcudG9sZXJhbnQ7CisJICAgICAgICB0aGlz
LnNjYW5uZXIgPSBuZXcgc2Nhbm5lcl8xLlNjYW5uZXIoY29kZSwgdGhpcy5lcnJvckhhbmRsZXIp
OworCSAgICAgICAgdGhpcy5zY2FubmVyLnRyYWNrQ29tbWVudCA9IHRoaXMuY29uZmlnLmNvbW1l
bnQ7CisJICAgICAgICB0aGlzLm9wZXJhdG9yUHJlY2VkZW5jZSA9IHsKKwkgICAgICAgICAgICAn
KSc6IDAsCisJICAgICAgICAgICAgJzsnOiAwLAorCSAgICAgICAgICAgICcsJzogMCwKKwkgICAg
ICAgICAgICAnPSc6IDAsCisJICAgICAgICAgICAgJ10nOiAwLAorCSAgICAgICAgICAgICd8fCc6
IDEsCisJICAgICAgICAgICAgJyYmJzogMiwKKwkgICAgICAgICAgICAnfCc6IDMsCisJICAgICAg
ICAgICAgJ14nOiA0LAorCSAgICAgICAgICAgICcmJzogNSwKKwkgICAgICAgICAgICAnPT0nOiA2
LAorCSAgICAgICAgICAgICchPSc6IDYsCisJICAgICAgICAgICAgJz09PSc6IDYsCisJICAgICAg
ICAgICAgJyE9PSc6IDYsCisJICAgICAgICAgICAgJzwnOiA3LAorCSAgICAgICAgICAgICc+Jzog
NywKKwkgICAgICAgICAgICAnPD0nOiA3LAorCSAgICAgICAgICAgICc+PSc6IDcsCisJICAgICAg
ICAgICAgJzw8JzogOCwKKwkgICAgICAgICAgICAnPj4nOiA4LAorCSAgICAgICAgICAgICc+Pj4n
OiA4LAorCSAgICAgICAgICAgICcrJzogOSwKKwkgICAgICAgICAgICAnLSc6IDksCisJICAgICAg
ICAgICAgJyonOiAxMSwKKwkgICAgICAgICAgICAnLyc6IDExLAorCSAgICAgICAgICAgICclJzog
MTEKKwkgICAgICAgIH07CisJICAgICAgICB0aGlzLmxvb2thaGVhZCA9IHsKKwkgICAgICAgICAg
ICB0eXBlOiAyIC8qIEVPRiAqLywKKwkgICAgICAgICAgICB2YWx1ZTogJycsCisJICAgICAgICAg
ICAgbGluZU51bWJlcjogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgbGlu
ZVN0YXJ0OiAwLAorCSAgICAgICAgICAgIHN0YXJ0OiAwLAorCSAgICAgICAgICAgIGVuZDogMAor
CSAgICAgICAgfTsKKwkgICAgICAgIHRoaXMuaGFzTGluZVRlcm1pbmF0b3IgPSBmYWxzZTsKKwkg
ICAgICAgIHRoaXMuY29udGV4dCA9IHsKKwkgICAgICAgICAgICBpc01vZHVsZTogZmFsc2UsCisJ
ICAgICAgICAgICAgYXdhaXQ6IGZhbHNlLAorCSAgICAgICAgICAgIGFsbG93SW46IHRydWUsCisJ
ICAgICAgICAgICAgYWxsb3dTdHJpY3REaXJlY3RpdmU6IHRydWUsCisJICAgICAgICAgICAgYWxs
b3dZaWVsZDogdHJ1ZSwKKwkgICAgICAgICAgICBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJy
b3I6IG51bGwsCisJICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0OiBmYWxzZSwKKwkgICAg
ICAgICAgICBpc0JpbmRpbmdFbGVtZW50OiBmYWxzZSwKKwkgICAgICAgICAgICBpbkZ1bmN0aW9u
Qm9keTogZmFsc2UsCisJICAgICAgICAgICAgaW5JdGVyYXRpb246IGZhbHNlLAorCSAgICAgICAg
ICAgIGluU3dpdGNoOiBmYWxzZSwKKwkgICAgICAgICAgICBsYWJlbFNldDoge30sCisJICAgICAg
ICAgICAgc3RyaWN0OiBmYWxzZQorCSAgICAgICAgfTsKKwkgICAgICAgIHRoaXMudG9rZW5zID0g
W107CisJICAgICAgICB0aGlzLnN0YXJ0TWFya2VyID0geworCSAgICAgICAgICAgIGluZGV4OiAw
LAorCSAgICAgICAgICAgIGxpbmU6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLAorCSAgICAgICAg
ICAgIGNvbHVtbjogMAorCSAgICAgICAgfTsKKwkgICAgICAgIHRoaXMubGFzdE1hcmtlciA9IHsK
KwkgICAgICAgICAgICBpbmRleDogMCwKKwkgICAgICAgICAgICBsaW5lOiB0aGlzLnNjYW5uZXIu
bGluZU51bWJlciwKKwkgICAgICAgICAgICBjb2x1bW46IDAKKwkgICAgICAgIH07CisJICAgICAg
ICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgdGhpcy5sYXN0TWFya2VyID0geworCSAgICAg
ICAgICAgIGluZGV4OiB0aGlzLnNjYW5uZXIuaW5kZXgsCisJICAgICAgICAgICAgbGluZTogdGhp
cy5zY2FubmVyLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgY29sdW1uOiB0aGlzLnNjYW5uZXIu
aW5kZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0CisJICAgICAgICB9OworCSAgICB9CisJICAg
IFBhcnNlci5wcm90b3R5cGUudGhyb3dFcnJvciA9IGZ1bmN0aW9uIChtZXNzYWdlRm9ybWF0KSB7
CisJICAgICAgICB2YXIgdmFsdWVzID0gW107CisJICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9p
IDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgeworCSAgICAgICAgICAgIHZhbHVlc1tfaSAtIDFd
ID0gYXJndW1lbnRzW19pXTsKKwkgICAgICAgIH0KKwkgICAgICAgIHZhciBhcmdzID0gQXJyYXku
cHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKKwkgICAgICAgIHZhciBtc2cgPSBt
ZXNzYWdlRm9ybWF0LnJlcGxhY2UoLyUoXGQpL2csIGZ1bmN0aW9uICh3aG9sZSwgaWR4KSB7CisJ
ICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGlkeCA8IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSBy
ZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZScpOworCSAgICAgICAgICAgIHJldHVybiBhcmdzW2lk
eF07CisJICAgICAgICB9KTsKKwkgICAgICAgIHZhciBpbmRleCA9IHRoaXMubGFzdE1hcmtlci5p
bmRleDsKKwkgICAgICAgIHZhciBsaW5lID0gdGhpcy5sYXN0TWFya2VyLmxpbmU7CisJICAgICAg
ICB2YXIgY29sdW1uID0gdGhpcy5sYXN0TWFya2VyLmNvbHVtbiArIDE7CisJICAgICAgICB0aHJv
dyB0aGlzLmVycm9ySGFuZGxlci5jcmVhdGVFcnJvcihpbmRleCwgbGluZSwgY29sdW1uLCBtc2cp
OworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnRvbGVyYXRlRXJyb3IgPSBmdW5jdGlv
biAobWVzc2FnZUZvcm1hdCkgeworCSAgICAgICAgdmFyIHZhbHVlcyA9IFtdOworCSAgICAgICAg
Zm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKKwkgICAgICAg
ICAgICB2YWx1ZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07CisJICAgICAgICB9CisJICAgICAg
ICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CisJ
ICAgICAgICB2YXIgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKC8lKFxkKS9nLCBmdW5jdGlv
biAod2hvbGUsIGlkeCkgeworCSAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChpZHggPCBhcmdz
Lmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UnKTsKKwkgICAgICAg
ICAgICByZXR1cm4gYXJnc1tpZHhdOworCSAgICAgICAgfSk7CisJICAgICAgICB2YXIgaW5kZXgg
PSB0aGlzLmxhc3RNYXJrZXIuaW5kZXg7CisJICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2Nhbm5l
ci5saW5lTnVtYmVyOworCSAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGFzdE1hcmtlci5jb2x1
bW4gKyAxOworCSAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIudG9sZXJhdGVFcnJvcihpbmRleCwg
bGluZSwgY29sdW1uLCBtc2cpOworCSAgICB9OworCSAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24g
YmVjYXVzZSBvZiB0aGUgdG9rZW4uCisJICAgIFBhcnNlci5wcm90b3R5cGUudW5leHBlY3RlZFRv
a2VuRXJyb3IgPSBmdW5jdGlvbiAodG9rZW4sIG1lc3NhZ2UpIHsKKwkgICAgICAgIHZhciBtc2cg
PSBtZXNzYWdlIHx8IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuOworCSAgICAg
ICAgdmFyIHZhbHVlOworCSAgICAgICAgaWYgKHRva2VuKSB7CisJICAgICAgICAgICAgaWYgKCFt
ZXNzYWdlKSB7CisJICAgICAgICAgICAgICAgIG1zZyA9ICh0b2tlbi50eXBlID09PSAyIC8qIEVP
RiAqLykgPyBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRFT1MgOgorCSAgICAgICAgICAg
ICAgICAgICAgKHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLykgPyBtZXNzYWdlc18x
Lk1lc3NhZ2VzLlVuZXhwZWN0ZWRJZGVudGlmaWVyIDoKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAodG9rZW4udHlwZSA9PT0gNiAvKiBOdW1lcmljTGl0ZXJhbCAqLykgPyBtZXNzYWdlc18xLk1l
c3NhZ2VzLlVuZXhwZWN0ZWROdW1iZXIgOgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
dG9rZW4udHlwZSA9PT0gOCAvKiBTdHJpbmdMaXRlcmFsICovKSA/IG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuVW5leHBlY3RlZFN0cmluZyA6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
dG9rZW4udHlwZSA9PT0gMTAgLyogVGVtcGxhdGUgKi8pID8gbWVzc2FnZXNfMS5NZXNzYWdlcy5V
bmV4cGVjdGVkVGVtcGxhdGUgOgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuOworCSAgICAgICAgICAgICAgICBp
ZiAodG9rZW4udHlwZSA9PT0gNCAvKiBLZXl3b3JkICovKSB7CisJICAgICAgICAgICAgICAgICAg
ICBpZiAodGhpcy5zY2FubmVyLmlzRnV0dXJlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgewor
CSAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBl
Y3RlZFJlc2VydmVkOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiB0aGlzLnNjYW5uZXIuaXNTdHJpY3RN
b2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAg
IG1zZyA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworCSAgICAgICAg
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgIHZhbHVlID0gdG9rZW4udmFsdWU7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsK
KwkgICAgICAgICAgICB2YWx1ZSA9ICdJTExFR0FMJzsKKwkgICAgICAgIH0KKwkgICAgICAgIG1z
ZyA9IG1zZy5yZXBsYWNlKCclMCcsIHZhbHVlKTsKKwkgICAgICAgIGlmICh0b2tlbiAmJiB0eXBl
b2YgdG9rZW4ubGluZU51bWJlciA9PT0gJ251bWJlcicpIHsKKwkgICAgICAgICAgICB2YXIgaW5k
ZXggPSB0b2tlbi5zdGFydDsKKwkgICAgICAgICAgICB2YXIgbGluZSA9IHRva2VuLmxpbmVOdW1i
ZXI7CisJICAgICAgICAgICAgdmFyIGxhc3RNYXJrZXJMaW5lU3RhcnQgPSB0aGlzLmxhc3RNYXJr
ZXIuaW5kZXggLSB0aGlzLmxhc3RNYXJrZXIuY29sdW1uOworCSAgICAgICAgICAgIHZhciBjb2x1
bW4gPSB0b2tlbi5zdGFydCAtIGxhc3RNYXJrZXJMaW5lU3RhcnQgKyAxOworCSAgICAgICAgICAg
IHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5jcmVhdGVFcnJvcihpbmRleCwgbGluZSwgY29sdW1u
LCBtc2cpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdmFyIGlu
ZGV4ID0gdGhpcy5sYXN0TWFya2VyLmluZGV4OworCSAgICAgICAgICAgIHZhciBsaW5lID0gdGhp
cy5sYXN0TWFya2VyLmxpbmU7CisJICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGFzdE1h
cmtlci5jb2x1bW4gKyAxOworCSAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5j
cmVhdGVFcnJvcihpbmRleCwgbGluZSwgY29sdW1uLCBtc2cpOworCSAgICAgICAgfQorCSAgICB9
OworCSAgICBQYXJzZXIucHJvdG90eXBlLnRocm93VW5leHBlY3RlZFRva2VuID0gZnVuY3Rpb24g
KHRva2VuLCBtZXNzYWdlKSB7CisJICAgICAgICB0aHJvdyB0aGlzLnVuZXhwZWN0ZWRUb2tlbkVy
cm9yKHRva2VuLCBtZXNzYWdlKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS50b2xl
cmF0ZVVuZXhwZWN0ZWRUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbiwgbWVzc2FnZSkgeworCSAgICAg
ICAgdGhpcy5lcnJvckhhbmRsZXIudG9sZXJhdGUodGhpcy51bmV4cGVjdGVkVG9rZW5FcnJvcih0
b2tlbiwgbWVzc2FnZSkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLmNvbGxlY3RD
b21tZW50cyA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIGlmICghdGhpcy5jb25maWcuY29tbWVu
dCkgeworCSAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTsKKwkgICAgICAg
IH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIHZhciBjb21tZW50cyA9IHRoaXMuc2Nh
bm5lci5zY2FuQ29tbWVudHMoKTsKKwkgICAgICAgICAgICBpZiAoY29tbWVudHMubGVuZ3RoID4g
MCAmJiB0aGlzLmRlbGVnYXRlKSB7CisJICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgY29tbWVudHMubGVuZ3RoOyArK2kpIHsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBlID0g
Y29tbWVudHNbaV07CisJICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHZvaWQgMDsKKwkg
ICAgICAgICAgICAgICAgICAgIG5vZGUgPSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZTogZS5tdWx0aUxpbmUgPyAnQmxvY2tDb21tZW50JyA6ICdMaW5lQ29tbWVudCcsCisJICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2UoZS5zbGlj
ZVswXSwgZS5zbGljZVsxXSkKKwkgICAgICAgICAgICAgICAgICAgIH07CisJICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5jb25maWcucmFuZ2UpIHsKKwkgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLnJhbmdlID0gZS5yYW5nZTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sb2MpIHsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLmxvYyA9IGUubG9jOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgICAgICAgICAgdmFyIG1ldGFkYXRhID0geworCSAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXJ0OiB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGUubG9jLnN0YXJ0Lmxp
bmUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogZS5sb2Muc3RhcnQuY29s
dW1uLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGUucmFuZ2VbMF0KKwkg
ICAgICAgICAgICAgICAgICAgICAgICB9LAorCSAgICAgICAgICAgICAgICAgICAgICAgIGVuZDog
eworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBlLmxvYy5lbmQubGluZSwKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBlLmxvYy5lbmQuY29sdW1uLAorCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGUucmFuZ2VbMV0KKwkgICAgICAgICAg
ICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICB9OworCSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5kZWxlZ2F0ZShub2RlLCBtZXRhZGF0YSk7CisJICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgIH07CisJICAgIC8vIEZyb20gaW50ZXJu
YWwgcmVwcmVzZW50YXRpb24gdG8gYW4gZXh0ZXJuYWwgc3RydWN0dXJlCisJICAgIFBhcnNlci5w
cm90b3R5cGUuZ2V0VG9rZW5SYXcgPSBmdW5jdGlvbiAodG9rZW4pIHsKKwkgICAgICAgIHJldHVy
biB0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpOworCSAg
ICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLmNvbnZlcnRUb2tlbiA9IGZ1bmN0aW9uICh0b2tl
bikgeworCSAgICAgICAgdmFyIHQgPSB7CisJICAgICAgICAgICAgdHlwZTogdG9rZW5fMS5Ub2tl
bk5hbWVbdG9rZW4udHlwZV0sCisJICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0VG9rZW5SYXco
dG9rZW4pCisJICAgICAgICB9OworCSAgICAgICAgaWYgKHRoaXMuY29uZmlnLnJhbmdlKSB7CisJ
ICAgICAgICAgICAgdC5yYW5nZSA9IFt0b2tlbi5zdGFydCwgdG9rZW4uZW5kXTsKKwkgICAgICAg
IH0KKwkgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sb2MpIHsKKwkgICAgICAgICAgICB0LmxvYyA9
IHsKKwkgICAgICAgICAgICAgICAgc3RhcnQ6IHsKKwkgICAgICAgICAgICAgICAgICAgIGxpbmU6
IHRoaXMuc3RhcnRNYXJrZXIubGluZSwKKwkgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhp
cy5zdGFydE1hcmtlci5jb2x1bW4KKwkgICAgICAgICAgICAgICAgfSwKKwkgICAgICAgICAgICAg
ICAgZW5kOiB7CisJICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLnNjYW5uZXIubGluZU51
bWJlciwKKwkgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zY2FubmVyLmluZGV4IC0g
dGhpcy5zY2FubmVyLmxpbmVTdGFydAorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
fTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmICh0b2tlbi50eXBlID09PSA5IC8qIFJlZ3VsYXJF
eHByZXNzaW9uICovKSB7CisJICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSB0b2tlbi5wYXR0ZXJu
OworCSAgICAgICAgICAgIHZhciBmbGFncyA9IHRva2VuLmZsYWdzOworCSAgICAgICAgICAgIHQu
cmVnZXggPSB7IHBhdHRlcm46IHBhdHRlcm4sIGZsYWdzOiBmbGFncyB9OworCSAgICAgICAgfQor
CSAgICAgICAgcmV0dXJuIHQ7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUubmV4dFRv
a2VuID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7
CisJICAgICAgICB0aGlzLmxhc3RNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisJ
ICAgICAgICB0aGlzLmxhc3RNYXJrZXIubGluZSA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOwor
CSAgICAgICAgdGhpcy5sYXN0TWFya2VyLmNvbHVtbiA9IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRo
aXMuc2Nhbm5lci5saW5lU3RhcnQ7CisJICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50cygpOwor
CSAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pbmRleCAhPT0gdGhpcy5zdGFydE1hcmtlci5pbmRl
eCkgeworCSAgICAgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIu
aW5kZXg7CisJICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtlci5saW5lID0gdGhpcy5zY2FubmVy
LmxpbmVOdW1iZXI7CisJICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtlci5jb2x1bW4gPSB0aGlz
LnNjYW5uZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0OworCSAgICAgICAgfQorCSAg
ICAgICAgdmFyIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7CisJICAgICAgICB0aGlzLmhhc0xp
bmVUZXJtaW5hdG9yID0gKHRva2VuLmxpbmVOdW1iZXIgIT09IG5leHQubGluZU51bWJlcik7CisJ
ICAgICAgICBpZiAobmV4dCAmJiB0aGlzLmNvbnRleHQuc3RyaWN0ICYmIG5leHQudHlwZSA9PT0g
MyAvKiBJZGVudGlmaWVyICovKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1N0
cmljdE1vZGVSZXNlcnZlZFdvcmQobmV4dC52YWx1ZSkpIHsKKwkgICAgICAgICAgICAgICAgbmV4
dC50eXBlID0gNCAvKiBLZXl3b3JkICovOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkg
ICAgICAgIHRoaXMubG9va2FoZWFkID0gbmV4dDsKKwkgICAgICAgIGlmICh0aGlzLmNvbmZpZy50
b2tlbnMgJiYgbmV4dC50eXBlICE9PSAyIC8qIEVPRiAqLykgeworCSAgICAgICAgICAgIHRoaXMu
dG9rZW5zLnB1c2godGhpcy5jb252ZXJ0VG9rZW4obmV4dCkpOworCSAgICAgICAgfQorCSAgICAg
ICAgcmV0dXJuIHRva2VuOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLm5leHRSZWdl
eFRva2VuID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMoKTsK
KwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMuc2Nhbm5lci5zY2FuUmVnRXhwKCk7CisJICAgICAg
ICBpZiAodGhpcy5jb25maWcudG9rZW5zKSB7CisJICAgICAgICAgICAgLy8gUG9wIHRoZSBwcmV2
aW91cyB0b2tlbiwgJy8nIG9yICcvPScKKwkgICAgICAgICAgICAvLyBUaGlzIGlzIGFkZGVkIGZy
b20gdGhlIGxvb2thaGVhZCB0b2tlbi4KKwkgICAgICAgICAgICB0aGlzLnRva2Vucy5wb3AoKTsK
KwkgICAgICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHRoaXMuY29udmVydFRva2VuKHRva2VuKSk7
CisJICAgICAgICB9CisJICAgICAgICAvLyBQcmltZSB0aGUgbmV4dCBsb29rYWhlYWQuCisJICAg
ICAgICB0aGlzLmxvb2thaGVhZCA9IHRva2VuOworCSAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsK
KwkgICAgICAgIHJldHVybiB0b2tlbjsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5j
cmVhdGVOb2RlID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAg
ICBpbmRleDogdGhpcy5zdGFydE1hcmtlci5pbmRleCwKKwkgICAgICAgICAgICBsaW5lOiB0aGlz
LnN0YXJ0TWFya2VyLmxpbmUsCisJICAgICAgICAgICAgY29sdW1uOiB0aGlzLnN0YXJ0TWFya2Vy
LmNvbHVtbgorCSAgICAgICAgfTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5zdGFy
dE5vZGUgPSBmdW5jdGlvbiAodG9rZW4sIGxhc3RMaW5lU3RhcnQpIHsKKwkgICAgICAgIGlmIChs
YXN0TGluZVN0YXJ0ID09PSB2b2lkIDApIHsgbGFzdExpbmVTdGFydCA9IDA7IH0KKwkgICAgICAg
IHZhciBjb2x1bW4gPSB0b2tlbi5zdGFydCAtIHRva2VuLmxpbmVTdGFydDsKKwkgICAgICAgIHZh
ciBsaW5lID0gdG9rZW4ubGluZU51bWJlcjsKKwkgICAgICAgIGlmIChjb2x1bW4gPCAwKSB7CisJ
ICAgICAgICAgICAgY29sdW1uICs9IGxhc3RMaW5lU3RhcnQ7CisJICAgICAgICAgICAgbGluZS0t
OworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICBpbmRleDogdG9r
ZW4uc3RhcnQsCisJICAgICAgICAgICAgbGluZTogbGluZSwKKwkgICAgICAgICAgICBjb2x1bW46
IGNvbHVtbgorCSAgICAgICAgfTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5maW5h
bGl6ZSA9IGZ1bmN0aW9uIChtYXJrZXIsIG5vZGUpIHsKKwkgICAgICAgIGlmICh0aGlzLmNvbmZp
Zy5yYW5nZSkgeworCSAgICAgICAgICAgIG5vZGUucmFuZ2UgPSBbbWFya2VyLmluZGV4LCB0aGlz
Lmxhc3RNYXJrZXIuaW5kZXhdOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKHRoaXMuY29uZmln
LmxvYykgeworCSAgICAgICAgICAgIG5vZGUubG9jID0geworCSAgICAgICAgICAgICAgICBzdGFy
dDogeworCSAgICAgICAgICAgICAgICAgICAgbGluZTogbWFya2VyLmxpbmUsCisJICAgICAgICAg
ICAgICAgICAgICBjb2x1bW46IG1hcmtlci5jb2x1bW4sCisJICAgICAgICAgICAgICAgIH0sCisJ
ICAgICAgICAgICAgICAgIGVuZDogeworCSAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5s
YXN0TWFya2VyLmxpbmUsCisJICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMubGFzdE1h
cmtlci5jb2x1bW4KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH07CisJICAgICAg
ICAgICAgaWYgKHRoaXMuY29uZmlnLnNvdXJjZSkgeworCSAgICAgICAgICAgICAgICBub2RlLmxv
Yy5zb3VyY2UgPSB0aGlzLmNvbmZpZy5zb3VyY2U7CisJICAgICAgICAgICAgfQorCSAgICAgICAg
fQorCSAgICAgICAgaWYgKHRoaXMuZGVsZWdhdGUpIHsKKwkgICAgICAgICAgICB2YXIgbWV0YWRh
dGEgPSB7CisJICAgICAgICAgICAgICAgIHN0YXJ0OiB7CisJICAgICAgICAgICAgICAgICAgICBs
aW5lOiBtYXJrZXIubGluZSwKKwkgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogbWFya2VyLmNv
bHVtbiwKKwkgICAgICAgICAgICAgICAgICAgIG9mZnNldDogbWFya2VyLmluZGV4CisJICAgICAg
ICAgICAgICAgIH0sCisJICAgICAgICAgICAgICAgIGVuZDogeworCSAgICAgICAgICAgICAgICAg
ICAgbGluZTogdGhpcy5sYXN0TWFya2VyLmxpbmUsCisJICAgICAgICAgICAgICAgICAgICBjb2x1
bW46IHRoaXMubGFzdE1hcmtlci5jb2x1bW4sCisJICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6
IHRoaXMubGFzdE1hcmtlci5pbmRleAorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
fTsKKwkgICAgICAgICAgICB0aGlzLmRlbGVnYXRlKG5vZGUsIG1ldGFkYXRhKTsKKwkgICAgICAg
IH0KKwkgICAgICAgIHJldHVybiBub2RlOworCSAgICB9OworCSAgICAvLyBFeHBlY3QgdGhlIG5l
eHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgorCSAgICAvLyBJZiBu
b3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KKwkgICAgUGFyc2VyLnByb3RvdHlwZS5l
eHBlY3QgPSBmdW5jdGlvbiAodmFsdWUpIHsKKwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4
dFRva2VuKCk7CisJICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gNyAvKiBQdW5jdHVhdG9yICov
IHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4
cGVjdGVkVG9rZW4odG9rZW4pOworCSAgICAgICAgfQorCSAgICB9OworCSAgICAvLyBRdWlldGx5
IGV4cGVjdCBhIGNvbW1hIHdoZW4gaW4gdG9sZXJhbnQgbW9kZSwgb3RoZXJ3aXNlIGRlbGVnYXRl
cyB0byBleHBlY3QoKS4KKwkgICAgUGFyc2VyLnByb3RvdHlwZS5leHBlY3RDb21tYVNlcGFyYXRv
ciA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIGlmICh0aGlzLmNvbmZpZy50b2xlcmFudCkgewor
CSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgICAgIGlm
ICh0b2tlbi50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYgdG9rZW4udmFsdWUgPT09ICcs
JykgeworCSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8g
JiYgdG9rZW4udmFsdWUgPT09ICc7JykgeworCSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tl
bigpOworCSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2Vu
KTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAg
IHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICBl
bHNlIHsKKwkgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOworCSAgICAgICAgfQorCSAgICB9
OworCSAgICAvLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBr
ZXl3b3JkLgorCSAgICAvLyBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KKwkg
ICAgUGFyc2VyLnByb3RvdHlwZS5leHBlY3RLZXl3b3JkID0gZnVuY3Rpb24gKGtleXdvcmQpIHsK
KwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICBpZiAodG9r
ZW4udHlwZSAhPT0gNCAvKiBLZXl3b3JkICovIHx8IHRva2VuLnZhbHVlICE9PSBrZXl3b3JkKSB7
CisJICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7CisJICAgICAg
ICB9CisJICAgIH07CisJICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNo
ZXMgdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgorCSAgICBQYXJzZXIucHJvdG90eXBlLm1hdGNo
ID0gZnVuY3Rpb24gKHZhbHVlKSB7CisJICAgICAgICByZXR1cm4gdGhpcy5sb29rYWhlYWQudHlw
ZSA9PT0gNyAvKiBQdW5jdHVhdG9yICovICYmIHRoaXMubG9va2FoZWFkLnZhbHVlID09PSB2YWx1
ZTsKKwkgICAgfTsKKwkgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hl
cyB0aGUgc3BlY2lmaWVkIGtleXdvcmQKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5tYXRjaEtleXdv
cmQgPSBmdW5jdGlvbiAoa2V5d29yZCkgeworCSAgICAgICAgcmV0dXJuIHRoaXMubG9va2FoZWFk
LnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyAmJiB0aGlzLmxvb2thaGVhZC52YWx1ZSA9PT0ga2V5
d29yZDsKKwkgICAgfTsKKwkgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0
Y2hlcyB0aGUgc3BlY2lmaWVkIGNvbnRleHR1YWwga2V5d29yZAorCSAgICAvLyAod2hlcmUgYW4g
aWRlbnRpZmllciBpcyBzb21ldGltZXMgYSBrZXl3b3JkIGRlcGVuZGluZyBvbiB0aGUgY29udGV4
dCkKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5tYXRjaENvbnRleHR1YWxLZXl3b3JkID0gZnVuY3Rp
b24gKGtleXdvcmQpIHsKKwkgICAgICAgIHJldHVybiB0aGlzLmxvb2thaGVhZC50eXBlID09PSAz
IC8qIElkZW50aWZpZXIgKi8gJiYgdGhpcy5sb29rYWhlYWQudmFsdWUgPT09IGtleXdvcmQ7CisJ
ICAgIH07CisJICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2ln
bm1lbnQgb3BlcmF0b3IKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5tYXRjaEFzc2lnbiA9IGZ1bmN0
aW9uICgpIHsKKwkgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSA3IC8qIFB1bmN0
dWF0b3IgKi8pIHsKKwkgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgICAgICB9CisJICAg
ICAgICB2YXIgb3AgPSB0aGlzLmxvb2thaGVhZC52YWx1ZTsKKwkgICAgICAgIHJldHVybiBvcCA9
PT0gJz0nIHx8CisJICAgICAgICAgICAgb3AgPT09ICcqPScgfHwKKwkgICAgICAgICAgICBvcCA9
PT0gJyoqPScgfHwKKwkgICAgICAgICAgICBvcCA9PT0gJy89JyB8fAorCSAgICAgICAgICAgIG9w
ID09PSAnJT0nIHx8CisJICAgICAgICAgICAgb3AgPT09ICcrPScgfHwKKwkgICAgICAgICAgICBv
cCA9PT0gJy09JyB8fAorCSAgICAgICAgICAgIG9wID09PSAnPDw9JyB8fAorCSAgICAgICAgICAg
IG9wID09PSAnPj49JyB8fAorCSAgICAgICAgICAgIG9wID09PSAnPj4+PScgfHwKKwkgICAgICAg
ICAgICBvcCA9PT0gJyY9JyB8fAorCSAgICAgICAgICAgIG9wID09PSAnXj0nIHx8CisJICAgICAg
ICAgICAgb3AgPT09ICd8PSc7CisJICAgIH07CisJICAgIC8vIENvdmVyIGdyYW1tYXIgc3VwcG9y
dC4KKwkgICAgLy8KKwkgICAgLy8gV2hlbiBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb24gcG9zaXRp
b24gc3RhcnRzIHdpdGggYW4gbGVmdCBwYXJlbnRoZXNpcywgdGhlIGRldGVybWluYXRpb24gb2Yg
dGhlIHR5cGUKKwkgICAgLy8gb2YgdGhlIHN5bnRheCBpcyB0byBiZSBkZWZlcnJlZCBhcmJpdHJh
cmlseSBsb25nIHVudGlsIHRoZSBlbmQgb2YgdGhlIHBhcmVudGhlc2VzIHBhaXIgKHBsdXMgYSBs
b29rYWhlYWQpCisJICAgIC8vIG9yIHRoZSBmaXJzdCBjb21tYS4gVGhpcyBzaXR1YXRpb24gYWxz
byBkZWZlcnMgdGhlIGRldGVybWluYXRpb24gb2YgYWxsIHRoZSBleHByZXNzaW9ucyBuZXN0ZWQg
aW4gdGhlIHBhaXIuCisJICAgIC8vCisJICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBwcm9kdWN0aW9u
cyB0aGF0IGNhbiBiZSBwYXJzZWQgaW4gYSBwYXJlbnRoZXNlcyBwYWlyIHRoYXQgbmVlZHMgdG8g
YmUgZGV0ZXJtaW5lZAorCSAgICAvLyBhZnRlciB0aGUgb3V0ZXJtb3N0IHBhaXIgaXMgY2xvc2Vk
LiBUaGV5IGFyZToKKwkgICAgLy8KKwkgICAgLy8gICAxLiBBc3NpZ25tZW50RXhwcmVzc2lvbgor
CSAgICAvLyAgIDIuIEJpbmRpbmdFbGVtZW50cworCSAgICAvLyAgIDMuIEFzc2lnbm1lbnRUYXJn
ZXRzCisJICAgIC8vCisJICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGV4cG9uZW50aWFsIGJhY2t0
cmFja2luZywgd2UgdXNlIHR3byBmbGFncyB0byBkZW5vdGUgaWYgdGhlIHByb2R1Y3Rpb24gY2Fu
IGJlCisJICAgIC8vIGJpbmRpbmcgZWxlbWVudCBvciBhc3NpZ25tZW50IHRhcmdldC4KKwkgICAg
Ly8KKwkgICAgLy8gVGhlIHRocmVlIHByb2R1Y3Rpb25zIGhhdmUgdGhlIHJlbGF0aW9uc2hpcDoK
KwkgICAgLy8KKwkgICAgLy8gICBCaW5kaW5nRWxlbWVudHMg4oqGIEFzc2lnbm1lbnRUYXJnZXRz
IOKKhiBBc3NpZ25tZW50RXhwcmVzc2lvbgorCSAgICAvLworCSAgICAvLyB3aXRoIGEgc2luZ2xl
IGV4Y2VwdGlvbiB0aGF0IENvdmVySW5pdGlhbGl6ZWROYW1lIHdoZW4gdXNlZCBkaXJlY3RseSBp
biBhbiBFeHByZXNzaW9uLCBnZW5lcmF0ZXMKKwkgICAgLy8gYW4gZWFybHkgZXJyb3IuIFRoZXJl
Zm9yZSwgd2UgbmVlZCB0aGUgdGhpcmQgc3RhdGUsIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVF
cnJvciwgdG8gdHJhY2sgdGhlCisJICAgIC8vIGZpcnN0IHVzYWdlIG9mIENvdmVySW5pdGlhbGl6
ZWROYW1lIGFuZCByZXBvcnQgaXQgd2hlbiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHBhcmVu
dGhlc2VzIHBhaXIuCisJICAgIC8vCisJICAgIC8vIGlzb2xhdGVDb3ZlckdyYW1tYXIgZnVuY3Rp
b24gcnVucyB0aGUgZ2l2ZW4gcGFyc2VyIGZ1bmN0aW9uIHdpdGggYSBuZXcgY292ZXIgZ3JhbW1h
ciBjb250ZXh0LCBhbmQgaXQgZG9lcyBub3QKKwkgICAgLy8gZWZmZWN0IHRoZSBjdXJyZW50IGZs
YWdzLiBUaGlzIG1lYW5zIHRoZSBwcm9kdWN0aW9uIHRoZSBwYXJzZXIgcGFyc2VzIGlzIG9ubHkg
dXNlZCBhcyBhbiBleHByZXNzaW9uLiBUaGVyZWZvcmUKKwkgICAgLy8gdGhlIENvdmVySW5pdGlh
bGl6ZWROYW1lIGNoZWNrIGlzIGNvbmR1Y3RlZC4KKwkgICAgLy8KKwkgICAgLy8gaW5oZXJpdENv
dmVyR3JhbW1hciBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBwYXJzZSBmdW5jdGlvbiB3aXRoIGEg
bmV3IGNvdmVyIGdyYW1tYXIgY29udGV4dCwgYW5kIGl0IHByb3BhZ2F0ZXMKKwkgICAgLy8gdGhl
IGZsYWdzIG91dHNpZGUgb2YgdGhlIHBhcnNlci4gVGhpcyBtZWFucyB0aGUgcHJvZHVjdGlvbiB0
aGUgcGFyc2VyIHBhcnNlcyBpcyB1c2VkIGFzIGEgcGFydCBvZiBhIHBvdGVudGlhbAorCSAgICAv
LyBwYXR0ZXJuLiBUaGUgQ292ZXJJbml0aWFsaXplZE5hbWUgY2hlY2sgaXMgZGVmZXJyZWQuCisJ
ICAgIFBhcnNlci5wcm90b3R5cGUuaXNvbGF0ZUNvdmVyR3JhbW1hciA9IGZ1bmN0aW9uIChwYXJz
ZUZ1bmN0aW9uKSB7CisJICAgICAgICB2YXIgcHJldmlvdXNJc0JpbmRpbmdFbGVtZW50ID0gdGhp
cy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ7CisJICAgICAgICB2YXIgcHJldmlvdXNJc0Fzc2ln
bm1lbnRUYXJnZXQgPSB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0OworCSAgICAgICAg
dmFyIHByZXZpb3VzRmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gdGhpcy5jb250ZXh0
LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjsKKwkgICAgICAgIHRoaXMuY29udGV4dC5p
c0JpbmRpbmdFbGVtZW50ID0gdHJ1ZTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1l
bnRUYXJnZXQgPSB0cnVlOworCSAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFs
aXplZE5hbWVFcnJvciA9IG51bGw7CisJICAgICAgICB2YXIgcmVzdWx0ID0gcGFyc2VGdW5jdGlv
bi5jYWxsKHRoaXMpOworCSAgICAgICAgaWYgKHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlh
bGl6ZWROYW1lRXJyb3IgIT09IG51bGwpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBl
Y3RlZFRva2VuKHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IpOwor
CSAgICAgICAgfQorCSAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBwcmV2
aW91c0lzQmluZGluZ0VsZW1lbnQ7CisJICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50
VGFyZ2V0ID0gcHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQ7CisJICAgICAgICB0aGlzLmNvbnRl
eHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gcHJldmlvdXNGaXJzdENvdmVySW5p
dGlhbGl6ZWROYW1lRXJyb3I7CisJICAgICAgICByZXR1cm4gcmVzdWx0OworCSAgICB9OworCSAg
ICBQYXJzZXIucHJvdG90eXBlLmluaGVyaXRDb3ZlckdyYW1tYXIgPSBmdW5jdGlvbiAocGFyc2VG
dW5jdGlvbikgeworCSAgICAgICAgdmFyIHByZXZpb3VzSXNCaW5kaW5nRWxlbWVudCA9IHRoaXMu
Y29udGV4dC5pc0JpbmRpbmdFbGVtZW50OworCSAgICAgICAgdmFyIHByZXZpb3VzSXNBc3NpZ25t
ZW50VGFyZ2V0ID0gdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldDsKKwkgICAgICAgIHZh
ciBwcmV2aW91c0ZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IHRoaXMuY29udGV4dC5m
aXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I7CisJICAgICAgICB0aGlzLmNvbnRleHQuaXNC
aW5kaW5nRWxlbWVudCA9IHRydWU7CisJICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50
VGFyZ2V0ID0gdHJ1ZTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6
ZWROYW1lRXJyb3IgPSBudWxsOworCSAgICAgICAgdmFyIHJlc3VsdCA9IHBhcnNlRnVuY3Rpb24u
Y2FsbCh0aGlzKTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gdGhp
cy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgJiYgcHJldmlvdXNJc0JpbmRpbmdFbGVtZW50Owor
CSAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRoaXMuY29udGV4dC5p
c0Fzc2lnbm1lbnRUYXJnZXQgJiYgcHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQ7CisJICAgICAg
ICB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gcHJldmlvdXNG
aXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgfHwgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJ
bml0aWFsaXplZE5hbWVFcnJvcjsKKwkgICAgICAgIHJldHVybiByZXN1bHQ7CisJICAgIH07CisJ
ICAgIFBhcnNlci5wcm90b3R5cGUuY29uc3VtZVNlbWljb2xvbiA9IGZ1bmN0aW9uICgpIHsKKwkg
ICAgICAgIGlmICh0aGlzLm1hdGNoKCc7JykpIHsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tl
bigpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAoIXRoaXMuaGFzTGluZVRlcm1pbmF0
b3IpIHsKKwkgICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMiAvKiBFT0Yg
Ki8gJiYgIXRoaXMubWF0Y2goJ30nKSkgeworCSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5l
eHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgdGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhpcy5zdGFydE1hcmtlci5pbmRleDsKKwkgICAg
ICAgICAgICB0aGlzLmxhc3RNYXJrZXIubGluZSA9IHRoaXMuc3RhcnRNYXJrZXIubGluZTsKKwkg
ICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIuY29sdW1uID0gdGhpcy5zdGFydE1hcmtlci5jb2x1
bW47CisJICAgICAgICB9CisJICAgIH07CisJICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8v
ZWNtYTI2Mi8jc2VjLXByaW1hcnktZXhwcmVzc2lvbgorCSAgICBQYXJzZXIucHJvdG90eXBlLnBh
cnNlUHJpbWFyeUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIGV4cHI7CisJICAgICAgICB2YXIgdG9r
ZW4sIHJhdzsKKwkgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQudHlwZSkgeworCSAgICAg
ICAgICAgIGNhc2UgMyAvKiBJZGVudGlmaWVyICovOgorCSAgICAgICAgICAgICAgICBpZiAoKHRo
aXMuY29udGV4dC5pc01vZHVsZSB8fCB0aGlzLmNvbnRleHQuYXdhaXQpICYmIHRoaXMubG9va2Fo
ZWFkLnZhbHVlID09PSAnYXdhaXQnKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVy
YXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKSA/IHRoaXMu
cGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKSA6IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUu
SWRlbnRpZmllcih0aGlzLm5leHRUb2tlbigpLnZhbHVlKSk7CisJICAgICAgICAgICAgICAgIGJy
ZWFrOworCSAgICAgICAgICAgIGNhc2UgNiAvKiBOdW1lcmljTGl0ZXJhbCAqLzoKKwkgICAgICAg
ICAgICBjYXNlIDggLyogU3RyaW5nTGl0ZXJhbCAqLzoKKwkgICAgICAgICAgICAgICAgaWYgKHRo
aXMuY29udGV4dC5zdHJpY3QgJiYgdGhpcy5sb29rYWhlYWQub2N0YWwpIHsKKwkgICAgICAgICAg
ICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQsIG1l
c3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKwkgICAgICAgICAgICAgICAg
fQorCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFs
c2U7CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFs
c2U7CisJICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAg
ICAgICAgICAgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7CisJICAgICAgICAgICAgICAg
IGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwodG9rZW4udmFsdWUs
IHJhdykpOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIDEgLyog
Qm9vbGVhbkxpdGVyYWwgKi86CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2ln
bm1lbnRUYXJnZXQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmlu
ZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLm5leHRU
b2tlbigpOworCSAgICAgICAgICAgICAgICByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsK
KwkgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuTGl0
ZXJhbCh0b2tlbi52YWx1ZSA9PT0gJ3RydWUnLCByYXcpKTsKKwkgICAgICAgICAgICAgICAgYnJl
YWs7CisJICAgICAgICAgICAgY2FzZSA1IC8qIE51bGxMaXRlcmFsICovOgorCSAgICAgICAgICAg
ICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CisJICAgICAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICAg
ICAgICAgIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgcmF3ID0g
dGhpcy5nZXRUb2tlblJhdyh0b2tlbik7CisJICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwobnVsbCwgcmF3KSk7CisJICAgICAgICAgICAg
ICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2UgMTAgLyogVGVtcGxhdGUgKi86CisJICAgICAg
ICAgICAgICAgIGV4cHIgPSB0aGlzLnBhcnNlVGVtcGxhdGVMaXRlcmFsKCk7CisJICAgICAgICAg
ICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2UgNyAvKiBQdW5jdHVhdG9yICovOgorCSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMubG9va2FoZWFkLnZhbHVlKSB7CisJICAgICAgICAg
ICAgICAgICAgICBjYXNlICcoJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRl
eHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICAgICAgICAgIGV4
cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUdyb3VwRXhwcmVzc2lvbik7
CisJICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICBj
YXNlICdbJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5pbmhlcml0Q292
ZXJHcmFtbWFyKHRoaXMucGFyc2VBcnJheUluaXRpYWxpemVyKTsKKwkgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3snOgorCSAgICAgICAg
ICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJz
ZU9iamVjdEluaXRpYWxpemVyKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJy8nOgorCSAgICAgICAgICAgICAgICAgICAgY2FzZSAn
Lz0nOgorCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRU
YXJnZXQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNC
aW5kaW5nRWxlbWVudCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nh
bm5lci5pbmRleCA9IHRoaXMuc3RhcnRNYXJrZXIuaW5kZXg7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4gPSB0aGlzLm5leHRSZWdleFRva2VuKCk7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuUmVnZXhMaXRlcmFsKHRv
a2VuLnJlZ2V4LCByYXcsIHRva2VuLnBhdHRlcm4sIHRva2VuLmZsYWdzKSk7CisJICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorCSAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRo
aXMubmV4dFRva2VuKCkpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGJy
ZWFrOworCSAgICAgICAgICAgIGNhc2UgNCAvKiBLZXl3b3JkICovOgorCSAgICAgICAgICAgICAg
ICBpZiAoIXRoaXMuY29udGV4dC5zdHJpY3QgJiYgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgJiYg
dGhpcy5tYXRjaEtleXdvcmQoJ3lpZWxkJykpIHsKKwkgICAgICAgICAgICAgICAgICAgIGV4cHIg
PSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgICAgICBlbHNlIGlmICghdGhpcy5jb250ZXh0LnN0cmljdCAmJiB0aGlzLm1hdGNoS2V5
d29yZCgnbGV0JykpIHsKKwkgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXpl
KG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIodGhpcy5uZXh0VG9rZW4oKS52YWx1ZSkpOworCSAg
ICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOworCSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAg
ICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnZnVuY3Rpb24nKSkgeworCSAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLnBhcnNlRnVuY3Rpb25FeHByZXNzaW9u
KCk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
ICh0aGlzLm1hdGNoS2V5d29yZCgndGhpcycpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5UaGlzRXhwcmVzc2lvbigpKTsKKwkgICAgICAgICAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hLZXl3b3Jk
KCdjbGFzcycpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VD
bGFzc0V4cHJlc3Npb24oKTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hJbXBvcnRDYWxsKCkpIHsKKwkgICAgICAgICAgICAg
ICAgICAgICAgICBleHByID0gdGhpcy5wYXJzZUltcG9ydENhbGwoKTsKKwkgICAgICAgICAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cHIgPSB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkp
OworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGRlZmF1bHQ6CisJICAgICAgICAgICAgICAgIGV4
cHIgPSB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpOworCSAgICAg
ICAgfQorCSAgICAgICAgcmV0dXJuIGV4cHI7CisJICAgIH07CisJICAgIC8vIGh0dHBzOi8vdGMz
OS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LWluaXRpYWxpemVyCisJICAgIFBhcnNlci5w
cm90b3R5cGUucGFyc2VTcHJlYWRFbGVtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTsK
KwkgICAgICAgIHZhciBhcmcgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLlNwcmVhZEVsZW1lbnQoYXJnKSk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90
b3R5cGUucGFyc2VBcnJheUluaXRpYWxpemVyID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBlbGVtZW50cyA9IFtdOwor
CSAgICAgICAgdGhpcy5leHBlY3QoJ1snKTsKKwkgICAgICAgIHdoaWxlICghdGhpcy5tYXRjaCgn
XScpKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJywnKSkgeworCSAgICAgICAgICAg
ICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKG51
bGwpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcu
Li4nKSkgeworCSAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMucGFyc2VTcHJlYWRF
bGVtZW50KCk7CisJICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnXScpKSB7CisJICAg
ICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7
CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZh
bHNlOworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJywnKTsKKwkgICAgICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpOworCSAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgZWxlbWVudHMu
cHVzaCh0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKSk7CisJICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnXScpKSB7CisJICAgICAg
ICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOworCSAgICAgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5leHBlY3QoJ10nKTsKKwkgICAg
ICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFycmF5RXhwcmVzc2lvbihl
bGVtZW50cykpOworCSAgICB9OworCSAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEy
NjIvI3NlYy1vYmplY3QtaW5pdGlhbGl6ZXIKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVBy
b3BlcnR5TWV0aG9kID0gZnVuY3Rpb24gKHBhcmFtcykgeworCSAgICAgICAgdGhpcy5jb250ZXh0
LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOworCSAgICAgICAgdGhpcy5jb250ZXh0LmlzQmlu
ZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHRoaXMu
Y29udGV4dC5zdHJpY3Q7CisJICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2
ZSA9IHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZTsKKwkgICAgICAgIHRoaXMuY29u
dGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZSA9IHBhcmFtcy5zaW1wbGU7CisJICAgICAgICB2YXIg
Ym9keSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRnVuY3Rpb25Tb3VyY2VF
bGVtZW50cyk7CisJICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBwYXJhbXMuZmly
c3RSZXN0cmljdGVkKSB7CisJICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tl
bihwYXJhbXMuZmlyc3RSZXN0cmljdGVkLCBwYXJhbXMubWVzc2FnZSk7CisJICAgICAgICB9CisJ
ICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBwYXJhbXMuc3RyaWN0ZWQpIHsKKwkg
ICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHBhcmFtcy5zdHJpY3RlZCwg
cGFyYW1zLm1lc3NhZ2UpOworCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5jb250ZXh0LnN0cmlj
dCA9IHByZXZpb3VzU3RyaWN0OworCSAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGly
ZWN0aXZlID0gcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZTsKKwkgICAgICAgIHJldHVybiBi
b2R5OworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJvcGVydHlNZXRob2RG
dW5jdGlvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBpc0dlbmVyYXRvciA9IGZhbHNl
OworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBw
cmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKwkgICAgICAgIHRo
aXMuY29udGV4dC5hbGxvd1lpZWxkID0gdHJ1ZTsKKwkgICAgICAgIHZhciBwYXJhbXMgPSB0aGlz
LnBhcnNlRm9ybWFsUGFyYW1ldGVycygpOworCSAgICAgICAgdmFyIG1ldGhvZCA9IHRoaXMucGFy
c2VQcm9wZXJ0eU1ldGhvZChwYXJhbXMpOworCSAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWll
bGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShu
b2RlLCBuZXcgTm9kZS5GdW5jdGlvbkV4cHJlc3Npb24obnVsbCwgcGFyYW1zLnBhcmFtcywgbWV0
aG9kLCBpc0dlbmVyYXRvcikpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNl
UHJvcGVydHlNZXRob2RBc3luY0Z1bmN0aW9uID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWll
bGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKwkgICAgICAgIHZhciBwcmV2aW91c0F3YWl0
ID0gdGhpcy5jb250ZXh0LmF3YWl0OworCSAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQg
PSBmYWxzZTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5hd2FpdCA9IHRydWU7CisJICAgICAgICB2
YXIgcGFyYW1zID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKTsKKwkgICAgICAgIHZhciBt
ZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2QocGFyYW1zKTsKKwkgICAgICAgIHRoaXMu
Y29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOworCSAgICAgICAgdGhpcy5j
b250ZXh0LmF3YWl0ID0gcHJldmlvdXNBd2FpdDsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLkFzeW5jRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIHBhcmFtcy5w
YXJhbXMsIG1ldGhvZCkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlT2Jq
ZWN0UHJvcGVydHlLZXkgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
Y3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKwkg
ICAgICAgIHZhciBrZXk7CisJICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHsKKwkgICAgICAg
ICAgICBjYXNlIDggLyogU3RyaW5nTGl0ZXJhbCAqLzoKKwkgICAgICAgICAgICBjYXNlIDYgLyog
TnVtZXJpY0xpdGVyYWwgKi86CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3Ry
aWN0ICYmIHRva2VuLm9jdGFsKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRl
VW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0
ZXJhbCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgdmFyIHJhdyA9IHRo
aXMuZ2V0VG9rZW5SYXcodG9rZW4pOworCSAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwodG9rZW4udmFsdWUsIHJhdykpOworCSAgICAgICAg
ICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIDMgLyogSWRlbnRpZmllciAqLzoKKwkg
ICAgICAgICAgICBjYXNlIDEgLyogQm9vbGVhbkxpdGVyYWwgKi86CisJICAgICAgICAgICAgY2Fz
ZSA1IC8qIE51bGxMaXRlcmFsICovOgorCSAgICAgICAgICAgIGNhc2UgNCAvKiBLZXl3b3JkICov
OgorCSAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklk
ZW50aWZpZXIodG9rZW4udmFsdWUpKTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAg
ICAgICAgY2FzZSA3IC8qIFB1bmN0dWF0b3IgKi86CisJICAgICAgICAgICAgICAgIGlmICh0b2tl
bi52YWx1ZSA9PT0gJ1snKSB7CisJICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLmlzb2xh
dGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCddJyk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKHRva2VuKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAg
ICAgICBicmVhazsKKwkgICAgICAgICAgICBkZWZhdWx0OgorCSAgICAgICAgICAgICAgICBrZXkg
PSB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKKwkgICAgICAgIH0KKwkgICAgICAg
IHJldHVybiBrZXk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUuaXNQcm9wZXJ0eUtl
eSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisJICAgICAgICByZXR1cm4gKGtleS50eXBlID09
PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllciAmJiBrZXkubmFtZSA9PT0gdmFsdWUpIHx8CisJ
ICAgICAgICAgICAgKGtleS50eXBlID09PSBzeW50YXhfMS5TeW50YXguTGl0ZXJhbCAmJiBrZXku
dmFsdWUgPT09IHZhbHVlKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU9i
amVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKGhhc1Byb3RvKSB7CisJICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7
CisJICAgICAgICB2YXIga2luZDsKKwkgICAgICAgIHZhciBrZXkgPSBudWxsOworCSAgICAgICAg
dmFyIHZhbHVlID0gbnVsbDsKKwkgICAgICAgIHZhciBjb21wdXRlZCA9IGZhbHNlOworCSAgICAg
ICAgdmFyIG1ldGhvZCA9IGZhbHNlOworCSAgICAgICAgdmFyIHNob3J0aGFuZCA9IGZhbHNlOwor
CSAgICAgICAgdmFyIGlzQXN5bmMgPSBmYWxzZTsKKwkgICAgICAgIGlmICh0b2tlbi50eXBlID09
PSAzIC8qIElkZW50aWZpZXIgKi8pIHsKKwkgICAgICAgICAgICB2YXIgaWQgPSB0b2tlbi52YWx1
ZTsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIGNvbXB1dGVk
ID0gdGhpcy5tYXRjaCgnWycpOworCSAgICAgICAgICAgIGlzQXN5bmMgPSAhdGhpcy5oYXNMaW5l
VGVybWluYXRvciAmJiAoaWQgPT09ICdhc3luYycpICYmCisJICAgICAgICAgICAgICAgICF0aGlz
Lm1hdGNoKCc6JykgJiYgIXRoaXMubWF0Y2goJygnKSAmJiAhdGhpcy5tYXRjaCgnKicpICYmICF0
aGlzLm1hdGNoKCcsJyk7CisJICAgICAgICAgICAga2V5ID0gaXNBc3luYyA/IHRoaXMucGFyc2VP
YmplY3RQcm9wZXJ0eUtleSgpIDogdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlm
aWVyKGlkKSk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcqJykp
IHsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgfQorCSAgICAgICAg
ZWxzZSB7CisJICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7CisJICAgICAg
ICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisJICAgICAgICB9CisJ
ICAgICAgICB2YXIgbG9va2FoZWFkUHJvcGVydHlLZXkgPSB0aGlzLnF1YWxpZmllZFByb3BlcnR5
TmFtZSh0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gMyAvKiBJ
ZGVudGlmaWVyICovICYmICFpc0FzeW5jICYmIHRva2VuLnZhbHVlID09PSAnZ2V0JyAmJiBsb29r
YWhlYWRQcm9wZXJ0eUtleSkgeworCSAgICAgICAgICAgIGtpbmQgPSAnZ2V0JzsKKwkgICAgICAg
ICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2goJ1snKTsKKwkgICAgICAgICAgICBrZXkgPSB0aGlz
LnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKwkgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxs
b3dZaWVsZCA9IGZhbHNlOworCSAgICAgICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZUdldHRlck1l
dGhvZCgpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gMyAv
KiBJZGVudGlmaWVyICovICYmICFpc0FzeW5jICYmIHRva2VuLnZhbHVlID09PSAnc2V0JyAmJiBs
b29rYWhlYWRQcm9wZXJ0eUtleSkgeworCSAgICAgICAgICAgIGtpbmQgPSAnc2V0JzsKKwkgICAg
ICAgICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2goJ1snKTsKKwkgICAgICAgICAgICBrZXkgPSB0
aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKwkgICAgICAgICAgICB2YWx1ZSA9IHRoaXMu
cGFyc2VTZXR0ZXJNZXRob2QoKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYgKHRva2Vu
LnR5cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLyAmJiB0b2tlbi52YWx1ZSA9PT0gJyonICYmIGxv
b2thaGVhZFByb3BlcnR5S2V5KSB7CisJICAgICAgICAgICAga2luZCA9ICdpbml0JzsKKwkgICAg
ICAgICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2goJ1snKTsKKwkgICAgICAgICAgICBrZXkgPSB0
aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKwkgICAgICAgICAgICB2YWx1ZSA9IHRoaXMu
cGFyc2VHZW5lcmF0b3JNZXRob2QoKTsKKwkgICAgICAgICAgICBtZXRob2QgPSB0cnVlOworCSAg
ICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgaWYgKCFrZXkpIHsKKwkgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGtpbmQgPSAnaW5pdCc7CisJICAgICAgICAgICAg
aWYgKHRoaXMubWF0Y2goJzonKSAmJiAhaXNBc3luYykgeworCSAgICAgICAgICAgICAgICBpZiAo
IWNvbXB1dGVkICYmIHRoaXMuaXNQcm9wZXJ0eUtleShrZXksICdfX3Byb3RvX18nKSkgeworCSAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhc1Byb3RvLnZhbHVlKSB7CisJICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuRHVwbGljYXRl
UHJvdG9Qcm9wZXJ0eSk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAg
ICAgICBoYXNQcm90by52YWx1ZSA9IHRydWU7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlz
LmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKwkg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnKCcpKSB7CisJ
ICAgICAgICAgICAgICAgIHZhbHVlID0gaXNBc3luYyA/IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhv
ZEFzeW5jRnVuY3Rpb24oKSA6IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCk7CisJ
ICAgICAgICAgICAgICAgIG1ldGhvZCA9IHRydWU7CisJICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLykgeworCSAgICAg
ICAgICAgICAgICB2YXIgaWQgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZp
ZXIodG9rZW4udmFsdWUpKTsKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJz0nKSkg
eworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXpl
ZE5hbWVFcnJvciA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5u
ZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZCA9IHRydWU7CisJICAg
ICAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlz
LnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOworCSAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFzc2lnbm1lbnRQYXR0ZXJuKGlkLCBpbml0
KSk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAg
ICAgICAgICAgICAgICBzaG9ydGhhbmQgPSB0cnVlOworCSAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSBpZDsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlz
Lm5leHRUb2tlbigpKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1
cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Qcm9wZXJ0eShraW5kLCBrZXksIGNvbXB1
dGVkLCB2YWx1ZSwgbWV0aG9kLCBzaG9ydGhhbmQpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZU9iamVjdEluaXRpYWxpemVyID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAg
dmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7
CisJICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdOworCSAgICAgICAgdmFyIGhhc1Byb3RvID0g
eyB2YWx1ZTogZmFsc2UgfTsKKwkgICAgICAgIHdoaWxlICghdGhpcy5tYXRjaCgnfScpKSB7CisJ
ICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHRoaXMubWF0Y2goJy4uLicpID8gdGhpcy5wYXJz
ZVNwcmVhZEVsZW1lbnQoKSA6IHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eShoYXNQcm90bykpOwor
CSAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnfScpKSB7CisJICAgICAgICAgICAgICAgIHRo
aXMuZXhwZWN0Q29tbWFTZXBhcmF0b3IoKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJ
ICAgICAgICB0aGlzLmV4cGVjdCgnfScpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKSk7CisJICAgIH07CisJ
ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRlbXBsYXRlLWxpdGVy
YWxzCisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VUZW1wbGF0ZUhlYWQgPSBmdW5jdGlvbiAo
KSB7CisJICAgICAgICBhc3NlcnRfMS5hc3NlcnQodGhpcy5sb29rYWhlYWQuaGVhZCwgJ1RlbXBs
YXRlIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgdGVtcGxhdGUgaGVhZCcpOworCSAgICAgICAg
dmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMu
bmV4dFRva2VuKCk7CisJICAgICAgICB2YXIgcmF3ID0gdG9rZW4udmFsdWU7CisJICAgICAgICB2
YXIgY29va2VkID0gdG9rZW4uY29va2VkOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuVGVtcGxhdGVFbGVtZW50KHsgcmF3OiByYXcsIGNvb2tlZDogY29va2Vk
IH0sIHRva2VuLnRhaWwpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVRl
bXBsYXRlRWxlbWVudCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIGlmICh0aGlzLmxvb2thaGVh
ZC50eXBlICE9PSAxMCAvKiBUZW1wbGF0ZSAqLykgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dV
bmV4cGVjdGVkVG9rZW4oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5j
cmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOworCSAg
ICAgICAgdmFyIHJhdyA9IHRva2VuLnZhbHVlOworCSAgICAgICAgdmFyIGNvb2tlZCA9IHRva2Vu
LmNvb2tlZDsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlRl
bXBsYXRlRWxlbWVudCh7IHJhdzogcmF3LCBjb29rZWQ6IGNvb2tlZCB9LCB0b2tlbi50YWlsKSk7
CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VUZW1wbGF0ZUxpdGVyYWwgPSBm
dW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAg
ICAgICAgdmFyIGV4cHJlc3Npb25zID0gW107CisJICAgICAgICB2YXIgcXVhc2lzID0gW107CisJ
ICAgICAgICB2YXIgcXVhc2kgPSB0aGlzLnBhcnNlVGVtcGxhdGVIZWFkKCk7CisJICAgICAgICBx
dWFzaXMucHVzaChxdWFzaSk7CisJICAgICAgICB3aGlsZSAoIXF1YXNpLnRhaWwpIHsKKwkgICAg
ICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMucGFyc2VFeHByZXNzaW9uKCkpOworCSAgICAg
ICAgICAgIHF1YXNpID0gdGhpcy5wYXJzZVRlbXBsYXRlRWxlbWVudCgpOworCSAgICAgICAgICAg
IHF1YXNpcy5wdXNoKHF1YXNpKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBOb2RlLlRlbXBsYXRlTGl0ZXJhbChxdWFzaXMsIGV4cHJlc3Npb25z
KSk7CisJICAgIH07CisJICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2Vj
LWdyb3VwaW5nLW9wZXJhdG9yCisJICAgIFBhcnNlci5wcm90b3R5cGUucmVpbnRlcnByZXRFeHBy
ZXNzaW9uQXNQYXR0ZXJuID0gZnVuY3Rpb24gKGV4cHIpIHsKKwkgICAgICAgIHN3aXRjaCAoZXhw
ci50eXBlKSB7CisJICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcjoK
KwkgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5NZW1iZXJFeHByZXNzaW9uOgorCSAg
ICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LlJlc3RFbGVtZW50OgorCSAgICAgICAgICAg
IGNhc2Ugc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOgorCSAgICAgICAgICAgICAg
ICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5TcHJlYWRFbGVtZW50
OgorCSAgICAgICAgICAgICAgICBleHByLnR5cGUgPSBzeW50YXhfMS5TeW50YXguUmVzdEVsZW1l
bnQ7CisJICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJu
KGV4cHIuYXJndW1lbnQpOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBj
YXNlIHN5bnRheF8xLlN5bnRheC5BcnJheUV4cHJlc3Npb246CisJICAgICAgICAgICAgICAgIGV4
cHIudHlwZSA9IHN5bnRheF8xLlN5bnRheC5BcnJheVBhdHRlcm47CisJICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgZXhwci5lbGVtZW50cy5sZW5ndGg7IGkrKykgeworCSAgICAg
ICAgICAgICAgICAgICAgaWYgKGV4cHIuZWxlbWVudHNbaV0gIT09IG51bGwpIHsKKwkgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHBy
LmVsZW1lbnRzW2ldKTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAg
fQorCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5
bnRheC5PYmplY3RFeHByZXNzaW9uOgorCSAgICAgICAgICAgICAgICBleHByLnR5cGUgPSBzeW50
YXhfMS5TeW50YXguT2JqZWN0UGF0dGVybjsKKwkgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBleHByLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKKwkgICAgICAgICAgICAgICAg
ICAgIHZhciBwcm9wZXJ0eSA9IGV4cHIucHJvcGVydGllc1tpXTsKKwkgICAgICAgICAgICAgICAg
ICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKHByb3BlcnR5LnR5cGUgPT09
IHN5bnRheF8xLlN5bnRheC5TcHJlYWRFbGVtZW50ID8gcHJvcGVydHkgOiBwcm9wZXJ0eS52YWx1
ZSk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAg
ICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguQXNzaWdubWVudEV4cHJlc3Npb246CisJICAgICAg
ICAgICAgICAgIGV4cHIudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjsK
KwkgICAgICAgICAgICAgICAgZGVsZXRlIGV4cHIub3BlcmF0b3I7CisJICAgICAgICAgICAgICAg
IHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIubGVmdCk7CisJICAgICAg
ICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGRlZmF1bHQ6CisJICAgICAgICAgICAgICAg
IC8vIEFsbG93IG90aGVyIG5vZGUgdHlwZSBmb3IgdG9sZXJhbnQgcGFyc2luZy4KKwkgICAgICAg
ICAgICAgICAgYnJlYWs7CisJICAgICAgICB9CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5
cGUucGFyc2VHcm91cEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgZXhw
cjsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7CisJICAgICAgICBpZiAodGhpcy5tYXRjaCgn
KScpKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICBpZiAo
IXRoaXMubWF0Y2goJz0+JykpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJz0+Jyk7
CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGV4cHIgPSB7CisJICAgICAgICAgICAgICAg
IHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCisJICAgICAgICAgICAgICAgIHBhcmFt
czogW10sCisJICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZQorCSAgICAgICAgICAgIH07CisJ
ICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICB2YXIgc3RhcnRUb2tlbiA9
IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKKwkgICAgICAg
ICAgICBpZiAodGhpcy5tYXRjaCgnLi4uJykpIHsKKwkgICAgICAgICAgICAgICAgZXhwciA9IHRo
aXMucGFyc2VSZXN0RWxlbWVudChwYXJhbXMpOworCSAgICAgICAgICAgICAgICB0aGlzLmV4cGVj
dCgnKScpOworCSAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJz0+JykpIHsKKwkgICAg
ICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc9PicpOworCSAgICAgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgICAgIGV4cHIgPSB7CisJICAgICAgICAgICAgICAgICAgICB0eXBlOiBBcnJv
d1BhcmFtZXRlclBsYWNlSG9sZGVyLAorCSAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbZXhw
cl0sCisJICAgICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UKKwkgICAgICAgICAgICAgICAg
fTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAg
IHZhciBhcnJvdyA9IGZhbHNlOworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5k
aW5nRWxlbWVudCA9IHRydWU7CisJICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRD
b3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAgICAg
ICAgICAgaWYgKHRoaXMubWF0Y2goJywnKSkgeworCSAgICAgICAgICAgICAgICAgICAgdmFyIGV4
cHJlc3Npb25zID0gW107CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3Np
Z25tZW50VGFyZ2V0ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5w
dXNoKGV4cHIpOworCSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMubG9va2FoZWFkLnR5
cGUgIT09IDIgLyogRU9GICovKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlz
Lm1hdGNoKCcsJykpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4
dFRva2VuKCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyknKSkg
eworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb25zLmxl
bmd0aDsgaSsrKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlaW50
ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByZXNzaW9uc1tpXSk7CisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3cgPSB0
cnVlOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0geworCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogZXhwcmVzc2lvbnMsCisJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UKKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKKwkgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnLi4uJykpIHsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCkgewor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tl
bih0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaCh0aGlzLnBhcnNlUmVzdEVs
ZW1lbnQocGFyYW1zKSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0
KCcpJyk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnPT4n
KSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJz0+Jyk7
CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5ndGg7
IGkrKykgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJl
dEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcmVzc2lvbnNbaV0pOworCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycm93ID0gdHJ1ZTsK
KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHsKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGV4cHJlc3Npb25zLAorCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlCisJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH07CisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9u
cy5wdXNoKHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24pKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFycm93KSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICAgICAgICAgIGlmICghYXJyb3cpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBl
eHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUu
U2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKSk7CisJICAgICAgICAgICAgICAgICAgICB9
CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgaWYgKCFhcnJvdykgeworCSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKKwkgICAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLm1hdGNoKCc9PicpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4
cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIgJiYgZXhwci5uYW1lID09PSAn
eWllbGQnKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycm93ID0gdHJ1ZTsKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCisJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtleHByXSwKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZQorCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9OworCSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWFycm93KSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5j
b250ZXh0LmlzQmluZGluZ0VsZW1lbnQpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOworCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChl
eHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5TZXF1ZW5jZUV4cHJlc3Npb24pIHsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwci5leHBy
ZXNzaW9ucy5sZW5ndGg7IGkrKykgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuZXhwcmVzc2lvbnNb
aV0pOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25B
c1BhdHRlcm4oZXhwcik7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSAoZXhwci50eXBlID09PSBzeW50
YXhfMS5TeW50YXguU2VxdWVuY2VFeHByZXNzaW9uID8gZXhwci5leHByZXNzaW9ucyA6IFtleHBy
XSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7CisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlOiBBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyLAorCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbWV0ZXJzLAorCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlCisJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH07CisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0Vs
ZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAg
ICAgIH0KKwkgICAgICAgIHJldHVybiBleHByOworCSAgICB9OworCSAgICAvLyBodHRwczovL3Rj
MzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1sZWZ0LWhhbmQtc2lkZS1leHByZXNzaW9ucworCSAg
ICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQXJndW1lbnRzID0gZnVuY3Rpb24gKCkgeworCSAgICAg
ICAgdGhpcy5leHBlY3QoJygnKTsKKwkgICAgICAgIHZhciBhcmdzID0gW107CisJICAgICAgICBp
ZiAoIXRoaXMubWF0Y2goJyknKSkgeworCSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisJICAg
ICAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5tYXRjaCgnLi4uJykgPyB0aGlzLnBhcnNlU3By
ZWFkRWxlbWVudCgpIDoKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNvbGF0ZUNvdmVyR3Jh
bW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOworCSAgICAgICAgICAgICAgICBh
cmdzLnB1c2goZXhwcik7CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHsK
KwkgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgICAgIHRoaXMuZXhwZWN0Q29tbWFTZXBhcmF0b3IoKTsKKwkgICAgICAgICAgICAgICAg
aWYgKHRoaXMubWF0Y2goJyknKSkgeworCSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB0aGlz
LmV4cGVjdCgnKScpOworCSAgICAgICAgcmV0dXJuIGFyZ3M7CisJICAgIH07CisJICAgIFBhcnNl
ci5wcm90b3R5cGUuaXNJZGVudGlmaWVyTmFtZSA9IGZ1bmN0aW9uICh0b2tlbikgeworCSAgICAg
ICAgcmV0dXJuIHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLyB8fAorCSAgICAgICAg
ICAgIHRva2VuLnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyB8fAorCSAgICAgICAgICAgIHRva2Vu
LnR5cGUgPT09IDEgLyogQm9vbGVhbkxpdGVyYWwgKi8gfHwKKwkgICAgICAgICAgICB0b2tlbi50
eXBlID09PSA1IC8qIE51bGxMaXRlcmFsICovOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90
eXBlLnBhcnNlSWRlbnRpZmllck5hbWUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9r
ZW4oKTsKKwkgICAgICAgIGlmICghdGhpcy5pc0lkZW50aWZpZXJOYW1lKHRva2VuKSkgeworCSAg
ICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOworCSAgICAgICAgfQor
CSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWRlbnRpZmllcih0
b2tlbi52YWx1ZSkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTmV3RXhw
cmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVO
b2RlKCk7CisJICAgICAgICB2YXIgaWQgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKKwkg
ICAgICAgIGFzc2VydF8xLmFzc2VydChpZC5uYW1lID09PSAnbmV3JywgJ05ldyBleHByZXNzaW9u
IG11c3Qgc3RhcnQgd2l0aCBgbmV3YCcpOworCSAgICAgICAgdmFyIGV4cHI7CisJICAgICAgICBp
ZiAodGhpcy5tYXRjaCgnLicpKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkg
ICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICov
ICYmIHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSAmJiB0aGlzLmxvb2thaGVhZC52YWx1ZSA9
PT0gJ3RhcmdldCcpIHsKKwkgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5wYXJz
ZUlkZW50aWZpZXJOYW1lKCk7CisJICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgTm9kZS5NZXRh
UHJvcGVydHkoaWQsIHByb3BlcnR5KTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxz
ZSB7CisJICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29r
YWhlYWQpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYgKHRo
aXMubWF0Y2hLZXl3b3JkKCdpbXBvcnQnKSkgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4
cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7
CisJICAgICAgICAgICAgdmFyIGNhbGxlZSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlz
LnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbik7CisJICAgICAgICAgICAgdmFyIGFyZ3MgPSB0
aGlzLm1hdGNoKCcoJykgPyB0aGlzLnBhcnNlQXJndW1lbnRzKCkgOiBbXTsKKwkgICAgICAgICAg
ICBleHByID0gbmV3IE5vZGUuTmV3RXhwcmVzc2lvbihjYWxsZWUsIGFyZ3MpOworCSAgICAgICAg
ICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKwkgICAgICAgICAg
ICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworCSAgICAgICAgfQorCSAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgZXhwcik7CisJICAgIH07CisJICAgIFBh
cnNlci5wcm90b3R5cGUucGFyc2VBc3luY0FyZ3VtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAg
ICAgdmFyIGFyZyA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCSAgICAgICAg
dGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7CisJICAg
ICAgICByZXR1cm4gYXJnOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQXN5
bmNBcmd1bWVudHMgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB0aGlzLmV4cGVjdCgnKCcpOwor
CSAgICAgICAgdmFyIGFyZ3MgPSBbXTsKKwkgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpKSB7
CisJICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgICAgICAgICAgICAgdmFyIGV4cHIg
PSB0aGlzLm1hdGNoKCcuLi4nKSA/IHRoaXMucGFyc2VTcHJlYWRFbGVtZW50KCkgOgorCSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3luY0Fy
Z3VtZW50KTsKKwkgICAgICAgICAgICAgICAgYXJncy5wdXNoKGV4cHIpOworCSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsK
KwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdENvbW1hU2Vw
YXJhdG9yKCk7CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHsKKwkgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
fQorCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKKwkgICAgICAgIHJldHVy
biBhcmdzOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLm1hdGNoSW1wb3J0Q2FsbCA9
IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBtYXRjaCA9IHRoaXMubWF0Y2hLZXl3b3JkKCdp
bXBvcnQnKTsKKwkgICAgICAgIGlmIChtYXRjaCkgeworCSAgICAgICAgICAgIHZhciBzdGF0ZSA9
IHRoaXMuc2Nhbm5lci5zYXZlU3RhdGUoKTsKKwkgICAgICAgICAgICB0aGlzLnNjYW5uZXIuc2Nh
bkNvbW1lbnRzKCk7CisJICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7
CisJICAgICAgICAgICAgdGhpcy5zY2FubmVyLnJlc3RvcmVTdGF0ZShzdGF0ZSk7CisJICAgICAg
ICAgICAgbWF0Y2ggPSAobmV4dC50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8pICYmIChuZXh0
LnZhbHVlID09PSAnKCcpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIG1hdGNoOworCSAg
ICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlSW1wb3J0Q2FsbCA9IGZ1bmN0aW9uICgp
IHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB0aGlz
LmV4cGVjdEtleXdvcmQoJ2ltcG9ydCcpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuSW1wb3J0KCkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBl
LnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCA9IGZ1bmN0aW9uICgpIHsKKwkg
ICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAgICB2YXIgbWF5
YmVBc3luYyA9IHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnYXN5bmMnKTsKKwkgICAgICAg
IHZhciBwcmV2aW91c0FsbG93SW4gPSB0aGlzLmNvbnRleHQuYWxsb3dJbjsKKwkgICAgICAgIHRo
aXMuY29udGV4dC5hbGxvd0luID0gdHJ1ZTsKKwkgICAgICAgIHZhciBleHByOworCSAgICAgICAg
aWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdzdXBlcicpICYmIHRoaXMuY29udGV4dC5pbkZ1bmN0aW9u
Qm9keSkgeworCSAgICAgICAgICAgIGV4cHIgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAg
ICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXpl
KGV4cHIsIG5ldyBOb2RlLlN1cGVyKCkpOworCSAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgn
KCcpICYmICF0aGlzLm1hdGNoKCcuJykgJiYgIXRoaXMubWF0Y2goJ1snKSkgeworCSAgICAgICAg
ICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAg
ICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICBleHBy
ID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMubWF0Y2hLZXl3b3JkKCduZXcnKSA/IHRo
aXMucGFyc2VOZXdFeHByZXNzaW9uIDogdGhpcy5wYXJzZVByaW1hcnlFeHByZXNzaW9uKTsKKwkg
ICAgICAgIH0KKwkgICAgICAgIHdoaWxlICh0cnVlKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMu
bWF0Y2goJy4nKSkgeworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxl
bWVudCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50
VGFyZ2V0ID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJy4nKTsKKwkgICAg
ICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7CisJ
ICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0
VG9rZW4pLCBuZXcgTm9kZS5TdGF0aWNNZW1iZXJFeHByZXNzaW9uKGV4cHIsIHByb3BlcnR5KSk7
CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJygnKSkg
eworCSAgICAgICAgICAgICAgICB2YXIgYXN5bmNBcnJvdyA9IG1heWJlQXN5bmMgJiYgKHN0YXJ0
VG9rZW4ubGluZU51bWJlciA9PT0gdGhpcy5sb29rYWhlYWQubGluZU51bWJlcik7CisJICAgICAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKwkgICAg
ICAgICAgICAgICAgdmFyIGFyZ3MgPSBhc3luY0Fycm93ID8gdGhpcy5wYXJzZUFzeW5jQXJndW1l
bnRzKCkgOiB0aGlzLnBhcnNlQXJndW1lbnRzKCk7CisJICAgICAgICAgICAgICAgIGlmIChleHBy
LnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JbXBvcnQgJiYgYXJncy5sZW5ndGggIT09IDEpIHsK
KwkgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3Nh
Z2VzLkJhZEltcG9ydENhbGxBcml0eSk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5l
dyBOb2RlLkNhbGxFeHByZXNzaW9uKGV4cHIsIGFyZ3MpKTsKKwkgICAgICAgICAgICAgICAgaWYg
KGFzeW5jQXJyb3cgJiYgdGhpcy5tYXRjaCgnPT4nKSkgeworCSAgICAgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CisJICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oYXJnc1tpXSk7CisJ
ICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBleHByID0geworCSAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCisJ
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBhcmdzLAorCSAgICAgICAgICAgICAgICAg
ICAgICAgIGFzeW5jOiB0cnVlCisJICAgICAgICAgICAgICAgICAgICB9OworCSAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2go
J1snKSkgeworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9
IGZhbHNlOworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0
ID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJ1snKTsKKwkgICAgICAgICAg
ICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VF
eHByZXNzaW9uKTsKKwkgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJ10nKTsKKwkgICAgICAg
ICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiks
IG5ldyBOb2RlLkNvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbihleHByLCBwcm9wZXJ0eSkpOworCSAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09
PSAxMCAvKiBUZW1wbGF0ZSAqLyAmJiB0aGlzLmxvb2thaGVhZC5oZWFkKSB7CisJICAgICAgICAg
ICAgICAgIHZhciBxdWFzaSA9IHRoaXMucGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTsKKwkgICAgICAg
ICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiks
IG5ldyBOb2RlLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBxdWFzaSkpOworCSAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4g
PSBwcmV2aW91c0FsbG93SW47CisJICAgICAgICByZXR1cm4gZXhwcjsKKwkgICAgfTsKKwkgICAg
UGFyc2VyLnByb3RvdHlwZS5wYXJzZVN1cGVyID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgn
c3VwZXInKTsKKwkgICAgICAgIGlmICghdGhpcy5tYXRjaCgnWycpICYmICF0aGlzLm1hdGNoKCcu
JykpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2Fo
ZWFkKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBOb2RlLlN1cGVyKCkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTGVm
dEhhbmRTaWRlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIGFzc2VydF8xLmFz
c2VydCh0aGlzLmNvbnRleHQuYWxsb3dJbiwgJ2NhbGxlZSBvZiBuZXcgZXhwcmVzc2lvbiBhbHdh
eXMgYWxsb3cgaW4ga2V5d29yZC4nKTsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5v
ZGUodGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgdmFyIGV4cHIgPSAodGhpcy5tYXRjaEtleXdv
cmQoJ3N1cGVyJykgJiYgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KSA/IHRoaXMucGFyc2VT
dXBlcigpIDoKKwkgICAgICAgICAgICB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5tYXRj
aEtleXdvcmQoJ25ldycpID8gdGhpcy5wYXJzZU5ld0V4cHJlc3Npb24gOiB0aGlzLnBhcnNlUHJp
bWFyeUV4cHJlc3Npb24pOworCSAgICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgICAgICAgICBp
ZiAodGhpcy5tYXRjaCgnWycpKSB7CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Jp
bmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fz
c2lnbm1lbnRUYXJnZXQgPSB0cnVlOworCSAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnWycp
OworCSAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1t
YXIodGhpcy5wYXJzZUV4cHJlc3Npb24pOworCSAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgn
XScpOworCSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9k
ZS5Db21wdXRlZE1lbWJlckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkpKTsKKwkgICAgICAgICAg
ICB9CisJICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnLicpKSB7CisJICAgICAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOworCSAgICAgICAg
ICAgICAgICB0aGlzLmV4cGVjdCgnLicpOworCSAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkg
PSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKKwkgICAgICAgICAgICAgICAgZXhwciA9IHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuU3RhdGljTWVtYmVyRXhwcmVzc2lvbihleHByLCBw
cm9wZXJ0eSkpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmxv
b2thaGVhZC50eXBlID09PSAxMCAvKiBUZW1wbGF0ZSAqLyAmJiB0aGlzLmxvb2thaGVhZC5oZWFk
KSB7CisJICAgICAgICAgICAgICAgIHZhciBxdWFzaSA9IHRoaXMucGFyc2VUZW1wbGF0ZUxpdGVy
YWwoKTsKKwkgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5v
ZGUuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKGV4cHIsIHF1YXNpKSk7CisJICAgICAgICAgICAg
fQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAg
ICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gZXhwcjsKKwkgICAgfTsKKwkgICAg
Ly8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdXBkYXRlLWV4cHJlc3Npb25z
CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VVcGRhdGVFeHByZXNzaW9uID0gZnVuY3Rpb24g
KCkgeworCSAgICAgICAgdmFyIGV4cHI7CisJICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMu
bG9va2FoZWFkOworCSAgICAgICAgaWYgKHRoaXMubWF0Y2goJysrJykgfHwgdGhpcy5tYXRjaCgn
LS0nKSkgeworCSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoc3RhcnRUb2tl
bik7CisJICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAg
ICAgICBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VVbmFyeUV4cHJl
c3Npb24pOworCSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGV4cHIudHlw
ZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIgJiYgdGhpcy5zY2FubmVyLmlzUmVzdHJp
Y3RlZFdvcmQoZXhwci5uYW1lKSkgeworCSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJy
b3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RMSFNQcmVmaXgpOworCSAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQpIHsKKwkg
ICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52
YWxpZExIU0luQXNzaWdubWVudCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHZhciBw
cmVmaXggPSB0cnVlOworCSAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBOb2RlLlVwZGF0ZUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIsIHByZWZpeCkpOworCSAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKwkgICAg
ICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworCSAgICAgICAg
fQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgZXhwciA9IHRoaXMuaW5oZXJpdENvdmVy
R3JhbW1hcih0aGlzLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCk7CisJICAg
ICAgICAgICAgaWYgKCF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yICYmIHRoaXMubG9va2FoZWFkLnR5
cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLykgeworCSAgICAgICAgICAgICAgICBpZiAodGhpcy5t
YXRjaCgnKysnKSB8fCB0aGlzLm1hdGNoKCctLScpKSB7CisJICAgICAgICAgICAgICAgICAgICBp
ZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5J
ZGVudGlmaWVyICYmIHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsK
KwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5N
ZXNzYWdlcy5TdHJpY3RMSFNQb3N0Zml4KTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCkgewor
CSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1l
c3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworCSAgICAgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZh
bHNlOworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQg
PSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvciA9IHRoaXMubmV4dFRv
a2VuKCkudmFsdWU7CisJICAgICAgICAgICAgICAgICAgICB2YXIgcHJlZml4ID0gZmFsc2U7CisJ
ICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShz
dGFydFRva2VuKSwgbmV3IE5vZGUuVXBkYXRlRXhwcmVzc2lvbihvcGVyYXRvciwgZXhwciwgcHJl
Zml4KSk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJ
ICAgICAgICByZXR1cm4gZXhwcjsKKwkgICAgfTsKKwkgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1
Yi5pby9lY21hMjYyLyNzZWMtdW5hcnktb3BlcmF0b3JzCisJICAgIFBhcnNlci5wcm90b3R5cGUu
cGFyc2VBd2FpdEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAg
IHZhciBhcmd1bWVudCA9IHRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKwkgICAgICAgIHJl
dHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkF3YWl0RXhwcmVzc2lvbihhcmd1bWVu
dCkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVW5hcnlFeHByZXNzaW9u
ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIGV4cHI7CisJICAgICAgICBpZiAodGhpcy5t
YXRjaCgnKycpIHx8IHRoaXMubWF0Y2goJy0nKSB8fCB0aGlzLm1hdGNoKCd+JykgfHwgdGhpcy5t
YXRjaCgnIScpIHx8CisJICAgICAgICAgICAgdGhpcy5tYXRjaEtleXdvcmQoJ2RlbGV0ZScpIHx8
IHRoaXMubWF0Y2hLZXl3b3JkKCd2b2lkJykgfHwgdGhpcy5tYXRjaEtleXdvcmQoJ3R5cGVvZicp
KSB7CisJICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSh0aGlzLmxvb2thaGVh
ZCk7CisJICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAg
ICAgICBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VVbmFyeUV4cHJl
c3Npb24pOworCSAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LlVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcikpOworCSAgICAgICAgICAgIGlmICh0
aGlzLmNvbnRleHQuc3RyaWN0ICYmIGV4cHIub3BlcmF0b3IgPT09ICdkZWxldGUnICYmIGV4cHIu
YXJndW1lbnQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIpIHsKKwkgICAgICAg
ICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0RGVs
ZXRlKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdu
bWVudFRhcmdldCA9IGZhbHNlOworCSAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdF
bGVtZW50ID0gZmFsc2U7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRl
eHQuYXdhaXQgJiYgdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhd2FpdCcpKSB7CisJICAg
ICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VBd2FpdEV4cHJlc3Npb24oKTsKKwkgICAgICAgIH0K
KwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIGV4cHIgPSB0aGlzLnBhcnNlVXBkYXRlRXhw
cmVzc2lvbigpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGV4cHI7CisJICAgIH07CisJ
ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24gPSBmdW5j
dGlvbiAoKSB7CisJICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAg
ICAgICAgdmFyIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVVuYXJ5
RXhwcmVzc2lvbik7CisJICAgICAgICBpZiAoZXhwci50eXBlICE9PSBzeW50YXhfMS5TeW50YXgu
VW5hcnlFeHByZXNzaW9uICYmIHRoaXMubWF0Y2goJyoqJykpIHsKKwkgICAgICAgICAgICB0aGlz
Lm5leHRUb2tlbigpOworCSAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJn
ZXQgPSBmYWxzZTsKKwkgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9
IGZhbHNlOworCSAgICAgICAgICAgIHZhciBsZWZ0ID0gZXhwcjsKKwkgICAgICAgICAgICB2YXIg
cmlnaHQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50aWF0aW9u
RXhwcmVzc2lvbik7CisJICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFy
dE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkJpbmFyeUV4cHJlc3Npb24oJyoqJywgbGVmdCwg
cmlnaHQpKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBleHByOworCSAgICB9OworCSAg
ICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1leHAtb3BlcmF0b3IKKwkg
ICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbXVsdGlwbGljYXRpdmUt
b3BlcmF0b3JzCisJICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFk
ZGl0aXZlLW9wZXJhdG9ycworCSAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIv
I3NlYy1iaXR3aXNlLXNoaWZ0LW9wZXJhdG9ycworCSAgICAvLyBodHRwczovL3RjMzkuZ2l0aHVi
LmlvL2VjbWEyNjIvI3NlYy1yZWxhdGlvbmFsLW9wZXJhdG9ycworCSAgICAvLyBodHRwczovL3Rj
MzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1lcXVhbGl0eS1vcGVyYXRvcnMKKwkgICAgLy8gaHR0
cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYmluYXJ5LWJpdHdpc2Utb3BlcmF0b3Jz
CisJICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWJpbmFyeS1sb2dp
Y2FsLW9wZXJhdG9ycworCSAgICBQYXJzZXIucHJvdG90eXBlLmJpbmFyeVByZWNlZGVuY2UgPSBm
dW5jdGlvbiAodG9rZW4pIHsKKwkgICAgICAgIHZhciBvcCA9IHRva2VuLnZhbHVlOworCSAgICAg
ICAgdmFyIHByZWNlZGVuY2U7CisJICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gNyAvKiBQdW5j
dHVhdG9yICovKSB7CisJICAgICAgICAgICAgcHJlY2VkZW5jZSA9IHRoaXMub3BlcmF0b3JQcmVj
ZWRlbmNlW29wXSB8fCAwOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAodG9rZW4udHlw
ZSA9PT0gNCAvKiBLZXl3b3JkICovKSB7CisJICAgICAgICAgICAgcHJlY2VkZW5jZSA9IChvcCA9
PT0gJ2luc3RhbmNlb2YnIHx8ICh0aGlzLmNvbnRleHQuYWxsb3dJbiAmJiBvcCA9PT0gJ2luJykp
ID8gNyA6IDA7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICBwcmVj
ZWRlbmNlID0gMDsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBwcmVjZWRlbmNlOworCSAg
ICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQmluYXJ5RXhwcmVzc2lvbiA9IGZ1bmN0
aW9uICgpIHsKKwkgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAg
ICAgICB2YXIgZXhwciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25l
bnRpYXRpb25FeHByZXNzaW9uKTsKKwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFk
OworCSAgICAgICAgdmFyIHByZWMgPSB0aGlzLmJpbmFyeVByZWNlZGVuY2UodG9rZW4pOworCSAg
ICAgICAgaWYgKHByZWMgPiAwKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkg
ICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CisJICAg
ICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAg
ICAgICB2YXIgbWFya2VycyA9IFtzdGFydFRva2VuLCB0aGlzLmxvb2thaGVhZF07CisJICAgICAg
ICAgICAgdmFyIGxlZnQgPSBleHByOworCSAgICAgICAgICAgIHZhciByaWdodCA9IHRoaXMuaXNv
bGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKTsKKwkg
ICAgICAgICAgICB2YXIgc3RhY2sgPSBbbGVmdCwgdG9rZW4udmFsdWUsIHJpZ2h0XTsKKwkgICAg
ICAgICAgICB2YXIgcHJlY2VkZW5jZXMgPSBbcHJlY107CisJICAgICAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKwkgICAgICAgICAgICAgICAgcHJlYyA9IHRoaXMuYmluYXJ5UHJlY2VkZW5jZSh0aGlz
Lmxvb2thaGVhZCk7CisJICAgICAgICAgICAgICAgIGlmIChwcmVjIDw9IDApIHsKKwkgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAg
IC8vIFJlZHVjZTogbWFrZSBhIGJpbmFyeSBleHByZXNzaW9uIGZyb20gdGhlIHRocmVlIHRvcG1v
c3QgZW50cmllcy4KKwkgICAgICAgICAgICAgICAgd2hpbGUgKChzdGFjay5sZW5ndGggPiAyKSAm
JiAocHJlYyA8PSBwcmVjZWRlbmNlc1twcmVjZWRlbmNlcy5sZW5ndGggLSAxXSkpIHsKKwkgICAg
ICAgICAgICAgICAgICAgIHJpZ2h0ID0gc3RhY2sucG9wKCk7CisJICAgICAgICAgICAgICAgICAg
ICB2YXIgb3BlcmF0b3IgPSBzdGFjay5wb3AoKTsKKwkgICAgICAgICAgICAgICAgICAgIHByZWNl
ZGVuY2VzLnBvcCgpOworCSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHN0YWNrLnBvcCgpOwor
CSAgICAgICAgICAgICAgICAgICAgbWFya2Vycy5wb3AoKTsKKwkgICAgICAgICAgICAgICAgICAg
IHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUobWFya2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFdKTsK
KwkgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5CaW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkpKTsKKwkgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAvLyBTaGlmdC4KKwkgICAgICAgICAgICAgICAg
c3RhY2sucHVzaCh0aGlzLm5leHRUb2tlbigpLnZhbHVlKTsKKwkgICAgICAgICAgICAgICAgcHJl
Y2VkZW5jZXMucHVzaChwcmVjKTsKKwkgICAgICAgICAgICAgICAgbWFya2Vycy5wdXNoKHRoaXMu
bG9va2FoZWFkKTsKKwkgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLmlzb2xhdGVDb3Zl
ckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbikpOworCSAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICAvLyBGaW5hbCByZWR1Y2UgdG8gY2xlYW4tdXAgdGhlIHN0YWNr
LgorCSAgICAgICAgICAgIHZhciBpID0gc3RhY2subGVuZ3RoIC0gMTsKKwkgICAgICAgICAgICBl
eHByID0gc3RhY2tbaV07CisJICAgICAgICAgICAgdmFyIGxhc3RNYXJrZXIgPSBtYXJrZXJzLnBv
cCgpOworCSAgICAgICAgICAgIHdoaWxlIChpID4gMSkgeworCSAgICAgICAgICAgICAgICB2YXIg
bWFya2VyID0gbWFya2Vycy5wb3AoKTsKKwkgICAgICAgICAgICAgICAgdmFyIGxhc3RMaW5lU3Rh
cnQgPSBsYXN0TWFya2VyICYmIGxhc3RNYXJrZXIubGluZVN0YXJ0OworCSAgICAgICAgICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKG1hcmtlciwgbGFzdExpbmVTdGFydCk7CisJICAg
ICAgICAgICAgICAgIHZhciBvcGVyYXRvciA9IHN0YWNrW2kgLSAxXTsKKwkgICAgICAgICAgICAg
ICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQmluYXJ5RXhwcmVzc2lvbihv
cGVyYXRvciwgc3RhY2tbaSAtIDJdLCBleHByKSk7CisJICAgICAgICAgICAgICAgIGkgLT0gMjsK
KwkgICAgICAgICAgICAgICAgbGFzdE1hcmtlciA9IG1hcmtlcjsKKwkgICAgICAgICAgICB9CisJ
ICAgICAgICB9CisJICAgICAgICByZXR1cm4gZXhwcjsKKwkgICAgfTsKKwkgICAgLy8gaHR0cHM6
Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY29uZGl0aW9uYWwtb3BlcmF0b3IKKwkgICAg
UGFyc2VyLnByb3RvdHlwZS5wYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgp
IHsKKwkgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAgICB2
YXIgZXhwciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQmluYXJ5RXhwcmVz
c2lvbik7CisJICAgICAgICBpZiAodGhpcy5tYXRjaCgnPycpKSB7CisJICAgICAgICAgICAgdGhp
cy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5j
b250ZXh0LmFsbG93SW47CisJICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSB0cnVl
OworCSAgICAgICAgICAgIHZhciBjb25zZXF1ZW50ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFy
KHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisJICAgICAgICAgICAgdGhpcy5jb250
ZXh0LmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47CisJICAgICAgICAgICAgdGhpcy5leHBlY3Qo
JzonKTsKKwkgICAgICAgICAgICB2YXIgYWx0ZXJuYXRlID0gdGhpcy5pc29sYXRlQ292ZXJHcmFt
bWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisJICAgICAgICAgICAgZXhwciA9
IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkNvbmRp
dGlvbmFsRXhwcmVzc2lvbihleHByLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpKTsKKwkgICAgICAg
ICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CisJICAgICAgICAg
ICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgIH0KKwkg
ICAgICAgIHJldHVybiBleHByOworCSAgICB9OworCSAgICAvLyBodHRwczovL3RjMzkuZ2l0aHVi
LmlvL2VjbWEyNjIvI3NlYy1hc3NpZ25tZW50LW9wZXJhdG9ycworCSAgICBQYXJzZXIucHJvdG90
eXBlLmNoZWNrUGF0dGVyblBhcmFtID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmFtKSB7CisJICAg
ICAgICBzd2l0Y2ggKHBhcmFtLnR5cGUpIHsKKwkgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5
bnRheC5JZGVudGlmaWVyOgorCSAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlUGFyYW0ob3B0
aW9ucywgcGFyYW0sIHBhcmFtLm5hbWUpOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAg
ICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5SZXN0RWxlbWVudDoKKwkgICAgICAgICAgICAg
ICAgdGhpcy5jaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbS5hcmd1bWVudCk7CisJICAg
ICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LkFz
c2lnbm1lbnRQYXR0ZXJuOgorCSAgICAgICAgICAgICAgICB0aGlzLmNoZWNrUGF0dGVyblBhcmFt
KG9wdGlvbnMsIHBhcmFtLmxlZnQpOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAg
ICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5BcnJheVBhdHRlcm46CisJICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW0uZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKwkgICAg
ICAgICAgICAgICAgICAgIGlmIChwYXJhbS5lbGVtZW50c1tpXSAhPT0gbnVsbCkgeworCSAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0u
ZWxlbWVudHNbaV0pOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB9
CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3lu
dGF4Lk9iamVjdFBhdHRlcm46CisJICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cGFyYW0ucHJvcGVydGllcy5sZW5ndGg7IGkrKykgeworCSAgICAgICAgICAgICAgICAgICAgdmFy
IHByb3BlcnR5ID0gcGFyYW0ucHJvcGVydGllc1tpXTsKKwkgICAgICAgICAgICAgICAgICAgIHRo
aXMuY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgKHByb3BlcnR5LnR5cGUgPT09IHN5bnRheF8x
LlN5bnRheC5SZXN0RWxlbWVudCkgPyBwcm9wZXJ0eSA6IHByb3BlcnR5LnZhbHVlKTsKKwkgICAg
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBkZWZh
dWx0OgorCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIH0KKwkgICAgICAgIG9wdGlv
bnMuc2ltcGxlID0gb3B0aW9ucy5zaW1wbGUgJiYgKHBhcmFtIGluc3RhbmNlb2YgTm9kZS5JZGVu
dGlmaWVyKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5yZWludGVycHJldEFzQ292
ZXJGb3JtYWxzTGlzdCA9IGZ1bmN0aW9uIChleHByKSB7CisJICAgICAgICB2YXIgcGFyYW1zID0g
W2V4cHJdOworCSAgICAgICAgdmFyIG9wdGlvbnM7CisJICAgICAgICB2YXIgYXN5bmNBcnJvdyA9
IGZhbHNlOworCSAgICAgICAgc3dpdGNoIChleHByLnR5cGUpIHsKKwkgICAgICAgICAgICBjYXNl
IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyOgorCSAgICAgICAgICAgICAgICBicmVhazsKKwkg
ICAgICAgICAgICBjYXNlIEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXI6CisJICAgICAgICAgICAg
ICAgIHBhcmFtcyA9IGV4cHIucGFyYW1zOworCSAgICAgICAgICAgICAgICBhc3luY0Fycm93ID0g
ZXhwci5hc3luYzsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgZGVmYXVs
dDoKKwkgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisJICAgICAgICB9CisJICAgICAgICBv
cHRpb25zID0geworCSAgICAgICAgICAgIHNpbXBsZTogdHJ1ZSwKKwkgICAgICAgICAgICBwYXJh
bVNldDoge30KKwkgICAgICAgIH07CisJICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFt
cy5sZW5ndGg7ICsraSkgeworCSAgICAgICAgICAgIHZhciBwYXJhbSA9IHBhcmFtc1tpXTsKKwkg
ICAgICAgICAgICBpZiAocGFyYW0udHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRQ
YXR0ZXJuKSB7CisJICAgICAgICAgICAgICAgIGlmIChwYXJhbS5yaWdodC50eXBlID09PSBzeW50
YXhfMS5TeW50YXguWWllbGRFeHByZXNzaW9uKSB7CisJICAgICAgICAgICAgICAgICAgICBpZiAo
cGFyYW0ucmlnaHQuYXJndW1lbnQpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRo
cm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgICAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICAgICAgICAgIHBhcmFtLnJpZ2h0LnR5cGUgPSBzeW50YXhfMS5TeW50
YXguSWRlbnRpZmllcjsKKwkgICAgICAgICAgICAgICAgICAgIHBhcmFtLnJpZ2h0Lm5hbWUgPSAn
eWllbGQnOworCSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcmFtLnJpZ2h0LmFyZ3VtZW50
OworCSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcmFtLnJpZ2h0LmRlbGVnYXRlOworCSAg
ICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGFz
eW5jQXJyb3cgJiYgcGFyYW0udHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIgJiYg
cGFyYW0ubmFtZSA9PT0gJ2F3YWl0JykgeworCSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5l
eHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgdGhpcy5jaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbSk7CisJICAgICAgICAgICAg
cGFyYW1zW2ldID0gcGFyYW07CisJICAgICAgICB9CisJICAgICAgICBpZiAodGhpcy5jb250ZXh0
LnN0cmljdCB8fCAhdGhpcy5jb250ZXh0LmFsbG93WWllbGQpIHsKKwkgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7ICsraSkgeworCSAgICAgICAgICAgICAgICB2
YXIgcGFyYW0gPSBwYXJhbXNbaV07CisJICAgICAgICAgICAgICAgIGlmIChwYXJhbS50eXBlID09
PSBzeW50YXhfMS5TeW50YXguWWllbGRFeHByZXNzaW9uKSB7CisJICAgICAgICAgICAgICAgICAg
ICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGlmIChvcHRpb25z
Lm1lc3NhZ2UgPT09IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlKSB7CisJICAg
ICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5jb250ZXh0LnN0cmljdCA/IG9wdGlvbnMuc3RyaWN0
ZWQgOiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZDsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5l
eHBlY3RlZFRva2VuKHRva2VuLCBvcHRpb25zLm1lc3NhZ2UpOworCSAgICAgICAgfQorCSAgICAg
ICAgcmV0dXJuIHsKKwkgICAgICAgICAgICBzaW1wbGU6IG9wdGlvbnMuc2ltcGxlLAorCSAgICAg
ICAgICAgIHBhcmFtczogcGFyYW1zLAorCSAgICAgICAgICAgIHN0cmljdGVkOiBvcHRpb25zLnN0
cmljdGVkLAorCSAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogb3B0aW9ucy5maXJzdFJlc3Ry
aWN0ZWQsCisJICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlCisJICAgICAgICB9
OworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgZXhwcjsKKwkgICAgICAgIGlmICghdGhp
cy5jb250ZXh0LmFsbG93WWllbGQgJiYgdGhpcy5tYXRjaEtleXdvcmQoJ3lpZWxkJykpIHsKKwkg
ICAgICAgICAgICBleHByID0gdGhpcy5wYXJzZVlpZWxkRXhwcmVzc2lvbigpOworCSAgICAgICAg
fQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxv
b2thaGVhZDsKKwkgICAgICAgICAgICB2YXIgdG9rZW4gPSBzdGFydFRva2VuOworCSAgICAgICAg
ICAgIGV4cHIgPSB0aGlzLnBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7CisJICAgICAgICAg
ICAgaWYgKHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLyAmJiAodG9rZW4ubGluZU51
bWJlciA9PT0gdGhpcy5sb29rYWhlYWQubGluZU51bWJlcikgJiYgdG9rZW4udmFsdWUgPT09ICdh
c3luYycpIHsKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDMg
LyogSWRlbnRpZmllciAqLyB8fCB0aGlzLm1hdGNoS2V5d29yZCgneWllbGQnKSkgeworCSAgICAg
ICAgICAgICAgICAgICAgdmFyIGFyZyA9IHRoaXMucGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpOwor
CSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4o
YXJnKTsKKwkgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwKKwkgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbXM6IFthcmddLAorCSAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jOiB0
cnVlCisJICAgICAgICAgICAgICAgICAgICB9OworCSAgICAgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IEFycm93UGFyYW1ldGVyUGxh
Y2VIb2xkZXIgfHwgdGhpcy5tYXRjaCgnPT4nKSkgeworCSAgICAgICAgICAgICAgICAvLyBodHRw
czovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJvdy1mdW5jdGlvbi1kZWZpbml0aW9u
cworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFs
c2U7CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFs
c2U7CisJICAgICAgICAgICAgICAgIHZhciBpc0FzeW5jID0gZXhwci5hc3luYzsKKwkgICAgICAg
ICAgICAgICAgdmFyIGxpc3QgPSB0aGlzLnJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KGV4
cHIpOworCSAgICAgICAgICAgICAgICBpZiAobGlzdCkgeworCSAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuaGFzTGluZVRlcm1pbmF0b3IpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maXJzdENvdmVy
SW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsOworCSAgICAgICAgICAgICAgICAgICAgdmFyIHBy
ZXZpb3VzU3RyaWN0ID0gdGhpcy5jb250ZXh0LnN0cmljdDsKKwkgICAgICAgICAgICAgICAgICAg
IHZhciBwcmV2aW91c0FsbG93U3RyaWN0RGlyZWN0aXZlID0gdGhpcy5jb250ZXh0LmFsbG93U3Ry
aWN0RGlyZWN0aXZlOworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93U3Ry
aWN0RGlyZWN0aXZlID0gbGlzdC5zaW1wbGU7CisJICAgICAgICAgICAgICAgICAgICB2YXIgcHJl
dmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CisJICAgICAgICAgICAg
ICAgICAgICB2YXIgcHJldmlvdXNBd2FpdCA9IHRoaXMuY29udGV4dC5hd2FpdDsKKwkgICAgICAg
ICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gdHJ1ZTsKKwkgICAgICAgICAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5hd2FpdCA9IGlzQXN5bmM7CisJICAgICAgICAgICAgICAg
ICAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pOworCSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5leHBlY3QoJz0+Jyk7CisJICAgICAgICAgICAgICAgICAgICB2YXIgYm9k
eSA9IHZvaWQgMDsKKwkgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd7JykpIHsK
KwkgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250
ZXh0LmFsbG93SW47CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93
SW4gPSB0cnVlOworCSAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlzLnBhcnNlRnVu
Y3Rpb25Tb3VyY2VFbGVtZW50cygpOworCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOworCSAgICAgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgYm9k
eSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24pOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgdmFyIGV4
cHJlc3Npb24gPSBib2R5LnR5cGUgIT09IHN5bnRheF8xLlN5bnRheC5CbG9ja1N0YXRlbWVudDsK
KwkgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGxpc3QuZmly
c3RSZXN0cmljdGVkKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhw
ZWN0ZWRUb2tlbihsaXN0LmZpcnN0UmVzdHJpY3RlZCwgbGlzdC5tZXNzYWdlKTsKKwkgICAgICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3Ry
aWN0ICYmIGxpc3Quc3RyaWN0ZWQpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRv
bGVyYXRlVW5leHBlY3RlZFRva2VuKGxpc3Quc3RyaWN0ZWQsIGxpc3QubWVzc2FnZSk7CisJICAg
ICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBleHByID0gaXNBc3luYyA/
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQXN5bmNBcnJvd0Z1bmN0aW9uRXhwcmVzc2lv
bihsaXN0LnBhcmFtcywgYm9keSwgZXhwcmVzc2lvbikpIDoKKwkgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFycm93RnVuY3Rpb25FeHByZXNzaW9u
KGxpc3QucGFyYW1zLCBib2R5LCBleHByZXNzaW9uKSk7CisJICAgICAgICAgICAgICAgICAgICB0
aGlzLmNvbnRleHQuc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7CisJICAgICAgICAgICAgICAgICAg
ICB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmUgPSBwcmV2aW91c0FsbG93U3RyaWN0
RGlyZWN0aXZlOworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQg
PSBwcmV2aW91c0FsbG93WWllbGQ7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQu
YXdhaXQgPSBwcmV2aW91c0F3YWl0OworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
fQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEFz
c2lnbigpKSB7CisJICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5pc0Fzc2ln
bm1lbnRUYXJnZXQpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJy
b3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKKwkgICAgICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3Ry
aWN0ICYmIGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIpIHsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBleHByOworCSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgeworCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2Vu
LCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdExIU0Fzc2lnbm1lbnQpOworCSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVy
LmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChpZC5uYW1lKSkgeworCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18x
Lk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7CisJICAgICAgICAgICAgICAgICAgICAgICAg
fQorCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlz
Lm1hdGNoKCc9JykpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNB
c3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5j
b250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIpOworCSAgICAgICAgICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOwor
CSAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdG9yID0gdG9rZW4udmFsdWU7CisJICAgICAg
ICAgICAgICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5w
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0
aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5Bc3NpZ25t
ZW50RXhwcmVzc2lvbihvcGVyYXRvciwgZXhwciwgcmlnaHQpKTsKKwkgICAgICAgICAgICAgICAg
ICAgIHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsOwor
CSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAg
cmV0dXJuIGV4cHI7CisJICAgIH07CisJICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNt
YTI2Mi8jc2VjLWNvbW1hLW9wZXJhdG9yCisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VFeHBy
ZXNzaW9uID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxv
b2thaGVhZDsKKwkgICAgICAgIHZhciBleHByID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRo
aXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisJICAgICAgICBpZiAodGhpcy5tYXRjaCgn
LCcpKSB7CisJICAgICAgICAgICAgdmFyIGV4cHJlc3Npb25zID0gW107CisJICAgICAgICAgICAg
ZXhwcmVzc2lvbnMucHVzaChleHByKTsKKwkgICAgICAgICAgICB3aGlsZSAodGhpcy5sb29rYWhl
YWQudHlwZSAhPT0gMiAvKiBFT0YgKi8pIHsKKwkgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1h
dGNoKCcsJykpIHsKKwkgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAg
ICB9CisJICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAg
IGV4cHJlc3Npb25zLnB1c2godGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3Np
Z25tZW50RXhwcmVzc2lvbikpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBleHByID0g
dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUuU2VxdWVu
Y2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKSk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4g
ZXhwcjsKKwkgICAgfTsKKwkgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNz
ZWMtYmxvY2sKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVN0YXRlbWVudExpc3RJdGVtID0g
ZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIHN0YXRlbWVudDsKKwkgICAgICAgIHRoaXMuY29u
dGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOworCSAgICAgICAgdGhpcy5jb250ZXh0Lmlz
QmluZGluZ0VsZW1lbnQgPSB0cnVlOworCSAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUg
PT09IDQgLyogS2V5d29yZCAqLykgeworCSAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhl
YWQudmFsdWUpIHsKKwkgICAgICAgICAgICAgICAgY2FzZSAnZXhwb3J0JzoKKwkgICAgICAgICAg
ICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzTW9kdWxlKSB7CisJICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCwgbWVz
c2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb24pOworCSAgICAgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUV4
cG9ydERlY2xhcmF0aW9uKCk7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAg
ICAgICAgICAgY2FzZSAnaW1wb3J0JzoKKwkgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1h
dGNoSW1wb3J0Q2FsbCgpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0g
dGhpcy5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghdGhpcy5jb250ZXh0LmlzTW9kdWxlKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQsIG1lc3NhZ2VzXzEu
TWVzc2FnZXMuSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uKTsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUlt
cG9ydERlY2xhcmF0aW9uKCk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgY2FzZSAnY29uc3QnOgorCSAgICAgICAg
ICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUxleGljYWxEZWNsYXJhdGlvbih7IGlu
Rm9yOiBmYWxzZSB9KTsKKwkgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAg
ICAgICBjYXNlICdmdW5jdGlvbic6CisJICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0
aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpOworCSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisJICAgICAgICAgICAgICAgIGNhc2UgJ2NsYXNzJzoKKwkgICAgICAgICAgICAgICAgICAg
IHN0YXRlbWVudCA9IHRoaXMucGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7CisJICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgY2FzZSAnbGV0JzoKKwkgICAgICAgICAg
ICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMuaXNMZXhpY2FsRGVjbGFyYXRpb24oKSA/IHRoaXMu
cGFyc2VMZXhpY2FsRGVjbGFyYXRpb24oeyBpbkZvcjogZmFsc2UgfSkgOiB0aGlzLnBhcnNlU3Rh
dGVtZW50KCk7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKwkgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VTdGF0
ZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkg
ICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMu
cGFyc2VTdGF0ZW1lbnQoKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBzdGF0ZW1lbnQ7
CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VCbG9jayA9IGZ1bmN0aW9uICgp
IHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB0aGlz
LmV4cGVjdCgneycpOworCSAgICAgICAgdmFyIGJsb2NrID0gW107CisJICAgICAgICB3aGlsZSAo
dHJ1ZSkgeworCSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd9JykpIHsKKwkgICAgICAgICAg
ICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGJsb2NrLnB1c2godGhp
cy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpOworCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5l
eHBlY3QoJ30nKTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LkJsb2NrU3RhdGVtZW50KGJsb2NrKSk7CisJICAgIH07CisJICAgIC8vIGh0dHBzOi8vdGMzOS5n
aXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxldC1hbmQtY29uc3QtZGVjbGFyYXRpb25zCisJICAgIFBh
cnNlci5wcm90b3R5cGUucGFyc2VMZXhpY2FsQmluZGluZyA9IGZ1bmN0aW9uIChraW5kLCBvcHRp
b25zKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAg
dmFyIHBhcmFtcyA9IFtdOworCSAgICAgICAgdmFyIGlkID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFy
YW1zLCBraW5kKTsKKwkgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGlkLnR5cGUg
PT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMu
c2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7CisJICAgICAgICAgICAgICAgIHRo
aXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFZhck5hbWUpOworCSAg
ICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHZhciBpbml0ID0gbnVsbDsKKwkgICAg
ICAgIGlmIChraW5kID09PSAnY29uc3QnKSB7CisJICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNo
S2V5d29yZCgnaW4nKSAmJiAhdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdvZicpKSB7CisJ
ICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCc9JykpIHsKKwkgICAgICAgICAgICAgICAg
ICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5p
c29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisJICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAg
ICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5EZWNsYXJhdGlvbk1pc3Np
bmdJbml0aWFsaXplciwgJ2NvbnN0Jyk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICB9CisJICAgICAgICB9CisJICAgICAgICBlbHNlIGlmICgoIW9wdGlvbnMuaW5Gb3IgJiYgaWQu
dHlwZSAhPT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIpIHx8IHRoaXMubWF0Y2goJz0nKSkg
eworCSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc9Jyk7CisJICAgICAgICAgICAgaW5pdCA9IHRo
aXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwor
CSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUu
VmFyaWFibGVEZWNsYXJhdG9yKGlkLCBpbml0KSk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90
b3R5cGUucGFyc2VCaW5kaW5nTGlzdCA9IGZ1bmN0aW9uIChraW5kLCBvcHRpb25zKSB7CisJICAg
ICAgICB2YXIgbGlzdCA9IFt0aGlzLnBhcnNlTGV4aWNhbEJpbmRpbmcoa2luZCwgb3B0aW9ucyld
OworCSAgICAgICAgd2hpbGUgKHRoaXMubWF0Y2goJywnKSkgeworCSAgICAgICAgICAgIHRoaXMu
bmV4dFRva2VuKCk7CisJICAgICAgICAgICAgbGlzdC5wdXNoKHRoaXMucGFyc2VMZXhpY2FsQmlu
ZGluZyhraW5kLCBvcHRpb25zKSk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gbGlzdDsK
KwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5pc0xleGljYWxEZWNsYXJhdGlvbiA9IGZ1
bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc2Nhbm5lci5zYXZlU3RhdGUo
KTsKKwkgICAgICAgIHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTsKKwkgICAgICAgIHZhciBu
ZXh0ID0gdGhpcy5zY2FubmVyLmxleCgpOworCSAgICAgICAgdGhpcy5zY2FubmVyLnJlc3RvcmVT
dGF0ZShzdGF0ZSk7CisJICAgICAgICByZXR1cm4gKG5leHQudHlwZSA9PT0gMyAvKiBJZGVudGlm
aWVyICovKSB8fAorCSAgICAgICAgICAgIChuZXh0LnR5cGUgPT09IDcgLyogUHVuY3R1YXRvciAq
LyAmJiBuZXh0LnZhbHVlID09PSAnWycpIHx8CisJICAgICAgICAgICAgKG5leHQudHlwZSA9PT0g
NyAvKiBQdW5jdHVhdG9yICovICYmIG5leHQudmFsdWUgPT09ICd7JykgfHwKKwkgICAgICAgICAg
ICAobmV4dC50eXBlID09PSA0IC8qIEtleXdvcmQgKi8gJiYgbmV4dC52YWx1ZSA9PT0gJ2xldCcp
IHx8CisJICAgICAgICAgICAgKG5leHQudHlwZSA9PT0gNCAvKiBLZXl3b3JkICovICYmIG5leHQu
dmFsdWUgPT09ICd5aWVsZCcpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNl
TGV4aWNhbERlY2xhcmF0aW9uID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKwkgICAgICAgIHZhciBu
b2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIga2luZCA9IHRoaXMubmV4dFRv
a2VuKCkudmFsdWU7CisJICAgICAgICBhc3NlcnRfMS5hc3NlcnQoa2luZCA9PT0gJ2xldCcgfHwg
a2luZCA9PT0gJ2NvbnN0JywgJ0xleGljYWwgZGVjbGFyYXRpb24gbXVzdCBiZSBlaXRoZXIgbGV0
IG9yIGNvbnN0Jyk7CisJICAgICAgICB2YXIgZGVjbGFyYXRpb25zID0gdGhpcy5wYXJzZUJpbmRp
bmdMaXN0KGtpbmQsIG9wdGlvbnMpOworCSAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7
CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5WYXJpYWJsZURl
Y2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCkpOworCSAgICB9OworCSAgICAvLyBodHRwczov
L3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1kZXN0cnVjdHVyaW5nLWJpbmRpbmctcGF0dGVy
bnMKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUJpbmRpbmdSZXN0RWxlbWVudCA9IGZ1bmN0
aW9uIChwYXJhbXMsIGtpbmQpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2Rl
KCk7CisJICAgICAgICB0aGlzLmV4cGVjdCgnLi4uJyk7CisJICAgICAgICB2YXIgYXJnID0gdGhp
cy5wYXJzZVBhdHRlcm4ocGFyYW1zLCBraW5kKTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLlJlc3RFbGVtZW50KGFyZykpOworCSAgICB9OworCSAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlQXJyYXlQYXR0ZXJuID0gZnVuY3Rpb24gKHBhcmFtcywga2luZCkg
eworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMu
ZXhwZWN0KCdbJyk7CisJICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTsKKwkgICAgICAgIHdoaWxl
ICghdGhpcy5tYXRjaCgnXScpKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJywnKSkg
eworCSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICBl
bGVtZW50cy5wdXNoKG51bGwpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsK
KwkgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJy4uLicpKSB7CisJICAgICAgICAgICAg
ICAgICAgICBlbGVtZW50cy5wdXNoKHRoaXMucGFyc2VCaW5kaW5nUmVzdEVsZW1lbnQocGFyYW1z
LCBraW5kKSk7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAg
fQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRz
LnB1c2godGhpcy5wYXJzZVBhdHRlcm5XaXRoRGVmYXVsdChwYXJhbXMsIGtpbmQpKTsKKwkgICAg
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJ10nKSkgewor
CSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJywnKTsKKwkgICAgICAgICAgICAgICAg
fQorCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZXhwZWN0KCddJyk7
CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5BcnJheVBhdHRl
cm4oZWxlbWVudHMpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVByb3Bl
cnR5UGF0dGVybiA9IGZ1bmN0aW9uIChwYXJhbXMsIGtpbmQpIHsKKwkgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIgY29tcHV0ZWQgPSBmYWxzZTsKKwkg
ICAgICAgIHZhciBzaG9ydGhhbmQgPSBmYWxzZTsKKwkgICAgICAgIHZhciBtZXRob2QgPSBmYWxz
ZTsKKwkgICAgICAgIHZhciBrZXk7CisJICAgICAgICB2YXIgdmFsdWU7CisJICAgICAgICBpZiAo
dGhpcy5sb29rYWhlYWQudHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovKSB7CisJICAgICAgICAg
ICAgdmFyIGtleVRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAgICAgICAga2V5ID0gdGhp
cy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCSAgICAgICAgICAgIHZhciBpbml0ID0gdGhp
cy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVyKGtleVRva2VuLnZhbHVlKSk7CisJ
ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJz0nKSkgeworCSAgICAgICAgICAgICAgICBwYXJh
bXMucHVzaChrZXlUb2tlbik7CisJICAgICAgICAgICAgICAgIHNob3J0aGFuZCA9IHRydWU7CisJ
ICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgIHZhciBl
eHByID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisJICAgICAgICAgICAgICAg
IHZhbHVlID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShrZXlUb2tlbiksIG5ldyBOb2Rl
LkFzc2lnbm1lbnRQYXR0ZXJuKGluaXQsIGV4cHIpKTsKKwkgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgZWxzZSBpZiAoIXRoaXMubWF0Y2goJzonKSkgeworCSAgICAgICAgICAgICAgICBwYXJh
bXMucHVzaChrZXlUb2tlbik7CisJICAgICAgICAgICAgICAgIHNob3J0aGFuZCA9IHRydWU7CisJ
ICAgICAgICAgICAgICAgIHZhbHVlID0gaW5pdDsKKwkgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc6Jyk7CisJICAgICAgICAg
ICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZVBhdHRlcm5XaXRoRGVmYXVsdChwYXJhbXMsIGtpbmQp
OworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAg
ICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpOworCSAgICAgICAgICAgIGtleSA9IHRoaXMu
cGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOworCSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc6Jyk7
CisJICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFt
cywga2luZCk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5Qcm9wZXJ0eSgnaW5pdCcsIGtleSwgY29tcHV0ZWQsIHZhbHVlLCBtZXRob2Qs
IHNob3J0aGFuZCkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUmVzdFBy
b3BlcnR5ID0gZnVuY3Rpb24gKHBhcmFtcywga2luZCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTsKKwkgICAgICAg
IHZhciBhcmcgPSB0aGlzLnBhcnNlUGF0dGVybihwYXJhbXMpOworCSAgICAgICAgaWYgKHRoaXMu
bWF0Y2goJz0nKSkgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1l
c3NhZ2VzLkRlZmF1bHRSZXN0UHJvcGVydHkpOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKCF0
aGlzLm1hdGNoKCd9JykpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNf
MS5NZXNzYWdlcy5Qcm9wZXJ0eUFmdGVyUmVzdFByb3BlcnR5KTsKKwkgICAgICAgIH0KKwkgICAg
ICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlJlc3RFbGVtZW50KGFyZykp
OworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlT2JqZWN0UGF0dGVybiA9IGZ1
bmN0aW9uIChwYXJhbXMsIGtpbmQpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVO
b2RlKCk7CisJICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdOworCSAgICAgICAgdGhpcy5leHBl
Y3QoJ3snKTsKKwkgICAgICAgIHdoaWxlICghdGhpcy5tYXRjaCgnfScpKSB7CisJICAgICAgICAg
ICAgcHJvcGVydGllcy5wdXNoKHRoaXMubWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVJlc3RQcm9w
ZXJ0eShwYXJhbXMsIGtpbmQpIDogdGhpcy5wYXJzZVByb3BlcnR5UGF0dGVybihwYXJhbXMsIGtp
bmQpKTsKKwkgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJ30nKSkgeworCSAgICAgICAgICAg
ICAgICB0aGlzLmV4cGVjdCgnLCcpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAg
ICAgIHRoaXMuZXhwZWN0KCd9Jyk7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5PYmplY3RQYXR0ZXJuKHByb3BlcnRpZXMpKTsKKwkgICAgfTsKKwkgICAgUGFy
c2VyLnByb3RvdHlwZS5wYXJzZVBhdHRlcm4gPSBmdW5jdGlvbiAocGFyYW1zLCBraW5kKSB7CisJ
ICAgICAgICB2YXIgcGF0dGVybjsKKwkgICAgICAgIGlmICh0aGlzLm1hdGNoKCdbJykpIHsKKwkg
ICAgICAgICAgICBwYXR0ZXJuID0gdGhpcy5wYXJzZUFycmF5UGF0dGVybihwYXJhbXMsIGtpbmQp
OworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgneycpKSB7CisJICAg
ICAgICAgICAgcGF0dGVybiA9IHRoaXMucGFyc2VPYmplY3RQYXR0ZXJuKHBhcmFtcywga2luZCk7
CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICBpZiAodGhpcy5tYXRj
aEtleXdvcmQoJ2xldCcpICYmIChraW5kID09PSAnY29uc3QnIHx8IGtpbmQgPT09ICdsZXQnKSkg
eworCSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9v
a2FoZWFkLCBtZXNzYWdlc18xLk1lc3NhZ2VzLkxldEluTGV4aWNhbEJpbmRpbmcpOworCSAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICBwYXJhbXMucHVzaCh0aGlzLmxvb2thaGVhZCk7CisJICAg
ICAgICAgICAgcGF0dGVybiA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoa2luZCk7CisJ
ICAgICAgICB9CisJICAgICAgICByZXR1cm4gcGF0dGVybjsKKwkgICAgfTsKKwkgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZVBhdHRlcm5XaXRoRGVmYXVsdCA9IGZ1bmN0aW9uIChwYXJhbXMsIGtp
bmQpIHsKKwkgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAg
ICB2YXIgcGF0dGVybiA9IHRoaXMucGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCk7CisJICAgICAg
ICBpZiAodGhpcy5tYXRjaCgnPScpKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsK
KwkgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93
WWllbGQ7CisJICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSB0cnVlOworCSAg
ICAgICAgICAgIHZhciByaWdodCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24pOworCSAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lp
ZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOworCSAgICAgICAgICAgIHBhdHRlcm4gPSB0aGlzLmZp
bmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5Bc3NpZ25tZW50UGF0
dGVybihwYXR0ZXJuLCByaWdodCkpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHBhdHRl
cm47CisJICAgIH07CisJICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2Vj
LXZhcmlhYmxlLXN0YXRlbWVudAorCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVmFyaWFibGVJ
ZGVudGlmaWVyID0gZnVuY3Rpb24gKGtpbmQpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5j
cmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOworCSAg
ICAgICAgaWYgKHRva2VuLnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyAmJiB0b2tlbi52YWx1ZSA9
PT0gJ3lpZWxkJykgeworCSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0KSB7CisJ
ICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3Nh
Z2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsKKwkgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgZWxzZSBpZiAoIXRoaXMuY29udGV4dC5hbGxvd1lpZWxkKSB7CisJICAgICAgICAg
ICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOworCSAgICAgICAgICAgIH0K
KwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgIT09IDMgLyogSWRlbnRp
ZmllciAqLykgeworCSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHRva2Vu
LnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyAmJiB0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVz
ZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworCSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRl
VW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFJlc2VydmVk
V29yZCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCB8fCB0b2tlbi52YWx1ZSAhPT0gJ2xldCcgfHwg
a2luZCAhPT0gJ3ZhcicpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVj
dGVkVG9rZW4odG9rZW4pOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAg
ICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAoKHRoaXMuY29udGV4dC5pc01vZHVsZSB8fCB0aGlz
LmNvbnRleHQuYXdhaXQpICYmIHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLyAmJiB0
b2tlbi52YWx1ZSA9PT0gJ2F3YWl0JykgeworCSAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4
cGVjdGVkVG9rZW4odG9rZW4pOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpOworCSAgICB9Owor
CSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbiA9IGZ1bmN0aW9u
IChvcHRpb25zKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAg
ICAgICAgdmFyIHBhcmFtcyA9IFtdOworCSAgICAgICAgdmFyIGlkID0gdGhpcy5wYXJzZVBhdHRl
cm4ocGFyYW1zLCAndmFyJyk7CisJICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBp
ZC50eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcikgeworCSAgICAgICAgICAgIGlm
ICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgeworCSAgICAgICAgICAg
ICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RWYXJOYW1l
KTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB2YXIgaW5pdCA9IG51bGw7
CisJICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0
VG9rZW4oKTsKKwkgICAgICAgICAgICBpbml0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRo
aXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisJICAgICAgICB9CisJICAgICAgICBlbHNl
IGlmIChpZC50eXBlICE9PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllciAmJiAhb3B0aW9ucy5p
bkZvcikgeworCSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc9Jyk7CisJICAgICAgICB9CisJICAg
ICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0
b3IoaWQsIGluaXQpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVZhcmlh
YmxlRGVjbGFyYXRpb25MaXN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKKwkgICAgICAgIHZhciBv
cHQgPSB7IGluRm9yOiBvcHRpb25zLmluRm9yIH07CisJICAgICAgICB2YXIgbGlzdCA9IFtdOwor
CSAgICAgICAgbGlzdC5wdXNoKHRoaXMucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKG9wdCkpOwor
CSAgICAgICAgd2hpbGUgKHRoaXMubWF0Y2goJywnKSkgeworCSAgICAgICAgICAgIHRoaXMubmV4
dFRva2VuKCk7CisJICAgICAgICAgICAgbGlzdC5wdXNoKHRoaXMucGFyc2VWYXJpYWJsZURlY2xh
cmF0aW9uKG9wdCkpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGxpc3Q7CisJICAgIH07
CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VWYXJpYWJsZVN0YXRlbWVudCA9IGZ1bmN0aW9u
ICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB0
aGlzLmV4cGVjdEtleXdvcmQoJ3ZhcicpOworCSAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IHRo
aXMucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCh7IGluRm9yOiBmYWxzZSB9KTsKKwkgICAg
ICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsICd2YXIn
KSk7CisJICAgIH07CisJICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2Vj
LWVtcHR5LXN0YXRlbWVudAorCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRW1wdHlTdGF0ZW1l
bnQgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OworCSAgICAgICAgdGhpcy5leHBlY3QoJzsnKTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLkVtcHR5U3RhdGVtZW50KCkpOworCSAgICB9OworCSAgICAvLyBo
dHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1leHByZXNzaW9uLXN0YXRlbWVudAor
CSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCA9IGZ1bmN0aW9u
ICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2
YXIgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisJICAgICAgICB0aGlzLmNvbnN1bWVT
ZW1pY29sb24oKTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LkV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcikpOworCSAgICB9OworCSAgICAvLyBodHRwczovL3Rj
MzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pZi1zdGF0ZW1lbnQKKwkgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZUlmQ2xhdXNlID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgaWYgKHRoaXMuY29u
dGV4dC5zdHJpY3QgJiYgdGhpcy5tYXRjaEtleXdvcmQoJ2Z1bmN0aW9uJykpIHsKKwkgICAgICAg
ICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RGdW5jdGlv
bik7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVN0YXRlbWVudCgpOwor
CSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlSWZTdGF0ZW1lbnQgPSBmdW5jdGlv
biAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAg
dmFyIGNvbnNlcXVlbnQ7CisJICAgICAgICB2YXIgYWx0ZXJuYXRlID0gbnVsbDsKKwkgICAgICAg
IHRoaXMuZXhwZWN0S2V5d29yZCgnaWYnKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7CisJ
ICAgICAgICB2YXIgdGVzdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisJICAgICAgICBpZiAo
IXRoaXMubWF0Y2goJyknKSAmJiB0aGlzLmNvbmZpZy50b2xlcmFudCkgeworCSAgICAgICAgICAg
IHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7CisJICAgICAg
ICAgICAgY29uc2VxdWVudCA9IHRoaXMuZmluYWxpemUodGhpcy5jcmVhdGVOb2RlKCksIG5ldyBO
b2RlLkVtcHR5U3RhdGVtZW50KCkpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAg
ICAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKKwkgICAgICAgICAgICBjb25zZXF1ZW50ID0gdGhp
cy5wYXJzZUlmQ2xhdXNlKCk7CisJICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdl
bHNlJykpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAg
ICAgICAgYWx0ZXJuYXRlID0gdGhpcy5wYXJzZUlmQ2xhdXNlKCk7CisJICAgICAgICAgICAgfQor
CSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUu
SWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSk7CisJICAgIH07CisJICAg
IC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWRvLXdoaWxlLXN0YXRlbWVu
dAorCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRG9XaGlsZVN0YXRlbWVudCA9IGZ1bmN0aW9u
ICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB0
aGlzLmV4cGVjdEtleXdvcmQoJ2RvJyk7CisJICAgICAgICB2YXIgcHJldmlvdXNJbkl0ZXJhdGlv
biA9IHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbjsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pbkl0
ZXJhdGlvbiA9IHRydWU7CisJICAgICAgICB2YXIgYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQo
KTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IHByZXZpb3VzSW5JdGVyYXRp
b247CisJICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3doaWxlJyk7CisJICAgICAgICB0aGlz
LmV4cGVjdCgnKCcpOworCSAgICAgICAgdmFyIHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigp
OworCSAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykgJiYgdGhpcy5jb25maWcudG9sZXJhbnQp
IHsKKwkgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRv
a2VuKCkpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdGhpcy5l
eHBlY3QoJyknKTsKKwkgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnOycpKSB7CisJICAgICAg
ICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQor
CSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRG9XaGlsZVN0YXRl
bWVudChib2R5LCB0ZXN0KSk7CisJICAgIH07CisJICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIu
aW8vZWNtYTI2Mi8jc2VjLXdoaWxlLXN0YXRlbWVudAorCSAgICBQYXJzZXIucHJvdG90eXBlLnBh
cnNlV2hpbGVTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRo
aXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIGJvZHk7CisJICAgICAgICB0aGlzLmV4cGVj
dEtleXdvcmQoJ3doaWxlJyk7CisJICAgICAgICB0aGlzLmV4cGVjdCgnKCcpOworCSAgICAgICAg
dmFyIHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworCSAgICAgICAgaWYgKCF0aGlzLm1h
dGNoKCcpJykgJiYgdGhpcy5jb25maWcudG9sZXJhbnQpIHsKKwkgICAgICAgICAgICB0aGlzLnRv
bGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpOworCSAgICAgICAgICAgIGJv
ZHkgPSB0aGlzLmZpbmFsaXplKHRoaXMuY3JlYXRlTm9kZSgpLCBuZXcgTm9kZS5FbXB0eVN0YXRl
bWVudCgpKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIHRoaXMu
ZXhwZWN0KCcpJyk7CisJICAgICAgICAgICAgdmFyIHByZXZpb3VzSW5JdGVyYXRpb24gPSB0aGlz
LmNvbnRleHQuaW5JdGVyYXRpb247CisJICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0
aW9uID0gdHJ1ZTsKKwkgICAgICAgICAgICBib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOwor
CSAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IHByZXZpb3VzSW5JdGVyYXRp
b247CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5XaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KSk7CisJICAgIH07CisJICAgIC8vIGh0dHBz
Oi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWZvci1zdGF0ZW1lbnQKKwkgICAgLy8gaHR0
cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZm9yLWluLWFuZC1mb3Itb2Ytc3RhdGVt
ZW50cworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRm9yU3RhdGVtZW50ID0gZnVuY3Rpb24g
KCkgeworCSAgICAgICAgdmFyIGluaXQgPSBudWxsOworCSAgICAgICAgdmFyIHRlc3QgPSBudWxs
OworCSAgICAgICAgdmFyIHVwZGF0ZSA9IG51bGw7CisJICAgICAgICB2YXIgZm9ySW4gPSB0cnVl
OworCSAgICAgICAgdmFyIGxlZnQsIHJpZ2h0OworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZm9yJyk7CisJICAgICAg
ICB0aGlzLmV4cGVjdCgnKCcpOworCSAgICAgICAgaWYgKHRoaXMubWF0Y2goJzsnKSkgeworCSAg
ICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsK
KwkgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ3ZhcicpKSB7CisJICAgICAgICAg
ICAgICAgIGluaXQgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgICAgICAgICAgdGhpcy5u
ZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJbiA9IHRoaXMu
Y29udGV4dC5hbGxvd0luOworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9
IGZhbHNlOworCSAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRpb25zID0gdGhpcy5wYXJzZVZh
cmlhYmxlRGVjbGFyYXRpb25MaXN0KHsgaW5Gb3I6IHRydWUgfSk7CisJICAgICAgICAgICAgICAg
IHRoaXMuY29udGV4dC5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOworCSAgICAgICAgICAgICAg
ICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiB0aGlzLm1hdGNoS2V5d29yZCgnaW4n
KSkgeworCSAgICAgICAgICAgICAgICAgICAgdmFyIGRlY2wgPSBkZWNsYXJhdGlvbnNbMF07CisJ
ICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbC5pbml0ICYmIChkZWNsLmlkLnR5cGUgPT09IHN5
bnRheF8xLlN5bnRheC5BcnJheVBhdHRlcm4gfHwgZGVjbC5pZC50eXBlID09PSBzeW50YXhfMS5T
eW50YXguT2JqZWN0UGF0dGVybiB8fCB0aGlzLmNvbnRleHQuc3RyaWN0KSkgeworCSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkZv
ckluT2ZMb29wSW5pdGlhbGl6ZXIsICdmb3ItaW4nKTsKKwkgICAgICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmZpbmFsaXplKGluaXQsIG5ldyBOb2Rl
LlZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCAndmFyJykpOworCSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBp
bml0OworCSAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigp
OworCSAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7CisJICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiBk
ZWNsYXJhdGlvbnNbMF0uaW5pdCA9PT0gbnVsbCAmJiB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdv
cmQoJ29mJykpIHsKKwkgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmZpbmFsaXplKGlu
aXQsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCAndmFyJykpOwor
CSAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAg
ICAgIGxlZnQgPSBpbml0OworCSAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSB0aGlzLnBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24oKTsKKwkgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxs
OworCSAgICAgICAgICAgICAgICAgICAgZm9ySW4gPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAg
fQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0
aGlzLmZpbmFsaXplKGluaXQsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRp
b25zLCAndmFyJykpOworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJzsnKTsKKwkg
ICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0
aGlzLm1hdGNoS2V5d29yZCgnY29uc3QnKSB8fCB0aGlzLm1hdGNoS2V5d29yZCgnbGV0JykpIHsK
KwkgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgICAg
ICAgICB2YXIga2luZCA9IHRoaXMubmV4dFRva2VuKCkudmFsdWU7CisJICAgICAgICAgICAgICAg
IGlmICghdGhpcy5jb250ZXh0LnN0cmljdCAmJiB0aGlzLmxvb2thaGVhZC52YWx1ZSA9PT0gJ2lu
JykgeworCSAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxpemUoaW5pdCwgbmV3
IE5vZGUuSWRlbnRpZmllcihraW5kKSk7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRU
b2tlbigpOworCSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7CisJICAgICAgICAgICAg
ICAgICAgICByaWdodCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisJICAgICAgICAgICAgICAg
ICAgICBpbml0ID0gbnVsbDsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBl
bHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4gPSB0aGlzLmNv
bnRleHQuYWxsb3dJbjsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0lu
ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRpb25zID0gdGhpcy5w
YXJzZUJpbmRpbmdMaXN0KGtpbmQsIHsgaW5Gb3I6IHRydWUgfSk7CisJICAgICAgICAgICAgICAg
ICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKKwkgICAgICAgICAg
ICAgICAgICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIGRlY2xhcmF0aW9uc1sw
XS5pbml0ID09PSBudWxsICYmIHRoaXMubWF0Y2hLZXl3b3JkKCdpbicpKSB7CisJICAgICAgICAg
ICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuVmFyaWFi
bGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpKTsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBp
bml0OworCSAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gdGhpcy5wYXJzZUV4cHJlc3Np
b24oKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKKwkgICAgICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlY2xhcmF0aW9ucy5s
ZW5ndGggPT09IDEgJiYgZGVjbGFyYXRpb25zWzBdLmluaXQgPT09IG51bGwgJiYgdGhpcy5tYXRj
aENvbnRleHR1YWxLZXl3b3JkKCdvZicpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgaW5p
dCA9IHRoaXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNs
YXJhdGlvbnMsIGtpbmQpKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tl
bigpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OworCSAgICAgICAgICAg
ICAgICAgICAgICAgIHJpZ2h0ID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisJ
ICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgZm9ySW4gPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZVNl
bWljb2xvbigpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmZpbmFsaXpl
KGluaXQsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKSk7
CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIHZhciBpbml0U3RhcnRU
b2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxv
d0luID0gdGhpcy5jb250ZXh0LmFsbG93SW47CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4
dC5hbGxvd0luID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmluaGVyaXRD
b3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAgICAg
ICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47CisJICAgICAgICAg
ICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnaW4nKSkgeworCSAgICAgICAgICAgICAgICAg
ICAgaWYgKCF0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0IHx8IGluaXQudHlwZSA9PT0g
c3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uKSB7CisJICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZExI
U0luRm9ySW4pOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAg
dGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRF
eHByZXNzaW9uQXNQYXR0ZXJuKGluaXQpOworCSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGlu
aXQ7CisJICAgICAgICAgICAgICAgICAgICByaWdodCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7
CisJICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKKwkgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29m
JykpIHsKKwkgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzQXNzaWdubWVu
dFRhcmdldCB8fCBpbml0LnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5Bc3NpZ25tZW50RXhwcmVz
c2lvbikgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNz
YWdlc18xLk1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckxvb3ApOworCSAgICAgICAgICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAg
ICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGluaXQpOworCSAg
ICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7CisJICAgICAgICAgICAgICAgICAgICByaWdo
dCA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCSAgICAgICAgICAgICAgICAg
ICAgaW5pdCA9IG51bGw7CisJICAgICAgICAgICAgICAgICAgICBmb3JJbiA9IGZhbHNlOworCSAg
ICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMubWF0Y2goJywnKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBpbml0U2VxID0gW2luaXRdOworCSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0aGlz
Lm1hdGNoKCcsJykpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9r
ZW4oKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdFNlcS5wdXNoKHRoaXMuaXNv
bGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRo
aXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoaW5pdFN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5TZXF1
ZW5jZUV4cHJlc3Npb24oaW5pdFNlcSkpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJzsnKTsKKwkgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3Vu
ZGVmaW5lZCcpIHsKKwkgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJzsnKSkgeworCSAgICAg
ICAgICAgICAgICB0ZXN0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKKwkgICAgICAgICAgICB9
CisJICAgICAgICAgICAgdGhpcy5leHBlY3QoJzsnKTsKKwkgICAgICAgICAgICBpZiAoIXRoaXMu
bWF0Y2goJyknKSkgeworCSAgICAgICAgICAgICAgICB1cGRhdGUgPSB0aGlzLnBhcnNlRXhwcmVz
c2lvbigpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHZhciBib2R5Owor
CSAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykgJiYgdGhpcy5jb25maWcudG9sZXJhbnQpIHsK
KwkgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2Vu
KCkpOworCSAgICAgICAgICAgIGJvZHkgPSB0aGlzLmZpbmFsaXplKHRoaXMuY3JlYXRlTm9kZSgp
LCBuZXcgTm9kZS5FbXB0eVN0YXRlbWVudCgpKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2Ug
eworCSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7CisJICAgICAgICAgICAgdmFyIHByZXZp
b3VzSW5JdGVyYXRpb24gPSB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb247CisJICAgICAgICAgICAg
dGhpcy5jb250ZXh0LmluSXRlcmF0aW9uID0gdHJ1ZTsKKwkgICAgICAgICAgICBib2R5ID0gdGhp
cy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VTdGF0ZW1lbnQpOworCSAgICAgICAgICAg
IHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IHByZXZpb3VzSW5JdGVyYXRpb247CisJICAgICAg
ICB9CisJICAgICAgICByZXR1cm4gKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgPworCSAg
ICAgICAgICAgIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRm9yU3RhdGVtZW50KGluaXQs
IHRlc3QsIHVwZGF0ZSwgYm9keSkpIDoKKwkgICAgICAgICAgICBmb3JJbiA/IHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IE5vZGUuRm9ySW5TdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpKSA6CisJ
ICAgICAgICAgICAgICAgIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRm9yT2ZTdGF0ZW1l
bnQobGVmdCwgcmlnaHQsIGJvZHkpKTsKKwkgICAgfTsKKwkgICAgLy8gaHR0cHM6Ly90YzM5Lmdp
dGh1Yi5pby9lY21hMjYyLyNzZWMtY29udGludWUtc3RhdGVtZW50CisJICAgIFBhcnNlci5wcm90
b3R5cGUucGFyc2VDb250aW51ZVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZh
ciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQo
J2NvbnRpbnVlJyk7CisJICAgICAgICB2YXIgbGFiZWwgPSBudWxsOworCSAgICAgICAgaWYgKHRo
aXMubG9va2FoZWFkLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLyAmJiAhdGhpcy5oYXNMaW5l
VGVybWluYXRvcikgeworCSAgICAgICAgICAgIHZhciBpZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlk
ZW50aWZpZXIoKTsKKwkgICAgICAgICAgICBsYWJlbCA9IGlkOworCSAgICAgICAgICAgIHZhciBr
ZXkgPSAnJCcgKyBpZC5uYW1lOworCSAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29udGV4dC5sYWJlbFNldCwga2V5KSkgeworCSAgICAg
ICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5Vbmtub3duTGFi
ZWwsIGlkLm5hbWUpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMu
Y29uc3VtZVNlbWljb2xvbigpOworCSAgICAgICAgaWYgKGxhYmVsID09PSBudWxsICYmICF0aGlz
LmNvbnRleHQuaW5JdGVyYXRpb24pIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVz
c2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpOworCSAgICAgICAgfQorCSAgICAgICAg
cmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQ29udGludWVTdGF0ZW1lbnQobGFi
ZWwpKTsKKwkgICAgfTsKKwkgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNz
ZWMtYnJlYWstc3RhdGVtZW50CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VCcmVha1N0YXRl
bWVudCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2Rl
KCk7CisJICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2JyZWFrJyk7CisJICAgICAgICB2YXIg
bGFiZWwgPSBudWxsOworCSAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDMgLyog
SWRlbnRpZmllciAqLyAmJiAhdGhpcy5oYXNMaW5lVGVybWluYXRvcikgeworCSAgICAgICAgICAg
IHZhciBpZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKwkgICAgICAgICAgICB2
YXIga2V5ID0gJyQnICsgaWQubmFtZTsKKwkgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5
cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbnRleHQubGFiZWxTZXQsIGtleSkpIHsKKwkg
ICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5rbm93
bkxhYmVsLCBpZC5uYW1lKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgbGFiZWwgPSBp
ZDsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOworCSAgICAg
ICAgaWYgKGxhYmVsID09PSBudWxsICYmICF0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gJiYgIXRo
aXMuY29udGV4dC5pblN3aXRjaCkgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNz
YWdlc18xLk1lc3NhZ2VzLklsbGVnYWxCcmVhayk7CisJICAgICAgICB9CisJICAgICAgICByZXR1
cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5CcmVha1N0YXRlbWVudChsYWJlbCkpOwor
CSAgICB9OworCSAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZXR1
cm4tc3RhdGVtZW50CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VSZXR1cm5TdGF0ZW1lbnQg
PSBmdW5jdGlvbiAoKSB7CisJICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9k
eSkgeworCSAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2Vz
LklsbGVnYWxSZXR1cm4pOworCSAgICAgICAgfQorCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgncmV0dXJuJyk7CisJICAg
ICAgICB2YXIgaGFzQXJndW1lbnQgPSAoIXRoaXMubWF0Y2goJzsnKSAmJiAhdGhpcy5tYXRjaCgn
fScpICYmCisJICAgICAgICAgICAgIXRoaXMuaGFzTGluZVRlcm1pbmF0b3IgJiYgdGhpcy5sb29r
YWhlYWQudHlwZSAhPT0gMiAvKiBFT0YgKi8pIHx8CisJICAgICAgICAgICAgdGhpcy5sb29rYWhl
YWQudHlwZSA9PT0gOCAvKiBTdHJpbmdMaXRlcmFsICovIHx8CisJICAgICAgICAgICAgdGhpcy5s
b29rYWhlYWQudHlwZSA9PT0gMTAgLyogVGVtcGxhdGUgKi87CisJICAgICAgICB2YXIgYXJndW1l
bnQgPSBoYXNBcmd1bWVudCA/IHRoaXMucGFyc2VFeHByZXNzaW9uKCkgOiBudWxsOworCSAgICAg
ICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5SZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpKTsKKwkgICAgfTsKKwkg
ICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtd2l0aC1zdGF0ZW1lbnQK
KwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVdpdGhTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7
CisJICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCkgeworCSAgICAgICAgICAgIHRoaXMu
dG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdE1vZGVXaXRoKTsKKwkgICAg
ICAgIH0KKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2
YXIgYm9keTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnd2l0aCcpOworCSAgICAgICAg
dGhpcy5leHBlY3QoJygnKTsKKwkgICAgICAgIHZhciBvYmplY3QgPSB0aGlzLnBhcnNlRXhwcmVz
c2lvbigpOworCSAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykgJiYgdGhpcy5jb25maWcudG9s
ZXJhbnQpIHsKKwkgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMu
bmV4dFRva2VuKCkpOworCSAgICAgICAgICAgIGJvZHkgPSB0aGlzLmZpbmFsaXplKHRoaXMuY3Jl
YXRlTm9kZSgpLCBuZXcgTm9kZS5FbXB0eVN0YXRlbWVudCgpKTsKKwkgICAgICAgIH0KKwkgICAg
ICAgIGVsc2UgeworCSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7CisJICAgICAgICAgICAg
Ym9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVy
biB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLldpdGhTdGF0ZW1lbnQob2JqZWN0LCBib2R5
KSk7CisJICAgIH07CisJICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2Vj
LXN3aXRjaC1zdGF0ZW1lbnQKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVN3aXRjaENhc2Ug
PSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwor
CSAgICAgICAgdmFyIHRlc3Q7CisJICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2RlZmF1
bHQnKSkgeworCSAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgdGVz
dCA9IG51bGw7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICB0aGlz
LmV4cGVjdEtleXdvcmQoJ2Nhc2UnKTsKKwkgICAgICAgICAgICB0ZXN0ID0gdGhpcy5wYXJzZUV4
cHJlc3Npb24oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZXhwZWN0KCc6Jyk7CisJICAg
ICAgICB2YXIgY29uc2VxdWVudCA9IFtdOworCSAgICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAg
ICAgICAgICBpZiAodGhpcy5tYXRjaCgnfScpIHx8IHRoaXMubWF0Y2hLZXl3b3JkKCdkZWZhdWx0
JykgfHwgdGhpcy5tYXRjaEtleXdvcmQoJ2Nhc2UnKSkgeworCSAgICAgICAgICAgICAgICBicmVh
azsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgY29uc2VxdWVudC5wdXNoKHRoaXMucGFy
c2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlN3aXRjaENhc2UodGVzdCwgY29uc2VxdWVudCkpOwor
CSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU3dpdGNoU3RhdGVtZW50ID0gZnVu
Y3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAg
ICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnc3dpdGNoJyk7CisJICAgICAgICB0aGlzLmV4cGVjdCgn
KCcpOworCSAgICAgICAgdmFyIGRpc2NyaW1pbmFudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7
CisJICAgICAgICB0aGlzLmV4cGVjdCgnKScpOworCSAgICAgICAgdmFyIHByZXZpb3VzSW5Td2l0
Y2ggPSB0aGlzLmNvbnRleHQuaW5Td2l0Y2g7CisJICAgICAgICB0aGlzLmNvbnRleHQuaW5Td2l0
Y2ggPSB0cnVlOworCSAgICAgICAgdmFyIGNhc2VzID0gW107CisJICAgICAgICB2YXIgZGVmYXVs
dEZvdW5kID0gZmFsc2U7CisJICAgICAgICB0aGlzLmV4cGVjdCgneycpOworCSAgICAgICAgd2hp
bGUgKHRydWUpIHsKKwkgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnfScpKSB7CisJICAgICAg
ICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB2YXIgY2xhdXNl
ID0gdGhpcy5wYXJzZVN3aXRjaENhc2UoKTsKKwkgICAgICAgICAgICBpZiAoY2xhdXNlLnRlc3Qg
PT09IG51bGwpIHsKKwkgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRGb3VuZCkgeworCSAgICAg
ICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuTXVsdGlw
bGVEZWZhdWx0c0luU3dpdGNoKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAg
ICBkZWZhdWx0Rm91bmQgPSB0cnVlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBjYXNl
cy5wdXNoKGNsYXVzZSk7CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmV4cGVjdCgnfScpOwor
CSAgICAgICAgdGhpcy5jb250ZXh0LmluU3dpdGNoID0gcHJldmlvdXNJblN3aXRjaDsKKwkgICAg
ICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlN3aXRjaFN0YXRlbWVudChk
aXNjcmltaW5hbnQsIGNhc2VzKSk7CisJICAgIH07CisJICAgIC8vIGh0dHBzOi8vdGMzOS5naXRo
dWIuaW8vZWNtYTI2Mi8jc2VjLWxhYmVsbGVkLXN0YXRlbWVudHMKKwkgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZUxhYmVsbGVkU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBleHByID0gdGhpcy5wYXJz
ZUV4cHJlc3Npb24oKTsKKwkgICAgICAgIHZhciBzdGF0ZW1lbnQ7CisJICAgICAgICBpZiAoKGV4
cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIpICYmIHRoaXMubWF0Y2goJzon
KSkgeworCSAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgdmFyIGlk
ID0gZXhwcjsKKwkgICAgICAgICAgICB2YXIga2V5ID0gJyQnICsgaWQubmFtZTsKKwkgICAgICAg
ICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29udGV4
dC5sYWJlbFNldCwga2V5KSkgeworCSAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVz
c2FnZXNfMS5NZXNzYWdlcy5SZWRlY2xhcmF0aW9uLCAnTGFiZWwnLCBpZC5uYW1lKTsKKwkgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgdGhpcy5jb250ZXh0LmxhYmVsU2V0W2tleV0gPSB0cnVl
OworCSAgICAgICAgICAgIHZhciBib2R5ID0gdm9pZCAwOworCSAgICAgICAgICAgIGlmICh0aGlz
Lm1hdGNoS2V5d29yZCgnY2xhc3MnKSkgeworCSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRl
VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgICAgICAgICAgYm9keSA9
IHRoaXMucGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7CisJICAgICAgICAg
ICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgICAgICAgICB2YXIg
ZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpOworCSAgICAgICAg
ICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCkgeworCSAgICAgICAgICAgICAgICAgICAg
dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5T
dHJpY3RGdW5jdGlvbik7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoZGVjbGFyYXRpb24uZ2VuZXJhdG9yKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlz
LnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLkdlbmVy
YXRvckluTGVnYWN5Q29udGV4dCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAg
ICAgYm9keSA9IGRlY2xhcmF0aW9uOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNl
IHsKKwkgICAgICAgICAgICAgICAgYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTsKKwkgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgZGVsZXRlIHRoaXMuY29udGV4dC5sYWJlbFNldFtrZXld
OworCSAgICAgICAgICAgIHN0YXRlbWVudCA9IG5ldyBOb2RlLkxhYmVsZWRTdGF0ZW1lbnQoaWQs
IGJvZHkpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdGhpcy5j
b25zdW1lU2VtaWNvbG9uKCk7CisJICAgICAgICAgICAgc3RhdGVtZW50ID0gbmV3IE5vZGUuRXhw
cmVzc2lvblN0YXRlbWVudChleHByKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIHN0YXRlbWVudCk7CisJICAgIH07CisJICAgIC8vIGh0dHBzOi8vdGMz
OS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRocm93LXN0YXRlbWVudAorCSAgICBQYXJzZXIucHJv
dG90eXBlLnBhcnNlVGhyb3dTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIg
bm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCd0
aHJvdycpOworCSAgICAgICAgaWYgKHRoaXMuaGFzTGluZVRlcm1pbmF0b3IpIHsKKwkgICAgICAg
ICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5OZXdsaW5lQWZ0ZXJUaHJv
dyk7CisJICAgICAgICB9CisJICAgICAgICB2YXIgYXJndW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVz
c2lvbigpOworCSAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7CisJICAgICAgICByZXR1
cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5UaHJvd1N0YXRlbWVudChhcmd1bWVudCkp
OworCSAgICB9OworCSAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10
cnktc3RhdGVtZW50CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDYXRjaENsYXVzZSA9IGZ1
bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAg
ICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2NhdGNoJyk7CisJICAgICAgICB0aGlzLmV4cGVjdCgn
KCcpOworCSAgICAgICAgaWYgKHRoaXMubWF0Y2goJyknKSkgeworCSAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgfQorCSAgICAg
ICAgdmFyIHBhcmFtcyA9IFtdOworCSAgICAgICAgdmFyIHBhcmFtID0gdGhpcy5wYXJzZVBhdHRl
cm4ocGFyYW1zKTsKKwkgICAgICAgIHZhciBwYXJhbU1hcCA9IHt9OworCSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHsKKwkgICAgICAgICAgICB2YXIga2V5
ID0gJyQnICsgcGFyYW1zW2ldLnZhbHVlOworCSAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyYW1NYXAsIGtleSkpIHsKKwkgICAgICAgICAgICAg
ICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuRHVwbGljYXRlQmluZGlu
ZywgcGFyYW1zW2ldLnZhbHVlKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgcGFyYW1N
YXBba2V5XSA9IHRydWU7CisJICAgICAgICB9CisJICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0
cmljdCAmJiBwYXJhbS50eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcikgeworCSAg
ICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChwYXJhbS5uYW1lKSkg
eworCSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdl
cy5TdHJpY3RDYXRjaFZhcmlhYmxlKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAg
ICAgICB0aGlzLmV4cGVjdCgnKScpOworCSAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlQmxv
Y2soKTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkNhdGNo
Q2xhdXNlKHBhcmFtLCBib2R5KSk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFy
c2VGaW5hbGx5Q2xhdXNlID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdGhpcy5leHBlY3RLZXl3
b3JkKCdmaW5hbGx5Jyk7CisJICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUJsb2NrKCk7CisJICAg
IH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VUcnlTdGF0ZW1lbnQgPSBmdW5jdGlvbiAo
KSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhp
cy5leHBlY3RLZXl3b3JkKCd0cnknKTsKKwkgICAgICAgIHZhciBibG9jayA9IHRoaXMucGFyc2VC
bG9jaygpOworCSAgICAgICAgdmFyIGhhbmRsZXIgPSB0aGlzLm1hdGNoS2V5d29yZCgnY2F0Y2gn
KSA/IHRoaXMucGFyc2VDYXRjaENsYXVzZSgpIDogbnVsbDsKKwkgICAgICAgIHZhciBmaW5hbGl6
ZXIgPSB0aGlzLm1hdGNoS2V5d29yZCgnZmluYWxseScpID8gdGhpcy5wYXJzZUZpbmFsbHlDbGF1
c2UoKSA6IG51bGw7CisJICAgICAgICBpZiAoIWhhbmRsZXIgJiYgIWZpbmFsaXplcikgeworCSAg
ICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLk5vQ2F0Y2hPckZp
bmFsbHkpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IE5vZGUuVHJ5U3RhdGVtZW50KGJsb2NrLCBoYW5kbGVyLCBmaW5hbGl6ZXIpKTsKKwkgICAg
fTsKKwkgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZGVidWdnZXIt
c3RhdGVtZW50CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VEZWJ1Z2dlclN0YXRlbWVudCA9
IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJ
ICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2RlYnVnZ2VyJyk7CisJICAgICAgICB0aGlzLmNv
bnN1bWVTZW1pY29sb24oKTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBOb2RlLkRlYnVnZ2VyU3RhdGVtZW50KCkpOworCSAgICB9OworCSAgICAvLyBodHRwczovL3Rj
MzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXN0YXRlbWVudHMt
YW5kLWRlY2xhcmF0aW9ucworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU3RhdGVtZW50ID0g
ZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIHN0YXRlbWVudDsKKwkgICAgICAgIHN3aXRjaCAo
dGhpcy5sb29rYWhlYWQudHlwZSkgeworCSAgICAgICAgICAgIGNhc2UgMSAvKiBCb29sZWFuTGl0
ZXJhbCAqLzoKKwkgICAgICAgICAgICBjYXNlIDUgLyogTnVsbExpdGVyYWwgKi86CisJICAgICAg
ICAgICAgY2FzZSA2IC8qIE51bWVyaWNMaXRlcmFsICovOgorCSAgICAgICAgICAgIGNhc2UgOCAv
KiBTdHJpbmdMaXRlcmFsICovOgorCSAgICAgICAgICAgIGNhc2UgMTAgLyogVGVtcGxhdGUgKi86
CisJICAgICAgICAgICAgY2FzZSA5IC8qIFJlZ3VsYXJFeHByZXNzaW9uICovOgorCSAgICAgICAg
ICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpOworCSAg
ICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIDcgLyogUHVuY3R1YXRvciAq
LzoKKwkgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5sb29rYWhlYWQudmFsdWU7CisJ
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ3snKSB7CisJICAgICAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlQmxvY2soKTsKKwkgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJygnKSB7CisJICAgICAgICAgICAgICAg
ICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpOworCSAgICAg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAnOycpIHsK
KwkgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VFbXB0eVN0YXRlbWVu
dCgpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAg
ICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQo
KTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAg
ICAgICBjYXNlIDMgLyogSWRlbnRpZmllciAqLzoKKwkgICAgICAgICAgICAgICAgc3RhdGVtZW50
ID0gdGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKSA/IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0
aW9uKCkgOiB0aGlzLnBhcnNlTGFiZWxsZWRTdGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAg
YnJlYWs7CisJICAgICAgICAgICAgY2FzZSA0IC8qIEtleXdvcmQgKi86CisJICAgICAgICAgICAg
ICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQudmFsdWUpIHsKKwkgICAgICAgICAgICAgICAgICAg
IGNhc2UgJ2JyZWFrJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlz
LnBhcnNlQnJlYWtTdGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KwkgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbnRpbnVlJzoKKwkgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlQ29udGludWVTdGF0ZW1lbnQoKTsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Rl
YnVnZ2VyJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNl
RGVidWdnZXJTdGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RvJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZW1lbnQgPSB0aGlzLnBhcnNlRG9XaGlsZVN0YXRlbWVudCgpOworCSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgY2FzZSAnZm9yJzoKKwkgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRm9yU3RhdGVtZW50KCk7
CisJICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICBj
YXNlICdmdW5jdGlvbic6CisJICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhp
cy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKwkgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2lmJzoKKwkgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlSWZTdGF0ZW1lbnQoKTsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JldHVybic6
CisJICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVJldHVyblN0
YXRlbWVudCgpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnc3dpdGNoJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1l
bnQgPSB0aGlzLnBhcnNlU3dpdGNoU3RhdGVtZW50KCk7CisJICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICBjYXNlICd0aHJvdyc6CisJICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVRocm93U3RhdGVtZW50KCk7CisJ
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICBjYXNl
ICd0cnknOgorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VU
cnlTdGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ3Zhcic6CisJICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVt
ZW50ID0gdGhpcy5wYXJzZVZhcmlhYmxlU3RhdGVtZW50KCk7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICBjYXNlICd3aGlsZSc6CisJICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVdoaWxlU3RhdGVtZW50KCk7
CisJICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICBj
YXNlICd3aXRoJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBh
cnNlV2l0aFN0YXRlbWVudCgpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKwkgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpOworCSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGJy
ZWFrOworCSAgICAgICAgICAgIGRlZmF1bHQ6CisJICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9
IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgfQor
CSAgICAgICAgcmV0dXJuIHN0YXRlbWVudDsKKwkgICAgfTsKKwkgICAgLy8gaHR0cHM6Ly90YzM5
LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZnVuY3Rpb24tZGVmaW5pdGlvbnMKKwkgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMgPSBmdW5jdGlvbiAoKSB7CisJ
ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5leHBl
Y3QoJ3snKTsKKwkgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZURpcmVjdGl2ZVByb2xvZ3Vl
cygpOworCSAgICAgICAgdmFyIHByZXZpb3VzTGFiZWxTZXQgPSB0aGlzLmNvbnRleHQubGFiZWxT
ZXQ7CisJICAgICAgICB2YXIgcHJldmlvdXNJbkl0ZXJhdGlvbiA9IHRoaXMuY29udGV4dC5pbkl0
ZXJhdGlvbjsKKwkgICAgICAgIHZhciBwcmV2aW91c0luU3dpdGNoID0gdGhpcy5jb250ZXh0Lmlu
U3dpdGNoOworCSAgICAgICAgdmFyIHByZXZpb3VzSW5GdW5jdGlvbkJvZHkgPSB0aGlzLmNvbnRl
eHQuaW5GdW5jdGlvbkJvZHk7CisJICAgICAgICB0aGlzLmNvbnRleHQubGFiZWxTZXQgPSB7fTsK
KwkgICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IGZhbHNlOworCSAgICAgICAgdGhp
cy5jb250ZXh0LmluU3dpdGNoID0gZmFsc2U7CisJICAgICAgICB0aGlzLmNvbnRleHQuaW5GdW5j
dGlvbkJvZHkgPSB0cnVlOworCSAgICAgICAgd2hpbGUgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09
IDIgLyogRU9GICovKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJ30nKSkgeworCSAg
ICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgYm9keS5w
dXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTsKKwkgICAgICAgIH0KKwkgICAgICAg
IHRoaXMuZXhwZWN0KCd9Jyk7CisJICAgICAgICB0aGlzLmNvbnRleHQubGFiZWxTZXQgPSBwcmV2
aW91c0xhYmVsU2V0OworCSAgICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uID0gcHJldmlv
dXNJbkl0ZXJhdGlvbjsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pblN3aXRjaCA9IHByZXZpb3Vz
SW5Td2l0Y2g7CisJICAgICAgICB0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkgPSBwcmV2aW91
c0luRnVuY3Rpb25Cb2R5OworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuQmxvY2tTdGF0ZW1lbnQoYm9keSkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90
eXBlLnZhbGlkYXRlUGFyYW0gPSBmdW5jdGlvbiAob3B0aW9ucywgcGFyYW0sIG5hbWUpIHsKKwkg
ICAgICAgIHZhciBrZXkgPSAnJCcgKyBuYW1lOworCSAgICAgICAgaWYgKHRoaXMuY29udGV4dC5z
dHJpY3QpIHsKKwkgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQo
bmFtZSkpIHsKKwkgICAgICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFtOworCSAg
ICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmlj
dFBhcmFtTmFtZTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90
b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLnBhcmFtU2V0LCBrZXkpKSB7CisJICAg
ICAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0ZWQgPSBwYXJhbTsKKwkgICAgICAgICAgICAgICAg
b3B0aW9ucy5tZXNzYWdlID0gbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAoIW9wdGlvbnMuZmly
c3RSZXN0cmljdGVkKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0
ZWRXb3JkKG5hbWUpKSB7CisJICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVk
ID0gcGFyYW07CisJICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IG1lc3NhZ2VzXzEu
TWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBl
bHNlIGlmICh0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKG5hbWUpKSB7CisJ
ICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkID0gcGFyYW07CisJICAgICAg
ICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVz
ZXJ2ZWRXb3JkOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmIChPYmplY3Qu
cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucy5wYXJhbVNldCwga2V5KSkgewor
CSAgICAgICAgICAgICAgICBvcHRpb25zLnN0cmljdGVkID0gcGFyYW07CisJICAgICAgICAgICAg
ICAgIG9wdGlvbnMubWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBl
OworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9y
ZSBuZXh0ICovCisJICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9PT0g
J2Z1bmN0aW9uJykgeworCSAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRpb25z
LnBhcmFtU2V0LCBrZXksIHsgdmFsdWU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxl
OiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7CisJICAgICAgICB9CisJICAgICAgICBlbHNl
IHsKKwkgICAgICAgICAgICBvcHRpb25zLnBhcmFtU2V0W2tleV0gPSB0cnVlOworCSAgICAgICAg
fQorCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUmVzdEVsZW1lbnQgPSBmdW5j
dGlvbiAocGFyYW1zKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwor
CSAgICAgICAgdGhpcy5leHBlY3QoJy4uLicpOworCSAgICAgICAgdmFyIGFyZyA9IHRoaXMucGFy
c2VQYXR0ZXJuKHBhcmFtcyk7CisJICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7CisJICAg
ICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuRGVmYXVsdFJlc3RQ
YXJhbWV0ZXIpOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykpIHsK
KwkgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5QYXJhbWV0
ZXJBZnRlclJlc3RQYXJhbWV0ZXIpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMu
ZmluYWxpemUobm9kZSwgbmV3IE5vZGUuUmVzdEVsZW1lbnQoYXJnKSk7CisJICAgIH07CisJICAg
IFBhcnNlci5wcm90b3R5cGUucGFyc2VGb3JtYWxQYXJhbWV0ZXIgPSBmdW5jdGlvbiAob3B0aW9u
cykgeworCSAgICAgICAgdmFyIHBhcmFtcyA9IFtdOworCSAgICAgICAgdmFyIHBhcmFtID0gdGhp
cy5tYXRjaCgnLi4uJykgPyB0aGlzLnBhcnNlUmVzdEVsZW1lbnQocGFyYW1zKSA6IHRoaXMucGFy
c2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1zKTsKKwkgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7CisJICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVBhcmFt
KG9wdGlvbnMsIHBhcmFtc1tpXSwgcGFyYW1zW2ldLnZhbHVlKTsKKwkgICAgICAgIH0KKwkgICAg
ICAgIG9wdGlvbnMuc2ltcGxlID0gb3B0aW9ucy5zaW1wbGUgJiYgKHBhcmFtIGluc3RhbmNlb2Yg
Tm9kZS5JZGVudGlmaWVyKTsKKwkgICAgICAgIG9wdGlvbnMucGFyYW1zLnB1c2gocGFyYW0pOwor
CSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRm9ybWFsUGFyYW1ldGVycyA9IGZ1
bmN0aW9uIChmaXJzdFJlc3RyaWN0ZWQpIHsKKwkgICAgICAgIHZhciBvcHRpb25zOworCSAgICAg
ICAgb3B0aW9ucyA9IHsKKwkgICAgICAgICAgICBzaW1wbGU6IHRydWUsCisJICAgICAgICAgICAg
cGFyYW1zOiBbXSwKKwkgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IGZpcnN0UmVzdHJpY3Rl
ZAorCSAgICAgICAgfTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7CisJICAgICAgICBpZiAo
IXRoaXMubWF0Y2goJyknKSkgeworCSAgICAgICAgICAgIG9wdGlvbnMucGFyYW1TZXQgPSB7fTsK
KwkgICAgICAgICAgICB3aGlsZSAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMiAvKiBFT0YgKi8p
IHsKKwkgICAgICAgICAgICAgICAgdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcihvcHRpb25zKTsK
KwkgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyknKSkgeworCSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgdGhpcy5l
eHBlY3QoJywnKTsKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyknKSkgeworCSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICB9CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmV4cGVjdCgnKScpOworCSAgICAgICAgcmV0
dXJuIHsKKwkgICAgICAgICAgICBzaW1wbGU6IG9wdGlvbnMuc2ltcGxlLAorCSAgICAgICAgICAg
IHBhcmFtczogb3B0aW9ucy5wYXJhbXMsCisJICAgICAgICAgICAgc3RyaWN0ZWQ6IG9wdGlvbnMu
c3RyaWN0ZWQsCisJICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBvcHRpb25zLmZpcnN0UmVz
dHJpY3RlZCwKKwkgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLm1lc3NhZ2UKKwkgICAgICAg
IH07CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUubWF0Y2hBc3luY0Z1bmN0aW9uID0g
ZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5tYXRjaENvbnRleHR1YWxL
ZXl3b3JkKCdhc3luYycpOworCSAgICAgICAgaWYgKG1hdGNoKSB7CisJICAgICAgICAgICAgdmFy
IHN0YXRlID0gdGhpcy5zY2FubmVyLnNhdmVTdGF0ZSgpOworCSAgICAgICAgICAgIHRoaXMuc2Nh
bm5lci5zY2FuQ29tbWVudHMoKTsKKwkgICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMuc2Nhbm5l
ci5sZXgoKTsKKwkgICAgICAgICAgICB0aGlzLnNjYW5uZXIucmVzdG9yZVN0YXRlKHN0YXRlKTsK
KwkgICAgICAgICAgICBtYXRjaCA9IChzdGF0ZS5saW5lTnVtYmVyID09PSBuZXh0LmxpbmVOdW1i
ZXIpICYmIChuZXh0LnR5cGUgPT09IDQgLyogS2V5d29yZCAqLykgJiYgKG5leHQudmFsdWUgPT09
ICdmdW5jdGlvbicpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIG1hdGNoOworCSAgICB9
OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbiA9IGZ1bmN0
aW9uIChpZGVudGlmaWVySXNPcHRpb25hbCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBpc0FzeW5jID0gdGhpcy5tYXRjaENvbnRleHR1YWxL
ZXl3b3JkKCdhc3luYycpOworCSAgICAgICAgaWYgKGlzQXN5bmMpIHsKKwkgICAgICAgICAgICB0
aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5leHBlY3RLZXl3b3Jk
KCdmdW5jdGlvbicpOworCSAgICAgICAgdmFyIGlzR2VuZXJhdG9yID0gaXNBc3luYyA/IGZhbHNl
IDogdGhpcy5tYXRjaCgnKicpOworCSAgICAgICAgaWYgKGlzR2VuZXJhdG9yKSB7CisJICAgICAg
ICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHZhciBtZXNzYWdl
OworCSAgICAgICAgdmFyIGlkID0gbnVsbDsKKwkgICAgICAgIHZhciBmaXJzdFJlc3RyaWN0ZWQg
PSBudWxsOworCSAgICAgICAgaWYgKCFpZGVudGlmaWVySXNPcHRpb25hbCB8fCAhdGhpcy5tYXRj
aCgnKCcpKSB7CisJICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAg
ICAgICAgICAgaWQgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisJICAgICAgICAg
ICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QpIHsKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMu
c2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworCSAgICAgICAgICAgICAg
ICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNz
YWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2Fu
bmVyLmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisJICAgICAgICAgICAgICAgICAg
ICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKwkgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Ug
PSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZTsKKwkgICAgICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2Rl
UmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworCSAgICAgICAgICAgICAgICAgICAgZmlyc3RS
ZXN0cmljdGVkID0gdG9rZW47CisJICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2Fn
ZXNfMS5NZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7CisJICAgICAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0F3YWl0
ID0gdGhpcy5jb250ZXh0LmF3YWl0OworCSAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dZaWVsZCA9
IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkOworCSAgICAgICAgdGhpcy5jb250ZXh0LmF3YWl0ID0g
aXNBc3luYzsKKwkgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gIWlzR2VuZXJhdG9y
OworCSAgICAgICAgdmFyIGZvcm1hbFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1l
dGVycyhmaXJzdFJlc3RyaWN0ZWQpOworCSAgICAgICAgdmFyIHBhcmFtcyA9IGZvcm1hbFBhcmFt
ZXRlcnMucGFyYW1zOworCSAgICAgICAgdmFyIHN0cmljdGVkID0gZm9ybWFsUGFyYW1ldGVycy5z
dHJpY3RlZDsKKwkgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IGZvcm1hbFBhcmFtZXRlcnMuZmly
c3RSZXN0cmljdGVkOworCSAgICAgICAgaWYgKGZvcm1hbFBhcmFtZXRlcnMubWVzc2FnZSkgewor
CSAgICAgICAgICAgIG1lc3NhZ2UgPSBmb3JtYWxQYXJhbWV0ZXJzLm1lc3NhZ2U7CisJICAgICAg
ICB9CisJICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0Owor
CSAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dTdHJpY3REaXJlY3RpdmUgPSB0aGlzLmNvbnRleHQu
YWxsb3dTdHJpY3REaXJlY3RpdmU7CisJICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3RE
aXJlY3RpdmUgPSBmb3JtYWxQYXJhbWV0ZXJzLnNpbXBsZTsKKwkgICAgICAgIHZhciBib2R5ID0g
dGhpcy5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTsKKwkgICAgICAgIGlmICh0aGlzLmNv
bnRleHQuc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkgeworCSAgICAgICAgICAgIHRoaXMudGhy
b3dVbmV4cGVjdGVkVG9rZW4oZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTsKKwkgICAgICAgIH0K
KwkgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHN0cmljdGVkKSB7CisJICAgICAg
ICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihzdHJpY3RlZCwgbWVzc2FnZSk7CisJ
ICAgICAgICB9CisJICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7
CisJICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmUgPSBwcmV2aW91c0Fs
bG93U3RyaWN0RGlyZWN0aXZlOworCSAgICAgICAgdGhpcy5jb250ZXh0LmF3YWl0ID0gcHJldmlv
dXNBbGxvd0F3YWl0OworCSAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91
c0FsbG93WWllbGQ7CisJICAgICAgICByZXR1cm4gaXNBc3luYyA/IHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuQXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uKGlkLCBwYXJhbXMsIGJvZHkpKSA6
CisJICAgICAgICAgICAgdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5GdW5jdGlvbkRlY2xh
cmF0aW9uKGlkLCBwYXJhbXMsIGJvZHksIGlzR2VuZXJhdG9yKSk7CisJICAgIH07CisJICAgIFBh
cnNlci5wcm90b3R5cGUucGFyc2VGdW5jdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisJ
ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIGlzQXN5
bmMgPSB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzeW5jJyk7CisJICAgICAgICBpZiAo
aXNBc3luYykgeworCSAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICB9CisJ
ICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7CisJICAgICAgICB2YXIgaXNH
ZW5lcmF0b3IgPSBpc0FzeW5jID8gZmFsc2UgOiB0aGlzLm1hdGNoKCcqJyk7CisJICAgICAgICBp
ZiAoaXNHZW5lcmF0b3IpIHsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAg
ICAgfQorCSAgICAgICAgdmFyIG1lc3NhZ2U7CisJICAgICAgICB2YXIgaWQgPSBudWxsOworCSAg
ICAgICAgdmFyIGZpcnN0UmVzdHJpY3RlZDsKKwkgICAgICAgIHZhciBwcmV2aW91c0FsbG93QXdh
aXQgPSB0aGlzLmNvbnRleHQuYXdhaXQ7CisJICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxk
ID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CisJICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQg
PSBpc0FzeW5jOworCSAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSAhaXNHZW5lcmF0
b3I7CisJICAgICAgICBpZiAoIXRoaXMubWF0Y2goJygnKSkgeworCSAgICAgICAgICAgIHZhciB0
b2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgICAgIGlkID0gKCF0aGlzLmNvbnRleHQu
c3RyaWN0ICYmICFpc0dlbmVyYXRvciAmJiB0aGlzLm1hdGNoS2V5d29yZCgneWllbGQnKSkgPyB0
aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKSA6IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIo
KTsKKwkgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCkgeworCSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisJ
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBt
ZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7CisJICAgICAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAg
IGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKwkgICAg
ICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworCSAgICAgICAgICAgICAg
ICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lOwor
CSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2Nhbm5l
ci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisJICAgICAgICAgICAg
ICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKwkgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDsKKwkgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHZhciBmb3Jt
YWxQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoZmlyc3RSZXN0cmljdGVk
KTsKKwkgICAgICAgIHZhciBwYXJhbXMgPSBmb3JtYWxQYXJhbWV0ZXJzLnBhcmFtczsKKwkgICAg
ICAgIHZhciBzdHJpY3RlZCA9IGZvcm1hbFBhcmFtZXRlcnMuc3RyaWN0ZWQ7CisJICAgICAgICBm
aXJzdFJlc3RyaWN0ZWQgPSBmb3JtYWxQYXJhbWV0ZXJzLmZpcnN0UmVzdHJpY3RlZDsKKwkgICAg
ICAgIGlmIChmb3JtYWxQYXJhbWV0ZXJzLm1lc3NhZ2UpIHsKKwkgICAgICAgICAgICBtZXNzYWdl
ID0gZm9ybWFsUGFyYW1ldGVycy5tZXNzYWdlOworCSAgICAgICAgfQorCSAgICAgICAgdmFyIHBy
ZXZpb3VzU3RyaWN0ID0gdGhpcy5jb250ZXh0LnN0cmljdDsKKwkgICAgICAgIHZhciBwcmV2aW91
c0FsbG93U3RyaWN0RGlyZWN0aXZlID0gdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZl
OworCSAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlID0gZm9ybWFsUGFy
YW1ldGVycy5zaW1wbGU7CisJICAgICAgICB2YXIgYm9keSA9IHRoaXMucGFyc2VGdW5jdGlvblNv
dXJjZUVsZW1lbnRzKCk7CisJICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBmaXJz
dFJlc3RyaWN0ZWQpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKGZp
cnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7CisJICAgICAgICB9CisJICAgICAgICBpZiAodGhpcy5j
b250ZXh0LnN0cmljdCAmJiBzdHJpY3RlZCkgeworCSAgICAgICAgICAgIHRoaXMudG9sZXJhdGVV
bmV4cGVjdGVkVG9rZW4oc3RyaWN0ZWQsIG1lc3NhZ2UpOworCSAgICAgICAgfQorCSAgICAgICAg
dGhpcy5jb250ZXh0LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworCSAgICAgICAgdGhpcy5jb250
ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlID0gcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZTsK
KwkgICAgICAgIHRoaXMuY29udGV4dC5hd2FpdCA9IHByZXZpb3VzQWxsb3dBd2FpdDsKKwkgICAg
ICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOworCSAgICAg
ICAgcmV0dXJuIGlzQXN5bmMgPyB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFzeW5jRnVu
Y3Rpb25FeHByZXNzaW9uKGlkLCBwYXJhbXMsIGJvZHkpKSA6CisJICAgICAgICAgICAgdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5GdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgYm9k
eSwgaXNHZW5lcmF0b3IpKTsKKwkgICAgfTsKKwkgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5p
by9lY21hMjYyLyNzZWMtZGlyZWN0aXZlLXByb2xvZ3Vlcy1hbmQtdGhlLXVzZS1zdHJpY3QtZGly
ZWN0aXZlCisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VEaXJlY3RpdmUgPSBmdW5jdGlvbiAo
KSB7CisJICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKwkgICAgICAgIHZhciBu
b2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIgZXhwciA9IHRoaXMucGFyc2VF
eHByZXNzaW9uKCk7CisJICAgICAgICB2YXIgZGlyZWN0aXZlID0gKGV4cHIudHlwZSA9PT0gc3lu
dGF4XzEuU3ludGF4LkxpdGVyYWwpID8gdGhpcy5nZXRUb2tlblJhdyh0b2tlbikuc2xpY2UoMSwg
LTEpIDogbnVsbDsKKwkgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOworCSAgICAgICAg
cmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgZGlyZWN0aXZlID8gbmV3IE5vZGUuRGlyZWN0aXZl
KGV4cHIsIGRpcmVjdGl2ZSkgOiBuZXcgTm9kZS5FeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpKTsK
KwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZURpcmVjdGl2ZVByb2xvZ3VlcyA9
IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBmaXJzdFJlc3RyaWN0ZWQgPSBudWxsOworCSAg
ICAgICAgdmFyIGJvZHkgPSBbXTsKKwkgICAgICAgIHdoaWxlICh0cnVlKSB7CisJICAgICAgICAg
ICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAgICAgICAgaWYgKHRva2VuLnR5
cGUgIT09IDggLyogU3RyaW5nTGl0ZXJhbCAqLykgeworCSAgICAgICAgICAgICAgICBicmVhazsK
KwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgdmFyIHN0YXRlbWVudCA9IHRoaXMucGFyc2VE
aXJlY3RpdmUoKTsKKwkgICAgICAgICAgICBib2R5LnB1c2goc3RhdGVtZW50KTsKKwkgICAgICAg
ICAgICB2YXIgZGlyZWN0aXZlID0gc3RhdGVtZW50LmRpcmVjdGl2ZTsKKwkgICAgICAgICAgICBp
ZiAodHlwZW9mIGRpcmVjdGl2ZSAhPT0gJ3N0cmluZycpIHsKKwkgICAgICAgICAgICAgICAgYnJl
YWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmIChkaXJlY3RpdmUgPT09ICd1c2Ug
c3RyaWN0JykgeworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gdHJ1ZTsK
KwkgICAgICAgICAgICAgICAgaWYgKGZpcnN0UmVzdHJpY3RlZCkgeworCSAgICAgICAgICAgICAg
ICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihmaXJzdFJlc3RyaWN0ZWQsIG1lc3Nh
Z2VzXzEuTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKwkgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZSkg
eworCSAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tl
biwgbWVzc2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsTGFuZ3VhZ2VNb2RlRGlyZWN0aXZlKTsKKwkg
ICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkg
ICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHsKKwkg
ICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworCSAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGJvZHk7
CisJICAgIH07CisJICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW1l
dGhvZC1kZWZpbml0aW9ucworCSAgICBQYXJzZXIucHJvdG90eXBlLnF1YWxpZmllZFByb3BlcnR5
TmFtZSA9IGZ1bmN0aW9uICh0b2tlbikgeworCSAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7
CisJICAgICAgICAgICAgY2FzZSAzIC8qIElkZW50aWZpZXIgKi86CisJICAgICAgICAgICAgY2Fz
ZSA4IC8qIFN0cmluZ0xpdGVyYWwgKi86CisJICAgICAgICAgICAgY2FzZSAxIC8qIEJvb2xlYW5M
aXRlcmFsICovOgorCSAgICAgICAgICAgIGNhc2UgNSAvKiBOdWxsTGl0ZXJhbCAqLzoKKwkgICAg
ICAgICAgICBjYXNlIDYgLyogTnVtZXJpY0xpdGVyYWwgKi86CisJICAgICAgICAgICAgY2FzZSA0
IC8qIEtleXdvcmQgKi86CisJICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCSAgICAgICAg
ICAgIGNhc2UgNyAvKiBQdW5jdHVhdG9yICovOgorCSAgICAgICAgICAgICAgICByZXR1cm4gdG9r
ZW4udmFsdWUgPT09ICdbJzsKKwkgICAgICAgICAgICBkZWZhdWx0OgorCSAgICAgICAgICAgICAg
ICBicmVhazsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgfTsKKwkg
ICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUdldHRlck1ldGhvZCA9IGZ1bmN0aW9uICgpIHsKKwkg
ICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIgaXNHZW5l
cmF0b3IgPSBmYWxzZTsKKwkgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNv
bnRleHQuYWxsb3dZaWVsZDsKKwkgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gIWlz
R2VuZXJhdG9yOworCSAgICAgICAgdmFyIGZvcm1hbFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlRm9y
bWFsUGFyYW1ldGVycygpOworCSAgICAgICAgaWYgKGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zLmxl
bmd0aCA+IDApIHsKKwkgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5N
ZXNzYWdlcy5CYWRHZXR0ZXJBcml0eSk7CisJICAgICAgICB9CisJICAgICAgICB2YXIgbWV0aG9k
ID0gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKGZvcm1hbFBhcmFtZXRlcnMpOworCSAgICAgICAg
dGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CisJICAgICAgICBy
ZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5GdW5jdGlvbkV4cHJlc3Npb24obnVs
bCwgZm9ybWFsUGFyYW1ldGVycy5wYXJhbXMsIG1ldGhvZCwgaXNHZW5lcmF0b3IpKTsKKwkgICAg
fTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVNldHRlck1ldGhvZCA9IGZ1bmN0aW9uICgp
IHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIg
aXNHZW5lcmF0b3IgPSBmYWxzZTsKKwkgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0
aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKwkgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxk
ID0gIWlzR2VuZXJhdG9yOworCSAgICAgICAgdmFyIGZvcm1hbFBhcmFtZXRlcnMgPSB0aGlzLnBh
cnNlRm9ybWFsUGFyYW1ldGVycygpOworCSAgICAgICAgaWYgKGZvcm1hbFBhcmFtZXRlcnMucGFy
YW1zLmxlbmd0aCAhPT0gMSkgeworCSAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNz
YWdlc18xLk1lc3NhZ2VzLkJhZFNldHRlckFyaXR5KTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVs
c2UgaWYgKGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zWzBdIGluc3RhbmNlb2YgTm9kZS5SZXN0RWxl
bWVudCkgeworCSAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3Nh
Z2VzLkJhZFNldHRlclJlc3RQYXJhbWV0ZXIpOworCSAgICAgICAgfQorCSAgICAgICAgdmFyIG1l
dGhvZCA9IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChmb3JtYWxQYXJhbWV0ZXJzKTsKKwkgICAg
ICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOworCSAgICAg
ICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHByZXNzaW9u
KG51bGwsIGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zLCBtZXRob2QsIGlzR2VuZXJhdG9yKSk7CisJ
ICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VHZW5lcmF0b3JNZXRob2QgPSBmdW5j
dGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAg
ICAgdmFyIGlzR2VuZXJhdG9yID0gdHJ1ZTsKKwkgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWll
bGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKwkgICAgICAgIHRoaXMuY29udGV4dC5hbGxv
d1lpZWxkID0gdHJ1ZTsKKwkgICAgICAgIHZhciBwYXJhbXMgPSB0aGlzLnBhcnNlRm9ybWFsUGFy
YW1ldGVycygpOworCSAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBmYWxzZTsKKwkg
ICAgICAgIHZhciBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2QocGFyYW1zKTsKKwkg
ICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOworCSAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHByZXNz
aW9uKG51bGwsIHBhcmFtcy5wYXJhbXMsIG1ldGhvZCwgaXNHZW5lcmF0b3IpKTsKKwkgICAgfTsK
KwkgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2VuZXJhdG9yLWZ1
bmN0aW9uLWRlZmluaXRpb25zCisJICAgIFBhcnNlci5wcm90b3R5cGUuaXNTdGFydE9mRXhwcmVz
c2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBzdGFydCA9IHRydWU7CisJICAgICAg
ICB2YXIgdmFsdWUgPSB0aGlzLmxvb2thaGVhZC52YWx1ZTsKKwkgICAgICAgIHN3aXRjaCAodGhp
cy5sb29rYWhlYWQudHlwZSkgeworCSAgICAgICAgICAgIGNhc2UgNyAvKiBQdW5jdHVhdG9yICov
OgorCSAgICAgICAgICAgICAgICBzdGFydCA9ICh2YWx1ZSA9PT0gJ1snKSB8fCAodmFsdWUgPT09
ICcoJykgfHwgKHZhbHVlID09PSAneycpIHx8CisJICAgICAgICAgICAgICAgICAgICAodmFsdWUg
PT09ICcrJykgfHwgKHZhbHVlID09PSAnLScpIHx8CisJICAgICAgICAgICAgICAgICAgICAodmFs
dWUgPT09ICchJykgfHwgKHZhbHVlID09PSAnficpIHx8CisJICAgICAgICAgICAgICAgICAgICAo
dmFsdWUgPT09ICcrKycpIHx8ICh2YWx1ZSA9PT0gJy0tJykgfHwKKwkgICAgICAgICAgICAgICAg
ICAgICh2YWx1ZSA9PT0gJy8nKSB8fCAodmFsdWUgPT09ICcvPScpOyAvLyByZWd1bGFyIGV4cHJl
c3Npb24gbGl0ZXJhbAorCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNl
IDQgLyogS2V5d29yZCAqLzoKKwkgICAgICAgICAgICAgICAgc3RhcnQgPSAodmFsdWUgPT09ICdj
bGFzcycpIHx8ICh2YWx1ZSA9PT0gJ2RlbGV0ZScpIHx8CisJICAgICAgICAgICAgICAgICAgICAo
dmFsdWUgPT09ICdmdW5jdGlvbicpIHx8ICh2YWx1ZSA9PT0gJ2xldCcpIHx8ICh2YWx1ZSA9PT0g
J25ldycpIHx8CisJICAgICAgICAgICAgICAgICAgICAodmFsdWUgPT09ICdzdXBlcicpIHx8ICh2
YWx1ZSA9PT0gJ3RoaXMnKSB8fCAodmFsdWUgPT09ICd0eXBlb2YnKSB8fAorCSAgICAgICAgICAg
ICAgICAgICAgKHZhbHVlID09PSAndm9pZCcpIHx8ICh2YWx1ZSA9PT0gJ3lpZWxkJyk7CisJICAg
ICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGRlZmF1bHQ6CisJICAgICAgICAgICAg
ICAgIGJyZWFrOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHN0YXJ0OworCSAgICB9Owor
CSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlWWllbGRFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkg
eworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMu
ZXhwZWN0S2V5d29yZCgneWllbGQnKTsKKwkgICAgICAgIHZhciBhcmd1bWVudCA9IG51bGw7CisJ
ICAgICAgICB2YXIgZGVsZWdhdGUgPSBmYWxzZTsKKwkgICAgICAgIGlmICghdGhpcy5oYXNMaW5l
VGVybWluYXRvcikgeworCSAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlz
LmNvbnRleHQuYWxsb3dZaWVsZDsKKwkgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVs
ZCA9IGZhbHNlOworCSAgICAgICAgICAgIGRlbGVnYXRlID0gdGhpcy5tYXRjaCgnKicpOworCSAg
ICAgICAgICAgIGlmIChkZWxlZ2F0ZSkgeworCSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tl
bigpOworCSAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhw
cmVzc2lvbigpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlz
U3RhcnRPZkV4cHJlc3Npb24oKSkgeworCSAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHRoaXMu
cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKKwkgICAgICAg
IH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLllpZWxkRXhw
cmVzc2lvbihhcmd1bWVudCwgZGVsZWdhdGUpKTsKKwkgICAgfTsKKwkgICAgLy8gaHR0cHM6Ly90
YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY2xhc3MtZGVmaW5pdGlvbnMKKwkgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZUNsYXNzRWxlbWVudCA9IGZ1bmN0aW9uIChoYXNDb25zdHJ1Y3Rvcikg
eworCSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIGtpbmQgPSAnJzsKKwkgICAgICAg
IHZhciBrZXkgPSBudWxsOworCSAgICAgICAgdmFyIHZhbHVlID0gbnVsbDsKKwkgICAgICAgIHZh
ciBjb21wdXRlZCA9IGZhbHNlOworCSAgICAgICAgdmFyIG1ldGhvZCA9IGZhbHNlOworCSAgICAg
ICAgdmFyIGlzU3RhdGljID0gZmFsc2U7CisJICAgICAgICB2YXIgaXNBc3luYyA9IGZhbHNlOwor
CSAgICAgICAgaWYgKHRoaXMubWF0Y2goJyonKSkgeworCSAgICAgICAgICAgIHRoaXMubmV4dFRv
a2VuKCk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICBjb21wdXRl
ZCA9IHRoaXMubWF0Y2goJ1snKTsKKwkgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0
UHJvcGVydHlLZXkoKTsKKwkgICAgICAgICAgICB2YXIgaWQgPSBrZXk7CisJICAgICAgICAgICAg
aWYgKGlkLm5hbWUgPT09ICdzdGF0aWMnICYmICh0aGlzLnF1YWxpZmllZFByb3BlcnR5TmFtZSh0
aGlzLmxvb2thaGVhZCkgfHwgdGhpcy5tYXRjaCgnKicpKSkgeworCSAgICAgICAgICAgICAgICB0
b2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgICAgICAgICBpc1N0YXRpYyA9IHRydWU7
CisJICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpOworCSAgICAgICAg
ICAgICAgICBpZiAodGhpcy5tYXRjaCgnKicpKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlz
Lm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2Ug
eworCSAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5
KCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYg
KCh0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pICYmICF0aGlzLmhhc0xpbmVUZXJt
aW5hdG9yICYmICh0b2tlbi52YWx1ZSA9PT0gJ2FzeW5jJykpIHsKKwkgICAgICAgICAgICAgICAg
dmFyIHB1bmN0dWF0b3IgPSB0aGlzLmxvb2thaGVhZC52YWx1ZTsKKwkgICAgICAgICAgICAgICAg
aWYgKHB1bmN0dWF0b3IgIT09ICc6JyAmJiBwdW5jdHVhdG9yICE9PSAnKCcgJiYgcHVuY3R1YXRv
ciAhPT0gJyonKSB7CisJICAgICAgICAgICAgICAgICAgICBpc0FzeW5jID0gdHJ1ZTsKKwkgICAg
ICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAgICAgICAgICAg
ICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKwkgICAgICAgICAgICAg
ICAgICAgIGlmICh0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8gJiYgdG9rZW4udmFs
dWUgPT09ICdjb25zdHJ1Y3RvcicpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRv
bGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLkNvbnN0cnVj
dG9ySXNBc3luYyk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB2YXIgbG9va2FoZWFkUHJvcGVy
dHlLZXkgPSB0aGlzLnF1YWxpZmllZFByb3BlcnR5TmFtZSh0aGlzLmxvb2thaGVhZCk7CisJICAg
ICAgICBpZiAodG9rZW4udHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovKSB7CisJICAgICAgICAg
ICAgaWYgKHRva2VuLnZhbHVlID09PSAnZ2V0JyAmJiBsb29rYWhlYWRQcm9wZXJ0eUtleSkgewor
CSAgICAgICAgICAgICAgICBraW5kID0gJ2dldCc7CisJICAgICAgICAgICAgICAgIGNvbXB1dGVk
ID0gdGhpcy5tYXRjaCgnWycpOworCSAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2Jq
ZWN0UHJvcGVydHlLZXkoKTsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWll
bGQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlR2V0dGVyTWV0
aG9kKCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnZhbHVl
ID09PSAnc2V0JyAmJiBsb29rYWhlYWRQcm9wZXJ0eUtleSkgeworCSAgICAgICAgICAgICAgICBr
aW5kID0gJ3NldCc7CisJICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycp
OworCSAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsK
KwkgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlU2V0dGVyTWV0aG9kKCk7CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0g
NyAvKiBQdW5jdHVhdG9yICovICYmIHRva2VuLnZhbHVlID09PSAnKicgJiYgbG9va2FoZWFkUHJv
cGVydHlLZXkpIHsKKwkgICAgICAgICAgICBraW5kID0gJ2luaXQnOworCSAgICAgICAgICAgIGNv
bXB1dGVkID0gdGhpcy5tYXRjaCgnWycpOworCSAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VP
YmplY3RQcm9wZXJ0eUtleSgpOworCSAgICAgICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZUdlbmVy
YXRvck1ldGhvZCgpOworCSAgICAgICAgICAgIG1ldGhvZCA9IHRydWU7CisJICAgICAgICB9CisJ
ICAgICAgICBpZiAoIWtpbmQgJiYga2V5ICYmIHRoaXMubWF0Y2goJygnKSkgeworCSAgICAgICAg
ICAgIGtpbmQgPSAnaW5pdCc7CisJICAgICAgICAgICAgdmFsdWUgPSBpc0FzeW5jID8gdGhpcy5w
YXJzZVByb3BlcnR5TWV0aG9kQXN5bmNGdW5jdGlvbigpIDogdGhpcy5wYXJzZVByb3BlcnR5TWV0
aG9kRnVuY3Rpb24oKTsKKwkgICAgICAgICAgICBtZXRob2QgPSB0cnVlOworCSAgICAgICAgfQor
CSAgICAgICAgaWYgKCFraW5kKSB7CisJICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRU
b2tlbih0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICB9CisJICAgICAgICBpZiAoa2luZCA9PT0g
J2luaXQnKSB7CisJICAgICAgICAgICAga2luZCA9ICdtZXRob2QnOworCSAgICAgICAgfQorCSAg
ICAgICAgaWYgKCFjb21wdXRlZCkgeworCSAgICAgICAgICAgIGlmIChpc1N0YXRpYyAmJiB0aGlz
LmlzUHJvcGVydHlLZXkoa2V5LCAncHJvdG90eXBlJykpIHsKKwkgICAgICAgICAgICAgICAgdGhp
cy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5TdGF0aWNQ
cm90b3R5cGUpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZiAoIWlzU3RhdGljICYm
IHRoaXMuaXNQcm9wZXJ0eUtleShrZXksICdjb25zdHJ1Y3RvcicpKSB7CisJICAgICAgICAgICAg
ICAgIGlmIChraW5kICE9PSAnbWV0aG9kJyB8fCAhbWV0aG9kIHx8ICh2YWx1ZSAmJiB2YWx1ZS5n
ZW5lcmF0b3IpKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRv
a2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLkNvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZCk7
CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgaWYgKGhhc0NvbnN0cnVjdG9y
LnZhbHVlKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2Vu
KHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLkR1cGxpY2F0ZUNvbnN0cnVjdG9yKTsKKwkgICAg
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAg
ICAgIGhhc0NvbnN0cnVjdG9yLnZhbHVlID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgICAgICBraW5kID0gJ2NvbnN0cnVjdG9yJzsKKwkgICAgICAgICAgICB9CisJICAg
ICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5NZXRo
b2REZWZpbml0aW9uKGtleSwgY29tcHV0ZWQsIHZhbHVlLCBraW5kLCBpc1N0YXRpYykpOworCSAg
ICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQ2xhc3NFbGVtZW50TGlzdCA9IGZ1bmN0
aW9uICgpIHsKKwkgICAgICAgIHZhciBib2R5ID0gW107CisJICAgICAgICB2YXIgaGFzQ29uc3Ry
dWN0b3IgPSB7IHZhbHVlOiBmYWxzZSB9OworCSAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsKKwkg
ICAgICAgIHdoaWxlICghdGhpcy5tYXRjaCgnfScpKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMu
bWF0Y2goJzsnKSkgeworCSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgYm9keS5wdXNo
KHRoaXMucGFyc2VDbGFzc0VsZW1lbnQoaGFzQ29uc3RydWN0b3IpKTsKKwkgICAgICAgICAgICB9
CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmV4cGVjdCgnfScpOworCSAgICAgICAgcmV0dXJu
IGJvZHk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDbGFzc0JvZHkgPSBm
dW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAg
ICAgICAgdmFyIGVsZW1lbnRMaXN0ID0gdGhpcy5wYXJzZUNsYXNzRWxlbWVudExpc3QoKTsKKwkg
ICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkNsYXNzQm9keShlbGVt
ZW50TGlzdCkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQ2xhc3NEZWNs
YXJhdGlvbiA9IGZ1bmN0aW9uIChpZGVudGlmaWVySXNPcHRpb25hbCkgeworCSAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBwcmV2aW91c1N0cmljdCA9
IHRoaXMuY29udGV4dC5zdHJpY3Q7CisJICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gdHJ1
ZTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnY2xhc3MnKTsKKwkgICAgICAgIHZhciBp
ZCA9IChpZGVudGlmaWVySXNPcHRpb25hbCAmJiAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMyAv
KiBJZGVudGlmaWVyICovKSkgPyBudWxsIDogdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigp
OworCSAgICAgICAgdmFyIHN1cGVyQ2xhc3MgPSBudWxsOworCSAgICAgICAgaWYgKHRoaXMubWF0
Y2hLZXl3b3JkKCdleHRlbmRzJykpIHsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwor
CSAgICAgICAgICAgIHN1cGVyQ2xhc3MgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5w
YXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpOworCSAgICAgICAgfQorCSAgICAg
ICAgdmFyIGNsYXNzQm9keSA9IHRoaXMucGFyc2VDbGFzc0JvZHkoKTsKKwkgICAgICAgIHRoaXMu
Y29udGV4dC5zdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKwkgICAgICAgIHJldHVybiB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBOb2RlLkNsYXNzRGVjbGFyYXRpb24oaWQsIHN1cGVyQ2xhc3MsIGNs
YXNzQm9keSkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQ2xhc3NFeHBy
ZXNzaW9uID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKKwkgICAgICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHRoaXMuY29udGV4dC5zdHJpY3Q7
CisJICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gdHJ1ZTsKKwkgICAgICAgIHRoaXMuZXhw
ZWN0S2V5d29yZCgnY2xhc3MnKTsKKwkgICAgICAgIHZhciBpZCA9ICh0aGlzLmxvb2thaGVhZC50
eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pID8gdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmll
cigpIDogbnVsbDsKKwkgICAgICAgIHZhciBzdXBlckNsYXNzID0gbnVsbDsKKwkgICAgICAgIGlm
ICh0aGlzLm1hdGNoS2V5d29yZCgnZXh0ZW5kcycpKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0
VG9rZW4oKTsKKwkgICAgICAgICAgICBzdXBlckNsYXNzID0gdGhpcy5pc29sYXRlQ292ZXJHcmFt
bWFyKHRoaXMucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKTsKKwkgICAgICAg
IH0KKwkgICAgICAgIHZhciBjbGFzc0JvZHkgPSB0aGlzLnBhcnNlQ2xhc3NCb2R5KCk7CisJICAg
ICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7CisJICAgICAgICByZXR1
cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5DbGFzc0V4cHJlc3Npb24oaWQsIHN1cGVy
Q2xhc3MsIGNsYXNzQm9keSkpOworCSAgICB9OworCSAgICAvLyBodHRwczovL3RjMzkuZ2l0aHVi
LmlvL2VjbWEyNjIvI3NlYy1zY3JpcHRzCisJICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8v
ZWNtYTI2Mi8jc2VjLW1vZHVsZXMKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU1vZHVsZSA9
IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSB0cnVlOworCSAg
ICAgICAgdGhpcy5jb250ZXh0LmlzTW9kdWxlID0gdHJ1ZTsKKwkgICAgICAgIHRoaXMuc2Nhbm5l
ci5pc01vZHVsZSA9IHRydWU7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OworCSAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlRGlyZWN0aXZlUHJvbG9ndWVzKCk7CisJ
ICAgICAgICB3aGlsZSAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMiAvKiBFT0YgKi8pIHsKKwkg
ICAgICAgICAgICBib2R5LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpOworCSAg
ICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuTW9k
dWxlKGJvZHkpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVNjcmlwdCA9
IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJ
ICAgICAgICB2YXIgYm9keSA9IHRoaXMucGFyc2VEaXJlY3RpdmVQcm9sb2d1ZXMoKTsKKwkgICAg
ICAgIHdoaWxlICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSAyIC8qIEVPRiAqLykgeworCSAgICAg
ICAgICAgIGJvZHkucHVzaCh0aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSk7CisJICAgICAg
ICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5TY3JpcHQo
Ym9keSkpOworCSAgICB9OworCSAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIv
I3NlYy1pbXBvcnRzCisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VNb2R1bGVTcGVjaWZpZXIg
PSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwor
CSAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09IDggLyogU3RyaW5nTGl0ZXJhbCAq
LykgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLklu
dmFsaWRNb2R1bGVTcGVjaWZpZXIpOworCSAgICAgICAgfQorCSAgICAgICAgdmFyIHRva2VuID0g
dGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgIHZhciByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRv
a2VuKTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxpdGVy
YWwodG9rZW4udmFsdWUsIHJhdykpOworCSAgICB9OworCSAgICAvLyBpbXBvcnQgezxmb28gYXMg
YmFyPn0gLi4uOworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlSW1wb3J0U3BlY2lmaWVyID0g
ZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkg
ICAgICAgIHZhciBpbXBvcnRlZDsKKwkgICAgICAgIHZhciBsb2NhbDsKKwkgICAgICAgIGlmICh0
aGlzLmxvb2thaGVhZC50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pIHsKKwkgICAgICAgICAg
ICBpbXBvcnRlZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKwkgICAgICAgICAg
ICBsb2NhbCA9IGltcG9ydGVkOworCSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoQ29udGV4dHVh
bEtleXdvcmQoJ2FzJykpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkg
ICAgICAgICAgICAgICAgbG9jYWwgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAg
aW1wb3J0ZWQgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKKwkgICAgICAgICAgICBsb2Nh
bCA9IGltcG9ydGVkOworCSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdv
cmQoJ2FzJykpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAg
ICAgICAgICAgbG9jYWwgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpOworCSAgICAgICAgICAgIH0KKwkgICAg
ICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkltcG9y
dFNwZWNpZmllcihsb2NhbCwgaW1wb3J0ZWQpKTsKKwkgICAgfTsKKwkgICAgLy8ge2ZvbywgYmFy
IGFzIGJhc30KKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU5hbWVkSW1wb3J0cyA9IGZ1bmN0
aW9uICgpIHsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7CisJICAgICAgICB2YXIgc3BlY2lm
aWVycyA9IFtdOworCSAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHsKKwkgICAgICAg
ICAgICBzcGVjaWZpZXJzLnB1c2godGhpcy5wYXJzZUltcG9ydFNwZWNpZmllcigpKTsKKwkgICAg
ICAgICAgICBpZiAoIXRoaXMubWF0Y2goJ30nKSkgeworCSAgICAgICAgICAgICAgICB0aGlzLmV4
cGVjdCgnLCcpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZXhw
ZWN0KCd9Jyk7CisJICAgICAgICByZXR1cm4gc3BlY2lmaWVyczsKKwkgICAgfTsKKwkgICAgLy8g
aW1wb3J0IDxmb28+IC4uLjsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUltcG9ydERlZmF1
bHRTcGVjaWZpZXIgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3Jl
YXRlTm9kZSgpOworCSAgICAgICAgdmFyIGxvY2FsID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1l
KCk7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JbXBvcnRE
ZWZhdWx0U3BlY2lmaWVyKGxvY2FsKSk7CisJICAgIH07CisJICAgIC8vIGltcG9ydCA8KiBhcyBm
b28+IC4uLjsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNp
ZmllciA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2Rl
KCk7CisJICAgICAgICB0aGlzLmV4cGVjdCgnKicpOworCSAgICAgICAgaWYgKCF0aGlzLm1hdGNo
Q29udGV4dHVhbEtleXdvcmQoJ2FzJykpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93RXJyb3Io
bWVzc2FnZXNfMS5NZXNzYWdlcy5Ob0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2UpOworCSAgICAgICAg
fQorCSAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgIHZhciBsb2NhbCA9IHRoaXMu
cGFyc2VJZGVudGlmaWVyTmFtZSgpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKGxvY2FsKSk7CisJICAgIH07CisJ
ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJbXBvcnREZWNsYXJhdGlvbiA9IGZ1bmN0aW9uICgp
IHsKKwkgICAgICAgIGlmICh0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkpIHsKKwkgICAgICAg
ICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVj
bGFyYXRpb24pOworCSAgICAgICAgfQorCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnaW1wb3J0Jyk7CisJICAgICAgICB2
YXIgc3JjOworCSAgICAgICAgdmFyIHNwZWNpZmllcnMgPSBbXTsKKwkgICAgICAgIGlmICh0aGlz
Lmxvb2thaGVhZC50eXBlID09PSA4IC8qIFN0cmluZ0xpdGVyYWwgKi8pIHsKKwkgICAgICAgICAg
ICAvLyBpbXBvcnQgJ2Zvbyc7CisJICAgICAgICAgICAgc3JjID0gdGhpcy5wYXJzZU1vZHVsZVNw
ZWNpZmllcigpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgaWYg
KHRoaXMubWF0Y2goJ3snKSkgeworCSAgICAgICAgICAgICAgICAvLyBpbXBvcnQge2Jhcn0KKwkg
ICAgICAgICAgICAgICAgc3BlY2lmaWVycyA9IHNwZWNpZmllcnMuY29uY2F0KHRoaXMucGFyc2VO
YW1lZEltcG9ydHMoKSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHRo
aXMubWF0Y2goJyonKSkgeworCSAgICAgICAgICAgICAgICAvLyBpbXBvcnQgKiBhcyBmb28KKwkg
ICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHRoaXMucGFyc2VJbXBvcnROYW1lc3BhY2VT
cGVjaWZpZXIoKSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMu
aXNJZGVudGlmaWVyTmFtZSh0aGlzLmxvb2thaGVhZCkgJiYgIXRoaXMubWF0Y2hLZXl3b3JkKCdk
ZWZhdWx0JykpIHsKKwkgICAgICAgICAgICAgICAgLy8gaW1wb3J0IGZvbworCSAgICAgICAgICAg
ICAgICBzcGVjaWZpZXJzLnB1c2godGhpcy5wYXJzZUltcG9ydERlZmF1bHRTcGVjaWZpZXIoKSk7
CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcsJykpIHsKKwkgICAgICAgICAgICAg
ICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5t
YXRjaCgnKicpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW1wb3J0IGZvbywgKiBh
cyBmb28KKwkgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2godGhpcy5wYXJz
ZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpKTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJ3snKSkgeworCSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGltcG9ydCBmb28sIHtiYXJ9CisJICAgICAgICAgICAgICAgICAg
ICAgICAgc3BlY2lmaWVycyA9IHNwZWNpZmllcnMuY29uY2F0KHRoaXMucGFyc2VOYW1lZEltcG9y
dHMoKSk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRo
aXMubG9va2FoZWFkKTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAg
fQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAg
dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsKKwkgICAgICAgICAg
ICB9CisJICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zyb20n
KSkgeworCSAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXMubG9va2FoZWFkLnZhbHVl
ID8gbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBtZXNzYWdlc18xLk1lc3Nh
Z2VzLk1pc3NpbmdGcm9tQ2xhdXNlOworCSAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3Io
bWVzc2FnZSwgdGhpcy5sb29rYWhlYWQudmFsdWUpOworCSAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIHNyYyA9IHRoaXMucGFyc2VNb2R1
bGVTcGVjaWZpZXIoKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xv
bigpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSW1wb3J0
RGVjbGFyYXRpb24oc3BlY2lmaWVycywgc3JjKSk7CisJICAgIH07CisJICAgIC8vIGh0dHBzOi8v
dGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWV4cG9ydHMKKwkgICAgUGFyc2VyLnByb3RvdHlw
ZS5wYXJzZUV4cG9ydFNwZWNpZmllciA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIgbG9jYWwgPSB0aGlzLnBhcnNlSWRl
bnRpZmllck5hbWUoKTsKKwkgICAgICAgIHZhciBleHBvcnRlZCA9IGxvY2FsOworCSAgICAgICAg
aWYgKHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnYXMnKSkgeworCSAgICAgICAgICAgIHRo
aXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgZXhwb3J0ZWQgPSB0aGlzLnBhcnNlSWRlbnRp
Zmllck5hbWUoKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBOb2RlLkV4cG9ydFNwZWNpZmllcihsb2NhbCwgZXhwb3J0ZWQpKTsKKwkgICAgfTsK
KwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUV4cG9ydERlY2xhcmF0aW9uID0gZnVuY3Rpb24g
KCkgeworCSAgICAgICAgaWYgKHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSkgeworCSAgICAg
ICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLklsbGVnYWxFeHBvcnRE
ZWNsYXJhdGlvbik7CisJICAgICAgICB9CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRl
Tm9kZSgpOworCSAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdleHBvcnQnKTsKKwkgICAgICAg
IHZhciBleHBvcnREZWNsYXJhdGlvbjsKKwkgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29yZCgn
ZGVmYXVsdCcpKSB7CisJICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgLi4uCisJICAgICAg
ICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdv
cmQoJ2Z1bmN0aW9uJykpIHsKKwkgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgZnVu
Y3Rpb24gZm9vICgpIHt9CisJICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGZ1bmN0
aW9uICgpIHt9CisJICAgICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VG
dW5jdGlvbkRlY2xhcmF0aW9uKHRydWUpOworCSAgICAgICAgICAgICAgICBleHBvcnREZWNsYXJh
dGlvbiA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0RGVmYXVsdERlY2xhcmF0
aW9uKGRlY2xhcmF0aW9uKSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYg
KHRoaXMubWF0Y2hLZXl3b3JkKCdjbGFzcycpKSB7CisJICAgICAgICAgICAgICAgIC8vIGV4cG9y
dCBkZWZhdWx0IGNsYXNzIGZvbyB7fQorCSAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRpb24g
PSB0aGlzLnBhcnNlQ2xhc3NEZWNsYXJhdGlvbih0cnVlKTsKKwkgICAgICAgICAgICAgICAgZXhw
b3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydERlZmF1
bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICBlbHNlIGlmICh0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzeW5jJykpIHsKKwkgICAg
ICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gZiAoKSB7fQorCSAg
ICAgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAoKSB7fQorCSAg
ICAgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBhc3luYyB4ID0+IHgKKwkgICAgICAgICAg
ICAgICAgdmFyIGRlY2xhcmF0aW9uID0gdGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKSA/IHRoaXMu
cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKHRydWUpIDogdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHBy
ZXNzaW9uKCk7CisJICAgICAgICAgICAgICAgIGV4cG9ydERlY2xhcmF0aW9uID0gdGhpcy5maW5h
bGl6ZShub2RlLCBuZXcgTm9kZS5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZGVjbGFyYXRpb24p
KTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAg
IGlmICh0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zyb20nKSkgeworCSAgICAgICAgICAg
ICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRv
a2VuLCB0aGlzLmxvb2thaGVhZC52YWx1ZSk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQge307CisJICAgICAgICAgICAgICAgIC8vIGV4cG9y
dCBkZWZhdWx0IFtdOworCSAgICAgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCAoMSArIDIp
OworCSAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRpb24gPSB0aGlzLm1hdGNoKCd7JykgPyB0
aGlzLnBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIoKSA6CisJICAgICAgICAgICAgICAgICAgICB0aGlz
Lm1hdGNoKCdbJykgPyB0aGlzLnBhcnNlQXJyYXlJbml0aWFsaXplcigpIDogdGhpcy5wYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uKCk7CisJICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWlj
b2xvbigpOworCSAgICAgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IE5vZGUuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSk7
CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRj
aCgnKicpKSB7CisJICAgICAgICAgICAgLy8gZXhwb3J0ICogZnJvbSAnZm9vJzsKKwkgICAgICAg
ICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaENvbnRl
eHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKKwkgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0
aGlzLmxvb2thaGVhZC52YWx1ZSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2Vu
IDogbWVzc2FnZXNfMS5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZTsKKwkgICAgICAgICAgICAg
ICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2UsIHRoaXMubG9va2FoZWFkLnZhbHVlKTsKKwkgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICB2
YXIgc3JjID0gdGhpcy5wYXJzZU1vZHVsZVNwZWNpZmllcigpOworCSAgICAgICAgICAgIHRoaXMu
Y29uc3VtZVNlbWljb2xvbigpOworCSAgICAgICAgICAgIGV4cG9ydERlY2xhcmF0aW9uID0gdGhp
cy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHBvcnRBbGxEZWNsYXJhdGlvbihzcmMpKTsKKwkg
ICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDQgLyog
S2V5d29yZCAqLykgeworCSAgICAgICAgICAgIC8vIGV4cG9ydCB2YXIgZiA9IDE7CisJICAgICAg
ICAgICAgdmFyIGRlY2xhcmF0aW9uID0gdm9pZCAwOworCSAgICAgICAgICAgIHN3aXRjaCAodGhp
cy5sb29rYWhlYWQudmFsdWUpIHsKKwkgICAgICAgICAgICAgICAgY2FzZSAnbGV0JzoKKwkgICAg
ICAgICAgICAgICAgY2FzZSAnY29uc3QnOgorCSAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRp
b24gPSB0aGlzLnBhcnNlTGV4aWNhbERlY2xhcmF0aW9uKHsgaW5Gb3I6IGZhbHNlIH0pOworCSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgIGNhc2UgJ3Zhcic6CisJ
ICAgICAgICAgICAgICAgIGNhc2UgJ2NsYXNzJzoKKwkgICAgICAgICAgICAgICAgY2FzZSAnZnVu
Y3Rpb24nOgorCSAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlU3Rh
dGVtZW50TGlzdEl0ZW0oKTsKKwkgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorCSAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0
ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGV4
cG9ydERlY2xhcmF0aW9uID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHBvcnROYW1l
ZERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBbXSwgbnVsbCkpOworCSAgICAgICAgfQorCSAgICAg
ICAgZWxzZSBpZiAodGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKSkgeworCSAgICAgICAgICAgIHZh
ciBkZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CisJICAgICAg
ICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4
cG9ydE5hbWVkRGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIFtdLCBudWxsKSk7CisJICAgICAgICB9
CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICB2YXIgc3BlY2lmaWVycyA9IFtdOworCSAg
ICAgICAgICAgIHZhciBzb3VyY2UgPSBudWxsOworCSAgICAgICAgICAgIHZhciBpc0V4cG9ydEZy
b21JZGVudGlmaWVyID0gZmFsc2U7CisJICAgICAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsKKwkg
ICAgICAgICAgICB3aGlsZSAoIXRoaXMubWF0Y2goJ30nKSkgeworCSAgICAgICAgICAgICAgICBp
c0V4cG9ydEZyb21JZGVudGlmaWVyID0gaXNFeHBvcnRGcm9tSWRlbnRpZmllciB8fCB0aGlzLm1h
dGNoS2V5d29yZCgnZGVmYXVsdCcpOworCSAgICAgICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2go
dGhpcy5wYXJzZUV4cG9ydFNwZWNpZmllcigpKTsKKwkgICAgICAgICAgICAgICAgaWYgKCF0aGlz
Lm1hdGNoKCd9JykpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcsJyk7CisJ
ICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgdGhpcy5leHBl
Y3QoJ30nKTsKKwkgICAgICAgICAgICBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdm
cm9tJykpIHsKKwkgICAgICAgICAgICAgICAgLy8gZXhwb3J0IHtkZWZhdWx0fSBmcm9tICdmb28n
OworCSAgICAgICAgICAgICAgICAvLyBleHBvcnQge2Zvb30gZnJvbSAnZm9vJzsKKwkgICAgICAg
ICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgc291cmNlID0gdGhp
cy5wYXJzZU1vZHVsZVNwZWNpZmllcigpOworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVT
ZW1pY29sb24oKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSBpZiAoaXNFeHBv
cnRGcm9tSWRlbnRpZmllcikgeworCSAgICAgICAgICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9
OyAvLyBtaXNzaW5nIGZyb21DbGF1c2UKKwkgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0
aGlzLmxvb2thaGVhZC52YWx1ZSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2Vu
IDogbWVzc2FnZXNfMS5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZTsKKwkgICAgICAgICAgICAg
ICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2UsIHRoaXMubG9va2FoZWFkLnZhbHVlKTsKKwkgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIC8vIGV4cG9y
dCB7Zm9vfTsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgIGV4cG9ydERlY2xhcmF0aW9uID0gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5FeHBvcnROYW1lZERlY2xhcmF0aW9uKG51bGwsIHNwZWNpZmllcnMs
IHNvdXJjZSkpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGV4cG9ydERlY2xhcmF0aW9u
OworCSAgICB9OworCSAgICByZXR1cm4gUGFyc2VyOworCX0oKSk7CisJZXhwb3J0cy5QYXJzZXIg
PSBQYXJzZXI7CiAKIAogLyoqKi8gfSwKIC8qIDkgKi8KIC8qKiovIGZ1bmN0aW9uKG1vZHVsZSwg
ZXhwb3J0cykgewogCi0gICAgLy8gRW5zdXJlIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgb3RoZXJ3
aXNlIHRocm93IGFuIGVycm9yLgotICAgIC8vIFRoaXMgaXMgb25seSB0byBoYXZlIGEgYmV0dGVy
IGNvbnRyYWN0IHNlbWFudGljLCBpLmUuIGFub3RoZXIgc2FmZXR5IG5ldAotICAgIC8vIHRvIGNh
dGNoIGEgbG9naWMgZXJyb3IuIFRoZSBjb25kaXRpb24gc2hhbGwgYmUgZnVsZmlsbGVkIGluIG5v
cm1hbCBjYXNlLgotICAgIC8vIERvIE5PVCB1c2UgdGhpcyB0byBlbmZvcmNlIGEgY2VydGFpbiBj
b25kaXRpb24gb24gYW55IHVzZXIgaW5wdXQuCi0gICAgInVzZSBzdHJpY3QiOwotICAgIGZ1bmN0
aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHsKLSAgICAgICAgLyogaXN0YW5idWwgaWdu
b3JlIGlmICovCi0gICAgICAgIGlmICghY29uZGl0aW9uKSB7Ci0gICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ0FTU0VSVDogJyArIG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIGV4
cG9ydHMuYXNzZXJ0ID0gYXNzZXJ0OworCSJ1c2Ugc3RyaWN0IjsKKwkvLyBFbnN1cmUgdGhlIGNv
bmRpdGlvbiBpcyB0cnVlLCBvdGhlcndpc2UgdGhyb3cgYW4gZXJyb3IuCisJLy8gVGhpcyBpcyBv
bmx5IHRvIGhhdmUgYSBiZXR0ZXIgY29udHJhY3Qgc2VtYW50aWMsIGkuZS4gYW5vdGhlciBzYWZl
dHkgbmV0CisJLy8gdG8gY2F0Y2ggYSBsb2dpYyBlcnJvci4gVGhlIGNvbmRpdGlvbiBzaGFsbCBi
ZSBmdWxmaWxsZWQgaW4gbm9ybWFsIGNhc2UuCisJLy8gRG8gTk9UIHVzZSB0aGlzIHRvIGVuZm9y
Y2UgYSBjZXJ0YWluIGNvbmRpdGlvbiBvbiBhbnkgdXNlciBpbnB1dC4KKwlPYmplY3QuZGVmaW5l
UHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOworCWZ1bmN0
aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHsKKwkgICAgLyogaXN0YW5idWwgaWdub3Jl
IGlmICovCisJICAgIGlmICghY29uZGl0aW9uKSB7CisJICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J0FTU0VSVDogJyArIG1lc3NhZ2UpOworCSAgICB9CisJfQorCWV4cG9ydHMuYXNzZXJ0ID0gYXNz
ZXJ0OwogCiAKIC8qKiovIH0sCiAvKiAxMCAqLwogLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBv
cnRzKSB7CiAKLSAgICAvKiB0c2xpbnQ6ZGlzYWJsZTptYXgtY2xhc3Nlcy1wZXItZmlsZSAqLwot
ICAgICJ1c2Ugc3RyaWN0IjsKLSAgICB2YXIgRXJyb3JIYW5kbGVyID0gKGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgZnVuY3Rpb24gRXJyb3JIYW5kbGVyKCkgewotICAgICAgICAgICAgdGhpcy5lcnJv
cnMgPSBbXTsKLSAgICAgICAgICAgIHRoaXMudG9sZXJhbnQgPSBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBFcnJvckhhbmRsZXIucHJvdG90eXBlLnJlY29yZEVycm9yID0gZnVuY3Rpb24gKGVy
cm9yKSB7Ci0gICAgICAgICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKTsKLSAgICAgICAgfTsK
LSAgICAgICAgRXJyb3JIYW5kbGVyLnByb3RvdHlwZS50b2xlcmF0ZSA9IGZ1bmN0aW9uIChlcnJv
cikgewotICAgICAgICAgICAgaWYgKHRoaXMudG9sZXJhbnQpIHsKLSAgICAgICAgICAgICAgICB0
aGlzLnJlY29yZEVycm9yKGVycm9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIHRocm93IGVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICB9
OwotICAgICAgICBFcnJvckhhbmRsZXIucHJvdG90eXBlLmNvbnN0cnVjdEVycm9yID0gZnVuY3Rp
b24gKG1zZywgY29sdW1uKSB7Ci0gICAgICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobXNn
KTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoYmFzZSkgewotICAgICAgICAgICAgICAgIC8q
IGlzdGFuYnVsIGlnbm9yZSBlbHNlICovCi0gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5jcmVh
dGUgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGVycm9y
ID0gT2JqZWN0LmNyZWF0ZShiYXNlKTsKLSAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGVycm9yLCAnY29sdW1uJywgeyB2YWx1ZTogY29sdW1uIH0pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBu
ZXh0ICovCi0gICAgICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgICAgIH07Ci0gICAgICAgIEVy
cm9ySGFuZGxlci5wcm90b3R5cGUuY3JlYXRlRXJyb3IgPSBmdW5jdGlvbiAoaW5kZXgsIGxpbmUs
IGNvbCwgZGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgIHZhciBtc2cgPSAnTGluZSAnICsgbGlu
ZSArICc6ICcgKyBkZXNjcmlwdGlvbjsKLSAgICAgICAgICAgIHZhciBlcnJvciA9IHRoaXMuY29u
c3RydWN0RXJyb3IobXNnLCBjb2wpOwotICAgICAgICAgICAgZXJyb3IuaW5kZXggPSBpbmRleDsK
LSAgICAgICAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSBsaW5lOwotICAgICAgICAgICAgZXJyb3Iu
ZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcjsKLSAg
ICAgICAgfTsKLSAgICAgICAgRXJyb3JIYW5kbGVyLnByb3RvdHlwZS50aHJvd0Vycm9yID0gZnVu
Y3Rpb24gKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKSB7Ci0gICAgICAgICAgICB0aHJv
dyB0aGlzLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKTsKLSAgICAg
ICAgfTsKLSAgICAgICAgRXJyb3JIYW5kbGVyLnByb3RvdHlwZS50b2xlcmF0ZUVycm9yID0gZnVu
Y3Rpb24gKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKSB7Ci0gICAgICAgICAgICB2YXIg
ZXJyb3IgPSB0aGlzLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKTsK
LSAgICAgICAgICAgIGlmICh0aGlzLnRvbGVyYW50KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5y
ZWNvcmRFcnJvcihlcnJvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAg
ICAgICAgcmV0dXJuIEVycm9ySGFuZGxlcjsKLSAgICB9KCkpOwotICAgIGV4cG9ydHMuRXJyb3JI
YW5kbGVyID0gRXJyb3JIYW5kbGVyOworCSJ1c2Ugc3RyaWN0IjsKKwkvKiB0c2xpbnQ6ZGlzYWJs
ZTptYXgtY2xhc3Nlcy1wZXItZmlsZSAqLworCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRz
LCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CisJdmFyIEVycm9ySGFuZGxlciA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gRXJyb3JIYW5kbGVyKCkg
eworCSAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTsKKwkgICAgICAgIHRoaXMudG9sZXJhbnQgPSBm
YWxzZTsKKwkgICAgfQorCSAgICBFcnJvckhhbmRsZXIucHJvdG90eXBlLnJlY29yZEVycm9yID0g
ZnVuY3Rpb24gKGVycm9yKSB7CisJICAgICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKTsKKwkg
ICAgfTsKKwkgICAgRXJyb3JIYW5kbGVyLnByb3RvdHlwZS50b2xlcmF0ZSA9IGZ1bmN0aW9uIChl
cnJvcikgeworCSAgICAgICAgaWYgKHRoaXMudG9sZXJhbnQpIHsKKwkgICAgICAgICAgICB0aGlz
LnJlY29yZEVycm9yKGVycm9yKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAg
ICAgICAgIHRocm93IGVycm9yOworCSAgICAgICAgfQorCSAgICB9OworCSAgICBFcnJvckhhbmRs
ZXIucHJvdG90eXBlLmNvbnN0cnVjdEVycm9yID0gZnVuY3Rpb24gKG1zZywgY29sdW1uKSB7CisJ
ICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobXNnKTsKKwkgICAgICAgIHRyeSB7CisJICAg
ICAgICAgICAgdGhyb3cgZXJyb3I7CisJICAgICAgICB9CisJICAgICAgICBjYXRjaCAoYmFzZSkg
eworCSAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovCisJICAgICAgICAgICAg
aWYgKE9iamVjdC5jcmVhdGUgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7CisJICAgICAgICAg
ICAgICAgIGVycm9yID0gT2JqZWN0LmNyZWF0ZShiYXNlKTsKKwkgICAgICAgICAgICAgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCAnY29sdW1uJywgeyB2YWx1ZTogY29sdW1uIH0pOwor
CSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBu
ZXh0ICovCisJICAgICAgICByZXR1cm4gZXJyb3I7CisJICAgIH07CisJICAgIEVycm9ySGFuZGxl
ci5wcm90b3R5cGUuY3JlYXRlRXJyb3IgPSBmdW5jdGlvbiAoaW5kZXgsIGxpbmUsIGNvbCwgZGVz
Y3JpcHRpb24pIHsKKwkgICAgICAgIHZhciBtc2cgPSAnTGluZSAnICsgbGluZSArICc6ICcgKyBk
ZXNjcmlwdGlvbjsKKwkgICAgICAgIHZhciBlcnJvciA9IHRoaXMuY29uc3RydWN0RXJyb3IobXNn
LCBjb2wpOworCSAgICAgICAgZXJyb3IuaW5kZXggPSBpbmRleDsKKwkgICAgICAgIGVycm9yLmxp
bmVOdW1iZXIgPSBsaW5lOworCSAgICAgICAgZXJyb3IuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlv
bjsKKwkgICAgICAgIHJldHVybiBlcnJvcjsKKwkgICAgfTsKKwkgICAgRXJyb3JIYW5kbGVyLnBy
b3RvdHlwZS50aHJvd0Vycm9yID0gZnVuY3Rpb24gKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0
aW9uKSB7CisJICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2ws
IGRlc2NyaXB0aW9uKTsKKwkgICAgfTsKKwkgICAgRXJyb3JIYW5kbGVyLnByb3RvdHlwZS50b2xl
cmF0ZUVycm9yID0gZnVuY3Rpb24gKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKSB7CisJ
ICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2wsIGRl
c2NyaXB0aW9uKTsKKwkgICAgICAgIGlmICh0aGlzLnRvbGVyYW50KSB7CisJICAgICAgICAgICAg
dGhpcy5yZWNvcmRFcnJvcihlcnJvcik7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkg
ICAgICAgICAgICB0aHJvdyBlcnJvcjsKKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgcmV0dXJu
IEVycm9ySGFuZGxlcjsKKwl9KCkpOworCWV4cG9ydHMuRXJyb3JIYW5kbGVyID0gRXJyb3JIYW5k
bGVyOwogCiAKIC8qKiovIH0sCiAvKiAxMSAqLwogLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBv
cnRzKSB7CiAKLSAgICAidXNlIHN0cmljdCI7Ci0gICAgLy8gRXJyb3IgbWVzc2FnZXMgc2hvdWxk
IGJlIGlkZW50aWNhbCB0byBWOC4KLSAgICBleHBvcnRzLk1lc3NhZ2VzID0gewotICAgICAgICBC
YWRJbXBvcnRDYWxsQXJpdHk6ICdVbmV4cGVjdGVkIHRva2VuJywKLSAgICAgICAgQmFkR2V0dGVy
QXJpdHk6ICdHZXR0ZXIgbXVzdCBub3QgaGF2ZSBhbnkgZm9ybWFsIHBhcmFtZXRlcnMnLAotICAg
ICAgICBCYWRTZXR0ZXJBcml0eTogJ1NldHRlciBtdXN0IGhhdmUgZXhhY3RseSBvbmUgZm9ybWFs
IHBhcmFtZXRlcicsCi0gICAgICAgIEJhZFNldHRlclJlc3RQYXJhbWV0ZXI6ICdTZXR0ZXIgZnVu
Y3Rpb24gYXJndW1lbnQgbXVzdCBub3QgYmUgYSByZXN0IHBhcmFtZXRlcicsCi0gICAgICAgIENv
bnN0cnVjdG9ySXNBc3luYzogJ0NsYXNzIGNvbnN0cnVjdG9yIG1heSBub3QgYmUgYW4gYXN5bmMg
bWV0aG9kJywKLSAgICAgICAgQ29uc3RydWN0b3JTcGVjaWFsTWV0aG9kOiAnQ2xhc3MgY29uc3Ry
dWN0b3IgbWF5IG5vdCBiZSBhbiBhY2Nlc3NvcicsCi0gICAgICAgIERlY2xhcmF0aW9uTWlzc2lu
Z0luaXRpYWxpemVyOiAnTWlzc2luZyBpbml0aWFsaXplciBpbiAlMCBkZWNsYXJhdGlvbicsCi0g
ICAgICAgIERlZmF1bHRSZXN0UGFyYW1ldGVyOiAnVW5leHBlY3RlZCB0b2tlbiA9JywKLSAgICAg
ICAgRGVmYXVsdFJlc3RQcm9wZXJ0eTogJ1VuZXhwZWN0ZWQgdG9rZW4gPScsCi0gICAgICAgIER1
cGxpY2F0ZUJpbmRpbmc6ICdEdXBsaWNhdGUgYmluZGluZyAlMCcsCi0gICAgICAgIER1cGxpY2F0
ZUNvbnN0cnVjdG9yOiAnQSBjbGFzcyBtYXkgb25seSBoYXZlIG9uZSBjb25zdHJ1Y3RvcicsCi0g
ICAgICAgIER1cGxpY2F0ZVByb3RvUHJvcGVydHk6ICdEdXBsaWNhdGUgX19wcm90b19fIGZpZWxk
cyBhcmUgbm90IGFsbG93ZWQgaW4gb2JqZWN0IGxpdGVyYWxzJywKLSAgICAgICAgRm9ySW5PZkxv
b3BJbml0aWFsaXplcjogJyUwIGxvb3AgdmFyaWFibGUgZGVjbGFyYXRpb24gbWF5IG5vdCBoYXZl
IGFuIGluaXRpYWxpemVyJywKLSAgICAgICAgR2VuZXJhdG9ySW5MZWdhY3lDb250ZXh0OiAnR2Vu
ZXJhdG9yIGRlY2xhcmF0aW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gbGVnYWN5IGNvbnRleHRzJywK
LSAgICAgICAgSWxsZWdhbEJyZWFrOiAnSWxsZWdhbCBicmVhayBzdGF0ZW1lbnQnLAotICAgICAg
ICBJbGxlZ2FsQ29udGludWU6ICdJbGxlZ2FsIGNvbnRpbnVlIHN0YXRlbWVudCcsCi0gICAgICAg
IElsbGVnYWxFeHBvcnREZWNsYXJhdGlvbjogJ1VuZXhwZWN0ZWQgdG9rZW4nLAotICAgICAgICBJ
bGxlZ2FsSW1wb3J0RGVjbGFyYXRpb246ICdVbmV4cGVjdGVkIHRva2VuJywKLSAgICAgICAgSWxs
ZWdhbExhbmd1YWdlTW9kZURpcmVjdGl2ZTogJ0lsbGVnYWwgXCd1c2Ugc3RyaWN0XCcgZGlyZWN0
aXZlIGluIGZ1bmN0aW9uIHdpdGggbm9uLXNpbXBsZSBwYXJhbWV0ZXIgbGlzdCcsCi0gICAgICAg
IElsbGVnYWxSZXR1cm46ICdJbGxlZ2FsIHJldHVybiBzdGF0ZW1lbnQnLAotICAgICAgICBJbnZh
bGlkRXNjYXBlZFJlc2VydmVkV29yZDogJ0tleXdvcmQgbXVzdCBub3QgY29udGFpbiBlc2NhcGVk
IGNoYXJhY3RlcnMnLAotICAgICAgICBJbnZhbGlkSGV4RXNjYXBlU2VxdWVuY2U6ICdJbnZhbGlk
IGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZScsCi0gICAgICAgIEludmFsaWRMSFNJbkFzc2ln
bm1lbnQ6ICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGFzc2lnbm1lbnQnLAotICAgICAgICBJ
bnZhbGlkTEhTSW5Gb3JJbjogJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWluJywKLSAg
ICAgICAgSW52YWxpZExIU0luRm9yTG9vcDogJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9y
LWxvb3AnLAotICAgICAgICBJbnZhbGlkTW9kdWxlU3BlY2lmaWVyOiAnVW5leHBlY3RlZCB0b2tl
bicsCi0gICAgICAgIEludmFsaWRSZWdFeHA6ICdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbics
Ci0gICAgICAgIExldEluTGV4aWNhbEJpbmRpbmc6ICdsZXQgaXMgZGlzYWxsb3dlZCBhcyBhIGxl
eGljYWxseSBib3VuZCBuYW1lJywKLSAgICAgICAgTWlzc2luZ0Zyb21DbGF1c2U6ICdVbmV4cGVj
dGVkIHRva2VuJywKLSAgICAgICAgTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoOiAnTW9yZSB0aGFu
IG9uZSBkZWZhdWx0IGNsYXVzZSBpbiBzd2l0Y2ggc3RhdGVtZW50JywKLSAgICAgICAgTmV3bGlu
ZUFmdGVyVGhyb3c6ICdJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3cnLAotICAgICAgICBOb0Fz
QWZ0ZXJJbXBvcnROYW1lc3BhY2U6ICdVbmV4cGVjdGVkIHRva2VuJywKLSAgICAgICAgTm9DYXRj
aE9yRmluYWxseTogJ01pc3NpbmcgY2F0Y2ggb3IgZmluYWxseSBhZnRlciB0cnknLAotICAgICAg
ICBQYXJhbWV0ZXJBZnRlclJlc3RQYXJhbWV0ZXI6ICdSZXN0IHBhcmFtZXRlciBtdXN0IGJlIGxh
c3QgZm9ybWFsIHBhcmFtZXRlcicsCi0gICAgICAgIFByb3BlcnR5QWZ0ZXJSZXN0UHJvcGVydHk6
ICdVbmV4cGVjdGVkIHRva2VuJywKLSAgICAgICAgUmVkZWNsYXJhdGlvbjogJyUwIFwnJTFcJyBo
YXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkJywKLSAgICAgICAgU3RhdGljUHJvdG90eXBlOiAnQ2xh
c3NlcyBtYXkgbm90IGhhdmUgc3RhdGljIHByb3BlcnR5IG5hbWVkIHByb3RvdHlwZScsCi0gICAg
ICAgIFN0cmljdENhdGNoVmFyaWFibGU6ICdDYXRjaCB2YXJpYWJsZSBtYXkgbm90IGJlIGV2YWwg
b3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlJywKLSAgICAgICAgU3RyaWN0RGVsZXRlOiAnRGVs
ZXRlIG9mIGFuIHVucXVhbGlmaWVkIGlkZW50aWZpZXIgaW4gc3RyaWN0IG1vZGUuJywKLSAgICAg
ICAgU3RyaWN0RnVuY3Rpb246ICdJbiBzdHJpY3QgbW9kZSBjb2RlLCBmdW5jdGlvbnMgY2FuIG9u
bHkgYmUgZGVjbGFyZWQgYXQgdG9wIGxldmVsIG9yIGluc2lkZSBhIGJsb2NrJywKLSAgICAgICAg
U3RyaWN0RnVuY3Rpb25OYW1lOiAnRnVuY3Rpb24gbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJn
dW1lbnRzIGluIHN0cmljdCBtb2RlJywKLSAgICAgICAgU3RyaWN0TEhTQXNzaWdubWVudDogJ0Fz
c2lnbm1lbnQgdG8gZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1v
ZGUnLAotICAgICAgICBTdHJpY3RMSFNQb3N0Zml4OiAnUG9zdGZpeCBpbmNyZW1lbnQvZGVjcmVt
ZW50IG1heSBub3QgaGF2ZSBldmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2Rl
JywKLSAgICAgICAgU3RyaWN0TEhTUHJlZml4OiAnUHJlZml4IGluY3JlbWVudC9kZWNyZW1lbnQg
bWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAot
ICAgICAgICBTdHJpY3RNb2RlV2l0aDogJ1N0cmljdCBtb2RlIGNvZGUgbWF5IG5vdCBpbmNsdWRl
IGEgd2l0aCBzdGF0ZW1lbnQnLAotICAgICAgICBTdHJpY3RPY3RhbExpdGVyYWw6ICdPY3RhbCBs
aXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuJywKLSAgICAgICAgU3RyaWN0
UGFyYW1EdXBlOiAnU3RyaWN0IG1vZGUgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGR1cGxpY2F0ZSBw
YXJhbWV0ZXIgbmFtZXMnLAotICAgICAgICBTdHJpY3RQYXJhbU5hbWU6ICdQYXJhbWV0ZXIgbmFt
ZSBldmFsIG9yIGFyZ3VtZW50cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZScsCi0gICAg
ICAgIFN0cmljdFJlc2VydmVkV29yZDogJ1VzZSBvZiBmdXR1cmUgcmVzZXJ2ZWQgd29yZCBpbiBz
dHJpY3QgbW9kZScsCi0gICAgICAgIFN0cmljdFZhck5hbWU6ICdWYXJpYWJsZSBuYW1lIG1heSBu
b3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAotICAgICAgICBUZW1wbGF0
ZU9jdGFsTGl0ZXJhbDogJ09jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiB0ZW1wbGF0
ZSBzdHJpbmdzLicsCi0gICAgICAgIFVuZXhwZWN0ZWRFT1M6ICdVbmV4cGVjdGVkIGVuZCBvZiBp
bnB1dCcsCi0gICAgICAgIFVuZXhwZWN0ZWRJZGVudGlmaWVyOiAnVW5leHBlY3RlZCBpZGVudGlm
aWVyJywKLSAgICAgICAgVW5leHBlY3RlZE51bWJlcjogJ1VuZXhwZWN0ZWQgbnVtYmVyJywKLSAg
ICAgICAgVW5leHBlY3RlZFJlc2VydmVkOiAnVW5leHBlY3RlZCByZXNlcnZlZCB3b3JkJywKLSAg
ICAgICAgVW5leHBlY3RlZFN0cmluZzogJ1VuZXhwZWN0ZWQgc3RyaW5nJywKLSAgICAgICAgVW5l
eHBlY3RlZFRlbXBsYXRlOiAnVW5leHBlY3RlZCBxdWFzaSAlMCcsCi0gICAgICAgIFVuZXhwZWN0
ZWRUb2tlbjogJ1VuZXhwZWN0ZWQgdG9rZW4gJTAnLAotICAgICAgICBVbmV4cGVjdGVkVG9rZW5J
bGxlZ2FsOiAnVW5leHBlY3RlZCB0b2tlbiBJTExFR0FMJywKLSAgICAgICAgVW5rbm93bkxhYmVs
OiAnVW5kZWZpbmVkIGxhYmVsIFwnJTBcJycsCi0gICAgICAgIFVudGVybWluYXRlZFJlZ0V4cDog
J0ludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiBtaXNzaW5nIC8nCi0gICAgfTsKKwkidXNlIHN0
cmljdCI7CisJT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2
YWx1ZTogdHJ1ZSB9KTsKKwkvLyBFcnJvciBtZXNzYWdlcyBzaG91bGQgYmUgaWRlbnRpY2FsIHRv
IFY4LgorCWV4cG9ydHMuTWVzc2FnZXMgPSB7CisJICAgIEJhZEltcG9ydENhbGxBcml0eTogJ1Vu
ZXhwZWN0ZWQgdG9rZW4nLAorCSAgICBCYWRHZXR0ZXJBcml0eTogJ0dldHRlciBtdXN0IG5vdCBo
YXZlIGFueSBmb3JtYWwgcGFyYW1ldGVycycsCisJICAgIEJhZFNldHRlckFyaXR5OiAnU2V0dGVy
IG11c3QgaGF2ZSBleGFjdGx5IG9uZSBmb3JtYWwgcGFyYW1ldGVyJywKKwkgICAgQmFkU2V0dGVy
UmVzdFBhcmFtZXRlcjogJ1NldHRlciBmdW5jdGlvbiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIHJl
c3QgcGFyYW1ldGVyJywKKwkgICAgQ29uc3RydWN0b3JJc0FzeW5jOiAnQ2xhc3MgY29uc3RydWN0
b3IgbWF5IG5vdCBiZSBhbiBhc3luYyBtZXRob2QnLAorCSAgICBDb25zdHJ1Y3RvclNwZWNpYWxN
ZXRob2Q6ICdDbGFzcyBjb25zdHJ1Y3RvciBtYXkgbm90IGJlIGFuIGFjY2Vzc29yJywKKwkgICAg
RGVjbGFyYXRpb25NaXNzaW5nSW5pdGlhbGl6ZXI6ICdNaXNzaW5nIGluaXRpYWxpemVyIGluICUw
IGRlY2xhcmF0aW9uJywKKwkgICAgRGVmYXVsdFJlc3RQYXJhbWV0ZXI6ICdVbmV4cGVjdGVkIHRv
a2VuID0nLAorCSAgICBEZWZhdWx0UmVzdFByb3BlcnR5OiAnVW5leHBlY3RlZCB0b2tlbiA9JywK
KwkgICAgRHVwbGljYXRlQmluZGluZzogJ0R1cGxpY2F0ZSBiaW5kaW5nICUwJywKKwkgICAgRHVw
bGljYXRlQ29uc3RydWN0b3I6ICdBIGNsYXNzIG1heSBvbmx5IGhhdmUgb25lIGNvbnN0cnVjdG9y
JywKKwkgICAgRHVwbGljYXRlUHJvdG9Qcm9wZXJ0eTogJ0R1cGxpY2F0ZSBfX3Byb3RvX18gZmll
bGRzIGFyZSBub3QgYWxsb3dlZCBpbiBvYmplY3QgbGl0ZXJhbHMnLAorCSAgICBGb3JJbk9mTG9v
cEluaXRpYWxpemVyOiAnJTAgbG9vcCB2YXJpYWJsZSBkZWNsYXJhdGlvbiBtYXkgbm90IGhhdmUg
YW4gaW5pdGlhbGl6ZXInLAorCSAgICBHZW5lcmF0b3JJbkxlZ2FjeUNvbnRleHQ6ICdHZW5lcmF0
b3IgZGVjbGFyYXRpb25zIGFyZSBub3QgYWxsb3dlZCBpbiBsZWdhY3kgY29udGV4dHMnLAorCSAg
ICBJbGxlZ2FsQnJlYWs6ICdJbGxlZ2FsIGJyZWFrIHN0YXRlbWVudCcsCisJICAgIElsbGVnYWxD
b250aW51ZTogJ0lsbGVnYWwgY29udGludWUgc3RhdGVtZW50JywKKwkgICAgSWxsZWdhbEV4cG9y
dERlY2xhcmF0aW9uOiAnVW5leHBlY3RlZCB0b2tlbicsCisJICAgIElsbGVnYWxJbXBvcnREZWNs
YXJhdGlvbjogJ1VuZXhwZWN0ZWQgdG9rZW4nLAorCSAgICBJbGxlZ2FsTGFuZ3VhZ2VNb2RlRGly
ZWN0aXZlOiAnSWxsZWdhbCBcJ3VzZSBzdHJpY3RcJyBkaXJlY3RpdmUgaW4gZnVuY3Rpb24gd2l0
aCBub24tc2ltcGxlIHBhcmFtZXRlciBsaXN0JywKKwkgICAgSWxsZWdhbFJldHVybjogJ0lsbGVn
YWwgcmV0dXJuIHN0YXRlbWVudCcsCisJICAgIEludmFsaWRFc2NhcGVkUmVzZXJ2ZWRXb3JkOiAn
S2V5d29yZCBtdXN0IG5vdCBjb250YWluIGVzY2FwZWQgY2hhcmFjdGVycycsCisJICAgIEludmFs
aWRIZXhFc2NhcGVTZXF1ZW5jZTogJ0ludmFsaWQgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNl
JywKKwkgICAgSW52YWxpZExIU0luQXNzaWdubWVudDogJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUg
aW4gYXNzaWdubWVudCcsCisJICAgIEludmFsaWRMSFNJbkZvckluOiAnSW52YWxpZCBsZWZ0LWhh
bmQgc2lkZSBpbiBmb3ItaW4nLAorCSAgICBJbnZhbGlkTEhTSW5Gb3JMb29wOiAnSW52YWxpZCBs
ZWZ0LWhhbmQgc2lkZSBpbiBmb3ItbG9vcCcsCisJICAgIEludmFsaWRNb2R1bGVTcGVjaWZpZXI6
ICdVbmV4cGVjdGVkIHRva2VuJywKKwkgICAgSW52YWxpZFJlZ0V4cDogJ0ludmFsaWQgcmVndWxh
ciBleHByZXNzaW9uJywKKwkgICAgTGV0SW5MZXhpY2FsQmluZGluZzogJ2xldCBpcyBkaXNhbGxv
d2VkIGFzIGEgbGV4aWNhbGx5IGJvdW5kIG5hbWUnLAorCSAgICBNaXNzaW5nRnJvbUNsYXVzZTog
J1VuZXhwZWN0ZWQgdG9rZW4nLAorCSAgICBNdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2g6ICdNb3Jl
IHRoYW4gb25lIGRlZmF1bHQgY2xhdXNlIGluIHN3aXRjaCBzdGF0ZW1lbnQnLAorCSAgICBOZXds
aW5lQWZ0ZXJUaHJvdzogJ0lsbGVnYWwgbmV3bGluZSBhZnRlciB0aHJvdycsCisJICAgIE5vQXNB
ZnRlckltcG9ydE5hbWVzcGFjZTogJ1VuZXhwZWN0ZWQgdG9rZW4nLAorCSAgICBOb0NhdGNoT3JG
aW5hbGx5OiAnTWlzc2luZyBjYXRjaCBvciBmaW5hbGx5IGFmdGVyIHRyeScsCisJICAgIFBhcmFt
ZXRlckFmdGVyUmVzdFBhcmFtZXRlcjogJ1Jlc3QgcGFyYW1ldGVyIG11c3QgYmUgbGFzdCBmb3Jt
YWwgcGFyYW1ldGVyJywKKwkgICAgUHJvcGVydHlBZnRlclJlc3RQcm9wZXJ0eTogJ1VuZXhwZWN0
ZWQgdG9rZW4nLAorCSAgICBSZWRlY2xhcmF0aW9uOiAnJTAgXCclMVwnIGhhcyBhbHJlYWR5IGJl
ZW4gZGVjbGFyZWQnLAorCSAgICBTdGF0aWNQcm90b3R5cGU6ICdDbGFzc2VzIG1heSBub3QgaGF2
ZSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgcHJvdG90eXBlJywKKwkgICAgU3RyaWN0Q2F0Y2hWYXJp
YWJsZTogJ0NhdGNoIHZhcmlhYmxlIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3Ry
aWN0IG1vZGUnLAorCSAgICBTdHJpY3REZWxldGU6ICdEZWxldGUgb2YgYW4gdW5xdWFsaWZpZWQg
aWRlbnRpZmllciBpbiBzdHJpY3QgbW9kZS4nLAorCSAgICBTdHJpY3RGdW5jdGlvbjogJ0luIHN0
cmljdCBtb2RlIGNvZGUsIGZ1bmN0aW9ucyBjYW4gb25seSBiZSBkZWNsYXJlZCBhdCB0b3AgbGV2
ZWwgb3IgaW5zaWRlIGEgYmxvY2snLAorCSAgICBTdHJpY3RGdW5jdGlvbk5hbWU6ICdGdW5jdGlv
biBuYW1lIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorCSAg
ICBTdHJpY3RMSFNBc3NpZ25tZW50OiAnQXNzaWdubWVudCB0byBldmFsIG9yIGFyZ3VtZW50cyBp
cyBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZScsCisJICAgIFN0cmljdExIU1Bvc3RmaXg6ICdQ
b3N0Zml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRz
IG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorCSAgICBTdHJpY3RMSFNQcmVmaXg6ICdQcmVmaXgg
aW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFu
ZCBpbiBzdHJpY3QgbW9kZScsCisJICAgIFN0cmljdE1vZGVXaXRoOiAnU3RyaWN0IG1vZGUgY29k
ZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRlbWVudCcsCisJICAgIFN0cmljdE9jdGFsTGl0
ZXJhbDogJ09jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZS4nLAor
CSAgICBTdHJpY3RQYXJhbUR1cGU6ICdTdHJpY3QgbW9kZSBmdW5jdGlvbiBtYXkgbm90IGhhdmUg
ZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcycsCisJICAgIFN0cmljdFBhcmFtTmFtZTogJ1BhcmFt
ZXRlciBuYW1lIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2Rl
JywKKwkgICAgU3RyaWN0UmVzZXJ2ZWRXb3JkOiAnVXNlIG9mIGZ1dHVyZSByZXNlcnZlZCB3b3Jk
IGluIHN0cmljdCBtb2RlJywKKwkgICAgU3RyaWN0VmFyTmFtZTogJ1ZhcmlhYmxlIG5hbWUgbWF5
IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZScsCisJICAgIFRlbXBsYXRl
T2N0YWxMaXRlcmFsOiAnT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHRlbXBsYXRl
IHN0cmluZ3MuJywKKwkgICAgVW5leHBlY3RlZEVPUzogJ1VuZXhwZWN0ZWQgZW5kIG9mIGlucHV0
JywKKwkgICAgVW5leHBlY3RlZElkZW50aWZpZXI6ICdVbmV4cGVjdGVkIGlkZW50aWZpZXInLAor
CSAgICBVbmV4cGVjdGVkTnVtYmVyOiAnVW5leHBlY3RlZCBudW1iZXInLAorCSAgICBVbmV4cGVj
dGVkUmVzZXJ2ZWQ6ICdVbmV4cGVjdGVkIHJlc2VydmVkIHdvcmQnLAorCSAgICBVbmV4cGVjdGVk
U3RyaW5nOiAnVW5leHBlY3RlZCBzdHJpbmcnLAorCSAgICBVbmV4cGVjdGVkVGVtcGxhdGU6ICdV
bmV4cGVjdGVkIHF1YXNpICUwJywKKwkgICAgVW5leHBlY3RlZFRva2VuOiAnVW5leHBlY3RlZCB0
b2tlbiAlMCcsCisJICAgIFVuZXhwZWN0ZWRUb2tlbklsbGVnYWw6ICdVbmV4cGVjdGVkIHRva2Vu
IElMTEVHQUwnLAorCSAgICBVbmtub3duTGFiZWw6ICdVbmRlZmluZWQgbGFiZWwgXCclMFwnJywK
KwkgICAgVW50ZXJtaW5hdGVkUmVnRXhwOiAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IG1p
c3NpbmcgLycKKwl9OwogCiAKIC8qKiovIH0sCiAvKiAxMiAqLwogLyoqKi8gZnVuY3Rpb24obW9k
dWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiAKLSAgICAidXNlIHN0cmljdCI7
Ci0gICAgdmFyIGFzc2VydF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTsKLSAgICB2YXIgY2hh
cmFjdGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOwotICAgIHZhciBtZXNzYWdlc18xID0g
X193ZWJwYWNrX3JlcXVpcmVfXygxMSk7Ci0gICAgZnVuY3Rpb24gaGV4VmFsdWUoY2gpIHsKLSAg
ICAgICAgcmV0dXJuICcwMTIzNDU2Nzg5YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkp
OwotICAgIH0KLSAgICBmdW5jdGlvbiBvY3RhbFZhbHVlKGNoKSB7Ci0gICAgICAgIHJldHVybiAn
MDEyMzQ1NjcnLmluZGV4T2YoY2gpOwotICAgIH0KLSAgICB2YXIgU2Nhbm5lciA9IChmdW5jdGlv
biAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFNjYW5uZXIoY29kZSwgaGFuZGxlcikgewotICAgICAg
ICAgICAgdGhpcy5zb3VyY2UgPSBjb2RlOwotICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIg
PSBoYW5kbGVyOwotICAgICAgICAgICAgdGhpcy50cmFja0NvbW1lbnQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIHRoaXMubGVuZ3RoID0gY29kZS5sZW5ndGg7Ci0gICAgICAgICAgICB0aGlzLmluZGV4
ID0gMDsKLSAgICAgICAgICAgIHRoaXMubGluZU51bWJlciA9IChjb2RlLmxlbmd0aCA+IDApID8g
MSA6IDA7Ci0gICAgICAgICAgICB0aGlzLmxpbmVTdGFydCA9IDA7Ci0gICAgICAgICAgICB0aGlz
LmN1cmx5U3RhY2sgPSBbXTsKLSAgICAgICAgfQotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5z
YXZlU3RhdGUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAg
ICAgICAgIGluZGV4OiB0aGlzLmluZGV4LAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRo
aXMubGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0
Ci0gICAgICAgICAgICB9OwotICAgICAgICB9OwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5y
ZXN0b3JlU3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUpIHsKLSAgICAgICAgICAgIHRoaXMuaW5kZXgg
PSBzdGF0ZS5pbmRleDsKLSAgICAgICAgICAgIHRoaXMubGluZU51bWJlciA9IHN0YXRlLmxpbmVO
dW1iZXI7Ci0gICAgICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDsKLSAg
ICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuZW9mID0gZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPj0gdGhpcy5sZW5ndGg7Ci0gICAgICAgIH07
Ci0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnRocm93VW5leHBlY3RlZFRva2VuID0gZnVuY3Rp
b24gKG1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlID09PSB2b2lkIDApIHsgbWVz
c2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuSWxsZWdhbDsgfQotICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnRocm93RXJyb3IodGhpcy5pbmRleCwg
dGhpcy5saW5lTnVtYmVyLCB0aGlzLmluZGV4IC0gdGhpcy5saW5lU3RhcnQgKyAxLCBtZXNzYWdl
KTsKLSAgICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUudG9sZXJhdGVVbmV4cGVj
dGVkVG9rZW4gPSBmdW5jdGlvbiAobWVzc2FnZSkgewotICAgICAgICAgICAgaWYgKG1lc3NhZ2Ug
PT09IHZvaWQgMCkgeyBtZXNzYWdlID0gbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9r
ZW5JbGxlZ2FsOyB9Ci0gICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlci50b2xlcmF0ZUVycm9y
KHRoaXMuaW5kZXgsIHRoaXMubGluZU51bWJlciwgdGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0
ICsgMSwgbWVzc2FnZSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRo
dWIuaW8vZWNtYTI2Mi8jc2VjLWNvbW1lbnRzCi0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnNr
aXBTaW5nbGVMaW5lQ29tbWVudCA9IGZ1bmN0aW9uIChvZmZzZXQpIHsKLSAgICAgICAgICAgIHZh
ciBjb21tZW50cyA9IFtdOwotICAgICAgICAgICAgdmFyIHN0YXJ0LCBsb2M7Ci0gICAgICAgICAg
ICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHsKLSAgICAgICAgICAgICAgICBjb21tZW50cyA9IFtd
OwotICAgICAgICAgICAgICAgIHN0YXJ0ID0gdGhpcy5pbmRleCAtIG9mZnNldDsKLSAgICAgICAg
ICAgICAgICBsb2MgPSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb2x1bW46IHRoaXMuaW5kZXggLSB0aGlzLmxpbmVTdGFydCAtIG9mZnNldAotICAgICAg
ICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBlbmQ6IHt9Ci0gICAgICAgICAg
ICAgICAgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkg
ewotICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5p
bmRleCk7Ci0gICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OwotICAgICAgICAgICAgICAgIGlm
IChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihjaCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBsb2MuZW5kID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMu
bGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuaW5k
ZXggLSB0aGlzLmxpbmVTdGFydCAtIDEKLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXVsdGlMaW5lOiBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlj
ZTogW3N0YXJ0ICsgb2Zmc2V0LCB0aGlzLmluZGV4IC0gMV0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmFuZ2U6IFtzdGFydCwgdGhpcy5pbmRleCAtIDFdLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvYzogbG9jCi0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgICAgICAgICAgICAgY29tbWVudHMucHVzaChlbnRyeSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAxMyAmJiB0aGlzLnNvdXJjZS5j
aGFyQ29kZUF0KHRoaXMuaW5kZXgpID09PSAxMCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Kyt0aGlzLmluZGV4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICsrdGhpcy5saW5lTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVTdGFydCA9
IHRoaXMuaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21tZW50czsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGhpcy50cmFja0Nv
bW1lbnQpIHsKLSAgICAgICAgICAgICAgICBsb2MuZW5kID0gewotICAgICAgICAgICAgICAgICAg
ICBsaW5lOiB0aGlzLmxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhp
cy5pbmRleCAtIHRoaXMubGluZVN0YXJ0Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
ICAgICB2YXIgZW50cnkgPSB7Ci0gICAgICAgICAgICAgICAgICAgIG11bHRpTGluZTogZmFsc2Us
Ci0gICAgICAgICAgICAgICAgICAgIHNsaWNlOiBbc3RhcnQgKyBvZmZzZXQsIHRoaXMuaW5kZXhd
LAotICAgICAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCB0aGlzLmluZGV4XSwKLSAgICAg
ICAgICAgICAgICAgICAgbG9jOiBsb2MKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAg
ICAgIGNvbW1lbnRzLnB1c2goZW50cnkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIGNvbW1lbnRzOwotICAgICAgICB9OwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5za2lw
TXVsdGlMaW5lQ29tbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBjb21tZW50
cyA9IFtdOwotICAgICAgICAgICAgdmFyIHN0YXJ0LCBsb2M7Ci0gICAgICAgICAgICBpZiAodGhp
cy50cmFja0NvbW1lbnQpIHsKLSAgICAgICAgICAgICAgICBjb21tZW50cyA9IFtdOwotICAgICAg
ICAgICAgICAgIHN0YXJ0ID0gdGhpcy5pbmRleCAtIDI7Ci0gICAgICAgICAgICAgICAgbG9jID0g
ewotICAgICAgICAgICAgICAgICAgICBzdGFydDogewotICAgICAgICAgICAgICAgICAgICAgICAg
bGluZTogdGhpcy5saW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0
aGlzLmluZGV4IC0gdGhpcy5saW5lU3RhcnQgLSAyCi0gICAgICAgICAgICAgICAgICAgIH0sCi0g
ICAgICAgICAgICAgICAgICAgIGVuZDoge30KLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTsKLSAgICAgICAgICAg
ICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwRCAmJiB0aGlzLnNvdXJjZS5jaGFyQ29k
ZUF0KHRoaXMuaW5kZXggKyAxKSA9PT0gMHgwQSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Kyt0aGlzLmluZGV4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICsrdGhpcy5saW5lTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5pbmRleDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT09IDB4MkEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gQmxvY2sgY29tbWVudCBlbmRzIHdpdGggJyovJy4KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIDEpID09
PSAweDJGKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2MuZW5kID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lOiB0aGlzLmxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbHVtbjogdGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpTGluZTogdHJ1ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2U6IFtzdGFydCArIDIsIHRoaXMuaW5kZXgg
LSAyXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgdGhp
cy5pbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYzogbG9jCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b21tZW50cy5wdXNoKGVudHJ5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjb21tZW50czsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gUmFuIG9mZiB0
aGUgZW5kIG9mIHRoZSBmaWxlIC0gdGhlIHdob2xlIHRoaW5nIGlzIGEgY29tbWVudAotICAgICAg
ICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7Ci0gICAgICAgICAgICAgICAgbG9jLmVuZCA9
IHsKLSAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5saW5lTnVtYmVyLAotICAgICAgICAg
ICAgICAgICAgICBjb2x1bW46IHRoaXMuaW5kZXggLSB0aGlzLmxpbmVTdGFydAotICAgICAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gewotICAgICAgICAgICAgICAg
ICAgICBtdWx0aUxpbmU6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgIHNsaWNlOiBbc3RhcnQg
KyAyLCB0aGlzLmluZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgdGhp
cy5pbmRleF0sCi0gICAgICAgICAgICAgICAgICAgIGxvYzogbG9jCi0gICAgICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgICAgICBjb21tZW50cy5wdXNoKGVudHJ5KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAg
IHJldHVybiBjb21tZW50czsKLSAgICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUu
c2NhbkNvbW1lbnRzID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGNvbW1lbnRzOwot
ICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7Ci0gICAgICAgICAgICAgICAgY29t
bWVudHMgPSBbXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBzdGFydCA9ICh0aGlz
LmluZGV4ID09PSAwKTsKLSAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgewotICAgICAg
ICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc1doaXRlU3BhY2UoY2gp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRl
cm1pbmF0b3IoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHRoaXMuc291cmNlLmNoYXJDb2RlQXQo
dGhpcy5pbmRleCkgPT09IDB4MEEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5p
bmRleDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICArK3RoaXMu
bGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmlu
ZGV4OwotICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAweDJGKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5pbmRleCArPSAyOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQg
PSB0aGlzLnNraXBTaW5nbGVMaW5lQ29tbWVudCgyKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLnRyYWNrQ29tbWVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bW1lbnRzID0gY29tbWVudHMuY29uY2F0KGNvbW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAweDJBKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMuc2tpcE11bHRpTGluZUNvbW1lbnQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbW1lbnRzID0gY29tbWVudHMuY29uY2F0KGNvbW1lbnQpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAoc3RhcnQgJiYgY2ggPT09IDB4MkQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVSswMDNF
IGlzICc+JwotICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuc291cmNlLmNoYXJDb2RlQXQo
dGhpcy5pbmRleCArIDEpID09PSAweDJEKSAmJiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlz
LmluZGV4ICsgMikgPT09IDB4M0UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyAnLS0+
JyBpcyBhIHNpbmdsZS1saW5lIGNvbW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
aW5kZXggKz0gMzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5z
a2lwU2luZ2xlTGluZUNvbW1lbnQoMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhp
cy50cmFja0NvbW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cyA9
IGNvbW1lbnRzLmNvbmNhdChjb21tZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAweDNDKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZS5zbGljZSh0aGlzLmluZGV4ICsgMSwgdGhpcy5p
bmRleCArIDQpID09PSAnIS0tJykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRl
eCArPSA0OyAvLyBgPCEtLWAKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0g
dGhpcy5za2lwU2luZ2xlTGluZUNvbW1lbnQoNCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGhpcy50cmFja0NvbW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21t
ZW50cyA9IGNvbW1lbnRzLmNvbmNhdChjb21tZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gY29tbWVudHM7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRo
dWIuaW8vZWNtYTI2Mi8jc2VjLWZ1dHVyZS1yZXNlcnZlZC13b3JkcwotICAgICAgICBTY2FubmVy
LnByb3RvdHlwZS5pc0Z1dHVyZVJlc2VydmVkV29yZCA9IGZ1bmN0aW9uIChpZCkgewotICAgICAg
ICAgICAgc3dpdGNoIChpZCkgewotICAgICAgICAgICAgICAgIGNhc2UgJ2VudW0nOgotICAgICAg
ICAgICAgICAgIGNhc2UgJ2V4cG9ydCc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnaW1wb3J0JzoK
LSAgICAgICAgICAgICAgICBjYXNlICdzdXBlcic6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5w
cm90b3R5cGUuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkID0gZnVuY3Rpb24gKGlkKSB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAnaW1wbGVtZW50cyc6
Ci0gICAgICAgICAgICAgICAgY2FzZSAnaW50ZXJmYWNlJzoKLSAgICAgICAgICAgICAgICBjYXNl
ICdwYWNrYWdlJzoKLSAgICAgICAgICAgICAgICBjYXNlICdwcml2YXRlJzoKLSAgICAgICAgICAg
ICAgICBjYXNlICdwcm90ZWN0ZWQnOgotICAgICAgICAgICAgICAgIGNhc2UgJ3B1YmxpYyc6Ci0g
ICAgICAgICAgICAgICAgY2FzZSAnc3RhdGljJzoKLSAgICAgICAgICAgICAgICBjYXNlICd5aWVs
ZCc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnbGV0JzoKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICBTY2FubmVy
LnByb3RvdHlwZS5pc1Jlc3RyaWN0ZWRXb3JkID0gZnVuY3Rpb24gKGlkKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gaWQgPT09ICdldmFsJyB8fCBpZCA9PT0gJ2FyZ3VtZW50cyc7Ci0gICAgICAgIH07
Ci0gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWtleXdvcmRz
Ci0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLmlzS2V5d29yZCA9IGZ1bmN0aW9uIChpZCkgewot
ICAgICAgICAgICAgc3dpdGNoIChpZC5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdpZicpIHx8IChpZCA9PT0gJ2lu
JykgfHwgKGlkID09PSAnZG8nKTsKLSAgICAgICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiAoaWQgPT09ICd2YXInKSB8fCAoaWQgPT09ICdmb3InKSB8fCAoaWQg
PT09ICduZXcnKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgKGlkID09PSAndHJ5JykgfHwg
KGlkID09PSAnbGV0Jyk7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKGlkID09PSAndGhpcycpIHx8IChpZCA9PT0gJ2Vsc2UnKSB8fCAoaWQgPT09
ICdjYXNlJykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIChpZCA9PT0gJ3ZvaWQnKSB8fCAo
aWQgPT09ICd3aXRoJykgfHwgKGlkID09PSAnZW51bScpOwotICAgICAgICAgICAgICAgIGNhc2Ug
NToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3doaWxlJykgfHwgKGlkID09
PSAnYnJlYWsnKSB8fCAoaWQgPT09ICdjYXRjaCcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAoaWQgPT09ICd0aHJvdycpIHx8IChpZCA9PT0gJ2NvbnN0JykgfHwgKGlkID09PSAneWllbGQn
KSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgKGlkID09PSAnY2xhc3MnKSB8fCAoaWQgPT09
ICdzdXBlcicpOwotICAgICAgICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIChpZCA9PT0gJ3JldHVybicpIHx8IChpZCA9PT0gJ3R5cGVvZicpIHx8IChpZCA9PT0g
J2RlbGV0ZScpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoaWQgPT09ICdzd2l0Y2gnKSB8
fCAoaWQgPT09ICdleHBvcnQnKSB8fCAoaWQgPT09ICdpbXBvcnQnKTsKLSAgICAgICAgICAgICAg
ICBjYXNlIDc6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdkZWZhdWx0Jykg
fHwgKGlkID09PSAnZmluYWxseScpIHx8IChpZCA9PT0gJ2V4dGVuZHMnKTsKLSAgICAgICAgICAg
ICAgICBjYXNlIDg6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdmdW5jdGlv
bicpIHx8IChpZCA9PT0gJ2NvbnRpbnVlJykgfHwgKGlkID09PSAnZGVidWdnZXInKTsKLSAgICAg
ICAgICAgICAgICBjYXNlIDEwOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSAn
aW5zdGFuY2VvZicpOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgU2Nh
bm5lci5wcm90b3R5cGUuY29kZVBvaW50QXQgPSBmdW5jdGlvbiAoaSkgewotICAgICAgICAgICAg
dmFyIGNwID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdChpKTsKLSAgICAgICAgICAgIGlmIChjcCA+
PSAweEQ4MDAgJiYgY3AgPD0gMHhEQkZGKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNlY29uZCA9
IHRoaXMuc291cmNlLmNoYXJDb2RlQXQoaSArIDEpOwotICAgICAgICAgICAgICAgIGlmIChzZWNv
bmQgPj0gMHhEQzAwICYmIHNlY29uZCA8PSAweERGRkYpIHsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIGZpcnN0ID0gY3A7Ci0gICAgICAgICAgICAgICAgICAgIGNwID0gKGZpcnN0IC0gMHhEODAw
KSAqIDB4NDAwICsgc2Vjb25kIC0gMHhEQzAwICsgMHgxMDAwMDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gY3A7Ci0gICAgICAgIH07Ci0gICAg
ICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5IZXhFc2NhcGUgPSBmdW5jdGlvbiAocHJlZml4KSB7
Ci0gICAgICAgICAgICB2YXIgbGVuID0gKHByZWZpeCA9PT0gJ3UnKSA/IDQgOiAyOwotICAgICAg
ICAgICAgdmFyIGNvZGUgPSAwOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47
ICsraSkgewotICAgICAgICAgICAgICAgIGlmICghdGhpcy5lb2YoKSAmJiBjaGFyYWN0ZXJfMS5D
aGFyYWN0ZXIuaXNIZXhEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkg
ewotICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgaGV4VmFsdWUodGhpcy5z
b3VyY2VbdGhpcy5pbmRleCsrXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29k
ZShjb2RlKTsKLSAgICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblVuaWNv
ZGVDb2RlUG9pbnRFc2NhcGUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgY2ggPSB0
aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKLSAgICAgICAgICAgIHZhciBjb2RlID0gMDsKLSAgICAg
ICAgICAgIC8vIEF0IGxlYXN0LCBvbmUgaGV4IGRpZ2l0IGlzIHJlcXVpcmVkLgotICAgICAgICAg
ICAgaWYgKGNoID09PSAnfScpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3Rl
ZFRva2VuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkp
IHsKLSAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNIZXhEaWdpdChjaC5jaGFy
Q29kZUF0KDApKSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiAxNiArIGhleFZhbHVlKGNoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb2RlID4gMHgxMEZGRkYgfHwgY2ggIT09ICd9
JykgewotICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuZnJvbUNv
ZGVQb2ludChjb2RlKTsKLSAgICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuZ2V0
SWRlbnRpZmllciA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMu
aW5kZXgrKzsKLSAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgewotICAgICAgICAgICAg
ICAgIHZhciBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGNoID09PSAweDVDKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEJsYWNr
c2xhc2ggKFUrMDA1QykgbWFya3MgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuCi0gICAgICAgICAg
ICAgICAgICAgIHRoaXMuaW5kZXggPSBzdGFydDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZ2V0Q29tcGxleElkZW50aWZpZXIoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAoY2ggPj0gMHhEODAwICYmIGNoIDwgMHhERkZGKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIE5lZWQgdG8gaGFuZGxlIHN1cnJvZ2F0ZSBwYWlycy4KLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5pbmRleCA9IHN0YXJ0OwotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5nZXRDb21wbGV4SWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQoY2gp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLnNv
dXJjZS5zbGljZShzdGFydCwgdGhpcy5pbmRleCk7Ci0gICAgICAgIH07Ci0gICAgICAgIFNjYW5u
ZXIucHJvdG90eXBlLmdldENvbXBsZXhJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgdmFyIGNwID0gdGhpcy5jb2RlUG9pbnRBdCh0aGlzLmluZGV4KTsKLSAgICAgICAgICAg
IHZhciBpZCA9IGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5mcm9tQ29kZVBvaW50KGNwKTsKLSAgICAg
ICAgICAgIHRoaXMuaW5kZXggKz0gaWQubGVuZ3RoOwotICAgICAgICAgICAgLy8gJ1x1JyAoVSsw
MDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCi0gICAgICAgICAgICB2
YXIgY2g7Ci0gICAgICAgICAgICBpZiAoY3AgPT09IDB4NUMpIHsKLSAgICAgICAgICAgICAgICBp
ZiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSAhPT0gMHg3NSkgewotICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAgICBpZiAo
dGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09ICd7JykgewotICAgICAgICAgICAgICAgICAgICAr
K3RoaXMuaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zY2FuVW5pY29kZUNv
ZGVQb2ludEVzY2FwZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNjYW5IZXhFc2NhcGUoJ3UnKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSBudWxsIHx8IGNoID09PSAnXFwnIHx8ICFjaGFy
YWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQoY2guY2hhckNvZGVBdCgwKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZCA9IGNoOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7
Ci0gICAgICAgICAgICAgICAgY3AgPSB0aGlzLmNvZGVQb2ludEF0KHRoaXMuaW5kZXgpOwotICAg
ICAgICAgICAgICAgIGlmICghY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQo
Y3ApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBjaCA9IGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5mcm9tQ29kZVBvaW50KGNw
KTsKLSAgICAgICAgICAgICAgICBpZCArPSBjaDsKLSAgICAgICAgICAgICAgICB0aGlzLmluZGV4
ICs9IGNoLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAvLyAnXHUnIChVKzAwNUMsIFUrMDA3NSkg
ZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KLSAgICAgICAgICAgICAgICBpZiAoY3AgPT09
IDB4NUMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHIoMCwgaWQubGVuZ3Ro
IC0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRo
aXMuaW5kZXgpICE9PSAweDc1KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgKyt0aGlzLmluZGV4OwotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2Vb
dGhpcy5pbmRleF0gPT09ICd7JykgewotICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmlu
ZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNjYW5Vbmljb2RlQ29kZVBv
aW50RXNjYXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc2NhbkhleEVzY2FwZSgn
dScpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSBudWxsIHx8IGNoID09PSAn
XFwnIHx8ICFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29k
ZUF0KDApKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVj
dGVkVG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBpZCArPSBjaDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gaWQ7Ci0gICAgICAgIH07Ci0gICAgICAg
IFNjYW5uZXIucHJvdG90eXBlLm9jdGFsVG9EZWNpbWFsID0gZnVuY3Rpb24gKGNoKSB7Ci0gICAg
ICAgICAgICAvLyBcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVlbmNlCi0gICAgICAgICAgICB2
YXIgb2N0YWwgPSAoY2ggIT09ICcwJyk7Ci0gICAgICAgICAgICB2YXIgY29kZSA9IG9jdGFsVmFs
dWUoY2gpOwotICAgICAgICAgICAgaWYgKCF0aGlzLmVvZigpICYmIGNoYXJhY3Rlcl8xLkNoYXJh
Y3Rlci5pc09jdGFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsK
LSAgICAgICAgICAgICAgICBvY3RhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29kZSA9IGNv
ZGUgKiA4ICsgb2N0YWxWYWx1ZSh0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdKTsKLSAgICAgICAg
ICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0cwot
ICAgICAgICAgICAgICAgIC8vIHdpdGggMCwgMSwgMiwgMwotICAgICAgICAgICAgICAgIGlmICgn
MDEyMycuaW5kZXhPZihjaCkgPj0gMCAmJiAhdGhpcy5lb2YoKSAmJiBjaGFyYWN0ZXJfMS5DaGFy
YWN0ZXIuaXNPY3RhbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArIG9jdGFsVmFsdWUodGhpcy5z
b3VyY2VbdGhpcy5pbmRleCsrXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBjb2RlOiBjb2RlLAotICAgICAg
ICAgICAgICAgIG9jdGFsOiBvY3RhbAotICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAg
ICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbmFtZXMtYW5kLWtleXdv
cmRzCi0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5JZGVudGlmaWVyID0gZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgdmFyIHR5cGU7Ci0gICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlz
LmluZGV4OwotICAgICAgICAgICAgLy8gQmFja3NsYXNoIChVKzAwNUMpIHN0YXJ0cyBhbiBlc2Nh
cGVkIGNoYXJhY3Rlci4KLSAgICAgICAgICAgIHZhciBpZCA9ICh0aGlzLnNvdXJjZS5jaGFyQ29k
ZUF0KHN0YXJ0KSA9PT0gMHg1QykgPyB0aGlzLmdldENvbXBsZXhJZGVudGlmaWVyKCkgOiB0aGlz
LmdldElkZW50aWZpZXIoKTsKLSAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGtleXdvcmQgb3Ig
bGl0ZXJhbCB3aXRoIG9ubHkgb25lIGNoYXJhY3Rlci4KLSAgICAgICAgICAgIC8vIFRodXMsIGl0
IG11c3QgYmUgYW4gaWRlbnRpZmllci4KLSAgICAgICAgICAgIGlmIChpZC5sZW5ndGggPT09IDEp
IHsKLSAgICAgICAgICAgICAgICB0eXBlID0gMyAvKiBJZGVudGlmaWVyICovOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pc0tleXdvcmQoaWQpKSB7Ci0gICAgICAg
ICAgICAgICAgdHlwZSA9IDQgLyogS2V5d29yZCAqLzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgaWYgKGlkID09PSAnbnVsbCcpIHsKLSAgICAgICAgICAgICAgICB0eXBlID0gNSAv
KiBOdWxsTGl0ZXJhbCAqLzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGlk
ID09PSAndHJ1ZScgfHwgaWQgPT09ICdmYWxzZScpIHsKLSAgICAgICAgICAgICAgICB0eXBlID0g
MSAvKiBCb29sZWFuTGl0ZXJhbCAqLzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIHR5cGUgPSAzIC8qIElkZW50aWZpZXIgKi87Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAodHlwZSAhPT0gMyAvKiBJZGVudGlmaWVyICovICYmIChzdGFy
dCArIGlkLmxlbmd0aCAhPT0gdGhpcy5pbmRleCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgcmVz
dG9yZSA9IHRoaXMuaW5kZXg7Ci0gICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHN0YXJ0Owot
ICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5N
ZXNzYWdlcy5JbnZhbGlkRXNjYXBlZFJlc2VydmVkV29yZCk7Ci0gICAgICAgICAgICAgICAgdGhp
cy5pbmRleCA9IHJlc3RvcmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCi0gICAgICAgICAgICAgICAgdmFsdWU6IGlkLAot
ICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlciwKLSAgICAgICAgICAg
ICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0LAotICAgICAgICAgICAgICAgIHN0YXJ0OiBz
dGFydCwKLSAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKLSAgICAgICAgICAgIH07Ci0g
ICAgICAgIH07Ci0gICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2Vj
LXB1bmN0dWF0b3JzCi0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5QdW5jdHVhdG9yID0g
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDsKLSAgICAg
ICAgICAgIC8vIENoZWNrIGZvciBtb3N0IGNvbW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0
b3JzLgotICAgICAgICAgICAgdmFyIHN0ciA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOwotICAg
ICAgICAgICAgc3dpdGNoIChzdHIpIHsKLSAgICAgICAgICAgICAgICBjYXNlICcoJzoKLSAgICAg
ICAgICAgICAgICBjYXNlICd7JzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJ3sn
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cmx5U3RhY2sucHVzaCgneycpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnLic6Ci0g
ICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAnLicgJiYgdGhpcy5zb3VyY2VbdGhpcy5pbmRl
eCArIDFdID09PSAnLicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwcmVhZCBvcGVy
YXRvcjogLi4uCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzdHIgPSAnLi4uJzsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICd9JzoKLSAg
ICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OwotICAgICAgICAgICAgICAgICAgICB0aGlz
LmN1cmx5U3RhY2sucG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgJyknOgotICAgICAgICAgICAgICAgIGNhc2UgJzsnOgotICAgICAgICAgICAg
ICAgIGNhc2UgJywnOgotICAgICAgICAgICAgICAgIGNhc2UgJ1snOgotICAgICAgICAgICAgICAg
IGNhc2UgJ10nOgotICAgICAgICAgICAgICAgIGNhc2UgJzonOgotICAgICAgICAgICAgICAgIGNh
c2UgJz8nOgotICAgICAgICAgICAgICAgIGNhc2UgJ34nOgotICAgICAgICAgICAgICAgICAgICAr
K3RoaXMuaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIDQtY2hhcmFjdGVyIHB1bmN0dWF0b3Iu
Ci0gICAgICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuc291cmNlLnN1YnN0cih0aGlzLmluZGV4
LCA0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJz4+Pj0nKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDQ7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyAz
LWNoYXJhY3RlciBwdW5jdHVhdG9ycy4KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0
ci5zdWJzdHIoMCwgMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyID09PSAnPT09
JyB8fCBzdHIgPT09ICchPT0nIHx8IHN0ciA9PT0gJz4+PicgfHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHIgPT09ICc8PD0nIHx8IHN0ciA9PT0gJz4+PScgfHwgc3RyID09PSAnKio9
JykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMzsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDItY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgMik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJyYmJyB8fCBzdHIgPT09ICd8fCcgfHwg
c3RyID09PSAnPT0nIHx8IHN0ciA9PT0gJyE9JyB8fAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgPT09ICcrPScgfHwgc3RyID09PSAnLT0nIHx8IHN0ciA9PT0gJyo9JyB8fCBz
dHIgPT09ICcvPScgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09PSAn
KysnIHx8IHN0ciA9PT0gJy0tJyB8fCBzdHIgPT09ICc8PCcgfHwgc3RyID09PSAnPj4nIHx8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9PT0gJyY9JyB8fCBzdHIgPT09ICd8
PScgfHwgc3RyID09PSAnXj0nIHx8IHN0ciA9PT0gJyU9JyB8fAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHIgPT09ICc8PScgfHwgc3RyID09PSAnPj0nIHx8IHN0ciA9PT0gJz0+
JyB8fCBzdHIgPT09ICcqKicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5pbmRleCArPSAyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gMS1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ciA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoJzw+PSErLSolJnxeLycuaW5kZXhPZihzdHIpID49IDApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPT09IHN0YXJ0KSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiA3IC8qIFB1bmN0dWF0b3IgKi8s
Ci0gICAgICAgICAgICAgICAgdmFsdWU6IHN0ciwKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVy
OiB0aGlzLmxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVT
dGFydCwKLSAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCi0gICAgICAgICAgICAgICAgZW5k
OiB0aGlzLmluZGV4Ci0gICAgICAgICAgICB9OwotICAgICAgICB9OwotICAgICAgICAvLyBodHRw
czovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1saXRlcmFscy1udW1lcmljLWxpdGVyYWxz
Ci0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5IZXhMaXRlcmFsID0gZnVuY3Rpb24gKHN0
YXJ0KSB7Ci0gICAgICAgICAgICB2YXIgbnVtID0gJyc7Ci0gICAgICAgICAgICB3aGlsZSAoIXRo
aXMuZW9mKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5p
c0hleERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBu
dW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChudW0ubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd1Vu
ZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNoYXJhY3Rl
cl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRo
aXMuaW5kZXgpKSkgewotICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4o
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAg
dHlwZTogNiAvKiBOdW1lcmljTGl0ZXJhbCAqLywKLSAgICAgICAgICAgICAgICB2YWx1ZTogcGFy
c2VJbnQoJzB4JyArIG51bSwgMTYpLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMu
bGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0LAot
ICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAgICAgICBlbmQ6IHRoaXMu
aW5kZXgKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIFNjYW5uZXIucHJvdG90
eXBlLnNjYW5CaW5hcnlMaXRlcmFsID0gZnVuY3Rpb24gKHN0YXJ0KSB7Ci0gICAgICAgICAgICB2
YXIgbnVtID0gJyc7Ci0gICAgICAgICAgICB2YXIgY2g7Ci0gICAgICAgICAgICB3aGlsZSAoIXRo
aXMuZW9mKCkpIHsKLSAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhd
OwotICAgICAgICAgICAgICAgIGlmIChjaCAhPT0gJzAnICYmIGNoICE9PSAnMScpIHsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IG51bSArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKG51bS5sZW5ndGggPT09IDApIHsKLSAgICAgICAgICAgICAgICAvLyBvbmx5IDBi
IG9yIDBCCi0gICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCF0aGlzLmVvZigpKSB7Ci0gICAgICAgICAgICAg
ICAgY2ggPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpOwotICAgICAgICAgICAg
ICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovCi0gICAgICAgICAgICAgICAgaWYgKGNoYXJh
Y3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydChjaCkgfHwgY2hhcmFjdGVyXzEuQ2hh
cmFjdGVyLmlzRGVjaW1hbERpZ2l0KGNoKSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnRo
cm93VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiA2IC8qIE51bWVyaWNM
aXRlcmFsICovLAotICAgICAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludChudW0sIDIpLAotICAg
ICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlciwKLSAgICAgICAgICAgICAg
ICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0LAotICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFy
dCwKLSAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgIH07Ci0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5PY3RhbExpdGVyYWwgPSBmdW5j
dGlvbiAocHJlZml4LCBzdGFydCkgewotICAgICAgICAgICAgdmFyIG51bSA9ICcnOwotICAgICAg
ICAgICAgdmFyIG9jdGFsID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hh
cmFjdGVyLmlzT2N0YWxEaWdpdChwcmVmaXguY2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAg
ICAgICBvY3RhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbnVtID0gJzAnICsgdGhpcy5zb3Vy
Y2VbdGhpcy5pbmRleCsrXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdo
aWxlICghdGhpcy5lb2YoKSkgewotICAgICAgICAgICAgICAgIGlmICghY2hhcmFjdGVyXzEuQ2hh
cmFjdGVyLmlzT2N0YWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkg
ewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgbnVtICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoIW9jdGFsICYmIG51bS5sZW5ndGggPT09IDApIHsKLSAgICAgICAg
ICAgICAgICAvLyBvbmx5IDBvIG9yIDBPCi0gICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhw
ZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8x
LkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMu
aW5kZXgpKSB8fCBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQodGhpcy5zb3Vy
Y2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgICAgIHR5cGU6IDYgLyogTnVtZXJpY0xpdGVyYWwgKi8sCi0gICAgICAgICAg
ICAgICAgdmFsdWU6IHBhcnNlSW50KG51bSwgOCksCi0gICAgICAgICAgICAgICAgb2N0YWw6IG9j
dGFsLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlciwKLSAgICAg
ICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0LAotICAgICAgICAgICAgICAgIHN0
YXJ0OiBzdGFydCwKLSAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKLSAgICAgICAgICAg
IH07Ci0gICAgICAgIH07Ci0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLmlzSW1wbGljaXRPY3Rh
bExpdGVyYWwgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAvLyBJbXBsaWNpdCBvY3RhbCwg
dW5sZXNzIHRoZXJlIGlzIGEgbm9uLW9jdGFsIGRpZ2l0LgotICAgICAgICAgICAgLy8gKEFubmV4
IEIuMS4xIG9uIE51bWVyaWMgTGl0ZXJhbHMpCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhp
cy5pbmRleCArIDE7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGNoID0gdGhpcy5zb3VyY2VbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnOCcgfHwg
Y2ggPT09ICc5JykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlz
T2N0YWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuc2Nhbk51
bWVyaWNMaXRlcmFsID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhp
cy5pbmRleDsKLSAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlW3N0YXJ0XTsKLSAgICAg
ICAgICAgIGFzc2VydF8xLmFzc2VydChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGln
aXQoY2guY2hhckNvZGVBdCgwKSkgfHwgKGNoID09PSAnLicpLCAnTnVtZXJpYyBsaXRlcmFsIG11
c3Qgc3RhcnQgd2l0aCBhIGRlY2ltYWwgZGlnaXQgb3IgYSBkZWNpbWFsIHBvaW50Jyk7Ci0gICAg
ICAgICAgICB2YXIgbnVtID0gJyc7Ci0gICAgICAgICAgICBpZiAoY2ggIT09ICcuJykgewotICAg
ICAgICAgICAgICAgIG51bSA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAgICAgICAg
ICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKLSAgICAgICAgICAgICAgICAvLyBI
ZXggbnVtYmVyIHN0YXJ0cyB3aXRoICcweCcuCi0gICAgICAgICAgICAgICAgLy8gT2N0YWwgbnVt
YmVyIHN0YXJ0cyB3aXRoICcwJy4KLSAgICAgICAgICAgICAgICAvLyBPY3RhbCBudW1iZXIgaW4g
RVM2IHN0YXJ0cyB3aXRoICcwbycuCi0gICAgICAgICAgICAgICAgLy8gQmluYXJ5IG51bWJlciBp
biBFUzYgc3RhcnRzIHdpdGggJzBiJy4KLSAgICAgICAgICAgICAgICBpZiAobnVtID09PSAnMCcp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OwotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuc2NhbkhleExpdGVyYWwoc3RhcnQpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ2InIHx8IGNoID09PSAnQicp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5CaW5hcnlMaXRlcmFsKHN0YXJ0KTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdvJyB8fCBjaCA9
PT0gJ08nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuT2N0YWxM
aXRlcmFsKGNoLCBzdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoICYmIGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQoY2guY2hh
ckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW1wbGlj
aXRPY3RhbExpdGVyYWwoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLnNjYW5PY3RhbExpdGVyYWwoY2gsIHN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB3aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291
cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG51bSAr
PSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGNoID09PSAnLicpIHsKLSAgICAgICAgICAgICAgICBudW0gKz0gdGhpcy5z
b3VyY2VbdGhpcy5pbmRleCsrXTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyXzEu
Q2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRl
eCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG51bSArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4
KytdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNl
W3RoaXMuaW5kZXhdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNoID09PSAnZScg
fHwgY2ggPT09ICdFJykgewotICAgICAgICAgICAgICAgIG51bSArPSB0aGlzLnNvdXJjZVt0aGlz
LmluZGV4KytdOwotICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07
Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnKycgfHwgY2ggPT09ICctJykgewotICAgICAg
ICAgICAgICAgICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0Rl
Y2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgewotICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0
KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0
ZXIuaXNJZGVudGlmaWVyU3RhcnQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkp
IHsKLSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IDYgLyog
TnVtZXJpY0xpdGVyYWwgKi8sCi0gICAgICAgICAgICAgICAgdmFsdWU6IHBhcnNlRmxvYXQobnVt
KSwKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCi0gICAgICAg
ICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCwKLSAgICAgICAgICAgICAgICBzdGFy
dDogc3RhcnQsCi0gICAgICAgICAgICAgICAgZW5kOiB0aGlzLmluZGV4Ci0gICAgICAgICAgICB9
OwotICAgICAgICB9OwotICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIv
I3NlYy1saXRlcmFscy1zdHJpbmctbGl0ZXJhbHMKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUu
c2NhblN0cmluZ0xpdGVyYWwgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgc3RhcnQg
PSB0aGlzLmluZGV4OwotICAgICAgICAgICAgdmFyIHF1b3RlID0gdGhpcy5zb3VyY2Vbc3RhcnRd
OwotICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KChxdW90ZSA9PT0gJ1wnJyB8fCBxdW90ZSA9
PT0gJyInKSwgJ1N0cmluZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZScpOwotICAg
ICAgICAgICAgKyt0aGlzLmluZGV4OwotICAgICAgICAgICAgdmFyIG9jdGFsID0gZmFsc2U7Ci0g
ICAgICAgICAgICB2YXIgc3RyID0gJyc7Ci0gICAgICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkp
IHsKLSAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOwot
ICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
cXVvdGUgPSAnJzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAnXFwnKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjaCB8fCAhY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2gu
Y2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAneycpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSB0aGlzLnNjYW5Vbmljb2RlQ29kZVBv
aW50RXNjYXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgdW5lc2NhcGVkXzEgPSB0aGlzLnNjYW5IZXhFc2NhcGUoY2gpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuZXNjYXBlZF8xID09PSBudWxs
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1Vu
ZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHVuZXNjYXBlZF8xOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5lc2NhcGVkID0gdGhpcy5zY2Fu
SGV4RXNjYXBlKGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuZXNj
YXBlZCA9PT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRIZXhFc2Nh
cGVTZXF1ZW5jZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHVuZXNjYXBlZDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXG4nOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICdyJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9
ICdccic7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHIgKz0gJ1x0JzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ciArPSAnXGInOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcZic7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J3YnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1x4MEInOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICc4JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc5JzoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCAm
JiBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNPY3RhbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2N0VG9EZWMgPSB0aGlz
Lm9jdGFsVG9EZWNpbWFsKGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9jdGFsID0gb2N0VG9EZWMub2N0YWwgfHwgb2N0YWw7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShvY3RUb0RlYy5jb2RlKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ciArPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICsrdGhpcy5saW5lTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoID09PSAnXHInICYmIHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAnXG4nKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lU3RhcnQgPSB0
aGlzLmluZGV4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5h
dG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3RyICs9IGNoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChxdW90ZSAhPT0gJycpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gc3Rh
cnQ7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiA4IC8q
IFN0cmluZ0xpdGVyYWwgKi8sCi0gICAgICAgICAgICAgICAgdmFsdWU6IHN0ciwKLSAgICAgICAg
ICAgICAgICBvY3RhbDogb2N0YWwsCi0gICAgICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5s
aW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsCi0g
ICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAotICAgICAgICAgICAgICAgIGVuZDogdGhpcy5p
bmRleAotICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gaHR0cHM6Ly90YzM5
LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVu
dHMKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblRlbXBsYXRlID0gZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgdmFyIGNvb2tlZCA9ICcnOwotICAgICAgICAgICAgdmFyIHRlcm1pbmF0
ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuaW5kZXg7Ci0gICAgICAg
ICAgICB2YXIgaGVhZCA9ICh0aGlzLnNvdXJjZVtzdGFydF0gPT09ICdgJyk7Ci0gICAgICAgICAg
ICB2YXIgdGFpbCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIHJhd09mZnNldCA9IDI7Ci0gICAg
ICAgICAgICArK3RoaXMuaW5kZXg7Ci0gICAgICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsK
LSAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOwotICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gJ2AnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJhd09m
ZnNldCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHRhaWwgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAnJCcpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAneycp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VybHlTdGFjay5wdXNoKCckeycpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OwotICAgICAgICAgICAgICAgICAg
ICAgICAgdGVybWluYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gY2g7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAnXFwn
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNMaW5lVGVy
bWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChjaCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAncic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXHInOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICd0JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29v
a2VkICs9ICdcdCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09ICd7JykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9IHRoaXMuc2NhblVuaWNvZGVDb2RlUG9p
bnRFc2NhcGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciByZXN0b3JlID0gdGhpcy5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciB1bmVzY2FwZWRfMiA9IHRoaXMuc2NhbkhleEVzY2FwZShjaCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2NhcGVkXzIgIT09
IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQg
Kz0gdW5lc2NhcGVkXzI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gcmVzdG9yZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gY2g7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB1bmVzY2FwZWQgPSB0aGlzLnNjYW5IZXhFc2NhcGUoY2gpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2NhcGVkID09PSBudWxsKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3Nh
Z2VzXzEuTWVzc2FnZXMuSW52YWxpZEhleEVzY2FwZVNlcXVlbmNlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29r
ZWQgKz0gdW5lc2NhcGVkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29va2VkICs9ICdcYic7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xmJzsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAndic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXHYn
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoY2ggPT09ICcwJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29k
ZUF0KHRoaXMuaW5kZXgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElsbGVnYWw6IFwwMSBcMDIgYW5kIHNvIG9uCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1l
c3NhZ2VzLlRlbXBsYXRlT2N0YWxMaXRlcmFsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCAr
PSAnXDAnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFs
RGlnaXQoY2guY2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIElsbGVnYWw6IFwxIFwyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuVGVtcGxh
dGVPY3RhbExpdGVyYWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29va2VkICs9IGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmxpbmVOdW1iZXI7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdccicgJiYgdGhpcy5zb3VyY2VbdGhp
cy5pbmRleF0gPT09ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMu
aW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmxpbmVTdGFydCA9IHRoaXMuaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyXzEuQ2hh
cmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgKyt0aGlzLmxpbmVOdW1iZXI7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9
PT0gJ1xyJyAmJiB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJ1xuJykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5pbmRleDsKLSAgICAgICAgICAg
ICAgICAgICAgY29va2VkICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gY2g7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCF0ZXJtaW5hdGVkKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKCFoZWFkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5jdXJseVN0
YWNrLnBvcCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg
ICAgICAgICB0eXBlOiAxMCAvKiBUZW1wbGF0ZSAqLywKLSAgICAgICAgICAgICAgICB2YWx1ZTog
dGhpcy5zb3VyY2Uuc2xpY2Uoc3RhcnQgKyAxLCB0aGlzLmluZGV4IC0gcmF3T2Zmc2V0KSwKLSAg
ICAgICAgICAgICAgICBjb29rZWQ6IGNvb2tlZCwKLSAgICAgICAgICAgICAgICBoZWFkOiBoZWFk
LAotICAgICAgICAgICAgICAgIHRhaWw6IHRhaWwsCi0gICAgICAgICAgICAgICAgbGluZU51bWJl
cjogdGhpcy5saW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5l
U3RhcnQsCi0gICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAotICAgICAgICAgICAgICAgIGVu
ZDogdGhpcy5pbmRleAotICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gaHR0
cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbGl0ZXJhbHMtcmVndWxhci1leHByZXNz
aW9uLWxpdGVyYWxzCi0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnRlc3RSZWdFeHAgPSBmdW5j
dGlvbiAocGF0dGVybiwgZmxhZ3MpIHsKLSAgICAgICAgICAgIC8vIFRoZSBCTVAgY2hhcmFjdGVy
IHRvIHVzZSBhcyBhIHJlcGxhY2VtZW50IGZvciBhc3RyYWwgc3ltYm9scyB3aGVuCi0gICAgICAg
ICAgICAvLyB0cmFuc2xhdGluZyBhbiBFUzYgInUiLWZsYWdnZWQgcGF0dGVybiB0byBhbiBFUzUt
Y29tcGF0aWJsZQotICAgICAgICAgICAgLy8gYXBwcm94aW1hdGlvbi4KLSAgICAgICAgICAgIC8v
IE5vdGU6IHJlcGxhY2luZyB3aXRoICdcdUZGRkYnIGVuYWJsZXMgZmFsc2UgcG9zaXRpdmVzIGlu
IHVubGlrZWx5Ci0gICAgICAgICAgICAvLyBzY2VuYXJpb3MuIEZvciBleGFtcGxlLCBgW1x1ezEw
NDRmfS1cdXsxMDQ0MH1dYCBpcyBhbiBpbnZhbGlkCi0gICAgICAgICAgICAvLyBwYXR0ZXJuIHRo
YXQgd291bGQgbm90IGJlIGRldGVjdGVkIGJ5IHRoaXMgc3Vic3RpdHV0aW9uLgotICAgICAgICAg
ICAgdmFyIGFzdHJhbFN1YnN0aXR1dGUgPSAnXHVGRkZGJzsKLSAgICAgICAgICAgIHZhciB0bXAg
PSBwYXR0ZXJuOwotICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICAgICAgaWYg
KGZsYWdzLmluZGV4T2YoJ3UnKSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgdG1wID0gdG1wCi0g
ICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXHVceyhbMC05YS1mQS1GXSspXH18XFx1KFth
LWZBLUYwLTldezR9KS9nLCBmdW5jdGlvbiAoJDAsICQxLCAkMikgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgY29kZVBvaW50ID0gcGFyc2VJbnQoJDEgfHwgJDIsIDE2KTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4MTBGRkZGKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxp
ZFJlZ0V4cCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNvZGVQb2ludCA8PSAweEZGRkYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBT
dHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzdHJhbFN1YnN0aXR1dGU7Ci0gICAgICAgICAgICAg
ICAgfSkKLSAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcdUQ4MDAtXHVEQkZGXVtcdURD
MDAtXHVERkZGXS9nLCBhc3RyYWxTdWJzdGl0dXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIC8vIEZpcnN0LCBkZXRlY3QgaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb25zLgotICAgICAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBSZWdFeHAodG1wKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhw
ZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRSZWdFeHApOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgLy8gUmV0dXJuIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBm
b3IgdGhpcyBwYXR0ZXJuLWZsYWcgcGFpciwgb3IKLSAgICAgICAgICAgIC8vIGBudWxsYCBpbiBj
YXNlIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZmxhZ3MgaXQK
LSAgICAgICAgICAgIC8vIHVzZXMuCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAg
IHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNhdGNoIChleGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBp
Z25vcmUgbmV4dCAqLwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAg
fQotICAgICAgICB9OwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuUmVnRXhwQm9keSA9
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5k
ZXhdOwotICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGNoID09PSAnLycsICdSZWd1bGFyIGV4
cHJlc3Npb24gbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBzbGFzaCcpOwotICAgICAgICAgICAg
dmFyIHN0ciA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAgICAgICAgICB2YXIgY2xh
c3NNYXJrZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciB0ZXJtaW5hdGVkID0gZmFsc2U7Ci0g
ICAgICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKLSAgICAgICAgICAgICAgICBjaCA9IHRo
aXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAgICAgICAgICAgICAgc3RyICs9IGNoOwotICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJykgewotICAgICAgICAgICAgICAgICAgICBjaCA9
IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxpdGVyYWxzLXJlZ3VsYXItZXhwcmVzc2lv
bi1saXRlcmFscwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVy
LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5VbnRl
cm1pbmF0ZWRSZWdFeHApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHN0ciArPSBjaDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgw
KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNz
YWdlc18xLk1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNsYXNzTWFya2VyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChjaCA9PT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc01hcmtl
ciA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcvJykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChjaCA9PT0gJ1snKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
bGFzc01hcmtlciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXRlcm1pbmF0ZWQpIHsKLSAgICAg
ICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMu
VW50ZXJtaW5hdGVkUmVnRXhwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEV4Y2x1
ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2guCi0gICAgICAgICAgICByZXR1cm4gc3RyLnN1
YnN0cigxLCBzdHIubGVuZ3RoIC0gMik7Ci0gICAgICAgIH07Ci0gICAgICAgIFNjYW5uZXIucHJv
dG90eXBlLnNjYW5SZWdFeHBGbGFncyA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBz
dHIgPSAnJzsKLSAgICAgICAgICAgIHZhciBmbGFncyA9ICcnOwotICAgICAgICAgICAgd2hpbGUg
KCF0aGlzLmVvZigpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2VbdGhp
cy5pbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJ
ZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4Owot
ICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJyAmJiAhdGhpcy5lb2YoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoY2ggPT09ICd1JykgewotICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlz
LmluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RvcmUgPSB0aGlzLmluZGV4
OwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXIgPSB0aGlzLnNjYW5IZXhFc2NhcGUo
J3UnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyICE9PSBudWxsKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2hhcjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKHN0ciArPSAnXFx1JzsgcmVzdG9yZSA8IHRoaXMuaW5kZXg7ICsrcmVz
dG9yZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdGhpcy5zb3Vy
Y2VbcmVzdG9yZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHJlc3RvcmU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxhZ3MgKz0gJ3UnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ciArPSAnXFx1JzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0ciArPSAnXFwnOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhw
ZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmbGFncyArPSBjaDsK
LSAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmbGFnczsKLSAgICAgICAgfTsKLSAgICAgICAg
U2Nhbm5lci5wcm90b3R5cGUuc2NhblJlZ0V4cCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAg
IHZhciBzdGFydCA9IHRoaXMuaW5kZXg7Ci0gICAgICAgICAgICB2YXIgcGF0dGVybiA9IHRoaXMu
c2NhblJlZ0V4cEJvZHkoKTsKLSAgICAgICAgICAgIHZhciBmbGFncyA9IHRoaXMuc2NhblJlZ0V4
cEZsYWdzKCk7Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnRlc3RSZWdFeHAocGF0dGVy
biwgZmxhZ3MpOwotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0eXBlOiA5
IC8qIFJlZ3VsYXJFeHByZXNzaW9uICovLAotICAgICAgICAgICAgICAgIHZhbHVlOiAnJywKLSAg
ICAgICAgICAgICAgICBwYXR0ZXJuOiBwYXR0ZXJuLAotICAgICAgICAgICAgICAgIGZsYWdzOiBm
bGFncywKLSAgICAgICAgICAgICAgICByZWdleDogdmFsdWUsCi0gICAgICAgICAgICAgICAgbGlu
ZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhp
cy5saW5lU3RhcnQsCi0gICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAotICAgICAgICAgICAg
ICAgIGVuZDogdGhpcy5pbmRleAotICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAg
U2Nhbm5lci5wcm90b3R5cGUubGV4ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgaWYgKHRo
aXMuZW9mKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAg
ICB0eXBlOiAyIC8qIEVPRiAqLywKLSAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcnLAotICAg
ICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCi0gICAgICAgICAg
ICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsCi0gICAgICAgICAgICAgICAgICAg
IHN0YXJ0OiB0aGlzLmluZGV4LAotICAgICAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgK
LSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGNwID0g
dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTsKLSAgICAgICAgICAgIGlmIChjaGFy
YWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQoY3ApKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuc2NhbklkZW50aWZpZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIC8vIFZlcnkgY29tbW9uOiAoIGFuZCApIGFuZCA7Ci0gICAgICAgICAgICBpZiAoY3AgPT09
IDB4MjggfHwgY3AgPT09IDB4MjkgfHwgY3AgPT09IDB4M0IpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5zY2FuUHVuY3R1YXRvcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ly8gU3RyaW5nIGxpdGVyYWwgc3RhcnRzIHdpdGggc2luZ2xlIHF1b3RlIChVKzAwMjcpIG9yIGRv
dWJsZSBxdW90ZSAoVSswMDIyKS4KLSAgICAgICAgICAgIGlmIChjcCA9PT0gMHgyNyB8fCBjcCA9
PT0gMHgyMikgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5TdHJpbmdMaXRlcmFs
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBEb3QgKC4pIFUrMDAyRSBjYW4gYWxz
byBzdGFydCBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgaGVuY2UgdGhlIG5lZWQKLSAgICAgICAg
ICAgIC8vIHRvIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3Rlci4KLSAgICAgICAgICAgIGlmIChjcCA9
PT0gMHgyRSkgewotICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNE
ZWNpbWFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5OdW1lcmljTGl0ZXJhbCgpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuUHVuY3R1YXRv
cigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rl
ci5pc0RlY2ltYWxEaWdpdChjcCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2Fu
TnVtZXJpY0xpdGVyYWwoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFRlbXBsYXRl
IGxpdGVyYWxzIHN0YXJ0IHdpdGggYCAoVSswMDYwKSBmb3IgdGVtcGxhdGUgaGVhZAotICAgICAg
ICAgICAgLy8gb3IgfSAoVSswMDdEKSBmb3IgdGVtcGxhdGUgbWlkZGxlIG9yIHRlbXBsYXRlIHRh
aWwuCi0gICAgICAgICAgICBpZiAoY3AgPT09IDB4NjAgfHwgKGNwID09PSAweDdEICYmIHRoaXMu
Y3VybHlTdGFja1t0aGlzLmN1cmx5U3RhY2subGVuZ3RoIC0gMV0gPT09ICckeycpKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhblRlbXBsYXRlKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAvLyBQb3NzaWJsZSBpZGVudGlmaWVyIHN0YXJ0IGluIGEgc3Vycm9nYXRlIHBh
aXIuCi0gICAgICAgICAgICBpZiAoY3AgPj0gMHhEODAwICYmIGNwIDwgMHhERkZGKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0
aGlzLmNvZGVQb2ludEF0KHRoaXMuaW5kZXgpKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5zY2FuSWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5QdW5jdHVhdG9yKCk7Ci0gICAgICAgIH07
Ci0gICAgICAgIHJldHVybiBTY2FubmVyOwotICAgIH0oKSk7Ci0gICAgZXhwb3J0cy5TY2FubmVy
ID0gU2Nhbm5lcjsKKwkidXNlIHN0cmljdCI7CisJT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9y
dHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKKwl2YXIgYXNzZXJ0XzEgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDkpOworCXZhciBjaGFyYWN0ZXJfMSA9IF9fd2VicGFja19yZXF1aXJl
X18oNCk7CisJdmFyIG1lc3NhZ2VzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTsKKwlmdW5j
dGlvbiBoZXhWYWx1ZShjaCkgeworCSAgICByZXR1cm4gJzAxMjM0NTY3ODlhYmNkZWYnLmluZGV4
T2YoY2gudG9Mb3dlckNhc2UoKSk7CisJfQorCWZ1bmN0aW9uIG9jdGFsVmFsdWUoY2gpIHsKKwkg
ICAgcmV0dXJuICcwMTIzNDU2NycuaW5kZXhPZihjaCk7CisJfQorCXZhciBTY2FubmVyID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBTY2FubmVyKGNvZGUsIGhh
bmRsZXIpIHsKKwkgICAgICAgIHRoaXMuc291cmNlID0gY29kZTsKKwkgICAgICAgIHRoaXMuZXJy
b3JIYW5kbGVyID0gaGFuZGxlcjsKKwkgICAgICAgIHRoaXMudHJhY2tDb21tZW50ID0gZmFsc2U7
CisJICAgICAgICB0aGlzLmlzTW9kdWxlID0gZmFsc2U7CisJICAgICAgICB0aGlzLmxlbmd0aCA9
IGNvZGUubGVuZ3RoOworCSAgICAgICAgdGhpcy5pbmRleCA9IDA7CisJICAgICAgICB0aGlzLmxp
bmVOdW1iZXIgPSAoY29kZS5sZW5ndGggPiAwKSA/IDEgOiAwOworCSAgICAgICAgdGhpcy5saW5l
U3RhcnQgPSAwOworCSAgICAgICAgdGhpcy5jdXJseVN0YWNrID0gW107CisJICAgIH0KKwkgICAg
U2Nhbm5lci5wcm90b3R5cGUuc2F2ZVN0YXRlID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgcmV0
dXJuIHsKKwkgICAgICAgICAgICBpbmRleDogdGhpcy5pbmRleCwKKwkgICAgICAgICAgICBsaW5l
TnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxp
bmVTdGFydAorCSAgICAgICAgfTsKKwkgICAgfTsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUucmVz
dG9yZVN0YXRlID0gZnVuY3Rpb24gKHN0YXRlKSB7CisJICAgICAgICB0aGlzLmluZGV4ID0gc3Rh
dGUuaW5kZXg7CisJICAgICAgICB0aGlzLmxpbmVOdW1iZXIgPSBzdGF0ZS5saW5lTnVtYmVyOwor
CSAgICAgICAgdGhpcy5saW5lU3RhcnQgPSBzdGF0ZS5saW5lU3RhcnQ7CisJICAgIH07CisJICAg
IFNjYW5uZXIucHJvdG90eXBlLmVvZiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHJldHVybiB0
aGlzLmluZGV4ID49IHRoaXMubGVuZ3RoOworCSAgICB9OworCSAgICBTY2FubmVyLnByb3RvdHlw
ZS50aHJvd1VuZXhwZWN0ZWRUb2tlbiA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7CisJICAgICAgICBp
ZiAobWVzc2FnZSA9PT0gdm9pZCAwKSB7IG1lc3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlVu
ZXhwZWN0ZWRUb2tlbklsbGVnYWw7IH0KKwkgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxl
ci50aHJvd0Vycm9yKHRoaXMuaW5kZXgsIHRoaXMubGluZU51bWJlciwgdGhpcy5pbmRleCAtIHRo
aXMubGluZVN0YXJ0ICsgMSwgbWVzc2FnZSk7CisJICAgIH07CisJICAgIFNjYW5uZXIucHJvdG90
eXBlLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHsKKwkgICAg
ICAgIGlmIChtZXNzYWdlID09PSB2b2lkIDApIHsgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuSWxsZWdhbDsgfQorCSAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIu
dG9sZXJhdGVFcnJvcih0aGlzLmluZGV4LCB0aGlzLmxpbmVOdW1iZXIsIHRoaXMuaW5kZXggLSB0
aGlzLmxpbmVTdGFydCArIDEsIG1lc3NhZ2UpOworCSAgICB9OworCSAgICAvLyBodHRwczovL3Rj
MzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jb21tZW50cworCSAgICBTY2FubmVyLnByb3RvdHlw
ZS5za2lwU2luZ2xlTGluZUNvbW1lbnQgPSBmdW5jdGlvbiAob2Zmc2V0KSB7CisJICAgICAgICB2
YXIgY29tbWVudHMgPSBbXTsKKwkgICAgICAgIHZhciBzdGFydCwgbG9jOworCSAgICAgICAgaWYg
KHRoaXMudHJhY2tDb21tZW50KSB7CisJICAgICAgICAgICAgY29tbWVudHMgPSBbXTsKKwkgICAg
ICAgICAgICBzdGFydCA9IHRoaXMuaW5kZXggLSBvZmZzZXQ7CisJICAgICAgICAgICAgbG9jID0g
eworCSAgICAgICAgICAgICAgICBzdGFydDogeworCSAgICAgICAgICAgICAgICAgICAgbGluZTog
dGhpcy5saW5lTnVtYmVyLAorCSAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmluZGV4
IC0gdGhpcy5saW5lU3RhcnQgLSBvZmZzZXQKKwkgICAgICAgICAgICAgICAgfSwKKwkgICAgICAg
ICAgICAgICAgZW5kOiB7fQorCSAgICAgICAgICAgIH07CisJICAgICAgICB9CisJICAgICAgICB3
aGlsZSAoIXRoaXMuZW9mKCkpIHsKKwkgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZS5j
aGFyQ29kZUF0KHRoaXMuaW5kZXgpOworCSAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAg
ICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7
CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkgeworCSAgICAgICAgICAg
ICAgICAgICAgbG9jLmVuZCA9IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlz
LmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmluZGV4
IC0gdGhpcy5saW5lU3RhcnQgLSAxCisJICAgICAgICAgICAgICAgICAgICB9OworCSAgICAgICAg
ICAgICAgICAgICAgdmFyIGVudHJ5ID0geworCSAgICAgICAgICAgICAgICAgICAgICAgIG11bHRp
TGluZTogZmFsc2UsCisJICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2U6IFtzdGFydCArIG9m
ZnNldCwgdGhpcy5pbmRleCAtIDFdLAorCSAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBb
c3RhcnQsIHRoaXMuaW5kZXggLSAxXSwKKwkgICAgICAgICAgICAgICAgICAgICAgICBsb2M6IGxv
YworCSAgICAgICAgICAgICAgICAgICAgfTsKKwkgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRz
LnB1c2goZW50cnkpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGlmIChj
aCA9PT0gMTMgJiYgdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSA9PT0gMTApIHsK
KwkgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgICAgICArK3RoaXMubGluZU51bWJlcjsKKwkgICAgICAgICAgICAgICAgdGhp
cy5saW5lU3RhcnQgPSB0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICByZXR1cm4gY29tbWVu
dHM7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgaWYgKHRoaXMudHJhY2tD
b21tZW50KSB7CisJICAgICAgICAgICAgbG9jLmVuZCA9IHsKKwkgICAgICAgICAgICAgICAgbGlu
ZTogdGhpcy5saW5lTnVtYmVyLAorCSAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuaW5kZXgg
LSB0aGlzLmxpbmVTdGFydAorCSAgICAgICAgICAgIH07CisJICAgICAgICAgICAgdmFyIGVudHJ5
ID0geworCSAgICAgICAgICAgICAgICBtdWx0aUxpbmU6IGZhbHNlLAorCSAgICAgICAgICAgICAg
ICBzbGljZTogW3N0YXJ0ICsgb2Zmc2V0LCB0aGlzLmluZGV4XSwKKwkgICAgICAgICAgICAgICAg
cmFuZ2U6IFtzdGFydCwgdGhpcy5pbmRleF0sCisJICAgICAgICAgICAgICAgIGxvYzogbG9jCisJ
ICAgICAgICAgICAgfTsKKwkgICAgICAgICAgICBjb21tZW50cy5wdXNoKGVudHJ5KTsKKwkgICAg
ICAgIH0KKwkgICAgICAgIHJldHVybiBjb21tZW50czsKKwkgICAgfTsKKwkgICAgU2Nhbm5lci5w
cm90b3R5cGUuc2tpcE11bHRpTGluZUNvbW1lbnQgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2
YXIgY29tbWVudHMgPSBbXTsKKwkgICAgICAgIHZhciBzdGFydCwgbG9jOworCSAgICAgICAgaWYg
KHRoaXMudHJhY2tDb21tZW50KSB7CisJICAgICAgICAgICAgY29tbWVudHMgPSBbXTsKKwkgICAg
ICAgICAgICBzdGFydCA9IHRoaXMuaW5kZXggLSAyOworCSAgICAgICAgICAgIGxvYyA9IHsKKwkg
ICAgICAgICAgICAgICAgc3RhcnQ6IHsKKwkgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMu
bGluZU51bWJlciwKKwkgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5pbmRleCAtIHRo
aXMubGluZVN0YXJ0IC0gMgorCSAgICAgICAgICAgICAgICB9LAorCSAgICAgICAgICAgICAgICBl
bmQ6IHt9CisJICAgICAgICAgICAgfTsKKwkgICAgICAgIH0KKwkgICAgICAgIHdoaWxlICghdGhp
cy5lb2YoKSkgeworCSAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQo
dGhpcy5pbmRleCk7CisJICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xp
bmVUZXJtaW5hdG9yKGNoKSkgeworCSAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQgJiYg
dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSkgPT09IDB4MEEpIHsKKwkgICAg
ICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgICAgICArK3RoaXMubGluZU51bWJlcjsKKwkgICAgICAgICAgICAgICAgKyt0aGlzLmlu
ZGV4OworCSAgICAgICAgICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHRoaXMuaW5kZXg7CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAweDJBKSB7CisJICAgICAg
ICAgICAgICAgIC8vIEJsb2NrIGNvbW1lbnQgZW5kcyB3aXRoICcqLycuCisJICAgICAgICAgICAg
ICAgIGlmICh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXggKyAxKSA9PT0gMHgyRikg
eworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAyOworCSAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7CisJICAgICAgICAgICAgICAgICAgICAgICAg
bG9jLmVuZCA9IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5saW5l
TnVtYmVyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuaW5kZXgg
LSB0aGlzLmxpbmVTdGFydAorCSAgICAgICAgICAgICAgICAgICAgICAgIH07CisJICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0geworCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtdWx0aUxpbmU6IHRydWUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlOiBb
c3RhcnQgKyAyLCB0aGlzLmluZGV4IC0gMl0sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJhbmdlOiBbc3RhcnQsIHRoaXMuaW5kZXhdLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb2M6IGxvYworCSAgICAgICAgICAgICAgICAgICAgICAgIH07CisJICAgICAgICAgICAgICAg
ICAgICAgICAgY29tbWVudHMucHVzaChlbnRyeSk7CisJICAgICAgICAgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tbWVudHM7CisJICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAg
IH0KKwkgICAgICAgIH0KKwkgICAgICAgIC8vIFJhbiBvZmYgdGhlIGVuZCBvZiB0aGUgZmlsZSAt
IHRoZSB3aG9sZSB0aGluZyBpcyBhIGNvbW1lbnQKKwkgICAgICAgIGlmICh0aGlzLnRyYWNrQ29t
bWVudCkgeworCSAgICAgICAgICAgIGxvYy5lbmQgPSB7CisJICAgICAgICAgICAgICAgIGxpbmU6
IHRoaXMubGluZU51bWJlciwKKwkgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmluZGV4IC0g
dGhpcy5saW5lU3RhcnQKKwkgICAgICAgICAgICB9OworCSAgICAgICAgICAgIHZhciBlbnRyeSA9
IHsKKwkgICAgICAgICAgICAgICAgbXVsdGlMaW5lOiB0cnVlLAorCSAgICAgICAgICAgICAgICBz
bGljZTogW3N0YXJ0ICsgMiwgdGhpcy5pbmRleF0sCisJICAgICAgICAgICAgICAgIHJhbmdlOiBb
c3RhcnQsIHRoaXMuaW5kZXhdLAorCSAgICAgICAgICAgICAgICBsb2M6IGxvYworCSAgICAgICAg
ICAgIH07CisJICAgICAgICAgICAgY29tbWVudHMucHVzaChlbnRyeSk7CisJICAgICAgICB9CisJ
ICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7CisJICAgICAgICByZXR1cm4g
Y29tbWVudHM7CisJICAgIH07CisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5Db21tZW50cyA9
IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBjb21tZW50czsKKwkgICAgICAgIGlmICh0aGlz
LnRyYWNrQ29tbWVudCkgeworCSAgICAgICAgICAgIGNvbW1lbnRzID0gW107CisJICAgICAgICB9
CisJICAgICAgICB2YXIgc3RhcnQgPSAodGhpcy5pbmRleCA9PT0gMCk7CisJICAgICAgICB3aGls
ZSAoIXRoaXMuZW9mKCkpIHsKKwkgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZS5jaGFy
Q29kZUF0KHRoaXMuaW5kZXgpOworCSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0
ZXIuaXNXaGl0ZVNwYWNlKGNoKSkgeworCSAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rl
ci5pc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworCSAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7
CisJICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwRCAmJiB0aGlzLnNvdXJjZS5jaGFyQ29k
ZUF0KHRoaXMuaW5kZXgpID09PSAweDBBKSB7CisJICAgICAgICAgICAgICAgICAgICArK3RoaXMu
aW5kZXg7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgKyt0aGlzLmxpbmVO
dW1iZXI7CisJICAgICAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5pbmRleDsKKwkg
ICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICBlbHNlIGlmIChjaCA9PT0gMHgyRikgeyAvLyBVKzAwMkYgaXMgJy8nCisJICAgICAgICAgICAg
ICAgIGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSk7CisJICAgICAg
ICAgICAgICAgIGlmIChjaCA9PT0gMHgyRikgeworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5p
bmRleCArPSAyOworCSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSB0aGlzLnNraXBT
aW5nbGVMaW5lQ29tbWVudCgyKTsKKwkgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNr
Q29tbWVudCkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzID0gY29tbWVudHMu
Y29uY2F0KGNvbW1lbnQpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAg
ICAgICAgc3RhcnQgPSB0cnVlOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGNoID09PSAweDJBKSB7IC8vIFUrMDAyQSBpcyAnKicKKwkgICAgICAgICAgICAg
ICAgICAgIHRoaXMuaW5kZXggKz0gMjsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50
ID0gdGhpcy5za2lwTXVsdGlMaW5lQ29tbWVudCgpOworCSAgICAgICAgICAgICAgICAgICAgaWYg
KHRoaXMudHJhY2tDb21tZW50KSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMg
PSBjb21tZW50cy5jb25jYXQoY29tbWVudCk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICBlbHNlIGlmIChzdGFydCAmJiBjaCA9PT0gMHgyRCkgeyAvLyBVKzAwMkQgaXMgJy0nCisJ
ICAgICAgICAgICAgICAgIC8vIFUrMDAzRSBpcyAnPicKKwkgICAgICAgICAgICAgICAgaWYgKCh0
aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXggKyAxKSA9PT0gMHgyRCkgJiYgKHRoaXMu
c291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIDIpID09PSAweDNFKSkgeworCSAgICAgICAg
ICAgICAgICAgICAgLy8gJy0tPicgaXMgYSBzaW5nbGUtbGluZSBjb21tZW50CisJICAgICAgICAg
ICAgICAgICAgICB0aGlzLmluZGV4ICs9IDM7CisJICAgICAgICAgICAgICAgICAgICB2YXIgY29t
bWVudCA9IHRoaXMuc2tpcFNpbmdsZUxpbmVDb21tZW50KDMpOworCSAgICAgICAgICAgICAgICAg
ICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgY29t
bWVudHMgPSBjb21tZW50cy5jb25jYXQoY29tbWVudCk7CisJICAgICAgICAgICAgICAgICAgICB9
CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gMHgzQyAmJiAhdGhpcy5pc01vZHVsZSkgeyAvLyBV
KzAwM0MgaXMgJzwnCisJICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZS5zbGljZSh0aGlz
LmluZGV4ICsgMSwgdGhpcy5pbmRleCArIDQpID09PSAnIS0tJykgeworCSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5pbmRleCArPSA0OyAvLyBgPCEtLWAKKwkgICAgICAgICAgICAgICAgICAgIHZh
ciBjb21tZW50ID0gdGhpcy5za2lwU2luZ2xlTGluZUNvbW1lbnQoNCk7CisJICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHsKKwkgICAgICAgICAgICAgICAgICAgICAg
ICBjb21tZW50cyA9IGNvbW1lbnRzLmNvbmNhdChjb21tZW50KTsKKwkgICAgICAgICAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
fQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAg
ICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gY29tbWVudHM7CisJICAgIH07CisJ
ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWZ1dHVyZS1yZXNlcnZl
ZC13b3JkcworCSAgICBTY2FubmVyLnByb3RvdHlwZS5pc0Z1dHVyZVJlc2VydmVkV29yZCA9IGZ1
bmN0aW9uIChpZCkgeworCSAgICAgICAgc3dpdGNoIChpZCkgeworCSAgICAgICAgICAgIGNhc2Ug
J2VudW0nOgorCSAgICAgICAgICAgIGNhc2UgJ2V4cG9ydCc6CisJICAgICAgICAgICAgY2FzZSAn
aW1wb3J0JzoKKwkgICAgICAgICAgICBjYXNlICdzdXBlcic6CisJICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCSAgICAgICAgICAgIGRlZmF1bHQ6CisJICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUuaXNT
dHJpY3RNb2RlUmVzZXJ2ZWRXb3JkID0gZnVuY3Rpb24gKGlkKSB7CisJICAgICAgICBzd2l0Y2gg
KGlkKSB7CisJICAgICAgICAgICAgY2FzZSAnaW1wbGVtZW50cyc6CisJICAgICAgICAgICAgY2Fz
ZSAnaW50ZXJmYWNlJzoKKwkgICAgICAgICAgICBjYXNlICdwYWNrYWdlJzoKKwkgICAgICAgICAg
ICBjYXNlICdwcml2YXRlJzoKKwkgICAgICAgICAgICBjYXNlICdwcm90ZWN0ZWQnOgorCSAgICAg
ICAgICAgIGNhc2UgJ3B1YmxpYyc6CisJICAgICAgICAgICAgY2FzZSAnc3RhdGljJzoKKwkgICAg
ICAgICAgICBjYXNlICd5aWVsZCc6CisJICAgICAgICAgICAgY2FzZSAnbGV0JzoKKwkgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisJICAgICAgICAgICAgZGVmYXVsdDoKKwkgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCSAgICAgICAgfQorCSAgICB9OworCSAgICBTY2FubmVyLnBy
b3RvdHlwZS5pc1Jlc3RyaWN0ZWRXb3JkID0gZnVuY3Rpb24gKGlkKSB7CisJICAgICAgICByZXR1
cm4gaWQgPT09ICdldmFsJyB8fCBpZCA9PT0gJ2FyZ3VtZW50cyc7CisJICAgIH07CisJICAgIC8v
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWtleXdvcmRzCisJICAgIFNjYW5u
ZXIucHJvdG90eXBlLmlzS2V5d29yZCA9IGZ1bmN0aW9uIChpZCkgeworCSAgICAgICAgc3dpdGNo
IChpZC5sZW5ndGgpIHsKKwkgICAgICAgICAgICBjYXNlIDI6CisJICAgICAgICAgICAgICAgIHJl
dHVybiAoaWQgPT09ICdpZicpIHx8IChpZCA9PT0gJ2luJykgfHwgKGlkID09PSAnZG8nKTsKKwkg
ICAgICAgICAgICBjYXNlIDM6CisJICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd2YXIn
KSB8fCAoaWQgPT09ICdmb3InKSB8fCAoaWQgPT09ICduZXcnKSB8fAorCSAgICAgICAgICAgICAg
ICAgICAgKGlkID09PSAndHJ5JykgfHwgKGlkID09PSAnbGV0Jyk7CisJICAgICAgICAgICAgY2Fz
ZSA0OgorCSAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSAndGhpcycpIHx8IChpZCA9PT0g
J2Vsc2UnKSB8fCAoaWQgPT09ICdjYXNlJykgfHwKKwkgICAgICAgICAgICAgICAgICAgIChpZCA9
PT0gJ3ZvaWQnKSB8fCAoaWQgPT09ICd3aXRoJykgfHwgKGlkID09PSAnZW51bScpOworCSAgICAg
ICAgICAgIGNhc2UgNToKKwkgICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3doaWxlJykg
fHwgKGlkID09PSAnYnJlYWsnKSB8fCAoaWQgPT09ICdjYXRjaCcpIHx8CisJICAgICAgICAgICAg
ICAgICAgICAoaWQgPT09ICd0aHJvdycpIHx8IChpZCA9PT0gJ2NvbnN0JykgfHwgKGlkID09PSAn
eWllbGQnKSB8fAorCSAgICAgICAgICAgICAgICAgICAgKGlkID09PSAnY2xhc3MnKSB8fCAoaWQg
PT09ICdzdXBlcicpOworCSAgICAgICAgICAgIGNhc2UgNjoKKwkgICAgICAgICAgICAgICAgcmV0
dXJuIChpZCA9PT0gJ3JldHVybicpIHx8IChpZCA9PT0gJ3R5cGVvZicpIHx8IChpZCA9PT0gJ2Rl
bGV0ZScpIHx8CisJICAgICAgICAgICAgICAgICAgICAoaWQgPT09ICdzd2l0Y2gnKSB8fCAoaWQg
PT09ICdleHBvcnQnKSB8fCAoaWQgPT09ICdpbXBvcnQnKTsKKwkgICAgICAgICAgICBjYXNlIDc6
CisJICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdkZWZhdWx0JykgfHwgKGlkID09PSAn
ZmluYWxseScpIHx8IChpZCA9PT0gJ2V4dGVuZHMnKTsKKwkgICAgICAgICAgICBjYXNlIDg6CisJ
ICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdmdW5jdGlvbicpIHx8IChpZCA9PT0gJ2Nv
bnRpbnVlJykgfHwgKGlkID09PSAnZGVidWdnZXInKTsKKwkgICAgICAgICAgICBjYXNlIDEwOgor
CSAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaW5zdGFuY2VvZicpOworCSAgICAgICAg
ICAgIGRlZmF1bHQ6CisJICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgICAgIH0K
KwkgICAgfTsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUuY29kZVBvaW50QXQgPSBmdW5jdGlvbiAo
aSkgeworCSAgICAgICAgdmFyIGNwID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdChpKTsKKwkgICAg
ICAgIGlmIChjcCA+PSAweEQ4MDAgJiYgY3AgPD0gMHhEQkZGKSB7CisJICAgICAgICAgICAgdmFy
IHNlY29uZCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQoaSArIDEpOworCSAgICAgICAgICAgIGlm
IChzZWNvbmQgPj0gMHhEQzAwICYmIHNlY29uZCA8PSAweERGRkYpIHsKKwkgICAgICAgICAgICAg
ICAgdmFyIGZpcnN0ID0gY3A7CisJICAgICAgICAgICAgICAgIGNwID0gKGZpcnN0IC0gMHhEODAw
KSAqIDB4NDAwICsgc2Vjb25kIC0gMHhEQzAwICsgMHgxMDAwMDsKKwkgICAgICAgICAgICB9CisJ
ICAgICAgICB9CisJICAgICAgICByZXR1cm4gY3A7CisJICAgIH07CisJICAgIFNjYW5uZXIucHJv
dG90eXBlLnNjYW5IZXhFc2NhcGUgPSBmdW5jdGlvbiAocHJlZml4KSB7CisJICAgICAgICB2YXIg
bGVuID0gKHByZWZpeCA9PT0gJ3UnKSA/IDQgOiAyOworCSAgICAgICAgdmFyIGNvZGUgPSAwOwor
CSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeworCSAgICAgICAgICAgIGlm
ICghdGhpcy5lb2YoKSAmJiBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNIZXhEaWdpdCh0aGlzLnNv
dXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworCSAgICAgICAgICAgICAgICBjb2RlID0g
Y29kZSAqIDE2ICsgaGV4VmFsdWUodGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSk7CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gU3RyaW5nLmZy
b21DaGFyQ29kZShjb2RlKTsKKwkgICAgfTsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblVu
aWNvZGVDb2RlUG9pbnRFc2NhcGUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgY2ggPSB0
aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKKwkgICAgICAgIHZhciBjb2RlID0gMDsKKwkgICAgICAg
IC8vIEF0IGxlYXN0LCBvbmUgaGV4IGRpZ2l0IGlzIHJlcXVpcmVkLgorCSAgICAgICAgaWYgKGNo
ID09PSAnfScpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisJ
ICAgICAgICB9CisJICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKKwkgICAgICAgICAgICBj
aCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CisJICAgICAgICAgICAgaWYgKCFjaGFyYWN0
ZXJfMS5DaGFyYWN0ZXIuaXNIZXhEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkgeworCSAgICAgICAg
ICAgICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgY29kZSA9IGNvZGUg
KiAxNiArIGhleFZhbHVlKGNoKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIChjb2RlID4gMHgx
MEZGRkYgfHwgY2ggIT09ICd9JykgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVk
VG9rZW4oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBjaGFyYWN0ZXJfMS5DaGFyYWN0
ZXIuZnJvbUNvZGVQb2ludChjb2RlKTsKKwkgICAgfTsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUu
Z2V0SWRlbnRpZmllciA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBzdGFydCA9IHRoaXMu
aW5kZXgrKzsKKwkgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgeworCSAgICAgICAgICAgIHZh
ciBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7CisJICAgICAgICAgICAg
aWYgKGNoID09PSAweDVDKSB7CisJICAgICAgICAgICAgICAgIC8vIEJsYWNrc2xhc2ggKFUrMDA1
QykgbWFya3MgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuCisJICAgICAgICAgICAgICAgIHRoaXMu
aW5kZXggPSBzdGFydDsKKwkgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcGxleElk
ZW50aWZpZXIoKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSBpZiAoY2ggPj0g
MHhEODAwICYmIGNoIDwgMHhERkZGKSB7CisJICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gaGFu
ZGxlIHN1cnJvZ2F0ZSBwYWlycy4KKwkgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHN0YXJ0
OworCSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21wbGV4SWRlbnRpZmllcigpOwor
CSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlz
SWRlbnRpZmllclBhcnQoY2gpKSB7CisJICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIGJyZWFr
OworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLnNvdXJj
ZS5zbGljZShzdGFydCwgdGhpcy5pbmRleCk7CisJICAgIH07CisJICAgIFNjYW5uZXIucHJvdG90
eXBlLmdldENvbXBsZXhJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIGNw
ID0gdGhpcy5jb2RlUG9pbnRBdCh0aGlzLmluZGV4KTsKKwkgICAgICAgIHZhciBpZCA9IGNoYXJh
Y3Rlcl8xLkNoYXJhY3Rlci5mcm9tQ29kZVBvaW50KGNwKTsKKwkgICAgICAgIHRoaXMuaW5kZXgg
Kz0gaWQubGVuZ3RoOworCSAgICAgICAgLy8gJ1x1JyAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMg
YW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisJICAgICAgICB2YXIgY2g7CisJICAgICAgICBpZiAoY3Ag
PT09IDB4NUMpIHsKKwkgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlz
LmluZGV4KSAhPT0gMHg3NSkgeworCSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3Rl
ZFRva2VuKCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkg
ICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09ICd7JykgeworCSAgICAg
ICAgICAgICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zY2Fu
VW5pY29kZUNvZGVQb2ludEVzY2FwZSgpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBl
bHNlIHsKKwkgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNjYW5IZXhFc2NhcGUoJ3UnKTsKKwkg
ICAgICAgICAgICAgICAgaWYgKGNoID09PSBudWxsIHx8IGNoID09PSAnXFwnIHx8ICFjaGFyYWN0
ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQoY2guY2hhckNvZGVBdCgwKSkpIHsKKwkg
ICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKwkgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZCA9IGNoOworCSAgICAg
ICAgfQorCSAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7CisJICAgICAgICAgICAgY3AgPSB0
aGlzLmNvZGVQb2ludEF0KHRoaXMuaW5kZXgpOworCSAgICAgICAgICAgIGlmICghY2hhcmFjdGVy
XzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQoY3ApKSB7CisJICAgICAgICAgICAgICAgIGJy
ZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBjaCA9IGNoYXJhY3Rlcl8xLkNoYXJh
Y3Rlci5mcm9tQ29kZVBvaW50KGNwKTsKKwkgICAgICAgICAgICBpZCArPSBjaDsKKwkgICAgICAg
ICAgICB0aGlzLmluZGV4ICs9IGNoLmxlbmd0aDsKKwkgICAgICAgICAgICAvLyAnXHUnIChVKzAw
NUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KKwkgICAgICAgICAgICBp
ZiAoY3AgPT09IDB4NUMpIHsKKwkgICAgICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHIoMCwgaWQu
bGVuZ3RoIC0gMSk7CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0
KHRoaXMuaW5kZXgpICE9PSAweDc1KSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAg
Kyt0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhpcy5pbmRl
eF0gPT09ICd7JykgeworCSAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAg
ICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7CisJ
ICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAg
ICAgICAgICBjaCA9IHRoaXMuc2NhbkhleEVzY2FwZSgndScpOworCSAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoID09PSBudWxsIHx8IGNoID09PSAnXFwnIHx8ICFjaGFyYWN0ZXJfMS5DaGFyYWN0
ZXIuaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkgeworCSAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKwkgICAgICAgICAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBpZCArPSBjaDsKKwkg
ICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gaWQ7CisJICAgIH07CisJ
ICAgIFNjYW5uZXIucHJvdG90eXBlLm9jdGFsVG9EZWNpbWFsID0gZnVuY3Rpb24gKGNoKSB7CisJ
ICAgICAgICAvLyBcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVlbmNlCisJICAgICAgICB2YXIg
b2N0YWwgPSAoY2ggIT09ICcwJyk7CisJICAgICAgICB2YXIgY29kZSA9IG9jdGFsVmFsdWUoY2gp
OworCSAgICAgICAgaWYgKCF0aGlzLmVvZigpICYmIGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09j
dGFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKKwkgICAgICAg
ICAgICBvY3RhbCA9IHRydWU7CisJICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgb2N0YWxW
YWx1ZSh0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdKTsKKwkgICAgICAgICAgICAvLyAzIGRpZ2l0
cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0cworCSAgICAgICAgICAgIC8vIHdp
dGggMCwgMSwgMiwgMworCSAgICAgICAgICAgIGlmICgnMDEyMycuaW5kZXhPZihjaCkgPj0gMCAm
JiAhdGhpcy5lb2YoKSAmJiBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNPY3RhbERpZ2l0KHRoaXMu
c291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisJICAgICAgICAgICAgICAgIGNvZGUg
PSBjb2RlICogOCArIG9jdGFsVmFsdWUodGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSk7CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICBj
b2RlOiBjb2RlLAorCSAgICAgICAgICAgIG9jdGFsOiBvY3RhbAorCSAgICAgICAgfTsKKwkgICAg
fTsKKwkgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbmFtZXMtYW5k
LWtleXdvcmRzCisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5JZGVudGlmaWVyID0gZnVuY3Rp
b24gKCkgeworCSAgICAgICAgdmFyIHR5cGU7CisJICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmlu
ZGV4OworCSAgICAgICAgLy8gQmFja3NsYXNoIChVKzAwNUMpIHN0YXJ0cyBhbiBlc2NhcGVkIGNo
YXJhY3Rlci4KKwkgICAgICAgIHZhciBpZCA9ICh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHN0YXJ0
KSA9PT0gMHg1QykgPyB0aGlzLmdldENvbXBsZXhJZGVudGlmaWVyKCkgOiB0aGlzLmdldElkZW50
aWZpZXIoKTsKKwkgICAgICAgIC8vIFRoZXJlIGlzIG5vIGtleXdvcmQgb3IgbGl0ZXJhbCB3aXRo
IG9ubHkgb25lIGNoYXJhY3Rlci4KKwkgICAgICAgIC8vIFRodXMsIGl0IG11c3QgYmUgYW4gaWRl
bnRpZmllci4KKwkgICAgICAgIGlmIChpZC5sZW5ndGggPT09IDEpIHsKKwkgICAgICAgICAgICB0
eXBlID0gMyAvKiBJZGVudGlmaWVyICovOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAo
dGhpcy5pc0tleXdvcmQoaWQpKSB7CisJICAgICAgICAgICAgdHlwZSA9IDQgLyogS2V5d29yZCAq
LzsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYgKGlkID09PSAnbnVsbCcpIHsKKwkgICAg
ICAgICAgICB0eXBlID0gNSAvKiBOdWxsTGl0ZXJhbCAqLzsKKwkgICAgICAgIH0KKwkgICAgICAg
IGVsc2UgaWYgKGlkID09PSAndHJ1ZScgfHwgaWQgPT09ICdmYWxzZScpIHsKKwkgICAgICAgICAg
ICB0eXBlID0gMSAvKiBCb29sZWFuTGl0ZXJhbCAqLzsKKwkgICAgICAgIH0KKwkgICAgICAgIGVs
c2UgeworCSAgICAgICAgICAgIHR5cGUgPSAzIC8qIElkZW50aWZpZXIgKi87CisJICAgICAgICB9
CisJICAgICAgICBpZiAodHlwZSAhPT0gMyAvKiBJZGVudGlmaWVyICovICYmIChzdGFydCArIGlk
Lmxlbmd0aCAhPT0gdGhpcy5pbmRleCkpIHsKKwkgICAgICAgICAgICB2YXIgcmVzdG9yZSA9IHRo
aXMuaW5kZXg7CisJICAgICAgICAgICAgdGhpcy5pbmRleCA9IHN0YXJ0OworCSAgICAgICAgICAg
IHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlk
RXNjYXBlZFJlc2VydmVkV29yZCk7CisJICAgICAgICAgICAgdGhpcy5pbmRleCA9IHJlc3RvcmU7
CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4geworCSAgICAgICAgICAgIHR5cGU6IHR5cGUs
CisJICAgICAgICAgICAgdmFsdWU6IGlkLAorCSAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMu
bGluZU51bWJlciwKKwkgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0LAorCSAg
ICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKwkgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKKwkg
ICAgICAgIH07CisJICAgIH07CisJICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2
Mi8jc2VjLXB1bmN0dWF0b3JzCisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5QdW5jdHVhdG9y
ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDsKKwkgICAg
ICAgIC8vIENoZWNrIGZvciBtb3N0IGNvbW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3Jz
LgorCSAgICAgICAgdmFyIHN0ciA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOworCSAgICAgICAg
c3dpdGNoIChzdHIpIHsKKwkgICAgICAgICAgICBjYXNlICcoJzoKKwkgICAgICAgICAgICBjYXNl
ICd7JzoKKwkgICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJ3snKSB7CisJICAgICAgICAgICAg
ICAgICAgICB0aGlzLmN1cmx5U3RhY2sucHVzaCgneycpOworCSAgICAgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJ
ICAgICAgICAgICAgY2FzZSAnLic6CisJICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAnLicgJiYgdGhp
cy5zb3VyY2VbdGhpcy5pbmRleCArIDFdID09PSAnLicpIHsKKwkgICAgICAgICAgICAgICAgICAg
IC8vIFNwcmVhZCBvcGVyYXRvcjogLi4uCisJICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4
ICs9IDI7CisJICAgICAgICAgICAgICAgICAgICBzdHIgPSAnLi4uJzsKKwkgICAgICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlICd9JzoKKwkg
ICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICB0aGlzLmN1cmx5
U3RhY2sucG9wKCk7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2Ug
JyknOgorCSAgICAgICAgICAgIGNhc2UgJzsnOgorCSAgICAgICAgICAgIGNhc2UgJywnOgorCSAg
ICAgICAgICAgIGNhc2UgJ1snOgorCSAgICAgICAgICAgIGNhc2UgJ10nOgorCSAgICAgICAgICAg
IGNhc2UgJzonOgorCSAgICAgICAgICAgIGNhc2UgJz8nOgorCSAgICAgICAgICAgIGNhc2UgJ34n
OgorCSAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICAgICAgICAgIGJyZWFr
OworCSAgICAgICAgICAgIGRlZmF1bHQ6CisJICAgICAgICAgICAgICAgIC8vIDQtY2hhcmFjdGVy
IHB1bmN0dWF0b3IuCisJICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuc291cmNlLnN1YnN0cih0
aGlzLmluZGV4LCA0KTsKKwkgICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJz4+Pj0nKSB7CisJ
ICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDQ7CisJICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICAvLyAzLWNoYXJh
Y3RlciBwdW5jdHVhdG9ycy4KKwkgICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHIo
MCwgMyk7CisJICAgICAgICAgICAgICAgICAgICBpZiAoc3RyID09PSAnPT09JyB8fCBzdHIgPT09
ICchPT0nIHx8IHN0ciA9PT0gJz4+PicgfHwKKwkgICAgICAgICAgICAgICAgICAgICAgICBzdHIg
PT09ICc8PD0nIHx8IHN0ciA9PT0gJz4+PScgfHwgc3RyID09PSAnKio9JykgeworCSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMzsKKwkgICAgICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IDItY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9
IHN0ci5zdWJzdHIoMCwgMik7CisJICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0g
JyYmJyB8fCBzdHIgPT09ICd8fCcgfHwgc3RyID09PSAnPT0nIHx8IHN0ciA9PT0gJyE9JyB8fAor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPT09ICcrPScgfHwgc3RyID09PSAnLT0n
IHx8IHN0ciA9PT0gJyo9JyB8fCBzdHIgPT09ICcvPScgfHwKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyID09PSAnKysnIHx8IHN0ciA9PT0gJy0tJyB8fCBzdHIgPT09ICc8PCcgfHwg
c3RyID09PSAnPj4nIHx8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9PT0gJyY9
JyB8fCBzdHIgPT09ICd8PScgfHwgc3RyID09PSAnXj0nIHx8IHN0ciA9PT0gJyU9JyB8fAorCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPT09ICc8PScgfHwgc3RyID09PSAnPj0nIHx8
IHN0ciA9PT0gJz0+JyB8fCBzdHIgPT09ICcqKicpIHsKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5pbmRleCArPSAyOworCSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gMS1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ciA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOworCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoJzw+PSErLSolJnxeLycuaW5kZXhPZihzdHIpID49IDApIHsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgaWYgKHRoaXMu
aW5kZXggPT09IHN0YXJ0KSB7CisJICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tl
bigpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICB0eXBlOiA3
IC8qIFB1bmN0dWF0b3IgKi8sCisJICAgICAgICAgICAgdmFsdWU6IHN0ciwKKwkgICAgICAgICAg
ICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgbGluZVN0YXJ0OiB0
aGlzLmxpbmVTdGFydCwKKwkgICAgICAgICAgICBzdGFydDogc3RhcnQsCisJICAgICAgICAgICAg
ZW5kOiB0aGlzLmluZGV4CisJICAgICAgICB9OworCSAgICB9OworCSAgICAvLyBodHRwczovL3Rj
MzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1saXRlcmFscy1udW1lcmljLWxpdGVyYWxzCisJICAg
IFNjYW5uZXIucHJvdG90eXBlLnNjYW5IZXhMaXRlcmFsID0gZnVuY3Rpb24gKHN0YXJ0KSB7CisJ
ICAgICAgICB2YXIgbnVtID0gJyc7CisJICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKKwkg
ICAgICAgICAgICBpZiAoIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0hleERpZ2l0KHRoaXMuc291
cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisJICAgICAgICAgICAgICAgIGJyZWFrOwor
CSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRl
eCsrXTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIChudW0ubGVuZ3RoID09PSAwKSB7CisJICAg
ICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgfQorCSAgICAg
ICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0aGlzLnNvdXJj
ZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4
cGVjdGVkVG9rZW4oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB7CisJICAgICAgICAg
ICAgdHlwZTogNiAvKiBOdW1lcmljTGl0ZXJhbCAqLywKKwkgICAgICAgICAgICB2YWx1ZTogcGFy
c2VJbnQoJzB4JyArIG51bSwgMTYpLAorCSAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGlu
ZU51bWJlciwKKwkgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0LAorCSAgICAg
ICAgICAgIHN0YXJ0OiBzdGFydCwKKwkgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKKwkgICAg
ICAgIH07CisJICAgIH07CisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5CaW5hcnlMaXRlcmFs
ID0gZnVuY3Rpb24gKHN0YXJ0KSB7CisJICAgICAgICB2YXIgbnVtID0gJyc7CisJICAgICAgICB2
YXIgY2g7CisJICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKKwkgICAgICAgICAgICBjaCA9
IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOworCSAgICAgICAgICAgIGlmIChjaCAhPT0gJzAnICYm
IGNoICE9PSAnMScpIHsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQor
CSAgICAgICAgICAgIG51bSArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAg
fQorCSAgICAgICAgaWYgKG51bS5sZW5ndGggPT09IDApIHsKKwkgICAgICAgICAgICAvLyBvbmx5
IDBiIG9yIDBCCisJICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworCSAg
ICAgICAgfQorCSAgICAgICAgaWYgKCF0aGlzLmVvZigpKSB7CisJICAgICAgICAgICAgY2ggPSB0
aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpOworCSAgICAgICAgICAgIC8qIGlzdGFu
YnVsIGlnbm9yZSBlbHNlICovCisJICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rl
ci5pc0lkZW50aWZpZXJTdGFydChjaCkgfHwgY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1h
bERpZ2l0KGNoKSkgeworCSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2Vu
KCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHsKKwkgICAg
ICAgICAgICB0eXBlOiA2IC8qIE51bWVyaWNMaXRlcmFsICovLAorCSAgICAgICAgICAgIHZhbHVl
OiBwYXJzZUludChudW0sIDIpLAorCSAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51
bWJlciwKKwkgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0LAorCSAgICAgICAg
ICAgIHN0YXJ0OiBzdGFydCwKKwkgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKKwkgICAgICAg
IH07CisJICAgIH07CisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5PY3RhbExpdGVyYWwgPSBm
dW5jdGlvbiAocHJlZml4LCBzdGFydCkgeworCSAgICAgICAgdmFyIG51bSA9ICcnOworCSAgICAg
ICAgdmFyIG9jdGFsID0gZmFsc2U7CisJICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVy
LmlzT2N0YWxEaWdpdChwcmVmaXguY2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICBvY3Rh
bCA9IHRydWU7CisJICAgICAgICAgICAgbnVtID0gJzAnICsgdGhpcy5zb3VyY2VbdGhpcy5pbmRl
eCsrXTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICsrdGhpcy5p
bmRleDsKKwkgICAgICAgIH0KKwkgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgeworCSAgICAg
ICAgICAgIGlmICghY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdCh0aGlzLnNvdXJj
ZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworCSAgICAgICAgICAgICAgICBicmVhazsKKwkg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgbnVtICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgr
K107CisJICAgICAgICB9CisJICAgICAgICBpZiAoIW9jdGFsICYmIG51bS5sZW5ndGggPT09IDAp
IHsKKwkgICAgICAgICAgICAvLyBvbmx5IDBvIG9yIDBPCisJICAgICAgICAgICAgdGhpcy50aHJv
d1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKGNoYXJhY3Rlcl8x
LkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMu
aW5kZXgpKSB8fCBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQodGhpcy5zb3Vy
Y2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5l
eHBlY3RlZFRva2VuKCk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4geworCSAgICAgICAg
ICAgIHR5cGU6IDYgLyogTnVtZXJpY0xpdGVyYWwgKi8sCisJICAgICAgICAgICAgdmFsdWU6IHBh
cnNlSW50KG51bSwgOCksCisJICAgICAgICAgICAgb2N0YWw6IG9jdGFsLAorCSAgICAgICAgICAg
IGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlciwKKwkgICAgICAgICAgICBsaW5lU3RhcnQ6IHRo
aXMubGluZVN0YXJ0LAorCSAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKwkgICAgICAgICAgICBl
bmQ6IHRoaXMuaW5kZXgKKwkgICAgICAgIH07CisJICAgIH07CisJICAgIFNjYW5uZXIucHJvdG90
eXBlLmlzSW1wbGljaXRPY3RhbExpdGVyYWwgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICAvLyBJ
bXBsaWNpdCBvY3RhbCwgdW5sZXNzIHRoZXJlIGlzIGEgbm9uLW9jdGFsIGRpZ2l0LgorCSAgICAg
ICAgLy8gKEFubmV4IEIuMS4xIG9uIE51bWVyaWMgTGl0ZXJhbHMpCisJICAgICAgICBmb3IgKHZh
ciBpID0gdGhpcy5pbmRleCArIDE7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7CisJICAgICAgICAg
ICAgdmFyIGNoID0gdGhpcy5zb3VyY2VbaV07CisJICAgICAgICAgICAgaWYgKGNoID09PSAnOCcg
fHwgY2ggPT09ICc5JykgeworCSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIGlmICghY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzT2N0YWxE
aWdpdChjaC5jaGFyQ29kZUF0KDApKSkgeworCSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdHJ1ZTsKKwkgICAg
fTsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUuc2Nhbk51bWVyaWNMaXRlcmFsID0gZnVuY3Rpb24g
KCkgeworCSAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDsKKwkgICAgICAgIHZhciBjaCA9
IHRoaXMuc291cmNlW3N0YXJ0XTsKKwkgICAgICAgIGFzc2VydF8xLmFzc2VydChjaGFyYWN0ZXJf
MS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkgfHwgKGNoID09PSAn
LicpLCAnTnVtZXJpYyBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIGRlY2ltYWwgZGlnaXQgb3Ig
YSBkZWNpbWFsIHBvaW50Jyk7CisJICAgICAgICB2YXIgbnVtID0gJyc7CisJICAgICAgICBpZiAo
Y2ggIT09ICcuJykgeworCSAgICAgICAgICAgIG51bSA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgr
K107CisJICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKKwkgICAgICAg
ICAgICAvLyBIZXggbnVtYmVyIHN0YXJ0cyB3aXRoICcweCcuCisJICAgICAgICAgICAgLy8gT2N0
YWwgbnVtYmVyIHN0YXJ0cyB3aXRoICcwJy4KKwkgICAgICAgICAgICAvLyBPY3RhbCBudW1iZXIg
aW4gRVM2IHN0YXJ0cyB3aXRoICcwbycuCisJICAgICAgICAgICAgLy8gQmluYXJ5IG51bWJlciBp
biBFUzYgc3RhcnRzIHdpdGggJzBiJy4KKwkgICAgICAgICAgICBpZiAobnVtID09PSAnMCcpIHsK
KwkgICAgICAgICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykgeworCSAgICAg
ICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuc2NhbkhleExpdGVyYWwoc3RhcnQpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgICAgIGlmIChjaCA9PT0gJ2InIHx8IGNoID09PSAnQicpIHsKKwkgICAgICAgICAgICAg
ICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNj
YW5CaW5hcnlMaXRlcmFsKHN0YXJ0KTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAg
ICAgICBpZiAoY2ggPT09ICdvJyB8fCBjaCA9PT0gJ08nKSB7CisJICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5zY2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCk7CisJICAgICAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICAgICAgaWYgKGNoICYmIGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5p
c09jdGFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICAgICAgICAgIGlm
ICh0aGlzLmlzSW1wbGljaXRPY3RhbExpdGVyYWwoKSkgeworCSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLnNjYW5PY3RhbExpdGVyYWwoY2gsIHN0YXJ0KTsKKwkgICAgICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICB3aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291
cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisJICAgICAgICAgICAgICAgIG51bSArPSB0
aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBj
aCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKGNo
ID09PSAnLicpIHsKKwkgICAgICAgICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsr
XTsKKwkgICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERp
Z2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisJICAgICAgICAgICAg
ICAgIG51bSArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOworCSAgICAgICAgfQorCSAg
ICAgICAgaWYgKGNoID09PSAnZScgfHwgY2ggPT09ICdFJykgeworCSAgICAgICAgICAgIG51bSAr
PSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgICAgIGNoID0gdGhpcy5zb3Vy
Y2VbdGhpcy5pbmRleF07CisJICAgICAgICAgICAgaWYgKGNoID09PSAnKycgfHwgY2ggPT09ICct
JykgeworCSAgICAgICAgICAgICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsK
KwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5p
c0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworCSAg
ICAgICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0
KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisJICAgICAgICAgICAgICAg
ICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKKwkgICAgICAgICAgICAgICAg
fQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAg
dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0K
KwkgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQodGhp
cy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKKwkgICAgICAgICAgICB0aGlzLnRo
cm93VW5leHBlY3RlZFRva2VuKCk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4geworCSAg
ICAgICAgICAgIHR5cGU6IDYgLyogTnVtZXJpY0xpdGVyYWwgKi8sCisJICAgICAgICAgICAgdmFs
dWU6IHBhcnNlRmxvYXQobnVtKSwKKwkgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVO
dW1iZXIsCisJICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCwKKwkgICAgICAg
ICAgICBzdGFydDogc3RhcnQsCisJICAgICAgICAgICAgZW5kOiB0aGlzLmluZGV4CisJICAgICAg
ICB9OworCSAgICB9OworCSAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3Nl
Yy1saXRlcmFscy1zdHJpbmctbGl0ZXJhbHMKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblN0
cmluZ0xpdGVyYWwgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmlu
ZGV4OworCSAgICAgICAgdmFyIHF1b3RlID0gdGhpcy5zb3VyY2Vbc3RhcnRdOworCSAgICAgICAg
YXNzZXJ0XzEuYXNzZXJ0KChxdW90ZSA9PT0gJ1wnJyB8fCBxdW90ZSA9PT0gJyInKSwgJ1N0cmlu
ZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZScpOworCSAgICAgICAgKyt0aGlzLmlu
ZGV4OworCSAgICAgICAgdmFyIG9jdGFsID0gZmFsc2U7CisJICAgICAgICB2YXIgc3RyID0gJyc7
CisJICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKKwkgICAgICAgICAgICB2YXIgY2ggPSB0
aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUp
IHsKKwkgICAgICAgICAgICAgICAgcXVvdGUgPSAnJzsKKwkgICAgICAgICAgICAgICAgYnJlYWs7
CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAnXFwnKSB7CisJ
ICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKKwkgICAgICAg
ICAgICAgICAgaWYgKCFjaCB8fCAhY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0
b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gp
IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzoKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAneycpIHsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ciArPSB0aGlzLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBl
KCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5l
c2NhcGVkQ2hhciA9IHRoaXMuc2NhbkhleEVzY2FwZShjaCk7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodW5lc2NhcGVkQ2hhciA9PT0gbnVsbCkgeworCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ciArPSB1bmVzY2FwZWRDaGFyOworCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ3gnOgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
dW5lc2NhcGVkID0gdGhpcy5zY2FuSGV4RXNjYXBlKGNoKTsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHVuZXNjYXBlZCA9PT0gbnVsbCkgeworCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2Vz
LkludmFsaWRIZXhFc2NhcGVTZXF1ZW5jZSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHVuZXNjYXBlZDsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnbic6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXG4nOworCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdyJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdccic7CisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ3QnOgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1x0JzsK
KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnYic6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXGIn
OworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICdmJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdc
Zic7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ3YnOgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0g
J1x4MEInOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICc4JzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc5
JzoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOworCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7CisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCAmJiBjaGFyYWN0ZXJf
MS5DaGFyYWN0ZXIuaXNPY3RhbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7CisJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2N0VG9EZWMgPSB0aGlzLm9jdGFsVG9EZWNpbWFs
KGNoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdGFsID0gb2N0VG9EZWMu
b2N0YWwgfHwgb2N0YWw7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0g
U3RyaW5nLmZyb21DaGFyQ29kZShvY3RUb0RlYy5jb2RlKTsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBlbHNl
IHsKKwkgICAgICAgICAgICAgICAgICAgICsrdGhpcy5saW5lTnVtYmVyOworCSAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoID09PSAnXHInICYmIHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAn
XG4nKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAg
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lU3RhcnQgPSB0aGlz
LmluZGV4OworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAg
IGVsc2UgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJD
b2RlQXQoMCkpKSB7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgc3RyICs9IGNoOworCSAgICAgICAg
ICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGlmIChxdW90ZSAhPT0gJycpIHsKKwkgICAgICAg
ICAgICB0aGlzLmluZGV4ID0gc3RhcnQ7CisJICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0
ZWRUb2tlbigpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICB0
eXBlOiA4IC8qIFN0cmluZ0xpdGVyYWwgKi8sCisJICAgICAgICAgICAgdmFsdWU6IHN0ciwKKwkg
ICAgICAgICAgICBvY3RhbDogb2N0YWwsCisJICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5s
aW5lTnVtYmVyLAorCSAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsCisJICAg
ICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorCSAgICAgICAgICAgIGVuZDogdGhpcy5pbmRleAorCSAg
ICAgICAgfTsKKwkgICAgfTsKKwkgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYy
LyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMKKwkgICAgU2Nhbm5lci5w
cm90b3R5cGUuc2NhblRlbXBsYXRlID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIGNvb2tl
ZCA9ICcnOworCSAgICAgICAgdmFyIHRlcm1pbmF0ZWQgPSBmYWxzZTsKKwkgICAgICAgIHZhciBz
dGFydCA9IHRoaXMuaW5kZXg7CisJICAgICAgICB2YXIgaGVhZCA9ICh0aGlzLnNvdXJjZVtzdGFy
dF0gPT09ICdgJyk7CisJICAgICAgICB2YXIgdGFpbCA9IGZhbHNlOworCSAgICAgICAgdmFyIHJh
d09mZnNldCA9IDI7CisJICAgICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICB3aGlsZSAoIXRo
aXMuZW9mKCkpIHsKKwkgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4
KytdOworCSAgICAgICAgICAgIGlmIChjaCA9PT0gJ2AnKSB7CisJICAgICAgICAgICAgICAgIHJh
d09mZnNldCA9IDE7CisJICAgICAgICAgICAgICAgIHRhaWwgPSB0cnVlOworCSAgICAgICAgICAg
ICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAnJCcpIHsKKwkgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAneycpIHsKKwkgICAgICAgICAg
ICAgICAgICAgIHRoaXMuY3VybHlTdGFjay5wdXNoKCckeycpOworCSAgICAgICAgICAgICAgICAg
ICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7
CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgICAgICBjb29rZWQgKz0gY2g7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVs
c2UgaWYgKGNoID09PSAnXFwnKSB7CisJICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2Vb
dGhpcy5pbmRleCsrXTsKKwkgICAgICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0
ZXIuaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgeworCSAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChjaCkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xuJzsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
cic6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXHInOworCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICd0JzoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdcdCc7CisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ3UnOgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3Vy
Y2VbdGhpcy5pbmRleF0gPT09ICd7JykgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2Vk
ICs9IHRoaXMuc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTsKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN0b3JlID0gdGhpcy5pbmRleDsKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmVzY2FwZWRDaGFyID0gdGhpcy5z
Y2FuSGV4RXNjYXBlKGNoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1
bmVzY2FwZWRDaGFyICE9PSBudWxsKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29va2VkICs9IHVuZXNjYXBlZENoYXI7CisJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gcmVzdG9yZTsKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gY2g7CisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAneCc6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmVz
Y2FwZWQgPSB0aGlzLnNjYW5IZXhFc2NhcGUoY2gpOworCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodW5lc2NhcGVkID09PSBudWxsKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52
YWxpZEhleEVzY2FwZVNlcXVlbmNlKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gdW5lc2NhcGVkOworCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICdiJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdcYic7CisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ2YnOgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xm
JzsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAndic6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCAr
PSAnXHYnOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y2ggPT09ICcwJykgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJh
Y3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRo
aXMuaW5kZXgpKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEls
bGVnYWw6IFwwMSBcMDIgYW5kIHNvIG9uCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLlRlbXBs
YXRlT2N0YWxMaXRlcmFsKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXDAnOworCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkp
IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWw6IFwxIFwyCisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2Vu
KG1lc3NhZ2VzXzEuTWVzc2FnZXMuVGVtcGxhdGVPY3RhbExpdGVyYWwpOworCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugewor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9IGNoOworCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmxpbmVOdW1iZXI7CisJ
ICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdccicgJiYgdGhpcy5zb3VyY2VbdGhpcy5p
bmRleF0gPT09ICdcbicpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7
CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVT
dGFydCA9IHRoaXMuaW5kZXg7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0
b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICAgICAgKyt0aGlzLmxpbmVOdW1i
ZXI7CisJICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xyJyAmJiB0aGlzLnNvdXJjZVt0aGlz
LmluZGV4XSA9PT0gJ1xuJykgeworCSAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4Owor
CSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhp
cy5pbmRleDsKKwkgICAgICAgICAgICAgICAgY29va2VkICs9ICdcbic7CisJICAgICAgICAgICAg
fQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBjb29rZWQgKz0gY2g7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgaWYgKCF0ZXJtaW5hdGVkKSB7CisJ
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgfQorCSAg
ICAgICAgaWYgKCFoZWFkKSB7CisJICAgICAgICAgICAgdGhpcy5jdXJseVN0YWNrLnBvcCgpOwor
CSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICB0eXBlOiAxMCAvKiBU
ZW1wbGF0ZSAqLywKKwkgICAgICAgICAgICB2YWx1ZTogdGhpcy5zb3VyY2Uuc2xpY2Uoc3RhcnQg
KyAxLCB0aGlzLmluZGV4IC0gcmF3T2Zmc2V0KSwKKwkgICAgICAgICAgICBjb29rZWQ6IGNvb2tl
ZCwKKwkgICAgICAgICAgICBoZWFkOiBoZWFkLAorCSAgICAgICAgICAgIHRhaWw6IHRhaWwsCisJ
ICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLAorCSAgICAgICAgICAgIGxp
bmVTdGFydDogdGhpcy5saW5lU3RhcnQsCisJICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorCSAg
ICAgICAgICAgIGVuZDogdGhpcy5pbmRleAorCSAgICAgICAgfTsKKwkgICAgfTsKKwkgICAgLy8g
aHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbGl0ZXJhbHMtcmVndWxhci1leHBy
ZXNzaW9uLWxpdGVyYWxzCisJICAgIFNjYW5uZXIucHJvdG90eXBlLnRlc3RSZWdFeHAgPSBmdW5j
dGlvbiAocGF0dGVybiwgZmxhZ3MpIHsKKwkgICAgICAgIC8vIFRoZSBCTVAgY2hhcmFjdGVyIHRv
IHVzZSBhcyBhIHJlcGxhY2VtZW50IGZvciBhc3RyYWwgc3ltYm9scyB3aGVuCisJICAgICAgICAv
LyB0cmFuc2xhdGluZyBhbiBFUzYgInUiLWZsYWdnZWQgcGF0dGVybiB0byBhbiBFUzUtY29tcGF0
aWJsZQorCSAgICAgICAgLy8gYXBwcm94aW1hdGlvbi4KKwkgICAgICAgIC8vIE5vdGU6IHJlcGxh
Y2luZyB3aXRoICdcdUZGRkYnIGVuYWJsZXMgZmFsc2UgcG9zaXRpdmVzIGluIHVubGlrZWx5CisJ
ICAgICAgICAvLyBzY2VuYXJpb3MuIEZvciBleGFtcGxlLCBgW1x1ezEwNDRmfS1cdXsxMDQ0MH1d
YCBpcyBhbiBpbnZhbGlkCisJICAgICAgICAvLyBwYXR0ZXJuIHRoYXQgd291bGQgbm90IGJlIGRl
dGVjdGVkIGJ5IHRoaXMgc3Vic3RpdHV0aW9uLgorCSAgICAgICAgdmFyIGFzdHJhbFN1YnN0aXR1
dGUgPSAnXHVGRkZGJzsKKwkgICAgICAgIHZhciB0bXAgPSBwYXR0ZXJuOworCSAgICAgICAgdmFy
IHNlbGYgPSB0aGlzOworCSAgICAgICAgaWYgKGZsYWdzLmluZGV4T2YoJ3UnKSA+PSAwKSB7CisJ
ICAgICAgICAgICAgdG1wID0gdG1wCisJICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgZXZlcnkg
VW5pY29kZSBlc2NhcGUgc2VxdWVuY2Ugd2l0aCB0aGUgZXF1aXZhbGVudAorCSAgICAgICAgICAg
ICAgICAvLyBCTVAgY2hhcmFjdGVyIG9yIGEgY29uc3RhbnQgQVNDSUkgY29kZSBwb2ludCBpbiB0
aGUgY2FzZSBvZgorCSAgICAgICAgICAgICAgICAvLyBhc3RyYWwgc3ltYm9scy4gKFNlZSB0aGUg
YWJvdmUgbm90ZSBvbiBgYXN0cmFsU3Vic3RpdHV0ZWAKKwkgICAgICAgICAgICAgICAgLy8gZm9y
IG1vcmUgaW5mb3JtYXRpb24uKQorCSAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFx1XHsoWzAt
OWEtZkEtRl0rKVx9fFxcdShbYS1mQS1GMC05XXs0fSkvZywgZnVuY3Rpb24gKCQwLCAkMSwgJDIp
IHsKKwkgICAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9IHBhcnNlSW50KCQxIHx8ICQyLCAx
Nik7CisJICAgICAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPiAweDEwRkZGRikgeworCSAgICAg
ICAgICAgICAgICAgICAgc2VsZi50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3Nh
Z2VzLkludmFsaWRSZWdFeHApOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAg
IGlmIChjb2RlUG9pbnQgPD0gMHhGRkZGKSB7CisJICAgICAgICAgICAgICAgICAgICByZXR1cm4g
U3RyaW5nLmZyb21DaGFyQ29kZShjb2RlUG9pbnQpOworCSAgICAgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgICAgIHJldHVybiBhc3RyYWxTdWJzdGl0dXRlOworCSAgICAgICAgICAgIH0pCisJ
ICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgZWFjaCBwYWlyZWQgc3Vycm9nYXRlIHdpdGggYSBz
aW5nbGUgQVNDSUkgc3ltYm9sIHRvCisJICAgICAgICAgICAgICAgIC8vIGF2b2lkIHRocm93aW5n
IG9uIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBhcmUgb25seSB2YWxpZCBpbgorCSAgICAgICAg
ICAgICAgICAvLyBjb21iaW5hdGlvbiB3aXRoIHRoZSAidSIgZmxhZy4KKwkgICAgICAgICAgICAg
ICAgLnJlcGxhY2UoL1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLCBhc3RyYWxTdWJz
dGl0dXRlKTsKKwkgICAgICAgIH0KKwkgICAgICAgIC8vIEZpcnN0LCBkZXRlY3QgaW52YWxpZCBy
ZWd1bGFyIGV4cHJlc3Npb25zLgorCSAgICAgICAgdHJ5IHsKKwkgICAgICAgICAgICBSZWdFeHAo
dG1wKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGNhdGNoIChlKSB7CisJICAgICAgICAgICAgdGhp
cy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRSZWdFeHAp
OworCSAgICAgICAgfQorCSAgICAgICAgLy8gUmV0dXJuIGEgcmVndWxhciBleHByZXNzaW9uIG9i
amVjdCBmb3IgdGhpcyBwYXR0ZXJuLWZsYWcgcGFpciwgb3IKKwkgICAgICAgIC8vIGBudWxsYCBp
biBjYXNlIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZmxhZ3Mg
aXQKKwkgICAgICAgIC8vIHVzZXMuCisJICAgICAgICB0cnkgeworCSAgICAgICAgICAgIHJldHVy
biBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGNhdGNo
IChleGNlcHRpb24pIHsKKwkgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLwor
CSAgICAgICAgICAgIHJldHVybiBudWxsOworCSAgICAgICAgfQorCSAgICB9OworCSAgICBTY2Fu
bmVyLnByb3RvdHlwZS5zY2FuUmVnRXhwQm9keSA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZh
ciBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOworCSAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0
KGNoID09PSAnLycsICdSZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGgg
YSBzbGFzaCcpOworCSAgICAgICAgdmFyIHN0ciA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107
CisJICAgICAgICB2YXIgY2xhc3NNYXJrZXIgPSBmYWxzZTsKKwkgICAgICAgIHZhciB0ZXJtaW5h
dGVkID0gZmFsc2U7CisJICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKKwkgICAgICAgICAg
ICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CisJICAgICAgICAgICAgc3RyICs9IGNo
OworCSAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJykgeworCSAgICAgICAgICAgICAgICBjaCA9
IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CisJICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
dGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxpdGVyYWxzLXJlZ3VsYXItZXhwcmVzc2lvbi1s
aXRlcmFscworCSAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGlu
ZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRo
aXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5VbnRlcm1pbmF0ZWRS
ZWdFeHApOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIHN0ciArPSBjaDsK
KwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFj
dGVyLmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICAg
ICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLlVudGVybWlu
YXRlZFJlZ0V4cCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGNsYXNz
TWFya2VyKSB7CisJICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7CisJICAgICAgICAg
ICAgICAgICAgICBjbGFzc01hcmtlciA9IGZhbHNlOworCSAgICAgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBpZiAoY2gg
PT09ICcvJykgeworCSAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7CisJICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChjaCA9PT0gJ1snKSB7CisJICAgICAgICAgICAgICAgICAgICBjbGFzc01h
cmtlciA9IHRydWU7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAg
ICB9CisJICAgICAgICBpZiAoIXRlcm1pbmF0ZWQpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsK
KwkgICAgICAgIH0KKwkgICAgICAgIC8vIEV4Y2x1ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xh
c2guCisJICAgICAgICByZXR1cm4gc3RyLnN1YnN0cigxLCBzdHIubGVuZ3RoIC0gMik7CisJICAg
IH07CisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5SZWdFeHBGbGFncyA9IGZ1bmN0aW9uICgp
IHsKKwkgICAgICAgIHZhciBzdHIgPSAnJzsKKwkgICAgICAgIHZhciBmbGFncyA9ICcnOworCSAg
ICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7CisJICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5z
b3VyY2VbdGhpcy5pbmRleF07CisJICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0
ZXIuaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkgeworCSAgICAgICAgICAgICAg
ICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAg
ICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJyAmJiAhdGhpcy5lb2YoKSkgeworCSAgICAgICAgICAg
ICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOworCSAgICAgICAgICAgICAgICBpZiAo
Y2ggPT09ICd1JykgeworCSAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAg
ICAgICAgICAgICAgICAgdmFyIHJlc3RvcmUgPSB0aGlzLmluZGV4OworCSAgICAgICAgICAgICAg
ICAgICAgdmFyIGNoYXIgPSB0aGlzLnNjYW5IZXhFc2NhcGUoJ3UnKTsKKwkgICAgICAgICAgICAg
ICAgICAgIGlmIChjaGFyICE9PSBudWxsKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgZmxh
Z3MgKz0gY2hhcjsKKwkgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHN0ciArPSAnXFx1Jzsg
cmVzdG9yZSA8IHRoaXMuaW5kZXg7ICsrcmVzdG9yZSkgeworCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gdGhpcy5zb3VyY2VbcmVzdG9yZV07CisJICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHJlc3RvcmU7CisJICAg
ICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gJ3UnOworCSAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ciArPSAnXFx1JzsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAg
ICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTsKKwkgICAgICAgICAgICAgICAg
fQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIHN0ciArPSAn
XFwnOworCSAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbigp
OworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2Ug
eworCSAgICAgICAgICAgICAgICBmbGFncyArPSBjaDsKKwkgICAgICAgICAgICAgICAgc3RyICs9
IGNoOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBmbGFnczsK
KwkgICAgfTsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblJlZ0V4cCA9IGZ1bmN0aW9uICgp
IHsKKwkgICAgICAgIHZhciBzdGFydCA9IHRoaXMuaW5kZXg7CisJICAgICAgICB2YXIgcGF0dGVy
biA9IHRoaXMuc2NhblJlZ0V4cEJvZHkoKTsKKwkgICAgICAgIHZhciBmbGFncyA9IHRoaXMuc2Nh
blJlZ0V4cEZsYWdzKCk7CisJICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnRlc3RSZWdFeHAocGF0
dGVybiwgZmxhZ3MpOworCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICB0eXBlOiA5IC8q
IFJlZ3VsYXJFeHByZXNzaW9uICovLAorCSAgICAgICAgICAgIHZhbHVlOiAnJywKKwkgICAgICAg
ICAgICBwYXR0ZXJuOiBwYXR0ZXJuLAorCSAgICAgICAgICAgIGZsYWdzOiBmbGFncywKKwkgICAg
ICAgICAgICByZWdleDogdmFsdWUsCisJICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5saW5l
TnVtYmVyLAorCSAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsCisJICAgICAg
ICAgICAgc3RhcnQ6IHN0YXJ0LAorCSAgICAgICAgICAgIGVuZDogdGhpcy5pbmRleAorCSAgICAg
ICAgfTsKKwkgICAgfTsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUubGV4ID0gZnVuY3Rpb24gKCkg
eworCSAgICAgICAgaWYgKHRoaXMuZW9mKCkpIHsKKwkgICAgICAgICAgICByZXR1cm4geworCSAg
ICAgICAgICAgICAgICB0eXBlOiAyIC8qIEVPRiAqLywKKwkgICAgICAgICAgICAgICAgdmFsdWU6
ICcnLAorCSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisJICAg
ICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsCisJICAgICAgICAgICAgICAg
IHN0YXJ0OiB0aGlzLmluZGV4LAorCSAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKKwkg
ICAgICAgICAgICB9OworCSAgICAgICAgfQorCSAgICAgICAgdmFyIGNwID0gdGhpcy5zb3VyY2Uu
Y2hhckNvZGVBdCh0aGlzLmluZGV4KTsKKwkgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0
ZXIuaXNJZGVudGlmaWVyU3RhcnQoY3ApKSB7CisJICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Nh
bklkZW50aWZpZXIoKTsKKwkgICAgICAgIH0KKwkgICAgICAgIC8vIFZlcnkgY29tbW9uOiAoIGFu
ZCApIGFuZCA7CisJICAgICAgICBpZiAoY3AgPT09IDB4MjggfHwgY3AgPT09IDB4MjkgfHwgY3Ag
PT09IDB4M0IpIHsKKwkgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuUHVuY3R1YXRvcigpOwor
CSAgICAgICAgfQorCSAgICAgICAgLy8gU3RyaW5nIGxpdGVyYWwgc3RhcnRzIHdpdGggc2luZ2xl
IHF1b3RlIChVKzAwMjcpIG9yIGRvdWJsZSBxdW90ZSAoVSswMDIyKS4KKwkgICAgICAgIGlmIChj
cCA9PT0gMHgyNyB8fCBjcCA9PT0gMHgyMikgeworCSAgICAgICAgICAgIHJldHVybiB0aGlzLnNj
YW5TdHJpbmdMaXRlcmFsKCk7CisJICAgICAgICB9CisJICAgICAgICAvLyBEb3QgKC4pIFUrMDAy
RSBjYW4gYWxzbyBzdGFydCBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgaGVuY2UgdGhlIG5lZWQK
KwkgICAgICAgIC8vIHRvIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3Rlci4KKwkgICAgICAgIGlmIChj
cCA9PT0gMHgyRSkgeworCSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNE
ZWNpbWFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSkpKSB7CisJ
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5OdW1lcmljTGl0ZXJhbCgpOworCSAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuUHVuY3R1YXRvcigpOworCSAg
ICAgICAgfQorCSAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdp
dChjcCkpIHsKKwkgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuTnVtZXJpY0xpdGVyYWwoKTsK
KwkgICAgICAgIH0KKwkgICAgICAgIC8vIFRlbXBsYXRlIGxpdGVyYWxzIHN0YXJ0IHdpdGggYCAo
VSswMDYwKSBmb3IgdGVtcGxhdGUgaGVhZAorCSAgICAgICAgLy8gb3IgfSAoVSswMDdEKSBmb3Ig
dGVtcGxhdGUgbWlkZGxlIG9yIHRlbXBsYXRlIHRhaWwuCisJICAgICAgICBpZiAoY3AgPT09IDB4
NjAgfHwgKGNwID09PSAweDdEICYmIHRoaXMuY3VybHlTdGFja1t0aGlzLmN1cmx5U3RhY2subGVu
Z3RoIC0gMV0gPT09ICckeycpKSB7CisJICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhblRlbXBs
YXRlKCk7CisJICAgICAgICB9CisJICAgICAgICAvLyBQb3NzaWJsZSBpZGVudGlmaWVyIHN0YXJ0
IGluIGEgc3Vycm9nYXRlIHBhaXIuCisJICAgICAgICBpZiAoY3AgPj0gMHhEODAwICYmIGNwIDwg
MHhERkZGKSB7CisJICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50
aWZpZXJTdGFydCh0aGlzLmNvZGVQb2ludEF0KHRoaXMuaW5kZXgpKSkgeworCSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5zY2FuSWRlbnRpZmllcigpOworCSAgICAgICAgICAgIH0KKwkgICAg
ICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLnNjYW5QdW5jdHVhdG9yKCk7CisJICAgIH07CisJ
ICAgIHJldHVybiBTY2FubmVyOworCX0oKSk7CisJZXhwb3J0cy5TY2FubmVyID0gU2Nhbm5lcjsK
IAogCiAvKioqLyB9LAogLyogMTMgKi8KIC8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykg
ewogCi0gICAgInVzZSBzdHJpY3QiOwotICAgIDsKLSAgICBleHBvcnRzLlRva2VuTmFtZSA9IHt9
OwotICAgIGV4cG9ydHMuVG9rZW5OYW1lWzEgLyogQm9vbGVhbkxpdGVyYWwgKi9dID0gJ0Jvb2xl
YW4nOwotICAgIGV4cG9ydHMuVG9rZW5OYW1lWzIgLyogRU9GICovXSA9ICc8ZW5kPic7Ci0gICAg
ZXhwb3J0cy5Ub2tlbk5hbWVbMyAvKiBJZGVudGlmaWVyICovXSA9ICdJZGVudGlmaWVyJzsKLSAg
ICBleHBvcnRzLlRva2VuTmFtZVs0IC8qIEtleXdvcmQgKi9dID0gJ0tleXdvcmQnOwotICAgIGV4
cG9ydHMuVG9rZW5OYW1lWzUgLyogTnVsbExpdGVyYWwgKi9dID0gJ051bGwnOwotICAgIGV4cG9y
dHMuVG9rZW5OYW1lWzYgLyogTnVtZXJpY0xpdGVyYWwgKi9dID0gJ051bWVyaWMnOwotICAgIGV4
cG9ydHMuVG9rZW5OYW1lWzcgLyogUHVuY3R1YXRvciAqL10gPSAnUHVuY3R1YXRvcic7Ci0gICAg
ZXhwb3J0cy5Ub2tlbk5hbWVbOCAvKiBTdHJpbmdMaXRlcmFsICovXSA9ICdTdHJpbmcnOwotICAg
IGV4cG9ydHMuVG9rZW5OYW1lWzkgLyogUmVndWxhckV4cHJlc3Npb24gKi9dID0gJ1JlZ3VsYXJF
eHByZXNzaW9uJzsKLSAgICBleHBvcnRzLlRva2VuTmFtZVsxMCAvKiBUZW1wbGF0ZSAqL10gPSAn
VGVtcGxhdGUnOworCSJ1c2Ugc3RyaWN0IjsKKwlPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0
cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOworCWV4cG9ydHMuVG9rZW5OYW1lID0g
e307CisJZXhwb3J0cy5Ub2tlbk5hbWVbMSAvKiBCb29sZWFuTGl0ZXJhbCAqL10gPSAnQm9vbGVh
bic7CisJZXhwb3J0cy5Ub2tlbk5hbWVbMiAvKiBFT0YgKi9dID0gJzxlbmQ+JzsKKwlleHBvcnRz
LlRva2VuTmFtZVszIC8qIElkZW50aWZpZXIgKi9dID0gJ0lkZW50aWZpZXInOworCWV4cG9ydHMu
VG9rZW5OYW1lWzQgLyogS2V5d29yZCAqL10gPSAnS2V5d29yZCc7CisJZXhwb3J0cy5Ub2tlbk5h
bWVbNSAvKiBOdWxsTGl0ZXJhbCAqL10gPSAnTnVsbCc7CisJZXhwb3J0cy5Ub2tlbk5hbWVbNiAv
KiBOdW1lcmljTGl0ZXJhbCAqL10gPSAnTnVtZXJpYyc7CisJZXhwb3J0cy5Ub2tlbk5hbWVbNyAv
KiBQdW5jdHVhdG9yICovXSA9ICdQdW5jdHVhdG9yJzsKKwlleHBvcnRzLlRva2VuTmFtZVs4IC8q
IFN0cmluZ0xpdGVyYWwgKi9dID0gJ1N0cmluZyc7CisJZXhwb3J0cy5Ub2tlbk5hbWVbOSAvKiBS
ZWd1bGFyRXhwcmVzc2lvbiAqL10gPSAnUmVndWxhckV4cHJlc3Npb24nOworCWV4cG9ydHMuVG9r
ZW5OYW1lWzEwIC8qIFRlbXBsYXRlICovXSA9ICdUZW1wbGF0ZSc7CiAKIAogLyoqKi8gfSwKIC8q
IDE0ICovCiAvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKIAotICAgIC8vIEdlbmVy
YXRlZCBieSBnZW5lcmF0ZS14aHRtbC1lbnRpdGllcy5qcy4gRE8gTk9UIE1PRElGWSEKLSAgICAi
dXNlIHN0cmljdCI7Ci0gICAgZXhwb3J0cy5YSFRNTEVudGl0aWVzID0gewotICAgICAgICBxdW90
OiAnXHUwMDIyJywKLSAgICAgICAgYW1wOiAnXHUwMDI2JywKLSAgICAgICAgYXBvczogJ1x1MDAy
NycsCi0gICAgICAgIGd0OiAnXHUwMDNFJywKLSAgICAgICAgbmJzcDogJ1x1MDBBMCcsCi0gICAg
ICAgIGlleGNsOiAnXHUwMEExJywKLSAgICAgICAgY2VudDogJ1x1MDBBMicsCi0gICAgICAgIHBv
dW5kOiAnXHUwMEEzJywKLSAgICAgICAgY3VycmVuOiAnXHUwMEE0JywKLSAgICAgICAgeWVuOiAn
XHUwMEE1JywKLSAgICAgICAgYnJ2YmFyOiAnXHUwMEE2JywKLSAgICAgICAgc2VjdDogJ1x1MDBB
NycsCi0gICAgICAgIHVtbDogJ1x1MDBBOCcsCi0gICAgICAgIGNvcHk6ICdcdTAwQTknLAotICAg
ICAgICBvcmRmOiAnXHUwMEFBJywKLSAgICAgICAgbGFxdW86ICdcdTAwQUInLAotICAgICAgICBu
b3Q6ICdcdTAwQUMnLAotICAgICAgICBzaHk6ICdcdTAwQUQnLAotICAgICAgICByZWc6ICdcdTAw
QUUnLAotICAgICAgICBtYWNyOiAnXHUwMEFGJywKLSAgICAgICAgZGVnOiAnXHUwMEIwJywKLSAg
ICAgICAgcGx1c21uOiAnXHUwMEIxJywKLSAgICAgICAgc3VwMjogJ1x1MDBCMicsCi0gICAgICAg
IHN1cDM6ICdcdTAwQjMnLAotICAgICAgICBhY3V0ZTogJ1x1MDBCNCcsCi0gICAgICAgIG1pY3Jv
OiAnXHUwMEI1JywKLSAgICAgICAgcGFyYTogJ1x1MDBCNicsCi0gICAgICAgIG1pZGRvdDogJ1x1
MDBCNycsCi0gICAgICAgIGNlZGlsOiAnXHUwMEI4JywKLSAgICAgICAgc3VwMTogJ1x1MDBCOScs
Ci0gICAgICAgIG9yZG06ICdcdTAwQkEnLAotICAgICAgICByYXF1bzogJ1x1MDBCQicsCi0gICAg
ICAgIGZyYWMxNDogJ1x1MDBCQycsCi0gICAgICAgIGZyYWMxMjogJ1x1MDBCRCcsCi0gICAgICAg
IGZyYWMzNDogJ1x1MDBCRScsCi0gICAgICAgIGlxdWVzdDogJ1x1MDBCRicsCi0gICAgICAgIEFn
cmF2ZTogJ1x1MDBDMCcsCi0gICAgICAgIEFhY3V0ZTogJ1x1MDBDMScsCi0gICAgICAgIEFjaXJj
OiAnXHUwMEMyJywKLSAgICAgICAgQXRpbGRlOiAnXHUwMEMzJywKLSAgICAgICAgQXVtbDogJ1x1
MDBDNCcsCi0gICAgICAgIEFyaW5nOiAnXHUwMEM1JywKLSAgICAgICAgQUVsaWc6ICdcdTAwQzYn
LAotICAgICAgICBDY2VkaWw6ICdcdTAwQzcnLAotICAgICAgICBFZ3JhdmU6ICdcdTAwQzgnLAot
ICAgICAgICBFYWN1dGU6ICdcdTAwQzknLAotICAgICAgICBFY2lyYzogJ1x1MDBDQScsCi0gICAg
ICAgIEV1bWw6ICdcdTAwQ0InLAotICAgICAgICBJZ3JhdmU6ICdcdTAwQ0MnLAotICAgICAgICBJ
YWN1dGU6ICdcdTAwQ0QnLAotICAgICAgICBJY2lyYzogJ1x1MDBDRScsCi0gICAgICAgIEl1bWw6
ICdcdTAwQ0YnLAotICAgICAgICBFVEg6ICdcdTAwRDAnLAotICAgICAgICBOdGlsZGU6ICdcdTAw
RDEnLAotICAgICAgICBPZ3JhdmU6ICdcdTAwRDInLAotICAgICAgICBPYWN1dGU6ICdcdTAwRDMn
LAotICAgICAgICBPY2lyYzogJ1x1MDBENCcsCi0gICAgICAgIE90aWxkZTogJ1x1MDBENScsCi0g
ICAgICAgIE91bWw6ICdcdTAwRDYnLAotICAgICAgICB0aW1lczogJ1x1MDBENycsCi0gICAgICAg
IE9zbGFzaDogJ1x1MDBEOCcsCi0gICAgICAgIFVncmF2ZTogJ1x1MDBEOScsCi0gICAgICAgIFVh
Y3V0ZTogJ1x1MDBEQScsCi0gICAgICAgIFVjaXJjOiAnXHUwMERCJywKLSAgICAgICAgVXVtbDog
J1x1MDBEQycsCi0gICAgICAgIFlhY3V0ZTogJ1x1MDBERCcsCi0gICAgICAgIFRIT1JOOiAnXHUw
MERFJywKLSAgICAgICAgc3psaWc6ICdcdTAwREYnLAotICAgICAgICBhZ3JhdmU6ICdcdTAwRTAn
LAotICAgICAgICBhYWN1dGU6ICdcdTAwRTEnLAotICAgICAgICBhY2lyYzogJ1x1MDBFMicsCi0g
ICAgICAgIGF0aWxkZTogJ1x1MDBFMycsCi0gICAgICAgIGF1bWw6ICdcdTAwRTQnLAotICAgICAg
ICBhcmluZzogJ1x1MDBFNScsCi0gICAgICAgIGFlbGlnOiAnXHUwMEU2JywKLSAgICAgICAgY2Nl
ZGlsOiAnXHUwMEU3JywKLSAgICAgICAgZWdyYXZlOiAnXHUwMEU4JywKLSAgICAgICAgZWFjdXRl
OiAnXHUwMEU5JywKLSAgICAgICAgZWNpcmM6ICdcdTAwRUEnLAotICAgICAgICBldW1sOiAnXHUw
MEVCJywKLSAgICAgICAgaWdyYXZlOiAnXHUwMEVDJywKLSAgICAgICAgaWFjdXRlOiAnXHUwMEVE
JywKLSAgICAgICAgaWNpcmM6ICdcdTAwRUUnLAotICAgICAgICBpdW1sOiAnXHUwMEVGJywKLSAg
ICAgICAgZXRoOiAnXHUwMEYwJywKLSAgICAgICAgbnRpbGRlOiAnXHUwMEYxJywKLSAgICAgICAg
b2dyYXZlOiAnXHUwMEYyJywKLSAgICAgICAgb2FjdXRlOiAnXHUwMEYzJywKLSAgICAgICAgb2Np
cmM6ICdcdTAwRjQnLAotICAgICAgICBvdGlsZGU6ICdcdTAwRjUnLAotICAgICAgICBvdW1sOiAn
XHUwMEY2JywKLSAgICAgICAgZGl2aWRlOiAnXHUwMEY3JywKLSAgICAgICAgb3NsYXNoOiAnXHUw
MEY4JywKLSAgICAgICAgdWdyYXZlOiAnXHUwMEY5JywKLSAgICAgICAgdWFjdXRlOiAnXHUwMEZB
JywKLSAgICAgICAgdWNpcmM6ICdcdTAwRkInLAotICAgICAgICB1dW1sOiAnXHUwMEZDJywKLSAg
ICAgICAgeWFjdXRlOiAnXHUwMEZEJywKLSAgICAgICAgdGhvcm46ICdcdTAwRkUnLAotICAgICAg
ICB5dW1sOiAnXHUwMEZGJywKLSAgICAgICAgT0VsaWc6ICdcdTAxNTInLAotICAgICAgICBvZWxp
ZzogJ1x1MDE1MycsCi0gICAgICAgIFNjYXJvbjogJ1x1MDE2MCcsCi0gICAgICAgIHNjYXJvbjog
J1x1MDE2MScsCi0gICAgICAgIFl1bWw6ICdcdTAxNzgnLAotICAgICAgICBmbm9mOiAnXHUwMTky
JywKLSAgICAgICAgY2lyYzogJ1x1MDJDNicsCi0gICAgICAgIHRpbGRlOiAnXHUwMkRDJywKLSAg
ICAgICAgQWxwaGE6ICdcdTAzOTEnLAotICAgICAgICBCZXRhOiAnXHUwMzkyJywKLSAgICAgICAg
R2FtbWE6ICdcdTAzOTMnLAotICAgICAgICBEZWx0YTogJ1x1MDM5NCcsCi0gICAgICAgIEVwc2ls
b246ICdcdTAzOTUnLAotICAgICAgICBaZXRhOiAnXHUwMzk2JywKLSAgICAgICAgRXRhOiAnXHUw
Mzk3JywKLSAgICAgICAgVGhldGE6ICdcdTAzOTgnLAotICAgICAgICBJb3RhOiAnXHUwMzk5JywK
LSAgICAgICAgS2FwcGE6ICdcdTAzOUEnLAotICAgICAgICBMYW1iZGE6ICdcdTAzOUInLAotICAg
ICAgICBNdTogJ1x1MDM5QycsCi0gICAgICAgIE51OiAnXHUwMzlEJywKLSAgICAgICAgWGk6ICdc
dTAzOUUnLAotICAgICAgICBPbWljcm9uOiAnXHUwMzlGJywKLSAgICAgICAgUGk6ICdcdTAzQTAn
LAotICAgICAgICBSaG86ICdcdTAzQTEnLAotICAgICAgICBTaWdtYTogJ1x1MDNBMycsCi0gICAg
ICAgIFRhdTogJ1x1MDNBNCcsCi0gICAgICAgIFVwc2lsb246ICdcdTAzQTUnLAotICAgICAgICBQ
aGk6ICdcdTAzQTYnLAotICAgICAgICBDaGk6ICdcdTAzQTcnLAotICAgICAgICBQc2k6ICdcdTAz
QTgnLAotICAgICAgICBPbWVnYTogJ1x1MDNBOScsCi0gICAgICAgIGFscGhhOiAnXHUwM0IxJywK
LSAgICAgICAgYmV0YTogJ1x1MDNCMicsCi0gICAgICAgIGdhbW1hOiAnXHUwM0IzJywKLSAgICAg
ICAgZGVsdGE6ICdcdTAzQjQnLAotICAgICAgICBlcHNpbG9uOiAnXHUwM0I1JywKLSAgICAgICAg
emV0YTogJ1x1MDNCNicsCi0gICAgICAgIGV0YTogJ1x1MDNCNycsCi0gICAgICAgIHRoZXRhOiAn
XHUwM0I4JywKLSAgICAgICAgaW90YTogJ1x1MDNCOScsCi0gICAgICAgIGthcHBhOiAnXHUwM0JB
JywKLSAgICAgICAgbGFtYmRhOiAnXHUwM0JCJywKLSAgICAgICAgbXU6ICdcdTAzQkMnLAotICAg
ICAgICBudTogJ1x1MDNCRCcsCi0gICAgICAgIHhpOiAnXHUwM0JFJywKLSAgICAgICAgb21pY3Jv
bjogJ1x1MDNCRicsCi0gICAgICAgIHBpOiAnXHUwM0MwJywKLSAgICAgICAgcmhvOiAnXHUwM0Mx
JywKLSAgICAgICAgc2lnbWFmOiAnXHUwM0MyJywKLSAgICAgICAgc2lnbWE6ICdcdTAzQzMnLAot
ICAgICAgICB0YXU6ICdcdTAzQzQnLAotICAgICAgICB1cHNpbG9uOiAnXHUwM0M1JywKLSAgICAg
ICAgcGhpOiAnXHUwM0M2JywKLSAgICAgICAgY2hpOiAnXHUwM0M3JywKLSAgICAgICAgcHNpOiAn
XHUwM0M4JywKLSAgICAgICAgb21lZ2E6ICdcdTAzQzknLAotICAgICAgICB0aGV0YXN5bTogJ1x1
MDNEMScsCi0gICAgICAgIHVwc2loOiAnXHUwM0QyJywKLSAgICAgICAgcGl2OiAnXHUwM0Q2JywK
LSAgICAgICAgZW5zcDogJ1x1MjAwMicsCi0gICAgICAgIGVtc3A6ICdcdTIwMDMnLAotICAgICAg
ICB0aGluc3A6ICdcdTIwMDknLAotICAgICAgICB6d25qOiAnXHUyMDBDJywKLSAgICAgICAgendq
OiAnXHUyMDBEJywKLSAgICAgICAgbHJtOiAnXHUyMDBFJywKLSAgICAgICAgcmxtOiAnXHUyMDBG
JywKLSAgICAgICAgbmRhc2g6ICdcdTIwMTMnLAotICAgICAgICBtZGFzaDogJ1x1MjAxNCcsCi0g
ICAgICAgIGxzcXVvOiAnXHUyMDE4JywKLSAgICAgICAgcnNxdW86ICdcdTIwMTknLAotICAgICAg
ICBzYnF1bzogJ1x1MjAxQScsCi0gICAgICAgIGxkcXVvOiAnXHUyMDFDJywKLSAgICAgICAgcmRx
dW86ICdcdTIwMUQnLAotICAgICAgICBiZHF1bzogJ1x1MjAxRScsCi0gICAgICAgIGRhZ2dlcjog
J1x1MjAyMCcsCi0gICAgICAgIERhZ2dlcjogJ1x1MjAyMScsCi0gICAgICAgIGJ1bGw6ICdcdTIw
MjInLAotICAgICAgICBoZWxsaXA6ICdcdTIwMjYnLAotICAgICAgICBwZXJtaWw6ICdcdTIwMzAn
LAotICAgICAgICBwcmltZTogJ1x1MjAzMicsCi0gICAgICAgIFByaW1lOiAnXHUyMDMzJywKLSAg
ICAgICAgbHNhcXVvOiAnXHUyMDM5JywKLSAgICAgICAgcnNhcXVvOiAnXHUyMDNBJywKLSAgICAg
ICAgb2xpbmU6ICdcdTIwM0UnLAotICAgICAgICBmcmFzbDogJ1x1MjA0NCcsCi0gICAgICAgIGV1
cm86ICdcdTIwQUMnLAotICAgICAgICBpbWFnZTogJ1x1MjExMScsCi0gICAgICAgIHdlaWVycDog
J1x1MjExOCcsCi0gICAgICAgIHJlYWw6ICdcdTIxMUMnLAotICAgICAgICB0cmFkZTogJ1x1MjEy
MicsCi0gICAgICAgIGFsZWZzeW06ICdcdTIxMzUnLAotICAgICAgICBsYXJyOiAnXHUyMTkwJywK
LSAgICAgICAgdWFycjogJ1x1MjE5MScsCi0gICAgICAgIHJhcnI6ICdcdTIxOTInLAotICAgICAg
ICBkYXJyOiAnXHUyMTkzJywKLSAgICAgICAgaGFycjogJ1x1MjE5NCcsCi0gICAgICAgIGNyYXJy
OiAnXHUyMUI1JywKLSAgICAgICAgbEFycjogJ1x1MjFEMCcsCi0gICAgICAgIHVBcnI6ICdcdTIx
RDEnLAotICAgICAgICByQXJyOiAnXHUyMUQyJywKLSAgICAgICAgZEFycjogJ1x1MjFEMycsCi0g
ICAgICAgIGhBcnI6ICdcdTIxRDQnLAotICAgICAgICBmb3JhbGw6ICdcdTIyMDAnLAotICAgICAg
ICBwYXJ0OiAnXHUyMjAyJywKLSAgICAgICAgZXhpc3Q6ICdcdTIyMDMnLAotICAgICAgICBlbXB0
eTogJ1x1MjIwNScsCi0gICAgICAgIG5hYmxhOiAnXHUyMjA3JywKLSAgICAgICAgaXNpbjogJ1x1
MjIwOCcsCi0gICAgICAgIG5vdGluOiAnXHUyMjA5JywKLSAgICAgICAgbmk6ICdcdTIyMEInLAot
ICAgICAgICBwcm9kOiAnXHUyMjBGJywKLSAgICAgICAgc3VtOiAnXHUyMjExJywKLSAgICAgICAg
bWludXM6ICdcdTIyMTInLAotICAgICAgICBsb3dhc3Q6ICdcdTIyMTcnLAotICAgICAgICByYWRp
YzogJ1x1MjIxQScsCi0gICAgICAgIHByb3A6ICdcdTIyMUQnLAotICAgICAgICBpbmZpbjogJ1x1
MjIxRScsCi0gICAgICAgIGFuZzogJ1x1MjIyMCcsCi0gICAgICAgIGFuZDogJ1x1MjIyNycsCi0g
ICAgICAgIG9yOiAnXHUyMjI4JywKLSAgICAgICAgY2FwOiAnXHUyMjI5JywKLSAgICAgICAgY3Vw
OiAnXHUyMjJBJywKLSAgICAgICAgaW50OiAnXHUyMjJCJywKLSAgICAgICAgdGhlcmU0OiAnXHUy
MjM0JywKLSAgICAgICAgc2ltOiAnXHUyMjNDJywKLSAgICAgICAgY29uZzogJ1x1MjI0NScsCi0g
ICAgICAgIGFzeW1wOiAnXHUyMjQ4JywKLSAgICAgICAgbmU6ICdcdTIyNjAnLAotICAgICAgICBl
cXVpdjogJ1x1MjI2MScsCi0gICAgICAgIGxlOiAnXHUyMjY0JywKLSAgICAgICAgZ2U6ICdcdTIy
NjUnLAotICAgICAgICBzdWI6ICdcdTIyODInLAotICAgICAgICBzdXA6ICdcdTIyODMnLAotICAg
ICAgICBuc3ViOiAnXHUyMjg0JywKLSAgICAgICAgc3ViZTogJ1x1MjI4NicsCi0gICAgICAgIHN1
cGU6ICdcdTIyODcnLAotICAgICAgICBvcGx1czogJ1x1MjI5NScsCi0gICAgICAgIG90aW1lczog
J1x1MjI5NycsCi0gICAgICAgIHBlcnA6ICdcdTIyQTUnLAotICAgICAgICBzZG90OiAnXHUyMkM1
JywKLSAgICAgICAgbGNlaWw6ICdcdTIzMDgnLAotICAgICAgICByY2VpbDogJ1x1MjMwOScsCi0g
ICAgICAgIGxmbG9vcjogJ1x1MjMwQScsCi0gICAgICAgIHJmbG9vcjogJ1x1MjMwQicsCi0gICAg
ICAgIGxvejogJ1x1MjVDQScsCi0gICAgICAgIHNwYWRlczogJ1x1MjY2MCcsCi0gICAgICAgIGNs
dWJzOiAnXHUyNjYzJywKLSAgICAgICAgaGVhcnRzOiAnXHUyNjY1JywKLSAgICAgICAgZGlhbXM6
ICdcdTI2NjYnLAotICAgICAgICBsYW5nOiAnXHUyN0U4JywKLSAgICAgICAgcmFuZzogJ1x1MjdF
OScKLSAgICB9OworCSJ1c2Ugc3RyaWN0IjsKKwkvLyBHZW5lcmF0ZWQgYnkgZ2VuZXJhdGUteGh0
bWwtZW50aXRpZXMuanMuIERPIE5PVCBNT0RJRlkhCisJT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4
cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKKwlleHBvcnRzLlhIVE1MRW50
aXRpZXMgPSB7CisJICAgIHF1b3Q6ICdcdTAwMjInLAorCSAgICBhbXA6ICdcdTAwMjYnLAorCSAg
ICBhcG9zOiAnXHUwMDI3JywKKwkgICAgZ3Q6ICdcdTAwM0UnLAorCSAgICBuYnNwOiAnXHUwMEEw
JywKKwkgICAgaWV4Y2w6ICdcdTAwQTEnLAorCSAgICBjZW50OiAnXHUwMEEyJywKKwkgICAgcG91
bmQ6ICdcdTAwQTMnLAorCSAgICBjdXJyZW46ICdcdTAwQTQnLAorCSAgICB5ZW46ICdcdTAwQTUn
LAorCSAgICBicnZiYXI6ICdcdTAwQTYnLAorCSAgICBzZWN0OiAnXHUwMEE3JywKKwkgICAgdW1s
OiAnXHUwMEE4JywKKwkgICAgY29weTogJ1x1MDBBOScsCisJICAgIG9yZGY6ICdcdTAwQUEnLAor
CSAgICBsYXF1bzogJ1x1MDBBQicsCisJICAgIG5vdDogJ1x1MDBBQycsCisJICAgIHNoeTogJ1x1
MDBBRCcsCisJICAgIHJlZzogJ1x1MDBBRScsCisJICAgIG1hY3I6ICdcdTAwQUYnLAorCSAgICBk
ZWc6ICdcdTAwQjAnLAorCSAgICBwbHVzbW46ICdcdTAwQjEnLAorCSAgICBzdXAyOiAnXHUwMEIy
JywKKwkgICAgc3VwMzogJ1x1MDBCMycsCisJICAgIGFjdXRlOiAnXHUwMEI0JywKKwkgICAgbWlj
cm86ICdcdTAwQjUnLAorCSAgICBwYXJhOiAnXHUwMEI2JywKKwkgICAgbWlkZG90OiAnXHUwMEI3
JywKKwkgICAgY2VkaWw6ICdcdTAwQjgnLAorCSAgICBzdXAxOiAnXHUwMEI5JywKKwkgICAgb3Jk
bTogJ1x1MDBCQScsCisJICAgIHJhcXVvOiAnXHUwMEJCJywKKwkgICAgZnJhYzE0OiAnXHUwMEJD
JywKKwkgICAgZnJhYzEyOiAnXHUwMEJEJywKKwkgICAgZnJhYzM0OiAnXHUwMEJFJywKKwkgICAg
aXF1ZXN0OiAnXHUwMEJGJywKKwkgICAgQWdyYXZlOiAnXHUwMEMwJywKKwkgICAgQWFjdXRlOiAn
XHUwMEMxJywKKwkgICAgQWNpcmM6ICdcdTAwQzInLAorCSAgICBBdGlsZGU6ICdcdTAwQzMnLAor
CSAgICBBdW1sOiAnXHUwMEM0JywKKwkgICAgQXJpbmc6ICdcdTAwQzUnLAorCSAgICBBRWxpZzog
J1x1MDBDNicsCisJICAgIENjZWRpbDogJ1x1MDBDNycsCisJICAgIEVncmF2ZTogJ1x1MDBDOCcs
CisJICAgIEVhY3V0ZTogJ1x1MDBDOScsCisJICAgIEVjaXJjOiAnXHUwMENBJywKKwkgICAgRXVt
bDogJ1x1MDBDQicsCisJICAgIElncmF2ZTogJ1x1MDBDQycsCisJICAgIElhY3V0ZTogJ1x1MDBD
RCcsCisJICAgIEljaXJjOiAnXHUwMENFJywKKwkgICAgSXVtbDogJ1x1MDBDRicsCisJICAgIEVU
SDogJ1x1MDBEMCcsCisJICAgIE50aWxkZTogJ1x1MDBEMScsCisJICAgIE9ncmF2ZTogJ1x1MDBE
MicsCisJICAgIE9hY3V0ZTogJ1x1MDBEMycsCisJICAgIE9jaXJjOiAnXHUwMEQ0JywKKwkgICAg
T3RpbGRlOiAnXHUwMEQ1JywKKwkgICAgT3VtbDogJ1x1MDBENicsCisJICAgIHRpbWVzOiAnXHUw
MEQ3JywKKwkgICAgT3NsYXNoOiAnXHUwMEQ4JywKKwkgICAgVWdyYXZlOiAnXHUwMEQ5JywKKwkg
ICAgVWFjdXRlOiAnXHUwMERBJywKKwkgICAgVWNpcmM6ICdcdTAwREInLAorCSAgICBVdW1sOiAn
XHUwMERDJywKKwkgICAgWWFjdXRlOiAnXHUwMEREJywKKwkgICAgVEhPUk46ICdcdTAwREUnLAor
CSAgICBzemxpZzogJ1x1MDBERicsCisJICAgIGFncmF2ZTogJ1x1MDBFMCcsCisJICAgIGFhY3V0
ZTogJ1x1MDBFMScsCisJICAgIGFjaXJjOiAnXHUwMEUyJywKKwkgICAgYXRpbGRlOiAnXHUwMEUz
JywKKwkgICAgYXVtbDogJ1x1MDBFNCcsCisJICAgIGFyaW5nOiAnXHUwMEU1JywKKwkgICAgYWVs
aWc6ICdcdTAwRTYnLAorCSAgICBjY2VkaWw6ICdcdTAwRTcnLAorCSAgICBlZ3JhdmU6ICdcdTAw
RTgnLAorCSAgICBlYWN1dGU6ICdcdTAwRTknLAorCSAgICBlY2lyYzogJ1x1MDBFQScsCisJICAg
IGV1bWw6ICdcdTAwRUInLAorCSAgICBpZ3JhdmU6ICdcdTAwRUMnLAorCSAgICBpYWN1dGU6ICdc
dTAwRUQnLAorCSAgICBpY2lyYzogJ1x1MDBFRScsCisJICAgIGl1bWw6ICdcdTAwRUYnLAorCSAg
ICBldGg6ICdcdTAwRjAnLAorCSAgICBudGlsZGU6ICdcdTAwRjEnLAorCSAgICBvZ3JhdmU6ICdc
dTAwRjInLAorCSAgICBvYWN1dGU6ICdcdTAwRjMnLAorCSAgICBvY2lyYzogJ1x1MDBGNCcsCisJ
ICAgIG90aWxkZTogJ1x1MDBGNScsCisJICAgIG91bWw6ICdcdTAwRjYnLAorCSAgICBkaXZpZGU6
ICdcdTAwRjcnLAorCSAgICBvc2xhc2g6ICdcdTAwRjgnLAorCSAgICB1Z3JhdmU6ICdcdTAwRjkn
LAorCSAgICB1YWN1dGU6ICdcdTAwRkEnLAorCSAgICB1Y2lyYzogJ1x1MDBGQicsCisJICAgIHV1
bWw6ICdcdTAwRkMnLAorCSAgICB5YWN1dGU6ICdcdTAwRkQnLAorCSAgICB0aG9ybjogJ1x1MDBG
RScsCisJICAgIHl1bWw6ICdcdTAwRkYnLAorCSAgICBPRWxpZzogJ1x1MDE1MicsCisJICAgIG9l
bGlnOiAnXHUwMTUzJywKKwkgICAgU2Nhcm9uOiAnXHUwMTYwJywKKwkgICAgc2Nhcm9uOiAnXHUw
MTYxJywKKwkgICAgWXVtbDogJ1x1MDE3OCcsCisJICAgIGZub2Y6ICdcdTAxOTInLAorCSAgICBj
aXJjOiAnXHUwMkM2JywKKwkgICAgdGlsZGU6ICdcdTAyREMnLAorCSAgICBBbHBoYTogJ1x1MDM5
MScsCisJICAgIEJldGE6ICdcdTAzOTInLAorCSAgICBHYW1tYTogJ1x1MDM5MycsCisJICAgIERl
bHRhOiAnXHUwMzk0JywKKwkgICAgRXBzaWxvbjogJ1x1MDM5NScsCisJICAgIFpldGE6ICdcdTAz
OTYnLAorCSAgICBFdGE6ICdcdTAzOTcnLAorCSAgICBUaGV0YTogJ1x1MDM5OCcsCisJICAgIElv
dGE6ICdcdTAzOTknLAorCSAgICBLYXBwYTogJ1x1MDM5QScsCisJICAgIExhbWJkYTogJ1x1MDM5
QicsCisJICAgIE11OiAnXHUwMzlDJywKKwkgICAgTnU6ICdcdTAzOUQnLAorCSAgICBYaTogJ1x1
MDM5RScsCisJICAgIE9taWNyb246ICdcdTAzOUYnLAorCSAgICBQaTogJ1x1MDNBMCcsCisJICAg
IFJobzogJ1x1MDNBMScsCisJICAgIFNpZ21hOiAnXHUwM0EzJywKKwkgICAgVGF1OiAnXHUwM0E0
JywKKwkgICAgVXBzaWxvbjogJ1x1MDNBNScsCisJICAgIFBoaTogJ1x1MDNBNicsCisJICAgIENo
aTogJ1x1MDNBNycsCisJICAgIFBzaTogJ1x1MDNBOCcsCisJICAgIE9tZWdhOiAnXHUwM0E5JywK
KwkgICAgYWxwaGE6ICdcdTAzQjEnLAorCSAgICBiZXRhOiAnXHUwM0IyJywKKwkgICAgZ2FtbWE6
ICdcdTAzQjMnLAorCSAgICBkZWx0YTogJ1x1MDNCNCcsCisJICAgIGVwc2lsb246ICdcdTAzQjUn
LAorCSAgICB6ZXRhOiAnXHUwM0I2JywKKwkgICAgZXRhOiAnXHUwM0I3JywKKwkgICAgdGhldGE6
ICdcdTAzQjgnLAorCSAgICBpb3RhOiAnXHUwM0I5JywKKwkgICAga2FwcGE6ICdcdTAzQkEnLAor
CSAgICBsYW1iZGE6ICdcdTAzQkInLAorCSAgICBtdTogJ1x1MDNCQycsCisJICAgIG51OiAnXHUw
M0JEJywKKwkgICAgeGk6ICdcdTAzQkUnLAorCSAgICBvbWljcm9uOiAnXHUwM0JGJywKKwkgICAg
cGk6ICdcdTAzQzAnLAorCSAgICByaG86ICdcdTAzQzEnLAorCSAgICBzaWdtYWY6ICdcdTAzQzIn
LAorCSAgICBzaWdtYTogJ1x1MDNDMycsCisJICAgIHRhdTogJ1x1MDNDNCcsCisJICAgIHVwc2ls
b246ICdcdTAzQzUnLAorCSAgICBwaGk6ICdcdTAzQzYnLAorCSAgICBjaGk6ICdcdTAzQzcnLAor
CSAgICBwc2k6ICdcdTAzQzgnLAorCSAgICBvbWVnYTogJ1x1MDNDOScsCisJICAgIHRoZXRhc3lt
OiAnXHUwM0QxJywKKwkgICAgdXBzaWg6ICdcdTAzRDInLAorCSAgICBwaXY6ICdcdTAzRDYnLAor
CSAgICBlbnNwOiAnXHUyMDAyJywKKwkgICAgZW1zcDogJ1x1MjAwMycsCisJICAgIHRoaW5zcDog
J1x1MjAwOScsCisJICAgIHp3bmo6ICdcdTIwMEMnLAorCSAgICB6d2o6ICdcdTIwMEQnLAorCSAg
ICBscm06ICdcdTIwMEUnLAorCSAgICBybG06ICdcdTIwMEYnLAorCSAgICBuZGFzaDogJ1x1MjAx
MycsCisJICAgIG1kYXNoOiAnXHUyMDE0JywKKwkgICAgbHNxdW86ICdcdTIwMTgnLAorCSAgICBy
c3F1bzogJ1x1MjAxOScsCisJICAgIHNicXVvOiAnXHUyMDFBJywKKwkgICAgbGRxdW86ICdcdTIw
MUMnLAorCSAgICByZHF1bzogJ1x1MjAxRCcsCisJICAgIGJkcXVvOiAnXHUyMDFFJywKKwkgICAg
ZGFnZ2VyOiAnXHUyMDIwJywKKwkgICAgRGFnZ2VyOiAnXHUyMDIxJywKKwkgICAgYnVsbDogJ1x1
MjAyMicsCisJICAgIGhlbGxpcDogJ1x1MjAyNicsCisJICAgIHBlcm1pbDogJ1x1MjAzMCcsCisJ
ICAgIHByaW1lOiAnXHUyMDMyJywKKwkgICAgUHJpbWU6ICdcdTIwMzMnLAorCSAgICBsc2FxdW86
ICdcdTIwMzknLAorCSAgICByc2FxdW86ICdcdTIwM0EnLAorCSAgICBvbGluZTogJ1x1MjAzRScs
CisJICAgIGZyYXNsOiAnXHUyMDQ0JywKKwkgICAgZXVybzogJ1x1MjBBQycsCisJICAgIGltYWdl
OiAnXHUyMTExJywKKwkgICAgd2VpZXJwOiAnXHUyMTE4JywKKwkgICAgcmVhbDogJ1x1MjExQycs
CisJICAgIHRyYWRlOiAnXHUyMTIyJywKKwkgICAgYWxlZnN5bTogJ1x1MjEzNScsCisJICAgIGxh
cnI6ICdcdTIxOTAnLAorCSAgICB1YXJyOiAnXHUyMTkxJywKKwkgICAgcmFycjogJ1x1MjE5Mics
CisJICAgIGRhcnI6ICdcdTIxOTMnLAorCSAgICBoYXJyOiAnXHUyMTk0JywKKwkgICAgY3JhcnI6
ICdcdTIxQjUnLAorCSAgICBsQXJyOiAnXHUyMUQwJywKKwkgICAgdUFycjogJ1x1MjFEMScsCisJ
ICAgIHJBcnI6ICdcdTIxRDInLAorCSAgICBkQXJyOiAnXHUyMUQzJywKKwkgICAgaEFycjogJ1x1
MjFENCcsCisJICAgIGZvcmFsbDogJ1x1MjIwMCcsCisJICAgIHBhcnQ6ICdcdTIyMDInLAorCSAg
ICBleGlzdDogJ1x1MjIwMycsCisJICAgIGVtcHR5OiAnXHUyMjA1JywKKwkgICAgbmFibGE6ICdc
dTIyMDcnLAorCSAgICBpc2luOiAnXHUyMjA4JywKKwkgICAgbm90aW46ICdcdTIyMDknLAorCSAg
ICBuaTogJ1x1MjIwQicsCisJICAgIHByb2Q6ICdcdTIyMEYnLAorCSAgICBzdW06ICdcdTIyMTEn
LAorCSAgICBtaW51czogJ1x1MjIxMicsCisJICAgIGxvd2FzdDogJ1x1MjIxNycsCisJICAgIHJh
ZGljOiAnXHUyMjFBJywKKwkgICAgcHJvcDogJ1x1MjIxRCcsCisJICAgIGluZmluOiAnXHUyMjFF
JywKKwkgICAgYW5nOiAnXHUyMjIwJywKKwkgICAgYW5kOiAnXHUyMjI3JywKKwkgICAgb3I6ICdc
dTIyMjgnLAorCSAgICBjYXA6ICdcdTIyMjknLAorCSAgICBjdXA6ICdcdTIyMkEnLAorCSAgICBp
bnQ6ICdcdTIyMkInLAorCSAgICB0aGVyZTQ6ICdcdTIyMzQnLAorCSAgICBzaW06ICdcdTIyM0Mn
LAorCSAgICBjb25nOiAnXHUyMjQ1JywKKwkgICAgYXN5bXA6ICdcdTIyNDgnLAorCSAgICBuZTog
J1x1MjI2MCcsCisJICAgIGVxdWl2OiAnXHUyMjYxJywKKwkgICAgbGU6ICdcdTIyNjQnLAorCSAg
ICBnZTogJ1x1MjI2NScsCisJICAgIHN1YjogJ1x1MjI4MicsCisJICAgIHN1cDogJ1x1MjI4Mycs
CisJICAgIG5zdWI6ICdcdTIyODQnLAorCSAgICBzdWJlOiAnXHUyMjg2JywKKwkgICAgc3VwZTog
J1x1MjI4NycsCisJICAgIG9wbHVzOiAnXHUyMjk1JywKKwkgICAgb3RpbWVzOiAnXHUyMjk3JywK
KwkgICAgcGVycDogJ1x1MjJBNScsCisJICAgIHNkb3Q6ICdcdTIyQzUnLAorCSAgICBsY2VpbDog
J1x1MjMwOCcsCisJICAgIHJjZWlsOiAnXHUyMzA5JywKKwkgICAgbGZsb29yOiAnXHUyMzBBJywK
KwkgICAgcmZsb29yOiAnXHUyMzBCJywKKwkgICAgbG96OiAnXHUyNUNBJywKKwkgICAgc3BhZGVz
OiAnXHUyNjYwJywKKwkgICAgY2x1YnM6ICdcdTI2NjMnLAorCSAgICBoZWFydHM6ICdcdTI2NjUn
LAorCSAgICBkaWFtczogJ1x1MjY2NicsCisJICAgIGxhbmc6ICdcdTI3RTgnLAorCSAgICByYW5n
OiAnXHUyN0U5JworCX07CiAKIAogLyoqKi8gfSwKIC8qIDE1ICovCiAvKioqLyBmdW5jdGlvbiht
b2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKIAotICAgICJ1c2Ugc3RyaWN0
IjsKLSAgICB2YXIgZXJyb3JfaGFuZGxlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7Ci0g
ICAgdmFyIHNjYW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpOwotICAgIHZhciB0b2tl
bl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7Ci0gICAgdmFyIFJlYWRlciA9IChmdW5jdGlv
biAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFJlYWRlcigpIHsKLSAgICAgICAgICAgIHRoaXMudmFs
dWVzID0gW107Ci0gICAgICAgICAgICB0aGlzLmN1cmx5ID0gdGhpcy5wYXJlbiA9IC0xOwotICAg
ICAgICB9Ci0gICAgICAgIC8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBvZiB0aG9zZSB0b2tl
bnMgaXMgYW4gZXhwcmVzc2lvbi4KLSAgICAgICAgUmVhZGVyLnByb3RvdHlwZS5iZWZvcmVGdW5j
dGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAodCkgewotICAgICAgICAgICAgcmV0dXJuIFsnKCcs
ICd7JywgJ1snLCAnaW4nLCAndHlwZW9mJywgJ2luc3RhbmNlb2YnLCAnbmV3JywKLSAgICAgICAg
ICAgICAgICAncmV0dXJuJywgJ2Nhc2UnLCAnZGVsZXRlJywgJ3Rocm93JywgJ3ZvaWQnLAotICAg
ICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3JzCi0gICAgICAgICAgICAgICAgJz0n
LCAnKz0nLCAnLT0nLCAnKj0nLCAnKio9JywgJy89JywgJyU9JywgJzw8PScsICc+Pj0nLCAnPj4+
PScsCi0gICAgICAgICAgICAgICAgJyY9JywgJ3w9JywgJ149JywgJywnLAotICAgICAgICAgICAg
ICAgIC8vIGJpbmFyeS91bmFyeSBvcGVyYXRvcnMKLSAgICAgICAgICAgICAgICAnKycsICctJywg
JyonLCAnKionLCAnLycsICclJywgJysrJywgJy0tJywgJzw8JywgJz4+JywgJz4+PicsICcmJywK
LSAgICAgICAgICAgICAgICAnfCcsICdeJywgJyEnLCAnficsICcmJicsICd8fCcsICc/JywgJzon
LCAnPT09JywgJz09JywgJz49JywKLSAgICAgICAgICAgICAgICAnPD0nLCAnPCcsICc+JywgJyE9
JywgJyE9PSddLmluZGV4T2YodCkgPj0gMDsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gRGV0ZXJt
aW5lIGlmIGZvcndhcmQgc2xhc2ggKC8pIGlzIGFuIG9wZXJhdG9yIG9yIHBhcnQgb2YgYSByZWd1
bGFyIGV4cHJlc3Npb24KLSAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc3dl
ZXQuanMvd2lraS9kZXNpZ24KLSAgICAgICAgUmVhZGVyLnByb3RvdHlwZS5pc1JlZ2V4U3RhcnQg
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXMgPSB0aGlzLnZhbHVlc1t0
aGlzLnZhbHVlcy5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgIHZhciByZWdleCA9IChwcmV2aW91
cyAhPT0gbnVsbCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHByZXZpb3VzKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSAndGhpcyc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnXSc6Ci0gICAgICAgICAg
ICAgICAgICAgIHJlZ2V4ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgJyknOgotICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2sgPSB0
aGlzLnZhbHVlc1t0aGlzLnBhcmVuIC0gMV07Ci0gICAgICAgICAgICAgICAgICAgIHJlZ2V4ID0g
KGNoZWNrID09PSAnaWYnIHx8IGNoZWNrID09PSAnd2hpbGUnIHx8IGNoZWNrID09PSAnZm9yJyB8
fCBjaGVjayA9PT0gJ3dpdGgnKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSAnfSc6Ci0gICAgICAgICAgICAgICAgICAgIC8vIERpdmlkaW5nIGEgZnVu
Y3Rpb24gYnkgYW55dGhpbmcgbWFrZXMgbGl0dGxlIHNlbnNlLAotICAgICAgICAgICAgICAgICAg
ICAvLyBidXQgd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhhdC4KLSAgICAgICAgICAgICAgICAgICAg
cmVnZXggPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzW3RoaXMu
Y3VybHkgLSAzXSA9PT0gJ2Z1bmN0aW9uJykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QW5vbnltb3VzIGZ1bmN0aW9uLCBlLmcuIGZ1bmN0aW9uKCl7fSAvNDIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBjaGVja18xID0gdGhpcy52YWx1ZXNbdGhpcy5jdXJseSAtIDRdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVnZXggPSBjaGVja18xID8gIXRoaXMuYmVmb3JlRnVuY3Rp
b25FeHByZXNzaW9uKGNoZWNrXzEpIDogZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52YWx1ZXNbdGhpcy5jdXJseSAtIDRdID09
PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlv
biwgZS5nLiBmdW5jdGlvbiBmKCl7fSAvNDIvCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIg
Y2hlY2tfMiA9IHRoaXMudmFsdWVzW3RoaXMuY3VybHkgLSA1XTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlZ2V4ID0gY2hlY2tfMiA/ICF0aGlzLmJlZm9yZUZ1bmN0aW9uRXhwcmVzc2lvbihj
aGVja18yKSA6IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVnZXg7Ci0gICAgICAg
IH07Ci0gICAgICAgIFJlYWRlci5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uICh0b2tlbikgewot
ICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLyB8fCB0b2tl
bi50eXBlID09PSA0IC8qIEtleXdvcmQgKi8pIHsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW4u
dmFsdWUgPT09ICd7JykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cmx5ID0gdGhpcy52
YWx1ZXMubGVuZ3RoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlm
ICh0b2tlbi52YWx1ZSA9PT0gJygnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW4g
PSB0aGlzLnZhbHVlcy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHRoaXMudmFsdWVzLnB1c2godG9rZW4udmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaChudWxsKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIFJlYWRlcjsKLSAgICB9KCkpOwot
ICAgIHZhciBUb2tlbml6ZXIgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBUb2tl
bml6ZXIoY29kZSwgY29uZmlnKSB7Ci0gICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlciA9IG5l
dyBlcnJvcl9oYW5kbGVyXzEuRXJyb3JIYW5kbGVyKCk7Ci0gICAgICAgICAgICB0aGlzLmVycm9y
SGFuZGxlci50b2xlcmFudCA9IGNvbmZpZyA/ICh0eXBlb2YgY29uZmlnLnRvbGVyYW50ID09PSAn
Ym9vbGVhbicgJiYgY29uZmlnLnRvbGVyYW50KSA6IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5z
Y2FubmVyID0gbmV3IHNjYW5uZXJfMS5TY2FubmVyKGNvZGUsIHRoaXMuZXJyb3JIYW5kbGVyKTsK
LSAgICAgICAgICAgIHRoaXMuc2Nhbm5lci50cmFja0NvbW1lbnQgPSBjb25maWcgPyAodHlwZW9m
IGNvbmZpZy5jb21tZW50ID09PSAnYm9vbGVhbicgJiYgY29uZmlnLmNvbW1lbnQpIDogZmFsc2U7
Ci0gICAgICAgICAgICB0aGlzLnRyYWNrUmFuZ2UgPSBjb25maWcgPyAodHlwZW9mIGNvbmZpZy5y
YW5nZSA9PT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5yYW5nZSkgOiBmYWxzZTsKLSAgICAgICAgICAg
IHRoaXMudHJhY2tMb2MgPSBjb25maWcgPyAodHlwZW9mIGNvbmZpZy5sb2MgPT09ICdib29sZWFu
JyAmJiBjb25maWcubG9jKSA6IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBbXTsK
LSAgICAgICAgICAgIHRoaXMucmVhZGVyID0gbmV3IFJlYWRlcigpOwotICAgICAgICB9Ci0gICAg
ICAgIFRva2VuaXplci5wcm90b3R5cGUuZXJyb3JzID0gZnVuY3Rpb24gKCkgewotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmVycm9yczsKLSAgICAgICAgfTsKLSAgICAgICAg
VG9rZW5pemVyLnByb3RvdHlwZS5nZXROZXh0VG9rZW4gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGNvbW1lbnRzID0gdGhpcy5zY2FubmVyLnNjYW5Db21tZW50cygpOwotICAgICAgICAgICAgICAg
IGlmICh0aGlzLnNjYW5uZXIudHJhY2tDb21tZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY29tbWVudHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBlID0gY29tbWVudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB2
YXIgdmFsdWUgPSB0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKGUuc2xpY2VbMF0sIGUuc2xpY2Vb
MV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZTogZS5tdWx0aUxpbmUgPyAnQmxvY2tDb21tZW50JyA6ICdM
aW5lQ29tbWVudCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCi0g
ICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMudHJhY2tSYW5nZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQucmFu
Z2UgPSBlLnJhbmdlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMudHJhY2tMb2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb21tZW50LmxvYyA9IGUubG9jOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIucHVzaChjb21tZW50KTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMu
c2Nhbm5lci5lb2YoKSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgbG9jID0gdm9pZCAwOwot
ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0xvYykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbG9jID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMuc2Nhbm5lci5saW5lTnVt
YmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuc2Nhbm5l
ci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDoge30KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHRva2VuID0gdm9pZCAwOwotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2Fu
bmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdID09PSAnLycpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRva2VuID0gdGhpcy5yZWFkZXIuaXNSZWdleFN0YXJ0KCkgPyB0aGlzLnNjYW5u
ZXIuc2NhblJlZ0V4cCgpIDogdGhpcy5zY2FubmVyLnNjYW5QdW5jdHVhdG9yKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbiA9IHRoaXMuc2Nhbm5lci5sZXgoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRlci5wdXNoKHRva2VuKTsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gewotICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZTogdG9rZW5fMS5Ub2tlbk5hbWVbdG9rZW4udHlwZV0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZTogdGhpcy5zY2FubmVyLnNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5k
KQotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50
cmFja1JhbmdlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5yYW5nZSA9IFt0b2tl
bi5zdGFydCwgdG9rZW4uZW5kXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy50cmFja0xvYykgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9j
LmVuZCA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLnNjYW5uZXIu
bGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuc2Nh
bm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5sb2MgPSBsb2M7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IDkg
LyogUmVndWxhckV4cHJlc3Npb24gKi8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBw
YXR0ZXJuID0gdG9rZW4ucGF0dGVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbGFn
cyA9IHRva2VuLmZsYWdzOwotICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkucmVnZXggPSB7
IHBhdHRlcm46IHBhdHRlcm4sIGZsYWdzOiBmbGFncyB9OwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyLnB1c2goZW50cnkpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlci5z
aGlmdCgpOwotICAgICAgICB9OwotICAgICAgICByZXR1cm4gVG9rZW5pemVyOwotICAgIH0oKSk7
Ci0gICAgZXhwb3J0cy5Ub2tlbml6ZXIgPSBUb2tlbml6ZXI7CisJInVzZSBzdHJpY3QiOworCU9i
amVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUg
fSk7CisJdmFyIGVycm9yX2hhbmRsZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApOworCXZh
ciBzY2FubmVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKKwl2YXIgdG9rZW5fMSA9IF9f
d2VicGFja19yZXF1aXJlX18oMTMpOworCXZhciBSZWFkZXIgPSAvKiogQGNsYXNzICovIChmdW5j
dGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFJlYWRlcigpIHsKKwkgICAgICAgIHRoaXMudmFsdWVz
ID0gW107CisJICAgICAgICB0aGlzLmN1cmx5ID0gdGhpcy5wYXJlbiA9IC0xOworCSAgICB9CisJ
ICAgIC8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBvZiB0aG9zZSB0b2tlbnMgaXMgYW4gZXhw
cmVzc2lvbi4KKwkgICAgUmVhZGVyLnByb3RvdHlwZS5iZWZvcmVGdW5jdGlvbkV4cHJlc3Npb24g
PSBmdW5jdGlvbiAodCkgeworCSAgICAgICAgcmV0dXJuIFsnKCcsICd7JywgJ1snLCAnaW4nLCAn
dHlwZW9mJywgJ2luc3RhbmNlb2YnLCAnbmV3JywKKwkgICAgICAgICAgICAncmV0dXJuJywgJ2Nh
c2UnLCAnZGVsZXRlJywgJ3Rocm93JywgJ3ZvaWQnLAorCSAgICAgICAgICAgIC8vIGFzc2lnbm1l
bnQgb3BlcmF0b3JzCisJICAgICAgICAgICAgJz0nLCAnKz0nLCAnLT0nLCAnKj0nLCAnKio9Jywg
Jy89JywgJyU9JywgJzw8PScsICc+Pj0nLCAnPj4+PScsCisJICAgICAgICAgICAgJyY9JywgJ3w9
JywgJ149JywgJywnLAorCSAgICAgICAgICAgIC8vIGJpbmFyeS91bmFyeSBvcGVyYXRvcnMKKwkg
ICAgICAgICAgICAnKycsICctJywgJyonLCAnKionLCAnLycsICclJywgJysrJywgJy0tJywgJzw8
JywgJz4+JywgJz4+PicsICcmJywKKwkgICAgICAgICAgICAnfCcsICdeJywgJyEnLCAnficsICcm
JicsICd8fCcsICc/JywgJzonLCAnPT09JywgJz09JywgJz49JywKKwkgICAgICAgICAgICAnPD0n
LCAnPCcsICc+JywgJyE9JywgJyE9PSddLmluZGV4T2YodCkgPj0gMDsKKwkgICAgfTsKKwkgICAg
Ly8gRGV0ZXJtaW5lIGlmIGZvcndhcmQgc2xhc2ggKC8pIGlzIGFuIG9wZXJhdG9yIG9yIHBhcnQg
b2YgYSByZWd1bGFyIGV4cHJlc3Npb24KKwkgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemls
bGEvc3dlZXQuanMvd2lraS9kZXNpZ24KKwkgICAgUmVhZGVyLnByb3RvdHlwZS5pc1JlZ2V4U3Rh
cnQgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgcHJldmlvdXMgPSB0aGlzLnZhbHVlc1t0
aGlzLnZhbHVlcy5sZW5ndGggLSAxXTsKKwkgICAgICAgIHZhciByZWdleCA9IChwcmV2aW91cyAh
PT0gbnVsbCk7CisJICAgICAgICBzd2l0Y2ggKHByZXZpb3VzKSB7CisJICAgICAgICAgICAgY2Fz
ZSAndGhpcyc6CisJICAgICAgICAgICAgY2FzZSAnXSc6CisJICAgICAgICAgICAgICAgIHJlZ2V4
ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2UgJykn
OgorCSAgICAgICAgICAgICAgICB2YXIga2V5d29yZCA9IHRoaXMudmFsdWVzW3RoaXMucGFyZW4g
LSAxXTsKKwkgICAgICAgICAgICAgICAgcmVnZXggPSAoa2V5d29yZCA9PT0gJ2lmJyB8fCBrZXl3
b3JkID09PSAnd2hpbGUnIHx8IGtleXdvcmQgPT09ICdmb3InIHx8IGtleXdvcmQgPT09ICd3aXRo
Jyk7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2UgJ30nOgorCSAg
ICAgICAgICAgICAgICAvLyBEaXZpZGluZyBhIGZ1bmN0aW9uIGJ5IGFueXRoaW5nIG1ha2VzIGxp
dHRsZSBzZW5zZSwKKwkgICAgICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUgdG8gY2hlY2sgZm9y
IHRoYXQuCisJICAgICAgICAgICAgICAgIHJlZ2V4ID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAg
aWYgKHRoaXMudmFsdWVzW3RoaXMuY3VybHkgLSAzXSA9PT0gJ2Z1bmN0aW9uJykgeworCSAgICAg
ICAgICAgICAgICAgICAgLy8gQW5vbnltb3VzIGZ1bmN0aW9uLCBlLmcuIGZ1bmN0aW9uKCl7fSAv
NDIKKwkgICAgICAgICAgICAgICAgICAgIHZhciBjaGVjayA9IHRoaXMudmFsdWVzW3RoaXMuY3Vy
bHkgLSA0XTsKKwkgICAgICAgICAgICAgICAgICAgIHJlZ2V4ID0gY2hlY2sgPyAhdGhpcy5iZWZv
cmVGdW5jdGlvbkV4cHJlc3Npb24oY2hlY2spIDogZmFsc2U7CisJICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52YWx1ZXNbdGhpcy5jdXJseSAtIDRdID09
PSAnZnVuY3Rpb24nKSB7CisJICAgICAgICAgICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlvbiwg
ZS5nLiBmdW5jdGlvbiBmKCl7fSAvNDIvCisJICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2sg
PSB0aGlzLnZhbHVlc1t0aGlzLmN1cmx5IC0gNV07CisJICAgICAgICAgICAgICAgICAgICByZWdl
eCA9IGNoZWNrID8gIXRoaXMuYmVmb3JlRnVuY3Rpb25FeHByZXNzaW9uKGNoZWNrKSA6IHRydWU7
CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAg
ICAgZGVmYXVsdDoKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICB9CisJICAgICAg
ICByZXR1cm4gcmVnZXg7CisJICAgIH07CisJICAgIFJlYWRlci5wcm90b3R5cGUucHVzaCA9IGZ1
bmN0aW9uICh0b2tlbikgeworCSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IDcgLyogUHVuY3R1
YXRvciAqLyB8fCB0b2tlbi50eXBlID09PSA0IC8qIEtleXdvcmQgKi8pIHsKKwkgICAgICAgICAg
ICBpZiAodG9rZW4udmFsdWUgPT09ICd7JykgeworCSAgICAgICAgICAgICAgICB0aGlzLmN1cmx5
ID0gdGhpcy52YWx1ZXMubGVuZ3RoOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNl
IGlmICh0b2tlbi52YWx1ZSA9PT0gJygnKSB7CisJICAgICAgICAgICAgICAgIHRoaXMucGFyZW4g
PSB0aGlzLnZhbHVlcy5sZW5ndGg7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHRoaXMu
dmFsdWVzLnB1c2godG9rZW4udmFsdWUpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJ
ICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaChudWxsKTsKKwkgICAgICAgIH0KKwkgICAgfTsK
KwkgICAgcmV0dXJuIFJlYWRlcjsKKwl9KCkpOworCXZhciBUb2tlbml6ZXIgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFRva2VuaXplcihjb2RlLCBjb25maWcp
IHsKKwkgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gbmV3IGVycm9yX2hhbmRsZXJfMS5FcnJv
ckhhbmRsZXIoKTsKKwkgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYW50ID0gY29uZmln
ID8gKHR5cGVvZiBjb25maWcudG9sZXJhbnQgPT09ICdib29sZWFuJyAmJiBjb25maWcudG9sZXJh
bnQpIDogZmFsc2U7CisJICAgICAgICB0aGlzLnNjYW5uZXIgPSBuZXcgc2Nhbm5lcl8xLlNjYW5u
ZXIoY29kZSwgdGhpcy5lcnJvckhhbmRsZXIpOworCSAgICAgICAgdGhpcy5zY2FubmVyLnRyYWNr
Q29tbWVudCA9IGNvbmZpZyA/ICh0eXBlb2YgY29uZmlnLmNvbW1lbnQgPT09ICdib29sZWFuJyAm
JiBjb25maWcuY29tbWVudCkgOiBmYWxzZTsKKwkgICAgICAgIHRoaXMudHJhY2tSYW5nZSA9IGNv
bmZpZyA/ICh0eXBlb2YgY29uZmlnLnJhbmdlID09PSAnYm9vbGVhbicgJiYgY29uZmlnLnJhbmdl
KSA6IGZhbHNlOworCSAgICAgICAgdGhpcy50cmFja0xvYyA9IGNvbmZpZyA/ICh0eXBlb2YgY29u
ZmlnLmxvYyA9PT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5sb2MpIDogZmFsc2U7CisJICAgICAgICB0
aGlzLmJ1ZmZlciA9IFtdOworCSAgICAgICAgdGhpcy5yZWFkZXIgPSBuZXcgUmVhZGVyKCk7CisJ
ICAgIH0KKwkgICAgVG9rZW5pemVyLnByb3RvdHlwZS5lcnJvcnMgPSBmdW5jdGlvbiAoKSB7CisJ
ICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuZXJyb3JzOworCSAgICB9OworCSAgICBU
b2tlbml6ZXIucHJvdG90eXBlLmdldE5leHRUb2tlbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAg
IGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDApIHsKKwkgICAgICAgICAgICB2YXIgY29tbWVu
dHMgPSB0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7CisJICAgICAgICAgICAgaWYgKHRoaXMu
c2Nhbm5lci50cmFja0NvbW1lbnQpIHsKKwkgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBjb21tZW50cy5sZW5ndGg7ICsraSkgeworCSAgICAgICAgICAgICAgICAgICAgdmFyIGUg
PSBjb21tZW50c1tpXTsKKwkgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuc2Nh
bm5lci5zb3VyY2Uuc2xpY2UoZS5zbGljZVswXSwgZS5zbGljZVsxXSk7CisJICAgICAgICAgICAg
ICAgICAgICB2YXIgY29tbWVudCA9IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBl
Lm11bHRpTGluZSA/ICdCbG9ja0NvbW1lbnQnIDogJ0xpbmVDb21tZW50JywKKwkgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKKwkgICAgICAgICAgICAgICAgICAgIH07CisJICAg
ICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja1JhbmdlKSB7CisJICAgICAgICAgICAgICAg
ICAgICAgICAgY29tbWVudC5yYW5nZSA9IGUucmFuZ2U7CisJICAgICAgICAgICAgICAgICAgICB9
CisJICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0xvYykgeworCSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbW1lbnQubG9jID0gZS5sb2M7CisJICAgICAgICAgICAgICAgICAgICB9
CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKGNvbW1lbnQpOworCSAgICAg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmICghdGhpcy5zY2Fu
bmVyLmVvZigpKSB7CisJICAgICAgICAgICAgICAgIHZhciBsb2MgPSB2b2lkIDA7CisJICAgICAg
ICAgICAgICAgIGlmICh0aGlzLnRyYWNrTG9jKSB7CisJICAgICAgICAgICAgICAgICAgICBsb2Mg
PSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHsKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZTogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVy
LmxpbmVTdGFydAorCSAgICAgICAgICAgICAgICAgICAgICAgIH0sCisJICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kOiB7fQorCSAgICAgICAgICAgICAgICAgICAgfTsKKwkgICAgICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgICAgICB2YXIgbWF5YmVSZWdleCA9ICh0aGlzLnNjYW5uZXIuc291
cmNlW3RoaXMuc2Nhbm5lci5pbmRleF0gPT09ICcvJykgJiYgdGhpcy5yZWFkZXIuaXNSZWdleFN0
YXJ0KCk7CisJICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHZvaWQgMDsKKwkgICAgICAgICAg
ICAgICAgaWYgKG1heWJlUmVnZXgpIHsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9
IHRoaXMuc2Nhbm5lci5zYXZlU3RhdGUoKTsKKwkgICAgICAgICAgICAgICAgICAgIHRyeSB7CisJ
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnNjYW5uZXIuc2NhblJlZ0V4cCgp
OworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUp
IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjYW5uZXIucmVzdG9yZVN0YXRlKHN0
YXRlKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuc2Nhbm5lci5sZXgo
KTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5zY2FubmVy
LmxleCgpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIHRoaXMucmVhZGVy
LnB1c2godG9rZW4pOworCSAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7CisJICAgICAgICAg
ICAgICAgICAgICB0eXBlOiB0b2tlbl8xLlRva2VuTmFtZVt0b2tlbi50eXBlXSwKKwkgICAgICAg
ICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0
LCB0b2tlbi5lbmQpCisJICAgICAgICAgICAgICAgIH07CisJICAgICAgICAgICAgICAgIGlmICh0
aGlzLnRyYWNrUmFuZ2UpIHsKKwkgICAgICAgICAgICAgICAgICAgIGVudHJ5LnJhbmdlID0gW3Rv
a2VuLnN0YXJ0LCB0b2tlbi5lbmRdOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
ICAgIGlmICh0aGlzLnRyYWNrTG9jKSB7CisJICAgICAgICAgICAgICAgICAgICBsb2MuZW5kID0g
eworCSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVy
LAorCSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zY2FubmVyLmluZGV4IC0g
dGhpcy5zY2FubmVyLmxpbmVTdGFydAorCSAgICAgICAgICAgICAgICAgICAgfTsKKwkgICAgICAg
ICAgICAgICAgICAgIGVudHJ5LmxvYyA9IGxvYzsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gOSAvKiBSZWd1bGFyRXhwcmVzc2lvbiAqLykg
eworCSAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSB0b2tlbi5wYXR0ZXJuOworCSAg
ICAgICAgICAgICAgICAgICAgdmFyIGZsYWdzID0gdG9rZW4uZmxhZ3M7CisJICAgICAgICAgICAg
ICAgICAgICBlbnRyeS5yZWdleCA9IHsgcGF0dGVybjogcGF0dGVybiwgZmxhZ3M6IGZsYWdzIH07
CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIucHVzaChl
bnRyeSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMu
YnVmZmVyLnNoaWZ0KCk7CisJICAgIH07CisJICAgIHJldHVybiBUb2tlbml6ZXI7CisJfSgpKTsK
KwlleHBvcnRzLlRva2VuaXplciA9IFRva2VuaXplcjsKIAogCiAvKioqLyB9CiAvKioqKioqLyBd
KQogfSk7Ci07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCmluZGV4IGEzMWVlYzUyNWFlLi4y
Zjc3Njk4MGUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanMKQEAgLTI4Myw3ICsyODMs
NiBAQCBXSS5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2NyaXB0U3ludGF4VHJlZQogICAgICAg
ICAgICAgICAgIGNhc2UgV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Bc3NpZ25tZW50UGF0
dGVybjoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdhdGhlcklkZW50aWZpZXJzKG5vZGUu
bGVmdCk7CiAgICAgICAgICAgICAgICAgY2FzZSBXSS5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LlJlc3RFbGVtZW50OgotICAgICAgICAgICAgICAgIGNhc2UgV0kuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5SZXN0UHJvcGVydHk6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnYXRoZXJJ
ZGVudGlmaWVycyhub2RlLmFyZ3VtZW50KTsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgICAgICBjb25zb2xlLmFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgbm9kZSB0
eXBlIGluIHZhcmlhYmxlIGRlY2xhcmF0b3I6ICIgKyBub2RlLnR5cGUpOwpAQCAtMjkxLDcgKzI5
MCw3IEBAIFdJLlNjcmlwdFN5bnRheFRyZWUgPSBjbGFzcyBTY3JpcHRTeW50YXhUcmVlCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBjb25zb2xlLmFzc2VydChub2RlLnR5cGUg
PT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWRlbnRpZmllciB8fCBub2RlLnR5cGUg
PT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuT2JqZWN0UGF0dGVybiB8fCBub2RlLnR5
cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQXJyYXlQYXR0ZXJuIHx8IG5vZGUu
dHlwZSA9PT0gV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5SZXN0RWxlbWVudCB8fCBub2Rl
LnR5cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUmVzdFByb3BlcnR5KTsKKyAg
ICAgICAgY29uc29sZS5hc3NlcnQobm9kZS50eXBlID09PSBXSS5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLklkZW50aWZpZXIgfHwgbm9kZS50eXBlID09PSBXSS5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLk9iamVjdFBhdHRlcm4gfHwgbm9kZS50eXBlID09PSBXSS5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLkFycmF5UGF0dGVybiB8fCBub2RlLnR5cGUgPT09IFdJLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuUmVzdEVsZW1lbnQpOwogCiAgICAgICAgIHJldHVybiBnYXRoZXJJZGVudGlm
aWVycyhub2RlKTsKICAgICB9CkBAIC00MjUsOSArNDI0LDYgQEAgV0kuU2NyaXB0U3ludGF4VHJl
ZSA9IGNsYXNzIFNjcmlwdFN5bnRheFRyZWUKICAgICAgICAgY2FzZSBXSS5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLlJlc3RFbGVtZW50OgogICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmFyZ3VtZW50LCBjYWxsYmFjaywgc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5SZXN0UHJvcGVydHk6Ci0gICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYXJndW1lbnQsIGNhbGxiYWNrLCBzdGF0ZSk7Ci0gICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXSS5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LlJldHVyblN0YXRlbWVudDoKICAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVu
dCwgY2FsbGJhY2ssIHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDM3LDkgKzQzMyw2
IEBAIFdJLlNjcmlwdFN5bnRheFRyZWUgPSBjbGFzcyBTY3JpcHRTeW50YXhUcmVlCiAgICAgICAg
IGNhc2UgV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5TcHJlYWRFbGVtZW50OgogICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBjYWxsYmFjaywgc3RhdGUpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5TcHJlYWRQcm9wZXJ0eToKLSAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVu
dCwgY2FsbGJhY2ssIHN0YXRlKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdJ
LlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU3dpdGNoU3RhdGVtZW50OgogICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLmRpc2NyaW1pbmFudCwgY2FsbGJhY2ssIHN0YXRlKTsKICAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmNhc2VzLCBjYWxsYmFjaywgc3RhdGUpOwpA
QCAtODUxLDEyICs4NDQsNiBAQCBXSS5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2NyaXB0U3lu
dGF4VHJlZQogICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5
bnRheFRyZWUobm9kZS5hcmd1bWVudCkKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSAiUmVzdFByb3BlcnR5IjoKLSAgICAgICAgICAgIHJlc3VsdCA9IHsK
LSAgICAgICAgICAgICAgICB0eXBlOiBXSS5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlJlc3RQ
cm9wZXJ0eSwKLSAgICAgICAgICAgICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxT
eW50YXhUcmVlKG5vZGUuYXJndW1lbnQpLAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlICJSZXR1cm5TdGF0ZW1lbnQiOgogICAgICAgICAgICAgcmVzdWx0
ID0gewogICAgICAgICAgICAgICAgIHR5cGU6IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
UmV0dXJuU3RhdGVtZW50LApAQCAtODc1LDEyICs4NjIsNiBAQCBXSS5TY3JpcHRTeW50YXhUcmVl
ID0gY2xhc3MgU2NyaXB0U3ludGF4VHJlZQogICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5hcmd1bWVudCksCiAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgIlNwcmVhZFByb3BlcnR5IjoKLSAg
ICAgICAgICAgIHJlc3VsdCA9IHsKLSAgICAgICAgICAgICAgICB0eXBlOiBXSS5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLlNwcmVhZFByb3BlcnR5LAotICAgICAgICAgICAgICAgIGFyZ3VtZW50
OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5hcmd1bWVudCksCi0gICAgICAg
ICAgICB9OwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgIlN1cGVyIjoKICAgICAg
ICAgICAgIHJlc3VsdCA9IHsKICAgICAgICAgICAgICAgICB0eXBlOiBXSS5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLlN1cGVyCkBAIC0xMTI0LDExICsxMTA1LDkgQEAgV0kuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZSA9IHsKICAgICBQcm9ncmFtOiBTeW1ib2woInByb2dyYW0iKSwKICAgICBQ
cm9wZXJ0eTogU3ltYm9sKCJwcm9wZXJ0eSIpLAogICAgIFJlc3RFbGVtZW50OiBTeW1ib2woInJl
c3QtZWxlbWVudCIpLAotICAgIFJlc3RQcm9wZXJ0eTogU3ltYm9sKCJyZXN0LXByb3BlcnR5Iiks
CiAgICAgUmV0dXJuU3RhdGVtZW50OiBTeW1ib2woInJldHVybi1zdGF0ZW1lbnQiKSwKICAgICBT
ZXF1ZW5jZUV4cHJlc3Npb246IFN5bWJvbCgic2VxdWVuY2UtZXhwcmVzc2lvbiIpLAogICAgIFNw
cmVhZEVsZW1lbnQ6IFN5bWJvbCgic3ByZWFkLWVsZW1lbnQiKSwKLSAgICBTcHJlYWRQcm9wZXJ0
eTogU3ltYm9sKCJzcHJlYWQtcHJvcGVydHkiKSwKICAgICBTdXBlcjogU3ltYm9sKCJzdXBlciIp
LAogICAgIFN3aXRjaENhc2U6IFN5bWJvbCgic3dpdGNoLWNhc2UiKSwKICAgICBTd2l0Y2hTdGF0
ZW1lbnQ6IFN5bWJvbCgic3dpdGNoLXN0YXRlbWVudCIpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvV29ya2Vycy9Gb3JtYXR0ZXIvRVNUcmVlV2Fsa2Vy
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvV29ya2Vycy9Gb3JtYXR0
ZXIvRVNUcmVlV2Fsa2VyLmpzCmluZGV4IGZhZmNiNmEwNGJlLi41ZGJlZDQxYzBjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvV29ya2Vycy9Gb3JtYXR0
ZXIvRVNUcmVlV2Fsa2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1dvcmtlcnMvRm9ybWF0dGVyL0VTVHJlZVdhbGtlci5qcwpAQCAtMTgyLDkgKzE4Miw2IEBA
IEVTVHJlZVdhbGtlciA9IGNsYXNzIEVTVHJlZVdhbGtlcgogICAgICAgICBjYXNlICJSZXN0RWxl
bWVudCI6CiAgICAgICAgICAgICB0aGlzLl93YWxrKG5vZGUuYXJndW1lbnQsIG5vZGUpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgIlJlc3RQcm9wZXJ0eSI6Ci0gICAgICAgICAg
ICB0aGlzLl93YWxrKG5vZGUuYXJndW1lbnQsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgIlJldHVyblN0YXRlbWVudCI6CiAgICAgICAgICAgICB0aGlzLl93YWxrKG5v
ZGUuYXJndW1lbnQsIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTQsOSArMTkxLDYg
QEAgRVNUcmVlV2Fsa2VyID0gY2xhc3MgRVNUcmVlV2Fsa2VyCiAgICAgICAgIGNhc2UgIlNwcmVh
ZEVsZW1lbnQiOgogICAgICAgICAgICAgdGhpcy5fd2Fsayhub2RlLmFyZ3VtZW50LCBub2RlKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICJTcHJlYWRQcm9wZXJ0eSI6Ci0gICAg
ICAgICAgICB0aGlzLl93YWxrKG5vZGUuYXJndW1lbnQsIG5vZGUpOwotICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgIlN3aXRjaFN0YXRlbWVudCI6CiAgICAgICAgICAgICB0aGlzLl93
YWxrKG5vZGUuZGlzY3JpbWluYW50LCBub2RlKTsKICAgICAgICAgICAgIHRoaXMuX3dhbGtBcnJh
eShub2RlLmNhc2VzLCBub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1dvcmtlcnMvRm9ybWF0dGVyL0VzcHJpbWFGb3JtYXR0ZXIuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Xb3JrZXJzL0Zvcm1hdHRlci9Fc3ByaW1h
Rm9ybWF0dGVyLmpzCmluZGV4IDQ3NDA3ZDQ5ZGNiLi4zY2ZlOTM1ZmI1OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvV29ya2Vycy9Gb3JtYXR0ZXIvRXNw
cmltYUZvcm1hdHRlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Xb3JrZXJzL0Zvcm1hdHRlci9Fc3ByaW1hRm9ybWF0dGVyLmpzCkBAIC04MjgsMTIgKzgyOCwx
MCBAQCBFc3ByaW1hRm9ybWF0dGVyID0gY2xhc3MgRXNwcmltYUZvcm1hdHRlcgogICAgICAgICAv
LyBJbmNsdWRlIHRoZXNlIGhlcmUgc28gd2UgZ2V0IG9ubHkgZ2V0IHdhcm5pbmdzIGFib3V0IHVu
aGFuZGxlZCBub2Rlcy4KICAgICAgICAgaWYgKG5vZGVUeXBlID09PSAiRXhwcmVzc2lvblN0YXRl
bWVudCIKICAgICAgICAgICAgIHx8IG5vZGVUeXBlID09PSAiU3ByZWFkRWxlbWVudCIKLSAgICAg
ICAgICAgIHx8IG5vZGVUeXBlID09PSAiU3ByZWFkUHJvcGVydHkiCiAgICAgICAgICAgICB8fCBu
b2RlVHlwZSA9PT0gIlN1cGVyIgogICAgICAgICAgICAgfHwgbm9kZVR5cGUgPT09ICJJbXBvcnQi
CiAgICAgICAgICAgICB8fCBub2RlVHlwZSA9PT0gIk1ldGFQcm9wZXJ0eSIKICAgICAgICAgICAg
IHx8IG5vZGVUeXBlID09PSAiUmVzdEVsZW1lbnQiCi0gICAgICAgICAgICB8fCBub2RlVHlwZSA9
PT0gIlJlc3RQcm9wZXJ0eSIKICAgICAgICAgICAgIHx8IG5vZGVUeXBlID09PSAiVGVtcGxhdGVF
bGVtZW50IgogICAgICAgICAgICAgfHwgbm9kZVR5cGUgPT09ICJUZW1wbGF0ZUxpdGVyYWwiCiAg
ICAgICAgICAgICB8fCBub2RlVHlwZSA9PT0gIkRlYnVnZ2VyU3RhdGVtZW50Igo=
</data>
<flag name="review"
          id="391996"
          type_id="1"
          status="+"
          setter="hi"
    />
    <flag name="commit-queue"
          id="391997"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>