<?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>200796</bug_id>
          
          <creation_ts>2019-08-15 16:34:33 -0700</creation_ts>
          <short_desc>Web Inspector: Update Esprima to support modern JavaScript language features</short_desc>
          <delta_ts>2019-08-16 00:34:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>180731</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1561817</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-08-15 16:34:33 -0700</bug_when>
    <thetext>Update Esprima to support modern JavaScript language features

Going to use a fork which implements some modern features:

  ES2018 Feature: Async Iteration (for-await-of)
  https://github.com/jquery/esprima/issues/1990

  ES2019 Feature: Numeric Separator
  https://github.com/jquery/esprima/issues/1989

  ES2019 Feature: Optional catch binding
  https://github.com/jquery/esprima/issues/1953

  ES2020 Feature: BigInt
  https://github.com/jquery/esprima/issues/1988

While going through the process to upstream support.

---

Changes to the AST are:

  * CatchClause `param` property is now nullable
  * ForOfStatement now a boolean `await` property
  * Literal can be a `&quot;bigint&quot;` type (works if the environment has BigInt or not)

---

The only change we need to make to our pretty-printer is add a space after `await` in for-await-of permutations.

So this:

    for await(x of []) {}

Pretty prints to:

    for await (x of []) {}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561825</commentid>
    <comment_count>1</comment_count>
      <attachid>376442</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-08-15 16:41:19 -0700</bug_when>
    <thetext>Created attachment 376442
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561827</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-08-15 16:44:27 -0700</bug_when>
    <thetext>Attachment 376442 did not pass style-queue:


ERROR: Source/WebInspectorUI/ChangeLog:25:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/WebInspectorUI/ChangeLog:26:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/WebInspectorUI/ChangeLog:27:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Total errors found: 3 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561836</commentid>
    <comment_count>3</comment_count>
      <attachid>376442</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-15 17:04:23 -0700</bug_when>
    <thetext>Comment on attachment 376442
[PATCH] Proposed Fix

Awesome!

(Next stop, nullish-aware operators! 😁)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561838</commentid>
    <comment_count>4</comment_count>
      <attachid>376442</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-15 17:07:28 -0700</bug_when>
    <thetext>Comment on attachment 376442
[PATCH] Proposed Fix

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

&gt; Source/WebInspectorUI/ChangeLog:26
&gt; +          * ForOfStatement now a boolean `await` property

Also, I&apos;m not really sure why the style checker is yelling at you in this area, but I do notice that you&apos;re missing a &quot;has&quot;. :p</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561839</commentid>
    <comment_count>5</comment_count>
      <attachid>376442</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-08-15 17:11:57 -0700</bug_when>
    <thetext>Comment on attachment 376442
[PATCH] Proposed Fix

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

&gt; Source/WebInspectorUI/UserInterface/External/Esprima/esprima.js:637
&gt; +        nextJSXToken() {

Is this JSX the React JSX &lt;https://reactjs.org/docs/introducing-jsx.html&gt;?  If so, it&apos;d be awesome to strip this out =D

&gt; Source/WebInspectorUI/UserInterface/Test/TestHarness.js:204
&gt; +    passOrFail(condition, message)

How is this different than `expectThat` or `expectTrue`?  Is it simply that you don&apos;t want to have the &quot;Expected&quot; and &quot;Actual&quot;?  If so, I&apos;d rather change `expectThat` to be as you suggest (`expectTrue` should be the one that compares the condition to `true`, whereas `expectThat` could just be a condition).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561854</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-08-15 17:38:08 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #4)
&gt; Comment on attachment 376442 [details]
&gt; [PATCH] Proposed Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=376442&amp;action=review
&gt; 
&gt; &gt; Source/WebInspectorUI/ChangeLog:26
&gt; &gt; +          * ForOfStatement now a boolean `await` property
&gt; 
&gt; Also, I&apos;m not really sure why the style checker is yelling at you in this
&gt; area, but I do notice that you&apos;re missing a &quot;has&quot;. :p

It doesn&apos;t like anyone using &apos;*&apos; for lists. I shall fix the typo!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561863</commentid>
    <comment_count>7</comment_count>
      <attachid>376442</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-08-15 17:44:47 -0700</bug_when>
    <thetext>Comment on attachment 376442
[PATCH] Proposed Fix

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

&gt;&gt; Source/WebInspectorUI/UserInterface/External/Esprima/esprima.js:637
&gt;&gt; +        nextJSXToken() {
&gt; 
&gt; Is this JSX the React JSX &lt;https://reactjs.org/docs/introducing-jsx.html&gt;?  If so, it&apos;d be awesome to strip this out =D

Yes. Esprima supports JSX syntax. We can remove it at compilation time by removing a few lines. I&apos;ll file a follow-up.

Maybe we want to eventually include it?

&gt;&gt; Source/WebInspectorUI/UserInterface/Test/TestHarness.js:204
&gt;&gt; +    passOrFail(condition, message)
&gt; 
&gt; How is this different than `expectThat` or `expectTrue`?  Is it simply that you don&apos;t want to have the &quot;Expected&quot; and &quot;Actual&quot;?  If so, I&apos;d rather change `expectThat` to be as you suggest (`expectTrue` should be the one that compares the condition to `true`, whereas `expectThat` could just be a condition).

Unless I&apos;m including a &quot;Should ...&quot; message, then the additional output from these expect functions is very annoying. 

InspectorTest.expectThat(true, &quot;message&quot;);
InspectorTest.expectThat(false, &quot;message&quot;);

&gt; PASS: message
&gt; FAIL: message
&gt;     Expected: truthy
&gt;     Actual: false


InspectorTest.passOrFail(true, &quot;message&quot;);
InspectorTest.passOrFail(false, &quot;message&quot;);

&gt; PASS: message
&gt; FAIL: message</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561865</commentid>
    <comment_count>8</comment_count>
      <attachid>376454</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-08-15 17:47:47 -0700</bug_when>
    <thetext>Created attachment 376454
[PATCH] For Landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561925</commentid>
    <comment_count>9</comment_count>
      <attachid>376454</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-15 20:03:39 -0700</bug_when>
    <thetext>Comment on attachment 376454
[PATCH] For Landing

Clearing flags on attachment: 376454

Committed r248760: &lt;https://trac.webkit.org/changeset/248760&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561959</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-16 00:34:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/54380699&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376442</attachid>
            <date>2019-08-15 16:41:19 -0700</date>
            <delta_ts>2019-08-15 17:48:00 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>js-1.patch</filename>
            <type>text/plain</type>
            <size>322445</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyMWY2YjZmZWUwMi4uZjVhOWY0ZjdmYTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAor
MjAxOS0wOC0xNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IFVwZGF0ZSBFc3ByaW1hIHRvIHN1cHBvcnQgbW9kZXJuIEphdmFT
Y3JpcHQgbGFuZ3VhZ2UgZmVhdHVyZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMDc5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3Jp
cHQtdGVzdHMvY2xhc3Nlcy1leHBlY3RlZC5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0
dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9jbGFzc2VzLmpzOgorICAgICAgICAqIGlu
c3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Zvci1zdGF0ZW1l
bnRzLWV4cGVjdGVkLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNl
cy9qYXZhc2NyaXB0LXRlc3RzL2Zvci1zdGF0ZW1lbnRzLmpzOgorICAgICAgICAqIGluc3BlY3Rv
ci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2dlbmVyYXRvcnMtZXhwZWN0
ZWQuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3Jp
cHQtdGVzdHMvZ2VuZXJhdG9ycy5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0dGluZy9y
ZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9udW1iZXJzLWV4cGVjdGVkLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9u
dW1iZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJj
ZXMvamF2YXNjcmlwdC10ZXN0cy90cnktY2F0Y2gtZmluYWxseS1zdGF0ZW1lbnRzLWV4cGVjdGVk
LmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0
LXRlc3RzL3RyeS1jYXRjaC1maW5hbGx5LXN0YXRlbWVudHMuanM6CisgICAgICAgICogaW5zcGVj
dG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdW5hcnktYmluYXJ5LWV4
cHJlc3Npb25zLWV4cGVjdGVkLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL3Jl
c291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3VuYXJ5LWJpbmFyeS1leHByZXNzaW9ucy5qczoKKyAg
ICAgICAgVGVzdCBmb3JtYXR0aW5nIG9mIG5ldyBKYXZhU2NyaXB0IGxhbmd1YWdlIGZlYXR1cmVz
LgorCisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvZm9ybWF0dGluZy1jc3MtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL2Zvcm1hdHRpbmctamF2YXNj
cmlwdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvZm9ybWF0
dGluZy1qYXZhc2NyaXB0Lmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVz
b3VyY2VzL3V0aWxpdGllcy5qczoKKyAgICAgICAgKFRlc3RQYWdlLnJlZ2lzdGVySW5pdGlhbGl6
ZXIuYXN5bmMucnVuRm9ybWF0dGluZ1Rlc3QpOgorICAgICAgICAoVGVzdFBhZ2UucmVnaXN0ZXJJ
bml0aWFsaXplci53aW5kb3cuYWRkRm9ybWF0dGluZ1Rlc3RzKToKKyAgICAgICAgKFRlc3RQYWdl
LnJlZ2lzdGVySW5pdGlhbGl6ZXIpOgorICAgICAgICBDbGVhbmVyIG91dHB1dCBhbmQgYmV0dGVy
IGhhbmRsaW5nIGZvciBkZWJ1Z2dpbmcgZmFpbHVyZXMuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
bW9kZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLmh0bWw6CisgICAgICAgIFRlc3QgbmV3IEFT
VCBwZXJtdXRhdGlvbnMuCisKIDIwMTktMDgtMTUgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJv
QGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBVcGRhdGUgRXNwcmltYSB0byB0
cnVuayAobWlub3IgZml4ZXMpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9y
bWF0dGluZy9mb3JtYXR0aW5nLWNzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZm9ybWF0dGluZy9mb3JtYXR0aW5nLWNzcy1leHBlY3RlZC50eHQKaW5kZXggMzhlYjA0Zjhk
MTguLmE5NDFmNWU3ZDAxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0
dGluZy9mb3JtYXR0aW5nLWNzcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2Zvcm1hdHRpbmcvZm9ybWF0dGluZy1jc3MtZXhwZWN0ZWQudHh0CkBAIC0yLDI0ICsyLDEy
IEBAIFRlc3QgQ1NTIGZvcm1hdHRpbmcuCiAKIAogPT0gUnVubmluZyB0ZXN0IHN1aXRlOiBDU1NG
b3JtYXR0ZXIKLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDU1NGb3JtYXR0ZXIuYmFzaWMuY3NzCi1Q
QVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDU1NGb3JtYXR0ZXIuY29tbWVudC5jc3MKLVBB
U1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IENTU0Zvcm1hdHRlci5ncmFkaWVudC5jc3MKLVBB
U1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IENTU0Zvcm1hdHRlci5rZXlmcmFtZXMuY3NzCi1Q
QVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDU1NGb3JtYXR0ZXIubWVkaWEtcXVlcnkuY3Nz
Ci1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDU1NGb3JtYXR0ZXIuc2VsZWN0b3JzLmNz
cwotUEFTUwotCi0tLSBSdW5uaW5nIHRlc3QgY2FzZTogQ1NTRm9ybWF0dGVyLndyYXBwaW5nLmNz
cwotUEFTUworLS0gUnVubmluZyB0ZXN0IGNhc2U6IENTU0Zvcm1hdHRlcgorUEFTUzogYmFzaWMu
Y3NzCitQQVNTOiBjb21tZW50LmNzcworUEFTUzogZ3JhZGllbnQuY3NzCitQQVNTOiBrZXlmcmFt
ZXMuY3NzCitQQVNTOiBtZWRpYS1xdWVyeS5jc3MKK1BBU1M6IHNlbGVjdG9ycy5jc3MKK1BBU1M6
IHdyYXBwaW5nLmNzcwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0
dGluZy9mb3JtYXR0aW5nLWphdmFzY3JpcHQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2Zvcm1hdHRpbmcvZm9ybWF0dGluZy1qYXZhc2NyaXB0LWV4cGVjdGVkLnR4dAppbmRl
eCAyYmE1ZDczYjQwZS4uYzRjYmI2ZDNiZDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9mb3JtYXR0aW5nL2Zvcm1hdHRpbmctamF2YXNjcmlwdC1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvZm9ybWF0dGluZy1qYXZhc2NyaXB0LWV4
cGVjdGVkLnR4dApAQCAtMiw4NyArMiwzNCBAQCBUZXN0IEphdmFTY3JpcHQgZm9ybWF0dGluZy4K
IAogCiA9PSBSdW5uaW5nIHRlc3Qgc3VpdGU6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNjcmlwdAot
LS0gUnVubmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNjcmlwdC5hcnJvdy1m
dW5jdGlvbnMuanMKLVBBU1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0
ZXIuSmF2YVNjcmlwdC5jbGFzc2VzLmpzCi1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBF
c3ByaW1hRm9ybWF0dGVyLkphdmFTY3JpcHQuY29tbWVudHMtYW5kLXByZXNlcnZlLW5ld2xpbmVz
LmpzCi1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBFc3ByaW1hRm9ybWF0dGVyLkphdmFT
Y3JpcHQuY29tbWVudHMtb25seS5qcwotUEFTUwotCi0tLSBSdW5uaW5nIHRlc3QgY2FzZTogRXNw
cmltYUZvcm1hdHRlci5KYXZhU2NyaXB0LmRvLXdoaWxlLXN0YXRlbWVudC5qcwotUEFTUwotCi0t
LSBSdW5uaW5nIHRlc3QgY2FzZTogRXNwcmltYUZvcm1hdHRlci5KYXZhU2NyaXB0LmZvci1zdGF0
ZW1lbnRzLmpzCi1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBFc3ByaW1hRm9ybWF0dGVy
LkphdmFTY3JpcHQuZnVuY3Rpb25zLmpzCi1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBF
c3ByaW1hRm9ybWF0dGVyLkphdmFTY3JpcHQuZ2VuZXJhdG9ycy5qcwotUEFTUwotCi0tLSBSdW5u
aW5nIHRlc3QgY2FzZTogRXNwcmltYUZvcm1hdHRlci5KYXZhU2NyaXB0LmlmLXN0YXRlbWVudC5q
cwotUEFTUwotCi0tLSBSdW5uaW5nIHRlc3QgY2FzZTogRXNwcmltYUZvcm1hdHRlci5KYXZhU2Ny
aXB0LmltcG9ydC5qcwotUEFTUwotCi0tLSBSdW5uaW5nIHRlc3QgY2FzZTogRXNwcmltYUZvcm1h
dHRlci5KYXZhU2NyaXB0LmxhYmVsLWJyZWFrLWNvbnRpbnVlLWJsb2NrLmpzCi1QQVNTCi0KLS0t
IFJ1bm5pbmcgdGVzdCBjYXNlOiBFc3ByaW1hRm9ybWF0dGVyLkphdmFTY3JpcHQubG9naWMtZXhw
cmVzc2lvbnMuanMKLVBBU1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0
ZXIuSmF2YVNjcmlwdC5uZXctZXhwcmVzc2lvbi5qcwotUEFTUwotCi0tLSBSdW5uaW5nIHRlc3Qg
Y2FzZTogRXNwcmltYUZvcm1hdHRlci5KYXZhU2NyaXB0Lm9iamVjdC1hcnJheS1saXRlcmFsLmpz
Ci1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBFc3ByaW1hRm9ybWF0dGVyLkphdmFTY3Jp
cHQub3RoZXItc3RhdGVtZW50cy5qcwotUEFTUwotCi0tLSBSdW5uaW5nIHRlc3QgY2FzZTogRXNw
cmltYUZvcm1hdHRlci5KYXZhU2NyaXB0LnJldHVybi1zdGF0ZW1lbnQuanMKLVBBU1MKLQotLS0g
UnVubmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNjcmlwdC5zYW1wbGUtanF1
ZXJ5LmpzCi1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBFc3ByaW1hRm9ybWF0dGVyLkph
dmFTY3JpcHQuc2FtcGxlLW5vcm1hbC11dGlsaXRpZXMuanMKLVBBU1MKLQotLS0gUnVubmluZyB0
ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNjcmlwdC5zYW1wbGUtd2ViaW5zcGVjdG9y
LW9iamVjdC5qcwotUEFTUwotCi0tLSBSdW5uaW5nIHRlc3QgY2FzZTogRXNwcmltYUZvcm1hdHRl
ci5KYXZhU2NyaXB0LnN3aXRjaC1jYXNlLWRlZmF1bHQuanMKLVBBU1MKLQotLS0gUnVubmluZyB0
ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNjcmlwdC50ZW1wbGF0ZS1zdHJpbmdzLmpz
Ci1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBFc3ByaW1hRm9ybWF0dGVyLkphdmFTY3Jp
cHQudGVybmFyeS1leHByZXNzaW9ucy5qcwotUEFTUwotCi0tLSBSdW5uaW5nIHRlc3QgY2FzZTog
RXNwcmltYUZvcm1hdHRlci5KYXZhU2NyaXB0LnRyeS1jYXRjaC1maW5hbGx5LXN0YXRlbWVudHMu
anMKLVBBU1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNj
cmlwdC51bmFyeS1iaW5hcnktZXhwcmVzc2lvbnMuanMKLVBBU1MKLQotLS0gUnVubmluZyB0ZXN0
IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNjcmlwdC52YXJpYWJsZS1kZWNsYXJhdGlvbi5q
cwotUEFTUwotCi0tLSBSdW5uaW5nIHRlc3QgY2FzZTogRXNwcmltYUZvcm1hdHRlci5KYXZhU2Ny
aXB0LndoaWxlLXN0YXRlbWVudC5qcwotUEFTUwotCi0tLSBSdW5uaW5nIHRlc3QgY2FzZTogRXNw
cmltYUZvcm1hdHRlci5KYXZhU2NyaXB0LndpdGgtc3RhdGVtZW50LmpzCi1QQVNTCi0KLS0tIFJ1
bm5pbmcgdGVzdCBjYXNlOiBFc3ByaW1hRm9ybWF0dGVyLkphdmFTY3JpcHQubW9kdWxlcy5qcwot
UEFTUworLS0gUnVubmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNjcmlwdAor
UEFTUzogYXJyb3ctZnVuY3Rpb25zLmpzCitQQVNTOiBjbGFzc2VzLmpzCitQQVNTOiBjb21tZW50
cy1hbmQtcHJlc2VydmUtbmV3bGluZXMuanMKK1BBU1M6IGNvbW1lbnRzLW9ubHkuanMKK1BBU1M6
IGRvLXdoaWxlLXN0YXRlbWVudC5qcworUEFTUzogZm9yLXN0YXRlbWVudHMuanMKK1BBU1M6IGZ1
bmN0aW9ucy5qcworUEFTUzogZ2VuZXJhdG9ycy5qcworUEFTUzogaWYtc3RhdGVtZW50LmpzCitQ
QVNTOiBpbXBvcnQuanMKK1BBU1M6IGxhYmVsLWJyZWFrLWNvbnRpbnVlLWJsb2NrLmpzCitQQVNT
OiBsb2dpYy1leHByZXNzaW9ucy5qcworUEFTUzogbmV3LWV4cHJlc3Npb24uanMKK1BBU1M6IG51
bWJlcnMuanMKK1BBU1M6IG9iamVjdC1hcnJheS1saXRlcmFsLmpzCitQQVNTOiBvdGhlci1zdGF0
ZW1lbnRzLmpzCitQQVNTOiByZXR1cm4tc3RhdGVtZW50LmpzCitQQVNTOiBzYW1wbGUtanF1ZXJ5
LmpzCitQQVNTOiBzYW1wbGUtbm9ybWFsLXV0aWxpdGllcy5qcworUEFTUzogc2FtcGxlLXdlYmlu
c3BlY3Rvci1vYmplY3QuanMKK1BBU1M6IHN3aXRjaC1jYXNlLWRlZmF1bHQuanMKK1BBU1M6IHRl
bXBsYXRlLXN0cmluZ3MuanMKK1BBU1M6IHRlcm5hcnktZXhwcmVzc2lvbnMuanMKK1BBU1M6IHRy
eS1jYXRjaC1maW5hbGx5LXN0YXRlbWVudHMuanMKK1BBU1M6IHVuYXJ5LWJpbmFyeS1leHByZXNz
aW9ucy5qcworUEFTUzogdmFyaWFibGUtZGVjbGFyYXRpb24uanMKK1BBU1M6IHdoaWxlLXN0YXRl
bWVudC5qcworUEFTUzogd2l0aC1zdGF0ZW1lbnQuanMKK1BBU1M6IG1vZHVsZXMuanMKIApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvZm9ybWF0dGluZy1qYXZh
c2NyaXB0Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9mb3JtYXR0aW5n
LWphdmFzY3JpcHQuaHRtbAppbmRleCA5ZGI2NjE3ODNkNC4uYzY1NGM3YWIyODAgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL2Zvcm1hdHRpbmctamF2YXNjcmlw
dC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL2Zvcm1hdHRpbmct
amF2YXNjcmlwdC5odG1sCkBAIC0yMiw2ICsyMiw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAg
ICAicmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvbGFiZWwtYnJlYWstY29udGludWUtYmxvY2su
anMiLAogICAgICAgICAicmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvbG9naWMtZXhwcmVzc2lv
bnMuanMiLAogICAgICAgICAicmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvbmV3LWV4cHJlc3Np
b24uanMiLAorICAgICAgICAicmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvbnVtYmVycy5qcyIs
CiAgICAgICAgICJyZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9vYmplY3QtYXJyYXktbGl0ZXJh
bC5qcyIsCiAgICAgICAgICJyZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9vdGhlci1zdGF0ZW1l
bnRzLmpzIiwKICAgICAgICAgInJlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3JldHVybi1zdGF0
ZW1lbnQuanMiLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcv
cmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvY2xhc3Nlcy1leHBlY3RlZC5qcyBiL0xheW91dFRl
c3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2NsYXNz
ZXMtZXhwZWN0ZWQuanMKaW5kZXggZGM1MDZlMDgxMGYuLmIzMjc3YmU4NTZmIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10
ZXN0cy9jbGFzc2VzLWV4cGVjdGVkLmpzCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3Jt
YXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2NsYXNzZXMtZXhwZWN0ZWQuanMKQEAg
LTE0NCwzICsxNDQsNTYgQEAgY2xhc3MgRm9vIHsKICAgICBhc3luYyAxKCkge30KICAgICBhc3lu
YyBbImYiXSgpIHt9CiB9CisKKy8vIEVTMjAxOCAtIEFzeW5jIEl0ZXJhdGlvbiAvIEFzeW5jIEdl
bmVyYXRvcnMKKworY2xhc3MgRm9vIHsKKyAgICBzdGF0aWMgYXN5bmMgKmFzeW5jKCkKKyAgICB7
CisgICAgICAgIDEKKyAgICB9CisgICAgYXN5bmMgKmFzeW5jKCkKKyAgICB7CisgICAgICAgIDEK
KyAgICB9CisgICAgKmFzeW5jKCkKKyAgICB7CisgICAgICAgIDEKKyAgICB9Cit9CisKK2NsYXNz
IEZvbyB7CisgICAgc3RhdGljIGFzeW5jICphc3luYygpCisgICAgeworICAgICAgICAxCisgICAg
fQorICAgIGFzeW5jICphc3luYygpCisgICAgeworICAgICAgICAxCisgICAgfQorICAgICphc3lu
YygpCisgICAgeworICAgICAgICAxCisgICAgfQorfQorCitjbGFzcyBGb28geworICAgIHN0YXRp
YyBhc3luYyAqYXN5bmMoKQorICAgIHsKKyAgICAgICAgMQorICAgIH0KKyAgICBhc3luYyAqYXN5
bmMoKQorICAgIHsKKyAgICAgICAgMQorICAgIH0KKyAgICAqYXN5bmMoKQorICAgIHsKKyAgICAg
ICAgMQorICAgIH0KK30KKworY2xhc3MgRm9vIHsKKyAgICBhc3luYyAqImYiKCkge30KKyAgICBh
c3luYyAqMSgpIHt9CisgICAgYXN5bmMgKlsiZiJdKCkge30KK30KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Ns
YXNzZXMuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2
YXNjcmlwdC10ZXN0cy9jbGFzc2VzLmpzCmluZGV4IDExMjMzZWIzOGI3Li4wNmRlM2Q1ZDhmNCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2ph
dmFzY3JpcHQtdGVzdHMvY2xhc3Nlcy5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9y
bWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9jbGFzc2VzLmpzCkBAIC0yMCwzICsy
MCwxMyBAQCBBID0gY2xhc3MgRm9vIGV4dGVuZHMoYj9CYXI6QmFyKXtjb25zdHJ1Y3Rvcigpe25l
dy50YXJnZXQuc3RhdGljTWV0aG9kKCl9c3RhdGljCiBjbGFzcyBGb297c3RhdGljIGFzeW5jIGFz
eW5jKCl7MX1hc3luYyBhc3luYygpezF9YXN5bmMoKXsxfX0KIAogY2xhc3MgRm9ve2FzeW5jImYi
KCl7fWFzeW5jIDEoKXt9YXN5bmNbImYiXSgpe319CisKKy8vIEVTMjAxOCAtIEFzeW5jIEl0ZXJh
dGlvbiAvIEFzeW5jIEdlbmVyYXRvcnMKKworY2xhc3MgRm9ve3N0YXRpYyBhc3luYyphc3luYygp
ezF9YXN5bmMqYXN5bmMoKXsxfSphc3luYygpezF9fQorCitjbGFzcyBGb297c3RhdGljIGFzeW5j
ICphc3luYygpezF9YXN5bmMgKmFzeW5jKCl7MX0qYXN5bmMoKXsxfX0KKworY2xhc3MgRm9ve3N0
YXRpYyBhc3luYyAqIGFzeW5jKCl7MX1hc3luYyAqIGFzeW5jKCl7MX0qIGFzeW5jKCl7MX19CisK
K2NsYXNzIEZvb3thc3luYyoiZiIoKXt9YXN5bmMqMSgpe31hc3luYypbImYiXSgpe319CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNj
cmlwdC10ZXN0cy9mb3Itc3RhdGVtZW50cy1leHBlY3RlZC5qcyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Zvci1zdGF0ZW1lbnRz
LWV4cGVjdGVkLmpzCmluZGV4IDlmZjk0YmZjZjY2Li5mZmU0YmQwOGM0OCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVz
dHMvZm9yLXN0YXRlbWVudHMtZXhwZWN0ZWQuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvZm9yLXN0YXRlbWVudHMtZXhw
ZWN0ZWQuanMKQEAgLTEzNywzICsxMzcsMjIgQEAgZm9yICh2YXIge2Zvb30gb2Ygd2luZG93KQog
ICAgIDsKIGZvciAodmFyIFt4LCB5XSBvZiBbMSwgMiwgM10pCiAgICAgOworCisvLyBFUzIwMTgg
LSBBc3luYyBJdGVyYXRpb24gLyBBc3luYyBHZW5lcmF0b3JzCisKK2FzeW5jIGZ1bmN0aW9uIGYo
KSB7CisgICAgZm9yIGF3YWl0ICh4IG9mIFtdKQorICAgICAgICA7CisgICAgZm9yIGF3YWl0ICh4
IG9mIFsxLCAyLCAzXSkKKyAgICAgICAgOworICAgIGZvciBhd2FpdCAoeCBvZiAoWzEsIDIsIDNd
KSkKKyAgICAgICAgOworICAgIGZvciBhd2FpdCAodmFyIHggb2Ygd2luZG93KQorICAgICAgICA7
CisgICAgZm9yIGF3YWl0ICh2YXIgeCBvZiAod2luZG93KSkKKyAgICAgICAgOworICAgIGZvciBh
d2FpdCAobGV0IHtmb299IG9mIHdpbmRvdykKKyAgICAgICAgOworICAgIGZvciBhd2FpdCAobGV0
IFt4LCB5XSBvZiBbMSwgMiwgM10pCisgICAgICAgIDsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Zvci1z
dGF0ZW1lbnRzLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2Vz
L2phdmFzY3JpcHQtdGVzdHMvZm9yLXN0YXRlbWVudHMuanMKaW5kZXggNDI0ZjY1ZjhlNDAuLjFi
NDJkM2QwN2I3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9y
ZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9mb3Itc3RhdGVtZW50cy5qcworKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9mb3It
c3RhdGVtZW50cy5qcwpAQCAtNjksMyArNjksMTUgQEAgZm9yKHZhciB4IG9mIHdpbmRvdyk7CiBm
b3IodmFyIHggb2YgKHdpbmRvdykpOwogZm9yKHZhcntmb299b2Ygd2luZG93KTsKIGZvcih2YXJb
eCx5XW9mWzEsMiwzXSk7CisKKy8vIEVTMjAxOCAtIEFzeW5jIEl0ZXJhdGlvbiAvIEFzeW5jIEdl
bmVyYXRvcnMKKworYXN5bmMgZnVuY3Rpb24gZigpIHsKKyAgICBmb3IgYXdhaXQgKHggb2ZbXSk7
CisgICAgZm9yIGF3YWl0KHggb2ZbMSwyLDNdKTsKKyAgICBmb3IgYXdhaXQoeCBvZihbMSwyLDNd
KSk7CisgICAgZm9yIGF3YWl0KHZhciB4IG9mIHdpbmRvdyk7CisgICAgZm9yIGF3YWl0KHZhciB4
IG9mICh3aW5kb3cpKTsKKyAgICBmb3IgYXdhaXQobGV0e2Zvb31vZiB3aW5kb3cpOworICAgIGZv
ciBhd2FpdChsZXRbeCx5XW9mWzEsMiwzXSk7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9nZW5lcmF0b3Jz
LWV4cGVjdGVkLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2Vz
L2phdmFzY3JpcHQtdGVzdHMvZ2VuZXJhdG9ycy1leHBlY3RlZC5qcwppbmRleCA0ODllZThkYzkx
Mi4uYzM3YjdmZGY4NjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0
aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2dlbmVyYXRvcnMtZXhwZWN0ZWQuanMKKysr
IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQt
dGVzdHMvZ2VuZXJhdG9ycy1leHBlY3RlZC5qcwpAQCAtMzAsMyArMzAsMzggQEAgZnVuY3Rpb24q
IGdlbigpIHsKIGZ1bmN0aW9uKiBnZW4oYT0xLCBbYiwgY10sIC4uLnJlc3QpIHsKICAgICByZXR1
cm4geWllbGQgeWllbGQgZm9vKCJmb28iKQogfQorCisvLyBFUzIwMTggLSBBc3luYyBJdGVyYXRp
b24gLyBBc3luYyBHZW5lcmF0b3JzCisKK2FzeW5jIGZ1bmN0aW9uKiBnZW4oKSB7fQorYXN5bmMg
ZnVuY3Rpb24qIGdlbigpIHsKKyAgICAxCit9Cithc3luYyBmdW5jdGlvbiogZ2VuKCkge30KK2Fz
eW5jIGZ1bmN0aW9uKiBnZW4oKSB7CisgICAgMQorfQorYXN5bmMgZnVuY3Rpb24qIGdlbigpIHt9
Cithc3luYyBmdW5jdGlvbiogZ2VuKCkgeworICAgIDEKK30KKworYXN5bmMgZnVuY3Rpb24qIGdl
bigpIHsKKyAgICB5aWVsZAorfQorYXN5bmMgZnVuY3Rpb24qIGdlbigpIHsKKyAgICB5aWVsZCB4
Cit9Cithc3luYyBmdW5jdGlvbiogZ2VuKCkgeworICAgIHlpZWxkICJ4IgorfQorYXN5bmMgZnVu
Y3Rpb24qIGdlbigpIHsKKyAgICB5aWVsZCBbeF0KK30KK2FzeW5jIGZ1bmN0aW9uKiBnZW4oKSB7
CisgICAgeWllbGQgZm9vKCkKK30KKworYXN5bmMgZnVuY3Rpb24qIGdlbihhPTEsIFtiLCBjXSwg
Li4ucmVzdCkgeworICAgIHJldHVybiB5aWVsZCB5aWVsZCBmb28oImZvbyIpCit9CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlw
dC10ZXN0cy9nZW5lcmF0b3JzLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcv
cmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvZ2VuZXJhdG9ycy5qcwppbmRleCA3ZGU2Njg5M2U4
Mi4uYTZjMDE2YzRlZmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0
aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2dlbmVyYXRvcnMuanMKKysrIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvZ2Vu
ZXJhdG9ycy5qcwpAQCAtMTIsMyArMTIsMjAgQEAgZnVuY3Rpb24qZ2VuKCl7eWllbGRbeF19CiBm
dW5jdGlvbipnZW4oKXt5aWVsZCBmb28oKX0KIAogZnVuY3Rpb24gKmdlbihhPTEsW2IsY10sLi4u
cmVzdCl7cmV0dXJuIHlpZWxkIHlpZWxkIGZvbygiZm9vIil9CisKKy8vIEVTMjAxOCAtIEFzeW5j
IEl0ZXJhdGlvbiAvIEFzeW5jIEdlbmVyYXRvcnMKKworYXN5bmMgZnVuY3Rpb24qZ2VuKCl7fQor
YXN5bmMgZnVuY3Rpb24qZ2VuKCl7MX0KK2FzeW5jIGZ1bmN0aW9uKiBnZW4oKXt9Cithc3luYyBm
dW5jdGlvbiogZ2VuKCl7MX0KK2FzeW5jIGZ1bmN0aW9uICpnZW4oKXt9Cithc3luYyBmdW5jdGlv
biAqZ2VuKCl7MX0KKworYXN5bmMgZnVuY3Rpb24qZ2VuKCl7eWllbGR9Cithc3luYyBmdW5jdGlv
bipnZW4oKXt5aWVsZCB4fQorYXN5bmMgZnVuY3Rpb24qZ2VuKCl7eWllbGQieCJ9Cithc3luYyBm
dW5jdGlvbipnZW4oKXt5aWVsZFt4XX0KK2FzeW5jIGZ1bmN0aW9uKmdlbigpe3lpZWxkIGZvbygp
fQorCithc3luYyBmdW5jdGlvbiAqZ2VuKGE9MSxbYixjXSwuLi5yZXN0KXtyZXR1cm4geWllbGQg
eWllbGQgZm9vKCJmb28iKX0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3Jt
YXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL251bWJlcnMtZXhwZWN0ZWQuanMgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0
cy9udW1iZXJzLWV4cGVjdGVkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi4zMzIwNjZjYWViYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL251bWJlcnMtZXhwZWN0ZWQu
anMKQEAgLTAsMCArMSw2MCBAQAorLy8gQmFzaWNzCiswOworMTsKKzEyMzsKK05hTjsKK0luZmlu
aXR5OworCisvLyBGbG9hdHMKKzEuMjsKKzFlMjsKKzEuZTM7CisxLjJlMzsKKzEuMmUrMzsKKzEu
MmUtMzsKKworLy8gRGVjaW1hbCBQcmVmaXgKKy4yOworLjJlMzsKKy4yZSszOworLjJlLTM7CisK
Ky8vIFplcm8gUHJlZml4ZWQgLyBMZWdhY3kgT2N0YWwKKzAwOworMDEwOworMDA5OworCisvLyBI
ZXgsIE9jdGFsLCBCaW5hcnkKKzB4MTAxOworMFgyMDE7CiswbzEwMTsKKzBPMjAxOworMGIxMDE7
CiswQjEwMTsKKworLy8gRVMyMDE5IC0gTnVtZXJpYyBTZXBhcmF0b3JzCisxXzJfM180OworMV8w
MDBfMDAwOworMTAwMDBfMDA7CisxXzAwMDAwMF8wXzBfMDsKKzFfMi4zXzRlNV82OworMV8xLjJf
MjsKKzFfMWUyXzI7CisweDFfMDsKKzBYMl8wOworMG8xXzA7CiswTzJfMDsKKzBiMV8wOworMEIx
XzA7CisKKy8vIEVTMjAyMCAtIEJpZ0ludAorMG47CisxMjNuOworMTIzNDU2Nzg5MTIzNDU2Nzg5
MTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5bjsKKzFfMl8zbjsK
KzB4MTIzbjsKKzB4MjIzbjsKKzBvMTIzbjsKKzBPMjIzbjsKKzBiMTAxbjsKKzBCMTAxbjsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZh
c2NyaXB0LXRlc3RzL251bWJlcnMuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGlu
Zy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9udW1iZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zMzIwNjZjYWViYwotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3Rz
L251bWJlcnMuanMKQEAgLTAsMCArMSw2MCBAQAorLy8gQmFzaWNzCiswOworMTsKKzEyMzsKK05h
TjsKK0luZmluaXR5OworCisvLyBGbG9hdHMKKzEuMjsKKzFlMjsKKzEuZTM7CisxLjJlMzsKKzEu
MmUrMzsKKzEuMmUtMzsKKworLy8gRGVjaW1hbCBQcmVmaXgKKy4yOworLjJlMzsKKy4yZSszOwor
LjJlLTM7CisKKy8vIFplcm8gUHJlZml4ZWQgLyBMZWdhY3kgT2N0YWwKKzAwOworMDEwOworMDA5
OworCisvLyBIZXgsIE9jdGFsLCBCaW5hcnkKKzB4MTAxOworMFgyMDE7CiswbzEwMTsKKzBPMjAx
OworMGIxMDE7CiswQjEwMTsKKworLy8gRVMyMDE5IC0gTnVtZXJpYyBTZXBhcmF0b3JzCisxXzJf
M180OworMV8wMDBfMDAwOworMTAwMDBfMDA7CisxXzAwMDAwMF8wXzBfMDsKKzFfMi4zXzRlNV82
OworMV8xLjJfMjsKKzFfMWUyXzI7CisweDFfMDsKKzBYMl8wOworMG8xXzA7CiswTzJfMDsKKzBi
MV8wOworMEIxXzA7CisKKy8vIEVTMjAyMCAtIEJpZ0ludAorMG47CisxMjNuOworMTIzNDU2Nzg5
MTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5bjsK
KzFfMl8zbjsKKzB4MTIzbjsKKzB4MjIzbjsKKzBvMTIzbjsKKzBPMjIzbjsKKzBiMTAxbjsKKzBC
MTAxbjsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291
cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3RyeS1jYXRjaC1maW5hbGx5LXN0YXRlbWVudHMtZXhwZWN0
ZWQuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNj
cmlwdC10ZXN0cy90cnktY2F0Y2gtZmluYWxseS1zdGF0ZW1lbnRzLWV4cGVjdGVkLmpzCmluZGV4
IGQ2Zjc0MzBmMjQ0Li5jNGY5OGM1MWYxNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdHJ5LWNhdGNoLWZpbmFs
bHktc3RhdGVtZW50cy1leHBlY3RlZC5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9y
bWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy90cnktY2F0Y2gtZmluYWxseS1zdGF0
ZW1lbnRzLWV4cGVjdGVkLmpzCkBAIC0xLDMgKzEsMzIgQEAKK3RyeSB7fSBjYXRjaCB7fQordHJ5
IHt9IGNhdGNoIHt9IGZpbmFsbHkge30KKwordHJ5IHsKKyAgICAxCit9IGNhdGNoIHt9Cit0cnkg
eworICAgIDEKK30gY2F0Y2gge30gZmluYWxseSB7fQordHJ5IHsKKyAgICAxCit9IGNhdGNoIHsK
KyAgICAyCit9IGZpbmFsbHkge30KK3RyeSB7CisgICAgMQorfSBjYXRjaCB7CisgICAgMgorfSBm
aW5hbGx5IHsKKyAgICAzCit9CisKK3RyeSB7fSBjYXRjaCB7CisgICAgMgorfSBmaW5hbGx5IHt9
Cit0cnkge30gY2F0Y2gge30gZmluYWxseSB7CisgICAgMworfQorCiB0cnkge30gY2F0Y2ggKGUp
IHt9CiB0cnkge30gY2F0Y2ggKGUpIHt9IGZpbmFsbHkge30KIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdHJ5
LWNhdGNoLWZpbmFsbHktc3RhdGVtZW50cy5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3Jt
YXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3RyeS1jYXRjaC1maW5hbGx5LXN0YXRl
bWVudHMuanMKaW5kZXggYzI0ZDQ5MGNkNDcuLjAzYzdiY2ZiODU2IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy90
cnktY2F0Y2gtZmluYWxseS1zdGF0ZW1lbnRzLmpzCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3RyeS1jYXRjaC1maW5hbGx5
LXN0YXRlbWVudHMuanMKQEAgLTEsMyArMSwxNCBAQAordHJ5e31jYXRjaHt9Cit0cnl7fWNhdGNo
e31maW5hbGx5e30KKwordHJ5ezF9Y2F0Y2h7fQordHJ5ezF9Y2F0Y2h7fWZpbmFsbHl7fQordHJ5
ezF9Y2F0Y2h7Mn1maW5hbGx5e30KK3RyeXsxfWNhdGNoezJ9ZmluYWxseXszfQorCit0cnl7fWNh
dGNoezJ9ZmluYWxseXt9Cit0cnl7fWNhdGNoe31maW5hbGx5ezN9CisKIHRyeXt9Y2F0Y2goZSl7
fQogdHJ5e31jYXRjaChlKXt9ZmluYWxseXt9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3VuYXJ5LWJpbmFy
eS1leHByZXNzaW9ucy1leHBlY3RlZC5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0
aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3VuYXJ5LWJpbmFyeS1leHByZXNzaW9ucy1l
eHBlY3RlZC5qcwppbmRleCAyMjdmOGE4NDhjYS4uZDdiZTQ2NzZhNTUgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3Rz
L3VuYXJ5LWJpbmFyeS1leHByZXNzaW9ucy1leHBlY3RlZC5qcworKysgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy91bmFyeS1iaW5h
cnktZXhwcmVzc2lvbnMtZXhwZWN0ZWQuanMKQEAgLTY3LDMgKzY3LDEwIEBAIHR5cGVvZiB4Owog
dHlwZW9mICh4KTsKIHggaW5zdGFuY2VvZiB4OwogeCBpbnN0YW5jZW9mICh4KTsKKworLy8gRVMy
MDIwIC0gQmlnSW50CisxbiArIDJuIC0gM24gKiA0biAvIDVuICUgNm47CisxMjNuID09PSAwOwor
MCA9PT0gMTIzbjsKKysxMjNuID09PSAtMTIzbjsKKy0xMjNuID09PSArMTIzbjsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0
LXRlc3RzL3VuYXJ5LWJpbmFyeS1leHByZXNzaW9ucy5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3VuYXJ5LWJpbmFyeS1leHBy
ZXNzaW9ucy5qcwppbmRleCBkMDY4MmY2ZDc1YS4uM2ZiNDdkMDcxYTMgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3Rz
L3VuYXJ5LWJpbmFyeS1leHByZXNzaW9ucy5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Zm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy91bmFyeS1iaW5hcnktZXhwcmVz
c2lvbnMuanMKQEAgLTYxLDMgKzYxLDExIEBAIHR5cGVvZiB4OwogdHlwZW9mKHgpOwogeCBpbnN0
YW5jZW9mIHg7CiB4IGluc3RhbmNlb2YoeCk7CisKKworLy8gRVMyMDIwIC0gQmlnSW50Cisxbisy
bi0zbio0bi81biU2bjsKKzEyM249PT0wOworMD09PTEyM247CisrMTIzbj09PS0xMjNuOworLTEy
M249PT0rMTIzbjsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5n
L3Jlc291cmNlcy91dGlsaXRpZXMuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGlu
Zy9yZXNvdXJjZXMvdXRpbGl0aWVzLmpzCmluZGV4IDUxOWVjNGQ5Y2VmLi4xNGNhZWY4NGY0NiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL3V0
aWxpdGllcy5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJj
ZXMvdXRpbGl0aWVzLmpzCkBAIC05LDQ3ICs5LDQ3IEBAIFRlc3RQYWdlLnJlZ2lzdGVySW5pdGlh
bGl6ZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIHJ1
bkZvcm1hdHRpbmdUZXN0KG1vZGUsIHRlc3ROYW1lLCB0ZXN0VVJMKSB7Ci0gICAgICAgIHJldHVy
biBsb2FkRm9ybWF0dGluZ1Rlc3RBbmRFeHBlY3RlZFJlc3VsdHModGVzdFVSTCkudGhlbihmdW5j
dGlvbihyZXN1bHRzKSB7Ci0gICAgICAgICAgICBsZXQge3Rlc3RUZXh0LCBleHBlY3RlZFRleHR9
ID0gcmVzdWx0czsKLSAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHsKLSAgICAgICAgICAgICAgICBsZXQgd29ya2VyUHJveHkgPSBXSS5Gb3Jt
YXR0ZXJXb3JrZXJQcm94eS5zaW5nbGV0b24oKTsKLSAgICAgICAgICAgICAgICBjb25zdCBpbmRl
bnRTdHJpbmcgPSAiICAgICI7CisgICAgYXN5bmMgZnVuY3Rpb24gcnVuRm9ybWF0dGluZ1Rlc3Qo
bW9kZSwgdGVzdE5hbWUsIHRlc3RVUkwpIHsKKyAgICAgICAgbGV0IHt0ZXN0VGV4dCwgZXhwZWN0
ZWRUZXh0fSA9IGF3YWl0IGxvYWRGb3JtYXR0aW5nVGVzdEFuZEV4cGVjdGVkUmVzdWx0cyh0ZXN0
VVJMKTsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVj
dCkgeworICAgICAgICAgICAgbGV0IHdvcmtlclByb3h5ID0gV0kuRm9ybWF0dGVyV29ya2VyUHJv
eHkuc2luZ2xldG9uKCk7CisgICAgICAgICAgICBjb25zdCBpbmRlbnRTdHJpbmcgPSAiICAgICI7
CiAKLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayh7Zm9ybWF0dGVkVGV4dCwgc291
cmNlTWFwRGF0YX0pIHsKLSAgICAgICAgICAgICAgICAgICAgbGV0IHBhc3MgPSBmb3JtYXR0ZWRU
ZXh0ID09PSBleHBlY3RlZFRleHQ7Ci0gICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
bG9nKHBhc3MgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICAgICAgICAgZnVuY3Rpb24gY2FsbGJh
Y2soe2Zvcm1hdHRlZFRleHQsIHNvdXJjZU1hcERhdGF9KSB7CisgICAgICAgICAgICAgICAgbGV0
IHBhc3MgPSBmb3JtYXR0ZWRUZXh0ID09PSBleHBlY3RlZFRleHQ7CisgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5wYXNzT3JGYWlsKHBhc3MsIHRlc3ROYW1lKTsKIAotICAgICAgICAgICAg
ICAgICAgICBpZiAoIXBhc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRl
c3QubG9nKCJJbnB1dDoiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
bG9nKCItLS0tLS0tLS0tLSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5sb2codGVzdFRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5s
b2coIi0tLS0tLS0tLS0tIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmxvZygiRm9ybWF0dGVkIE91dHB1dDogIiArIGZvcm1hdHRlZFRleHQubGVuZ3RoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCItLS0tLS0tLS0tLSIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coZm9ybWF0dGVkVGV4dCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiLS0tLS0tLS0tLS0iKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJFeHBlY3RlZCBPdXRw
dXQ6ICIgKyBleHBlY3RlZFRleHQubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIElu
c3BlY3RvclRlc3QubG9nKCItLS0tLS0tLS0tLSIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5sb2coZXhwZWN0ZWRUZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEluc3BlY3RvclRlc3QubG9nKCItLS0tLS0tLS0tLSIpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShwYXNzKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZm9ybWF0dGVkVGV4dCA9PT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5sb2coIkZhaWxlZCB0byBwYXJzZSEiKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgh
cGFzcykgeworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiSW5wdXQ6Iik7
CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCItLS0tLS0tLS0tLSIpOwor
ICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZyh0ZXN0VGV4dCk7CisgICAgICAg
ICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCItLS0tLS0tLS0tLSIpOworICAgICAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiRm9ybWF0dGVkIE91dHB1dDogIiArIGZvcm1h
dHRlZFRleHQubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2co
Ii0tLS0tLS0tLS0tIik7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKGZv
cm1hdHRlZFRleHQpOworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiLS0t
LS0tLS0tLS0iKTsKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkV4cGVj
dGVkIE91dHB1dDogIiArIGV4cGVjdGVkVGV4dC5sZW5ndGgpOworICAgICAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmxvZygiLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5sb2coZXhwZWN0ZWRUZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5sb2coIi0tLS0tLS0tLS0tIik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAidGV4dC9q
YXZhc2NyaXB0IjogewotICAgICAgICAgICAgICAgICAgICBsZXQgaXNNb2R1bGUgPSAvXm1vZHVs
ZS8udGVzdCh0ZXN0TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHdvcmtlclByb3h5LmZvcm1h
dEphdmFTY3JpcHQodGVzdFRleHQsIGlzTW9kdWxlLCBpbmRlbnRTdHJpbmcsIGNhbGxiYWNrKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGNhc2Ug
InRleHQvY3NzIjoKLSAgICAgICAgICAgICAgICAgICAgd29ya2VyUHJveHkuZm9ybWF0Q1NTKHRl
c3RUZXh0LCBpbmRlbnRTdHJpbmcsIGNhbGxiYWNrKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzd2l0
Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgInRleHQvamF2YXNjcmlwdCI6IHsKKyAgICAg
ICAgICAgICAgICBsZXQgaXNNb2R1bGUgPSAvXm1vZHVsZS8udGVzdCh0ZXN0TmFtZSk7CisgICAg
ICAgICAgICAgICAgd29ya2VyUHJveHkuZm9ybWF0SmF2YVNjcmlwdCh0ZXN0VGV4dCwgaXNNb2R1
bGUsIGluZGVudFN0cmluZywgY2FsbGJhY2spOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlICJ0ZXh0L2NzcyI6CisgICAgICAgICAgICAg
ICAgd29ya2VyUHJveHkuZm9ybWF0Q1NTKHRlc3RUZXh0LCBpbmRlbnRTdHJpbmcsIGNhbGxiYWNr
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAg
ICAgfQogCkBAIC01NywxNiArNTcsMTYgQEAgVGVzdFBhZ2UucmVnaXN0ZXJJbml0aWFsaXplcihm
dW5jdGlvbigpIHsKICAgICAgICAgbGV0IHRlc3RQYWdlVVJMID0gV0kubmV0d29ya01hbmFnZXIu
bWFpbkZyYW1lLm1haW5SZXNvdXJjZS51cmw7CiAgICAgICAgIGxldCB0ZXN0UGFnZVJlc291cmNl
c1VSTCA9IHRlc3RQYWdlVVJMLnN1YnN0cmluZygwLCB0ZXN0UGFnZVVSTC5sYXN0SW5kZXhPZigi
LyIpKTsKIAotICAgICAgICBmb3IgKGxldCB0ZXN0IG9mIHRlc3RzKSB7Ci0gICAgICAgICAgICBs
ZXQgdGVzdE5hbWUgPSB0ZXN0LnN1YnN0cmluZyh0ZXN0Lmxhc3RJbmRleE9mKCIvIikgKyAxKTsK
LSAgICAgICAgICAgIGxldCB0ZXN0VVJMID0gdGVzdFBhZ2VSZXNvdXJjZXNVUkwgKyAiLyIgKyB0
ZXN0OwotICAgICAgICAgICAgc3VpdGUuYWRkVGVzdENhc2UoewotICAgICAgICAgICAgICAgIG5h
bWU6IHN1aXRlLm5hbWUgKyAiLiIgKyB0ZXN0TmFtZSwKLSAgICAgICAgICAgICAgICB0ZXN0KHJl
c29sdmUsIHJlamVjdCkgewotICAgICAgICAgICAgICAgICAgICBydW5Gb3JtYXR0aW5nVGVzdCht
b2RlLCB0ZXN0TmFtZSwgdGVzdFVSTCkudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpOwotICAg
ICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgdGltZW91dDogLTEsCi0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfQorICAgICAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAgICAgICAg
ICBuYW1lOiBzdWl0ZS5uYW1lLAorICAgICAgICAgICAgdGltZW91dDogLTEsCisgICAgICAgICAg
ICBhc3luYyB0ZXN0KHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgICAgIGZvciAobGV0
IHRlc3Qgb2YgdGVzdHMpIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IHRlc3ROYW1lID0gdGVz
dC5zdWJzdHJpbmcodGVzdC5sYXN0SW5kZXhPZigiLyIpICsgMSk7CisgICAgICAgICAgICAgICAg
ICAgIGxldCB0ZXN0VVJMID0gdGVzdFBhZ2VSZXNvdXJjZXNVUkwgKyAiLyIgKyB0ZXN0OworICAg
ICAgICAgICAgICAgICAgICBhd2FpdCBydW5Gb3JtYXR0aW5nVGVzdChtb2RlLCB0ZXN0TmFtZSwg
dGVzdFVSTCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsK
ICAgICB9OwogfSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvcGFy
c2Utc2NyaXB0LXN5bnRheC10cmVlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwv
cGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLmh0bWwKaW5kZXggMjBhZGU4NjQyNmEuLjQ2N2M0ZmVh
MjVlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0
LXN5bnRheC10cmVlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVsL3BhcnNl
LXNjcmlwdC1zeW50YXgtdHJlZS5odG1sCkBAIC0xMDksMTAgKzEwOSwyMCBAQCBmdW5jdGlvbiB0
ZXN0KCkKICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmFyZ3VtZW50c1sxXS50eXBlID09
PSBXSS5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkxpdGVyYWwpOwogICAgIEluc3BlY3RvclRl
c3QubG9nKCJwYXNzZWQgQ2FsbEV4cHJlc3Npb24iKTsKIAotICAgIG5vZGUgPSBtYWtlTm9kZSgi
dHJ5IHt9IGNhdGNoKGUpIHt9ICIsIGZhbHNlKTsKKyAgICBub2RlID0gbWFrZU5vZGUoInRyeSB7
fSBjYXRjaChlKSB7fSIsIGZhbHNlKTsKICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLnR5
cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVHJ5U3RhdGVtZW50KTsKKyAgICBJ
bnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmhhbmRsZXIudHlwZSA9PT0gV0kuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5DYXRjaENsYXVzZSk7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9k
ZS5oYW5kbGVyLnBhcmFtLnR5cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWRl
bnRpZmllcik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQoIW5vZGUuZmluYWxpemVyKTsKKyAg
ICBub2RlID0gbWFrZU5vZGUoInRyeSB7fSBjYXRjaCB7fSIsIGZhbHNlKTsKKyAgICBJbnNwZWN0
b3JUZXN0LmFzc2VydChub2RlLnR5cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
VHJ5U3RhdGVtZW50KTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmhhbmRsZXIudHlw
ZSA9PT0gV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5DYXRjaENsYXVzZSk7CisgICAgSW5z
cGVjdG9yVGVzdC5hc3NlcnQoIW5vZGUuaGFuZGxlci5wYXJhbSk7CisgICAgbm9kZSA9IG1ha2VO
b2RlKCJ0cnkge30gZmluYWxseSB7fSIsIGZhbHNlKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2Vy
dChub2RlLnR5cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVHJ5U3RhdGVtZW50
KTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydCghbm9kZS5oYW5kbGVyKTsKKyAgICBJbnNwZWN0
b3JUZXN0LmFzc2VydChub2RlLmZpbmFsaXplci50eXBlID09PSBXSS5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLkJsb2NrU3RhdGVtZW50KTsKICAgICBJbnNwZWN0b3JUZXN0LmxvZygicGFzc2Vk
IFRyeVN0YXRlbWVudCIpOwotICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuaGFuZGxlci50
eXBlID09PSBXSS5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNhdGNoQ2xhdXNlKTsKICAgICBJ
bnNwZWN0b3JUZXN0LmxvZygicGFzc2VkIENhdGNoQ2xhdXNlIik7CiAKICAgICBub2RlID0gbWFr
ZU5vZGUoImZvbyA/IGJhciA6IGJhejsiLCB0cnVlKTsKQEAgLTE4Myw2ICsxOTMsNyBAQCBmdW5j
dGlvbiB0ZXN0KCkKIAogICAgIG5vZGUgPSBtYWtlTm9kZSgiZm9yKHZhciB4IG9mIHt9KTsiLCBm
YWxzZSk7CiAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS50eXBlID09PSBXSS5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLkZvck9mU3RhdGVtZW50KTsKKyAgICBJbnNwZWN0b3JUZXN0LmFz
c2VydCghbm9kZS5hd2FpdCk7CiAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5sZWZ0KTsK
ICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmxlZnQudHlwZSA9PT0gV0kuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0aW9uKTsKICAgICBJbnNwZWN0b3JUZXN0
LmFzc2VydChub2RlLnJpZ2h0KTsKQEAgLTE5MSwxMCArMjAyLDE2IEBAIGZ1bmN0aW9uIHRlc3Qo
KQogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuYm9keS50eXBlID09PSBXSS5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLkVtcHR5U3RhdGVtZW50KTsKICAgICBub2RlID0gbWFrZU5vZGUo
ImZvcih2YXIge3h9IG9mIHt9KTsiLCBmYWxzZSk7CiAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQo
bm9kZS50eXBlID09PSBXSS5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZvck9mU3RhdGVtZW50
KTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydCghbm9kZS5hd2FpdCk7CiAgICAgSW5zcGVjdG9y
VGVzdC5hc3NlcnQobm9kZS5sZWZ0KTsKICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmxl
ZnQudHlwZSA9PT0gV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0
aW9uKTsKICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmxlZnQuZGVjbGFyYXRpb25zWzBd
LmlkLnR5cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuT2JqZWN0UGF0dGVybik7
CiAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5sZWZ0LmRlY2xhcmF0aW9uc1swXS5pZC5w
cm9wZXJ0aWVzWzBdLnZhbHVlLm5hbWUgPT09ICJ4Iik7CisgICAgbm9kZSA9IG1ha2VOb2RlKCJh
c3luYyBmdW5jdGlvbiBmb28oKSB7IGZvciBhd2FpdCAoeCBvZiBbXSk7IH0iLCBmYWxzZSk7Cisg
ICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS50eXBlID09PSBXSS5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0
KG5vZGUuYXN5bmMpOworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuYm9keS5ib2R5WzBd
LnR5cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRm9yT2ZTdGF0ZW1lbnQpOwor
ICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuYm9keS5ib2R5WzBdLmF3YWl0KTsKICAgICBJ
bnNwZWN0b3JUZXN0LmxvZygicGFzc2VkIEZvck9mU3RhdGVtZW50Iik7CiAKICAgICBub2RlID0g
bWFrZU5vZGUoImZ1bmN0aW9uIGZvbyh4LHkpe30iLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5n
ZUxvZwppbmRleCAxMjdmODc2ZjgzZC4uMTZmZmU3NTIxOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE5LTA4LTE1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNv
cmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogVXBkYXRlIEVzcHJpbWEg
dG8gc3VwcG9ydCBtb2Rlcm4gSmF2YVNjcmlwdCBsYW5ndWFnZSBmZWF0dXJlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwNzk2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGEgZm9yayBvZiBFc3By
aW1hIHRvIHN1cHBvcnQgbW9kZXJuIEphdmFTY3JpcHQgbGFuZ3VhZ2UgZmVhdHVyZXMKKyAgICAg
ICAgd2hpbGUgZ29pbmcgdGhyb3VnaCB0aGUgcHJvY2VzcyB0byB1cHN0cmVhbSBzdXBwb3J0Ogor
CisgICAgICAgICAgRVMyMDE4IEZlYXR1cmU6IEFzeW5jIEl0ZXJhdGlvbiAoZm9yLWF3YWl0LW9m
KQorICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvZXNwcmltYS9pc3N1ZXMvMTk5
MAorCisgICAgICAgICAgRVMyMDE5IEZlYXR1cmU6IE51bWVyaWMgU2VwYXJhdG9yCisgICAgICAg
ICAgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9lc3ByaW1hL2lzc3Vlcy8xOTg5CisKKyAgICAg
ICAgICBFUzIwMTkgRmVhdHVyZTogT3B0aW9uYWwgY2F0Y2ggYmluZGluZworICAgICAgICAgIGh0
dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvZXNwcmltYS9pc3N1ZXMvMTk1MworCisgICAgICAgICAg
RVMyMDIwIEZlYXR1cmU6IEJpZ0ludAorICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVl
cnkvZXNwcmltYS9pc3N1ZXMvMTk4OAorCisgICAgICAgIEVTVHJlZSBjb21wYXRpYmxlIEFTVCBj
aGFuZ2VzIGFyZSBzdW1tYXJpemVkIGFzOgorCisgICAgICAgICAgKiBDYXRjaENsYXVzZSBgcGFy
YW1gIHByb3BlcnR5IGlzIG5vdyBudWxsYWJsZQorICAgICAgICAgICogRm9yT2ZTdGF0ZW1lbnQg
bm93IGEgYm9vbGVhbiBgYXdhaXRgIHByb3BlcnR5CisgICAgICAgICAgKiBMaXRlcmFsIGNhbiBi
ZSBhIGAiYmlnaW50ImAgdHlwZSAod29ya3MgaWYgdGhlIGVudmlyb25tZW50IGhhcyBCaWdJbnQg
b3Igbm90KQorCisgICAgICAgIFRoZSBwcmV0dHkgcHJpbnRlciBvbmx5IG5lZWRlZCB0byBoYXZl
IGFkZGl0aW9uYWwgaGFuZGxpbmcgZm9yIGBmb3ItYXdhaXQtb2ZgLgorCisgICAgICAgICogVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEuanM6CisgICAgICAgIE5ldyB2ZXJz
aW9uLiBUeXBlc2NyaXB0IG91dHB1dCBleHBlY3RzIGEgbW9kZXJuIEphdmFTY3JpcHQgZW52aXJv
bm1lbnQKKyAgICAgICAgaW5zdGVhZCBvZiBqdXN0IEVTNi4KKworICAgICAgICAqIFRvb2xzL0Zv
cm1hdHRpbmcvaW5kZXguaHRtbDoKKyAgICAgICAgVXBkYXRlIHRoZSBmb3JtYXR0aW5nIHRvb2wg
Zm9yIGVhc2llciB1c2UgaW4gY2FzZSBvZiBlcnJvcnMuCisKKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzOgorICAgICAgICAoV0kuU2NyaXB0U3ludGF4
VHJlZS5wcm90b3R5cGUuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZSk6CisKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL1Rlc3QvVGVzdEhhcm5lc3MuanM6CisgICAgICAgIChUZXN0SGFybmVzcy5w
cm90b3R5cGUucGFzc09yRmFpbCk6CisgICAgICAgIENvbnZlbmllbmNlIGZvciBwYXNzL2ZhaWwg
d2l0aCB0aGUgc2FtZSBtZXNzYWdlIGJhc2VkIG9uIGEgY29uZGl0aW9uLgorCisgICAgICAgICog
VXNlckludGVyZmFjZS9Xb3JrZXJzL0Zvcm1hdHRlci9Fc3ByaW1hRm9ybWF0dGVyLmpzOgorICAg
ICAgICAoRXNwcmltYUZvcm1hdHRlci5wcm90b3R5cGUuX2hhbmRsZVRva2VuQXROb2RlKToKKyAg
ICAgICAgRW5zdXJlIGEgc3BhY2UgYWZ0ZXIgYGF3YWl0YCBpbiBgZm9yIGF3YWl0YCBzeW50YXgu
CisKIDIwMTktMDgtMTUgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBVcGRhdGUgRXNwcmltYSB0byB0cnVuayAobWlub3IgZml4
ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvRm9ybWF0dGluZy9p
bmRleC5odG1sIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL0Zvcm1hdHRpbmcvaW5kZXgu
aHRtbAppbmRleCBjMDI0NjAzOWFlZC4uNWZjMGNmMGMwNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Ub29scy9Gb3JtYXR0aW5nL2luZGV4Lmh0bWwKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1Rvb2xzL0Zvcm1hdHRpbmcvaW5kZXguaHRtbApAQCAtNTUsNiArNTUsNyBA
QAogICAgICAgICAibG9naWMtZXhwcmVzc2lvbnMuanMiLAogICAgICAgICAidGVybmFyeS1leHBy
ZXNzaW9ucy5qcyIsCiAgICAgICAgICJuZXctZXhwcmVzc2lvbi5qcyIsCisgICAgICAgICJudW1i
ZXJzLmpzIiwKICAgICAgICAgImxhYmVsLWJyZWFrLWNvbnRpbnVlLWJsb2NrLmpzIiwKICAgICAg
ICAgIndpdGgtc3RhdGVtZW50LmpzIiwKICAgICAgICAgInJldHVybi1zdGF0ZW1lbnQuanMiLApA
QCAtMjAxLDcgKzIwMiw3IEBACiAgICAgICAgICAgICBsZXQgZGVidWdGb3JtYXR0ZXIgPSBuZXcg
RXNwcmltYUZvcm1hdHRlckRlYnVnKGNtLmdldFZhbHVlKCksIGN1cnJlbnRTb3VyY2VUeXBlKCkp
OwogICAgICAgICAgICAgZGVidWdUZXh0ID0gZGVidWdGb3JtYXR0ZXIuZGVidWdUZXh0OwogICAg
ICAgICB9IGNhdGNoIChlcnJvcikgewotICAgICAgICAgICAgZGVidWdUZXh0ID0gIlBhcnNlIGVy
cm9yIjsKKyAgICAgICAgICAgIGRlYnVnVGV4dCA9ICJQYXJzZSBlcnJvcjogIiArIEpTT04uc3Ry
aW5naWZ5KGVycm9yLCBudWxsLCAyKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIE91dHB1dCB0
aGUgcmVzdWx0cy4KQEAgLTI2NSwxMiArMjY2LDEyIEBACiAKICAgICAgICAgICAgIC8vIENvbXBh
cmUgcmVzdWx0cy4KICAgICAgICAgICAgIGxldCBwYXNzID0gZm9ybWF0dGVyLmZvcm1hdHRlZFRl
eHQgPT09IGV4cGVjdGVkRGF0YTsKLSAgICAgICAgICAgIHJlc3VsdHMucHVzaCgiLyogIiArIChw
YXNzID8gIlBBU1MiIDogIkZBSUwiKSArICI6ICIgKyB0ZXN0ICsgIiAqLyIpOworICAgICAgICAg
ICAgcmVzdWx0cy5wdXNoKCIvKiAiICsgKHBhc3MgPyAiUEFTUyIgOiAiISEgRkFJTCIpICsgIjog
IiArIHRlc3QgKyAiICovIik7CiAKICAgICAgICAgICAgIC8vIE91dHB1dCBmYWlsdXJlcyB0byBj
b25zb2xlLgogICAgICAgICAgICAgaWYgKCFwYXNzKSB7CiAgICAgICAgICAgICAgICAgY29uc29s
ZS5sb2coIlRlc3QiLCB0ZXN0KTsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiRm9ybWF0
dGVkIE91dHB1dCIsIGZvcm1hdHRlci5mb3JtYXR0ZWRUZXh0Lmxlbmd0aCk7CisgICAgICAgICAg
ICAgICAgY29uc29sZS5sb2coIkZvcm1hdHRlZCBPdXRwdXQiLCBmb3JtYXR0ZXIuZm9ybWF0dGVk
VGV4dCA/IGZvcm1hdHRlci5mb3JtYXR0ZWRUZXh0Lmxlbmd0aCA6IG51bGwpOwogICAgICAgICAg
ICAgICAgIGNvbnNvbGUubG9nKGZvcm1hdHRlci5mb3JtYXR0ZWRUZXh0KTsKICAgICAgICAgICAg
ICAgICBjb25zb2xlLmxvZygiRXhwZWN0ZWQgT3V0cHV0IiwgZXhwZWN0ZWREYXRhLmxlbmd0aCk7
CiAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXhwZWN0ZWREYXRhKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvZXNw
cmltYS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0Vz
cHJpbWEvZXNwcmltYS5qcwppbmRleCA5YzMzYjlkODk2Ni4uMDA0YTc4NTIzODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEv
ZXNwcmltYS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Fc3ByaW1hL2VzcHJpbWEuanMKQEAgLTgyLDEzICs4MiwxMyBAQCByZXR1cm4gLyoqKioq
Ki8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAgICAqLwogICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVs
ZSIsIHsgdmFsdWU6IHRydWUgfSk7Ci0gICAgdmFyIGNvbW1lbnRfaGFuZGxlcl8xID0gX193ZWJw
YWNrX3JlcXVpcmVfXygxKTsKLSAgICB2YXIganN4X3BhcnNlcl8xID0gX193ZWJwYWNrX3JlcXVp
cmVfXygzKTsKLSAgICB2YXIgcGFyc2VyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpOwotICAg
IHZhciB0b2tlbml6ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpOworICAgIGNvbnN0IGNv
bW1lbnRfaGFuZGxlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTsKKyAgICBjb25zdCBqc3hf
cGFyc2VyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOworICAgIGNvbnN0IHBhcnNlcl8xID0g
X193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKKyAgICBjb25zdCB0b2tlbml6ZXJfMSA9IF9fd2VicGFj
a19yZXF1aXJlX18oMTUpOwogICAgIGZ1bmN0aW9uIHBhcnNlKGNvZGUsIG9wdGlvbnMsIGRlbGVn
YXRlKSB7Ci0gICAgICAgIHZhciBjb21tZW50SGFuZGxlciA9IG51bGw7Ci0gICAgICAgIHZhciBw
cm94eURlbGVnYXRlID0gZnVuY3Rpb24gKG5vZGUsIG1ldGFkYXRhKSB7CisgICAgICAgIGxldCBj
b21tZW50SGFuZGxlciA9IG51bGw7CisgICAgICAgIGNvbnN0IHByb3h5RGVsZWdhdGUgPSAobm9k
ZSwgbWV0YWRhdGEpID0+IHsKICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZSkgewogICAgICAgICAg
ICAgICAgIGRlbGVnYXRlKG5vZGUsIG1ldGFkYXRhKTsKICAgICAgICAgICAgIH0KQEAgLTk2LDEx
ICs5NiwxMSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFj
a0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIGNvbW1lbnRIYW5kbGVyLnZpc2l0KG5vZGUsIG1l
dGFkYXRhKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKLSAgICAgICAgdmFyIHBhcnNlckRl
bGVnYXRlID0gKHR5cGVvZiBkZWxlZ2F0ZSA9PT0gJ2Z1bmN0aW9uJykgPyBwcm94eURlbGVnYXRl
IDogbnVsbDsKLSAgICAgICAgdmFyIGNvbGxlY3RDb21tZW50ID0gZmFsc2U7CisgICAgICAgIGxl
dCBwYXJzZXJEZWxlZ2F0ZSA9ICh0eXBlb2YgZGVsZWdhdGUgPT09ICdmdW5jdGlvbicpID8gcHJv
eHlEZWxlZ2F0ZSA6IG51bGw7CisgICAgICAgIGxldCBjb2xsZWN0Q29tbWVudCA9IGZhbHNlOwog
ICAgICAgICBpZiAob3B0aW9ucykgewogICAgICAgICAgICAgY29sbGVjdENvbW1lbnQgPSAodHlw
ZW9mIG9wdGlvbnMuY29tbWVudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCk7Ci0g
ICAgICAgICAgICB2YXIgYXR0YWNoQ29tbWVudCA9ICh0eXBlb2Ygb3B0aW9ucy5hdHRhY2hDb21t
ZW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5hdHRhY2hDb21tZW50KTsKKyAgICAgICAgICAg
IGNvbnN0IGF0dGFjaENvbW1lbnQgPSAodHlwZW9mIG9wdGlvbnMuYXR0YWNoQ29tbWVudCA9PT0g
J2Jvb2xlYW4nICYmIG9wdGlvbnMuYXR0YWNoQ29tbWVudCk7CiAgICAgICAgICAgICBpZiAoY29s
bGVjdENvbW1lbnQgfHwgYXR0YWNoQ29tbWVudCkgewogICAgICAgICAgICAgICAgIGNvbW1lbnRI
YW5kbGVyID0gbmV3IGNvbW1lbnRfaGFuZGxlcl8xLkNvbW1lbnRIYW5kbGVyKCk7CiAgICAgICAg
ICAgICAgICAgY29tbWVudEhhbmRsZXIuYXR0YWNoID0gYXR0YWNoQ29tbWVudDsKQEAgLTEwOCwx
OSArMTA4LDE5IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJw
YWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgcGFyc2VyRGVsZWdhdGUgPSBwcm94eURlbGVn
YXRlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHZhciBpc01vZHVsZSA9IGZh
bHNlOworICAgICAgICBsZXQgaXNNb2R1bGUgPSBmYWxzZTsKICAgICAgICAgaWYgKG9wdGlvbnMg
JiYgdHlwZW9mIG9wdGlvbnMuc291cmNlVHlwZSA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAg
IGlzTW9kdWxlID0gKG9wdGlvbnMuc291cmNlVHlwZSA9PT0gJ21vZHVsZScpOwogICAgICAgICB9
Ci0gICAgICAgIHZhciBwYXJzZXI7CisgICAgICAgIGxldCBwYXJzZXI7CiAgICAgICAgIGlmIChv
cHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmpzeCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuanN4
KSB7CiAgICAgICAgICAgICBwYXJzZXIgPSBuZXcganN4X3BhcnNlcl8xLkpTWFBhcnNlcihjb2Rl
LCBvcHRpb25zLCBwYXJzZXJEZWxlZ2F0ZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBwYXJzZXIgPSBuZXcgcGFyc2VyXzEuUGFyc2VyKGNvZGUsIG9wdGlvbnMsIHBh
cnNlckRlbGVnYXRlKTsKICAgICAgICAgfQotICAgICAgICB2YXIgcHJvZ3JhbSA9IGlzTW9kdWxl
ID8gcGFyc2VyLnBhcnNlTW9kdWxlKCkgOiBwYXJzZXIucGFyc2VTY3JpcHQoKTsKLSAgICAgICAg
dmFyIGFzdCA9IHByb2dyYW07CisgICAgICAgIGNvbnN0IHByb2dyYW0gPSBpc01vZHVsZSA/IHBh
cnNlci5wYXJzZU1vZHVsZSgpIDogcGFyc2VyLnBhcnNlU2NyaXB0KCk7CisgICAgICAgIGNvbnN0
IGFzdCA9IHByb2dyYW07CiAgICAgICAgIGlmIChjb2xsZWN0Q29tbWVudCAmJiBjb21tZW50SGFu
ZGxlcikgewogICAgICAgICAgICAgYXN0LmNvbW1lbnRzID0gY29tbWVudEhhbmRsZXIuY29tbWVu
dHM7CiAgICAgICAgIH0KQEAgLTEzNCwyNCArMTM0LDI0IEBAIHJldHVybiAvKioqKioqLyAoZnVu
Y3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgfQogICAgIGV4cG9ydHMu
cGFyc2UgPSBwYXJzZTsKICAgICBmdW5jdGlvbiBwYXJzZU1vZHVsZShjb2RlLCBvcHRpb25zLCBk
ZWxlZ2F0ZSkgewotICAgICAgICB2YXIgcGFyc2luZ09wdGlvbnMgPSBvcHRpb25zIHx8IHt9Owor
ICAgICAgICBjb25zdCBwYXJzaW5nT3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgIHBh
cnNpbmdPcHRpb25zLnNvdXJjZVR5cGUgPSAnbW9kdWxlJzsKICAgICAgICAgcmV0dXJuIHBhcnNl
KGNvZGUsIHBhcnNpbmdPcHRpb25zLCBkZWxlZ2F0ZSk7CiAgICAgfQogICAgIGV4cG9ydHMucGFy
c2VNb2R1bGUgPSBwYXJzZU1vZHVsZTsKICAgICBmdW5jdGlvbiBwYXJzZVNjcmlwdChjb2RlLCBv
cHRpb25zLCBkZWxlZ2F0ZSkgewotICAgICAgICB2YXIgcGFyc2luZ09wdGlvbnMgPSBvcHRpb25z
IHx8IHt9OworICAgICAgICBjb25zdCBwYXJzaW5nT3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAg
ICAgICAgIHBhcnNpbmdPcHRpb25zLnNvdXJjZVR5cGUgPSAnc2NyaXB0JzsKICAgICAgICAgcmV0
dXJuIHBhcnNlKGNvZGUsIHBhcnNpbmdPcHRpb25zLCBkZWxlZ2F0ZSk7CiAgICAgfQogICAgIGV4
cG9ydHMucGFyc2VTY3JpcHQgPSBwYXJzZVNjcmlwdDsKICAgICBmdW5jdGlvbiB0b2tlbml6ZShj
b2RlLCBvcHRpb25zLCBkZWxlZ2F0ZSkgewotICAgICAgICB2YXIgdG9rZW5pemVyID0gbmV3IHRv
a2VuaXplcl8xLlRva2VuaXplcihjb2RlLCBvcHRpb25zKTsKLSAgICAgICAgdmFyIHRva2VuczsK
KyAgICAgICAgY29uc3QgdG9rZW5pemVyID0gbmV3IHRva2VuaXplcl8xLlRva2VuaXplcihjb2Rl
LCBvcHRpb25zKTsKKyAgICAgICAgbGV0IHRva2VuczsKICAgICAgICAgdG9rZW5zID0gW107CiAg
ICAgICAgIHRyeSB7CiAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAg
IHZhciB0b2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICBs
ZXQgdG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7CiAgICAgICAgICAgICAgICAgaWYg
KCF0b2tlbikgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CkBAIC0xODIsMjIgKzE4MiwyMiBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMp
IHsgLy8gd2VicGFja0Jvb3RzdHJhcAogCiAgICAgInVzZSBzdHJpY3QiOwogICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7Ci0g
ICAgdmFyIHN5bnRheF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTsKLSAgICB2YXIgQ29tbWVu
dEhhbmRsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9u
IENvbW1lbnRIYW5kbGVyKCkgeworICAgIGNvbnN0IHN5bnRheF8xID0gX193ZWJwYWNrX3JlcXVp
cmVfXygyKTsKKyAgICBjbGFzcyBDb21tZW50SGFuZGxlciB7CisgICAgICAgIGNvbnN0cnVjdG9y
KCkgewogICAgICAgICAgICAgdGhpcy5hdHRhY2ggPSBmYWxzZTsKICAgICAgICAgICAgIHRoaXMu
Y29tbWVudHMgPSBbXTsKICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTsKICAgICAgICAgICAg
IHRoaXMubGVhZGluZyA9IFtdOwogICAgICAgICAgICAgdGhpcy50cmFpbGluZyA9IFtdOwogICAg
ICAgICB9Ci0gICAgICAgIENvbW1lbnRIYW5kbGVyLnByb3RvdHlwZS5pbnNlcnRJbm5lckNvbW1l
bnRzID0gZnVuY3Rpb24gKG5vZGUsIG1ldGFkYXRhKSB7CisgICAgICAgIGluc2VydElubmVyQ29t
bWVudHMobm9kZSwgbWV0YWRhdGEpIHsKICAgICAgICAgICAgIC8vICBpbm5uZXJDb21tZW50cyBm
b3IgcHJvcGVydGllcyBlbXB0eSBibG9jawogICAgICAgICAgICAgLy8gIGBmdW5jdGlvbiBhKCkg
ey8qKiBjb21tZW50cyAqKlwvfWAKICAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IHN5bnRh
eF8xLlN5bnRheC5CbG9ja1N0YXRlbWVudCAmJiBub2RlLmJvZHkubGVuZ3RoID09PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGlubmVyQ29tbWVudHMgPSBbXTsKLSAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gdGhpcy5sZWFkaW5nLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMubGVhZGluZ1tpXTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBpbm5lckNvbW1lbnRzID0gW107CisgICAgICAgICAgICAgICAgZm9yIChsZXQg
aSA9IHRoaXMubGVhZGluZy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGVhZGluZ1tpXTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1ldGFkYXRhLmVuZC5vZmZzZXQgPj0gZW50cnkuc3RhcnQpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlubmVyQ29tbWVudHMudW5zaGlmdChlbnRyeS5jb21tZW50KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMubGVhZGluZy5zcGxpY2UoaSwgMSk7CkBAIC0yMDgsMTIg
KzIwOCwxMiBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFj
a0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICBub2RlLmlubmVyQ29tbWVudHMgPSBpbm5l
ckNvbW1lbnRzOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfTsK
LSAgICAgICAgQ29tbWVudEhhbmRsZXIucHJvdG90eXBlLmZpbmRUcmFpbGluZ0NvbW1lbnRzID0g
ZnVuY3Rpb24gKG1ldGFkYXRhKSB7Ci0gICAgICAgICAgICB2YXIgdHJhaWxpbmdDb21tZW50cyA9
IFtdOworICAgICAgICB9CisgICAgICAgIGZpbmRUcmFpbGluZ0NvbW1lbnRzKG1ldGFkYXRhKSB7
CisgICAgICAgICAgICBsZXQgdHJhaWxpbmdDb21tZW50cyA9IFtdOwogICAgICAgICAgICAgaWYg
KHRoaXMudHJhaWxpbmcubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSB0aGlzLnRyYWlsaW5nLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJhaWxpbmdbaV07CisgICAgICAgICAgICAgICAgZm9y
IChsZXQgaSA9IHRoaXMudHJhaWxpbmcubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLnRyYWlsaW5nW2ldOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoZW50cnkuc3RhcnQgPj0gbWV0YWRhdGEuZW5kLm9mZnNldCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cy51bnNoaWZ0KGVudHJ5LmNvbW1l
bnQpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMjEsMjEgKzIyMSwyMSBAQCByZXR1cm4g
LyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAg
ICAgICAgICAgIHRoaXMudHJhaWxpbmcubGVuZ3RoID0gMDsKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJhaWxpbmdDb21tZW50czsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBsYXN0
ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgY29uc3Qg
bGFzdCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgICAgICAgICAgIGlm
IChsYXN0ICYmIGxhc3Qubm9kZS50cmFpbGluZ0NvbW1lbnRzKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGZpcnN0Q29tbWVudCA9IGxhc3Qubm9kZS50cmFpbGluZ0NvbW1lbnRzWzBdOworICAgICAg
ICAgICAgICAgIGNvbnN0IGZpcnN0Q29tbWVudCA9IGxhc3Qubm9kZS50cmFpbGluZ0NvbW1lbnRz
WzBdOwogICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbW1lbnQgJiYgZmlyc3RDb21tZW50LnJh
bmdlWzBdID49IG1ldGFkYXRhLmVuZC5vZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICAgdHJh
aWxpbmdDb21tZW50cyA9IGxhc3Qubm9kZS50cmFpbGluZ0NvbW1lbnRzOwogICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgbGFzdC5ub2RlLnRyYWlsaW5nQ29tbWVudHM7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRyYWlsaW5nQ29tbWVudHM7
Ci0gICAgICAgIH07Ci0gICAgICAgIENvbW1lbnRIYW5kbGVyLnByb3RvdHlwZS5maW5kTGVhZGlu
Z0NvbW1lbnRzID0gZnVuY3Rpb24gKG1ldGFkYXRhKSB7Ci0gICAgICAgICAgICB2YXIgbGVhZGlu
Z0NvbW1lbnRzID0gW107Ci0gICAgICAgICAgICB2YXIgdGFyZ2V0OworICAgICAgICB9CisgICAg
ICAgIGZpbmRMZWFkaW5nQ29tbWVudHMobWV0YWRhdGEpIHsKKyAgICAgICAgICAgIGNvbnN0IGxl
YWRpbmdDb21tZW50cyA9IFtdOworICAgICAgICAgICAgbGV0IHRhcmdldDsKICAgICAgICAgICAg
IHdoaWxlICh0aGlzLnN0YWNrLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICB2YXIgZW50
cnkgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAg
Y29uc3QgZW50cnkgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICAgICAg
ICAgICAgICAgaWYgKGVudHJ5ICYmIGVudHJ5LnN0YXJ0ID49IG1ldGFkYXRhLnN0YXJ0Lm9mZnNl
dCkgewogICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBlbnRyeS5ub2RlOwogICAgICAgICAg
ICAgICAgICAgICB0aGlzLnN0YWNrLnBvcCgpOwpAQCAtMjQ1LDkgKzI0NSw5IEBAIHJldHVybiAv
KioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHRhcmdldCkgewotICAg
ICAgICAgICAgICAgIHZhciBjb3VudCA9IHRhcmdldC5sZWFkaW5nQ29tbWVudHMgPyB0YXJnZXQu
bGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA6IDA7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IGNvdW50IC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1l
bnQgPSB0YXJnZXQubGVhZGluZ0NvbW1lbnRzW2ldOworICAgICAgICAgICAgICAgIGNvbnN0IGNv
dW50ID0gdGFyZ2V0LmxlYWRpbmdDb21tZW50cyA/IHRhcmdldC5sZWFkaW5nQ29tbWVudHMubGVu
Z3RoIDogMDsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gY291bnQgLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21tZW50ID0gdGFyZ2V0LmxlYWRp
bmdDb21tZW50c1tpXTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQucmFuZ2VbMV0g
PD0gbWV0YWRhdGEuc3RhcnQub2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsZWFk
aW5nQ29tbWVudHMudW5zaGlmdChjb21tZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRh
cmdldC5sZWFkaW5nQ29tbWVudHMuc3BsaWNlKGksIDEpOwpAQCAtMjU4LDIyICsyNTgsMjIgQEAg
cmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGxlYWRpbmdDb21tZW50
czsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmxlYWRpbmcu
bGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB0
aGlzLmxlYWRpbmdbaV07CisgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5sZWFkaW5nLmxl
bmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSB0
aGlzLmxlYWRpbmdbaV07CiAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnN0YXJ0IDw9IG1ldGFk
YXRhLnN0YXJ0Lm9mZnNldCkgewogICAgICAgICAgICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMu
dW5zaGlmdChlbnRyeS5jb21tZW50KTsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWFkaW5n
LnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICByZXR1cm4gbGVhZGluZ0NvbW1lbnRzOwotICAgICAgICB9OwotICAgICAgICBDb21tZW50
SGFuZGxlci5wcm90b3R5cGUudmlzaXROb2RlID0gZnVuY3Rpb24gKG5vZGUsIG1ldGFkYXRhKSB7
CisgICAgICAgIH0KKyAgICAgICAgdmlzaXROb2RlKG5vZGUsIG1ldGFkYXRhKSB7CiAgICAgICAg
ICAgICBpZiAobm9kZS50eXBlID09PSBzeW50YXhfMS5TeW50YXguUHJvZ3JhbSAmJiBub2RlLmJv
ZHkubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHRoaXMuaW5zZXJ0SW5uZXJDb21tZW50cyhub2RlLCBtZXRhZGF0YSk7Ci0g
ICAgICAgICAgICB2YXIgdHJhaWxpbmdDb21tZW50cyA9IHRoaXMuZmluZFRyYWlsaW5nQ29tbWVu
dHMobWV0YWRhdGEpOwotICAgICAgICAgICAgdmFyIGxlYWRpbmdDb21tZW50cyA9IHRoaXMuZmlu
ZExlYWRpbmdDb21tZW50cyhtZXRhZGF0YSk7CisgICAgICAgICAgICBjb25zdCB0cmFpbGluZ0Nv
bW1lbnRzID0gdGhpcy5maW5kVHJhaWxpbmdDb21tZW50cyhtZXRhZGF0YSk7CisgICAgICAgICAg
ICBjb25zdCBsZWFkaW5nQ29tbWVudHMgPSB0aGlzLmZpbmRMZWFkaW5nQ29tbWVudHMobWV0YWRh
dGEpOwogICAgICAgICAgICAgaWYgKGxlYWRpbmdDb21tZW50cy5sZW5ndGggPiAwKSB7CiAgICAg
ICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBsZWFkaW5nQ29tbWVudHM7CiAgICAg
ICAgICAgICB9CkBAIC0yODQsMTAgKzI4NCwxMCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9u
KG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIG5vZGU6IG5v
ZGUsCiAgICAgICAgICAgICAgICAgc3RhcnQ6IG1ldGFkYXRhLnN0YXJ0Lm9mZnNldAogICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH07Ci0gICAgICAgIENvbW1lbnRIYW5kbGVyLnByb3RvdHlwZS52
aXNpdENvbW1lbnQgPSBmdW5jdGlvbiAobm9kZSwgbWV0YWRhdGEpIHsKLSAgICAgICAgICAgIHZh
ciB0eXBlID0gKG5vZGUudHlwZVswXSA9PT0gJ0wnKSA/ICdMaW5lJyA6ICdCbG9jayc7Ci0gICAg
ICAgICAgICB2YXIgY29tbWVudCA9IHsKKyAgICAgICAgfQorICAgICAgICB2aXNpdENvbW1lbnQo
bm9kZSwgbWV0YWRhdGEpIHsKKyAgICAgICAgICAgIGNvbnN0IHR5cGUgPSAobm9kZS50eXBlWzBd
ID09PSAnTCcpID8gJ0xpbmUnIDogJ0Jsb2NrJzsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1lbnQg
PSB7CiAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSwKICAgICAgICAgICAgICAgICB2YWx1ZTog
bm9kZS52YWx1ZQogICAgICAgICAgICAgfTsKQEAgLTI5OSw3ICsyOTksNyBAQCByZXR1cm4gLyoq
KioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgdGhpcy5jb21tZW50cy5wdXNoKGNvbW1lbnQpOwogICAgICAgICAg
ICAgaWYgKHRoaXMuYXR0YWNoKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0geworICAg
ICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gewogICAgICAgICAgICAgICAgICAgICBjb21tZW50
OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWU6IG5vZGUudmFsdWUsCkBAIC0zMTQsOCArMzE0LDggQEAgcmV0dXJuIC8q
KioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAg
ICAgICAgICB0aGlzLmxlYWRpbmcucHVzaChlbnRyeSk7CiAgICAgICAgICAgICAgICAgdGhpcy50
cmFpbGluZy5wdXNoKGVudHJ5KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAg
Q29tbWVudEhhbmRsZXIucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24gKG5vZGUsIG1ldGFkYXRh
KSB7CisgICAgICAgIH0KKyAgICAgICAgdmlzaXQobm9kZSwgbWV0YWRhdGEpIHsKICAgICAgICAg
ICAgIGlmIChub2RlLnR5cGUgPT09ICdMaW5lQ29tbWVudCcpIHsKICAgICAgICAgICAgICAgICB0
aGlzLnZpc2l0Q29tbWVudChub2RlLCBtZXRhZGF0YSk7CiAgICAgICAgICAgICB9CkBAIC0zMjUs
OSArMzI1LDggQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBh
Y2tCb290c3RyYXAKICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuYXR0YWNoKSB7CiAgICAgICAg
ICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZSwgbWV0YWRhdGEpOwogICAgICAgICAgICAgfQot
ICAgICAgICB9OwotICAgICAgICByZXR1cm4gQ29tbWVudEhhbmRsZXI7Ci0gICAgfSgpKTsKKyAg
ICAgICAgfQorICAgIH0KICAgICBleHBvcnRzLkNvbW1lbnRIYW5kbGVyID0gQ29tbWVudEhhbmRs
ZXI7CiAKIApAQCAtNDEzLDQ1ICs0MTIsMzEgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKIC8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhw
b3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewogCiAgICAgInVzZSBzdHJpY3QiOwotLyogaXN0
YW5idWwgaWdub3JlIG5leHQgKi8KLSAgICB2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5f
X2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBleHRlbmRTdGF0aWNzID0g
ZnVuY3Rpb24gKGQsIGIpIHsKLSAgICAgICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0
UHJvdG90eXBlT2YgfHwKLSAgICAgICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFu
Y2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8Ci0g
ICAgICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5o
YXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07Ci0gICAgICAgICAgICByZXR1cm4gZXh0
ZW5kU3RhdGljcyhkLCBiKTsKLSAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChk
LCBiKSB7Ci0gICAgICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpOwotICAgICAgICAgICAgZnVu
Y3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9Ci0gICAgICAgICAgICBkLnByb3Rv
dHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIu
cHJvdG90eXBlLCBuZXcgX18oKSk7Ci0gICAgICAgIH07Ci0gICAgfSkoKTsKICAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwot
ICAgIHZhciBjaGFyYWN0ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7Ci0gICAgdmFyIEpT
WE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOwotICAgIHZhciBqc3hfc3ludGF4XzEgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDYpOwotICAgIHZhciBOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVf
Xyg3KTsKLSAgICB2YXIgcGFyc2VyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpOwotICAgIHZh
ciB0b2tlbl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7Ci0gICAgdmFyIHhodG1sX2VudGl0
aWVzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTsKKyAgICBjb25zdCBjaGFyYWN0ZXJfMSA9
IF9fd2VicGFja19yZXF1aXJlX18oNCk7CisgICAgY29uc3QgSlNYTm9kZSA9IF9fd2VicGFja19y
ZXF1aXJlX18oNSk7CisgICAgY29uc3QganN4X3N5bnRheF8xID0gX193ZWJwYWNrX3JlcXVpcmVf
Xyg2KTsKKyAgICBjb25zdCBOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTsKKyAgICBjb25z
dCBwYXJzZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7CisgICAgY29uc3QgdG9rZW5fMSA9
IF9fd2VicGFja19yZXF1aXJlX18oMTMpOworICAgIGNvbnN0IHhodG1sX2VudGl0aWVzXzEgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDE0KTsKICAgICB0b2tlbl8xLlRva2VuTmFtZVsxMDAgLyogSWRl
bnRpZmllciAqL10gPSAnSlNYSWRlbnRpZmllcic7CiAgICAgdG9rZW5fMS5Ub2tlbk5hbWVbMTAx
IC8qIFRleHQgKi9dID0gJ0pTWFRleHQnOwogICAgIC8vIEZ1bGx5IHF1YWxpZmllZCBlbGVtZW50
IG5hbWUsIGUuZy4gPHN2ZzpwYXRoPiByZXR1cm5zICJzdmc6cGF0aCIKICAgICBmdW5jdGlvbiBn
ZXRRdWFsaWZpZWRFbGVtZW50TmFtZShlbGVtZW50TmFtZSkgewotICAgICAgICB2YXIgcXVhbGlm
aWVkTmFtZTsKKyAgICAgICAgbGV0IHF1YWxpZmllZE5hbWU7CiAgICAgICAgIHN3aXRjaCAoZWxl
bWVudE5hbWUudHlwZSkgewogICAgICAgICAgICAgY2FzZSBqc3hfc3ludGF4XzEuSlNYU3ludGF4
LkpTWElkZW50aWZpZXI6Ci0gICAgICAgICAgICAgICAgdmFyIGlkID0gZWxlbWVudE5hbWU7Cisg
ICAgICAgICAgICAgICAgY29uc3QgaWQgPSBlbGVtZW50TmFtZTsKICAgICAgICAgICAgICAgICBx
dWFsaWZpZWROYW1lID0gaWQubmFtZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hOYW1lc3BhY2VkTmFtZToKLSAgICAg
ICAgICAgICAgICB2YXIgbnMgPSBlbGVtZW50TmFtZTsKKyAgICAgICAgICAgICAgICBjb25zdCBu
cyA9IGVsZW1lbnROYW1lOwogICAgICAgICAgICAgICAgIHF1YWxpZmllZE5hbWUgPSBnZXRRdWFs
aWZpZWRFbGVtZW50TmFtZShucy5uYW1lc3BhY2UpICsgJzonICsKICAgICAgICAgICAgICAgICAg
ICAgZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUobnMubmFtZSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYTWVtYmVyRXhw
cmVzc2lvbjoKLSAgICAgICAgICAgICAgICB2YXIgZXhwciA9IGVsZW1lbnROYW1lOworICAgICAg
ICAgICAgICAgIGNvbnN0IGV4cHIgPSBlbGVtZW50TmFtZTsKICAgICAgICAgICAgICAgICBxdWFs
aWZpZWROYW1lID0gZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUoZXhwci5vYmplY3QpICsgJy4nICsK
ICAgICAgICAgICAgICAgICAgICAgZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUoZXhwci5wcm9wZXJ0
eSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00NjEsNTUgKzQ0Niw1NCBAQCByZXR1cm4g
LyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBxdWFsaWZpZWROYW1lOwogICAgIH0KLSAgICB2YXIgSlNYUGFy
c2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikgewotICAgICAgICBfX2V4dGVu
ZHMoSlNYUGFyc2VyLCBfc3VwZXIpOwotICAgICAgICBmdW5jdGlvbiBKU1hQYXJzZXIoY29kZSwg
b3B0aW9ucywgZGVsZWdhdGUpIHsKLSAgICAgICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlz
LCBjb2RlLCBvcHRpb25zLCBkZWxlZ2F0ZSkgfHwgdGhpczsKKyAgICBjbGFzcyBKU1hQYXJzZXIg
ZXh0ZW5kcyBwYXJzZXJfMS5QYXJzZXIgeworICAgICAgICBjb25zdHJ1Y3Rvcihjb2RlLCBvcHRp
b25zLCBkZWxlZ2F0ZSkgeworICAgICAgICAgICAgc3VwZXIoY29kZSwgb3B0aW9ucywgZGVsZWdh
dGUpOwogICAgICAgICB9Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VQcmltYXJ5
RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdGNo
KCc8JykgPyB0aGlzLnBhcnNlSlNYUm9vdCgpIDogX3N1cGVyLnByb3RvdHlwZS5wYXJzZVByaW1h
cnlFeHByZXNzaW9uLmNhbGwodGhpcyk7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5w
cm90b3R5cGUuc3RhcnRKU1ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHBhcnNlUHJpbWFyeUV4
cHJlc3Npb24oKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRjaCgnPCcpID8gdGhpcy5w
YXJzZUpTWFJvb3QoKSA6IHN1cGVyLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAg
fQorICAgICAgICBzdGFydEpTWCgpIHsKICAgICAgICAgICAgIC8vIFVud2luZCB0aGUgc2Nhbm5l
ciBiZWZvcmUgdGhlIGxvb2thaGVhZCB0b2tlbi4KICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5p
bmRleCA9IHRoaXMuc3RhcnRNYXJrZXIuaW5kZXg7CiAgICAgICAgICAgICB0aGlzLnNjYW5uZXIu
bGluZU51bWJlciA9IHRoaXMuc3RhcnRNYXJrZXIubGluZTsKICAgICAgICAgICAgIHRoaXMuc2Nh
bm5lci5saW5lU3RhcnQgPSB0aGlzLnN0YXJ0TWFya2VyLmluZGV4IC0gdGhpcy5zdGFydE1hcmtl
ci5jb2x1bW47Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUuZmluaXNo
SlNYID0gZnVuY3Rpb24gKCkgeworICAgICAgICB9CisgICAgICAgIGZpbmlzaEpTWCgpIHsKICAg
ICAgICAgICAgIC8vIFByaW1lIHRoZSBuZXh0IGxvb2thaGVhZC4KICAgICAgICAgICAgIHRoaXMu
bmV4dFRva2VuKCk7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucmVl
bnRlckpTWCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgfQorICAgICAgICByZWVudGVySlNYKCkg
ewogICAgICAgICAgICAgdGhpcy5zdGFydEpTWCgpOwogICAgICAgICAgICAgdGhpcy5leHBlY3RK
U1goJ30nKTsKICAgICAgICAgICAgIC8vIFBvcCB0aGUgY2xvc2luZyAnfScgYWRkZWQgZnJvbSB0
aGUgbG9va2FoZWFkLgogICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnRva2VucykgewogICAg
ICAgICAgICAgICAgIHRoaXMudG9rZW5zLnBvcCgpOwogICAgICAgICAgICAgfQotICAgICAgICB9
OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLmNyZWF0ZUpTWE5vZGUgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIH0KKyAgICAgICAgY3JlYXRlSlNYTm9kZSgpIHsKICAgICAgICAgICAgIHRo
aXMuY29sbGVjdENvbW1lbnRzKCk7CiAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAg
ICAgIGluZGV4OiB0aGlzLnNjYW5uZXIuaW5kZXgsCiAgICAgICAgICAgICAgICAgbGluZTogdGhp
cy5zY2FubmVyLmxpbmVOdW1iZXIsCiAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLnNjYW5u
ZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0CiAgICAgICAgICAgICB9OwotICAgICAg
ICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLmNyZWF0ZUpTWENoaWxkTm9kZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgfQorICAgICAgICBjcmVhdGVKU1hDaGlsZE5vZGUoKSB7CiAg
ICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLnNjYW5uZXIu
aW5kZXgsCiAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCiAg
ICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLnNjYW5uZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIu
bGluZVN0YXJ0CiAgICAgICAgICAgICB9OwotICAgICAgICB9OwotICAgICAgICBKU1hQYXJzZXIu
cHJvdG90eXBlLnNjYW5YSFRNTEVudGl0eSA9IGZ1bmN0aW9uIChxdW90ZSkgewotICAgICAgICAg
ICAgdmFyIHJlc3VsdCA9ICcmJzsKLSAgICAgICAgICAgIHZhciB2YWxpZCA9IHRydWU7Ci0gICAg
ICAgICAgICB2YXIgdGVybWluYXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIG51bWVyaWMg
PSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBoZXggPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBzY2FuWEhUTUxFbnRpdHkocXVvdGUpIHsKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSAnJic7
CisgICAgICAgICAgICBsZXQgdmFsaWQgPSB0cnVlOworICAgICAgICAgICAgbGV0IHRlcm1pbmF0
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGxldCBudW1lcmljID0gZmFsc2U7CisgICAgICAgICAg
ICBsZXQgaGV4ID0gZmFsc2U7CiAgICAgICAgICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2Yo
KSAmJiB2YWxpZCAmJiAhdGVybWluYXRlZCkgewotICAgICAgICAgICAgICAgIHZhciBjaCA9IHRo
aXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XTsKKyAgICAgICAgICAgICAgICBj
b25zdCBjaCA9IHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XTsKICAgICAg
ICAgICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KQEAgLTUzOSw3ICs1MjMsNyBAQCByZXR1cm4gLyoqKioqKi8g
KGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKHZhbGlkICYmIHRlcm1pbmF0ZWQgJiYgcmVzdWx0Lmxlbmd0aCA+IDIp
IHsKICAgICAgICAgICAgICAgICAvLyBlLmcuICcmI3g0MTsnIGJlY29tZXMganVzdCAnI3g0MScK
LSAgICAgICAgICAgICAgICB2YXIgc3RyID0gcmVzdWx0LnN1YnN0cigxLCByZXN1bHQubGVuZ3Ro
IC0gMik7CisgICAgICAgICAgICAgICAgY29uc3Qgc3RyID0gcmVzdWx0LnN1YnN0cigxLCByZXN1
bHQubGVuZ3RoIC0gMik7CiAgICAgICAgICAgICAgICAgaWYgKG51bWVyaWMgJiYgc3RyLmxlbmd0
aCA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gU3RyaW5nLmZyb21DaGFyQ29k
ZShwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxMCkpOwogICAgICAgICAgICAgICAgIH0KQEAgLTU1
MSwxMyArNTM1LDEzIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3
ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBT
Y2FuIHRoZSBuZXh0IEpTWCB0b2tlbi4gVGhpcyByZXBsYWNlcyBTY2FubmVyI2xleCB3aGVuIGlu
IEpTWCBtb2RlLgotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLmxleEpTWCA9IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgIHZhciBjcCA9IHRoaXMuc2Nhbm5lci5zb3VyY2UuY2hhckNvZGVB
dCh0aGlzLnNjYW5uZXIuaW5kZXgpOworICAgICAgICBsZXhKU1goKSB7CisgICAgICAgICAgICBj
b25zdCBjcCA9IHRoaXMuc2Nhbm5lci5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5k
ZXgpOwogICAgICAgICAgICAgLy8gPCA+IC8gOiA9IHsgfQogICAgICAgICAgICAgaWYgKGNwID09
PSA2MCB8fCBjcCA9PT0gNjIgfHwgY3AgPT09IDQ3IHx8IGNwID09PSA1OCB8fCBjcCA9PT0gNjEg
fHwgY3AgPT09IDEyMyB8fCBjcCA9PT0gMTI1KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVl
ID0gdGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXgrK107CisgICAgICAgICAg
ICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRl
eCsrXTsKICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICB0eXBl
OiA3IC8qIFB1bmN0dWF0b3IgKi8sCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwK
QEAgLTU2OSwxMSArNTUzLDExIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykg
eyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyAiICcK
ICAgICAgICAgICAgIGlmIChjcCA9PT0gMzQgfHwgY3AgPT09IDM5KSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHN0YXJ0ID0gdGhpcy5zY2FubmVyLmluZGV4OwotICAgICAgICAgICAgICAgIHZhciBx
dW90ZSA9IHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4KytdOwotICAgICAg
ICAgICAgICAgIHZhciBzdHIgPSAnJzsKKyAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IHRo
aXMuc2Nhbm5lci5pbmRleDsKKyAgICAgICAgICAgICAgICBjb25zdCBxdW90ZSA9IHRoaXMuc2Nh
bm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4KytdOworICAgICAgICAgICAgICAgIGxldCBz
dHIgPSAnJzsKICAgICAgICAgICAgICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2YoKSkgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nh
bm5lci5pbmRleCsrXTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2ggPSB0aGlzLnNjYW5u
ZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleCsrXTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGNoID09PSBxdW90ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTU5NSwxMCArNTc5LDEwIEBAIHJldHVybiAvKioqKioqLyAoZnVu
Y3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAvLyAuLi4gb3IgLgogICAgICAgICAgICAgaWYgKGNwID09PSA0NikgewotICAgICAg
ICAgICAgICAgIHZhciBuMSA9IHRoaXMuc2Nhbm5lci5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnNj
YW5uZXIuaW5kZXggKyAxKTsKLSAgICAgICAgICAgICAgICB2YXIgbjIgPSB0aGlzLnNjYW5uZXIu
c291cmNlLmNoYXJDb2RlQXQodGhpcy5zY2FubmVyLmluZGV4ICsgMik7Ci0gICAgICAgICAgICAg
ICAgdmFyIHZhbHVlID0gKG4xID09PSA0NiAmJiBuMiA9PT0gNDYpID8gJy4uLicgOiAnLic7Ci0g
ICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5zY2FubmVyLmluZGV4OworICAgICAgICAg
ICAgICAgIGNvbnN0IG4xID0gdGhpcy5zY2FubmVyLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuc2Nh
bm5lci5pbmRleCArIDEpOworICAgICAgICAgICAgICAgIGNvbnN0IG4yID0gdGhpcy5zY2FubmVy
LnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuc2Nhbm5lci5pbmRleCArIDIpOworICAgICAgICAgICAg
ICAgIGNvbnN0IHZhbHVlID0gKG4xID09PSA0NiAmJiBuMiA9PT0gNDYpID8gJy4uLicgOiAnLic7
CisgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnNjYW5uZXIuaW5kZXg7CiAgICAg
ICAgICAgICAgICAgdGhpcy5zY2FubmVyLmluZGV4ICs9IHZhbHVlLmxlbmd0aDsKICAgICAgICAg
ICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICB0eXBlOiA3IC8qIFB1bmN0dWF0
b3IgKi8sCkBAIC02MjMsMTAgKzYwNywxMCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1v
ZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ly8gSWRlbnRpZmVyIGNhbiBub3QgY29udGFpbiBiYWNrc2xhc2ggKGNoYXIgY29kZSA5MikuCiAg
ICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KGNw
KSAmJiAoY3AgIT09IDkyKSkgewotICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuc2Nh
bm5lci5pbmRleDsKKyAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc2Nhbm5lci5p
bmRleDsKICAgICAgICAgICAgICAgICArK3RoaXMuc2Nhbm5lci5pbmRleDsKICAgICAgICAgICAg
ICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2YoKSkgewotICAgICAgICAgICAgICAgICAgICB2
YXIgY2ggPSB0aGlzLnNjYW5uZXIuc291cmNlLmNoYXJDb2RlQXQodGhpcy5zY2FubmVyLmluZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2ggPSB0aGlzLnNjYW5uZXIuc291cmNlLmNo
YXJDb2RlQXQodGhpcy5zY2FubmVyLmluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNo
YXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJQYXJ0KGNoKSAmJiAoY2ggIT09IDkyKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLnNjYW5uZXIuaW5kZXg7CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTYzOCw3ICs2MjIsNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0
aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5zY2FubmVyLnNvdXJjZS5zbGljZShzdGFydCwgdGhp
cy5zY2FubmVyLmluZGV4KTsKKyAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuc2Nhbm5l
ci5zb3VyY2Uuc2xpY2Uoc3RhcnQsIHRoaXMuc2Nhbm5lci5pbmRleCk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgdHlwZTogMTAwIC8qIElkZW50aWZpZXIg
Ki8sCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpZCwKQEAgLTY0OSwxMyArNjMzLDEzIEBA
IHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFw
CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0
aGlzLnNjYW5uZXIubGV4KCk7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5
cGUubmV4dEpTWFRva2VuID0gZnVuY3Rpb24gKCkgeworICAgICAgICB9CisgICAgICAgIG5leHRK
U1hUb2tlbigpIHsKICAgICAgICAgICAgIHRoaXMuY29sbGVjdENvbW1lbnRzKCk7CiAgICAgICAg
ICAgICB0aGlzLnN0YXJ0TWFya2VyLmluZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4OwogICAgICAg
ICAgICAgdGhpcy5zdGFydE1hcmtlci5saW5lID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7CiAg
ICAgICAgICAgICB0aGlzLnN0YXJ0TWFya2VyLmNvbHVtbiA9IHRoaXMuc2Nhbm5lci5pbmRleCAt
IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxl
eEpTWCgpOworICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmxleEpTWCgpOwogICAgICAg
ICAgICAgdGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4OwogICAgICAg
ICAgICAgdGhpcy5sYXN0TWFya2VyLmxpbmUgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjsKICAg
ICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5jb2x1bW4gPSB0aGlzLnNjYW5uZXIuaW5kZXggLSB0
aGlzLnNjYW5uZXIubGluZVN0YXJ0OwpAQCAtNjYzLDE1ICs2NDcsMTUgQEAgcmV0dXJuIC8qKioq
KiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAg
ICAgICB0aGlzLnRva2Vucy5wdXNoKHRoaXMuY29udmVydFRva2VuKHRva2VuKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgICAgIH07Ci0gICAgICAgIEpT
WFBhcnNlci5wcm90b3R5cGUubmV4dEpTWFRleHQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIH0K
KyAgICAgICAgbmV4dEpTWFRleHQoKSB7CiAgICAgICAgICAgICB0aGlzLnN0YXJ0TWFya2VyLmlu
ZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4OwogICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtlci5s
aW5lID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7CiAgICAgICAgICAgICB0aGlzLnN0YXJ0TWFy
a2VyLmNvbHVtbiA9IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7
Ci0gICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnNjYW5uZXIuaW5kZXg7Ci0gICAgICAgICAg
ICB2YXIgdGV4dCA9ICcnOworICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnNjYW5uZXIu
aW5kZXg7CisgICAgICAgICAgICBsZXQgdGV4dCA9ICcnOwogICAgICAgICAgICAgd2hpbGUgKCF0
aGlzLnNjYW5uZXIuZW9mKCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNjYW5u
ZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleF07CisgICAgICAgICAgICAgICAgY29uc3QgY2gg
PSB0aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleF07CiAgICAgICAgICAgICAg
ICAgaWYgKGNoID09PSAneycgfHwgY2ggPT09ICc8JykgewogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC02ODgsNyArNjcyLDcgQEAgcmV0dXJuIC8qKioq
KiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAg
IHRoaXMubGFzdE1hcmtlci5pbmRleCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKICAgICAgICAgICAg
IHRoaXMubGFzdE1hcmtlci5saW5lID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7CiAgICAgICAg
ICAgICB0aGlzLmxhc3RNYXJrZXIuY29sdW1uID0gdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5z
Y2FubmVyLmxpbmVTdGFydDsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHsKKyAgICAgICAgICAg
IGNvbnN0IHRva2VuID0gewogICAgICAgICAgICAgICAgIHR5cGU6IDEwMSAvKiBUZXh0ICovLAog
ICAgICAgICAgICAgICAgIHZhbHVlOiB0ZXh0LAogICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6
IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLApAQCAtNzAwLDE2MyArNjg0LDE2MyBAQCByZXR1cm4g
LyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAg
ICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2godGhpcy5jb252ZXJ0VG9rZW4odG9rZW4pKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKLSAgICAgICAgfTsKLSAgICAg
ICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wZWVrSlNYVG9rZW4gPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnNjYW5uZXIuc2F2ZVN0YXRlKCk7CisgICAgICAgIH0K
KyAgICAgICAgcGVla0pTWFRva2VuKCkgeworICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlz
LnNjYW5uZXIuc2F2ZVN0YXRlKCk7CiAgICAgICAgICAgICB0aGlzLnNjYW5uZXIuc2NhbkNvbW1l
bnRzKCk7Ci0gICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMubGV4SlNYKCk7CisgICAgICAgICAg
ICBjb25zdCBuZXh0ID0gdGhpcy5sZXhKU1goKTsKICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5y
ZXN0b3JlU3RhdGUoc3RhdGUpOwogICAgICAgICAgICAgcmV0dXJuIG5leHQ7Ci0gICAgICAgIH07
CisgICAgICAgIH0KICAgICAgICAgLy8gRXhwZWN0IHRoZSBuZXh0IEpTWCB0b2tlbiB0byBtYXRj
aCB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuCiAgICAgICAgIC8vIElmIG5vdCwgYW4gZXhjZXB0
aW9uIHdpbGwgYmUgdGhyb3duLgotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLmV4cGVjdEpT
WCA9IGZ1bmN0aW9uICh2YWx1ZSkgewotICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0
SlNYVG9rZW4oKTsKKyAgICAgICAgZXhwZWN0SlNYKHZhbHVlKSB7CisgICAgICAgICAgICBjb25z
dCB0b2tlbiA9IHRoaXMubmV4dEpTWFRva2VuKCk7CiAgICAgICAgICAgICBpZiAodG9rZW4udHlw
ZSAhPT0gNyAvKiBQdW5jdHVhdG9yICovIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkgewogICAg
ICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOwogICAgICAgICAg
ICAgfQotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIFJldHVybiB0cnVlIGlmIHRo
ZSBuZXh0IEpTWCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci4KLSAgICAg
ICAgSlNYUGFyc2VyLnByb3RvdHlwZS5tYXRjaEpTWCA9IGZ1bmN0aW9uICh2YWx1ZSkgewotICAg
ICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnBlZWtKU1hUb2tlbigpOworICAgICAgICBtYXRjaEpT
WCh2YWx1ZSkgeworICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMucGVla0pTWFRva2VuKCk7
CiAgICAgICAgICAgICByZXR1cm4gbmV4dC50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYg
bmV4dC52YWx1ZSA9PT0gdmFsdWU7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90
b3R5cGUucGFyc2VKU1hJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRo
aXMubmV4dEpTWFRva2VuKCk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VKU1hJZGVudGlmaWVy
KCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpOworICAg
ICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLm5leHRKU1hUb2tlbigpOwogICAgICAgICAgICAg
aWYgKHRva2VuLnR5cGUgIT09IDEwMCAvKiBJZGVudGlmaWVyICovKSB7CiAgICAgICAgICAgICAg
ICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hJZGVudGlm
aWVyKHRva2VuLnZhbHVlKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5
cGUucGFyc2VKU1hFbGVtZW50TmFtZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgZWxlbWVudE5hbWUg
PSB0aGlzLnBhcnNlSlNYSWRlbnRpZmllcigpOworICAgICAgICB9CisgICAgICAgIHBhcnNlSlNY
RWxlbWVudE5hbWUoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVKU1hO
b2RlKCk7CisgICAgICAgICAgICBsZXQgZWxlbWVudE5hbWUgPSB0aGlzLnBhcnNlSlNYSWRlbnRp
ZmllcigpOwogICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hKU1goJzonKSkgewotICAgICAgICAg
ICAgICAgIHZhciBuYW1lc3BhY2UgPSBlbGVtZW50TmFtZTsKKyAgICAgICAgICAgICAgICBjb25z
dCBuYW1lc3BhY2UgPSBlbGVtZW50TmFtZTsKICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdEpT
WCgnOicpOwotICAgICAgICAgICAgICAgIHZhciBuYW1lXzEgPSB0aGlzLnBhcnNlSlNYSWRlbnRp
ZmllcigpOwotICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgSlNYTm9kZS5KU1hOYW1lc3BhY2VkTmFtZShuYW1lc3BhY2UsIG5hbWVfMSkpOworICAg
ICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnBhcnNlSlNYSWRlbnRpZmllcigpOworICAg
ICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9k
ZS5KU1hOYW1lc3BhY2VkTmFtZShuYW1lc3BhY2UsIG5hbWUpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hKU1goJy4nKSkgewogICAgICAgICAgICAgICAg
IHdoaWxlICh0aGlzLm1hdGNoSlNYKCcuJykpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG9i
amVjdCA9IGVsZW1lbnROYW1lOworICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmplY3QgPSBl
bGVtZW50TmFtZTsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJy4nKTsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5wYXJzZUpTWElkZW50aWZpZXIo
KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLnBhcnNlSlNYSWRl
bnRpZmllcigpOwogICAgICAgICAgICAgICAgICAgICBlbGVtZW50TmFtZSA9IHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IEpTWE5vZGUuSlNYTWVtYmVyRXhwcmVzc2lvbihvYmplY3QsIHByb3BlcnR5
KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IGVsZW1lbnROYW1lOwotICAgICAgICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBh
cnNlSlNYQXR0cmlidXRlTmFtZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgYXR0cmlidXRlTmFtZTsK
LSAgICAgICAgICAgIHZhciBpZGVudGlmaWVyID0gdGhpcy5wYXJzZUpTWElkZW50aWZpZXIoKTsK
KyAgICAgICAgfQorICAgICAgICBwYXJzZUpTWEF0dHJpYnV0ZU5hbWUoKSB7CisgICAgICAgICAg
ICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CisgICAgICAgICAgICBsZXQgYXR0
cmlidXRlTmFtZTsKKyAgICAgICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLnBhcnNlSlNY
SWRlbnRpZmllcigpOwogICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hKU1goJzonKSkgewotICAg
ICAgICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSBpZGVudGlmaWVyOworICAgICAgICAgICAgICAg
IGNvbnN0IG5hbWVzcGFjZSA9IGlkZW50aWZpZXI7CiAgICAgICAgICAgICAgICAgdGhpcy5leHBl
Y3RKU1goJzonKTsKLSAgICAgICAgICAgICAgICB2YXIgbmFtZV8yID0gdGhpcy5wYXJzZUpTWElk
ZW50aWZpZXIoKTsKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hOYW1lc3BhY2VkTmFtZShuYW1lc3BhY2UsIG5hbWVfMikp
OworICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnBhcnNlSlNYSWRlbnRpZmllcigp
OworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBKU1hOb2RlLkpTWE5hbWVzcGFjZWROYW1lKG5hbWVzcGFjZSwgbmFtZSkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9
IGlkZW50aWZpZXI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRl
TmFtZTsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWFN0
cmluZ0xpdGVyYWxBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpOwotICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5u
ZXh0SlNYVG9rZW4oKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUpTWFN0cmluZ0xpdGVyYWxB
dHRyaWJ1dGUoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2Rl
KCk7CisgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMubmV4dEpTWFRva2VuKCk7CiAgICAg
ICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gOCAvKiBTdHJpbmdMaXRlcmFsICovKSB7CiAgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB2YXIgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7CisgICAg
ICAgICAgICBjb25zdCByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsKICAgICAgICAgICAg
IHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwodG9rZW4udmFsdWUs
IHJhdykpOwotICAgICAgICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNY
RXhwcmVzc2lvbkF0dHJpYnV0ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VKU1hFeHBy
ZXNzaW9uQXR0cmlidXRlKCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRl
SlNYTm9kZSgpOwogICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJ3snKTsKICAgICAgICAgICAg
IHRoaXMuZmluaXNoSlNYKCk7CiAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnfScpKSB7CiAg
ICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKCdKU1ggYXR0cmlidXRlcyBtdXN0IG9u
bHkgYmUgYXNzaWduZWQgYSBub24tZW1wdHkgZXhwcmVzc2lvbicpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgdmFyIGV4cHJlc3Npb24gPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24oKTsKKyAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLnBhcnNlQXNzaWdubWVu
dEV4cHJlc3Npb24oKTsKICAgICAgICAgICAgIHRoaXMucmVlbnRlckpTWCgpOwogICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYRXhwcmVzc2lvbkNv
bnRhaW5lcihleHByZXNzaW9uKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90
b3R5cGUucGFyc2VKU1hBdHRyaWJ1dGVWYWx1ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgfQor
ICAgICAgICBwYXJzZUpTWEF0dHJpYnV0ZVZhbHVlKCkgewogICAgICAgICAgICAgcmV0dXJuIHRo
aXMubWF0Y2hKU1goJ3snKSA/IHRoaXMucGFyc2VKU1hFeHByZXNzaW9uQXR0cmlidXRlKCkgOgog
ICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hKU1goJzwnKSA/IHRoaXMucGFyc2VKU1hFbGVtZW50
KCkgOiB0aGlzLnBhcnNlSlNYU3RyaW5nTGl0ZXJhbEF0dHJpYnV0ZSgpOwotICAgICAgICB9Owot
ICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYTmFtZVZhbHVlQXR0cmlidXRlID0g
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUo
KTsKLSAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZUpTWEF0dHJpYnV0ZU5hbWUoKTsK
LSAgICAgICAgICAgIHZhciB2YWx1ZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VK
U1hOYW1lVmFsdWVBdHRyaWJ1dGUoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5j
cmVhdGVKU1hOb2RlKCk7CisgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5wYXJzZUpTWEF0
dHJpYnV0ZU5hbWUoKTsKKyAgICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7CiAgICAgICAgICAg
ICBpZiAodGhpcy5tYXRjaEpTWCgnPScpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3RK
U1goJz0nKTsKICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VKU1hBdHRyaWJ1dGVW
YWx1ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IEpTWE5vZGUuSlNYQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7Ci0gICAgICAgIH07
Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hTcHJlYWRBdHRyaWJ1dGUgPSBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgp
OworICAgICAgICB9CisgICAgICAgIHBhcnNlSlNYU3ByZWFkQXR0cmlidXRlKCkgeworICAgICAg
ICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpOwogICAgICAgICAgICAgdGhp
cy5leHBlY3RKU1goJ3snKTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCcuLi4nKTsKICAg
ICAgICAgICAgIHRoaXMuZmluaXNoSlNYKCk7Ci0gICAgICAgICAgICB2YXIgYXJndW1lbnQgPSB0
aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGNvbnN0IGFyZ3Vt
ZW50ID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICB0aGlz
LnJlZW50ZXJKU1goKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBKU1hOb2RlLkpTWFNwcmVhZEF0dHJpYnV0ZShhcmd1bWVudCkpOwotICAgICAgICB9OwotICAg
ICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYQXR0cmlidXRlcyA9IGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gW107CisgICAgICAgIH0KKyAgICAgICAg
cGFyc2VKU1hBdHRyaWJ1dGVzKCkgeworICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IFtd
OwogICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoSlNYKCcvJykgJiYgIXRoaXMubWF0Y2hK
U1goJz4nKSkgewotICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSB0aGlzLm1hdGNoSlNY
KCd7JykgPyB0aGlzLnBhcnNlSlNYU3ByZWFkQXR0cmlidXRlKCkgOgorICAgICAgICAgICAgICAg
IGNvbnN0IGF0dHJpYnV0ZSA9IHRoaXMubWF0Y2hKU1goJ3snKSA/IHRoaXMucGFyc2VKU1hTcHJl
YWRBdHRyaWJ1dGUoKSA6CiAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VKU1hOYW1lVmFs
dWVBdHRyaWJ1dGUoKTsKICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goYXR0cmlidXRl
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzOwotICAgICAg
ICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYT3BlbmluZ0VsZW1lbnQg
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9k
ZSgpOworICAgICAgICB9CisgICAgICAgIHBhcnNlSlNYT3BlbmluZ0VsZW1lbnQoKSB7CisgICAg
ICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CiAgICAgICAgICAgICB0
aGlzLmV4cGVjdEpTWCgnPCcpOwotICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLnBhcnNlSlNY
RWxlbWVudE5hbWUoKTsKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5wYXJzZUpT
WEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgICAgIHZhciBzZWxmQ2xvc2luZyA9IHRoaXMubWF0Y2hK
U1goJy8nKTsKKyAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnBhcnNlSlNYRWxlbWVudE5h
bWUoKTsKKyAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLnBhcnNlSlNYQXR0cmli
dXRlcygpOworICAgICAgICAgICAgY29uc3Qgc2VsZkNsb3NpbmcgPSB0aGlzLm1hdGNoSlNYKCcv
Jyk7CiAgICAgICAgICAgICBpZiAoc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICB0aGlz
LmV4cGVjdEpTWCgnLycpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGhpcy5leHBlY3RK
U1goJz4nKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hO
b2RlLkpTWE9wZW5pbmdFbGVtZW50KG5hbWUsIHNlbGZDbG9zaW5nLCBhdHRyaWJ1dGVzKSk7Ci0g
ICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hCb3VuZGFyeUVs
ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRl
SlNYTm9kZSgpOworICAgICAgICB9CisgICAgICAgIHBhcnNlSlNYQm91bmRhcnlFbGVtZW50KCkg
eworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpOwogICAgICAg
ICAgICAgdGhpcy5leHBlY3RKU1goJzwnKTsKICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoSlNY
KCcvJykpIHsKICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgnLycpOwotICAgICAgICAg
ICAgICAgIHZhciBlbGVtZW50TmFtZSA9IHRoaXMucGFyc2VKU1hFbGVtZW50TmFtZSgpOworICAg
ICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnROYW1lID0gdGhpcy5wYXJzZUpTWEVsZW1lbnROYW1l
KCk7CiAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJz4nKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hDbG9zaW5nRWxlbWVu
dChlbGVtZW50TmFtZSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG5hbWUgPSB0
aGlzLnBhcnNlSlNYRWxlbWVudE5hbWUoKTsKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0g
dGhpcy5wYXJzZUpTWEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgICAgIHZhciBzZWxmQ2xvc2luZyA9
IHRoaXMubWF0Y2hKU1goJy8nKTsKKyAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnBhcnNl
SlNYRWxlbWVudE5hbWUoKTsKKyAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLnBh
cnNlSlNYQXR0cmlidXRlcygpOworICAgICAgICAgICAgY29uc3Qgc2VsZkNsb3NpbmcgPSB0aGlz
Lm1hdGNoSlNYKCcvJyk7CiAgICAgICAgICAgICBpZiAoc2VsZkNsb3NpbmcpIHsKICAgICAgICAg
ICAgICAgICB0aGlzLmV4cGVjdEpTWCgnLycpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
dGhpcy5leHBlY3RKU1goJz4nKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBKU1hOb2RlLkpTWE9wZW5pbmdFbGVtZW50KG5hbWUsIHNlbGZDbG9zaW5nLCBhdHRy
aWJ1dGVzKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VK
U1hFbXB0eUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlSlNYQ2hpbGROb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VKU1hF
bXB0eUV4cHJlc3Npb24oKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVK
U1hDaGlsZE5vZGUoKTsKICAgICAgICAgICAgIHRoaXMuY29sbGVjdENvbW1lbnRzKCk7CiAgICAg
ICAgICAgICB0aGlzLmxhc3RNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7CiAgICAg
ICAgICAgICB0aGlzLmxhc3RNYXJrZXIubGluZSA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOwog
ICAgICAgICAgICAgdGhpcy5sYXN0TWFya2VyLmNvbHVtbiA9IHRoaXMuc2Nhbm5lci5pbmRleCAt
IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hFbXB0eUV4cHJlc3Npb24oKSk7Ci0gICAgICAgIH07Ci0g
ICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyID0g
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUo
KTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUpTWEV4cHJlc3Npb25Db250YWluZXIoKSB7Cisg
ICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CiAgICAgICAgICAg
ICB0aGlzLmV4cGVjdEpTWCgneycpOwotICAgICAgICAgICAgdmFyIGV4cHJlc3Npb247CisgICAg
ICAgICAgICBsZXQgZXhwcmVzc2lvbjsKICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoSlNYKCd9
JykpIHsKICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gdGhpcy5wYXJzZUpTWEVtcHR5RXhw
cmVzc2lvbigpOwogICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCd9Jyk7CkBAIC04Njcs
MTkgKzg1MSwxOSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2Vi
cGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIHRoaXMucmVlbnRlckpTWCgpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5v
ZGUuSlNYRXhwcmVzc2lvbkNvbnRhaW5lcihleHByZXNzaW9uKSk7Ci0gICAgICAgIH07Ci0gICAg
ICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hDaGlsZHJlbiA9IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IFtdOworICAgICAgICB9CisgICAgICAgIHBhcnNl
SlNYQ2hpbGRyZW4oKSB7CisgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFtdOwogICAgICAg
ICAgICAgd2hpbGUgKCF0aGlzLnNjYW5uZXIuZW9mKCkpIHsKLSAgICAgICAgICAgICAgICB2YXIg
bm9kZSA9IHRoaXMuY3JlYXRlSlNYQ2hpbGROb2RlKCk7Ci0gICAgICAgICAgICAgICAgdmFyIHRv
a2VuID0gdGhpcy5uZXh0SlNYVGV4dCgpOworICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0
aGlzLmNyZWF0ZUpTWENoaWxkTm9kZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0g
dGhpcy5uZXh0SlNYVGV4dCgpOwogICAgICAgICAgICAgICAgIGlmICh0b2tlbi5zdGFydCA8IHRv
a2VuLmVuZCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcmF3ID0gdGhpcy5nZXRUb2tlblJh
dyh0b2tlbik7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IEpTWE5vZGUuSlNYVGV4dCh0b2tlbi52YWx1ZSwgcmF3KSk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHJhdyA9IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pOworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUu
SlNYVGV4dCh0b2tlbi52YWx1ZSwgcmF3KSk7CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVu
LnB1c2goY2hpbGQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAodGhp
cy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdID09PSAneycpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMucGFyc2VKU1hFeHByZXNzaW9uQ29udGFp
bmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucGFyc2VK
U1hFeHByZXNzaW9uQ29udGFpbmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1
c2goY29udGFpbmVyKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7
CkBAIC04ODcsMzMgKzg3MSwzMyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMp
IHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbjsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFy
c2VyLnByb3RvdHlwZS5wYXJzZUNvbXBsZXhKU1hFbGVtZW50ID0gZnVuY3Rpb24gKGVsKSB7Ci0g
ICAgICAgICAgICB2YXIgc3RhY2sgPSBbXTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUNvbXBs
ZXhKU1hFbGVtZW50KGVsKSB7CisgICAgICAgICAgICBjb25zdCBzdGFjayA9IFtdOwogICAgICAg
ICAgICAgd2hpbGUgKCF0aGlzLnNjYW5uZXIuZW9mKCkpIHsKICAgICAgICAgICAgICAgICBlbC5j
aGlsZHJlbiA9IGVsLmNoaWxkcmVuLmNvbmNhdCh0aGlzLnBhcnNlSlNYQ2hpbGRyZW4oKSk7Ci0g
ICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWENoaWxkTm9kZSgpOwotICAg
ICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5wYXJzZUpTWEJvdW5kYXJ5RWxlbWVudCgp
OworICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZUpTWENoaWxkTm9kZSgp
OworICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBhcnNlSlNYQm91bmRhcnlF
bGVtZW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0ganN4X3N5bnRh
eF8xLkpTWFN5bnRheC5KU1hPcGVuaW5nRWxlbWVudCkgewotICAgICAgICAgICAgICAgICAgICB2
YXIgb3BlbmluZyA9IGVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wZW5pbmcg
PSBlbGVtZW50OwogICAgICAgICAgICAgICAgICAgICBpZiAob3BlbmluZy5zZWxmQ2xvc2luZykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgSlNYTm9kZS5KU1hFbGVtZW50KG9wZW5pbmcsIFtdLCBudWxsKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5v
ZGUuSlNYRWxlbWVudChvcGVuaW5nLCBbXSwgbnVsbCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgZWwuY2hpbGRyZW4ucHVzaChjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNo
KGVsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsID0geyBub2RlOiBub2RlLCBvcGVuaW5n
OiBvcGVuaW5nLCBjbG9zaW5nOiBudWxsLCBjaGlsZHJlbjogW10gfTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsID0geyBub2RlLCBvcGVuaW5nLCBjbG9zaW5nOiBudWxsLCBjaGlsZHJlbjog
W10gfTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWENs
b3NpbmdFbGVtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIGVsLmNsb3NpbmcgPSBlbGVtZW50
OwotICAgICAgICAgICAgICAgICAgICB2YXIgb3Blbl8xID0gZ2V0UXVhbGlmaWVkRWxlbWVudE5h
bWUoZWwub3BlbmluZy5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNsb3NlXzEgPSBn
ZXRRdWFsaWZpZWRFbGVtZW50TmFtZShlbC5jbG9zaW5nLm5hbWUpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAob3Blbl8xICE9PSBjbG9zZV8xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnRvbGVyYXRlRXJyb3IoJ0V4cGVjdGVkIGNvcnJlc3BvbmRpbmcgSlNYIGNsb3NpbmcgdGFn
IGZvciAlMCcsIG9wZW5fMSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wZW4gPSBnZXRR
dWFsaWZpZWRFbGVtZW50TmFtZShlbC5vcGVuaW5nLm5hbWUpOworICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjbG9zZSA9IGdldFF1YWxpZmllZEVsZW1lbnROYW1lKGVsLmNsb3NpbmcubmFtZSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChvcGVuICE9PSBjbG9zZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKCdFeHBlY3RlZCBjb3JyZXNwb25kaW5nIEpT
WCBjbG9zaW5nIHRhZyBmb3IgJTAnLCBvcGVuKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5maW5hbGl6ZShlbC5ub2RlLCBuZXcgSlNYTm9kZS5K
U1hFbGVtZW50KGVsLm9wZW5pbmcsIGVsLmNoaWxkcmVuLCBlbC5jbG9zaW5nKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZmluYWxpemUoZWwubm9kZSwgbmV3
IEpTWE5vZGUuSlNYRWxlbWVudChlbC5vcGVuaW5nLCBlbC5jaGlsZHJlbiwgZWwuY2xvc2luZykp
OwogICAgICAgICAgICAgICAgICAgICAgICAgZWwgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsLmNoaWxkcmVuLnB1c2goY2hpbGQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7CkBAIC05MjQsMzQgKzkwOCwzMyBAQCByZXR1
cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBlbDsKLSAg
ICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEVsZW1lbnQgPSBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgp
OwotICAgICAgICAgICAgdmFyIG9wZW5pbmcgPSB0aGlzLnBhcnNlSlNYT3BlbmluZ0VsZW1lbnQo
KTsKLSAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IFtdOwotICAgICAgICAgICAgdmFyIGNsb3Np
bmcgPSBudWxsOworICAgICAgICB9CisgICAgICAgIHBhcnNlSlNYRWxlbWVudCgpIHsKKyAgICAg
ICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKKyAgICAgICAgICAgIGNv
bnN0IG9wZW5pbmcgPSB0aGlzLnBhcnNlSlNYT3BlbmluZ0VsZW1lbnQoKTsKKyAgICAgICAgICAg
IGxldCBjaGlsZHJlbiA9IFtdOworICAgICAgICAgICAgbGV0IGNsb3NpbmcgPSBudWxsOwogICAg
ICAgICAgICAgaWYgKCFvcGVuaW5nLnNlbGZDbG9zaW5nKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGVsID0gdGhpcy5wYXJzZUNvbXBsZXhKU1hFbGVtZW50KHsgbm9kZTogbm9kZSwgb3BlbmluZzog
b3BlbmluZywgY2xvc2luZzogY2xvc2luZywgY2hpbGRyZW46IGNoaWxkcmVuIH0pOworICAgICAg
ICAgICAgICAgIGNvbnN0IGVsID0gdGhpcy5wYXJzZUNvbXBsZXhKU1hFbGVtZW50KHsgbm9kZSwg
b3BlbmluZywgY2xvc2luZywgY2hpbGRyZW4gfSk7CiAgICAgICAgICAgICAgICAgY2hpbGRyZW4g
PSBlbC5jaGlsZHJlbjsKICAgICAgICAgICAgICAgICBjbG9zaW5nID0gZWwuY2xvc2luZzsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBK
U1hOb2RlLkpTWEVsZW1lbnQob3BlbmluZywgY2hpbGRyZW4sIGNsb3NpbmcpKTsKLSAgICAgICAg
fTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWFJvb3QgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VKU1hSb290KCkgewogICAgICAgICAgICAgLy8g
UG9wIHRoZSBvcGVuaW5nICc8JyBhZGRlZCBmcm9tIHRoZSBsb29rYWhlYWQuCiAgICAgICAgICAg
ICBpZiAodGhpcy5jb25maWcudG9rZW5zKSB7CiAgICAgICAgICAgICAgICAgdGhpcy50b2tlbnMu
cG9wKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0aGlzLnN0YXJ0SlNYKCk7Ci0gICAg
ICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMucGFyc2VKU1hFbGVtZW50KCk7CisgICAgICAgICAg
ICBjb25zdCBlbGVtZW50ID0gdGhpcy5wYXJzZUpTWEVsZW1lbnQoKTsKICAgICAgICAgICAgIHRo
aXMuZmluaXNoSlNYKCk7CiAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICAgICAgfTsK
LSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5pc1N0YXJ0T2ZFeHByZXNzaW9uID0gZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuaXNTdGFydE9mRXhw
cmVzc2lvbi5jYWxsKHRoaXMpIHx8IHRoaXMubWF0Y2goJzwnKTsKLSAgICAgICAgfTsKLSAgICAg
ICAgcmV0dXJuIEpTWFBhcnNlcjsKLSAgICB9KHBhcnNlcl8xLlBhcnNlcikpOworICAgICAgICB9
CisgICAgICAgIGlzU3RhcnRPZkV4cHJlc3Npb24oKSB7CisgICAgICAgICAgICByZXR1cm4gc3Vw
ZXIuaXNTdGFydE9mRXhwcmVzc2lvbigpIHx8IHRoaXMubWF0Y2goJzwnKTsKKyAgICAgICAgfQor
ICAgIH0KICAgICBleHBvcnRzLkpTWFBhcnNlciA9IEpTWFBhcnNlcjsKIAogCkBAIC05NjIsNyAr
OTQ1LDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tC
b290c3RyYXAKICAgICAidXNlIHN0cmljdCI7CiAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4
cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgICAvLyBTZWUgYWxzbyB0
b29scy9nZW5lcmF0ZS11bmljb2RlLXJlZ2V4LmpzLgotICAgIHZhciBSZWdleCA9IHsKKyAgICBj
b25zdCBSZWdleCA9IHsKICAgICAgICAgLy8gVW5pY29kZSB2MTIuMS4wIE5vbkFzY2lpSWRlbnRp
ZmllclN0YXJ0OgogICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogL1tceEFBXHhCNVx4
QkFceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0
XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzN0Zc
dTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjct
XHUwNDgxXHUwNDhBLVx1MDUyRlx1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjAtXHUwNTg4XHUwNUQw
LVx1MDVFQVx1MDVFRi1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZE
M1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRVx1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBc
dTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFcdTA3RjRcdTA3RjVc
dTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDg2MC1c
dTA4NkFcdTA4QTAtXHUwOEI0XHUwOEI2LVx1MDhCRFx1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBc
dTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk4MFx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMt
XHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENc
dTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwOUZDXHUwQTA1LVx1MEEwQVx1MEEwRlx1
MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUw
QTM4XHUwQTM5XHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUw
QThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1
MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEFGOVx1MEIwNS1cdTBCMENcdTBCMEZcdTBC
MTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBC
M0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4
RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEz
XHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBcdTBDMDUtXHUwQzBDXHUwQzBF
LVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzM5XHUwQzNEXHUwQzU4LVx1MEM1QVx1MEM2
MFx1MEM2MVx1MEM4MFx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENB
QS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0Yy
XHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDU0
LVx1MEQ1Nlx1MEQ1Ri1cdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBE
QjFcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBF
MzNcdTBFNDAtXHUwRTQ2XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg2LVx1MEU4QVx1MEU4Qy1cdTBF
QTNcdTBFQTVcdTBFQTctXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVD
Nlx1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBG
OENcdTEwMDAtXHUxMDJBXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEw
NjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4RVx1MTBBMC1cdTEwQzVcdTEw
QzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUx
MjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1
MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1c
dTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhG
XHUxM0EwLVx1MTNGNVx1MTNGOC1cdTEzRkRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4
MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGOFx1MTcwMC1cdTE3MENcdTE3MEUtXHUx
NzExXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1
MTc4MC1cdTE3QjNcdTE3RDdcdTE3RENcdTE4MjAtXHUxODc4XHUxODgwLVx1MThBOFx1MThBQVx1
MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFFXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAt
XHUxOUFCXHUxOUIwLVx1MTlDOVx1MUEwMC1cdTFBMTZcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1
LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXHUxQkJBLVx1MUJF
NVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUM4MC1cdTFDODhcdTFD
OTAtXHUxQ0JBXHUxQ0JELVx1MUNCRlx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0YzXHUxQ0Y1XHUx
Q0Y2XHUxQ0ZBXHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1
MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1
MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1c
dTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0
XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEt
XHUyMTEzXHUyMTE1XHUyMTE4LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMzlc
dTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUyQzJF
XHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXHUyRDAw
LVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEw
LVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJE
QzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTMwMDUtXHUzMDA3XHUz
MDIxLVx1MzAyOVx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5Qi1c
dTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkZcdTMxMzEtXHUzMThF
XHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZFRlx1QTAw
MC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2
MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5RFx1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVB
NzIyLVx1QTc4OFx1QTc4Qi1cdUE3QkZcdUE3QzItXHVBN0M2XHVBN0Y3LVx1QTgwMVx1QTgwMy1c
dUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIz
XHVBOEYyLVx1QThGN1x1QThGQlx1QThGRFx1QThGRVx1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2
XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUE5RTAtXHVBOUU0XHVBOUU2LVx1QTlF
Rlx1QTlGQS1cdUE5RkVcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFB
NjAtXHVBQTc2XHVBQTdBXHVBQTdFLVx1QUFBRlx1QUFCMVx1QUFCNVx1QUFCNlx1QUFCOS1cdUFB
QkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFC
MDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1
QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjY3XHVBQjcwLVx1QUJFMlx1QUMwMC1cdUQ3QTNc
dUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAw
LVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIz
OC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQz
LVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZF
NzRcdUZFNzYtXHVGRUZDXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVG
RkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ118XHVEODAw
W1x1REMwMC1cdURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMzQ1x1REMzRFx1REMz
Ri1cdURDNERcdURDNTAtXHVEQzVEXHVEQzgwLVx1RENGQVx1REQ0MC1cdURENzRcdURFODAtXHVE
RTlDXHVERUEwLVx1REVEMFx1REYwMC1cdURGMUZcdURGMkQtXHVERjRBXHVERjUwLVx1REY3NVx1
REY4MC1cdURGOURcdURGQTAtXHVERkMzXHVERkM4LVx1REZDRlx1REZEMS1cdURGRDVdfFx1RDgw
MVtcdURDMDAtXHVEQzlEXHVEQ0IwLVx1RENEM1x1RENEOC1cdURDRkJcdUREMDAtXHVERDI3XHVE
RDMwLVx1REQ2M1x1REUwMC1cdURGMzZcdURGNDAtXHVERjU1XHVERjYwLVx1REY2N118XHVEODAy
W1x1REMwMC1cdURDMDVcdURDMDhcdURDMEEtXHVEQzM1XHVEQzM3XHVEQzM4XHVEQzNDXHVEQzNG
LVx1REM1NVx1REM2MC1cdURDNzZcdURDODAtXHVEQzlFXHVEQ0UwLVx1RENGMlx1RENGNFx1RENG
NVx1REQwMC1cdUREMTVcdUREMjAtXHVERDM5XHVERDgwLVx1RERCN1x1RERCRVx1RERCRlx1REUw
MFx1REUxMC1cdURFMTNcdURFMTUtXHVERTE3XHVERTE5LVx1REUzNVx1REU2MC1cdURFN0NcdURF
ODAtXHVERTlDXHVERUMwLVx1REVDN1x1REVDOS1cdURFRTRcdURGMDAtXHVERjM1XHVERjQwLVx1
REY1NVx1REY2MC1cdURGNzJcdURGODAtXHVERjkxXXxcdUQ4MDNbXHVEQzAwLVx1REM0OFx1REM4
MC1cdURDQjJcdURDQzAtXHVEQ0YyXHVERDAwLVx1REQyM1x1REYwMC1cdURGMUNcdURGMjdcdURG
MzAtXHVERjQ1XHVERkUwLVx1REZGNl18XHVEODA0W1x1REMwMy1cdURDMzdcdURDODMtXHVEQ0FG
XHVEQ0QwLVx1RENFOFx1REQwMy1cdUREMjZcdURENDRcdURENTAtXHVERDcyXHVERDc2XHVERDgz
LVx1RERCMlx1RERDMS1cdUREQzRcdUREREFcdURERENcdURFMDAtXHVERTExXHVERTEzLVx1REUy
Qlx1REU4MC1cdURFODZcdURFODhcdURFOEEtXHVERThEXHVERThGLVx1REU5RFx1REU5Ri1cdURF
QThcdURFQjAtXHVERURFXHVERjA1LVx1REYwQ1x1REYwRlx1REYxMFx1REYxMy1cdURGMjhcdURG
MkEtXHVERjMwXHVERjMyXHVERjMzXHVERjM1LVx1REYzOVx1REYzRFx1REY1MFx1REY1RC1cdURG
NjFdfFx1RDgwNVtcdURDMDAtXHVEQzM0XHVEQzQ3LVx1REM0QVx1REM1Rlx1REM4MC1cdURDQUZc
dURDQzRcdURDQzVcdURDQzdcdUREODAtXHVEREFFXHVEREQ4LVx1REREQlx1REUwMC1cdURFMkZc
dURFNDRcdURFODAtXHVERUFBXHVERUI4XHVERjAwLVx1REYxQV18XHVEODA2W1x1REMwMC1cdURD
MkJcdURDQTAtXHVEQ0RGXHVEQ0ZGXHVEREEwLVx1RERBN1x1RERBQS1cdURERDBcdURERTFcdURE
RTNcdURFMDBcdURFMEItXHVERTMyXHVERTNBXHVERTUwXHVERTVDLVx1REU4OVx1REU5RFx1REVD
MC1cdURFRjhdfFx1RDgwN1tcdURDMDAtXHVEQzA4XHVEQzBBLVx1REMyRVx1REM0MFx1REM3Mi1c
dURDOEZcdUREMDAtXHVERDA2XHVERDA4XHVERDA5XHVERDBCLVx1REQzMFx1REQ0Nlx1REQ2MC1c
dURENjVcdURENjdcdURENjhcdURENkEtXHVERDg5XHVERDk4XHVERUUwLVx1REVGMl18XHVEODA4
W1x1REMwMC1cdURGOTldfFx1RDgwOVtcdURDMDAtXHVEQzZFXHVEQzgwLVx1REQ0M118W1x1RDgw
Q1x1RDgxQy1cdUQ4MjBcdUQ4NDAtXHVEODY4XHVEODZBLVx1RDg2Q1x1RDg2Ri1cdUQ4NzJcdUQ4
NzQtXHVEODc5XVtcdURDMDAtXHVERkZGXXxcdUQ4MERbXHVEQzAwLVx1REMyRV18XHVEODExW1x1
REMwMC1cdURFNDZdfFx1RDgxQVtcdURDMDAtXHVERTM4XHVERTQwLVx1REU1RVx1REVEMC1cdURF
RURcdURGMDAtXHVERjJGXHVERjQwLVx1REY0M1x1REY2My1cdURGNzdcdURGN0QtXHVERjhGXXxc
dUQ4MUJbXHVERTQwLVx1REU3Rlx1REYwMC1cdURGNEFcdURGNTBcdURGOTMtXHVERjlGXHVERkUw
XHVERkUxXHVERkUzXXxcdUQ4MjFbXHVEQzAwLVx1REZGN118XHVEODIyW1x1REMwMC1cdURFRjJd
fFx1RDgyQ1tcdURDMDAtXHVERDFFXHVERDUwLVx1REQ1Mlx1REQ2NC1cdURENjdcdURENzAtXHVE
RUZCXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkw
LVx1REM5OV18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVE
Q0EyXHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVE
Q0MzXHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1
REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURENTBc
dURENTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZD
LVx1REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURG
ODhcdURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JdfFx1RDgzOFtcdUREMDAt
XHVERDJDXHVERDM3LVx1REQzRFx1REQ0RVx1REVDMC1cdURFRUJdfFx1RDgzQVtcdURDMDAtXHVE
Q0M0XHVERDAwLVx1REQ0M1x1REQ0Ql18XHVEODNCW1x1REUwMC1cdURFMDNcdURFMDUtXHVERTFG
XHVERTIxXHVERTIyXHVERTI0XHVERTI3XHVERTI5LVx1REUzMlx1REUzNC1cdURFMzdcdURFMzlc
dURFM0JcdURFNDJcdURFNDdcdURFNDlcdURFNEJcdURFNEQtXHVERTRGXHVERTUxXHVERTUyXHVE
RTU0XHVERTU3XHVERTU5XHVERTVCXHVERTVEXHVERTVGXHVERTYxXHVERTYyXHVERTY0XHVERTY3
LVx1REU2QVx1REU2Qy1cdURFNzJcdURFNzQtXHVERTc3XHVERTc5LVx1REU3Q1x1REU3RVx1REU4
MC1cdURFODlcdURFOEItXHVERTlCXHVERUExLVx1REVBM1x1REVBNS1cdURFQTlcdURFQUItXHVE
RUJCXXxcdUQ4NjlbXHVEQzAwLVx1REVENlx1REYwMC1cdURGRkZdfFx1RDg2RFtcdURDMDAtXHVE
RjM0XHVERjQwLVx1REZGRl18XHVEODZFW1x1REMwMC1cdURDMURcdURDMjAtXHVERkZGXXxcdUQ4
NzNbXHVEQzAwLVx1REVBMVx1REVCMC1cdURGRkZdfFx1RDg3QVtcdURDMDAtXHVERkUwXXxcdUQ4
N0VbXHVEQzAwLVx1REUxRF0vLAogICAgICAgICAvLyBVbmljb2RlIHYxMi4xLjAgTm9uQXNjaWlJ
ZGVudGlmaWVyUGFydDoKQEAgLTk3MCwyOSArOTUzLDI5IEBAIHJldHVybiAvKioqKioqLyAoZnVu
Y3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgfTsKICAgICBleHBvcnRz
LkNoYXJhY3RlciA9IHsKICAgICAgICAgLyogdHNsaW50OmRpc2FibGU6bm8tYml0d2lzZSAqLwot
ICAgICAgICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiAoY3ApIHsKKyAgICAgICAgZnJvbUNvZGVQ
b2ludChjcCkgewogICAgICAgICAgICAgcmV0dXJuIChjcCA8IDB4MTAwMDApID8gU3RyaW5nLmZy
b21DaGFyQ29kZShjcCkgOgogICAgICAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoMHhE
ODAwICsgKChjcCAtIDB4MTAwMDApID4+IDEwKSkgKwogICAgICAgICAgICAgICAgICAgICBTdHJp
bmcuZnJvbUNoYXJDb2RlKDB4REMwMCArICgoY3AgLSAweDEwMDAwKSAmIDEwMjMpKTsKICAgICAg
ICAgfSwKICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtd2hp
dGUtc3BhY2UKLSAgICAgICAgaXNXaGl0ZVNwYWNlOiBmdW5jdGlvbiAoY3ApIHsKKyAgICAgICAg
aXNXaGl0ZVNwYWNlKGNwKSB7CiAgICAgICAgICAgICByZXR1cm4gKGNwID09PSAweDIwKSB8fCAo
Y3AgPT09IDB4MDkpIHx8IChjcCA9PT0gMHgwQikgfHwgKGNwID09PSAweDBDKSB8fCAoY3AgPT09
IDB4QTApIHx8CiAgICAgICAgICAgICAgICAgKGNwID49IDB4MTY4MCAmJiBbMHgxNjgwLCAweDIw
MDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAw
NywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAwMCwgMHhGRUZG
XS5pbmRleE9mKGNwKSA+PSAwKTsKICAgICAgICAgfSwKICAgICAgICAgLy8gaHR0cHM6Ly90YzM5
LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbGluZS10ZXJtaW5hdG9ycwotICAgICAgICBpc0xpbmVU
ZXJtaW5hdG9yOiBmdW5jdGlvbiAoY3ApIHsKKyAgICAgICAgaXNMaW5lVGVybWluYXRvcihjcCkg
ewogICAgICAgICAgICAgcmV0dXJuIChjcCA9PT0gMHgwQSkgfHwgKGNwID09PSAweDBEKSB8fCAo
Y3AgPT09IDB4MjAyOCkgfHwgKGNwID09PSAweDIwMjkpOwogICAgICAgICB9LAogICAgICAgICAv
LyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1uYW1lcy1hbmQta2V5d29yZHMK
LSAgICAgICAgaXNJZGVudGlmaWVyU3RhcnQ6IGZ1bmN0aW9uIChjcCkgeworICAgICAgICBpc0lk
ZW50aWZpZXJTdGFydChjcCkgewogICAgICAgICAgICAgcmV0dXJuIChjcCA9PT0gMHgyNCkgfHwg
KGNwID09PSAweDVGKSB8fCAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKQogICAgICAg
ICAgICAgICAgIChjcCA+PSAweDQxICYmIGNwIDw9IDB4NUEpIHx8IC8vIEEuLloKICAgICAgICAg
ICAgICAgICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDdBKSB8fCAvLyBhLi56CiAgICAgICAgICAg
ICAgICAgKGNwID09PSAweDVDKSB8fCAvLyBcIChiYWNrc2xhc2gpCiAgICAgICAgICAgICAgICAg
KChjcCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KGV4cG9y
dHMuQ2hhcmFjdGVyLmZyb21Db2RlUG9pbnQoY3ApKSk7CiAgICAgICAgIH0sCi0gICAgICAgIGlz
SWRlbnRpZmllclBhcnQ6IGZ1bmN0aW9uIChjcCkgeworICAgICAgICBpc0lkZW50aWZpZXJQYXJ0
KGNwKSB7CiAgICAgICAgICAgICByZXR1cm4gKGNwID09PSAweDI0KSB8fCAoY3AgPT09IDB4NUYp
IHx8IC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpCiAgICAgICAgICAgICAgICAgKGNw
ID49IDB4NDEgJiYgY3AgPD0gMHg1QSkgfHwgLy8gQS4uWgogICAgICAgICAgICAgICAgIChjcCA+
PSAweDYxICYmIGNwIDw9IDB4N0EpIHx8IC8vIGEuLnoKQEAgLTEwMDEsMTUgKzk4NCwxNSBAQCBy
ZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAog
ICAgICAgICAgICAgICAgICgoY3AgPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVy
UGFydC50ZXN0KGV4cG9ydHMuQ2hhcmFjdGVyLmZyb21Db2RlUG9pbnQoY3ApKSk7CiAgICAgICAg
IH0sCiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxpdGVy
YWxzLW51bWVyaWMtbGl0ZXJhbHMKLSAgICAgICAgaXNEZWNpbWFsRGlnaXQ6IGZ1bmN0aW9uIChj
cCkgeworICAgICAgICBpc0RlY2ltYWxEaWdpdChjcCkgewogICAgICAgICAgICAgcmV0dXJuIChj
cCA+PSAweDMwICYmIGNwIDw9IDB4MzkpOyAvLyAwLi45CiAgICAgICAgIH0sCi0gICAgICAgIGlz
SGV4RGlnaXQ6IGZ1bmN0aW9uIChjcCkgeworICAgICAgICBpc0hleERpZ2l0KGNwKSB7CiAgICAg
ICAgICAgICByZXR1cm4gKGNwID49IDB4MzAgJiYgY3AgPD0gMHgzOSkgfHwgLy8gMC4uOQogICAg
ICAgICAgICAgICAgIChjcCA+PSAweDQxICYmIGNwIDw9IDB4NDYpIHx8IC8vIEEuLkYKICAgICAg
ICAgICAgICAgICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDY2KTsgLy8gYS4uZgogICAgICAgICB9
LAotICAgICAgICBpc09jdGFsRGlnaXQ6IGZ1bmN0aW9uIChjcCkgeworICAgICAgICBpc09jdGFs
RGlnaXQoY3ApIHsKICAgICAgICAgICAgIHJldHVybiAoY3AgPj0gMHgzMCAmJiBjcCA8PSAweDM3
KTsgLy8gMC4uNwogICAgICAgICB9CiAgICAgfTsKQEAgLTEwMjEsMTAyICsxMDA0LDkxIEBAIHJl
dHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAK
ICAgICAidXNlIHN0cmljdCI7CiAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJf
X2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKLSAgICB2YXIganN4X3N5bnRheF8xID0gX193
ZWJwYWNrX3JlcXVpcmVfXyg2KTsKKyAgICBjb25zdCBqc3hfc3ludGF4XzEgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDYpOwogICAgIC8qIHRzbGludDpkaXNhYmxlOm1heC1jbGFzc2VzLXBlci1maWxl
ICovCi0gICAgdmFyIEpTWENsb3NpbmdFbGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KCkgewotICAgICAgICBmdW5jdGlvbiBKU1hDbG9zaW5nRWxlbWVudChuYW1lKSB7CisgICAgY2xh
c3MgSlNYQ2xvc2luZ0VsZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3RvcihuYW1lKSB7CiAgICAg
ICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWENsb3NpbmdFbGVt
ZW50OwogICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gSlNYQ2xvc2luZ0VsZW1lbnQ7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5K
U1hDbG9zaW5nRWxlbWVudCA9IEpTWENsb3NpbmdFbGVtZW50OwotICAgIHZhciBKU1hFbGVtZW50
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBKU1hFbGVt
ZW50KG9wZW5pbmdFbGVtZW50LCBjaGlsZHJlbiwgY2xvc2luZ0VsZW1lbnQpIHsKKyAgICBjbGFz
cyBKU1hFbGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3Iob3BlbmluZ0VsZW1lbnQsIGNoaWxk
cmVuLCBjbG9zaW5nRWxlbWVudCkgewogICAgICAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRh
eF8xLkpTWFN5bnRheC5KU1hFbGVtZW50OwogICAgICAgICAgICAgdGhpcy5vcGVuaW5nRWxlbWVu
dCA9IG9wZW5pbmdFbGVtZW50OwogICAgICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVu
OwogICAgICAgICAgICAgdGhpcy5jbG9zaW5nRWxlbWVudCA9IGNsb3NpbmdFbGVtZW50OwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBKU1hFbGVtZW50OwotICAgIH0oKSk7CisgICAgfQogICAg
IGV4cG9ydHMuSlNYRWxlbWVudCA9IEpTWEVsZW1lbnQ7Ci0gICAgdmFyIEpTWEVtcHR5RXhwcmVz
c2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSlNY
RW1wdHlFeHByZXNzaW9uKCkgeworICAgIGNsYXNzIEpTWEVtcHR5RXhwcmVzc2lvbiB7CisgICAg
ICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8x
LkpTWFN5bnRheC5KU1hFbXB0eUV4cHJlc3Npb247CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IEpTWEVtcHR5RXhwcmVzc2lvbjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkpTWEVt
cHR5RXhwcmVzc2lvbiA9IEpTWEVtcHR5RXhwcmVzc2lvbjsKLSAgICB2YXIgSlNYRXhwcmVzc2lv
bkNvbnRhaW5lciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rp
b24gSlNYRXhwcmVzc2lvbkNvbnRhaW5lcihleHByZXNzaW9uKSB7CisgICAgY2xhc3MgSlNYRXhw
cmVzc2lvbkNvbnRhaW5lciB7CisgICAgICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb24pIHsKICAg
ICAgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYRXhwcmVzc2lv
bkNvbnRhaW5lcjsKICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTWEV4cHJlc3Npb25Db250YWluZXI7Ci0gICAgfSgp
KTsKKyAgICB9CiAgICAgZXhwb3J0cy5KU1hFeHByZXNzaW9uQ29udGFpbmVyID0gSlNYRXhwcmVz
c2lvbkNvbnRhaW5lcjsKLSAgICB2YXIgSlNYSWRlbnRpZmllciA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSlNYSWRlbnRpZmllcihuYW1lKSB7CisgICAg
Y2xhc3MgSlNYSWRlbnRpZmllciB7CisgICAgICAgIGNvbnN0cnVjdG9yKG5hbWUpIHsKICAgICAg
ICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYSWRlbnRpZmllcjsK
ICAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IEpTWElkZW50aWZpZXI7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5KU1hJZGVudGlm
aWVyID0gSlNYSWRlbnRpZmllcjsKLSAgICB2YXIgSlNYTWVtYmVyRXhwcmVzc2lvbiA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSlNYTWVtYmVyRXhwcmVz
c2lvbihvYmplY3QsIHByb3BlcnR5KSB7CisgICAgY2xhc3MgSlNYTWVtYmVyRXhwcmVzc2lvbiB7
CisgICAgICAgIGNvbnN0cnVjdG9yKG9iamVjdCwgcHJvcGVydHkpIHsKICAgICAgICAgICAgIHRo
aXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYTWVtYmVyRXhwcmVzc2lvbjsKICAg
ICAgICAgICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0OwogICAgICAgICAgICAgdGhpcy5wcm9wZXJ0
eSA9IHByb3BlcnR5OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBKU1hNZW1iZXJFeHByZXNz
aW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuSlNYTWVtYmVyRXhwcmVzc2lvbiA9
IEpTWE1lbWJlckV4cHJlc3Npb247Ci0gICAgdmFyIEpTWEF0dHJpYnV0ZSA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSlNYQXR0cmlidXRlKG5hbWUsIHZh
bHVlKSB7CisgICAgY2xhc3MgSlNYQXR0cmlidXRlIHsKKyAgICAgICAgY29uc3RydWN0b3IobmFt
ZSwgdmFsdWUpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50
YXguSlNYQXR0cmlidXRlOwogICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAg
ICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gSlNYQXR0
cmlidXRlOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuSlNYQXR0cmlidXRlID0gSlNY
QXR0cmlidXRlOwotICAgIHZhciBKU1hOYW1lc3BhY2VkTmFtZSA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSlNYTmFtZXNwYWNlZE5hbWUobmFtZXNwYWNl
LCBuYW1lKSB7CisgICAgY2xhc3MgSlNYTmFtZXNwYWNlZE5hbWUgeworICAgICAgICBjb25zdHJ1
Y3RvcihuYW1lc3BhY2UsIG5hbWUpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50
YXhfMS5KU1hTeW50YXguSlNYTmFtZXNwYWNlZE5hbWU7CiAgICAgICAgICAgICB0aGlzLm5hbWVz
cGFjZSA9IG5hbWVzcGFjZTsKICAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIEpTWE5hbWVzcGFjZWROYW1lOwotICAgIH0oKSk7CisgICAgfQog
ICAgIGV4cG9ydHMuSlNYTmFtZXNwYWNlZE5hbWUgPSBKU1hOYW1lc3BhY2VkTmFtZTsKLSAgICB2
YXIgSlNYT3BlbmluZ0VsZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgIGZ1bmN0aW9uIEpTWE9wZW5pbmdFbGVtZW50KG5hbWUsIHNlbGZDbG9zaW5nLCBhdHRyaWJ1
dGVzKSB7CisgICAgY2xhc3MgSlNYT3BlbmluZ0VsZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3Rv
cihuYW1lLCBzZWxmQ2xvc2luZywgYXR0cmlidXRlcykgewogICAgICAgICAgICAgdGhpcy50eXBl
ID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hPcGVuaW5nRWxlbWVudDsKICAgICAgICAgICAg
IHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgICAgICB0aGlzLnNlbGZDbG9zaW5nID0gc2VsZkNs
b3Npbmc7CiAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBKU1hPcGVuaW5nRWxlbWVudDsKLSAgICB9KCkpOworICAgIH0K
ICAgICBleHBvcnRzLkpTWE9wZW5pbmdFbGVtZW50ID0gSlNYT3BlbmluZ0VsZW1lbnQ7Ci0gICAg
dmFyIEpTWFNwcmVhZEF0dHJpYnV0ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgZnVuY3Rpb24gSlNYU3ByZWFkQXR0cmlidXRlKGFyZ3VtZW50KSB7CisgICAgY2xhc3Mg
SlNYU3ByZWFkQXR0cmlidXRlIHsKKyAgICAgICAgY29uc3RydWN0b3IoYXJndW1lbnQpIHsKICAg
ICAgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYU3ByZWFkQXR0
cmlidXRlOwogICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OwogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBKU1hTcHJlYWRBdHRyaWJ1dGU7Ci0gICAgfSgpKTsKKyAgICB9CiAg
ICAgZXhwb3J0cy5KU1hTcHJlYWRBdHRyaWJ1dGUgPSBKU1hTcHJlYWRBdHRyaWJ1dGU7Ci0gICAg
dmFyIEpTWFRleHQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0
aW9uIEpTWFRleHQodmFsdWUsIHJhdykgeworICAgIGNsYXNzIEpTWFRleHQgeworICAgICAgICBj
b25zdHJ1Y3Rvcih2YWx1ZSwgcmF3KSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3lu
dGF4XzEuSlNYU3ludGF4LkpTWFRleHQ7CiAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7
CiAgICAgICAgICAgICB0aGlzLnJhdyA9IHJhdzsKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
SlNYVGV4dDsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkpTWFRleHQgPSBKU1hUZXh0
OwogCiAKQEAgLTExNDcsMjYgKzExMTksMjQgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKIAogICAgICJ1c2Ugc3RyaWN0IjsKICAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVl
IH0pOwotICAgIHZhciBzeW50YXhfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CisgICAgY29u
c3Qgc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOwogICAgIC8qIHRzbGludDpkaXNh
YmxlOm1heC1jbGFzc2VzLXBlci1maWxlICovCi0gICAgdmFyIEFycmF5RXhwcmVzc2lvbiA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQXJyYXlFeHByZXNz
aW9uKGVsZW1lbnRzKSB7CisgICAgY2xhc3MgQXJyYXlFeHByZXNzaW9uIHsKKyAgICAgICAgY29u
c3RydWN0b3IoZWxlbWVudHMpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5
bnRheC5BcnJheUV4cHJlc3Npb247CiAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzID0gZWxlbWVu
dHM7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEFycmF5RXhwcmVzc2lvbjsKLSAgICB9KCkp
OworICAgIH0KICAgICBleHBvcnRzLkFycmF5RXhwcmVzc2lvbiA9IEFycmF5RXhwcmVzc2lvbjsK
LSAgICB2YXIgQXJyYXlQYXR0ZXJuID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAg
ICAgICBmdW5jdGlvbiBBcnJheVBhdHRlcm4oZWxlbWVudHMpIHsKKyAgICBjbGFzcyBBcnJheVBh
dHRlcm4geworICAgICAgICBjb25zdHJ1Y3RvcihlbGVtZW50cykgewogICAgICAgICAgICAgdGhp
cy50eXBlID0gc3ludGF4XzEuU3ludGF4LkFycmF5UGF0dGVybjsKICAgICAgICAgICAgIHRoaXMu
ZWxlbWVudHMgPSBlbGVtZW50czsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gQXJyYXlQYXR0
ZXJuOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuQXJyYXlQYXR0ZXJuID0gQXJyYXlQ
YXR0ZXJuOwotICAgIHZhciBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24o
cGFyYW1zLCBib2R5LCBleHByZXNzaW9uKSB7CisgICAgY2xhc3MgQXJyb3dGdW5jdGlvbkV4cHJl
c3Npb24geworICAgICAgICBjb25zdHJ1Y3RvcihwYXJhbXMsIGJvZHksIGV4cHJlc3Npb24pIHsK
ICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5BcnJvd0Z1bmN0aW9uRXhw
cmVzc2lvbjsKICAgICAgICAgICAgIHRoaXMuaWQgPSBudWxsOwogICAgICAgICAgICAgdGhpcy5w
YXJhbXMgPSBwYXJhbXM7CkBAIC0xMTc1LDMwICsxMTQ1LDI3IEBAIHJldHVybiAvKioqKioqLyAo
ZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB0aGlz
LmV4cHJlc3Npb24gPSBleHByZXNzaW9uOwogICAgICAgICAgICAgdGhpcy5hc3luYyA9IGZhbHNl
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjsKLSAg
ICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkFycm93RnVuY3Rpb25FeHByZXNzaW9uID0gQXJy
b3dGdW5jdGlvbkV4cHJlc3Npb247Ci0gICAgdmFyIEFzc2lnbm1lbnRFeHByZXNzaW9uID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBBc3NpZ25tZW50RXhw
cmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHsKKyAgICBjbGFzcyBBc3NpZ25tZW50RXhw
cmVzc2lvbiB7CisgICAgICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkgewog
ICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRFeHByZXNz
aW9uOwogICAgICAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yOwogICAgICAgICAgICAg
dGhpcy5sZWZ0ID0gbGVmdDsKICAgICAgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gQXNzaWdubWVudEV4cHJlc3Npb247Ci0gICAgfSgpKTsKKyAg
ICB9CiAgICAgZXhwb3J0cy5Bc3NpZ25tZW50RXhwcmVzc2lvbiA9IEFzc2lnbm1lbnRFeHByZXNz
aW9uOwotICAgIHZhciBBc3NpZ25tZW50UGF0dGVybiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQXNzaWdubWVudFBhdHRlcm4obGVmdCwgcmlnaHQpIHsK
KyAgICBjbGFzcyBBc3NpZ25tZW50UGF0dGVybiB7CisgICAgICAgIGNvbnN0cnVjdG9yKGxlZnQs
IHJpZ2h0KSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQXNzaWdu
bWVudFBhdHRlcm47CiAgICAgICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0OwogICAgICAgICAgICAg
dGhpcy5yaWdodCA9IHJpZ2h0OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBBc3NpZ25tZW50
UGF0dGVybjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkFzc2lnbm1lbnRQYXR0ZXJu
ID0gQXNzaWdubWVudFBhdHRlcm47Ci0gICAgdmFyIEFzeW5jQXJyb3dGdW5jdGlvbkV4cHJlc3Np
b24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEFzeW5j
QXJyb3dGdW5jdGlvbkV4cHJlc3Npb24ocGFyYW1zLCBib2R5LCBleHByZXNzaW9uKSB7CisgICAg
Y2xhc3MgQXN5bmNBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiB7CisgICAgICAgIGNvbnN0cnVjdG9y
KHBhcmFtcywgYm9keSwgZXhwcmVzc2lvbikgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3lu
dGF4XzEuU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uOwogICAgICAgICAgICAgdGhpcy5p
ZCA9IG51bGw7CiAgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKQEAgLTEyMDcsMjUz
ICsxMTc0LDIzNiBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2Vi
cGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjsK
ICAgICAgICAgICAgIHRoaXMuYXN5bmMgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBBc3luY0Fycm93RnVuY3Rpb25FeHByZXNzaW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4
cG9ydHMuQXN5bmNBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiA9IEFzeW5jQXJyb3dGdW5jdGlvbkV4
cHJlc3Npb247Ci0gICAgdmFyIEFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbiA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQXN5bmNGdW5jdGlvbkRlY2xhcmF0
aW9uKGlkLCBwYXJhbXMsIGJvZHkpIHsKKyAgICBjbGFzcyBBc3luY0Z1bmN0aW9uRGVjbGFyYXRp
b24geworICAgICAgICBjb25zdHJ1Y3RvcihpZCwgcGFyYW1zLCBib2R5LCBnZW5lcmF0b3IpIHsK
ICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5GdW5jdGlvbkRlY2xhcmF0
aW9uOwogICAgICAgICAgICAgdGhpcy5pZCA9IGlkOwogICAgICAgICAgICAgdGhpcy5wYXJhbXMg
PSBwYXJhbXM7CiAgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAgICAgICAgdGhp
cy5nZW5lcmF0b3IgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZ2VuZXJh
dG9yOwogICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZmFsc2U7CiAgICAgICAgICAgICB0
aGlzLmFzeW5jID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gQXN5bmNGdW5jdGlv
bkRlY2xhcmF0aW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuQXN5bmNGdW5jdGlv
bkRlY2xhcmF0aW9uID0gQXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uOwotICAgIHZhciBBc3luY0Z1
bmN0aW9uRXhwcmVzc2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ZnVuY3Rpb24gQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgYm9keSkgeworICAg
IGNsYXNzIEFzeW5jRnVuY3Rpb25FeHByZXNzaW9uIHsKKyAgICAgICAgY29uc3RydWN0b3IoaWQs
IHBhcmFtcywgYm9keSwgZ2VuZXJhdG9yKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50
YXhfMS5TeW50YXguRnVuY3Rpb25FeHByZXNzaW9uOwogICAgICAgICAgICAgdGhpcy5pZCA9IGlk
OwogICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7CiAgICAgICAgICAgICB0aGlzLmJv
ZHkgPSBib2R5OwotICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHRoaXMuZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOwogICAgICAgICAgICAgdGhpcy5leHByZXNz
aW9uID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLmFzeW5jID0gdHJ1ZTsKICAgICAgICAgfQot
ICAgICAgICByZXR1cm4gQXN5bmNGdW5jdGlvbkV4cHJlc3Npb247Ci0gICAgfSgpKTsKKyAgICB9
CiAgICAgZXhwb3J0cy5Bc3luY0Z1bmN0aW9uRXhwcmVzc2lvbiA9IEFzeW5jRnVuY3Rpb25FeHBy
ZXNzaW9uOwotICAgIHZhciBBd2FpdEV4cHJlc3Npb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEF3YWl0RXhwcmVzc2lvbihhcmd1bWVudCkgeworICAg
IGNsYXNzIEF3YWl0RXhwcmVzc2lvbiB7CisgICAgICAgIGNvbnN0cnVjdG9yKGFyZ3VtZW50KSB7
CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQXdhaXRFeHByZXNzaW9u
OwogICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBBd2FpdEV4cHJlc3Npb247Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0
cy5Bd2FpdEV4cHJlc3Npb24gPSBBd2FpdEV4cHJlc3Npb247Ci0gICAgdmFyIEJpbmFyeUV4cHJl
c3Npb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEJp
bmFyeUV4cHJlc3Npb24ob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSB7Ci0gICAgICAgICAgICB2YXIg
bG9naWNhbCA9IChvcGVyYXRvciA9PT0gJ3x8JyB8fCBvcGVyYXRvciA9PT0gJyYmJyk7CisgICAg
Y2xhc3MgQmlnSW50TGl0ZXJhbCB7CisgICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlLCBiaWdpbnQs
IHJhdykgeworICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkxpdGVyYWw7
CisgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICB0aGlzLmJpZ2lu
dCA9IGJpZ2ludDsKKyAgICAgICAgICAgIHRoaXMucmF3ID0gcmF3OworICAgICAgICB9CisgICAg
fQorICAgIGV4cG9ydHMuQmlnSW50TGl0ZXJhbCA9IEJpZ0ludExpdGVyYWw7CisgICAgY2xhc3Mg
QmluYXJ5RXhwcmVzc2lvbiB7CisgICAgICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yLCBsZWZ0LCBy
aWdodCkgeworICAgICAgICAgICAgY29uc3QgbG9naWNhbCA9IChvcGVyYXRvciA9PT0gJ3x8JyB8
fCBvcGVyYXRvciA9PT0gJyYmJyk7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBsb2dpY2FsID8g
c3ludGF4XzEuU3ludGF4LkxvZ2ljYWxFeHByZXNzaW9uIDogc3ludGF4XzEuU3ludGF4LkJpbmFy
eUV4cHJlc3Npb247CiAgICAgICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7CiAgICAg
ICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0OwogICAgICAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBCaW5hcnlFeHByZXNzaW9uOwotICAgIH0oKSk7
CisgICAgfQogICAgIGV4cG9ydHMuQmluYXJ5RXhwcmVzc2lvbiA9IEJpbmFyeUV4cHJlc3Npb247
Ci0gICAgdmFyIEJsb2NrU3RhdGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewot
ICAgICAgICBmdW5jdGlvbiBCbG9ja1N0YXRlbWVudChib2R5KSB7CisgICAgY2xhc3MgQmxvY2tT
dGF0ZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3Rvcihib2R5KSB7CiAgICAgICAgICAgICB0aGlz
LnR5cGUgPSBzeW50YXhfMS5TeW50YXguQmxvY2tTdGF0ZW1lbnQ7CiAgICAgICAgICAgICB0aGlz
LmJvZHkgPSBib2R5OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBCbG9ja1N0YXRlbWVudDsK
LSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkJsb2NrU3RhdGVtZW50ID0gQmxvY2tTdGF0
ZW1lbnQ7Ci0gICAgdmFyIEJyZWFrU3RhdGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KCkgewotICAgICAgICBmdW5jdGlvbiBCcmVha1N0YXRlbWVudChsYWJlbCkgeworICAgIGNsYXNz
IEJyZWFrU3RhdGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3IobGFiZWwpIHsKICAgICAgICAg
ICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5CcmVha1N0YXRlbWVudDsKICAgICAgICAg
ICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gQnJlYWtT
dGF0ZW1lbnQ7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5CcmVha1N0YXRlbWVudCA9
IEJyZWFrU3RhdGVtZW50OwotICAgIHZhciBDYWxsRXhwcmVzc2lvbiA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQ2FsbEV4cHJlc3Npb24oY2FsbGVlLCBh
cmdzKSB7CisgICAgY2xhc3MgQ2FsbEV4cHJlc3Npb24geworICAgICAgICBjb25zdHJ1Y3Rvcihj
YWxsZWUsIGFyZ3MpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5D
YWxsRXhwcmVzc2lvbjsKICAgICAgICAgICAgIHRoaXMuY2FsbGVlID0gY2FsbGVlOwogICAgICAg
ICAgICAgdGhpcy5hcmd1bWVudHMgPSBhcmdzOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBD
YWxsRXhwcmVzc2lvbjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkNhbGxFeHByZXNz
aW9uID0gQ2FsbEV4cHJlc3Npb247Ci0gICAgdmFyIENhdGNoQ2xhdXNlID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBDYXRjaENsYXVzZShwYXJhbSwgYm9k
eSkgeworICAgIGNsYXNzIENhdGNoQ2xhdXNlIHsKKyAgICAgICAgY29uc3RydWN0b3IocGFyYW0s
IGJvZHkpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5DYXRjaENs
YXVzZTsKICAgICAgICAgICAgIHRoaXMucGFyYW0gPSBwYXJhbTsKICAgICAgICAgICAgIHRoaXMu
Ym9keSA9IGJvZHk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIENhdGNoQ2xhdXNlOwotICAg
IH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuQ2F0Y2hDbGF1c2UgPSBDYXRjaENsYXVzZTsKLSAg
ICB2YXIgQ2xhc3NCb2R5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBm
dW5jdGlvbiBDbGFzc0JvZHkoYm9keSkgeworICAgIGNsYXNzIENsYXNzQm9keSB7CisgICAgICAg
IGNvbnN0cnVjdG9yKGJvZHkpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5
bnRheC5DbGFzc0JvZHk7CiAgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBDbGFzc0JvZHk7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0
cy5DbGFzc0JvZHkgPSBDbGFzc0JvZHk7Ci0gICAgdmFyIENsYXNzRGVjbGFyYXRpb24gPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIENsYXNzRGVjbGFyYXRp
b24oaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsKKyAgICBjbGFzcyBDbGFzc0RlY2xhcmF0aW9uIHsK
KyAgICAgICAgY29uc3RydWN0b3IoaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsKICAgICAgICAgICAg
IHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5DbGFzc0RlY2xhcmF0aW9uOwogICAgICAgICAg
ICAgdGhpcy5pZCA9IGlkOwogICAgICAgICAgICAgdGhpcy5zdXBlckNsYXNzID0gc3VwZXJDbGFz
czsKICAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIENsYXNzRGVjbGFyYXRpb247Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5DbGFz
c0RlY2xhcmF0aW9uID0gQ2xhc3NEZWNsYXJhdGlvbjsKLSAgICB2YXIgQ2xhc3NFeHByZXNzaW9u
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBDbGFzc0V4
cHJlc3Npb24oaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsKKyAgICBjbGFzcyBDbGFzc0V4cHJlc3Np
b24geworICAgICAgICBjb25zdHJ1Y3RvcihpZCwgc3VwZXJDbGFzcywgYm9keSkgewogICAgICAg
ICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkNsYXNzRXhwcmVzc2lvbjsKICAgICAg
ICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgICAgIHRoaXMuc3VwZXJDbGFzcyA9IHN1cGVy
Q2xhc3M7CiAgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBDbGFzc0V4cHJlc3Npb247Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5D
bGFzc0V4cHJlc3Npb24gPSBDbGFzc0V4cHJlc3Npb247Ci0gICAgdmFyIENvbXB1dGVkTWVtYmVy
RXhwcmVzc2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rp
b24gQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uKG9iamVjdCwgcHJvcGVydHkpIHsKKyAgICBjbGFz
cyBDb21wdXRlZE1lbWJlckV4cHJlc3Npb24geworICAgICAgICBjb25zdHJ1Y3RvcihvYmplY3Qs
IHByb3BlcnR5KSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguTWVt
YmVyRXhwcmVzc2lvbjsKICAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQgPSB0cnVlOwogICAgICAg
ICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7CiAgICAgICAgICAgICB0aGlzLnByb3BlcnR5ID0g
cHJvcGVydHk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIENvbXB1dGVkTWVtYmVyRXhwcmVz
c2lvbjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkNvbXB1dGVkTWVtYmVyRXhwcmVz
c2lvbiA9IENvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbjsKLSAgICB2YXIgQ29uZGl0aW9uYWxFeHBy
ZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBD
b25kaXRpb25hbEV4cHJlc3Npb24odGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7CisgICAg
Y2xhc3MgQ29uZGl0aW9uYWxFeHByZXNzaW9uIHsKKyAgICAgICAgY29uc3RydWN0b3IodGVzdCwg
Y29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhf
MS5TeW50YXguQ29uZGl0aW9uYWxFeHByZXNzaW9uOwogICAgICAgICAgICAgdGhpcy50ZXN0ID0g
dGVzdDsKICAgICAgICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7CiAgICAgICAg
ICAgICB0aGlzLmFsdGVybmF0ZSA9IGFsdGVybmF0ZTsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gQ29uZGl0aW9uYWxFeHByZXNzaW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMu
Q29uZGl0aW9uYWxFeHByZXNzaW9uID0gQ29uZGl0aW9uYWxFeHByZXNzaW9uOwotICAgIHZhciBD
b250aW51ZVN0YXRlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ZnVuY3Rpb24gQ29udGludWVTdGF0ZW1lbnQobGFiZWwpIHsKKyAgICBjbGFzcyBDb250aW51ZVN0
YXRlbWVudCB7CisgICAgICAgIGNvbnN0cnVjdG9yKGxhYmVsKSB7CiAgICAgICAgICAgICB0aGlz
LnR5cGUgPSBzeW50YXhfMS5TeW50YXguQ29udGludWVTdGF0ZW1lbnQ7CiAgICAgICAgICAgICB0
aGlzLmxhYmVsID0gbGFiZWw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIENvbnRpbnVlU3Rh
dGVtZW50OwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuQ29udGludWVTdGF0ZW1lbnQg
PSBDb250aW51ZVN0YXRlbWVudDsKLSAgICB2YXIgRGVidWdnZXJTdGF0ZW1lbnQgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIERlYnVnZ2VyU3RhdGVtZW50
KCkgeworICAgIGNsYXNzIERlYnVnZ2VyU3RhdGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3Io
KSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRGVidWdnZXJTdGF0
ZW1lbnQ7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIERlYnVnZ2VyU3RhdGVtZW50OwotICAg
IH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuRGVidWdnZXJTdGF0ZW1lbnQgPSBEZWJ1Z2dlclN0
YXRlbWVudDsKLSAgICB2YXIgRGlyZWN0aXZlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
ewotICAgICAgICBmdW5jdGlvbiBEaXJlY3RpdmUoZXhwcmVzc2lvbiwgZGlyZWN0aXZlKSB7Cisg
ICAgY2xhc3MgRGlyZWN0aXZlIHsKKyAgICAgICAgY29uc3RydWN0b3IoZXhwcmVzc2lvbiwgZGly
ZWN0aXZlKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRXhwcmVz
c2lvblN0YXRlbWVudDsKICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247
CiAgICAgICAgICAgICB0aGlzLmRpcmVjdGl2ZSA9IGRpcmVjdGl2ZTsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gRGlyZWN0aXZlOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuRGly
ZWN0aXZlID0gRGlyZWN0aXZlOwotICAgIHZhciBEb1doaWxlU3RhdGVtZW50ID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBEb1doaWxlU3RhdGVtZW50KGJv
ZHksIHRlc3QpIHsKKyAgICBjbGFzcyBEb1doaWxlU3RhdGVtZW50IHsKKyAgICAgICAgY29uc3Ry
dWN0b3IoYm9keSwgdGVzdCkgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3lu
dGF4LkRvV2hpbGVTdGF0ZW1lbnQ7CiAgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwogICAg
ICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gRG9X
aGlsZVN0YXRlbWVudDsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkRvV2hpbGVTdGF0
ZW1lbnQgPSBEb1doaWxlU3RhdGVtZW50OwotICAgIHZhciBFbXB0eVN0YXRlbWVudCA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gRW1wdHlTdGF0ZW1lbnQo
KSB7CisgICAgY2xhc3MgRW1wdHlTdGF0ZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3RvcigpIHsK
ICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5FbXB0eVN0YXRlbWVudDsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gRW1wdHlTdGF0ZW1lbnQ7Ci0gICAgfSgpKTsKKyAg
ICB9CiAgICAgZXhwb3J0cy5FbXB0eVN0YXRlbWVudCA9IEVtcHR5U3RhdGVtZW50OwotICAgIHZh
ciBFeHBvcnRBbGxEZWNsYXJhdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgZnVuY3Rpb24gRXhwb3J0QWxsRGVjbGFyYXRpb24oc291cmNlKSB7CisgICAgY2xhc3Mg
RXhwb3J0QWxsRGVjbGFyYXRpb24geworICAgICAgICBjb25zdHJ1Y3Rvcihzb3VyY2UpIHsKICAg
ICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5FeHBvcnRBbGxEZWNsYXJhdGlv
bjsKICAgICAgICAgICAgIHRoaXMuc291cmNlID0gc291cmNlOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBFeHBvcnRBbGxEZWNsYXJhdGlvbjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBv
cnRzLkV4cG9ydEFsbERlY2xhcmF0aW9uID0gRXhwb3J0QWxsRGVjbGFyYXRpb247Ci0gICAgdmFy
IEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgZnVuY3Rpb24gRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSB7
CisgICAgY2xhc3MgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uIHsKKyAgICAgICAgY29uc3RydWN0
b3IoZGVjbGFyYXRpb24pIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRh
eC5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb247CiAgICAgICAgICAgICB0aGlzLmRlY2xhcmF0aW9u
ID0gZGVjbGFyYXRpb247CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEV4cG9ydERlZmF1bHRE
ZWNsYXJhdGlvbjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkV4cG9ydERlZmF1bHRE
ZWNsYXJhdGlvbiA9IEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjsKLSAgICB2YXIgRXhwb3J0TmFt
ZWREZWNsYXJhdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVu
Y3Rpb24gRXhwb3J0TmFtZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgc291
cmNlKSB7CisgICAgY2xhc3MgRXhwb3J0TmFtZWREZWNsYXJhdGlvbiB7CisgICAgICAgIGNvbnN0
cnVjdG9yKGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzLCBzb3VyY2UpIHsKICAgICAgICAgICAgIHRo
aXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5FeHBvcnROYW1lZERlY2xhcmF0aW9uOwogICAgICAg
ICAgICAgdGhpcy5kZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uOwogICAgICAgICAgICAgdGhpcy5z
cGVjaWZpZXJzID0gc3BlY2lmaWVyczsKICAgICAgICAgICAgIHRoaXMuc291cmNlID0gc291cmNl
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBFeHBvcnROYW1lZERlY2xhcmF0aW9uOwotICAg
IH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuRXhwb3J0TmFtZWREZWNsYXJhdGlvbiA9IEV4cG9y
dE5hbWVkRGVjbGFyYXRpb247Ci0gICAgdmFyIEV4cG9ydFNwZWNpZmllciA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gRXhwb3J0U3BlY2lmaWVyKGxvY2Fs
LCBleHBvcnRlZCkgeworICAgIGNsYXNzIEV4cG9ydFNwZWNpZmllciB7CisgICAgICAgIGNvbnN0
cnVjdG9yKGxvY2FsLCBleHBvcnRlZCkgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4
XzEuU3ludGF4LkV4cG9ydFNwZWNpZmllcjsKICAgICAgICAgICAgIHRoaXMuZXhwb3J0ZWQgPSBl
eHBvcnRlZDsKICAgICAgICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbDsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gRXhwb3J0U3BlY2lmaWVyOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9y
dHMuRXhwb3J0U3BlY2lmaWVyID0gRXhwb3J0U3BlY2lmaWVyOwotICAgIHZhciBFeHByZXNzaW9u
U3RhdGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlv
biBFeHByZXNzaW9uU3RhdGVtZW50KGV4cHJlc3Npb24pIHsKKyAgICBjbGFzcyBFeHByZXNzaW9u
U3RhdGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3IoZXhwcmVzc2lvbikgewogICAgICAgICAg
ICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkV4cHJlc3Npb25TdGF0ZW1lbnQ7CiAgICAg
ICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBFeHByZXNzaW9uU3RhdGVtZW50OwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9y
dHMuRXhwcmVzc2lvblN0YXRlbWVudCA9IEV4cHJlc3Npb25TdGF0ZW1lbnQ7Ci0gICAgdmFyIEZv
ckluU3RhdGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5j
dGlvbiBGb3JJblN0YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSkgeworICAgIGNsYXNzIEZvcklu
U3RhdGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3IobGVmdCwgcmlnaHQsIGJvZHkpIHsKICAg
ICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Gb3JJblN0YXRlbWVudDsKICAg
ICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7CiAgICAgICAgICAgICB0aGlzLnJpZ2h0ID0gcmln
aHQ7CiAgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwogICAgICAgICAgICAgdGhpcy5lYWNo
ID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEZvckluU3RhdGVtZW50OwotICAg
IH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuRm9ySW5TdGF0ZW1lbnQgPSBGb3JJblN0YXRlbWVu
dDsKLSAgICB2YXIgRm9yT2ZTdGF0ZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
Ci0gICAgICAgIGZ1bmN0aW9uIEZvck9mU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KSB7Cisg
ICAgY2xhc3MgRm9yT2ZTdGF0ZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3RvcihsZWZ0LCByaWdo
dCwgYm9keSwgaXNBd2FpdCkgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3lu
dGF4LkZvck9mU3RhdGVtZW50OwogICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsKICAgICAg
ICAgICAgIHRoaXMucmlnaHQgPSByaWdodDsKICAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7
CisgICAgICAgICAgICB0aGlzLmF3YWl0ID0gaXNBd2FpdDsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gRm9yT2ZTdGF0ZW1lbnQ7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5Gb3JP
ZlN0YXRlbWVudCA9IEZvck9mU3RhdGVtZW50OwotICAgIHZhciBGb3JTdGF0ZW1lbnQgPSAvKiog
QGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEZvclN0YXRlbWVudChp
bml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpIHsKKyAgICBjbGFzcyBGb3JTdGF0ZW1lbnQgeworICAg
ICAgICBjb25zdHJ1Y3Rvcihpbml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpIHsKICAgICAgICAgICAg
IHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Gb3JTdGF0ZW1lbnQ7CiAgICAgICAgICAgICB0
aGlzLmluaXQgPSBpbml0OwogICAgICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKICAgICAgICAg
ICAgIHRoaXMudXBkYXRlID0gdXBkYXRlOwogICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gRm9yU3RhdGVtZW50OwotICAgIH0oKSk7CisgICAg
fQogICAgIGV4cG9ydHMuRm9yU3RhdGVtZW50ID0gRm9yU3RhdGVtZW50OwotICAgIHZhciBGdW5j
dGlvbkRlY2xhcmF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBm
dW5jdGlvbiBGdW5jdGlvbkRlY2xhcmF0aW9uKGlkLCBwYXJhbXMsIGJvZHksIGdlbmVyYXRvcikg
eworICAgIGNsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb24geworICAgICAgICBjb25zdHJ1Y3Rvcihp
ZCwgcGFyYW1zLCBib2R5LCBnZW5lcmF0b3IpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5
bnRheF8xLlN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uOwogICAgICAgICAgICAgdGhpcy5pZCA9
IGlkOwogICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7CkBAIC0xNDYyLDExICsxNDEy
LDEwIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9v
dHN0cmFwCiAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBmYWxzZTsKICAgICAgICAgICAg
IHRoaXMuYXN5bmMgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gRnVuY3Rpb25E
ZWNsYXJhdGlvbjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkZ1bmN0aW9uRGVjbGFy
YXRpb24gPSBGdW5jdGlvbkRlY2xhcmF0aW9uOwotICAgIHZhciBGdW5jdGlvbkV4cHJlc3Npb24g
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEZ1bmN0aW9u
RXhwcmVzc2lvbihpZCwgcGFyYW1zLCBib2R5LCBnZW5lcmF0b3IpIHsKKyAgICBjbGFzcyBGdW5j
dGlvbkV4cHJlc3Npb24geworICAgICAgICBjb25zdHJ1Y3RvcihpZCwgcGFyYW1zLCBib2R5LCBn
ZW5lcmF0b3IpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5GdW5j
dGlvbkV4cHJlc3Npb247CiAgICAgICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgICAgICB0
aGlzLnBhcmFtcyA9IHBhcmFtczsKQEAgLTE0NzUsOTcgKzE0MjQsODYgQEAgcmV0dXJuIC8qKioq
KiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAg
IHRoaXMuZXhwcmVzc2lvbiA9IGZhbHNlOwogICAgICAgICAgICAgdGhpcy5hc3luYyA9IGZhbHNl
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBGdW5jdGlvbkV4cHJlc3Npb247Ci0gICAgfSgp
KTsKKyAgICB9CiAgICAgZXhwb3J0cy5GdW5jdGlvbkV4cHJlc3Npb24gPSBGdW5jdGlvbkV4cHJl
c3Npb247Ci0gICAgdmFyIElkZW50aWZpZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
Ci0gICAgICAgIGZ1bmN0aW9uIElkZW50aWZpZXIobmFtZSkgeworICAgIGNsYXNzIElkZW50aWZp
ZXIgeworICAgICAgICBjb25zdHJ1Y3RvcihuYW1lKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUg
PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcjsKICAgICAgICAgICAgIHRoaXMubmFtZSA9IG5h
bWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIElkZW50aWZpZXI7Ci0gICAgfSgpKTsKKyAg
ICB9CiAgICAgZXhwb3J0cy5JZGVudGlmaWVyID0gSWRlbnRpZmllcjsKLSAgICB2YXIgSWZTdGF0
ZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIElm
U3RhdGVtZW50KHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkgeworICAgIGNsYXNzIElmU3Rh
dGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3IodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRl
KSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguSWZTdGF0ZW1lbnQ7
CiAgICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OwogICAgICAgICAgICAgdGhpcy5jb25zZXF1
ZW50ID0gY29uc2VxdWVudDsKICAgICAgICAgICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRl
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJZlN0YXRlbWVudDsKLSAgICB9KCkpOworICAg
IH0KICAgICBleHBvcnRzLklmU3RhdGVtZW50ID0gSWZTdGF0ZW1lbnQ7Ci0gICAgdmFyIEltcG9y
dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSW1wb3J0
KCkgeworICAgIGNsYXNzIEltcG9ydCB7CisgICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAg
ICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkltcG9ydDsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gSW1wb3J0OwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuSW1wb3J0
ID0gSW1wb3J0OwotICAgIHZhciBJbXBvcnREZWNsYXJhdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSW1wb3J0RGVjbGFyYXRpb24oc3BlY2lmaWVy
cywgc291cmNlKSB7CisgICAgY2xhc3MgSW1wb3J0RGVjbGFyYXRpb24geworICAgICAgICBjb25z
dHJ1Y3RvcihzcGVjaWZpZXJzLCBzb3VyY2UpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5
bnRheF8xLlN5bnRheC5JbXBvcnREZWNsYXJhdGlvbjsKICAgICAgICAgICAgIHRoaXMuc3BlY2lm
aWVycyA9IHNwZWNpZmllcnM7CiAgICAgICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTsKICAg
ICAgICAgfQotICAgICAgICByZXR1cm4gSW1wb3J0RGVjbGFyYXRpb247Ci0gICAgfSgpKTsKKyAg
ICB9CiAgICAgZXhwb3J0cy5JbXBvcnREZWNsYXJhdGlvbiA9IEltcG9ydERlY2xhcmF0aW9uOwot
ICAgIHZhciBJbXBvcnREZWZhdWx0U3BlY2lmaWVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24g
KCkgewotICAgICAgICBmdW5jdGlvbiBJbXBvcnREZWZhdWx0U3BlY2lmaWVyKGxvY2FsKSB7Cisg
ICAgY2xhc3MgSW1wb3J0RGVmYXVsdFNwZWNpZmllciB7CisgICAgICAgIGNvbnN0cnVjdG9yKGxv
Y2FsKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguSW1wb3J0RGVm
YXVsdFNwZWNpZmllcjsKICAgICAgICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbDsKICAgICAgICAg
fQotICAgICAgICByZXR1cm4gSW1wb3J0RGVmYXVsdFNwZWNpZmllcjsKLSAgICB9KCkpOworICAg
IH0KICAgICBleHBvcnRzLkltcG9ydERlZmF1bHRTcGVjaWZpZXIgPSBJbXBvcnREZWZhdWx0U3Bl
Y2lmaWVyOwotICAgIHZhciBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgPSAvKiogQGNsYXNzICov
IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEltcG9ydE5hbWVzcGFjZVNwZWNpZmll
cihsb2NhbCkgeworICAgIGNsYXNzIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllciB7CisgICAgICAg
IGNvbnN0cnVjdG9yKGxvY2FsKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5T
eW50YXguSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOwogICAgICAgICAgICAgdGhpcy5sb2NhbCA9
IGxvY2FsOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbXBvcnROYW1lc3BhY2VTcGVjaWZp
ZXI7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5JbXBvcnROYW1lc3BhY2VTcGVjaWZp
ZXIgPSBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI7Ci0gICAgdmFyIEltcG9ydFNwZWNpZmllciA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSW1wb3J0U3Bl
Y2lmaWVyKGxvY2FsLCBpbXBvcnRlZCkgeworICAgIGNsYXNzIEltcG9ydFNwZWNpZmllciB7Cisg
ICAgICAgIGNvbnN0cnVjdG9yKGxvY2FsLCBpbXBvcnRlZCkgewogICAgICAgICAgICAgdGhpcy50
eXBlID0gc3ludGF4XzEuU3ludGF4LkltcG9ydFNwZWNpZmllcjsKICAgICAgICAgICAgIHRoaXMu
bG9jYWwgPSBsb2NhbDsKICAgICAgICAgICAgIHRoaXMuaW1wb3J0ZWQgPSBpbXBvcnRlZDsKICAg
ICAgICAgfQotICAgICAgICByZXR1cm4gSW1wb3J0U3BlY2lmaWVyOwotICAgIH0oKSk7CisgICAg
fQogICAgIGV4cG9ydHMuSW1wb3J0U3BlY2lmaWVyID0gSW1wb3J0U3BlY2lmaWVyOwotICAgIHZh
ciBMYWJlbGVkU3RhdGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAg
ICBmdW5jdGlvbiBMYWJlbGVkU3RhdGVtZW50KGxhYmVsLCBib2R5KSB7CisgICAgY2xhc3MgTGFi
ZWxlZFN0YXRlbWVudCB7CisgICAgICAgIGNvbnN0cnVjdG9yKGxhYmVsLCBib2R5KSB7CiAgICAg
ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguTGFiZWxlZFN0YXRlbWVudDsKICAg
ICAgICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKICAgICAgICAgICAgIHRoaXMuYm9keSA9IGJv
ZHk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIExhYmVsZWRTdGF0ZW1lbnQ7Ci0gICAgfSgp
KTsKKyAgICB9CiAgICAgZXhwb3J0cy5MYWJlbGVkU3RhdGVtZW50ID0gTGFiZWxlZFN0YXRlbWVu
dDsKLSAgICB2YXIgTGl0ZXJhbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgZnVuY3Rpb24gTGl0ZXJhbCh2YWx1ZSwgcmF3KSB7CisgICAgY2xhc3MgTGl0ZXJhbCB7Cisg
ICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlLCByYXcpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9
IHN5bnRheF8xLlN5bnRheC5MaXRlcmFsOwogICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVl
OwogICAgICAgICAgICAgdGhpcy5yYXcgPSByYXc7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IExpdGVyYWw7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5MaXRlcmFsID0gTGl0ZXJh
bDsKLSAgICB2YXIgTWV0YVByb3BlcnR5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewot
ICAgICAgICBmdW5jdGlvbiBNZXRhUHJvcGVydHkobWV0YSwgcHJvcGVydHkpIHsKKyAgICBjbGFz
cyBNZXRhUHJvcGVydHkgeworICAgICAgICBjb25zdHJ1Y3RvcihtZXRhLCBwcm9wZXJ0eSkgewog
ICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4Lk1ldGFQcm9wZXJ0eTsKICAg
ICAgICAgICAgIHRoaXMubWV0YSA9IG1ldGE7CiAgICAgICAgICAgICB0aGlzLnByb3BlcnR5ID0g
cHJvcGVydHk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE1ldGFQcm9wZXJ0eTsKLSAgICB9
KCkpOworICAgIH0KICAgICBleHBvcnRzLk1ldGFQcm9wZXJ0eSA9IE1ldGFQcm9wZXJ0eTsKLSAg
ICB2YXIgTWV0aG9kRGVmaW5pdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgZnVuY3Rpb24gTWV0aG9kRGVmaW5pdGlvbihrZXksIGNvbXB1dGVkLCB2YWx1ZSwga2lu
ZCwgaXNTdGF0aWMpIHsKKyAgICBjbGFzcyBNZXRob2REZWZpbml0aW9uIHsKKyAgICAgICAgY29u
c3RydWN0b3Ioa2V5LCBjb21wdXRlZCwgdmFsdWUsIGtpbmQsIGlzU3RhdGljKSB7CiAgICAgICAg
ICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguTWV0aG9kRGVmaW5pdGlvbjsKICAgICAg
ICAgICAgIHRoaXMua2V5ID0ga2V5OwogICAgICAgICAgICAgdGhpcy5jb21wdXRlZCA9IGNvbXB1
dGVkOwpAQCAtMTU3Myw0NSArMTUxMSw0MCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1v
ZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgdGhpcy5raW5kID0ga2lu
ZDsKICAgICAgICAgICAgIHRoaXMuc3RhdGljID0gaXNTdGF0aWM7CiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIE1ldGhvZERlZmluaXRpb247Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0
cy5NZXRob2REZWZpbml0aW9uID0gTWV0aG9kRGVmaW5pdGlvbjsKLSAgICB2YXIgTW9kdWxlID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBNb2R1bGUoYm9k
eSkgeworICAgIGNsYXNzIE1vZHVsZSB7CisgICAgICAgIGNvbnN0cnVjdG9yKGJvZHkpIHsKICAg
ICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Qcm9ncmFtOwogICAgICAgICAg
ICAgdGhpcy5ib2R5ID0gYm9keTsKICAgICAgICAgICAgIHRoaXMuc291cmNlVHlwZSA9ICdtb2R1
bGUnOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBNb2R1bGU7Ci0gICAgfSgpKTsKKyAgICB9
CiAgICAgZXhwb3J0cy5Nb2R1bGUgPSBNb2R1bGU7Ci0gICAgdmFyIE5ld0V4cHJlc3Npb24gPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIE5ld0V4cHJlc3Np
b24oY2FsbGVlLCBhcmdzKSB7CisgICAgY2xhc3MgTmV3RXhwcmVzc2lvbiB7CisgICAgICAgIGNv
bnN0cnVjdG9yKGNhbGxlZSwgYXJncykgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4
XzEuU3ludGF4Lk5ld0V4cHJlc3Npb247CiAgICAgICAgICAgICB0aGlzLmNhbGxlZSA9IGNhbGxl
ZTsKICAgICAgICAgICAgIHRoaXMuYXJndW1lbnRzID0gYXJnczsKICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gTmV3RXhwcmVzc2lvbjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLk5l
d0V4cHJlc3Npb24gPSBOZXdFeHByZXNzaW9uOwotICAgIHZhciBPYmplY3RFeHByZXNzaW9uID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBPYmplY3RFeHBy
ZXNzaW9uKHByb3BlcnRpZXMpIHsKKyAgICBjbGFzcyBPYmplY3RFeHByZXNzaW9uIHsKKyAgICAg
ICAgY29uc3RydWN0b3IocHJvcGVydGllcykgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3lu
dGF4XzEuU3ludGF4Lk9iamVjdEV4cHJlc3Npb247CiAgICAgICAgICAgICB0aGlzLnByb3BlcnRp
ZXMgPSBwcm9wZXJ0aWVzOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBPYmplY3RFeHByZXNz
aW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuT2JqZWN0RXhwcmVzc2lvbiA9IE9i
amVjdEV4cHJlc3Npb247Ci0gICAgdmFyIE9iamVjdFBhdHRlcm4gPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIE9iamVjdFBhdHRlcm4ocHJvcGVydGllcykg
eworICAgIGNsYXNzIE9iamVjdFBhdHRlcm4geworICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0
aWVzKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguT2JqZWN0UGF0
dGVybjsKICAgICAgICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIE9iamVjdFBhdHRlcm47Ci0gICAgfSgpKTsKKyAgICB9CiAgICAg
ZXhwb3J0cy5PYmplY3RQYXR0ZXJuID0gT2JqZWN0UGF0dGVybjsKLSAgICB2YXIgUHJvcGVydHkg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFByb3BlcnR5
KGtpbmQsIGtleSwgY29tcHV0ZWQsIHZhbHVlLCBtZXRob2QsIHNob3J0aGFuZCkgeworICAgIGNs
YXNzIFByb3BlcnR5IHsKKyAgICAgICAgY29uc3RydWN0b3Ioa2luZCwga2V5LCBjb21wdXRlZCwg
dmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50
YXhfMS5TeW50YXguUHJvcGVydHk7CiAgICAgICAgICAgICB0aGlzLmtleSA9IGtleTsKICAgICAg
ICAgICAgIHRoaXMuY29tcHV0ZWQgPSBjb21wdXRlZDsKQEAgLTE2MjAsMjExICsxNTUzLDE4NyBA
QCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJh
cAogICAgICAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7CiAgICAgICAgICAgICB0aGlzLnNo
b3J0aGFuZCA9IHNob3J0aGFuZDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gUHJvcGVydHk7
Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5Qcm9wZXJ0eSA9IFByb3BlcnR5OwotICAg
IHZhciBSZWdleExpdGVyYWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAg
IGZ1bmN0aW9uIFJlZ2V4TGl0ZXJhbCh2YWx1ZSwgcmF3LCBwYXR0ZXJuLCBmbGFncykgeworICAg
IGNsYXNzIFJlZ2V4TGl0ZXJhbCB7CisgICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlLCByYXcsIHBh
dHRlcm4sIGZsYWdzKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXgu
TGl0ZXJhbDsKICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgIHRo
aXMucmF3ID0gcmF3OwotICAgICAgICAgICAgdGhpcy5yZWdleCA9IHsgcGF0dGVybjogcGF0dGVy
biwgZmxhZ3M6IGZsYWdzIH07CisgICAgICAgICAgICB0aGlzLnJlZ2V4ID0geyBwYXR0ZXJuLCBm
bGFncyB9OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBSZWdleExpdGVyYWw7Ci0gICAgfSgp
KTsKKyAgICB9CiAgICAgZXhwb3J0cy5SZWdleExpdGVyYWwgPSBSZWdleExpdGVyYWw7Ci0gICAg
dmFyIFJlc3RFbGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBm
dW5jdGlvbiBSZXN0RWxlbWVudChhcmd1bWVudCkgeworICAgIGNsYXNzIFJlc3RFbGVtZW50IHsK
KyAgICAgICAgY29uc3RydWN0b3IoYXJndW1lbnQpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9
IHN5bnRheF8xLlN5bnRheC5SZXN0RWxlbWVudDsKICAgICAgICAgICAgIHRoaXMuYXJndW1lbnQg
PSBhcmd1bWVudDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gUmVzdEVsZW1lbnQ7Ci0gICAg
fSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5SZXN0RWxlbWVudCA9IFJlc3RFbGVtZW50OwotICAg
IHZhciBSZXR1cm5TdGF0ZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgIGZ1bmN0aW9uIFJldHVyblN0YXRlbWVudChhcmd1bWVudCkgeworICAgIGNsYXNzIFJldHVy
blN0YXRlbWVudCB7CisgICAgICAgIGNvbnN0cnVjdG9yKGFyZ3VtZW50KSB7CiAgICAgICAgICAg
ICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguUmV0dXJuU3RhdGVtZW50OwogICAgICAgICAg
ICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBS
ZXR1cm5TdGF0ZW1lbnQ7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5SZXR1cm5TdGF0
ZW1lbnQgPSBSZXR1cm5TdGF0ZW1lbnQ7Ci0gICAgdmFyIFNjcmlwdCA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gU2NyaXB0KGJvZHkpIHsKKyAgICBjbGFz
cyBTY3JpcHQgeworICAgICAgICBjb25zdHJ1Y3Rvcihib2R5KSB7CiAgICAgICAgICAgICB0aGlz
LnR5cGUgPSBzeW50YXhfMS5TeW50YXguUHJvZ3JhbTsKICAgICAgICAgICAgIHRoaXMuYm9keSA9
IGJvZHk7CiAgICAgICAgICAgICB0aGlzLnNvdXJjZVR5cGUgPSAnc2NyaXB0JzsKICAgICAgICAg
fQotICAgICAgICByZXR1cm4gU2NyaXB0OwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMu
U2NyaXB0ID0gU2NyaXB0OwotICAgIHZhciBTZXF1ZW5jZUV4cHJlc3Npb24gPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFNlcXVlbmNlRXhwcmVzc2lvbihl
eHByZXNzaW9ucykgeworICAgIGNsYXNzIFNlcXVlbmNlRXhwcmVzc2lvbiB7CisgICAgICAgIGNv
bnN0cnVjdG9yKGV4cHJlc3Npb25zKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhf
MS5TeW50YXguU2VxdWVuY2VFeHByZXNzaW9uOwogICAgICAgICAgICAgdGhpcy5leHByZXNzaW9u
cyA9IGV4cHJlc3Npb25zOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTZXF1ZW5jZUV4cHJl
c3Npb247Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5TZXF1ZW5jZUV4cHJlc3Npb24g
PSBTZXF1ZW5jZUV4cHJlc3Npb247Ci0gICAgdmFyIFNwcmVhZEVsZW1lbnQgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFNwcmVhZEVsZW1lbnQoYXJndW1l
bnQpIHsKKyAgICBjbGFzcyBTcHJlYWRFbGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3IoYXJn
dW1lbnQpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5TcHJlYWRF
bGVtZW50OwogICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OwogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBTcHJlYWRFbGVtZW50OwotICAgIH0oKSk7CisgICAgfQogICAgIGV4
cG9ydHMuU3ByZWFkRWxlbWVudCA9IFNwcmVhZEVsZW1lbnQ7Ci0gICAgdmFyIFN0YXRpY01lbWJl
ckV4cHJlc3Npb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0
aW9uIFN0YXRpY01lbWJlckV4cHJlc3Npb24ob2JqZWN0LCBwcm9wZXJ0eSkgeworICAgIGNsYXNz
IFN0YXRpY01lbWJlckV4cHJlc3Npb24geworICAgICAgICBjb25zdHJ1Y3RvcihvYmplY3QsIHBy
b3BlcnR5KSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguTWVtYmVy
RXhwcmVzc2lvbjsKICAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQgPSBmYWxzZTsKICAgICAgICAg
ICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0OwogICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHBy
b3BlcnR5OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdGF0aWNNZW1iZXJFeHByZXNzaW9u
OwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuU3RhdGljTWVtYmVyRXhwcmVzc2lvbiA9
IFN0YXRpY01lbWJlckV4cHJlc3Npb247Ci0gICAgdmFyIFN1cGVyID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBTdXBlcigpIHsKKyAgICBjbGFzcyBTdXBl
ciB7CisgICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3lu
dGF4XzEuU3ludGF4LlN1cGVyOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdXBlcjsKLSAg
ICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLlN1cGVyID0gU3VwZXI7Ci0gICAgdmFyIFN3aXRj
aENhc2UgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFN3
aXRjaENhc2UodGVzdCwgY29uc2VxdWVudCkgeworICAgIGNsYXNzIFN3aXRjaENhc2UgeworICAg
ICAgICBjb25zdHJ1Y3Rvcih0ZXN0LCBjb25zZXF1ZW50KSB7CiAgICAgICAgICAgICB0aGlzLnR5
cGUgPSBzeW50YXhfMS5TeW50YXguU3dpdGNoQ2FzZTsKICAgICAgICAgICAgIHRoaXMudGVzdCA9
IHRlc3Q7CiAgICAgICAgICAgICB0aGlzLmNvbnNlcXVlbnQgPSBjb25zZXF1ZW50OwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBTd2l0Y2hDYXNlOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4
cG9ydHMuU3dpdGNoQ2FzZSA9IFN3aXRjaENhc2U7Ci0gICAgdmFyIFN3aXRjaFN0YXRlbWVudCA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gU3dpdGNoU3Rh
dGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpIHsKKyAgICBjbGFzcyBTd2l0Y2hTdGF0ZW1lbnQg
eworICAgICAgICBjb25zdHJ1Y3RvcihkaXNjcmltaW5hbnQsIGNhc2VzKSB7CiAgICAgICAgICAg
ICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguU3dpdGNoU3RhdGVtZW50OwogICAgICAgICAg
ICAgdGhpcy5kaXNjcmltaW5hbnQgPSBkaXNjcmltaW5hbnQ7CiAgICAgICAgICAgICB0aGlzLmNh
c2VzID0gY2FzZXM7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN3aXRjaFN0YXRlbWVudDsK
LSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLlN3aXRjaFN0YXRlbWVudCA9IFN3aXRjaFN0
YXRlbWVudDsKLSAgICB2YXIgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Np
b24odGFnLCBxdWFzaSkgeworICAgIGNsYXNzIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiB7Cisg
ICAgICAgIGNvbnN0cnVjdG9yKHRhZywgcXVhc2kpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9
IHN5bnRheF8xLlN5bnRheC5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb247CiAgICAgICAgICAgICB0
aGlzLnRhZyA9IHRhZzsKICAgICAgICAgICAgIHRoaXMucXVhc2kgPSBxdWFzaTsKICAgICAgICAg
fQotICAgICAgICByZXR1cm4gVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOwotICAgIH0oKSk7Cisg
ICAgfQogICAgIGV4cG9ydHMuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uID0gVGFnZ2VkVGVtcGxh
dGVFeHByZXNzaW9uOwotICAgIHZhciBUZW1wbGF0ZUVsZW1lbnQgPSAvKiogQGNsYXNzICovIChm
dW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFRlbXBsYXRlRWxlbWVudCh2YWx1ZSwgdGFp
bCkgeworICAgIGNsYXNzIFRlbXBsYXRlRWxlbWVudCB7CisgICAgICAgIGNvbnN0cnVjdG9yKHZh
bHVlLCB0YWlsKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguVGVt
cGxhdGVFbGVtZW50OwogICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogICAgICAgICAg
ICAgdGhpcy50YWlsID0gdGFpbDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gVGVtcGxhdGVF
bGVtZW50OwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuVGVtcGxhdGVFbGVtZW50ID0g
VGVtcGxhdGVFbGVtZW50OwotICAgIHZhciBUZW1wbGF0ZUxpdGVyYWwgPSAvKiogQGNsYXNzICov
IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFRlbXBsYXRlTGl0ZXJhbChxdWFzaXMs
IGV4cHJlc3Npb25zKSB7CisgICAgY2xhc3MgVGVtcGxhdGVMaXRlcmFsIHsKKyAgICAgICAgY29u
c3RydWN0b3IocXVhc2lzLCBleHByZXNzaW9ucykgewogICAgICAgICAgICAgdGhpcy50eXBlID0g
c3ludGF4XzEuU3ludGF4LlRlbXBsYXRlTGl0ZXJhbDsKICAgICAgICAgICAgIHRoaXMucXVhc2lz
ID0gcXVhc2lzOwogICAgICAgICAgICAgdGhpcy5leHByZXNzaW9ucyA9IGV4cHJlc3Npb25zOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBUZW1wbGF0ZUxpdGVyYWw7Ci0gICAgfSgpKTsKKyAg
ICB9CiAgICAgZXhwb3J0cy5UZW1wbGF0ZUxpdGVyYWwgPSBUZW1wbGF0ZUxpdGVyYWw7Ci0gICAg
dmFyIFRoaXNFeHByZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAg
ICBmdW5jdGlvbiBUaGlzRXhwcmVzc2lvbigpIHsKKyAgICBjbGFzcyBUaGlzRXhwcmVzc2lvbiB7
CisgICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4
XzEuU3ludGF4LlRoaXNFeHByZXNzaW9uOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBUaGlz
RXhwcmVzc2lvbjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLlRoaXNFeHByZXNzaW9u
ID0gVGhpc0V4cHJlc3Npb247Ci0gICAgdmFyIFRocm93U3RhdGVtZW50ID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBUaHJvd1N0YXRlbWVudChhcmd1bWVu
dCkgeworICAgIGNsYXNzIFRocm93U3RhdGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3IoYXJn
dW1lbnQpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5UaHJvd1N0
YXRlbWVudDsKICAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKICAgICAgICAg
fQotICAgICAgICByZXR1cm4gVGhyb3dTdGF0ZW1lbnQ7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAg
ZXhwb3J0cy5UaHJvd1N0YXRlbWVudCA9IFRocm93U3RhdGVtZW50OwotICAgIHZhciBUcnlTdGF0
ZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFRy
eVN0YXRlbWVudChibG9jaywgaGFuZGxlciwgZmluYWxpemVyKSB7CisgICAgY2xhc3MgVHJ5U3Rh
dGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3IoYmxvY2ssIGhhbmRsZXIsIGZpbmFsaXplcikg
ewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlRyeVN0YXRlbWVudDsK
ICAgICAgICAgICAgIHRoaXMuYmxvY2sgPSBibG9jazsKICAgICAgICAgICAgIHRoaXMuaGFuZGxl
ciA9IGhhbmRsZXI7CiAgICAgICAgICAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplcjsKICAg
ICAgICAgfQotICAgICAgICByZXR1cm4gVHJ5U3RhdGVtZW50OwotICAgIH0oKSk7CisgICAgfQog
ICAgIGV4cG9ydHMuVHJ5U3RhdGVtZW50ID0gVHJ5U3RhdGVtZW50OwotICAgIHZhciBVbmFyeUV4
cHJlc3Npb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9u
IFVuYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgYXJndW1lbnQpIHsKKyAgICBjbGFzcyBVbmFyeUV4
cHJlc3Npb24geworICAgICAgICBjb25zdHJ1Y3RvcihvcGVyYXRvciwgYXJndW1lbnQpIHsKICAg
ICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5VbmFyeUV4cHJlc3Npb247CiAg
ICAgICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7CiAgICAgICAgICAgICB0aGlzLmFy
Z3VtZW50ID0gYXJndW1lbnQ7CiAgICAgICAgICAgICB0aGlzLnByZWZpeCA9IHRydWU7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIFVuYXJ5RXhwcmVzc2lvbjsKLSAgICB9KCkpOworICAgIH0K
ICAgICBleHBvcnRzLlVuYXJ5RXhwcmVzc2lvbiA9IFVuYXJ5RXhwcmVzc2lvbjsKLSAgICB2YXIg
VXBkYXRlRXhwcmVzc2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ZnVuY3Rpb24gVXBkYXRlRXhwcmVzc2lvbihvcGVyYXRvciwgYXJndW1lbnQsIHByZWZpeCkgewor
ICAgIGNsYXNzIFVwZGF0ZUV4cHJlc3Npb24geworICAgICAgICBjb25zdHJ1Y3RvcihvcGVyYXRv
ciwgYXJndW1lbnQsIHByZWZpeCkgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEu
U3ludGF4LlVwZGF0ZUV4cHJlc3Npb247CiAgICAgICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3Bl
cmF0b3I7CiAgICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7CiAgICAgICAgICAg
ICB0aGlzLnByZWZpeCA9IHByZWZpeDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gVXBkYXRl
RXhwcmVzc2lvbjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLlVwZGF0ZUV4cHJlc3Np
b24gPSBVcGRhdGVFeHByZXNzaW9uOwotICAgIHZhciBWYXJpYWJsZURlY2xhcmF0aW9uID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBWYXJpYWJsZURlY2xh
cmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCkgeworICAgIGNsYXNzIFZhcmlhYmxlRGVjbGFyYXRp
b24geworICAgICAgICBjb25zdHJ1Y3RvcihkZWNsYXJhdGlvbnMsIGtpbmQpIHsKICAgICAgICAg
ICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5WYXJpYWJsZURlY2xhcmF0aW9uOwogICAg
ICAgICAgICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7CiAgICAgICAgICAgICB0
aGlzLmtpbmQgPSBraW5kOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBWYXJpYWJsZURlY2xh
cmF0aW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuVmFyaWFibGVEZWNsYXJhdGlv
biA9IFZhcmlhYmxlRGVjbGFyYXRpb247Ci0gICAgdmFyIFZhcmlhYmxlRGVjbGFyYXRvciA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gVmFyaWFibGVEZWNs
YXJhdG9yKGlkLCBpbml0KSB7CisgICAgY2xhc3MgVmFyaWFibGVEZWNsYXJhdG9yIHsKKyAgICAg
ICAgY29uc3RydWN0b3IoaWQsIGluaXQpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRh
eF8xLlN5bnRheC5WYXJpYWJsZURlY2xhcmF0b3I7CiAgICAgICAgICAgICB0aGlzLmlkID0gaWQ7
CiAgICAgICAgICAgICB0aGlzLmluaXQgPSBpbml0OwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBWYXJpYWJsZURlY2xhcmF0b3I7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5WYXJp
YWJsZURlY2xhcmF0b3IgPSBWYXJpYWJsZURlY2xhcmF0b3I7Ci0gICAgdmFyIFdoaWxlU3RhdGVt
ZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBXaGls
ZVN0YXRlbWVudCh0ZXN0LCBib2R5KSB7CisgICAgY2xhc3MgV2hpbGVTdGF0ZW1lbnQgeworICAg
ICAgICBjb25zdHJ1Y3Rvcih0ZXN0LCBib2R5KSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBz
eW50YXhfMS5TeW50YXguV2hpbGVTdGF0ZW1lbnQ7CiAgICAgICAgICAgICB0aGlzLnRlc3QgPSB0
ZXN0OwogICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gV2hpbGVTdGF0ZW1lbnQ7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5XaGls
ZVN0YXRlbWVudCA9IFdoaWxlU3RhdGVtZW50OwotICAgIHZhciBXaXRoU3RhdGVtZW50ID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBXaXRoU3RhdGVtZW50
KG9iamVjdCwgYm9keSkgeworICAgIGNsYXNzIFdpdGhTdGF0ZW1lbnQgeworICAgICAgICBjb25z
dHJ1Y3RvcihvYmplY3QsIGJvZHkpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8x
LlN5bnRheC5XaXRoU3RhdGVtZW50OwogICAgICAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7
CiAgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBXaXRoU3RhdGVtZW50OwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuV2l0aFN0YXRl
bWVudCA9IFdpdGhTdGF0ZW1lbnQ7Ci0gICAgdmFyIFlpZWxkRXhwcmVzc2lvbiA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gWWllbGRFeHByZXNzaW9uKGFy
Z3VtZW50LCBkZWxlZ2F0ZSkgeworICAgIGNsYXNzIFlpZWxkRXhwcmVzc2lvbiB7CisgICAgICAg
IGNvbnN0cnVjdG9yKGFyZ3VtZW50LCBkZWxlZ2F0ZSkgewogICAgICAgICAgICAgdGhpcy50eXBl
ID0gc3ludGF4XzEuU3ludGF4LllpZWxkRXhwcmVzc2lvbjsKICAgICAgICAgICAgIHRoaXMuYXJn
dW1lbnQgPSBhcmd1bWVudDsKICAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gWWllbGRFeHByZXNzaW9uOwotICAgIH0oKSk7Cisg
ICAgfQogICAgIGV4cG9ydHMuWWllbGRFeHByZXNzaW9uID0gWWllbGRFeHByZXNzaW9uOwogCiAK
QEAgLTE4MzQsMTcgKzE3NDMsMTYgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVz
KSB7IC8vIHdlYnBhY2tCb290c3RyYXAKIAogICAgICJ1c2Ugc3RyaWN0IjsKICAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwot
ICAgIHZhciBhc3NlcnRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7Ci0gICAgdmFyIGVycm9y
X2hhbmRsZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApOwotICAgIHZhciBtZXNzYWdlc18x
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7Ci0gICAgdmFyIE5vZGUgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDcpOwotICAgIHZhciBzY2FubmVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsK
LSAgICB2YXIgc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOwotICAgIHZhciB0b2tl
bl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7Ci0gICAgdmFyIEFycm93UGFyYW1ldGVyUGxh
Y2VIb2xkZXIgPSAnQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcic7Ci0gICAgdmFyIFBhcnNlciA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gUGFyc2VyKGNv
ZGUsIG9wdGlvbnMsIGRlbGVnYXRlKSB7Ci0gICAgICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9p
ZCAwKSB7IG9wdGlvbnMgPSB7fTsgfQorICAgIGNvbnN0IGFzc2VydF8xID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg5KTsKKyAgICBjb25zdCBlcnJvcl9oYW5kbGVyXzEgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDEwKTsKKyAgICBjb25zdCBtZXNzYWdlc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7
CisgICAgY29uc3QgTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7CisgICAgY29uc3Qgc2Nh
bm5lcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7CisgICAgY29uc3Qgc3ludGF4XzEgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDIpOworICAgIGNvbnN0IHRva2VuXzEgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDEzKTsKKyAgICBjb25zdCBBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyID0gJ0Fycm93
UGFyYW1ldGVyUGxhY2VIb2xkZXInOworICAgIGNsYXNzIFBhcnNlciB7CisgICAgICAgIGNvbnN0
cnVjdG9yKGNvZGUsIG9wdGlvbnMgPSB7fSwgZGVsZWdhdGUpIHsKICAgICAgICAgICAgIHRoaXMu
Y29uZmlnID0gewogICAgICAgICAgICAgICAgIHJhbmdlOiAodHlwZW9mIG9wdGlvbnMucmFuZ2Ug
PT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5yYW5nZSwKICAgICAgICAgICAgICAgICBsb2M6ICh0
eXBlb2Ygb3B0aW9ucy5sb2MgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5sb2MsCkBAIC0xOTMx
LDQwICsxODM5LDMyIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3
ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLnNjYW5uZXIuaW5k
ZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0CiAgICAgICAgICAgICB9OwogICAgICAgICB9Ci0g
ICAgICAgIFBhcnNlci5wcm90b3R5cGUudGhyb3dFcnJvciA9IGZ1bmN0aW9uIChtZXNzYWdlRm9y
bWF0KSB7Ci0gICAgICAgICAgICB2YXIgdmFsdWVzID0gW107Ci0gICAgICAgICAgICBmb3IgKHZh
ciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewotICAgICAgICAgICAgICAg
IHZhbHVlc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsK
LSAgICAgICAgICAgIHZhciBtc2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxhY2UoLyUoXGQpL2csIGZ1
bmN0aW9uICh3aG9sZSwgaWR4KSB7CisgICAgICAgIHRocm93RXJyb3IobWVzc2FnZUZvcm1hdCwg
Li4udmFsdWVzKSB7CisgICAgICAgICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNs
aWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKKyAgICAgICAgICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2VG
b3JtYXQucmVwbGFjZSgvJShcZCkvZywgKHdob2xlLCBpZHgpID0+IHsKICAgICAgICAgICAgICAg
ICBhc3NlcnRfMS5hc3NlcnQoaWR4IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBt
dXN0IGJlIGluIHJhbmdlJyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaWR4XTsKICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5sYXN0TWFya2VyLmlu
ZGV4OwotICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmxhc3RNYXJrZXIubGluZTsKLSAgICAg
ICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmxhc3RNYXJrZXIuY29sdW1uICsgMTsKKyAgICAgICAg
ICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXN0TWFya2VyLmluZGV4OworICAgICAgICAgICAgY29u
c3QgbGluZSA9IHRoaXMubGFzdE1hcmtlci5saW5lOworICAgICAgICAgICAgY29uc3QgY29sdW1u
ID0gdGhpcy5sYXN0TWFya2VyLmNvbHVtbiArIDE7CiAgICAgICAgICAgICB0aHJvdyB0aGlzLmVy
cm9ySGFuZGxlci5jcmVhdGVFcnJvcihpbmRleCwgbGluZSwgY29sdW1uLCBtc2cpOwotICAgICAg
ICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnRvbGVyYXRlRXJyb3IgPSBmdW5jdGlvbiAo
bWVzc2FnZUZvcm1hdCkgewotICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwotICAgICAgICAg
ICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKLSAgICAg
ICAgICAgICAgICB2YWx1ZXNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMSk7Ci0gICAgICAgICAgICB2YXIgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKC8l
KFxkKS9nLCBmdW5jdGlvbiAod2hvbGUsIGlkeCkgeworICAgICAgICB9CisgICAgICAgIHRvbGVy
YXRlRXJyb3IobWVzc2FnZUZvcm1hdCwgLi4udmFsdWVzKSB7CisgICAgICAgICAgICBjb25zdCBh
cmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKKyAgICAgICAg
ICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2VGb3JtYXQucmVwbGFjZSgvJShcZCkvZywgKHdob2xlLCBp
ZHgpID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoaWR4IDwgYXJncy5sZW5n
dGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlJyk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGFyZ3NbaWR4XTsKICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgdmFyIGlu
ZGV4ID0gdGhpcy5sYXN0TWFya2VyLmluZGV4OwotICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlz
LnNjYW5uZXIubGluZU51bWJlcjsKLSAgICAgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmxhc3RN
YXJrZXIuY29sdW1uICsgMTsKKyAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXN0TWFy
a2VyLmluZGV4OworICAgICAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuc2Nhbm5lci5saW5lTnVt
YmVyOworICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5sYXN0TWFya2VyLmNvbHVtbiAr
IDE7CiAgICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlci50b2xlcmF0ZUVycm9yKGluZGV4LCBs
aW5lLCBjb2x1bW4sIG1zZyk7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gVGhy
b3cgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgdGhlIHRva2VuLgotICAgICAgICBQYXJzZXIucHJv
dG90eXBlLnVuZXhwZWN0ZWRUb2tlbkVycm9yID0gZnVuY3Rpb24gKHRva2VuLCBtZXNzYWdlKSB7
Ci0gICAgICAgICAgICB2YXIgbXNnID0gbWVzc2FnZSB8fCBtZXNzYWdlc18xLk1lc3NhZ2VzLlVu
ZXhwZWN0ZWRUb2tlbjsKLSAgICAgICAgICAgIHZhciB2YWx1ZTsKKyAgICAgICAgdW5leHBlY3Rl
ZFRva2VuRXJyb3IodG9rZW4sIG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIGxldCBtc2cgPSBtZXNz
YWdlIHx8IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuOworICAgICAgICAgICAg
bGV0IHZhbHVlOwogICAgICAgICAgICAgaWYgKHRva2VuKSB7CiAgICAgICAgICAgICAgICAgaWYg
KCFtZXNzYWdlKSB7CiAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICh0b2tlbi50eXBlID09PSAy
IC8qIEVPRiAqLykgPyBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRFT1MgOgpAQCAtMTk4
OSwzNSArMTg4OSwzNSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8g
d2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgfQogICAgICAgICAgICAgbXNnID0gbXNnLnJl
cGxhY2UoJyUwJywgdmFsdWUpOwogICAgICAgICAgICAgaWYgKHRva2VuICYmIHR5cGVvZiB0b2tl
bi5saW5lTnVtYmVyID09PSAnbnVtYmVyJykgewotICAgICAgICAgICAgICAgIHZhciBpbmRleCA9
IHRva2VuLnN0YXJ0OwotICAgICAgICAgICAgICAgIHZhciBsaW5lID0gdG9rZW4ubGluZU51bWJl
cjsKLSAgICAgICAgICAgICAgICB2YXIgbGFzdE1hcmtlckxpbmVTdGFydCA9IHRoaXMubGFzdE1h
cmtlci5pbmRleCAtIHRoaXMubGFzdE1hcmtlci5jb2x1bW47Ci0gICAgICAgICAgICAgICAgdmFy
IGNvbHVtbiA9IHRva2VuLnN0YXJ0IC0gbGFzdE1hcmtlckxpbmVTdGFydCArIDE7CisgICAgICAg
ICAgICAgICAgY29uc3QgaW5kZXggPSB0b2tlbi5zdGFydDsKKyAgICAgICAgICAgICAgICBjb25z
dCBsaW5lID0gdG9rZW4ubGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICBjb25zdCBsYXN0TWFy
a2VyTGluZVN0YXJ0ID0gdGhpcy5sYXN0TWFya2VyLmluZGV4IC0gdGhpcy5sYXN0TWFya2VyLmNv
bHVtbjsKKyAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0b2tlbi5zdGFydCAtIGxhc3RN
YXJrZXJMaW5lU3RhcnQgKyAxOwogICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFu
ZGxlci5jcmVhdGVFcnJvcihpbmRleCwgbGluZSwgY29sdW1uLCBtc2cpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5s
YXN0TWFya2VyLmluZGV4OwotICAgICAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5sYXN0TWFy
a2VyLmxpbmU7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGFzdE1hcmtlci5j
b2x1bW4gKyAxOworICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXN0TWFya2Vy
LmluZGV4OworICAgICAgICAgICAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmxhc3RNYXJrZXIubGlu
ZTsKKyAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmxhc3RNYXJrZXIuY29sdW1u
ICsgMTsKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIuY3JlYXRlRXJy
b3IoaW5kZXgsIGxpbmUsIGNvbHVtbiwgbXNnKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfTsK
LSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS50aHJvd1VuZXhwZWN0ZWRUb2tlbiA9IGZ1bmN0aW9u
ICh0b2tlbiwgbWVzc2FnZSkgeworICAgICAgICB9CisgICAgICAgIHRocm93VW5leHBlY3RlZFRv
a2VuKHRva2VuLCBtZXNzYWdlKSB7CiAgICAgICAgICAgICB0aHJvdyB0aGlzLnVuZXhwZWN0ZWRU
b2tlbkVycm9yKHRva2VuLCBtZXNzYWdlKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnBy
b3RvdHlwZS50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbiwgbWVzc2Fn
ZSkgeworICAgICAgICB9CisgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBt
ZXNzYWdlKSB7CiAgICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlci50b2xlcmF0ZSh0aGlzLnVu
ZXhwZWN0ZWRUb2tlbkVycm9yKHRva2VuLCBtZXNzYWdlKSk7Ci0gICAgICAgIH07Ci0gICAgICAg
IFBhcnNlci5wcm90b3R5cGUuY29sbGVjdENvbW1lbnRzID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICB9CisgICAgICAgIGNvbGxlY3RDb21tZW50cygpIHsKICAgICAgICAgICAgIGlmICghdGhpcy5j
b25maWcuY29tbWVudCkgewogICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVu
dHMoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
IHZhciBjb21tZW50cyA9IHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBjb21tZW50cyA9IHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTsKICAgICAg
ICAgICAgICAgICBpZiAoY29tbWVudHMubGVuZ3RoID4gMCAmJiB0aGlzLmRlbGVnYXRlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWVudHMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gY29tbWVudHNbaV07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHZvaWQgMDsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tZW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZSA9IGNvbW1lbnRzW2ldOworICAgICAgICAgICAgICAgICAg
ICAgICAgbGV0IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGUubXVsdGlMaW5lID8gJ0Jsb2NrQ29tbWVudCcg
OiAnTGluZUNvbW1lbnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlz
LnNjYW5uZXIuc291cmNlLnNsaWNlKGUuc2xpY2VbMF0sIGUuc2xpY2VbMV0pCkBAIC0yMDI4LDcg
KzE5MjgsNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFj
a0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxvYykg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubG9jID0gZS5sb2M7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWV0YWRhdGEg
PSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFydDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lOiBlLmxvYy5zdGFydC5saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2x1bW46IGUubG9jLnN0YXJ0LmNvbHVtbiwKQEAgLTIwNDQsMTMgKzE5NDQsMTMgQEAg
cmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
LSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBGcm9tIGludGVybmFsIHJlcHJlc2Vu
dGF0aW9uIHRvIGFuIGV4dGVybmFsIHN0cnVjdHVyZQotICAgICAgICBQYXJzZXIucHJvdG90eXBl
LmdldFRva2VuUmF3ID0gZnVuY3Rpb24gKHRva2VuKSB7CisgICAgICAgIGdldFRva2VuUmF3KHRv
a2VuKSB7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FubmVyLnNvdXJjZS5zbGljZSh0b2tl
bi5zdGFydCwgdG9rZW4uZW5kKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlw
ZS5jb252ZXJ0VG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHsKLSAgICAgICAgICAgIHZhciB0ID0g
eworICAgICAgICB9CisgICAgICAgIGNvbnZlcnRUb2tlbih0b2tlbikgeworICAgICAgICAgICAg
Y29uc3QgdCA9IHsKICAgICAgICAgICAgICAgICB0eXBlOiB0b2tlbl8xLlRva2VuTmFtZVt0b2tl
bi50eXBlXSwKICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRUb2tlblJhdyh0b2tlbikK
ICAgICAgICAgICAgIH07CkBAIC0yMDcwLDE0ICsxOTcwLDE0IEBAIHJldHVybiAvKioqKioqLyAo
ZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAg
fTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSA5IC8qIFJl
Z3VsYXJFeHByZXNzaW9uICovKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSB0b2tl
bi5wYXR0ZXJuOwotICAgICAgICAgICAgICAgIHZhciBmbGFncyA9IHRva2VuLmZsYWdzOwotICAg
ICAgICAgICAgICAgIHQucmVnZXggPSB7IHBhdHRlcm46IHBhdHRlcm4sIGZsYWdzOiBmbGFncyB9
OworICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0b2tlbi5wYXR0ZXJuOworICAgICAg
ICAgICAgICAgIGNvbnN0IGZsYWdzID0gdG9rZW4uZmxhZ3M7CisgICAgICAgICAgICAgICAgdC5y
ZWdleCA9IHsgcGF0dGVybiwgZmxhZ3MgfTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybiB0OwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLm5leHRUb2tlbiA9
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOwor
ICAgICAgICB9CisgICAgICAgIG5leHRUb2tlbigpIHsKKyAgICAgICAgICAgIGNvbnN0IHRva2Vu
ID0gdGhpcy5sb29rYWhlYWQ7CiAgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIuaW5kZXggPSB0
aGlzLnNjYW5uZXIuaW5kZXg7CiAgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIubGluZSA9IHRo
aXMuc2Nhbm5lci5saW5lTnVtYmVyOwogICAgICAgICAgICAgdGhpcy5sYXN0TWFya2VyLmNvbHVt
biA9IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7CkBAIC0yMDg3
LDcgKzE5ODcsNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2Vi
cGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIubGluZSA9IHRo
aXMuc2Nhbm5lci5saW5lTnVtYmVyOwogICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIu
Y29sdW1uID0gdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5zY2FubmVyLmxleCgpOwor
ICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuc2Nhbm5lci5sZXgoKTsKICAgICAgICAgICAg
IHRoaXMuaGFzTGluZVRlcm1pbmF0b3IgPSAodG9rZW4ubGluZU51bWJlciAhPT0gbmV4dC5saW5l
TnVtYmVyKTsKICAgICAgICAgICAgIGlmIChuZXh0ICYmIHRoaXMuY29udGV4dC5zdHJpY3QgJiYg
bmV4dC50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pIHsKICAgICAgICAgICAgICAgICBpZiAo
dGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChuZXh0LnZhbHVlKSkgewpAQCAt
MjA5OSwxMCArMTk5OSwxMCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsg
Ly8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2godGhp
cy5jb252ZXJ0VG9rZW4obmV4dCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IHRva2VuOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLm5leHRSZWdleFRv
a2VuID0gZnVuY3Rpb24gKCkgeworICAgICAgICB9CisgICAgICAgIG5leHRSZWdleFRva2VuKCkg
ewogICAgICAgICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMoKTsKLSAgICAgICAgICAgIHZhciB0
b2tlbiA9IHRoaXMuc2Nhbm5lci5zY2FuUmVnRXhwKCk7CisgICAgICAgICAgICBjb25zdCB0b2tl
biA9IHRoaXMuc2Nhbm5lci5zY2FuUmVnRXhwKCk7CiAgICAgICAgICAgICBpZiAodGhpcy5jb25m
aWcudG9rZW5zKSB7CiAgICAgICAgICAgICAgICAgLy8gUG9wIHRoZSBwcmV2aW91cyB0b2tlbiwg
Jy8nIG9yICcvPScKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFkZGVkIGZyb20gdGhlIGxv
b2thaGVhZCB0b2tlbi4KQEAgLTIxMTMsMTggKzIwMTMsMTcgQEAgcmV0dXJuIC8qKioqKiovIChm
dW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIHRoaXMu
bG9va2FoZWFkID0gdG9rZW47CiAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwogICAgICAg
ICAgICAgcmV0dXJuIHRva2VuOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBl
LmNyZWF0ZU5vZGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIH0KKyAgICAgICAgY3JlYXRlTm9k
ZSgpIHsKICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMu
c3RhcnRNYXJrZXIuaW5kZXgsCiAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5zdGFydE1hcmtl
ci5saW5lLAogICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zdGFydE1hcmtlci5jb2x1bW4K
ICAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUuc3Rh
cnROb2RlID0gZnVuY3Rpb24gKHRva2VuLCBsYXN0TGluZVN0YXJ0KSB7Ci0gICAgICAgICAgICBp
ZiAobGFzdExpbmVTdGFydCA9PT0gdm9pZCAwKSB7IGxhc3RMaW5lU3RhcnQgPSAwOyB9Ci0gICAg
ICAgICAgICB2YXIgY29sdW1uID0gdG9rZW4uc3RhcnQgLSB0b2tlbi5saW5lU3RhcnQ7Ci0gICAg
ICAgICAgICB2YXIgbGluZSA9IHRva2VuLmxpbmVOdW1iZXI7CisgICAgICAgIH0KKyAgICAgICAg
c3RhcnROb2RlKHRva2VuLCBsYXN0TGluZVN0YXJ0ID0gMCkgeworICAgICAgICAgICAgbGV0IGNv
bHVtbiA9IHRva2VuLnN0YXJ0IC0gdG9rZW4ubGluZVN0YXJ0OworICAgICAgICAgICAgbGV0IGxp
bmUgPSB0b2tlbi5saW5lTnVtYmVyOwogICAgICAgICAgICAgaWYgKGNvbHVtbiA8IDApIHsKICAg
ICAgICAgICAgICAgICBjb2x1bW4gKz0gbGFzdExpbmVTdGFydDsKICAgICAgICAgICAgICAgICBs
aW5lLS07CkBAIC0yMTM0LDggKzIwMzMsOCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1v
ZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIGxpbmU6IGxpbmUs
CiAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4KICAgICAgICAgICAgIH07Ci0gICAgICAg
IH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbiAobWFya2Vy
LCBub2RlKSB7CisgICAgICAgIH0KKyAgICAgICAgZmluYWxpemUobWFya2VyLCBub2RlKSB7CiAg
ICAgICAgICAgICBpZiAodGhpcy5jb25maWcucmFuZ2UpIHsKICAgICAgICAgICAgICAgICBub2Rl
LnJhbmdlID0gW21hcmtlci5pbmRleCwgdGhpcy5sYXN0TWFya2VyLmluZGV4XTsKICAgICAgICAg
ICAgIH0KQEAgLTIxNTUsNyArMjA1NCw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9k
dWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKHRoaXMuZGVsZWdhdGUpIHsKLSAgICAgICAgICAgICAgICB2
YXIgbWV0YWRhdGEgPSB7CisgICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB7CiAgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBt
YXJrZXIubGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogbWFya2VyLmNvbHVt
biwKQEAgLTIxNzAsMTkgKzIwNjksMTkgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1
bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRl
KG5vZGUsIG1ldGFkYXRhKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBub2Rl
OwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0b2tl
biB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuCiAgICAgICAgIC8vIElmIG5vdCwg
YW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgotICAgICAgICBQYXJzZXIucHJvdG90eXBlLmV4
cGVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkgewotICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5u
ZXh0VG9rZW4oKTsKKyAgICAgICAgZXhwZWN0KHZhbHVlKSB7CisgICAgICAgICAgICBjb25zdCB0
b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7CiAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0g
NyAvKiBQdW5jdHVhdG9yICovIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkgewogICAgICAgICAg
ICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOwogICAgICAgICAgICAgfQot
ICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIFF1aWV0bHkgZXhwZWN0IGEgY29tbWEg
d2hlbiBpbiB0b2xlcmFudCBtb2RlLCBvdGhlcndpc2UgZGVsZWdhdGVzIHRvIGV4cGVjdCgpLgot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLmV4cGVjdENvbW1hU2VwYXJhdG9yID0gZnVuY3Rpb24g
KCkgeworICAgICAgICBleHBlY3RDb21tYVNlcGFyYXRvcigpIHsKICAgICAgICAgICAgIGlmICh0
aGlzLmNvbmZpZy50b2xlcmFudCkgewotICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMu
bG9va2FoZWFkOworICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5sb29rYWhlYWQ7
CiAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLyAm
JiB0b2tlbi52YWx1ZSA9PT0gJywnKSB7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRv
a2VuKCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjE5NywzNCArMjA5NiwzNCBAQCByZXR1cm4g
LyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJywnKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBFeHBlY3QgdGhlIG5leHQg
dG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBrZXl3b3JkLgogICAgICAgICAvLyBJZiBub3Qs
IGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5l
eHBlY3RLZXl3b3JkID0gZnVuY3Rpb24gKGtleXdvcmQpIHsKLSAgICAgICAgICAgIHZhciB0b2tl
biA9IHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgIGV4cGVjdEtleXdvcmQoa2V5d29yZCkgewor
ICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOwogICAgICAgICAgICAg
aWYgKHRva2VuLnR5cGUgIT09IDQgLyogS2V5d29yZCAqLyB8fCB0b2tlbi52YWx1ZSAhPT0ga2V5
d29yZCkgewogICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4p
OwogICAgICAgICAgICAgfQotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIFJldHVy
biB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9y
LgotICAgICAgICBQYXJzZXIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gKHZhbHVlKSB7Cisg
ICAgICAgIG1hdGNoKHZhbHVlKSB7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb29rYWhlYWQu
dHlwZSA9PT0gNyAvKiBQdW5jdHVhdG9yICovICYmIHRoaXMubG9va2FoZWFkLnZhbHVlID09PSB2
YWx1ZTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0
aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQga2V5d29yZAotICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLm1hdGNoS2V5d29yZCA9IGZ1bmN0aW9uIChrZXl3b3JkKSB7CisgICAgICAg
IG1hdGNoS2V5d29yZChrZXl3b3JkKSB7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb29rYWhl
YWQudHlwZSA9PT0gNCAvKiBLZXl3b3JkICovICYmIHRoaXMubG9va2FoZWFkLnZhbHVlID09PSBr
ZXl3b3JkOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIFJldHVybiB0cnVlIGlm
IHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBjb250ZXh0dWFsIGtleXdvcmQK
ICAgICAgICAgLy8gKHdoZXJlIGFuIGlkZW50aWZpZXIgaXMgc29tZXRpbWVzIGEga2V5d29yZCBk
ZXBlbmRpbmcgb24gdGhlIGNvbnRleHQpCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUubWF0Y2hD
b250ZXh0dWFsS2V5d29yZCA9IGZ1bmN0aW9uIChrZXl3b3JkKSB7CisgICAgICAgIG1hdGNoQ29u
dGV4dHVhbEtleXdvcmQoa2V5d29yZCkgewogICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9va2Fo
ZWFkLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLyAmJiB0aGlzLmxvb2thaGVhZC52YWx1ZSA9
PT0ga2V5d29yZDsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBSZXR1cm4gdHJ1
ZSBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhbiBhc3NpZ25tZW50IG9wZXJhdG9yCi0gICAgICAgIFBh
cnNlci5wcm90b3R5cGUubWF0Y2hBc3NpZ24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIG1hdGNo
QXNzaWduKCkgewogICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09IDcgLyog
UHVuY3R1YXRvciAqLykgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHZhciBvcCA9IHRoaXMubG9va2FoZWFkLnZhbHVlOworICAgICAg
ICAgICAgY29uc3Qgb3AgPSB0aGlzLmxvb2thaGVhZC52YWx1ZTsKICAgICAgICAgICAgIHJldHVy
biBvcCA9PT0gJz0nIHx8CiAgICAgICAgICAgICAgICAgb3AgPT09ICcqPScgfHwKICAgICAgICAg
ICAgICAgICBvcCA9PT0gJyoqPScgfHwKQEAgLTIyMzgsNyArMjEzNyw3IEBAIHJldHVybiAvKioq
KioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAg
ICAgICAgb3AgPT09ICcmPScgfHwKICAgICAgICAgICAgICAgICBvcCA9PT0gJ149JyB8fAogICAg
ICAgICAgICAgICAgIG9wID09PSAnfD0nOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAg
IC8vIENvdmVyIGdyYW1tYXIgc3VwcG9ydC4KICAgICAgICAgLy8KICAgICAgICAgLy8gV2hlbiBh
biBhc3NpZ25tZW50IGV4cHJlc3Npb24gcG9zaXRpb24gc3RhcnRzIHdpdGggYW4gbGVmdCBwYXJl
bnRoZXNpcywgdGhlIGRldGVybWluYXRpb24gb2YgdGhlIHR5cGUKQEAgLTIyNzAsMTQgKzIxNjks
MTQgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290
c3RyYXAKICAgICAgICAgLy8gaW5oZXJpdENvdmVyR3JhbW1hciBmdW5jdGlvbiBydW5zIHRoZSBn
aXZlbiBwYXJzZSBmdW5jdGlvbiB3aXRoIGEgbmV3IGNvdmVyIGdyYW1tYXIgY29udGV4dCwgYW5k
IGl0IHByb3BhZ2F0ZXMKICAgICAgICAgLy8gdGhlIGZsYWdzIG91dHNpZGUgb2YgdGhlIHBhcnNl
ci4gVGhpcyBtZWFucyB0aGUgcHJvZHVjdGlvbiB0aGUgcGFyc2VyIHBhcnNlcyBpcyB1c2VkIGFz
IGEgcGFydCBvZiBhIHBvdGVudGlhbAogICAgICAgICAvLyBwYXR0ZXJuLiBUaGUgQ292ZXJJbml0
aWFsaXplZE5hbWUgY2hlY2sgaXMgZGVmZXJyZWQuCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUu
aXNvbGF0ZUNvdmVyR3JhbW1hciA9IGZ1bmN0aW9uIChwYXJzZUZ1bmN0aW9uKSB7Ci0gICAgICAg
ICAgICB2YXIgcHJldmlvdXNJc0JpbmRpbmdFbGVtZW50ID0gdGhpcy5jb250ZXh0LmlzQmluZGlu
Z0VsZW1lbnQ7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQgPSB0
aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0OwotICAgICAgICAgICAgdmFyIHByZXZpb3Vz
Rmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJ
bml0aWFsaXplZE5hbWVFcnJvcjsKKyAgICAgICAgaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUZ1
bmN0aW9uKSB7CisgICAgICAgICAgICBjb25zdCBwcmV2aW91c0lzQmluZGluZ0VsZW1lbnQgPSB0
aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudDsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3Vz
SXNBc3NpZ25tZW50VGFyZ2V0ID0gdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldDsKKyAg
ICAgICAgICAgIGNvbnN0IHByZXZpb3VzRmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0g
dGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjsKICAgICAgICAgICAg
IHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gdHJ1ZTsKICAgICAgICAgICAgIHRoaXMu
Y29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOwogICAgICAgICAgICAgdGhpcy5jb250
ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7Ci0gICAgICAgICAgICB2
YXIgcmVzdWx0ID0gcGFyc2VGdW5jdGlvbi5jYWxsKHRoaXMpOworICAgICAgICAgICAgY29uc3Qg
cmVzdWx0ID0gcGFyc2VGdW5jdGlvbi5jYWxsKHRoaXMpOwogICAgICAgICAgICAgaWYgKHRoaXMu
Y29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgIT09IG51bGwpIHsKICAgICAg
ICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMuY29udGV4dC5maXJzdENv
dmVySW5pdGlhbGl6ZWROYW1lRXJyb3IpOwogICAgICAgICAgICAgfQpAQCAtMjI4NSwyMSArMjE4
NCwyMSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jv
b3RzdHJhcAogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHBy
ZXZpb3VzSXNBc3NpZ25tZW50VGFyZ2V0OwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0
Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IHByZXZpb3VzRmlyc3RDb3ZlckluaXRpYWxpemVk
TmFtZUVycm9yOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfTsKLSAgICAg
ICAgUGFyc2VyLnByb3RvdHlwZS5pbmhlcml0Q292ZXJHcmFtbWFyID0gZnVuY3Rpb24gKHBhcnNl
RnVuY3Rpb24pIHsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0lzQmluZGluZ0VsZW1lbnQgPSB0
aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudDsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0lz
QXNzaWdubWVudFRhcmdldCA9IHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ7Ci0gICAg
ICAgICAgICB2YXIgcHJldmlvdXNGaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSB0aGlz
LmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yOworICAgICAgICB9CisgICAg
ICAgIGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VGdW5jdGlvbikgeworICAgICAgICAgICAgY29u
c3QgcHJldmlvdXNJc0JpbmRpbmdFbGVtZW50ID0gdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1l
bnQ7CisgICAgICAgICAgICBjb25zdCBwcmV2aW91c0lzQXNzaWdubWVudFRhcmdldCA9IHRoaXMu
Y29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ7CisgICAgICAgICAgICBjb25zdCBwcmV2aW91c0Zp
cnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IHRoaXMuY29udGV4dC5maXJzdENvdmVySW5p
dGlhbGl6ZWROYW1lRXJyb3I7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxl
bWVudCA9IHRydWU7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0
ID0gdHJ1ZTsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWRO
YW1lRXJyb3IgPSBudWxsOwotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHBhcnNlRnVuY3Rpb24u
Y2FsbCh0aGlzKTsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlRnVuY3Rpb24uY2Fs
bCh0aGlzKTsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gdGhp
cy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgJiYgcHJldmlvdXNJc0JpbmRpbmdFbGVtZW50Owog
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRoaXMuY29udGV4
dC5pc0Fzc2lnbm1lbnRUYXJnZXQgJiYgcHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQ7CiAgICAg
ICAgICAgICB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gcHJl
dmlvdXNGaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgfHwgdGhpcy5jb250ZXh0LmZpcnN0
Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUuY29uc3VtZVNlbWljb2xvbiA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgfQorICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCkgewogICAg
ICAgICAgICAgaWYgKHRoaXMubWF0Y2goJzsnKSkgewogICAgICAgICAgICAgICAgIHRoaXMubmV4
dFRva2VuKCk7CiAgICAgICAgICAgICB9CkBAIC0yMzExLDEyICsyMjEwLDEyIEBAIHJldHVybiAv
KioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAg
ICAgICAgICAgdGhpcy5sYXN0TWFya2VyLmxpbmUgPSB0aGlzLnN0YXJ0TWFya2VyLmxpbmU7CiAg
ICAgICAgICAgICAgICAgdGhpcy5sYXN0TWFya2VyLmNvbHVtbiA9IHRoaXMuc3RhcnRNYXJrZXIu
Y29sdW1uOwogICAgICAgICAgICAgfQotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8v
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByaW1hcnktZXhwcmVzc2lvbgot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24gPSBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAg
ICAgICAgdmFyIGV4cHI7Ci0gICAgICAgICAgICB2YXIgdG9rZW4sIHJhdzsKKyAgICAgICAgcGFy
c2VQcmltYXJ5RXhwcmVzc2lvbigpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGxldCBleHByOworICAgICAgICAgICAgbGV0IHRva2Vu
LCByYXc7CiAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMubG9va2FoZWFkLnR5cGUpIHsKICAgICAg
ICAgICAgICAgICBjYXNlIDMgLyogSWRlbnRpZmllciAqLzoKICAgICAgICAgICAgICAgICAgICAg
aWYgKCh0aGlzLmNvbnRleHQuaXNNb2R1bGUgfHwgdGhpcy5jb250ZXh0LmF3YWl0KSAmJiB0aGlz
Lmxvb2thaGVhZC52YWx1ZSA9PT0gJ2F3YWl0JykgewpAQCAtMjMzMyw3ICsyMjMyLDEzIEBAIHJl
dHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAg
ICAgICAgICAgICAgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7Ci0gICAgICAgICAgICAg
ICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwodG9rZW4u
dmFsdWUsIHJhdykpOworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4uYmlnaW50KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiaWdpbnRTdHJpbmcgPSB0b2tlbi52YWx1ZSAh
PT0gbnVsbCA/IHRva2VuLnZhbHVlLnRvU3RyaW5nKCkgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4
dCAqLyB0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQgLSAx
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBOb2RlLkJpZ0ludExpdGVyYWwodG9rZW4udmFsdWUsIGJpZ2ludFN0cmluZywgcmF3KSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRl
cmFsKHRva2VuLnZhbHVlLCByYXcpKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIDEgLyogQm9vbGVhbkxpdGVy
YWwgKi86CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJn
ZXQgPSBmYWxzZTsKQEAgLTI0MDksMTcgKzIzMTQsMTcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5j
dGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAg
ZXhwciA9IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZXhwcjsKLSAgICAgICAgfTsKKyAgICAgICAg
fQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS1p
bml0aWFsaXplcgotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU3ByZWFkRWxlbWVudCA9
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
CisgICAgICAgIHBhcnNlU3ByZWFkRWxlbWVudCgpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUg
PSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTsKLSAg
ICAgICAgICAgIHZhciBhcmcgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uKTsKKyAgICAgICAgICAgIGNvbnN0IGFyZyA9IHRoaXMuaW5oZXJp
dENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwogICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuU3ByZWFkRWxlbWVudChhcmcp
KTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUFycmF5SW5pdGlh
bGl6ZXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRl
Tm9kZSgpOwotICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gW107CisgICAgICAgIH0KKyAgICAg
ICAgcGFyc2VBcnJheUluaXRpYWxpemVyKCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRo
aXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBbXTsKICAgICAg
ICAgICAgIHRoaXMuZXhwZWN0KCdbJyk7CiAgICAgICAgICAgICB3aGlsZSAoIXRoaXMubWF0Y2go
J10nKSkgewogICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcsJykpIHsKQEAgLTI0Mjcs
NyArMjMzMiw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJw
YWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJy4u
LicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5wYXJzZVNwcmVh
ZEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGFy
c2VTcHJlYWRFbGVtZW50KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgn
XScpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50
VGFyZ2V0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNC
aW5kaW5nRWxlbWVudCA9IGZhbHNlOwpAQCAtMjQ0NCwxNSArMjM0OSwxNSBAQCByZXR1cm4gLyoq
KioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgdGhpcy5leHBlY3QoJ10nKTsKICAgICAgICAgICAgIHJldHVybiB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFycmF5RXhwcmVzc2lvbihlbGVtZW50cykpOwot
ICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8v
ZWNtYTI2Mi8jc2VjLW9iamVjdC1pbml0aWFsaXplcgotICAgICAgICBQYXJzZXIucHJvdG90eXBl
LnBhcnNlUHJvcGVydHlNZXRob2QgPSBmdW5jdGlvbiAocGFyYW1zKSB7CisgICAgICAgIHBhcnNl
UHJvcGVydHlNZXRob2QocGFyYW1zKSB7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3Np
Z25tZW50VGFyZ2V0ID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5n
RWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gdGhpcy5j
b250ZXh0LnN0cmljdDsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93U3RyaWN0RGlyZWN0
aXZlID0gdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlOworICAgICAgICAgICAgY29u
c3QgcHJldmlvdXNTdHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0OworICAgICAgICAgICAgY29u
c3QgcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZSA9IHRoaXMuY29udGV4dC5hbGxvd1N0cmlj
dERpcmVjdGl2ZTsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2
ZSA9IHBhcmFtcy5zaW1wbGU7Ci0gICAgICAgICAgICB2YXIgYm9keSA9IHRoaXMuaXNvbGF0ZUNv
dmVyR3JhbW1hcih0aGlzLnBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyk7CisgICAgICAgICAg
ICBjb25zdCBib2R5ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VGdW5jdGlv
blNvdXJjZUVsZW1lbnRzKTsKICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYm
IHBhcmFtcy5maXJzdFJlc3RyaWN0ZWQpIHsKICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRl
VW5leHBlY3RlZFRva2VuKHBhcmFtcy5maXJzdFJlc3RyaWN0ZWQsIHBhcmFtcy5tZXNzYWdlKTsK
ICAgICAgICAgICAgIH0KQEAgLTI0NjIsNDAgKzIzNjcsNDAgQEAgcmV0dXJuIC8qKioqKiovIChm
dW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIHRoaXMu
Y29udGV4dC5zdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKICAgICAgICAgICAgIHRoaXMuY29udGV4
dC5hbGxvd1N0cmljdERpcmVjdGl2ZSA9IHByZXZpb3VzQWxsb3dTdHJpY3REaXJlY3RpdmU7CiAg
ICAgICAgICAgICByZXR1cm4gYm9keTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICB2YXIgaXNHZW5lcmF0b3IgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhp
cy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhp
cy5jb250ZXh0LmFsbG93WWllbGQ7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VQcm9wZXJ0eU1l
dGhvZEZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY29uc3QgaXNHZW5lcmF0b3IgPSBmYWxzZTsK
KyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAg
IGNvbnN0IHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkOwogICAg
ICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSB0cnVlOwotICAgICAgICAgICAgdmFy
IHBhcmFtcyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCk7Ci0gICAgICAgICAgICB2YXIg
bWV0aG9kID0gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKHBhcmFtcyk7CisgICAgICAgICAgICBj
b25zdCBwYXJhbXMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpOworICAgICAgICAgICAg
Y29uc3QgbWV0aG9kID0gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKHBhcmFtcyk7CiAgICAgICAg
ICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKICAgICAg
ICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkZ1bmN0aW9uRXhwcmVz
c2lvbihudWxsLCBwYXJhbXMucGFyYW1zLCBtZXRob2QsIGlzR2VuZXJhdG9yKSk7Ci0gICAgICAg
IH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VQcm9wZXJ0eU1ldGhvZEFzeW5jRnVu
Y3Rpb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRl
Tm9kZSgpOwotICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29udGV4
dC5hbGxvd1lpZWxkOwotICAgICAgICAgICAgdmFyIHByZXZpb3VzQXdhaXQgPSB0aGlzLmNvbnRl
eHQuYXdhaXQ7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VQcm9wZXJ0eU1ldGhvZEFzeW5jRnVu
Y3Rpb24oaXNHZW5lcmF0b3IpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0
ZU5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29u
dGV4dC5hbGxvd1lpZWxkOworICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBd2FpdCA9IHRoaXMu
Y29udGV4dC5hd2FpdDsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gZmFs
c2U7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQgPSB0cnVlOwotICAgICAgICAgICAg
dmFyIHBhcmFtcyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCk7Ci0gICAgICAgICAgICB2
YXIgbWV0aG9kID0gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKHBhcmFtcyk7CisgICAgICAgICAg
ICBjb25zdCBwYXJhbXMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpOworICAgICAgICAg
ICAgY29uc3QgbWV0aG9kID0gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKHBhcmFtcyk7CiAgICAg
ICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKICAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5hd2FpdCA9IHByZXZpb3VzQXdhaXQ7Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Bc3luY0Z1bmN0aW9uRXhwcmVz
c2lvbihudWxsLCBwYXJhbXMucGFyYW1zLCBtZXRob2QpKTsKLSAgICAgICAgfTsKLSAgICAgICAg
UGFyc2VyLnByb3RvdHlwZS5wYXJzZU9iamVjdFByb3BlcnR5S2V5ID0gZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZh
ciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICB2YXIga2V5OworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQXN5bmNGdW5jdGlvbkV4
cHJlc3Npb24obnVsbCwgcGFyYW1zLnBhcmFtcywgbWV0aG9kLCBpc0dlbmVyYXRvcikpOworICAg
ICAgICB9CisgICAgICAgIHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKSB7CisgICAgICAgICAgICBj
b25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25zdCB0b2tlbiA9
IHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICBsZXQga2V5OwogICAgICAgICAgICAgc3dp
dGNoICh0b2tlbi50eXBlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSA4IC8qIFN0cmluZ0xpdGVy
YWwgKi86CiAgICAgICAgICAgICAgICAgY2FzZSA2IC8qIE51bWVyaWNMaXRlcmFsICovOgogICAg
ICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiB0b2tlbi5vY3RhbCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0
b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZhciByYXcgPSB0aGlzLmdldFRva2Vu
UmF3KHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF3ID0gdGhpcy5nZXRUb2tl
blJhdyh0b2tlbik7CiAgICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuTGl0ZXJhbCh0b2tlbi52YWx1ZSwgcmF3KSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgMyAvKiBJZGVudGlmaWVyICovOgpAQCAt
MjUxNywyNyArMjQyMiwzMSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsg
Ly8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKHRva2VuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVy
biBrZXk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUuaXNQcm9wZXJ0eUtl
eSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAgICAgIH0KKyAgICAgICAgaXNQcm9wZXJ0
eUtleShrZXksIHZhbHVlKSB7CiAgICAgICAgICAgICByZXR1cm4gKGtleS50eXBlID09PSBzeW50
YXhfMS5TeW50YXguSWRlbnRpZmllciAmJiBrZXkubmFtZSA9PT0gdmFsdWUpIHx8CiAgICAgICAg
ICAgICAgICAgKGtleS50eXBlID09PSBzeW50YXhfMS5TeW50YXguTGl0ZXJhbCAmJiBrZXkudmFs
dWUgPT09IHZhbHVlKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJz
ZU9iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKGhhc1Byb3RvKSB7Ci0gICAgICAgICAgICB2YXIg
bm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5s
b29rYWhlYWQ7Ci0gICAgICAgICAgICB2YXIga2luZDsKLSAgICAgICAgICAgIHZhciBrZXkgPSBu
dWxsOwotICAgICAgICAgICAgdmFyIHZhbHVlID0gbnVsbDsKLSAgICAgICAgICAgIHZhciBjb21w
dXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIG1ldGhvZCA9IGZhbHNlOwotICAgICAgICAg
ICAgdmFyIHNob3J0aGFuZCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIGlzQXN5bmMgPSBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZU9iamVjdFByb3BlcnR5KGhhc1Byb3RvKSB7Cisg
ICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBj
b25zdCB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworICAgICAgICAgICAgbGV0IGtpbmQ7CisgICAg
ICAgICAgICBsZXQga2V5ID0gbnVsbDsKKyAgICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7Cisg
ICAgICAgICAgICBsZXQgY29tcHV0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGxldCBtZXRob2Qg
PSBmYWxzZTsKKyAgICAgICAgICAgIGxldCBzaG9ydGhhbmQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGxldCBpc0FzeW5jID0gZmFsc2U7CisgICAgICAgICAgICBsZXQgaXNBc3luY0dlbmVyYXRvciA9
IGZhbHNlOwogICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAq
LykgewotICAgICAgICAgICAgICAgIHZhciBpZCA9IHRva2VuLnZhbHVlOworICAgICAgICAgICAg
ICAgIGNvbnN0IGlkID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9r
ZW4oKTsKICAgICAgICAgICAgICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2goJ1snKTsKLSAgICAg
ICAgICAgICAgICBpc0FzeW5jID0gIXRoaXMuaGFzTGluZVRlcm1pbmF0b3IgJiYgKGlkID09PSAn
YXN5bmMnKSAmJgotICAgICAgICAgICAgICAgICAgICAhdGhpcy5tYXRjaCgnOicpICYmICF0aGlz
Lm1hdGNoKCcoJykgJiYgIXRoaXMubWF0Y2goJyonKSAmJiAhdGhpcy5tYXRjaCgnLCcpOworICAg
ICAgICAgICAgICAgIGlzQXN5bmMgPSAhdGhpcy5oYXNMaW5lVGVybWluYXRvciAmJiAoaWQgPT09
ICdhc3luYycpICYmICF0aGlzLm1hdGNoKCc6JykgJiYgIXRoaXMubWF0Y2goJygnKSAmJiAhdGhp
cy5tYXRjaCgnLCcpOworICAgICAgICAgICAgICAgIGlzQXN5bmNHZW5lcmF0b3IgPSB0aGlzLm1h
dGNoKCcqJyk7CisgICAgICAgICAgICAgICAgaWYgKGlzQXN5bmNHZW5lcmF0b3IpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAga2V5ID0gaXNBc3luYyA/IHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgp
IDogdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVyKGlkKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcqJykpIHsKQEAgLTI1NDcs
NyArMjQ1Niw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJw
YWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7
CiAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgbG9va2FoZWFkUHJvcGVydHlLZXkgPSB0aGlz
LnF1YWxpZmllZFByb3BlcnR5TmFtZSh0aGlzLmxvb2thaGVhZCk7CisgICAgICAgICAgICBjb25z
dCBsb29rYWhlYWRQcm9wZXJ0eUtleSA9IHRoaXMucXVhbGlmaWVkUHJvcGVydHlOYW1lKHRoaXMu
bG9va2FoZWFkKTsKICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZp
ZXIgKi8gJiYgIWlzQXN5bmMgJiYgdG9rZW4udmFsdWUgPT09ICdnZXQnICYmIGxvb2thaGVhZFBy
b3BlcnR5S2V5KSB7CiAgICAgICAgICAgICAgICAga2luZCA9ICdnZXQnOwogICAgICAgICAgICAg
ICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpOwpAQCAtMjU4NCwxNiArMjQ5MywxNiBAQCBy
ZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAog
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlz
LnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcoJykpIHsKLSAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBpc0FzeW5jID8gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kQXN5bmNGdW5jdGlvbigp
IDogdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBpc0FzeW5jID8gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kQXN5bmNGdW5jdGlv
bihpc0FzeW5jR2VuZXJhdG9yKSA6IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCk7
CiAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAq
LykgewotICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBOb2RlLklkZW50aWZpZXIodG9rZW4udmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgaWQgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIodG9rZW4udmFs
dWUpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJz0nKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVF
cnJvciA9IHRoaXMubG9va2FoZWFkOwogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0
VG9rZW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgaW5pdCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0
aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgaW5pdCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVu
dEV4cHJlc3Npb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLkFzc2lnbm1lbnRQYXR0ZXJuKGlkLCBpbml0KSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC0yNjA2LDEyICsy
NTE1LDEyIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNr
Qm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuUHJvcGVydHkoa2luZCwga2V5LCBj
b21wdXRlZCwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kKSk7Ci0gICAgICAgIH07Ci0gICAgICAg
IFBhcnNlci5wcm90b3R5cGUucGFyc2VPYmplY3RJbml0aWFsaXplciA9IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgIH0KKyAg
ICAgICAgcGFyc2VPYmplY3RJbml0aWFsaXplcigpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUg
PSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7Ci0gICAg
ICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdOwotICAgICAgICAgICAgdmFyIGhhc1Byb3RvID0g
eyB2YWx1ZTogZmFsc2UgfTsKKyAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBbXTsKKyAg
ICAgICAgICAgIGNvbnN0IGhhc1Byb3RvID0geyB2YWx1ZTogZmFsc2UgfTsKICAgICAgICAgICAg
IHdoaWxlICghdGhpcy5tYXRjaCgnfScpKSB7CiAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5w
dXNoKHRoaXMubWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKSA6IHRoaXMu
cGFyc2VPYmplY3RQcm9wZXJ0eShoYXNQcm90bykpOwogICAgICAgICAgICAgICAgIGlmICghdGhp
cy5tYXRjaCgnfScpKSB7CkBAIC0yNjIwLDMxICsyNTI5LDMxIEBAIHJldHVybiAvKioqKioqLyAo
ZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB0aGlzLmV4cGVjdCgnfScpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKSk7Ci0gICAg
ICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
MjYyLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbHMKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJz
ZVRlbXBsYXRlSGVhZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcGFyc2VUZW1wbGF0ZUhlYWQo
KSB7CiAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQodGhpcy5sb29rYWhlYWQuaGVhZCwgJ1Rl
bXBsYXRlIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgdGVtcGxhdGUgaGVhZCcpOwotICAgICAg
ICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciB0b2tl
biA9IHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICB2YXIgcmF3ID0gdG9rZW4udmFsdWU7
Ci0gICAgICAgICAgICB2YXIgY29va2VkID0gdG9rZW4uY29va2VkOwotICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVGVtcGxhdGVFbGVtZW50KHsgcmF3OiBy
YXcsIGNvb2tlZDogY29va2VkIH0sIHRva2VuLnRhaWwpKTsKLSAgICAgICAgfTsKLSAgICAgICAg
UGFyc2VyLnByb3RvdHlwZS5wYXJzZVRlbXBsYXRlRWxlbWVudCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGNv
bnN0IHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIGNvbnN0IHJhdyA9IHRv
a2VuLnZhbHVlOworICAgICAgICAgICAgY29uc3QgY29va2VkID0gdG9rZW4uY29va2VkOworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVGVtcGxhdGVFbGVt
ZW50KHsgcmF3LCBjb29rZWQgfSwgdG9rZW4udGFpbCkpOworICAgICAgICB9CisgICAgICAgIHBh
cnNlVGVtcGxhdGVFbGVtZW50KCkgewogICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5
cGUgIT09IDEwIC8qIFRlbXBsYXRlICovKSB7CiAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1Vu
ZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2Vu
KCk7Ci0gICAgICAgICAgICB2YXIgcmF3ID0gdG9rZW4udmFsdWU7Ci0gICAgICAgICAgICB2YXIg
Y29va2VkID0gdG9rZW4uY29va2VkOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuVGVtcGxhdGVFbGVtZW50KHsgcmF3OiByYXcsIGNvb2tlZDogY29va2Vk
IH0sIHRva2VuLnRhaWwpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5w
YXJzZVRlbXBsYXRlTGl0ZXJhbCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgZXhwcmVzc2lvbnMgPSBbXTsK
LSAgICAgICAgICAgIHZhciBxdWFzaXMgPSBbXTsKLSAgICAgICAgICAgIHZhciBxdWFzaSA9IHRo
aXMucGFyc2VUZW1wbGF0ZUhlYWQoKTsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsK
KyAgICAgICAgICAgIGNvbnN0IHJhdyA9IHRva2VuLnZhbHVlOworICAgICAgICAgICAgY29uc3Qg
Y29va2VkID0gdG9rZW4uY29va2VkOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuVGVtcGxhdGVFbGVtZW50KHsgcmF3LCBjb29rZWQgfSwgdG9rZW4udGFp
bCkpOworICAgICAgICB9CisgICAgICAgIHBhcnNlVGVtcGxhdGVMaXRlcmFsKCkgeworICAgICAg
ICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3Qg
ZXhwcmVzc2lvbnMgPSBbXTsKKyAgICAgICAgICAgIGNvbnN0IHF1YXNpcyA9IFtdOworICAgICAg
ICAgICAgbGV0IHF1YXNpID0gdGhpcy5wYXJzZVRlbXBsYXRlSGVhZCgpOwogICAgICAgICAgICAg
cXVhc2lzLnB1c2gocXVhc2kpOwogICAgICAgICAgICAgd2hpbGUgKCFxdWFzaS50YWlsKSB7CiAg
ICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTsK
QEAgLTI2NTIsOSArMjU2MSw5IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykg
eyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgcXVhc2lzLnB1c2gocXVhc2kp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IE5vZGUuVGVtcGxhdGVMaXRlcmFsKHF1YXNpcywgZXhwcmVzc2lvbnMpKTsKLSAgICAgICAg
fTsKKyAgICAgICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIv
I3NlYy1ncm91cGluZy1vcGVyYXRvcgotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnJlaW50ZXJw
cmV0RXhwcmVzc2lvbkFzUGF0dGVybiA9IGZ1bmN0aW9uIChleHByKSB7CisgICAgICAgIHJlaW50
ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGV4
cHIudHlwZSkgewogICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LklkZW50aWZp
ZXI6CiAgICAgICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguTWVtYmVyRXhwcmVzc2lv
bjoKQEAgLTI2NjcsNyArMjU3Niw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxl
cykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LkFycmF5RXhwcmVzc2lvbjoKICAgICAg
ICAgICAgICAgICAgICAgZXhwci50eXBlID0gc3ludGF4XzEuU3ludGF4LkFycmF5UGF0dGVybjsK
LSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByLmVsZW1lbnRzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhw
ci5lbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4
cHIuZWxlbWVudHNbaV0gIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByLmVsZW1lbnRzW2ldKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI2NzUsOCArMjU4NCw4IEBAIHJldHVybiAvKioq
KioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4Lk9i
amVjdEV4cHJlc3Npb246CiAgICAgICAgICAgICAgICAgICAgIGV4cHIudHlwZSA9IHN5bnRheF8x
LlN5bnRheC5PYmplY3RQYXR0ZXJuOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGV4cHIucHJvcGVydGllcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHByb3BlcnR5ID0gZXhwci5wcm9wZXJ0aWVzW2ldOworICAgICAgICAgICAgICAg
ICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cHIucHJvcGVydGllcy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBleHByLnByb3BlcnRpZXNb
aV07CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFz
UGF0dGVybihwcm9wZXJ0eS50eXBlID09PSBzeW50YXhfMS5TeW50YXguU3ByZWFkRWxlbWVudCA/
IHByb3BlcnR5IDogcHJvcGVydHkudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjY4OSw5ICsyNTk4LDkgQEAgcmV0dXJuIC8qKioq
KiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAg
ICAgICAgICAgLy8gQWxsb3cgb3RoZXIgbm9kZSB0eXBlIGZvciB0b2xlcmFudCBwYXJzaW5nLgog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAg
ICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUdyb3VwRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgIHZhciBleHByOworICAgICAgICB9CisgICAgICAgIHBhcnNlR3JvdXBF
eHByZXNzaW9uKCkgeworICAgICAgICAgICAgbGV0IGV4cHI7CiAgICAgICAgICAgICB0aGlzLmV4
cGVjdCgnKCcpOwogICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyknKSkgewogICAgICAgICAg
ICAgICAgIHRoaXMubmV4dFRva2VuKCk7CkBAIC0yNzA1LDggKzI2MTQsOCBAQCByZXR1cm4gLyoq
KioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAg
ICAgICAgIH07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAgICAgICAgIHZh
ciBwYXJhbXMgPSBbXTsKKyAgICAgICAgICAgICAgICBjb25zdCBzdGFydFRva2VuID0gdGhpcy5s
b29rYWhlYWQ7CisgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gW107CiAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMubWF0Y2goJy4uLicpKSB7CiAgICAgICAgICAgICAgICAgICAgIGV4cHIg
PSB0aGlzLnBhcnNlUmVzdEVsZW1lbnQocGFyYW1zKTsKICAgICAgICAgICAgICAgICAgICAgdGhp
cy5leHBlY3QoJyknKTsKQEAgLTI3MjAsMTEgKzI2MjksMTEgQEAgcmV0dXJuIC8qKioqKiovIChm
dW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAg
ICAgfTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBhcnJvdyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBsZXQg
YXJyb3cgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGlu
Z0VsZW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5pbmhlcml0
Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcsJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBleHByZXNzaW9ucyA9IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhw
cmVzc2lvbnMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fz
c2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Np
b25zLnB1c2goZXhwcik7CiAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5sb29r
YWhlYWQudHlwZSAhPT0gMiAvKiBFT0YgKi8pIHsKQEAgLTI3MzQsNyArMjY0Myw3IEBAIHJldHVy
biAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHByZXNz
aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcmVzc2lvbnNbaV0pOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFycm93ID0gdHJ1ZTsKQEAgLTI3NTQsNyArMjY2Myw3IEBAIHJldHVybiAvKioqKioq
LyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnPT4nKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhw
cmVzc2lvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHJlc3Npb25zW2ldKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcnJvdyA9IHRydWU7CkBAIC0yNzkxLDE0ICsyNzAwLDE0IEBAIHJldHVybiAv
KioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRo
aXMubG9va2FoZWFkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwci50eXBlID09PSBzeW50YXhfMS5TeW50
YXguU2VxdWVuY2VFeHByZXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHIuZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
ZXhwci5leHByZXNzaW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIu
ZXhwcmVzc2lvbnNbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBh
cmFtZXRlcnMgPSAoZXhwci50eXBlID09PSBzeW50YXhfMS5TeW50YXguU2VxdWVuY2VFeHByZXNz
aW9uID8gZXhwci5leHByZXNzaW9ucyA6IFtleHByXSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSAoZXhwci50eXBlID09PSBzeW50YXhfMS5TeW50
YXguU2VxdWVuY2VFeHByZXNzaW9uID8gZXhwci5leHByZXNzaW9ucyA6IFtleHByXSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlOiBBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbWV0ZXJzLApAQCAtMjgx
MSwxNCArMjcyMCwxNCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8g
d2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJldHVybiBleHByOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0
dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxlZnQtaGFuZC1zaWRlLWV4cHJlc3Np
b25zCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VBcmd1bWVudHMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHBhcnNlQXJndW1lbnRzKCkgewogICAgICAgICAgICAgdGhpcy5leHBlY3Qo
JygnKTsKLSAgICAgICAgICAgIHZhciBhcmdzID0gW107CisgICAgICAgICAgICBjb25zdCBhcmdz
ID0gW107CiAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSkgewogICAgICAgICAgICAg
ICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5t
YXRjaCgnLi4uJykgPyB0aGlzLnBhcnNlU3ByZWFkRWxlbWVudCgpIDoKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZXhwciA9IHRoaXMubWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVNwcmVhZEVs
ZW1lbnQoKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzb2xhdGVDb3ZlckdyYW1t
YXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKICAgICAgICAgICAgICAgICAgICAg
YXJncy5wdXNoKGV4cHIpOwogICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScp
KSB7CkBAIC0yODMyLDMwICsyNzQxLDMwIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9k
dWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0
aGlzLmV4cGVjdCgnKScpOwogICAgICAgICAgICAgcmV0dXJuIGFyZ3M7Ci0gICAgICAgIH07Ci0g
ICAgICAgIFBhcnNlci5wcm90b3R5cGUuaXNJZGVudGlmaWVyTmFtZSA9IGZ1bmN0aW9uICh0b2tl
bikgeworICAgICAgICB9CisgICAgICAgIGlzSWRlbnRpZmllck5hbWUodG9rZW4pIHsKICAgICAg
ICAgICAgIHJldHVybiB0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8gfHwKICAgICAg
ICAgICAgICAgICB0b2tlbi50eXBlID09PSA0IC8qIEtleXdvcmQgKi8gfHwKICAgICAgICAgICAg
ICAgICB0b2tlbi50eXBlID09PSAxIC8qIEJvb2xlYW5MaXRlcmFsICovIHx8CiAgICAgICAgICAg
ICAgICAgdG9rZW4udHlwZSA9PT0gNSAvKiBOdWxsTGl0ZXJhbCAqLzsKLSAgICAgICAgfTsKLSAg
ICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUlkZW50aWZpZXJOYW1lID0gZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAg
IHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VJ
ZGVudGlmaWVyTmFtZSgpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKICAgICAg
ICAgICAgIGlmICghdGhpcy5pc0lkZW50aWZpZXJOYW1lKHRva2VuKSkgewogICAgICAgICAgICAg
ICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWRlbnRpZmllcih0
b2tlbi52YWx1ZSkpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNl
TmV3RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhp
cy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgaWQgPSB0aGlzLnBhcnNlSWRlbnRpZmll
ck5hbWUoKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZU5ld0V4cHJlc3Npb24oKSB7CisgICAg
ICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25z
dCBpZCA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOwogICAgICAgICAgICAgYXNzZXJ0XzEu
YXNzZXJ0KGlkLm5hbWUgPT09ICduZXcnLCAnTmV3IGV4cHJlc3Npb24gbXVzdCBzdGFydCB3aXRo
IGBuZXdgJyk7Ci0gICAgICAgICAgICB2YXIgZXhwcjsKKyAgICAgICAgICAgIGxldCBleHByOwog
ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJy4nKSkgewogICAgICAgICAgICAgICAgIHRoaXMu
bmV4dFRva2VuKCk7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09
IDMgLyogSWRlbnRpZmllciAqLyAmJiB0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkgJiYgdGhp
cy5sb29rYWhlYWQudmFsdWUgPT09ICd0YXJnZXQnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBwcm9wZXJ0eSA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOwogICAgICAg
ICAgICAgICAgICAgICBleHByID0gbmV3IE5vZGUuTWV0YVByb3BlcnR5KGlkLCBwcm9wZXJ0eSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewpAQCAtMjg2NiwyNSAr
Mjc3NSwyNSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFj
a0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhp
cy5sb29rYWhlYWQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGNhbGxlZSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNl
TGVmdEhhbmRTaWRlRXhwcmVzc2lvbik7Ci0gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSB0aGlz
Lm1hdGNoKCcoJykgPyB0aGlzLnBhcnNlQXJndW1lbnRzKCkgOiBbXTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBjYWxsZWUgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxlZnRI
YW5kU2lkZUV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLm1h
dGNoKCcoJykgPyB0aGlzLnBhcnNlQXJndW1lbnRzKCkgOiBbXTsKICAgICAgICAgICAgICAgICBl
eHByID0gbmV3IE5vZGUuTmV3RXhwcmVzc2lvbihjYWxsZWUsIGFyZ3MpOwogICAgICAgICAgICAg
ICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgZXhwcik7Ci0gICAgICAg
IH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VBc3luY0FyZ3VtZW50ID0gZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgdmFyIGFyZyA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbigpOworICAgICAgICB9CisgICAgICAgIHBhcnNlQXN5bmNBcmd1bWVudCgpIHsKKyAgICAg
ICAgICAgIGNvbnN0IGFyZyA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwogICAg
ICAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51
bGw7CiAgICAgICAgICAgICByZXR1cm4gYXJnOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlQXN5bmNBcmd1bWVudHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIH0K
KyAgICAgICAgcGFyc2VBc3luY0FyZ3VtZW50cygpIHsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0
KCcoJyk7Ci0gICAgICAgICAgICB2YXIgYXJncyA9IFtdOworICAgICAgICAgICAgY29uc3QgYXJn
cyA9IFtdOwogICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykpIHsKICAgICAgICAgICAg
ICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMu
bWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKSA6CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLm1hdGNoKCcuLi4nKSA/IHRoaXMucGFyc2VTcHJlYWRF
bGVtZW50KCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc29sYXRlQ292ZXJHcmFt
bWFyKHRoaXMucGFyc2VBc3luY0FyZ3VtZW50KTsKICAgICAgICAgICAgICAgICAgICAgYXJncy5w
dXNoKGV4cHIpOwogICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7CkBA
IC0yODk4LDI5ICsyODA3LDI5IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykg
eyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0aGlzLmV4
cGVjdCgnKScpOwogICAgICAgICAgICAgcmV0dXJuIGFyZ3M7Ci0gICAgICAgIH07Ci0gICAgICAg
IFBhcnNlci5wcm90b3R5cGUubWF0Y2hJbXBvcnRDYWxsID0gZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgdmFyIG1hdGNoID0gdGhpcy5tYXRjaEtleXdvcmQoJ2ltcG9ydCcpOworICAgICAgICB9
CisgICAgICAgIG1hdGNoSW1wb3J0Q2FsbCgpIHsKKyAgICAgICAgICAgIGxldCBtYXRjaCA9IHRo
aXMubWF0Y2hLZXl3b3JkKCdpbXBvcnQnKTsKICAgICAgICAgICAgIGlmIChtYXRjaCkgewotICAg
ICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc2Nhbm5lci5zYXZlU3RhdGUoKTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc2Nhbm5lci5zYXZlU3RhdGUoKTsKICAgICAg
ICAgICAgICAgICB0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAg
dmFyIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7CisgICAgICAgICAgICAgICAgY29uc3QgbmV4
dCA9IHRoaXMuc2Nhbm5lci5sZXgoKTsKICAgICAgICAgICAgICAgICB0aGlzLnNjYW5uZXIucmVz
dG9yZVN0YXRlKHN0YXRlKTsKICAgICAgICAgICAgICAgICBtYXRjaCA9IChuZXh0LnR5cGUgPT09
IDcgLyogUHVuY3R1YXRvciAqLykgJiYgKG5leHQudmFsdWUgPT09ICcoJyk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VJbXBvcnRDYWxsID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg
dmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUlt
cG9ydENhbGwoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
CiAgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2ltcG9ydCcpOwogICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSW1wb3J0KCkpOwotICAgICAgICB9
OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFs
bG93Q2FsbCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhp
cy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICB2YXIgbWF5YmVBc3luYyA9IHRoaXMubWF0Y2hDb250
ZXh0dWFsS2V5d29yZCgnYXN5bmMnKTsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4g
PSB0aGlzLmNvbnRleHQuYWxsb3dJbjsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUxlZnRIYW5k
U2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKSB7CisgICAgICAgICAgICBjb25zdCBzdGFydFRva2Vu
ID0gdGhpcy5sb29rYWhlYWQ7CisgICAgICAgICAgICBjb25zdCBtYXliZUFzeW5jID0gdGhpcy5t
YXRjaENvbnRleHR1YWxLZXl3b3JkKCdhc3luYycpOworICAgICAgICAgICAgY29uc3QgcHJldmlv
dXNBbGxvd0luID0gdGhpcy5jb250ZXh0LmFsbG93SW47CiAgICAgICAgICAgICB0aGlzLmNvbnRl
eHQuYWxsb3dJbiA9IHRydWU7Ci0gICAgICAgICAgICB2YXIgZXhwcjsKKyAgICAgICAgICAgIGxl
dCBleHByOwogICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdzdXBlcicpICYmIHRo
aXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSkgewogICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlz
LmNyZWF0ZU5vZGUoKTsKICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwpAQCAtMjkz
NywyMCArMjg0NiwyMCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8g
d2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5k
aW5nRWxlbWVudCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNB
c3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3Qo
Jy4nKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5wYXJzZUlkZW50
aWZpZXJOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5w
YXJzZUlkZW50aWZpZXJOYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZp
bmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5TdGF0aWNNZW1iZXJF
eHByZXNzaW9uKGV4cHIsIHByb3BlcnR5KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJygnKSkgewotICAgICAgICAgICAgICAgICAgICB2
YXIgYXN5bmNBcnJvdyA9IG1heWJlQXN5bmMgJiYgKHN0YXJ0VG9rZW4ubGluZU51bWJlciA9PT0g
dGhpcy5sb29rYWhlYWQubGluZU51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFz
eW5jQXJyb3cgPSBtYXliZUFzeW5jICYmIChzdGFydFRva2VuLmxpbmVOdW1iZXIgPT09IHRoaXMu
bG9va2FoZWFkLmxpbmVOdW1iZXIpOwogICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQu
aXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRl
eHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBh
cmdzID0gYXN5bmNBcnJvdyA/IHRoaXMucGFyc2VBc3luY0FyZ3VtZW50cygpIDogdGhpcy5wYXJz
ZUFyZ3VtZW50cygpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gYXN5bmNBcnJv
dyA/IHRoaXMucGFyc2VBc3luY0FyZ3VtZW50cygpIDogdGhpcy5wYXJzZUFyZ3VtZW50cygpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoZXhwci50eXBlID09PSBzeW50YXhfMS5TeW50YXguSW1w
b3J0ICYmIGFyZ3MubGVuZ3RoICE9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5CYWRJbXBvcnRDYWxsQXJpdHkpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZp
bmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5DYWxsRXhwcmVzc2lv
bihleHByLCBhcmdzKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhc3luY0Fycm93ICYmIHRo
aXMubWF0Y2goJz0+JykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgYXJncy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oYXJnc1tpXSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gewpA
QCAtMjk2NCwxMiArMjg3MywxMiBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMp
IHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQu
aXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRl
eHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5l
eHBlY3QoJ1snKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5pc29s
YXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4
cHJlc3Npb24pOwogICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnXScpOwogICAgICAg
ICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRv
a2VuKSwgbmV3IE5vZGUuQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uKGV4cHIsIHByb3BlcnR5KSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubG9va2Fo
ZWFkLnR5cGUgPT09IDEwIC8qIFRlbXBsYXRlICovICYmIHRoaXMubG9va2FoZWFkLmhlYWQpIHsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIHF1YXNpID0gdGhpcy5wYXJzZVRlbXBsYXRlTGl0ZXJh
bCgpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWFzaSA9IHRoaXMucGFyc2VUZW1wbGF0
ZUxpdGVyYWwoKTsKICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhp
cy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lv
bihleHByLCBxdWFzaSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNl
IHsKQEAgLTI5NzgsMjYgKzI4ODcsMjYgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1
bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRo
aXMuY29udGV4dC5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOwogICAgICAgICAgICAgcmV0dXJu
IGV4cHI7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTdXBlciA9
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VTdXBlcigpIHsKKyAgICAgICAgICAgIGNvbnN0IG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgn
c3VwZXInKTsKICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnWycpICYmICF0aGlzLm1hdGNo
KCcuJykpIHsKICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMu
bG9va2FoZWFkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLlN1cGVyKCkpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgfQorICAgICAgICBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24oKSB7CiAgICAgICAg
ICAgICBhc3NlcnRfMS5hc3NlcnQodGhpcy5jb250ZXh0LmFsbG93SW4sICdjYWxsZWUgb2YgbmV3
IGV4cHJlc3Npb24gYWx3YXlzIGFsbG93IGluIGtleXdvcmQuJyk7Ci0gICAgICAgICAgICB2YXIg
bm9kZSA9IHRoaXMuc3RhcnROb2RlKHRoaXMubG9va2FoZWFkKTsKLSAgICAgICAgICAgIHZhciBl
eHByID0gKHRoaXMubWF0Y2hLZXl3b3JkKCdzdXBlcicpICYmIHRoaXMuY29udGV4dC5pbkZ1bmN0
aW9uQm9keSkgPyB0aGlzLnBhcnNlU3VwZXIoKSA6CisgICAgICAgICAgICBjb25zdCBub2RlID0g
dGhpcy5zdGFydE5vZGUodGhpcy5sb29rYWhlYWQpOworICAgICAgICAgICAgbGV0IGV4cHIgPSAo
dGhpcy5tYXRjaEtleXdvcmQoJ3N1cGVyJykgJiYgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5
KSA/IHRoaXMucGFyc2VTdXBlcigpIDoKICAgICAgICAgICAgICAgICB0aGlzLmluaGVyaXRDb3Zl
ckdyYW1tYXIodGhpcy5tYXRjaEtleXdvcmQoJ25ldycpID8gdGhpcy5wYXJzZU5ld0V4cHJlc3Np
b24gOiB0aGlzLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOwogICAgICAgICAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnWycpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnWycpOwotICAgICAgICAgICAgICAgICAgICB2
YXIgcHJvcGVydHkgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cHJlc3Np
b24pOworICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuaXNvbGF0ZUNv
dmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwcmVzc2lvbik7CiAgICAgICAgICAgICAgICAgICAgIHRo
aXMuZXhwZWN0KCddJyk7CiAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXpl
KG5vZGUsIG5ldyBOb2RlLkNvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbihleHByLCBwcm9wZXJ0eSkp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTMwMDUsMTEgKzI5MTQsMTEgQEAgcmV0dXJuIC8qKioq
KiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcuJyk7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBwcm9wZXJ0eSA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOwogICAgICAg
ICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5TdGF0aWNN
ZW1iZXJFeHByZXNzaW9uKGV4cHIsIHByb3BlcnR5KSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDEwIC8qIFRlbXBs
YXRlICovICYmIHRoaXMubG9va2FoZWFkLmhlYWQpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IHF1YXNpID0gdGhpcy5wYXJzZVRlbXBsYXRlTGl0ZXJhbCgpOworICAgICAgICAgICAgICAgICAg
ICBjb25zdCBxdWFzaSA9IHRoaXMucGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTsKICAgICAgICAgICAg
ICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVGFnZ2VkVGVtcGxh
dGVFeHByZXNzaW9uKGV4cHIsIHF1YXNpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGVsc2UgewpAQCAtMzAxNywxNCArMjkyNiwxNCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1
bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBleHByOwotICAgICAgICB9OworICAg
ICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXVw
ZGF0ZS1leHByZXNzaW9ucwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVXBkYXRlRXhw
cmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBleHByOwotICAgICAgICAg
ICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKyAgICAgICAgcGFyc2VVcGRhdGVF
eHByZXNzaW9uKCkgeworICAgICAgICAgICAgbGV0IGV4cHI7CisgICAgICAgICAgICBjb25zdCBz
dGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CiAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgn
KysnKSB8fCB0aGlzLm1hdGNoKCctLScpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKTsKLSAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0
aGlzLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0
Tm9kZShzdGFydFRva2VuKTsKKyAgICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMubmV4
dFRva2VuKCk7CiAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1h
cih0aGlzLnBhcnNlVW5hcnlFeHByZXNzaW9uKTsKICAgICAgICAgICAgICAgICBpZiAodGhpcy5j
b250ZXh0LnN0cmljdCAmJiBleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVy
ICYmIHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0
TEhTUHJlZml4KTsKQEAgLTMwMzIsNyArMjk0MSw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rp
b24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgaWYgKCF0
aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0KSB7CiAgICAgICAgICAgICAgICAgICAgIHRo
aXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1l
bnQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2YXIgcHJlZml4ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXggPSB0cnVlOwogICAgICAgICAgICAgICAg
IGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlVwZGF0ZUV4cHJlc3Npb24odG9r
ZW4udmFsdWUsIGV4cHIsIHByZWZpeCkpOwogICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5p
c0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQu
aXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwpAQCAtMzA0OSwyNyArMjk1OCwyNyBAQCByZXR1cm4g
LyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0
LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBvcGVyYXRvciA9IHRoaXMubmV4dFRva2VuKCkudmFsdWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcHJlZml4ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBvcGVyYXRvciA9IHRoaXMubmV4dFRva2VuKCkudmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBwcmVmaXggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4
cHIgPSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5V
cGRhdGVFeHByZXNzaW9uKG9wZXJhdG9yLCBleHByLCBwcmVmaXgpKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybiBleHByOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMz
OS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXVuYXJ5LW9wZXJhdG9ycwotICAgICAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlQXdhaXRFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAg
ICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgcGFyc2VBd2FpdEV4cHJl
c3Npb24oKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CiAg
ICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgdmFyIGFyZ3VtZW50ID0g
dGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworICAgICAgICAgICAgY29uc3QgYXJndW1lbnQg
PSB0aGlzLnBhcnNlVW5hcnlFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Bd2FpdEV4cHJlc3Npb24oYXJndW1lbnQpKTsKLSAgICAg
ICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVVuYXJ5RXhwcmVzc2lvbiA9IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBleHByOworICAgICAgICB9CisgICAgICAgIHBh
cnNlVW5hcnlFeHByZXNzaW9uKCkgeworICAgICAgICAgICAgbGV0IGV4cHI7CiAgICAgICAgICAg
ICBpZiAodGhpcy5tYXRjaCgnKycpIHx8IHRoaXMubWF0Y2goJy0nKSB8fCB0aGlzLm1hdGNoKCd+
JykgfHwgdGhpcy5tYXRjaCgnIScpIHx8CiAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaEtleXdv
cmQoJ2RlbGV0ZScpIHx8IHRoaXMubWF0Y2hLZXl3b3JkKCd2b2lkJykgfHwgdGhpcy5tYXRjaEtl
eXdvcmQoJ3R5cGVvZicpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0
Tm9kZSh0aGlzLmxvb2thaGVhZCk7Ci0gICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5u
ZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zdGFydE5vZGUo
dGhpcy5sb29rYWhlYWQpOworICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5uZXh0
VG9rZW4oKTsKICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFy
KHRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24pOwogICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhw
cikpOwogICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGV4cHIub3Bl
cmF0b3IgPT09ICdkZWxldGUnICYmIGV4cHIuYXJndW1lbnQudHlwZSA9PT0gc3ludGF4XzEuU3lu
dGF4LklkZW50aWZpZXIpIHsKQEAgLTMwODUsMjAgKzI5OTQsMjAgQEAgcmV0dXJuIC8qKioqKiov
IChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAg
ICBleHByID0gdGhpcy5wYXJzZVVwZGF0ZUV4cHJlc3Npb24oKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJldHVybiBleHByOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90
eXBlLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgIHZhciBl
eHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24p
OworICAgICAgICB9CisgICAgICAgIHBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKCkgewor
ICAgICAgICAgICAgY29uc3Qgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOworICAgICAgICAg
ICAgbGV0IGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVVuYXJ5RXhw
cmVzc2lvbik7CiAgICAgICAgICAgICBpZiAoZXhwci50eXBlICE9PSBzeW50YXhfMS5TeW50YXgu
VW5hcnlFeHByZXNzaW9uICYmIHRoaXMubWF0Y2goJyoqJykpIHsKICAgICAgICAgICAgICAgICB0
aGlzLm5leHRUb2tlbigpOwogICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1l
bnRUYXJnZXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5n
RWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gZXhwcjsKLSAgICAg
ICAgICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJz
ZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbik7CisgICAgICAgICAgICAgICAgY29uc3QgbGVmdCA9
IGV4cHI7CisgICAgICAgICAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmlzb2xhdGVDb3Zlckdy
YW1tYXIodGhpcy5wYXJzZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbik7CiAgICAgICAgICAgICAg
ICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBO
b2RlLkJpbmFyeUV4cHJlc3Npb24oJyoqJywgbGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBleHByOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAg
IC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWV4cC1vcGVyYXRvcgogICAg
ICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1tdWx0aXBsaWNhdGl2
ZS1vcGVyYXRvcnMKICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNz
ZWMtYWRkaXRpdmUtb3BlcmF0b3JzCkBAIC0zMTA3LDkgKzMwMTYsOSBAQCByZXR1cm4gLyoqKioq
Ki8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAvLyBo
dHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1lcXVhbGl0eS1vcGVyYXRvcnMKICAg
ICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYmluYXJ5LWJpdHdp
c2Utb3BlcmF0b3JzCiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8j
c2VjLWJpbmFyeS1sb2dpY2FsLW9wZXJhdG9ycwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLmJp
bmFyeVByZWNlZGVuY2UgPSBmdW5jdGlvbiAodG9rZW4pIHsKLSAgICAgICAgICAgIHZhciBvcCA9
IHRva2VuLnZhbHVlOwotICAgICAgICAgICAgdmFyIHByZWNlZGVuY2U7CisgICAgICAgIGJpbmFy
eVByZWNlZGVuY2UodG9rZW4pIHsKKyAgICAgICAgICAgIGNvbnN0IG9wID0gdG9rZW4udmFsdWU7
CisgICAgICAgICAgICBsZXQgcHJlY2VkZW5jZTsKICAgICAgICAgICAgIGlmICh0b2tlbi50eXBl
ID09PSA3IC8qIFB1bmN0dWF0b3IgKi8pIHsKICAgICAgICAgICAgICAgICBwcmVjZWRlbmNlID0g
dGhpcy5vcGVyYXRvclByZWNlZGVuY2Vbb3BdIHx8IDA7CiAgICAgICAgICAgICB9CkBAIC0zMTIw
LDIxICszMDI5LDIxIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3
ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgcHJlY2VkZW5jZSA9IDA7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICByZXR1cm4gcHJlY2VkZW5jZTsKLSAgICAgICAgfTsKLSAgICAg
ICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUJpbmFyeUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAg
ICAgdmFyIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50
aWF0aW9uRXhwcmVzc2lvbik7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVh
ZDsKLSAgICAgICAgICAgIHZhciBwcmVjID0gdGhpcy5iaW5hcnlQcmVjZWRlbmNlKHRva2VuKTsK
KyAgICAgICAgfQorICAgICAgICBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKSB7CisgICAgICAgICAg
ICBjb25zdCBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisgICAgICAgICAgICBsZXQgZXhw
ciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHBy
ZXNzaW9uKTsKKyAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisgICAg
ICAgICAgICBsZXQgcHJlYyA9IHRoaXMuYmluYXJ5UHJlY2VkZW5jZSh0b2tlbik7CiAgICAgICAg
ICAgICBpZiAocHJlYyA+IDApIHsKICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwog
ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsK
ICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgIHZhciBtYXJrZXJzID0gW3N0YXJ0VG9rZW4sIHRoaXMubG9va2FoZWFk
XTsKLSAgICAgICAgICAgICAgICB2YXIgbGVmdCA9IGV4cHI7Ci0gICAgICAgICAgICAgICAgdmFy
IHJpZ2h0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHBvbmVudGlhdGlv
bkV4cHJlc3Npb24pOwotICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IFtsZWZ0LCB0b2tlbi52
YWx1ZSwgcmlnaHRdOwotICAgICAgICAgICAgICAgIHZhciBwcmVjZWRlbmNlcyA9IFtwcmVjXTsK
KyAgICAgICAgICAgICAgICBjb25zdCBtYXJrZXJzID0gW3N0YXJ0VG9rZW4sIHRoaXMubG9va2Fo
ZWFkXTsKKyAgICAgICAgICAgICAgICBsZXQgbGVmdCA9IGV4cHI7CisgICAgICAgICAgICAgICAg
bGV0IHJpZ2h0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHBvbmVudGlh
dGlvbkV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gW2xlZnQsIHRv
a2VuLnZhbHVlLCByaWdodF07CisgICAgICAgICAgICAgICAgY29uc3QgcHJlY2VkZW5jZXMgPSBb
cHJlY107CiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAg
ICAgcHJlYyA9IHRoaXMuYmluYXJ5UHJlY2VkZW5jZSh0aGlzLmxvb2thaGVhZCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChwcmVjIDw9IDApIHsKQEAgLTMxNDMsMTEgKzMwNTIsMTEgQEAgcmV0
dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAg
ICAgICAgICAgICAgICAgICAgLy8gUmVkdWNlOiBtYWtlIGEgYmluYXJ5IGV4cHJlc3Npb24gZnJv
bSB0aGUgdGhyZWUgdG9wbW9zdCBlbnRyaWVzLgogICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
KHN0YWNrLmxlbmd0aCA+IDIpICYmIChwcmVjIDw9IHByZWNlZGVuY2VzW3ByZWNlZGVuY2VzLmxl
bmd0aCAtIDFdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBzdGFjay5wb3Ao
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvciA9IHN0YWNrLnBvcCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSBzdGFjay5wb3AoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2VzLnBvcCgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdCA9IHN0YWNrLnBvcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbWFy
a2Vycy5wb3AoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5zdGFy
dE5vZGUobWFya2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFdKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZShtYXJrZXJzW21hcmtlcnMubGVuZ3RoIC0g
MV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBOb2RlLkJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSkpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC8vIFNoaWZ0LgpAQCAt
MzE1Nyw0MSArMzA2Niw0MSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsg
Ly8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMu
aXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIEZpbmFsIHJlZHVjZSB0byBj
bGVhbi11cCB0aGUgc3RhY2suCi0gICAgICAgICAgICAgICAgdmFyIGkgPSBzdGFjay5sZW5ndGgg
LSAxOworICAgICAgICAgICAgICAgIGxldCBpID0gc3RhY2subGVuZ3RoIC0gMTsKICAgICAgICAg
ICAgICAgICBleHByID0gc3RhY2tbaV07Ci0gICAgICAgICAgICAgICAgdmFyIGxhc3RNYXJrZXIg
PSBtYXJrZXJzLnBvcCgpOworICAgICAgICAgICAgICAgIGxldCBsYXN0TWFya2VyID0gbWFya2Vy
cy5wb3AoKTsKICAgICAgICAgICAgICAgICB3aGlsZSAoaSA+IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIG1hcmtlciA9IG1hcmtlcnMucG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBsYXN0TGluZVN0YXJ0ID0gbGFzdE1hcmtlciAmJiBsYXN0TWFya2VyLmxpbmVTdGFydDsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZShtYXJrZXIsIGxhc3RM
aW5lU3RhcnQpOwotICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3IgPSBzdGFja1tpIC0g
MV07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlciA9IG1hcmtlcnMucG9wKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RMaW5lU3RhcnQgPSBsYXN0TWFya2VyICYmIGxh
c3RNYXJrZXIubGluZVN0YXJ0OworICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhp
cy5zdGFydE5vZGUobWFya2VyLCBsYXN0TGluZVN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgb3BlcmF0b3IgPSBzdGFja1tpIC0gMV07CiAgICAgICAgICAgICAgICAgICAgIGV4cHIg
PSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3Is
IHN0YWNrW2kgLSAyXSwgZXhwcikpOwogICAgICAgICAgICAgICAgICAgICBpIC09IDI7CiAgICAg
ICAgICAgICAgICAgICAgIGxhc3RNYXJrZXIgPSBtYXJrZXI7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAgIH07CisgICAg
ICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY29u
ZGl0aW9uYWwtb3BlcmF0b3IKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNvbmRpdGlv
bmFsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBzdGFydFRva2Vu
ID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMuaW5oZXJpdENv
dmVyR3JhbW1hcih0aGlzLnBhcnNlQmluYXJ5RXhwcmVzc2lvbik7CisgICAgICAgIHBhcnNlQ29u
ZGl0aW9uYWxFeHByZXNzaW9uKCkgeworICAgICAgICAgICAgY29uc3Qgc3RhcnRUb2tlbiA9IHRo
aXMubG9va2FoZWFkOworICAgICAgICAgICAgbGV0IGV4cHIgPSB0aGlzLmluaGVyaXRDb3Zlckdy
YW1tYXIodGhpcy5wYXJzZUJpbmFyeUV4cHJlc3Npb24pOwogICAgICAgICAgICAgaWYgKHRoaXMu
bWF0Y2goJz8nKSkgewogICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAg
ICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJbiA9IHRoaXMuY29udGV4dC5hbGxvd0luOworICAg
ICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQWxsb3dJbiA9IHRoaXMuY29udGV4dC5hbGxvd0lu
OwogICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICB2YXIgY29uc2VxdWVudCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBh
cnNlQXNzaWdubWVudEV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgIGNvbnN0IGNvbnNlcXVl
bnQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKTsKICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IHByZXZpb3VzQWxs
b3dJbjsKICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnOicpOwotICAgICAgICAgICAgICAg
IHZhciBhbHRlcm5hdGUgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICBjb25zdCBhbHRlcm5hdGUgPSB0aGlz
Lmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKICAg
ICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRv
a2VuKSwgbmV3IE5vZGUuQ29uZGl0aW9uYWxFeHByZXNzaW9uKGV4cHIsIGNvbnNlcXVlbnQsIGFs
dGVybmF0ZSkpOwogICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJn
ZXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVu
dCA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAg
ICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
MjYyLyNzZWMtYXNzaWdubWVudC1vcGVyYXRvcnMKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5j
aGVja1BhdHRlcm5QYXJhbSA9IGZ1bmN0aW9uIChvcHRpb25zLCBwYXJhbSkgeworICAgICAgICBj
aGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbSkgewogICAgICAgICAgICAgc3dpdGNoIChw
YXJhbS50eXBlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguSWRlbnRp
ZmllcjoKICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBh
cmFtLCBwYXJhbS5uYW1lKTsKQEAgLTMyMDMsMTUgKzMxMTIsMTUgQEAgcmV0dXJuIC8qKioqKiov
IChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5jaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbS5sZWZ0KTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50
YXguQXJyYXlQYXR0ZXJuOgotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHBhcmFtLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgcGFyYW0uZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYXJhbS5lbGVtZW50c1tpXSAhPT0gbnVsbCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0u
ZWxlbWVudHNbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Ug
c3ludGF4XzEuU3ludGF4Lk9iamVjdFBhdHRlcm46Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcGFyYW0ucHJvcGVydGllcy5sZW5ndGg7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gcGFyYW0ucHJvcGVydGllc1tpXTsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbS5wcm9wZXJ0aWVzLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHBhcmFt
LnByb3BlcnRpZXNbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrUGF0dGVy
blBhcmFtKG9wdGlvbnMsIChwcm9wZXJ0eS50eXBlID09PSBzeW50YXhfMS5TeW50YXguUmVzdEVs
ZW1lbnQpID8gcHJvcGVydHkgOiBwcm9wZXJ0eS52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMjE5LDExICszMTI4LDExIEBAIHJl
dHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb3B0
aW9ucy5zaW1wbGUgPSBvcHRpb25zLnNpbXBsZSAmJiAocGFyYW0gaW5zdGFuY2VvZiBOb2RlLklk
ZW50aWZpZXIpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnJlaW50ZXJw
cmV0QXNDb3ZlckZvcm1hbHNMaXN0ID0gZnVuY3Rpb24gKGV4cHIpIHsKLSAgICAgICAgICAgIHZh
ciBwYXJhbXMgPSBbZXhwcl07Ci0gICAgICAgICAgICB2YXIgb3B0aW9uczsKLSAgICAgICAgICAg
IHZhciBhc3luY0Fycm93ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmVpbnRlcnByZXRB
c0NvdmVyRm9ybWFsc0xpc3QoZXhwcikgeworICAgICAgICAgICAgbGV0IHBhcmFtcyA9IFtleHBy
XTsKKyAgICAgICAgICAgIGxldCBvcHRpb25zOworICAgICAgICAgICAgbGV0IGFzeW5jQXJyb3cg
PSBmYWxzZTsKICAgICAgICAgICAgIHN3aXRjaCAoZXhwci50eXBlKSB7CiAgICAgICAgICAgICAg
ICAgY2FzZSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcjoKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0zMjM4LDggKzMxNDcsOCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1v
ZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIHNpbXBsZTogdHJ1
ZSwKICAgICAgICAgICAgICAgICBwYXJhbVNldDoge30KICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgICAgIHZhciBwYXJhbSA9IHBhcmFtc1tpXTsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgcGFyYW0g
PSBwYXJhbXNbaV07CiAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09IHN5bnRheF8x
LlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybikgewogICAgICAgICAgICAgICAgICAgICBpZiAocGFy
YW0ucmlnaHQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LllpZWxkRXhwcmVzc2lvbikgewogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnJpZ2h0LmFyZ3VtZW50KSB7CkBAIC0zMjU4
LDE1ICszMTY3LDE1IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3
ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gcGFyYW07CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCB8fCAhdGhpcy5j
b250ZXh0LmFsbG93WWllbGQpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHBhcmFtcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW0gPSBw
YXJhbXNbaV07CisgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbXMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW0gPSBwYXJhbXNbaV07
CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS50eXBlID09PSBzeW50YXhfMS5TeW50YXgu
WWllbGRFeHByZXNzaW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5l
eHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChvcHRpb25zLm1l
c3NhZ2UgPT09IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5jb250ZXh0LnN0cmljdCA/IG9wdGlvbnMuc3RyaWN0
ZWQgOiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZDsKKyAgICAgICAgICAgICAgICBjb25zdCB0b2tl
biA9IHRoaXMuY29udGV4dC5zdHJpY3QgPyBvcHRpb25zLnN0cmljdGVkIDogb3B0aW9ucy5maXJz
dFJlc3RyaWN0ZWQ7CiAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0
b2tlbiwgb3B0aW9ucy5tZXNzYWdlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVy
biB7CkBAIC0zMjc2LDE5ICszMTg1LDE5IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9k
dWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmlj
dGVkOiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCwKICAgICAgICAgICAgICAgICBtZXNzYWdlOiBv
cHRpb25zLm1lc3NhZ2UKICAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHZhciBleHByOworICAgICAgICB9CisgICAgICAgIHBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24oKSB7CisgICAgICAgICAgICBsZXQgZXhwcjsKICAgICAgICAgICAgIGlmICghdGhp
cy5jb250ZXh0LmFsbG93WWllbGQgJiYgdGhpcy5tYXRjaEtleXdvcmQoJ3lpZWxkJykpIHsKICAg
ICAgICAgICAgICAgICBleHByID0gdGhpcy5wYXJzZVlpZWxkRXhwcmVzc2lvbigpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0YXJ0VG9r
ZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBzdGFydFRv
a2VuOworICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsK
KyAgICAgICAgICAgICAgICBsZXQgdG9rZW4gPSBzdGFydFRva2VuOwogICAgICAgICAgICAgICAg
IGV4cHIgPSB0aGlzLnBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLyAmJiAodG9rZW4ubGluZU51
bWJlciA9PT0gdGhpcy5sb29rYWhlYWQubGluZU51bWJlcikgJiYgdG9rZW4udmFsdWUgPT09ICdh
c3luYycpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09
IDMgLyogSWRlbnRpZmllciAqLyB8fCB0aGlzLm1hdGNoS2V5d29yZCgneWllbGQnKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZyA9IHRoaXMucGFyc2VQcmltYXJ5RXhwcmVzc2lv
bigpOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJnID0gdGhpcy5wYXJzZVByaW1h
cnlFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlaW50ZXJwcmV0
RXhwcmVzc2lvbkFzUGF0dGVybihhcmcpOwogICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBBcnJvd1BhcmFtZXRlclBsYWNl
SG9sZGVyLApAQCAtMzMwMSwyNSArMzIxMCwyNSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9u
KG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICAvLyBo
dHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJvdy1mdW5jdGlvbi1kZWZpbml0
aW9ucwogICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVt
ZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBpc0FzeW5jID0gZXhwci5hc3lu
YzsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSB0aGlzLnJlaW50ZXJwcmV0QXNDb3Zl
ckZvcm1hbHNMaXN0KGV4cHIpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0FzeW5jID0g
ZXhwci5hc3luYzsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMucmVpbnRl
cnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoZXhwcik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChs
aXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNMaW5lVGVybWluYXRv
cikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVk
VG9rZW4odGhpcy5sb29rYWhlYWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVF
cnJvciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3Qg
PSB0aGlzLmNvbnRleHQuc3RyaWN0OwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZp
b3VzQWxsb3dTdHJpY3REaXJlY3RpdmUgPSB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3Rp
dmU7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1N0cmljdCA9IHRoaXMu
Y29udGV4dC5zdHJpY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0Fs
bG93U3RyaWN0RGlyZWN0aXZlID0gdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZl
ID0gbGlzdC5zaW1wbGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxv
d1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgcHJldmlvdXNBd2FpdCA9IHRoaXMuY29udGV4dC5hd2FpdDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29udGV4dC5hbGxvd1lp
ZWxkOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBd2FpdCA9IHRoaXMu
Y29udGV4dC5hd2FpdDsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxv
d1lpZWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hd2Fp
dCA9IGlzQXN5bmM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuc3Rh
cnROb2RlKHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9
IHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5leHBlY3QoJz0+Jyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm9keSA9IHZvaWQg
MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCBib2R5OwogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMubWF0Y2goJ3snKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBwcmV2aW91c0FsbG93SW4gPSB0aGlzLmNvbnRleHQuYWxsb3dJbjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0FsbG93SW4gPSB0aGlzLmNvbnRleHQuYWxs
b3dJbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IHRoaXMucGFyc2VGdW5j
dGlvblNvdXJjZUVsZW1lbnRzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5j
b250ZXh0LmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47CkBAIC0zMzI3LDcgKzMyMzYsNyBAQCBy
ZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAog
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9keSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGV4cHJlc3Npb24gPSBib2R5LnR5cGUgIT09IHN5bnRheF8xLlN5bnRheC5CbG9j
a1N0YXRlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBi
b2R5LnR5cGUgIT09IHN5bnRheF8xLlN5bnRheC5CbG9ja1N0YXRlbWVudDsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGxpc3QuZmlyc3RSZXN0cmlj
dGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRU
b2tlbihsaXN0LmZpcnN0UmVzdHJpY3RlZCwgbGlzdC5tZXNzYWdlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KQEAgLTMzNDgsNyArMzI1Nyw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rp
b24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZExIU0lu
QXNzaWdubWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBleHByLnR5cGUgPT09IHN5bnRheF8x
LlN5bnRheC5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlk
ID0gZXhwcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGV4cHI7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRX
b3JkKGlkLm5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9s
ZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0TEhT
QXNzaWdubWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzM2NCwyMSAr
MzI3MywyMSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFj
a0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRF
eHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIG9wZXJhdG9yID0gdG9rZW4udmFsdWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJz
ZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9w
ZXJhdG9yID0gdG9rZW4udmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByaWdo
dCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24pOwogICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5z
dGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkFzc2lnbm1lbnRFeHByZXNzaW9uKG9wZXJh
dG9yLCBleHByLCByaWdodCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0
LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm4gZXhwcjsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzku
Z2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jb21tYS1vcGVyYXRvcgotICAgICAgICBQYXJzZXIucHJv
dG90eXBlLnBhcnNlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBz
dGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMu
aXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOworICAg
ICAgICBwYXJzZUV4cHJlc3Npb24oKSB7CisgICAgICAgICAgICBjb25zdCBzdGFydFRva2VuID0g
dGhpcy5sb29rYWhlYWQ7CisgICAgICAgICAgICBsZXQgZXhwciA9IHRoaXMuaXNvbGF0ZUNvdmVy
R3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwogICAgICAgICAgICAgaWYg
KHRoaXMubWF0Y2goJywnKSkgewotICAgICAgICAgICAgICAgIHZhciBleHByZXNzaW9ucyA9IFtd
OworICAgICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gW107CiAgICAgICAgICAgICAg
ICAgZXhwcmVzc2lvbnMucHVzaChleHByKTsKICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5s
b29rYWhlYWQudHlwZSAhPT0gMiAvKiBFT0YgKi8pIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KCF0aGlzLm1hdGNoKCcsJykpIHsKQEAgLTMzOTAsMTAgKzMyOTksMTAgQEAgcmV0dXJuIC8qKioq
KiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAg
ICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3
IE5vZGUuU2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICByZXR1cm4gZXhwcjsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAv
LyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1ibG9jawotICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0gPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgc3RhdGVtZW50OworICAgICAgICBwYXJzZVN0YXRlbWVudExpc3RJdGVtKCkg
eworICAgICAgICAgICAgbGV0IHN0YXRlbWVudDsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5p
c0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmlu
ZGluZ0VsZW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUg
PT09IDQgLyogS2V5d29yZCAqLykgewpAQCAtMzQzNiwxMSArMzM0NSwxMSBAQCByZXR1cm4gLyoq
KioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAg
ICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnQ7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VCbG9jayA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VCbG9jaygp
IHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAgICAgICAg
ICAgIHRoaXMuZXhwZWN0KCd7Jyk7Ci0gICAgICAgICAgICB2YXIgYmxvY2sgPSBbXTsKKyAgICAg
ICAgICAgIGNvbnN0IGJsb2NrID0gW107CiAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAg
ICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd9JykpIHsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0zNDQ5LDE4ICszMzU4LDE4IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24o
bW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB0aGlzLmV4cGVjdCgnfScpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuQmxvY2tTdGF0ZW1lbnQoYmxvY2spKTsKLSAgICAgICAgfTsKKyAgICAgICAg
fQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1sZXQtYW5k
LWNvbnN0LWRlY2xhcmF0aW9ucwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTGV4aWNh
bEJpbmRpbmcgPSBmdW5jdGlvbiAoa2luZCwgb3B0aW9ucykgewotICAgICAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKLSAg
ICAgICAgICAgIHZhciBpZCA9IHRoaXMucGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCk7CisgICAg
ICAgIHBhcnNlTGV4aWNhbEJpbmRpbmcoa2luZCwgb3B0aW9ucykgeworICAgICAgICAgICAgY29u
c3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3QgcGFyYW1zID0g
W107CisgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMucGFyc2VQYXR0ZXJuKHBhcmFtcywga2lu
ZCk7CiAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBpZC50eXBlID09PSBz
eW50YXhfMS5TeW50YXguSWRlbnRpZmllcikgewogICAgICAgICAgICAgICAgIGlmICh0aGlzLnNj
YW5uZXIuaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgewogICAgICAgICAgICAgICAgICAgICB0
aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgaW5pdCA9IG51
bGw7CisgICAgICAgICAgICBsZXQgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICBpZiAoa2luZCA9
PT0gJ2NvbnN0JykgewogICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaEtleXdvcmQoJ2lu
JykgJiYgIXRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7CkBAIC0zNDc3LDQ1ICszMzg2LDQ1IEBAIHJl
dHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAg
ICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdG9yKGlkLCBpbml0
KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VCaW5kaW5nTGlz
dCA9IGZ1bmN0aW9uIChraW5kLCBvcHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgbGlzdCA9IFt0
aGlzLnBhcnNlTGV4aWNhbEJpbmRpbmcoa2luZCwgb3B0aW9ucyldOworICAgICAgICB9CisgICAg
ICAgIHBhcnNlQmluZGluZ0xpc3Qoa2luZCwgb3B0aW9ucykgeworICAgICAgICAgICAgY29uc3Qg
bGlzdCA9IFt0aGlzLnBhcnNlTGV4aWNhbEJpbmRpbmcoa2luZCwgb3B0aW9ucyldOwogICAgICAg
ICAgICAgd2hpbGUgKHRoaXMubWF0Y2goJywnKSkgewogICAgICAgICAgICAgICAgIHRoaXMubmV4
dFRva2VuKCk7CiAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKHRoaXMucGFyc2VMZXhpY2FsQmlu
ZGluZyhraW5kLCBvcHRpb25zKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4g
bGlzdDsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5pc0xleGljYWxEZWNs
YXJhdGlvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc2Nh
bm5lci5zYXZlU3RhdGUoKTsKKyAgICAgICAgfQorICAgICAgICBpc0xleGljYWxEZWNsYXJhdGlv
bigpIHsKKyAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zY2FubmVyLnNhdmVTdGF0ZSgp
OwogICAgICAgICAgICAgdGhpcy5zY2FubmVyLnNjYW5Db21tZW50cygpOwotICAgICAgICAgICAg
dmFyIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7CisgICAgICAgICAgICBjb25zdCBuZXh0ID0g
dGhpcy5zY2FubmVyLmxleCgpOwogICAgICAgICAgICAgdGhpcy5zY2FubmVyLnJlc3RvcmVTdGF0
ZShzdGF0ZSk7CiAgICAgICAgICAgICByZXR1cm4gKG5leHQudHlwZSA9PT0gMyAvKiBJZGVudGlm
aWVyICovKSB8fAogICAgICAgICAgICAgICAgIChuZXh0LnR5cGUgPT09IDcgLyogUHVuY3R1YXRv
ciAqLyAmJiBuZXh0LnZhbHVlID09PSAnWycpIHx8CiAgICAgICAgICAgICAgICAgKG5leHQudHlw
ZSA9PT0gNyAvKiBQdW5jdHVhdG9yICovICYmIG5leHQudmFsdWUgPT09ICd7JykgfHwKICAgICAg
ICAgICAgICAgICAobmV4dC50eXBlID09PSA0IC8qIEtleXdvcmQgKi8gJiYgbmV4dC52YWx1ZSA9
PT0gJ2xldCcpIHx8CiAgICAgICAgICAgICAgICAgKG5leHQudHlwZSA9PT0gNCAvKiBLZXl3b3Jk
ICovICYmIG5leHQudmFsdWUgPT09ICd5aWVsZCcpOwotICAgICAgICB9OwotICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlTGV4aWNhbERlY2xhcmF0aW9uID0gZnVuY3Rpb24gKG9wdGlvbnMp
IHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAg
ICB2YXIga2luZCA9IHRoaXMubmV4dFRva2VuKCkudmFsdWU7CisgICAgICAgIH0KKyAgICAgICAg
cGFyc2VMZXhpY2FsRGVjbGFyYXRpb24ob3B0aW9ucykgeworICAgICAgICAgICAgY29uc3Qgbm9k
ZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3Qga2luZCA9IHRoaXMubmV4
dFRva2VuKCkudmFsdWU7CiAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoa2luZCA9PT0gJ2xl
dCcgfHwga2luZCA9PT0gJ2NvbnN0JywgJ0xleGljYWwgZGVjbGFyYXRpb24gbXVzdCBiZSBlaXRo
ZXIgbGV0IG9yIGNvbnN0Jyk7Ci0gICAgICAgICAgICB2YXIgZGVjbGFyYXRpb25zID0gdGhpcy5w
YXJzZUJpbmRpbmdMaXN0KGtpbmQsIG9wdGlvbnMpOworICAgICAgICAgICAgY29uc3QgZGVjbGFy
YXRpb25zID0gdGhpcy5wYXJzZUJpbmRpbmdMaXN0KGtpbmQsIG9wdGlvbnMpOwogICAgICAgICAg
ICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5h
bGl6ZShub2RlLCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2lu
ZCkpOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRo
dWIuaW8vZWNtYTI2Mi8jc2VjLWRlc3RydWN0dXJpbmctYmluZGluZy1wYXR0ZXJucwotICAgICAg
ICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQmluZGluZ1Jlc3RFbGVtZW50ID0gZnVuY3Rpb24gKHBh
cmFtcywga2luZCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
KyAgICAgICAgcGFyc2VCaW5kaW5nUmVzdEVsZW1lbnQocGFyYW1zLCBraW5kKSB7CisgICAgICAg
ICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CiAgICAgICAgICAgICB0aGlzLmV4
cGVjdCgnLi4uJyk7Ci0gICAgICAgICAgICB2YXIgYXJnID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFy
YW1zLCBraW5kKTsKKyAgICAgICAgICAgIGNvbnN0IGFyZyA9IHRoaXMucGFyc2VQYXR0ZXJuKHBh
cmFtcywga2luZCk7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5SZXN0RWxlbWVudChhcmcpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZUFycmF5UGF0dGVybiA9IGZ1bmN0aW9uIChwYXJhbXMsIGtpbmQpIHsKLSAgICAg
ICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAg
cGFyc2VBcnJheVBhdHRlcm4ocGFyYW1zLCBraW5kKSB7CisgICAgICAgICAgICBjb25zdCBub2Rl
ID0gdGhpcy5jcmVhdGVOb2RlKCk7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnWycpOwotICAg
ICAgICAgICAgdmFyIGVsZW1lbnRzID0gW107CisgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9
IFtdOwogICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCddJykpIHsKICAgICAgICAgICAg
ICAgICBpZiAodGhpcy5tYXRjaCgnLCcpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4
dFRva2VuKCk7CkBAIC0zNTM2LDIzICszNDQ1LDIzIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rp
b24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB0aGlzLmV4cGVjdCgnXScpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuQXJyYXlQYXR0ZXJuKGVsZW1lbnRzKSk7Ci0gICAgICAgIH07Ci0gICAg
ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VQcm9wZXJ0eVBhdHRlcm4gPSBmdW5jdGlvbiAocGFy
YW1zLCBraW5kKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwot
ICAgICAgICAgICAgdmFyIGNvbXB1dGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgc2hvcnRo
YW5kID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgbWV0aG9kID0gZmFsc2U7Ci0gICAgICAgICAg
ICB2YXIga2V5OwotICAgICAgICAgICAgdmFyIHZhbHVlOworICAgICAgICB9CisgICAgICAgIHBh
cnNlUHJvcGVydHlQYXR0ZXJuKHBhcmFtcywga2luZCkgeworICAgICAgICAgICAgY29uc3Qgbm9k
ZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgbGV0IGNvbXB1dGVkID0gZmFsc2U7
CisgICAgICAgICAgICBsZXQgc2hvcnRoYW5kID0gZmFsc2U7CisgICAgICAgICAgICBjb25zdCBt
ZXRob2QgPSBmYWxzZTsKKyAgICAgICAgICAgIGxldCBrZXk7CisgICAgICAgICAgICBsZXQgdmFs
dWU7CiAgICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gMyAvKiBJZGVudGlm
aWVyICovKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGtleVRva2VuID0gdGhpcy5sb29rYWhlYWQ7
CisgICAgICAgICAgICAgICAgY29uc3Qga2V5VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKICAgICAg
ICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0gICAgICAg
ICAgICAgICAgdmFyIGluaXQgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZp
ZXIoa2V5VG9rZW4udmFsdWUpKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbml0ID0gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVyKGtleVRva2VuLnZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJz0nKSkgewogICAgICAgICAgICAgICAgICAgICBw
YXJhbXMucHVzaChrZXlUb2tlbik7CiAgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBleHByID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24oKTsKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmZpbmFsaXplKHRoaXMuc3Rh
cnROb2RlKGtleVRva2VuKSwgbmV3IE5vZGUuQXNzaWdubWVudFBhdHRlcm4oaW5pdCwgZXhwcikp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5tYXRj
aCgnOicpKSB7CkBAIC0zNTcyLDExICszNDgxLDExIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rp
b24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgdmFsdWUg
PSB0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcywga2luZCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Qcm9w
ZXJ0eSgnaW5pdCcsIGtleSwgY29tcHV0ZWQsIHZhbHVlLCBtZXRob2QsIHNob3J0aGFuZCkpOwot
ICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUmVzdFByb3BlcnR5ID0g
ZnVuY3Rpb24gKHBhcmFtcywga2luZCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZVJlc3RQcm9wZXJ0eShwYXJhbXMs
IGtpbmQpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAg
ICAgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTsKLSAgICAgICAgICAgIHZhciBhcmcgPSB0aGlz
LnBhcnNlUGF0dGVybihwYXJhbXMpOworICAgICAgICAgICAgY29uc3QgYXJnID0gdGhpcy5wYXJz
ZVBhdHRlcm4ocGFyYW1zKTsKICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCc9JykpIHsKICAg
ICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5EZWZhdWx0
UmVzdFByb3BlcnR5KTsKICAgICAgICAgICAgIH0KQEAgLTM1ODQsMTAgKzM0OTMsMTAgQEAgcmV0
dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAg
ICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5Qcm9wZXJ0
eUFmdGVyUmVzdFByb3BlcnR5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlJlc3RFbGVtZW50KGFyZykpOwotICAgICAgICB9
OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlT2JqZWN0UGF0dGVybiA9IGZ1bmN0aW9u
IChwYXJhbXMsIGtpbmQpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2Rl
KCk7Ci0gICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdOworICAgICAgICB9CisgICAgICAg
IHBhcnNlT2JqZWN0UGF0dGVybihwYXJhbXMsIGtpbmQpIHsKKyAgICAgICAgICAgIGNvbnN0IG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBb
XTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7CiAgICAgICAgICAgICB3aGlsZSAoIXRo
aXMubWF0Y2goJ30nKSkgewogICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh0aGlzLm1h
dGNoKCcuLi4nKSA/IHRoaXMucGFyc2VSZXN0UHJvcGVydHkocGFyYW1zLCBraW5kKSA6IHRoaXMu
cGFyc2VQcm9wZXJ0eVBhdHRlcm4ocGFyYW1zLCBraW5kKSk7CkBAIC0zNTk3LDkgKzM1MDYsOSBA
QCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJh
cAogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGhpcy5leHBlY3QoJ30nKTsKICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLk9iamVjdFBhdHRlcm4ocHJv
cGVydGllcykpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUGF0
dGVybiA9IGZ1bmN0aW9uIChwYXJhbXMsIGtpbmQpIHsKLSAgICAgICAgICAgIHZhciBwYXR0ZXJu
OworICAgICAgICB9CisgICAgICAgIHBhcnNlUGF0dGVybihwYXJhbXMsIGtpbmQpIHsKKyAgICAg
ICAgICAgIGxldCBwYXR0ZXJuOwogICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJ1snKSkgewog
ICAgICAgICAgICAgICAgIHBhdHRlcm4gPSB0aGlzLnBhcnNlQXJyYXlQYXR0ZXJuKHBhcmFtcywg
a2luZCk7CiAgICAgICAgICAgICB9CkBAIC0zNjE0LDI0ICszNTIzLDI0IEBAIHJldHVybiAvKioq
KioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAg
ICAgICAgcGF0dGVybiA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoa2luZCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gcGF0dGVybjsKLSAgICAgICAgfTsKLSAgICAg
ICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVBhdHRlcm5XaXRoRGVmYXVsdCA9IGZ1bmN0aW9uIChw
YXJhbXMsIGtpbmQpIHsKLSAgICAgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhl
YWQ7Ci0gICAgICAgICAgICB2YXIgcGF0dGVybiA9IHRoaXMucGFyc2VQYXR0ZXJuKHBhcmFtcywg
a2luZCk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1z
LCBraW5kKSB7CisgICAgICAgICAgICBjb25zdCBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7
CisgICAgICAgICAgICBsZXQgcGF0dGVybiA9IHRoaXMucGFyc2VQYXR0ZXJuKHBhcmFtcywga2lu
ZCk7CiAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7CiAgICAgICAgICAgICAgICAg
dGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxk
ID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CisgICAgICAgICAgICAgICAgY29uc3QgcHJldmlv
dXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CiAgICAgICAgICAgICAgICAg
dGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHZhciByaWdo
dCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24pOworICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFt
bWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CiAgICAgICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CiAgICAgICAgICAgICAg
ICAgcGF0dGVybiA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5l
dyBOb2RlLkFzc2lnbm1lbnRQYXR0ZXJuKHBhdHRlcm4sIHJpZ2h0KSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICByZXR1cm4gcGF0dGVybjsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAg
ICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy12YXJpYWJsZS1zdGF0
ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVZhcmlhYmxlSWRlbnRpZmllciA9
IGZ1bmN0aW9uIChraW5kKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9k
ZSgpOwotICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAg
cGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoa2luZCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9
IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLm5leHRU
b2tlbigpOwogICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyAm
JiB0b2tlbi52YWx1ZSA9PT0gJ3lpZWxkJykgewogICAgICAgICAgICAgICAgIGlmICh0aGlzLmNv
bnRleHQuc3RyaWN0KSB7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVj
dGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsK
QEAgLTM2NTQsMTcgKzM1NjMsMTcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVz
KSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5l
eHBlY3RlZFRva2VuKHRva2VuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIodG9rZW4udmFsdWUpKTsKLSAg
ICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVZhcmlhYmxlRGVjbGFyYXRp
b24gPSBmdW5jdGlvbiAob3B0aW9ucykgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKLSAgICAgICAgICAgIHZh
ciBpZCA9IHRoaXMucGFyc2VQYXR0ZXJuKHBhcmFtcywgJ3ZhcicpOworICAgICAgICB9CisgICAg
ICAgIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihvcHRpb25zKSB7CisgICAgICAgICAgICBjb25z
dCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBb
XTsKKyAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFyYW1zLCAndmFy
Jyk7CiAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBpZC50eXBlID09PSBz
eW50YXhfMS5TeW50YXguSWRlbnRpZmllcikgewogICAgICAgICAgICAgICAgIGlmICh0aGlzLnNj
YW5uZXIuaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgewogICAgICAgICAgICAgICAgICAgICB0
aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgaW5pdCA9IG51
bGw7CisgICAgICAgICAgICBsZXQgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICBpZiAodGhpcy5t
YXRjaCgnPScpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAg
ICAgICAgICBpbml0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbik7CkBAIC0zNjczLDUxICszNTgyLDUxIEBAIHJldHVybiAvKioqKioqLyAo
ZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAg
dGhpcy5leHBlY3QoJz0nKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCkpOwot
ICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVmFyaWFibGVEZWNsYXJh
dGlvbkxpc3QgPSBmdW5jdGlvbiAob3B0aW9ucykgewotICAgICAgICAgICAgdmFyIG9wdCA9IHsg
aW5Gb3I6IG9wdGlvbnMuaW5Gb3IgfTsKLSAgICAgICAgICAgIHZhciBsaXN0ID0gW107CisgICAg
ICAgIH0KKyAgICAgICAgcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChvcHRpb25zKSB7Cisg
ICAgICAgICAgICBjb25zdCBvcHQgPSB7IGluRm9yOiBvcHRpb25zLmluRm9yIH07CisgICAgICAg
ICAgICBjb25zdCBsaXN0ID0gW107CiAgICAgICAgICAgICBsaXN0LnB1c2godGhpcy5wYXJzZVZh
cmlhYmxlRGVjbGFyYXRpb24ob3B0KSk7CiAgICAgICAgICAgICB3aGlsZSAodGhpcy5tYXRjaCgn
LCcpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAgICAgICAg
ICBsaXN0LnB1c2godGhpcy5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24ob3B0KSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbGlzdDsKLSAgICAgICAgfTsKLSAgICAgICAgUGFy
c2VyLnByb3RvdHlwZS5wYXJzZVZhcmlhYmxlU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgfQorICAgICAg
ICBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRo
aXMuY3JlYXRlTm9kZSgpOwogICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCd2YXInKTsK
LSAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbnMgPSB0aGlzLnBhcnNlVmFyaWFibGVEZWNsYXJh
dGlvbkxpc3QoeyBpbkZvcjogZmFsc2UgfSk7CisgICAgICAgICAgICBjb25zdCBkZWNsYXJhdGlv
bnMgPSB0aGlzLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoeyBpbkZvcjogZmFsc2UgfSk7
CiAgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKICAgICAgICAgICAgIHJldHVy
biB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFy
YXRpb25zLCAndmFyJykpOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBz
Oi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVtcHR5LXN0YXRlbWVudAotICAgICAgICBQ
YXJzZXIucHJvdG90eXBlLnBhcnNlRW1wdHlTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICBwYXJzZUVtcHR5
U3RhdGVtZW50KCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OwogICAgICAgICAgICAgdGhpcy5leHBlY3QoJzsnKTsKICAgICAgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkVtcHR5U3RhdGVtZW50KCkpOwotICAgICAgICB9Owor
ICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2Vj
LWV4cHJlc3Npb24tc3RhdGVtZW50Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VFeHBy
ZXNzaW9uU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5wYXJzZUV4cHJl
c3Npb24oKTsKKyAgICAgICAgcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCkgeworICAgICAgICAg
ICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3QgZXhw
ciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1p
Y29sb24oKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LkV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcikpOwotICAgICAgICB9OworICAgICAgICB9CiAgICAg
ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWlmLXN0YXRlbWVudAot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlSWZDbGF1c2UgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHBhcnNlSWZDbGF1c2UoKSB7CiAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0
cmljdCAmJiB0aGlzLm1hdGNoS2V5d29yZCgnZnVuY3Rpb24nKSkgewogICAgICAgICAgICAgICAg
IHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlU3RhdGVtZW50KCk7
Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJZlN0YXRlbWVudCA9
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
Ci0gICAgICAgICAgICB2YXIgY29uc2VxdWVudDsKLSAgICAgICAgICAgIHZhciBhbHRlcm5hdGUg
PSBudWxsOworICAgICAgICB9CisgICAgICAgIHBhcnNlSWZTdGF0ZW1lbnQoKSB7CisgICAgICAg
ICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBsZXQgY29u
c2VxdWVudDsKKyAgICAgICAgICAgIGxldCBhbHRlcm5hdGUgPSBudWxsOwogICAgICAgICAgICAg
dGhpcy5leHBlY3RLZXl3b3JkKCdpZicpOwogICAgICAgICAgICAgdGhpcy5leHBlY3QoJygnKTsK
LSAgICAgICAgICAgIHZhciB0ZXN0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAg
ICAgIGNvbnN0IHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOwogICAgICAgICAgICAgaWYg
KCF0aGlzLm1hdGNoKCcpJykgJiYgdGhpcy5jb25maWcudG9sZXJhbnQpIHsKICAgICAgICAgICAg
ICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpOwogICAg
ICAgICAgICAgICAgIGNvbnNlcXVlbnQgPSB0aGlzLmZpbmFsaXplKHRoaXMuY3JlYXRlTm9kZSgp
LCBuZXcgTm9kZS5FbXB0eVN0YXRlbWVudCgpKTsKQEAgLTM3MzEsMTggKzM2NDAsMTggQEAgcmV0
dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZlN0YXRlbWVudCh0ZXN0LCBjb25zZXF1ZW50LCBhbHRl
cm5hdGUpKTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzku
Z2l0aHViLmlvL2VjbWEyNjIvI3NlYy1kby13aGlsZS1zdGF0ZW1lbnQKLSAgICAgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZURvV2hpbGVTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICBwYXJzZURvV2hpbGVT
dGF0ZW1lbnQoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
CiAgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2RvJyk7Ci0gICAgICAgICAgICB2YXIg
cHJldmlvdXNJbkl0ZXJhdGlvbiA9IHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbjsKKyAgICAgICAg
ICAgIGNvbnN0IHByZXZpb3VzSW5JdGVyYXRpb24gPSB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb247
CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSB0cnVlOwotICAgICAgICAg
ICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBjb25zdCBi
b2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmlu
SXRlcmF0aW9uID0gcHJldmlvdXNJbkl0ZXJhdGlvbjsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0
S2V5d29yZCgnd2hpbGUnKTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7Ci0gICAgICAg
ICAgICB2YXIgdGVzdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBjb25z
dCB0ZXN0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKICAgICAgICAgICAgIGlmICghdGhpcy5t
YXRjaCgnKScpICYmIHRoaXMuY29uZmlnLnRvbGVyYW50KSB7CiAgICAgICAgICAgICAgICAgdGhp
cy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsKICAgICAgICAgICAg
IH0KQEAgLTM3NTMsNTEgKzM2NjIsNjUgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1
bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Eb1do
aWxlU3RhdGVtZW50KGJvZHksIHRlc3QpKTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAg
ICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy13aGlsZS1zdGF0ZW1lbnQK
LSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVdoaWxlU3RhdGVtZW50ID0gZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAg
ICAgIHZhciBib2R5OworICAgICAgICBwYXJzZVdoaWxlU3RhdGVtZW50KCkgeworICAgICAgICAg
ICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgbGV0IGJvZHk7
CiAgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3doaWxlJyk7CiAgICAgICAgICAgICB0
aGlzLmV4cGVjdCgnKCcpOwotICAgICAgICAgICAgdmFyIHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVz
c2lvbigpOworICAgICAgICAgICAgY29uc3QgdGVzdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7
CiAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSAmJiB0aGlzLmNvbmZpZy50b2xlcmFu
dCkgewogICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5u
ZXh0VG9rZW4oKSk7CiAgICAgICAgICAgICAgICAgYm9keSA9IHRoaXMuZmluYWxpemUodGhpcy5j
cmVhdGVOb2RlKCksIG5ldyBOb2RlLkVtcHR5U3RhdGVtZW50KCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKLSAg
ICAgICAgICAgICAgICB2YXIgcHJldmlvdXNJbkl0ZXJhdGlvbiA9IHRoaXMuY29udGV4dC5pbkl0
ZXJhdGlvbjsKKyAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0luSXRlcmF0aW9uID0gdGhp
cy5jb250ZXh0LmluSXRlcmF0aW9uOwogICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbkl0
ZXJhdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1l
bnQoKTsKICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSBwcmV2aW91
c0luSXRlcmF0aW9uOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuV2hpbGVTdGF0ZW1lbnQodGVzdCwgYm9keSkpOwotICAgICAg
ICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2
Mi8jc2VjLWZvci1zdGF0ZW1lbnQKICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9l
Y21hMjYyLyNzZWMtZm9yLWluLWFuZC1mb3Itb2Ytc3RhdGVtZW50cwotICAgICAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlRm9yU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg
dmFyIGluaXQgPSBudWxsOwotICAgICAgICAgICAgdmFyIHRlc3QgPSBudWxsOwotICAgICAgICAg
ICAgdmFyIHVwZGF0ZSA9IG51bGw7Ci0gICAgICAgICAgICB2YXIgZm9ySW4gPSB0cnVlOwotICAg
ICAgICAgICAgdmFyIGxlZnQsIHJpZ2h0OwotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKKyAgICAgICAgcGFyc2VGb3JTdGF0ZW1lbnQoKSB7CisgICAgICAgICAgICBs
ZXQgaW5pdCA9IG51bGw7CisgICAgICAgICAgICBsZXQgdGVzdCA9IG51bGw7CisgICAgICAgICAg
ICBsZXQgdXBkYXRlID0gbnVsbDsKKyAgICAgICAgICAgIGxldCBmb3JJbiA9IHRydWU7CisgICAg
ICAgICAgICBsZXQgaXNGb3JBd2FpdE9mID0gZmFsc2U7CisgICAgICAgICAgICBsZXQgbGVmdCwg
cmlnaHQ7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CiAgICAg
ICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2ZvcicpOworICAgICAgICAgICAgaWYgKHRoaXMu
bWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnYXdhaXQnKSkgeworICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5jb250ZXh0LmF3YWl0KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4
cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQsIG1lc3NhZ2VzXzEuTWVzc2FnZXMuRm9yQXdhaXRJ
bk5vbkFzeW5jKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5uZXh0
VG9rZW4oKTsKKyAgICAgICAgICAgICAgICBpc0ZvckF3YWl0T2YgPSB0cnVlOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgdGhpcy5leHBlY3QoJygnKTsKICAgICAgICAgICAgIGlmICh0aGlz
Lm1hdGNoKCc7JykpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNGb3JBd2FpdE9mKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQs
IG1lc3NhZ2VzXzEuTWVzc2FnZXMuRm9yQXdhaXRPZlNlbWljb2xvbik7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQo
J3ZhcicpKSB7CiAgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIHByZXZpb3VzQWxsb3dJbiA9IHRoaXMuY29udGV4dC5hbGxvd0luOworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBwcmV2aW91c0FsbG93SW4gPSB0aGlzLmNvbnRleHQuYWxsb3dJbjsK
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IHRoaXMucGFyc2VWYXJpYWJsZURlY2xh
cmF0aW9uTGlzdCh7IGluRm9yOiB0cnVlIH0pOworICAgICAgICAgICAgICAgICAgICBjb25zdCBk
ZWNsYXJhdGlvbnMgPSB0aGlzLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoeyBpbkZvcjog
dHJ1ZSB9KTsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSBwcmV2
aW91c0FsbG93SW47CiAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3Ro
ID09PSAxICYmIHRoaXMubWF0Y2hLZXl3b3JkKCdpbicpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgZGVjbCA9IGRlY2xhcmF0aW9uc1swXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpc0ZvckF3YWl0T2YpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRo
cm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkLCBtZXNzYWdlc18xLk1lc3NhZ2VzLkZv
ckF3YWl0T2ZTYXdJbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBkZWNsID0gZGVjbGFyYXRpb25zWzBdOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGRlY2wuaW5pdCAmJiAoZGVjbC5pZC50eXBlID09PSBzeW50YXhfMS5TeW50
YXguQXJyYXlQYXR0ZXJuIHx8IGRlY2wuaWQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4Lk9iamVj
dFBhdHRlcm4gfHwgdGhpcy5jb250ZXh0LnN0cmljdCkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5Gb3JJbk9mTG9v
cEluaXRpYWxpemVyLCAnZm9yLWluJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0z
ODIyLDcgKzM3NDUsNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8g
d2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNl
IGlmICh0aGlzLm1hdGNoS2V5d29yZCgnY29uc3QnKSB8fCB0aGlzLm1hdGNoS2V5d29yZCgnbGV0
JykpIHsKICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAg
ICAgICAgICAgICAgICAgICB2YXIga2luZCA9IHRoaXMubmV4dFRva2VuKCkudmFsdWU7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSB0aGlzLm5leHRUb2tlbigpLnZhbHVlOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5zdHJpY3QgJiYgdGhpcy5sb29rYWhl
YWQudmFsdWUgPT09ICdpbicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlz
LmZpbmFsaXplKGluaXQsIG5ldyBOb2RlLklkZW50aWZpZXIoa2luZCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKQEAgLTM4MzEsMTEgKzM3NTQsMTQgQEAgcmV0
dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHByZXZpb3VzQWxsb3dJbiA9IHRoaXMuY29udGV4dC5hbGxvd0luOworICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0LmFsbG93SW47CiAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IHRoaXMucGFyc2VCaW5kaW5n
TGlzdChraW5kLCB7IGluRm9yOiB0cnVlIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZGVjbGFyYXRpb25zID0gdGhpcy5wYXJzZUJpbmRpbmdMaXN0KGtpbmQsIHsgaW5Gb3I6IHRy
dWUgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IHBy
ZXZpb3VzQWxsb3dJbjsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbnMu
bGVuZ3RoID09PSAxICYmIGRlY2xhcmF0aW9uc1swXS5pbml0ID09PSBudWxsICYmIHRoaXMubWF0
Y2hLZXl3b3JkKCdpbicpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRm9y
QXdhaXRPZikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5l
eHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkLCBtZXNzYWdlc18xLk1lc3NhZ2VzLkZvckF3YWl0
T2ZTYXdJbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluaXQgPSB0aGlzLmZpbmFsaXplKGluaXQsIG5ldyBOb2RlLlZhcmlhYmxl
RGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0
ID0gaW5pdDsKQEAgLTM4NTcsOCArMzc4Myw4IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24o
bW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBpbml0U3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAgICAgICAg
ICAgICB2YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0LmFsbG93SW47CisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGluaXRTdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQWxsb3dJbiA9IHRoaXMuY29udGV4dC5hbGxv
d0luOwogICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMu
cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOwpAQCAtMzg2Niw2ICszNzkyLDkgQEAgcmV0
dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdl
dCB8fCBpbml0LnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5Bc3NpZ25tZW50RXhwcmVzc2lvbikg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdl
c18xLk1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckluKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZvckF3YWl0T2YpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2Fo
ZWFkLCBtZXNzYWdlc18xLk1lc3NhZ2VzLkZvckF3YWl0T2ZTYXdJbik7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRl
cm4oaW5pdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKQEAgLTM4ODUs
NyArMzgxNCw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJw
YWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluaXRTZXEgPSBbaW5pdF07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5pdFNlcSA9IFtpbml0XTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5tYXRjaCgnLCcpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluaXRTZXEucHVzaCh0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5w
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CkBAIC0zOTA1LDE0ICszODM0LDE0IEBAIHJldHVy
biAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAg
ICAgICAgICAgICAgICAgIHVwZGF0ZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGJvZHk7CisgICAgICAg
ICAgICBsZXQgYm9keTsKICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpICYmIHRoaXMu
Y29uZmlnLnRvbGVyYW50KSB7CiAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0
ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsKICAgICAgICAgICAgICAgICBib2R5ID0gdGhpcy5m
aW5hbGl6ZSh0aGlzLmNyZWF0ZU5vZGUoKSwgbmV3IE5vZGUuRW1wdHlTdGF0ZW1lbnQoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICB0aGlzLmV4
cGVjdCgnKScpOwotICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0luSXRlcmF0aW9uID0gdGhp
cy5jb250ZXh0LmluSXRlcmF0aW9uOworICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzSW5J
dGVyYXRpb24gPSB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb247CiAgICAgICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmluSXRlcmF0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBib2R5ID0gdGhp
cy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VTdGF0ZW1lbnQpOwogICAgICAgICAgICAg
ICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IHByZXZpb3VzSW5JdGVyYXRpb247CkBAIC0z
OTIwLDE3ICszODQ5LDE3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAv
LyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICByZXR1cm4gKHR5cGVvZiBsZWZ0ID09PSAn
dW5kZWZpbmVkJykgPwogICAgICAgICAgICAgICAgIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5v
ZGUuRm9yU3RhdGVtZW50KGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkpIDoKICAgICAgICAgICAg
ICAgICBmb3JJbiA/IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRm9ySW5TdGF0ZW1lbnQo
bGVmdCwgcmlnaHQsIGJvZHkpKSA6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuRm9yT2ZTdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpKTsKLSAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5G
b3JPZlN0YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSwgaXNGb3JBd2FpdE9mKSk7CisgICAgICAg
IH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY29udGlu
dWUtc3RhdGVtZW50Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDb250aW51ZVN0YXRl
bWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVO
b2RlKCk7CisgICAgICAgIHBhcnNlQ29udGludWVTdGF0ZW1lbnQoKSB7CisgICAgICAgICAgICBj
b25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdEtl
eXdvcmQoJ2NvbnRpbnVlJyk7Ci0gICAgICAgICAgICB2YXIgbGFiZWwgPSBudWxsOworICAgICAg
ICAgICAgbGV0IGxhYmVsID0gbnVsbDsKICAgICAgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50
eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8gJiYgIXRoaXMuaGFzTGluZVRlcm1pbmF0b3IpIHsK
LSAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7
CisgICAgICAgICAgICAgICAgY29uc3QgaWQgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVy
KCk7CiAgICAgICAgICAgICAgICAgbGFiZWwgPSBpZDsKLSAgICAgICAgICAgICAgICB2YXIga2V5
ID0gJyQnICsgaWQubmFtZTsKKyAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSAnJCcgKyBpZC5u
YW1lOwogICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0
eS5jYWxsKHRoaXMuY29udGV4dC5sYWJlbFNldCwga2V5KSkgewogICAgICAgICAgICAgICAgICAg
ICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5Vbmtub3duTGFiZWwsIGlkLm5h
bWUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTM5NDAsMTUgKzM4NjksMTUgQEAgcmV0dXJuIC8q
KioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAg
ICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsQ29udGlu
dWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuQ29udGludWVTdGF0ZW1lbnQobGFiZWwpKTsKLSAgICAgICAgfTsKKyAgICAg
ICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1icmVh
ay1zdGF0ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUJyZWFrU3RhdGVtZW50
ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKKyAgICAgICAgcGFyc2VCcmVha1N0YXRlbWVudCgpIHsKKyAgICAgICAgICAgIGNvbnN0IG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgn
YnJlYWsnKTsKLSAgICAgICAgICAgIHZhciBsYWJlbCA9IG51bGw7CisgICAgICAgICAgICBsZXQg
bGFiZWwgPSBudWxsOwogICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDMg
LyogSWRlbnRpZmllciAqLyAmJiAhdGhpcy5oYXNMaW5lVGVybWluYXRvcikgewotICAgICAgICAg
ICAgICAgIHZhciBpZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLSAgICAgICAg
ICAgICAgICB2YXIga2V5ID0gJyQnICsgaWQubmFtZTsKKyAgICAgICAgICAgICAgICBjb25zdCBp
ZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBrZXkgPSAnJCcgKyBpZC5uYW1lOwogICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3Rv
dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29udGV4dC5sYWJlbFNldCwga2V5KSkgewog
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5V
bmtub3duTGFiZWwsIGlkLm5hbWUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTM5NTksMzIgKzM4
ODgsMzIgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tC
b290c3RyYXAKICAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNz
YWdlcy5JbGxlZ2FsQnJlYWspOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQnJlYWtTdGF0ZW1lbnQobGFiZWwpKTsKLSAgICAg
ICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEy
NjIvI3NlYy1yZXR1cm4tc3RhdGVtZW50Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VS
ZXR1cm5TdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHBhcnNlUmV0dXJuU3RhdGVt
ZW50KCkgewogICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkpIHsK
ICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5J
bGxlZ2FsUmV0dXJuKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBub2RlID0gdGhp
cy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2Rl
KCk7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3JldHVybicpOwotICAgICAgICAg
ICAgdmFyIGhhc0FyZ3VtZW50ID0gKCF0aGlzLm1hdGNoKCc7JykgJiYgIXRoaXMubWF0Y2goJ30n
KSAmJgorICAgICAgICAgICAgY29uc3QgaGFzQXJndW1lbnQgPSAoIXRoaXMubWF0Y2goJzsnKSAm
JiAhdGhpcy5tYXRjaCgnfScpICYmCiAgICAgICAgICAgICAgICAgIXRoaXMuaGFzTGluZVRlcm1p
bmF0b3IgJiYgdGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMiAvKiBFT0YgKi8pIHx8CiAgICAgICAg
ICAgICAgICAgdGhpcy5sb29rYWhlYWQudHlwZSA9PT0gOCAvKiBTdHJpbmdMaXRlcmFsICovIHx8
CiAgICAgICAgICAgICAgICAgdGhpcy5sb29rYWhlYWQudHlwZSA9PT0gMTAgLyogVGVtcGxhdGUg
Ki87Ci0gICAgICAgICAgICB2YXIgYXJndW1lbnQgPSBoYXNBcmd1bWVudCA/IHRoaXMucGFyc2VF
eHByZXNzaW9uKCkgOiBudWxsOworICAgICAgICAgICAgY29uc3QgYXJndW1lbnQgPSBoYXNBcmd1
bWVudCA/IHRoaXMucGFyc2VFeHByZXNzaW9uKCkgOiBudWxsOwogICAgICAgICAgICAgdGhpcy5j
b25zdW1lU2VtaWNvbG9uKCk7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5SZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpKTsKLSAgICAgICAgfTsKKyAgICAg
ICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy13aXRo
LXN0YXRlbWVudAotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlV2l0aFN0YXRlbWVudCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcGFyc2VXaXRoU3RhdGVtZW50KCkgewogICAgICAgICAg
ICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QpIHsKICAgICAgICAgICAgICAgICB0aGlzLnRvbGVy
YXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RNb2RlV2l0aCk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAg
ICAgdmFyIGJvZHk7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
CisgICAgICAgICAgICBsZXQgYm9keTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgn
d2l0aCcpOwogICAgICAgICAgICAgdGhpcy5leHBlY3QoJygnKTsKLSAgICAgICAgICAgIHZhciBv
YmplY3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgY29uc3Qgb2JqZWN0
ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgn
KScpICYmIHRoaXMuY29uZmlnLnRvbGVyYW50KSB7CiAgICAgICAgICAgICAgICAgdGhpcy50b2xl
cmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsKICAgICAgICAgICAgICAgICBi
b2R5ID0gdGhpcy5maW5hbGl6ZSh0aGlzLmNyZWF0ZU5vZGUoKSwgbmV3IE5vZGUuRW1wdHlTdGF0
ZW1lbnQoKSk7CkBAIC0zOTk0LDExICszOTIzLDExIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rp
b24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgYm9keSA9
IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVy
biB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLldpdGhTdGF0ZW1lbnQob2JqZWN0LCBib2R5
KSk7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1
Yi5pby9lY21hMjYyLyNzZWMtc3dpdGNoLXN0YXRlbWVudAotICAgICAgICBQYXJzZXIucHJvdG90
eXBlLnBhcnNlU3dpdGNoQ2FzZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgdGVzdDsKKyAgICAgICAgcGFy
c2VTd2l0Y2hDYXNlKCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9k
ZSgpOworICAgICAgICAgICAgbGV0IHRlc3Q7CiAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtl
eXdvcmQoJ2RlZmF1bHQnKSkgewogICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CiAg
ICAgICAgICAgICAgICAgdGVzdCA9IG51bGw7CkBAIC00MDA4LDcgKzM5MzcsNyBAQCByZXR1cm4g
LyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAg
ICAgICAgICAgIHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgdGhpcy5leHBlY3QoJzonKTsKLSAgICAgICAgICAgIHZhciBjb25zZXF1ZW50
ID0gW107CisgICAgICAgICAgICBjb25zdCBjb25zZXF1ZW50ID0gW107CiAgICAgICAgICAgICB3
aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd9JykgfHwgdGhp
cy5tYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSB8fCB0aGlzLm1hdGNoS2V5d29yZCgnY2FzZScpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDAxNiwyMyArMzk0NSwyMyBAQCByZXR1
cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAg
ICAgICAgICAgICAgIGNvbnNlcXVlbnQucHVzaCh0aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0o
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5Td2l0Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQpKTsKLSAgICAgICAgfTsKLSAg
ICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVN3aXRjaFN0YXRlbWVudCA9IGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgIH0K
KyAgICAgICAgcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSB7CisgICAgICAgICAgICBjb25zdCBub2Rl
ID0gdGhpcy5jcmVhdGVOb2RlKCk7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3N3
aXRjaCcpOwogICAgICAgICAgICAgdGhpcy5leHBlY3QoJygnKTsKLSAgICAgICAgICAgIHZhciBk
aXNjcmltaW5hbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgY29uc3Qg
ZGlzY3JpbWluYW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKICAgICAgICAgICAgIHRoaXMu
ZXhwZWN0KCcpJyk7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNJblN3aXRjaCA9IHRoaXMuY29u
dGV4dC5pblN3aXRjaDsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzSW5Td2l0Y2ggPSB0aGlz
LmNvbnRleHQuaW5Td2l0Y2g7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5Td2l0Y2ggPSB0
cnVlOwotICAgICAgICAgICAgdmFyIGNhc2VzID0gW107Ci0gICAgICAgICAgICB2YXIgZGVmYXVs
dEZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBjb25zdCBjYXNlcyA9IFtdOworICAgICAgICAg
ICAgbGV0IGRlZmF1bHRGb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgdGhpcy5leHBlY3QoJ3sn
KTsKICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
bWF0Y2goJ30nKSkgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgdmFyIGNsYXVzZSA9IHRoaXMucGFyc2VTd2l0Y2hDYXNlKCk7
CisgICAgICAgICAgICAgICAgY29uc3QgY2xhdXNlID0gdGhpcy5wYXJzZVN3aXRjaENhc2UoKTsK
ICAgICAgICAgICAgICAgICBpZiAoY2xhdXNlLnRlc3QgPT09IG51bGwpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGRlZmF1bHRGb3VuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNo
KTsKQEAgLTQwNDQsMjggKzM5NzMsMjggQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1
bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7
CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5Td2l0Y2ggPSBwcmV2aW91c0luU3dpdGNoOwog
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuU3dpdGNoU3Rh
dGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpKTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAg
ICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1sYWJlbGxlZC1zdGF0
ZW1lbnRzCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VMYWJlbGxlZFN0YXRlbWVudCA9
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
Ci0gICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAg
ICAgICB2YXIgc3RhdGVtZW50OworICAgICAgICBwYXJzZUxhYmVsbGVkU3RhdGVtZW50KCkgewor
ICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAg
Y29uc3QgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBsZXQgc3Rh
dGVtZW50OwogICAgICAgICAgICAgaWYgKChleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5J
ZGVudGlmaWVyKSAmJiB0aGlzLm1hdGNoKCc6JykpIHsKICAgICAgICAgICAgICAgICB0aGlzLm5l
eHRUb2tlbigpOwotICAgICAgICAgICAgICAgIHZhciBpZCA9IGV4cHI7Ci0gICAgICAgICAgICAg
ICAgdmFyIGtleSA9ICckJyArIGlkLm5hbWU7CisgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBl
eHByOworICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9ICckJyArIGlkLm5hbWU7CiAgICAgICAg
ICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNv
bnRleHQubGFiZWxTZXQsIGtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vy
cm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuUmVkZWNsYXJhdGlvbiwgJ0xhYmVsJywgaWQubmFtZSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5sYWJlbFNl
dFtrZXldID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB2YXIgYm9keSA9IHZvaWQgMDsKKyAgICAg
ICAgICAgICAgICBsZXQgYm9keTsKICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdv
cmQoJ2NsYXNzJykpIHsKICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0
ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CiAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlz
LnBhcnNlQ2xhc3NEZWNsYXJhdGlvbigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBlbHNlIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnZnVuY3Rpb24nKSkgewotICAgICAgICAg
ICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJh
dGlvbigpOwogICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tl
biwgbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RGdW5jdGlvbik7CiAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTQwODUsMzEgKzQwMTQsMzYgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQg
PSBuZXcgTm9kZS5FeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgc3RhdGVtZW50KTsKLSAgICAgICAg
fTsKKyAgICAgICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIv
I3NlYy10aHJvdy1zdGF0ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVRocm93
U3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKKyAgICAgICAgcGFyc2VUaHJvd1N0YXRlbWVudCgpIHsKKyAgICAgICAgICAg
IGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0
S2V5d29yZCgndGhyb3cnKTsKICAgICAgICAgICAgIGlmICh0aGlzLmhhc0xpbmVUZXJtaW5hdG9y
KSB7CiAgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMu
TmV3bGluZUFmdGVyVGhyb3cpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGFyZ3Vt
ZW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGNvbnN0IGFyZ3VtZW50
ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKICAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWlj
b2xvbigpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUu
VGhyb3dTdGF0ZW1lbnQoYXJndW1lbnQpKTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAg
ICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10cnktc3RhdGVtZW50Ci0g
ICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDYXRjaENsYXVzZSA9IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgIHBhcnNl
Q2F0Y2hDbGF1c2UoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2Rl
KCk7CisgICAgICAgICAgICBsZXQgYm9keTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29y
ZCgnY2F0Y2gnKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKCcpKSB7CisgICAgICAg
ICAgICAgICAgYm9keSA9IHRoaXMucGFyc2VCbG9jaygpOworICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkNhdGNoQ2xhdXNlKG51bGwsIGJvZHkpKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7CiAgICAgICAgICAg
ICBpZiAodGhpcy5tYXRjaCgnKScpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhw
ZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2
YXIgcGFyYW1zID0gW107Ci0gICAgICAgICAgICB2YXIgcGFyYW0gPSB0aGlzLnBhcnNlUGF0dGVy
bihwYXJhbXMpOwotICAgICAgICAgICAgdmFyIHBhcmFtTWFwID0ge307Ci0gICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAg
IHZhciBrZXkgPSAnJCcgKyBwYXJhbXNbaV0udmFsdWU7CisgICAgICAgICAgICBjb25zdCBwYXJh
bXMgPSBbXTsKKyAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFy
YW1zKTsKKyAgICAgICAgICAgIGNvbnN0IHBhcmFtTWFwID0ge307CisgICAgICAgICAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGNv
bnN0IGtleSA9ICckJyArIHBhcmFtc1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAoT2Jq
ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtTWFwLCBrZXkpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkR1
cGxpY2F0ZUJpbmRpbmcsIHBhcmFtc1tpXS52YWx1ZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAt
NDEyMSwzNCArNDA1NSwzNCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsg
Ly8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7Ci0gICAgICAgICAgICB2YXIgYm9keSA9IHRoaXMu
cGFyc2VCbG9jaygpOworICAgICAgICAgICAgYm9keSA9IHRoaXMucGFyc2VCbG9jaygpOwogICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQ2F0Y2hDbGF1c2Uo
cGFyYW0sIGJvZHkpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJz
ZUZpbmFsbHlDbGF1c2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VG
aW5hbGx5Q2xhdXNlKCkgewogICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdmaW5hbGx5
Jyk7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUJsb2NrKCk7Ci0gICAgICAgIH07Ci0g
ICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VUcnlTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICB9Cisg
ICAgICAgIHBhcnNlVHJ5U3RhdGVtZW50KCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRo
aXMuY3JlYXRlTm9kZSgpOwogICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCd0cnknKTsK
LSAgICAgICAgICAgIHZhciBibG9jayA9IHRoaXMucGFyc2VCbG9jaygpOwotICAgICAgICAgICAg
dmFyIGhhbmRsZXIgPSB0aGlzLm1hdGNoS2V5d29yZCgnY2F0Y2gnKSA/IHRoaXMucGFyc2VDYXRj
aENsYXVzZSgpIDogbnVsbDsKLSAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSB0aGlzLm1hdGNo
S2V5d29yZCgnZmluYWxseScpID8gdGhpcy5wYXJzZUZpbmFsbHlDbGF1c2UoKSA6IG51bGw7Cisg
ICAgICAgICAgICBjb25zdCBibG9jayA9IHRoaXMucGFyc2VCbG9jaygpOworICAgICAgICAgICAg
Y29uc3QgaGFuZGxlciA9IHRoaXMubWF0Y2hLZXl3b3JkKCdjYXRjaCcpID8gdGhpcy5wYXJzZUNh
dGNoQ2xhdXNlKCkgOiBudWxsOworICAgICAgICAgICAgY29uc3QgZmluYWxpemVyID0gdGhpcy5t
YXRjaEtleXdvcmQoJ2ZpbmFsbHknKSA/IHRoaXMucGFyc2VGaW5hbGx5Q2xhdXNlKCkgOiBudWxs
OwogICAgICAgICAgICAgaWYgKCFoYW5kbGVyICYmICFmaW5hbGl6ZXIpIHsKICAgICAgICAgICAg
ICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5Ob0NhdGNoT3JGaW5hbGx5
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLlRyeVN0YXRlbWVudChibG9jaywgaGFuZGxlciwgZmluYWxpemVyKSk7Ci0gICAg
ICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
MjYyLyNzZWMtZGVidWdnZXItc3RhdGVtZW50Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFy
c2VEZWJ1Z2dlclN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKSB7
CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CiAgICAgICAgICAg
ICB0aGlzLmV4cGVjdEtleXdvcmQoJ2RlYnVnZ2VyJyk7CiAgICAgICAgICAgICB0aGlzLmNvbnN1
bWVTZW1pY29sb24oKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBOb2RlLkRlYnVnZ2VyU3RhdGVtZW50KCkpOwotICAgICAgICB9OworICAgICAgICB9CiAgICAg
ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtbGFu
Z3VhZ2Utc3RhdGVtZW50cy1hbmQtZGVjbGFyYXRpb25zCi0gICAgICAgIFBhcnNlci5wcm90b3R5
cGUucGFyc2VTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgc3RhdGVt
ZW50OworICAgICAgICBwYXJzZVN0YXRlbWVudCgpIHsKKyAgICAgICAgICAgIGxldCBzdGF0ZW1l
bnQ7CiAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMubG9va2FoZWFkLnR5cGUpIHsKICAgICAgICAg
ICAgICAgICBjYXNlIDEgLyogQm9vbGVhbkxpdGVyYWwgKi86CiAgICAgICAgICAgICAgICAgY2Fz
ZSA1IC8qIE51bGxMaXRlcmFsICovOgpAQCAtNDE1OSw3ICs0MDkzLDcgQEAgcmV0dXJuIC8qKioq
KiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAg
ICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSA3IC8qIFB1bmN0
dWF0b3IgKi86Ci0gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMubG9va2FoZWFk
LnZhbHVlOworICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMubG9va2FoZWFk
LnZhbHVlOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICd7JykgewogICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUJsb2NrKCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTQyMjksMTYgKzQxNjMsMTYgQEAgcmV0dXJuIC8qKioqKiovIChm
dW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAg
ICAgc3RhdGVtZW50ID0gdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gc3RhdGVtZW50OwotICAgICAgICB9
OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8j
c2VjLWZ1bmN0aW9uLWRlZmluaXRpb25zCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VG
dW5jdGlvblNvdXJjZUVsZW1lbnRzID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1l
bnRzKCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwogICAg
ICAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsKLSAgICAgICAgICAgIHZhciBib2R5ID0gdGhpcy5w
YXJzZURpcmVjdGl2ZVByb2xvZ3VlcygpOwotICAgICAgICAgICAgdmFyIHByZXZpb3VzTGFiZWxT
ZXQgPSB0aGlzLmNvbnRleHQubGFiZWxTZXQ7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNJbkl0
ZXJhdGlvbiA9IHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbjsKLSAgICAgICAgICAgIHZhciBwcmV2
aW91c0luU3dpdGNoID0gdGhpcy5jb250ZXh0LmluU3dpdGNoOwotICAgICAgICAgICAgdmFyIHBy
ZXZpb3VzSW5GdW5jdGlvbkJvZHkgPSB0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHk7CisgICAg
ICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5wYXJzZURpcmVjdGl2ZVByb2xvZ3VlcygpOworICAg
ICAgICAgICAgY29uc3QgcHJldmlvdXNMYWJlbFNldCA9IHRoaXMuY29udGV4dC5sYWJlbFNldDsK
KyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzSW5JdGVyYXRpb24gPSB0aGlzLmNvbnRleHQuaW5J
dGVyYXRpb247CisgICAgICAgICAgICBjb25zdCBwcmV2aW91c0luU3dpdGNoID0gdGhpcy5jb250
ZXh0LmluU3dpdGNoOworICAgICAgICAgICAgY29uc3QgcHJldmlvdXNJbkZ1bmN0aW9uQm9keSA9
IHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keTsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5s
YWJlbFNldCA9IHt9OwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uID0gZmFs
c2U7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5Td2l0Y2ggPSBmYWxzZTsKQEAgLTQyNTUs
OSArNDE4OSw5IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJw
YWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5Td2l0Y2ggPSBwcmV2aW91
c0luU3dpdGNoOwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5ID0gcHJl
dmlvdXNJbkZ1bmN0aW9uQm9keTsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBOb2RlLkJsb2NrU3RhdGVtZW50KGJvZHkpKTsKLSAgICAgICAgfTsKLSAgICAgICAg
UGFyc2VyLnByb3RvdHlwZS52YWxpZGF0ZVBhcmFtID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmFt
LCBuYW1lKSB7Ci0gICAgICAgICAgICB2YXIga2V5ID0gJyQnICsgbmFtZTsKKyAgICAgICAgfQor
ICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLCBuYW1lKSB7CisgICAgICAgICAg
ICBjb25zdCBrZXkgPSAnJCcgKyBuYW1lOwogICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5z
dHJpY3QpIHsKICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdv
cmQobmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFt
OwpAQCAtNDI4OSwxMSArNDIyMywxMSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVs
ZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgb3B0aW9ucy5wYXJhbVNldFtrZXldID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVJlc3RFbGVtZW50ID0gZnVuY3Rp
b24gKHBhcmFtcykgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
KyAgICAgICAgfQorICAgICAgICBwYXJzZVJlc3RFbGVtZW50KHBhcmFtcykgeworICAgICAgICAg
ICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwogICAgICAgICAgICAgdGhpcy5leHBl
Y3QoJy4uLicpOwotICAgICAgICAgICAgdmFyIGFyZyA9IHRoaXMucGFyc2VQYXR0ZXJuKHBhcmFt
cyk7CisgICAgICAgICAgICBjb25zdCBhcmcgPSB0aGlzLnBhcnNlUGF0dGVybihwYXJhbXMpOwog
ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJz0nKSkgewogICAgICAgICAgICAgICAgIHRoaXMu
dGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkRlZmF1bHRSZXN0UGFyYW1ldGVyKTsKICAg
ICAgICAgICAgIH0KQEAgLTQzMDEsMTggKzQyMzUsMTggQEAgcmV0dXJuIC8qKioqKiovIChmdW5j
dGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICB0aGlz
LnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5QYXJhbWV0ZXJBZnRlclJlc3RQYXJhbWV0
ZXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuUmVzdEVsZW1lbnQoYXJnKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VGb3JtYWxQYXJhbWV0ZXIgPSBmdW5jdGlvbiAob3B0aW9ucykgewot
ICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtdOwotICAgICAgICAgICAgdmFyIHBhcmFtID0gdGhp
cy5tYXRjaCgnLi4uJykgPyB0aGlzLnBhcnNlUmVzdEVsZW1lbnQocGFyYW1zKSA6IHRoaXMucGFy
c2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1zKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VGb3Jt
YWxQYXJhbWV0ZXIob3B0aW9ucykgeworICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gW107Cisg
ICAgICAgICAgICBjb25zdCBwYXJhbSA9IHRoaXMubWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVJl
c3RFbGVtZW50KHBhcmFtcykgOiB0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcyk7
CisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewog
ICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbXNbaV0sIHBh
cmFtc1tpXS52YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvcHRpb25zLnNpbXBs
ZSA9IG9wdGlvbnMuc2ltcGxlICYmIChwYXJhbSBpbnN0YW5jZW9mIE5vZGUuSWRlbnRpZmllcik7
CiAgICAgICAgICAgICBvcHRpb25zLnBhcmFtcy5wdXNoKHBhcmFtKTsKLSAgICAgICAgfTsKLSAg
ICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZvcm1hbFBhcmFtZXRlcnMgPSBmdW5jdGlvbiAo
Zmlyc3RSZXN0cmljdGVkKSB7Ci0gICAgICAgICAgICB2YXIgb3B0aW9uczsKKyAgICAgICAgfQor
ICAgICAgICBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAg
ICAgICBsZXQgb3B0aW9uczsKICAgICAgICAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgICAgICAg
ICAgc2ltcGxlOiB0cnVlLAogICAgICAgICAgICAgICAgIHBhcmFtczogW10sCkBAIC00MzQwLDM0
ICs0Mjc0LDM0IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJw
YWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBvcHRpb25zLmZp
cnN0UmVzdHJpY3RlZCwKICAgICAgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLm1lc3NhZ2UK
ICAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUubWF0
Y2hBc3luY0Z1bmN0aW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG1hdGNoID0g
dGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhc3luYycpOworICAgICAgICB9CisgICAgICAg
IG1hdGNoQXN5bmNGdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGxldCBtYXRjaCA9IHRoaXMubWF0
Y2hDb250ZXh0dWFsS2V5d29yZCgnYXN5bmMnKTsKICAgICAgICAgICAgIGlmIChtYXRjaCkgewot
ICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc2Nhbm5lci5zYXZlU3RhdGUoKTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc2Nhbm5lci5zYXZlU3RhdGUoKTsKICAg
ICAgICAgICAgICAgICB0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7Ci0gICAgICAgICAgICAg
ICAgdmFyIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7CisgICAgICAgICAgICAgICAgY29uc3Qg
bmV4dCA9IHRoaXMuc2Nhbm5lci5sZXgoKTsKICAgICAgICAgICAgICAgICB0aGlzLnNjYW5uZXIu
cmVzdG9yZVN0YXRlKHN0YXRlKTsKICAgICAgICAgICAgICAgICBtYXRjaCA9IChzdGF0ZS5saW5l
TnVtYmVyID09PSBuZXh0LmxpbmVOdW1iZXIpICYmIChuZXh0LnR5cGUgPT09IDQgLyogS2V5d29y
ZCAqLykgJiYgKG5leHQudmFsdWUgPT09ICdmdW5jdGlvbicpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90
eXBlLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIChpZGVudGlmaWVySXNPcHRp
b25hbCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAg
ICAgICAgIHZhciBpc0FzeW5jID0gdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhc3luYycp
OworICAgICAgICB9CisgICAgICAgIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihpZGVudGlmaWVy
SXNPcHRpb25hbCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OworICAgICAgICAgICAgY29uc3QgaXNBc3luYyA9IHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29y
ZCgnYXN5bmMnKTsKICAgICAgICAgICAgIGlmIChpc0FzeW5jKSB7CiAgICAgICAgICAgICAgICAg
dGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMuZXhwZWN0
S2V5d29yZCgnZnVuY3Rpb24nKTsKLSAgICAgICAgICAgIHZhciBpc0dlbmVyYXRvciA9IGlzQXN5
bmMgPyBmYWxzZSA6IHRoaXMubWF0Y2goJyonKTsKKyAgICAgICAgICAgIGNvbnN0IGlzR2VuZXJh
dG9yID0gdGhpcy5tYXRjaCgnKicpOwogICAgICAgICAgICAgaWYgKGlzR2VuZXJhdG9yKSB7CiAg
ICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHZhciBtZXNzYWdlOwotICAgICAgICAgICAgdmFyIGlkID0gbnVsbDsKLSAgICAgICAgICAg
IHZhciBmaXJzdFJlc3RyaWN0ZWQgPSBudWxsOworICAgICAgICAgICAgbGV0IG1lc3NhZ2U7Cisg
ICAgICAgICAgICBsZXQgaWQgPSBudWxsOworICAgICAgICAgICAgbGV0IGZpcnN0UmVzdHJpY3Rl
ZCA9IG51bGw7CiAgICAgICAgICAgICBpZiAoIWlkZW50aWZpZXJJc09wdGlvbmFsIHx8ICF0aGlz
Lm1hdGNoKCcoJykpIHsKLSAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVh
ZDsKKyAgICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMubG9va2FoZWFkOwogICAgICAg
ICAgICAgICAgIGlkID0gdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOwogICAgICAgICAg
ICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0KSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKQEAgLTQzODUs
MjEgKzQzMTksMjEgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdl
YnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93QXdhaXQgPSB0aGlz
LmNvbnRleHQuYXdhaXQ7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhp
cy5jb250ZXh0LmFsbG93WWllbGQ7CisgICAgICAgICAgICBjb25zdCBwcmV2aW91c0FsbG93QXdh
aXQgPSB0aGlzLmNvbnRleHQuYXdhaXQ7CisgICAgICAgICAgICBjb25zdCBwcmV2aW91c0FsbG93
WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKICAgICAgICAgICAgIHRoaXMuY29udGV4
dC5hd2FpdCA9IGlzQXN5bmM7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9
ICFpc0dlbmVyYXRvcjsKLSAgICAgICAgICAgIHZhciBmb3JtYWxQYXJhbWV0ZXJzID0gdGhpcy5w
YXJzZUZvcm1hbFBhcmFtZXRlcnMoZmlyc3RSZXN0cmljdGVkKTsKLSAgICAgICAgICAgIHZhciBw
YXJhbXMgPSBmb3JtYWxQYXJhbWV0ZXJzLnBhcmFtczsKLSAgICAgICAgICAgIHZhciBzdHJpY3Rl
ZCA9IGZvcm1hbFBhcmFtZXRlcnMuc3RyaWN0ZWQ7CisgICAgICAgICAgICBjb25zdCBmb3JtYWxQ
YXJhbWV0ZXJzID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoZmlyc3RSZXN0cmljdGVkKTsK
KyAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zOworICAg
ICAgICAgICAgY29uc3Qgc3RyaWN0ZWQgPSBmb3JtYWxQYXJhbWV0ZXJzLnN0cmljdGVkOwogICAg
ICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gZm9ybWFsUGFyYW1ldGVycy5maXJzdFJlc3RyaWN0
ZWQ7CiAgICAgICAgICAgICBpZiAoZm9ybWFsUGFyYW1ldGVycy5tZXNzYWdlKSB7CiAgICAgICAg
ICAgICAgICAgbWVzc2FnZSA9IGZvcm1hbFBhcmFtZXRlcnMubWVzc2FnZTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHRoaXMuY29udGV4dC5zdHJpY3Q7
Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZSA9IHRoaXMuY29u
dGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZTsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzU3Ry
aWN0ID0gdGhpcy5jb250ZXh0LnN0cmljdDsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQWxs
b3dTdHJpY3REaXJlY3RpdmUgPSB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU7CiAg
ICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmUgPSBmb3JtYWxQYXJh
bWV0ZXJzLnNpbXBsZTsKLSAgICAgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZUZ1bmN0aW9u
U291cmNlRWxlbWVudHMoKTsKKyAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLnBhcnNlRnVu
Y3Rpb25Tb3VyY2VFbGVtZW50cygpOwogICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJp
Y3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7CiAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhw
ZWN0ZWRUb2tlbihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOwogICAgICAgICAgICAgfQpAQCAt
NDQxMCwyOSArNDM0NCwyOSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsg
Ly8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0
RGlyZWN0aXZlID0gcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZTsKICAgICAgICAgICAgIHRo
aXMuY29udGV4dC5hd2FpdCA9IHByZXZpb3VzQWxsb3dBd2FpdDsKICAgICAgICAgICAgIHRoaXMu
Y29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwotICAgICAgICAgICAgcmV0
dXJuIGlzQXN5bmMgPyB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFzeW5jRnVuY3Rpb25E
ZWNsYXJhdGlvbihpZCwgcGFyYW1zLCBib2R5KSkgOgorICAgICAgICAgICAgcmV0dXJuIGlzQXN5
bmMgPyB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFzeW5jRnVuY3Rpb25EZWNsYXJhdGlv
bihpZCwgcGFyYW1zLCBib2R5LCBpc0dlbmVyYXRvcikpIDoKICAgICAgICAgICAgICAgICB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkZ1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHBhcmFtcywg
Ym9keSwgaXNHZW5lcmF0b3IpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlw
ZS5wYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZh
ciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgaXNBc3luYyA9IHRo
aXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnYXN5bmMnKTsKKyAgICAgICAgfQorICAgICAgICBw
YXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlz
LmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IGlzQXN5bmMgPSB0aGlzLm1hdGNoQ29u
dGV4dHVhbEtleXdvcmQoJ2FzeW5jJyk7CiAgICAgICAgICAgICBpZiAoaXNBc3luYykgewogICAg
ICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB0aGlzLmV4cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7Ci0gICAgICAgICAgICB2YXIgaXNHZW5l
cmF0b3IgPSBpc0FzeW5jID8gZmFsc2UgOiB0aGlzLm1hdGNoKCcqJyk7CisgICAgICAgICAgICBj
b25zdCBpc0dlbmVyYXRvciA9IHRoaXMubWF0Y2goJyonKTsKICAgICAgICAgICAgIGlmIChpc0dl
bmVyYXRvcikgewogICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZTsKLSAgICAgICAgICAgIHZhciBpZCA9IG51bGw7
Ci0gICAgICAgICAgICB2YXIgZmlyc3RSZXN0cmljdGVkOwotICAgICAgICAgICAgdmFyIHByZXZp
b3VzQWxsb3dBd2FpdCA9IHRoaXMuY29udGV4dC5hd2FpdDsKLSAgICAgICAgICAgIHZhciBwcmV2
aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKyAgICAgICAgICAgIGxl
dCBtZXNzYWdlOworICAgICAgICAgICAgbGV0IGlkID0gbnVsbDsKKyAgICAgICAgICAgIGxldCBm
aXJzdFJlc3RyaWN0ZWQ7CisgICAgICAgICAgICBjb25zdCBwcmV2aW91c0FsbG93QXdhaXQgPSB0
aGlzLmNvbnRleHQuYXdhaXQ7CisgICAgICAgICAgICBjb25zdCBwcmV2aW91c0FsbG93WWllbGQg
PSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hd2Fp
dCA9IGlzQXN5bmM7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9ICFpc0dl
bmVyYXRvcjsKICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKCcpKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisgICAgICAgICAgICAgICAgY29uc3Qg
dG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKICAgICAgICAgICAgICAgICBpZCA9ICghdGhpcy5jb250
ZXh0LnN0cmljdCAmJiAhaXNHZW5lcmF0b3IgJiYgdGhpcy5tYXRjaEtleXdvcmQoJ3lpZWxkJykp
ID8gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCkgOiB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlm
aWVyKCk7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QpIHsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZh
bHVlKSkgewpAQCAtNDQ1MCwxNyArNDM4NCwxNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9u
KG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGZvcm1hbFBh
cmFtZXRlcnMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycyhmaXJzdFJlc3RyaWN0ZWQpOwot
ICAgICAgICAgICAgdmFyIHBhcmFtcyA9IGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zOwotICAgICAg
ICAgICAgdmFyIHN0cmljdGVkID0gZm9ybWFsUGFyYW1ldGVycy5zdHJpY3RlZDsKKyAgICAgICAg
ICAgIGNvbnN0IGZvcm1hbFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycyhm
aXJzdFJlc3RyaWN0ZWQpOworICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gZm9ybWFsUGFyYW1l
dGVycy5wYXJhbXM7CisgICAgICAgICAgICBjb25zdCBzdHJpY3RlZCA9IGZvcm1hbFBhcmFtZXRl
cnMuc3RyaWN0ZWQ7CiAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSBmb3JtYWxQYXJhbWV0
ZXJzLmZpcnN0UmVzdHJpY3RlZDsKICAgICAgICAgICAgIGlmIChmb3JtYWxQYXJhbWV0ZXJzLm1l
c3NhZ2UpIHsKICAgICAgICAgICAgICAgICBtZXNzYWdlID0gZm9ybWFsUGFyYW1ldGVycy5tZXNz
YWdlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gdGhp
cy5jb250ZXh0LnN0cmljdDsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93U3RyaWN0RGly
ZWN0aXZlID0gdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlOworICAgICAgICAgICAg
Y29uc3QgcHJldmlvdXNTdHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0OworICAgICAgICAgICAg
Y29uc3QgcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZSA9IHRoaXMuY29udGV4dC5hbGxvd1N0
cmljdERpcmVjdGl2ZTsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVj
dGl2ZSA9IGZvcm1hbFBhcmFtZXRlcnMuc2ltcGxlOwotICAgICAgICAgICAgdmFyIGJvZHkgPSB0
aGlzLnBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpOworICAgICAgICAgICAgY29uc3QgYm9k
eSA9IHRoaXMucGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7CiAgICAgICAgICAgICBpZiAo
dGhpcy5jb250ZXh0LnN0cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHsKICAgICAgICAgICAgICAg
ICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7CiAg
ICAgICAgICAgICB9CkBAIC00NDcxLDI5ICs0NDA1LDI5IEBAIHJldHVybiAvKioqKioqLyAoZnVu
Y3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB0aGlzLmNv
bnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmUgPSBwcmV2aW91c0FsbG93U3RyaWN0RGlyZWN0aXZl
OwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmF3YWl0ID0gcHJldmlvdXNBbGxvd0F3YWl0Owog
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7
Ci0gICAgICAgICAgICByZXR1cm4gaXNBc3luYyA/IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5v
ZGUuQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgYm9keSkpIDoKKyAgICAgICAg
ICAgIHJldHVybiBpc0FzeW5jID8gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Bc3luY0Z1
bmN0aW9uRXhwcmVzc2lvbihpZCwgcGFyYW1zLCBib2R5LCBpc0dlbmVyYXRvcikpIDoKICAgICAg
ICAgICAgICAgICB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkZ1bmN0aW9uRXhwcmVzc2lv
bihpZCwgcGFyYW1zLCBib2R5LCBpc0dlbmVyYXRvcikpOwotICAgICAgICB9OworICAgICAgICB9
CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWRpcmVjdGl2
ZS1wcm9sb2d1ZXMtYW5kLXRoZS11c2Utc3RyaWN0LWRpcmVjdGl2ZQotICAgICAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlRGlyZWN0aXZlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFy
IHRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3Jl
YXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigp
OwotICAgICAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IChleHByLnR5cGUgPT09IHN5bnRheF8xLlN5
bnRheC5MaXRlcmFsKSA/IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pLnNsaWNlKDEsIC0xKSA6IG51
bGw7CisgICAgICAgIHBhcnNlRGlyZWN0aXZlKCkgeworICAgICAgICAgICAgY29uc3QgdG9rZW4g
PSB0aGlzLmxvb2thaGVhZDsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOwor
ICAgICAgICAgICAgY29uc3QgZGlyZWN0aXZlID0gKGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3lu
dGF4LkxpdGVyYWwpID8gdGhpcy5nZXRUb2tlblJhdyh0b2tlbikuc2xpY2UoMSwgLTEpIDogbnVs
bDsKICAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOwogICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZmluYWxpemUobm9kZSwgZGlyZWN0aXZlID8gbmV3IE5vZGUuRGlyZWN0aXZlKGV4
cHIsIGRpcmVjdGl2ZSkgOiBuZXcgTm9kZS5FeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpKTsKLSAg
ICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZURpcmVjdGl2ZVByb2xvZ3Vl
cyA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBmaXJzdFJlc3RyaWN0ZWQgPSBudWxs
OwotICAgICAgICAgICAgdmFyIGJvZHkgPSBbXTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZURp
cmVjdGl2ZVByb2xvZ3VlcygpIHsKKyAgICAgICAgICAgIGxldCBmaXJzdFJlc3RyaWN0ZWQgPSBu
dWxsOworICAgICAgICAgICAgY29uc3QgYm9keSA9IFtdOwogICAgICAgICAgICAgd2hpbGUgKHRy
dWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKyAgICAg
ICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMubG9va2FoZWFkOwogICAgICAgICAgICAgICAg
IGlmICh0b2tlbi50eXBlICE9PSA4IC8qIFN0cmluZ0xpdGVyYWwgKi8pIHsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhciBz
dGF0ZW1lbnQgPSB0aGlzLnBhcnNlRGlyZWN0aXZlKCk7CisgICAgICAgICAgICAgICAgY29uc3Qg
c3RhdGVtZW50ID0gdGhpcy5wYXJzZURpcmVjdGl2ZSgpOwogICAgICAgICAgICAgICAgIGJvZHku
cHVzaChzdGF0ZW1lbnQpOwotICAgICAgICAgICAgICAgIHZhciBkaXJlY3RpdmUgPSBzdGF0ZW1l
bnQuZGlyZWN0aXZlOworICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdGl2ZSA9IHN0YXRlbWVu
dC5kaXJlY3RpdmU7CiAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkaXJlY3RpdmUgIT09ICdz
dHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
QEAgLTQ1MTMsOSArNDQ0Nyw5IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykg
eyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgcmV0dXJuIGJvZHk7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAg
Ly8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbWV0aG9kLWRlZmluaXRpb25z
Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucXVhbGlmaWVkUHJvcGVydHlOYW1lID0gZnVuY3Rp
b24gKHRva2VuKSB7CisgICAgICAgIHF1YWxpZmllZFByb3BlcnR5TmFtZSh0b2tlbikgewogICAg
ICAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSAzIC8q
IElkZW50aWZpZXIgKi86CiAgICAgICAgICAgICAgICAgY2FzZSA4IC8qIFN0cmluZ0xpdGVyYWwg
Ki86CkBAIC00NTMwLDUxICs0NDY0LDUxIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9k
dWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9OwotICAg
ICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlR2V0dGVyTWV0aG9kID0gZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZh
ciBpc0dlbmVyYXRvciA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dZaWVs
ZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkOworICAgICAgICB9CisgICAgICAgIHBhcnNlR2V0
dGVyTWV0aG9kKCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OworICAgICAgICAgICAgY29uc3QgaXNHZW5lcmF0b3IgPSBmYWxzZTsKKyAgICAgICAgICAgIGNv
bnN0IHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkOwogICAgICAg
ICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSAhaXNHZW5lcmF0b3I7Ci0gICAgICAgICAg
ICB2YXIgZm9ybWFsUGFyYW1ldGVycyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCk7Cisg
ICAgICAgICAgICBjb25zdCBmb3JtYWxQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFt
ZXRlcnMoKTsKICAgICAgICAgICAgIGlmIChmb3JtYWxQYXJhbWV0ZXJzLnBhcmFtcy5sZW5ndGgg
PiAwKSB7CiAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVz
c2FnZXMuQmFkR2V0dGVyQXJpdHkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG1l
dGhvZCA9IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChmb3JtYWxQYXJhbWV0ZXJzKTsKKyAgICAg
ICAgICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChmb3JtYWxQYXJh
bWV0ZXJzKTsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNB
bGxvd1lpZWxkOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5v
ZGUuRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zLCBtZXRo
b2QsIGlzR2VuZXJhdG9yKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUu
cGFyc2VTZXR0ZXJNZXRob2QgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGlzR2VuZXJhdG9yID0gZmFsc2U7
Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93
WWllbGQ7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VTZXR0ZXJNZXRob2QoKSB7CisgICAgICAg
ICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25zdCBp
c0dlbmVyYXRvciA9IGZhbHNlOworICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBbGxvd1lpZWxk
ID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxs
b3dZaWVsZCA9ICFpc0dlbmVyYXRvcjsKLSAgICAgICAgICAgIHZhciBmb3JtYWxQYXJhbWV0ZXJz
ID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKTsKKyAgICAgICAgICAgIGNvbnN0IGZvcm1h
bFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpOwogICAgICAgICAgICAg
aWYgKGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zLmxlbmd0aCAhPT0gMSkgewogICAgICAgICAgICAg
ICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkJhZFNldHRlckFyaXR5
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hbFBhcmFtZXRlcnMu
cGFyYW1zWzBdIGluc3RhbmNlb2YgTm9kZS5SZXN0RWxlbWVudCkgewogICAgICAgICAgICAgICAg
IHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkJhZFNldHRlclJlc3RQYXJh
bWV0ZXIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG1ldGhvZCA9IHRoaXMucGFy
c2VQcm9wZXJ0eU1ldGhvZChmb3JtYWxQYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIGNvbnN0IG1l
dGhvZCA9IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChmb3JtYWxQYXJhbWV0ZXJzKTsKICAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwogICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHBy
ZXNzaW9uKG51bGwsIGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zLCBtZXRob2QsIGlzR2VuZXJhdG9y
KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VHZW5lcmF0b3JN
ZXRob2QgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRl
Tm9kZSgpOwotICAgICAgICAgICAgdmFyIGlzR2VuZXJhdG9yID0gdHJ1ZTsKLSAgICAgICAgICAg
IHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKyAgICAg
ICAgfQorICAgICAgICBwYXJzZUdlbmVyYXRvck1ldGhvZCgpIHsKKyAgICAgICAgICAgIGNvbnN0
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IGlzR2VuZXJhdG9y
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29u
dGV4dC5hbGxvd1lpZWxkOwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSB0
cnVlOwotICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJz
KCk7CisgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVy
cygpOwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIHZhciBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2QocGFyYW1zKTsKKyAg
ICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChwYXJhbXMp
OwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWll
bGQ7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5GdW5j
dGlvbkV4cHJlc3Npb24obnVsbCwgcGFyYW1zLnBhcmFtcywgbWV0aG9kLCBpc0dlbmVyYXRvcikp
OwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIu
aW8vZWNtYTI2Mi8jc2VjLWdlbmVyYXRvci1mdW5jdGlvbi1kZWZpbml0aW9ucwotICAgICAgICBQ
YXJzZXIucHJvdG90eXBlLmlzU3RhcnRPZkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgc3RhcnQgPSB0cnVlOwotICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5s
b29rYWhlYWQudmFsdWU7CisgICAgICAgIGlzU3RhcnRPZkV4cHJlc3Npb24oKSB7CisgICAgICAg
ICAgICBsZXQgc3RhcnQgPSB0cnVlOworICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmxv
b2thaGVhZC52YWx1ZTsKICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQudHlwZSkg
ewogICAgICAgICAgICAgICAgIGNhc2UgNyAvKiBQdW5jdHVhdG9yICovOgogICAgICAgICAgICAg
ICAgICAgICBzdGFydCA9ICh2YWx1ZSA9PT0gJ1snKSB8fCAodmFsdWUgPT09ICcoJykgfHwgKHZh
bHVlID09PSAneycpIHx8CkBAIC00NTkzLDE0ICs0NTI3LDE0IEBAIHJldHVybiAvKioqKioqLyAo
ZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHN0YXJ0OwotICAg
ICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlWWllbGRFeHByZXNzaW9uID0g
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
KyAgICAgICAgfQorICAgICAgICBwYXJzZVlpZWxkRXhwcmVzc2lvbigpIHsKKyAgICAgICAgICAg
IGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0
S2V5d29yZCgneWllbGQnKTsKLSAgICAgICAgICAgIHZhciBhcmd1bWVudCA9IG51bGw7Ci0gICAg
ICAgICAgICB2YXIgZGVsZWdhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGxldCBhcmd1bWVudCA9
IG51bGw7CisgICAgICAgICAgICBsZXQgZGVsZWdhdGUgPSBmYWxzZTsKICAgICAgICAgICAgIGlm
ICghdGhpcy5oYXNMaW5lVGVybWluYXRvcikgewotICAgICAgICAgICAgICAgIHZhciBwcmV2aW91
c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKyAgICAgICAgICAgICAgICBj
b25zdCBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKICAgICAg
ICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgIGRlbGVnYXRlID0gdGhpcy5tYXRjaCgnKicpOwogICAgICAgICAgICAgICAgIGlmIChkZWxl
Z2F0ZSkgewpAQCAtNDYxMywyNSArNDU0NywyNiBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9u
KG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuWWllbGRFeHByZXNz
aW9uKGFyZ3VtZW50LCBkZWxlZ2F0ZSkpOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAg
IC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNsYXNzLWRlZmluaXRpb25z
Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDbGFzc0VsZW1lbnQgPSBmdW5jdGlvbiAo
aGFzQ29uc3RydWN0b3IpIHsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFk
OwotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAg
IHZhciBraW5kID0gJyc7Ci0gICAgICAgICAgICB2YXIga2V5ID0gbnVsbDsKLSAgICAgICAgICAg
IHZhciB2YWx1ZSA9IG51bGw7Ci0gICAgICAgICAgICB2YXIgY29tcHV0ZWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIHZhciBtZXRob2QgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBpc1N0YXRpYyA9
IGZhbHNlOwotICAgICAgICAgICAgdmFyIGlzQXN5bmMgPSBmYWxzZTsKKyAgICAgICAgcGFyc2VD
bGFzc0VsZW1lbnQoaGFzQ29uc3RydWN0b3IpIHsKKyAgICAgICAgICAgIGxldCB0b2tlbiA9IHRo
aXMubG9va2FoZWFkOworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OworICAgICAgICAgICAgbGV0IGtpbmQgPSAnJzsKKyAgICAgICAgICAgIGxldCBrZXkgPSBudWxs
OworICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDsKKyAgICAgICAgICAgIGxldCBjb21wdXRl
ZCA9IGZhbHNlOworICAgICAgICAgICAgbGV0IG1ldGhvZCA9IGZhbHNlOworICAgICAgICAgICAg
bGV0IGlzU3RhdGljID0gZmFsc2U7CisgICAgICAgICAgICBsZXQgaXNBc3luYyA9IGZhbHNlOwor
ICAgICAgICAgICAgbGV0IGlzQXN5bmNHZW5lcmF0b3IgPSBmYWxzZTsKICAgICAgICAgICAgIGlm
ICh0aGlzLm1hdGNoKCcqJykpIHsKICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgY29tcHV0
ZWQgPSB0aGlzLm1hdGNoKCdbJyk7CiAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9i
amVjdFByb3BlcnR5S2V5KCk7Ci0gICAgICAgICAgICAgICAgdmFyIGlkID0ga2V5OworICAgICAg
ICAgICAgICAgIGNvbnN0IGlkID0ga2V5OwogICAgICAgICAgICAgICAgIGlmIChpZC5uYW1lID09
PSAnc3RhdGljJyAmJiAodGhpcy5xdWFsaWZpZWRQcm9wZXJ0eU5hbWUodGhpcy5sb29rYWhlYWQp
IHx8IHRoaXMubWF0Y2goJyonKSkpIHsKICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlz
Lmxvb2thaGVhZDsKICAgICAgICAgICAgICAgICAgICAgaXNTdGF0aWMgPSB0cnVlOwpAQCAtNDY0
NCw5ICs0NTc5LDEzIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3
ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgaWYgKCh0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8p
ICYmICF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yICYmICh0b2tlbi52YWx1ZSA9PT0gJ2FzeW5jJykp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHB1bmN0dWF0b3IgPSB0aGlzLmxvb2thaGVhZC52
YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHB1bmN0dWF0b3IgIT09ICc6JyAmJiBwdW5j
dHVhdG9yICE9PSAnKCcgJiYgcHVuY3R1YXRvciAhPT0gJyonKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHB1bmN0dWF0b3IgPSB0aGlzLmxvb2thaGVhZC52YWx1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHB1bmN0dWF0b3IgIT09ICc6JyAmJiBwdW5jdHVhdG9yICE9PSAnKCcpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXN5bmMgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgaXNBc3luY0dlbmVyYXRvciA9IHRoaXMubWF0Y2goJyonKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpc0FzeW5jR2VuZXJhdG9yKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8g
JiYgdG9rZW4udmFsdWUgPT09ICdjb25zdHJ1Y3RvcicpIHsKQEAgLTQ2NTUsNyArNDU5NCw3IEBA
IHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFw
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB2YXIgbG9va2FoZWFkUHJvcGVydHlLZXkgPSB0aGlzLnF1YWxpZmllZFBy
b3BlcnR5TmFtZSh0aGlzLmxvb2thaGVhZCk7CisgICAgICAgICAgICBjb25zdCBsb29rYWhlYWRQ
cm9wZXJ0eUtleSA9IHRoaXMucXVhbGlmaWVkUHJvcGVydHlOYW1lKHRoaXMubG9va2FoZWFkKTsK
ICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pIHsKICAg
ICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdnZXQnICYmIGxvb2thaGVhZFByb3Bl
cnR5S2V5KSB7CiAgICAgICAgICAgICAgICAgICAgIGtpbmQgPSAnZ2V0JzsKQEAgLTQ2ODAsNyAr
NDYxOSw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNr
Qm9vdHN0cmFwCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWtpbmQgJiYga2V5ICYm
IHRoaXMubWF0Y2goJygnKSkgewogICAgICAgICAgICAgICAgIGtpbmQgPSAnaW5pdCc7Ci0gICAg
ICAgICAgICAgICAgdmFsdWUgPSBpc0FzeW5jID8gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kQXN5
bmNGdW5jdGlvbigpIDogdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oKTsKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGlzQXN5bmMgPyB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2RBc3lu
Y0Z1bmN0aW9uKGlzQXN5bmNHZW5lcmF0b3IpIDogdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kRnVu
Y3Rpb24oKTsKICAgICAgICAgICAgICAgICBtZXRob2QgPSB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKCFraW5kKSB7CkBAIC00NzA3LDEwICs0NjQ2LDEwIEBAIHJldHVybiAv
KioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IE5vZGUuTWV0aG9kRGVmaW5pdGlvbihrZXksIGNvbXB1dGVkLCB2YWx1ZSwg
a2luZCwgaXNTdGF0aWMpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5w
YXJzZUNsYXNzRWxlbWVudExpc3QgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgYm9k
eSA9IFtdOwotICAgICAgICAgICAgdmFyIGhhc0NvbnN0cnVjdG9yID0geyB2YWx1ZTogZmFsc2Ug
fTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUNsYXNzRWxlbWVudExpc3QoKSB7CisgICAgICAg
ICAgICBjb25zdCBib2R5ID0gW107CisgICAgICAgICAgICBjb25zdCBoYXNDb25zdHJ1Y3RvciA9
IHsgdmFsdWU6IGZhbHNlIH07CiAgICAgICAgICAgICB0aGlzLmV4cGVjdCgneycpOwogICAgICAg
ICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHsKICAgICAgICAgICAgICAgICBpZiAodGhp
cy5tYXRjaCgnOycpKSB7CkBAIC00NzIyLDc4ICs0NjYxLDc4IEBAIHJldHVybiAvKioqKioqLyAo
ZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB0aGlzLmV4cGVjdCgnfScpOwogICAgICAgICAgICAgcmV0dXJuIGJvZHk7Ci0g
ICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDbGFzc0JvZHkgPSBmdW5j
dGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAg
ICAgICAgICAgdmFyIGVsZW1lbnRMaXN0ID0gdGhpcy5wYXJzZUNsYXNzRWxlbWVudExpc3QoKTsK
KyAgICAgICAgfQorICAgICAgICBwYXJzZUNsYXNzQm9keSgpIHsKKyAgICAgICAgICAgIGNvbnN0
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRMaXN0
ID0gdGhpcy5wYXJzZUNsYXNzRWxlbWVudExpc3QoKTsKICAgICAgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkNsYXNzQm9keShlbGVtZW50TGlzdCkpOwotICAgICAg
ICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQ2xhc3NEZWNsYXJhdGlvbiA9IGZ1
bmN0aW9uIChpZGVudGlmaWVySXNPcHRpb25hbCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHRoaXMu
Y29udGV4dC5zdHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VDbGFzc0RlY2xhcmF0aW9u
KGlkZW50aWZpZXJJc09wdGlvbmFsKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5j
cmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25zdCBwcmV2aW91c1N0cmljdCA9IHRoaXMuY29u
dGV4dC5zdHJpY3Q7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gdHJ1ZTsKICAg
ICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnY2xhc3MnKTsKLSAgICAgICAgICAgIHZhciBp
ZCA9IChpZGVudGlmaWVySXNPcHRpb25hbCAmJiAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMyAv
KiBJZGVudGlmaWVyICovKSkgPyBudWxsIDogdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigp
OwotICAgICAgICAgICAgdmFyIHN1cGVyQ2xhc3MgPSBudWxsOworICAgICAgICAgICAgY29uc3Qg
aWQgPSAoaWRlbnRpZmllcklzT3B0aW9uYWwgJiYgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09IDMg
LyogSWRlbnRpZmllciAqLykpID8gbnVsbCA6IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIo
KTsKKyAgICAgICAgICAgIGxldCBzdXBlckNsYXNzID0gbnVsbDsKICAgICAgICAgICAgIGlmICh0
aGlzLm1hdGNoS2V5d29yZCgnZXh0ZW5kcycpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5uZXh0
VG9rZW4oKTsKICAgICAgICAgICAgICAgICBzdXBlckNsYXNzID0gdGhpcy5pc29sYXRlQ292ZXJH
cmFtbWFyKHRoaXMucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHZhciBjbGFzc0JvZHkgPSB0aGlzLnBhcnNlQ2xhc3NCb2R5
KCk7CisgICAgICAgICAgICBjb25zdCBjbGFzc0JvZHkgPSB0aGlzLnBhcnNlQ2xhc3NCb2R5KCk7
CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7CiAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5DbGFzc0RlY2xhcmF0
aW9uKGlkLCBzdXBlckNsYXNzLCBjbGFzc0JvZHkpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFy
c2VyLnByb3RvdHlwZS5wYXJzZUNsYXNzRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgcHJl
dmlvdXNTdHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0OworICAgICAgICB9CisgICAgICAgIHBh
cnNlQ2xhc3NFeHByZXNzaW9uKCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3Jl
YXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3QgcHJldmlvdXNTdHJpY3QgPSB0aGlzLmNvbnRl
eHQuc3RyaWN0OwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cmljdCA9IHRydWU7CiAgICAg
ICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2NsYXNzJyk7Ci0gICAgICAgICAgICB2YXIgaWQg
PSAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovKSA/IHRoaXMucGFy
c2VWYXJpYWJsZUlkZW50aWZpZXIoKSA6IG51bGw7Ci0gICAgICAgICAgICB2YXIgc3VwZXJDbGFz
cyA9IG51bGw7CisgICAgICAgICAgICBjb25zdCBpZCA9ICh0aGlzLmxvb2thaGVhZC50eXBlID09
PSAzIC8qIElkZW50aWZpZXIgKi8pID8gdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIDog
bnVsbDsKKyAgICAgICAgICAgIGxldCBzdXBlckNsYXNzID0gbnVsbDsKICAgICAgICAgICAgIGlm
ICh0aGlzLm1hdGNoS2V5d29yZCgnZXh0ZW5kcycpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5u
ZXh0VG9rZW4oKTsKICAgICAgICAgICAgICAgICBzdXBlckNsYXNzID0gdGhpcy5pc29sYXRlQ292
ZXJHcmFtbWFyKHRoaXMucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBjbGFzc0JvZHkgPSB0aGlzLnBhcnNlQ2xhc3NC
b2R5KCk7CisgICAgICAgICAgICBjb25zdCBjbGFzc0JvZHkgPSB0aGlzLnBhcnNlQ2xhc3NCb2R5
KCk7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7CiAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5DbGFzc0V4cHJl
c3Npb24oaWQsIHN1cGVyQ2xhc3MsIGNsYXNzQm9keSkpOwotICAgICAgICB9OworICAgICAgICB9
CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXNjcmlwdHMK
ICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbW9kdWxlcwot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTW9kdWxlID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICBwYXJzZU1vZHVsZSgpIHsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSB0
cnVlOwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzTW9kdWxlID0gdHJ1ZTsKICAgICAgICAg
ICAgIHRoaXMuc2Nhbm5lci5pc01vZHVsZSA9IHRydWU7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlRGly
ZWN0aXZlUHJvbG9ndWVzKCk7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVO
b2RlKCk7CisgICAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5wYXJzZURpcmVjdGl2ZVByb2xv
Z3VlcygpOwogICAgICAgICAgICAgd2hpbGUgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09IDIgLyog
RU9GICovKSB7CiAgICAgICAgICAgICAgICAgYm9keS5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRM
aXN0SXRlbSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLk1vZHVsZShib2R5KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBh
cnNlci5wcm90b3R5cGUucGFyc2VTY3JpcHQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2
YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGJvZHkgPSB0aGlz
LnBhcnNlRGlyZWN0aXZlUHJvbG9ndWVzKCk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VTY3Jp
cHQoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAg
ICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5wYXJzZURpcmVjdGl2ZVByb2xvZ3VlcygpOwogICAg
ICAgICAgICAgd2hpbGUgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09IDIgLyogRU9GICovKSB7CiAg
ICAgICAgICAgICAgICAgYm9keS5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBOb2RlLlNjcmlwdChib2R5KSk7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8g
aHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaW1wb3J0cwotICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlTW9kdWxlU3BlY2lmaWVyID0gZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgcGFyc2VNb2R1bGVT
cGVjaWZpZXIoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
CiAgICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gOCAvKiBTdHJpbmdMaXRl
cmFsICovKSB7CiAgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVz
c2FnZXMuSW52YWxpZE1vZHVsZVNwZWNpZmllcik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgdmFyIHJhdyA9IHRo
aXMuZ2V0VG9rZW5SYXcodG9rZW4pOworICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLm5l
eHRUb2tlbigpOworICAgICAgICAgICAgY29uc3QgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tl
bik7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRl
cmFsKHRva2VuLnZhbHVlLCByYXcpKTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAv
LyBpbXBvcnQgezxmb28gYXMgYmFyPn0gLi4uOwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBh
cnNlSW1wb3J0U3BlY2lmaWVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUg
PSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBpbXBvcnRlZDsKLSAgICAgICAg
ICAgIHZhciBsb2NhbDsKKyAgICAgICAgcGFyc2VJbXBvcnRTcGVjaWZpZXIoKSB7CisgICAgICAg
ICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBsZXQgaW1w
b3J0ZWQ7CisgICAgICAgICAgICBsZXQgbG9jYWw7CiAgICAgICAgICAgICBpZiAodGhpcy5sb29r
YWhlYWQudHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovKSB7CiAgICAgICAgICAgICAgICAgaW1w
b3J0ZWQgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CiAgICAgICAgICAgICAgICAg
bG9jYWwgPSBpbXBvcnRlZDsKQEAgLTQ4MTQsMTEgKzQ3NTMsMTEgQEAgcmV0dXJuIC8qKioqKiov
IChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5JbXBvcnRTcGVjaWZpZXIobG9jYWwsIGltcG9ydGVkKSk7Ci0gICAgICAgIH07
CisgICAgICAgIH0KICAgICAgICAgLy8ge2ZvbywgYmFyIGFzIGJhc30KLSAgICAgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZU5hbWVkSW1wb3J0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcGFy
c2VOYW1lZEltcG9ydHMoKSB7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdCgneycpOwotICAgICAg
ICAgICAgdmFyIHNwZWNpZmllcnMgPSBbXTsKKyAgICAgICAgICAgIGNvbnN0IHNwZWNpZmllcnMg
PSBbXTsKICAgICAgICAgICAgIHdoaWxlICghdGhpcy5tYXRjaCgnfScpKSB7CiAgICAgICAgICAg
ICAgICAgc3BlY2lmaWVycy5wdXNoKHRoaXMucGFyc2VJbXBvcnRTcGVjaWZpZXIoKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCd9JykpIHsKQEAgLTQ4MjcsMzIgKzQ3NjYsMzIg
QEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3Ry
YXAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7CiAgICAgICAg
ICAgICByZXR1cm4gc3BlY2lmaWVyczsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAv
LyBpbXBvcnQgPGZvbz4gLi4uOwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlSW1wb3J0
RGVmYXVsdFNwZWNpZmllciA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0g
dGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgbG9jYWwgPSB0aGlzLnBhcnNlSWRl
bnRpZmllck5hbWUoKTsKKyAgICAgICAgcGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVyKCkgewor
ICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAg
Y29uc3QgbG9jYWwgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkltcG9ydERlZmF1bHRTcGVjaWZpZXIo
bG9jYWwpKTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBpbXBvcnQgPCogYXMg
Zm9vPiAuLi47Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJbXBvcnROYW1lc3BhY2VT
cGVjaWZpZXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3Jl
YXRlTm9kZSgpOworICAgICAgICBwYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpIHsKKyAg
ICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAgICAgICAgICAgIHRo
aXMuZXhwZWN0KCcqJyk7CiAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2hDb250ZXh0dWFsS2V5
d29yZCgnYXMnKSkgewogICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18x
Lk1lc3NhZ2VzLk5vQXNBZnRlckltcG9ydE5hbWVzcGFjZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgdmFyIGxvY2FsID0gdGhpcy5w
YXJzZUlkZW50aWZpZXJOYW1lKCk7CisgICAgICAgICAgICBjb25zdCBsb2NhbCA9IHRoaXMucGFy
c2VJZGVudGlmaWVyTmFtZSgpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKGxvY2FsKSk7Ci0gICAgICAgIH07
Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJbXBvcnREZWNsYXJhdGlvbiA9IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUltcG9ydERlY2xhcmF0aW9uKCkgewog
ICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSkgewogICAgICAgICAg
ICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLklsbGVnYWxJbXBvcnRE
ZWNsYXJhdGlvbik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
Y3JlYXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OwogICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdpbXBvcnQnKTsKLSAgICAgICAgICAg
IHZhciBzcmM7Ci0gICAgICAgICAgICB2YXIgc3BlY2lmaWVycyA9IFtdOworICAgICAgICAgICAg
bGV0IHNyYzsKKyAgICAgICAgICAgIGxldCBzcGVjaWZpZXJzID0gW107CiAgICAgICAgICAgICBp
ZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gOCAvKiBTdHJpbmdMaXRlcmFsICovKSB7CiAgICAg
ICAgICAgICAgICAgLy8gaW1wb3J0ICdmb28nOwogICAgICAgICAgICAgICAgIHNyYyA9IHRoaXMu
cGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsKQEAgLTQ4ODgsNyArNDgyNyw3IEBAIHJldHVybiAvKioq
KioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaENvbnRleHR1
YWxLZXl3b3JkKCdmcm9tJykpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0
aGlzLmxvb2thaGVhZC52YWx1ZSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2Vu
IDogbWVzc2FnZXNfMS5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZTsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMubG9va2FoZWFkLnZhbHVlID8gbWVzc2FnZXNfMS5N
ZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBtZXNzYWdlc18xLk1lc3NhZ2VzLk1pc3NpbmdGcm9t
Q2xhdXNlOwogICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZSwgdGhp
cy5sb29rYWhlYWQudmFsdWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB0
aGlzLm5leHRUb2tlbigpOwpAQCAtNDg5Niw0NCArNDgzNSw0NCBAQCByZXR1cm4gLyoqKioqKi8g
KGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7CiAgICAgICAgICAgICByZXR1cm4g
dGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JbXBvcnREZWNsYXJhdGlvbihzcGVjaWZpZXJz
LCBzcmMpKTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzku
Z2l0aHViLmlvL2VjbWEyNjIvI3NlYy1leHBvcnRzCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUu
cGFyc2VFeHBvcnRTcGVjaWZpZXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGxvY2FsID0gdGhpcy5wYXJz
ZUlkZW50aWZpZXJOYW1lKCk7Ci0gICAgICAgICAgICB2YXIgZXhwb3J0ZWQgPSBsb2NhbDsKKyAg
ICAgICAgcGFyc2VFeHBvcnRTcGVjaWZpZXIoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0g
dGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25zdCBsb2NhbCA9IHRoaXMucGFyc2VJ
ZGVudGlmaWVyTmFtZSgpOworICAgICAgICAgICAgbGV0IGV4cG9ydGVkID0gbG9jYWw7CiAgICAg
ICAgICAgICBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7CiAgICAgICAg
ICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAgICAgICAgICBleHBvcnRlZCA9IHRo
aXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0U3BlY2lmaWVyKGxvY2FsLCBl
eHBvcnRlZCkpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRXhw
b3J0RGVjbGFyYXRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VF
eHBvcnREZWNsYXJhdGlvbigpIHsKICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuaW5GdW5j
dGlvbkJvZHkpIHsKICAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5N
ZXNzYWdlcy5JbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb24pOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgn
ZXhwb3J0Jyk7Ci0gICAgICAgICAgICB2YXIgZXhwb3J0RGVjbGFyYXRpb247CisgICAgICAgICAg
ICBsZXQgZXhwb3J0RGVjbGFyYXRpb247CiAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdv
cmQoJ2RlZmF1bHQnKSkgewogICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IC4uLgog
ICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CiAgICAgICAgICAgICAgICAgaWYgKHRo
aXMubWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGV4
cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvbyAoKSB7fQogICAgICAgICAgICAgICAgICAgICAvLyBl
eHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7fQotICAgICAgICAgICAgICAgICAgICB2YXIgZGVj
bGFyYXRpb24gPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbih0cnVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJh
dGlvbih0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJh
dGlvbikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlz
Lm1hdGNoS2V5d29yZCgnY2xhc3MnKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBleHBvcnQg
ZGVmYXVsdCBjbGFzcyBmb28ge30KLSAgICAgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9u
ID0gdGhpcy5wYXJzZUNsYXNzRGVjbGFyYXRpb24odHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUNsYXNzRGVjbGFyYXRpb24odHJ1ZSk7CiAg
ICAgICAgICAgICAgICAgICAgIGV4cG9ydERlY2xhcmF0aW9uID0gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZGVjbGFyYXRpb24pKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaENvbnRleHR1
YWxLZXl3b3JkKCdhc3luYycpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZh
dWx0IGFzeW5jIGZ1bmN0aW9uIGYgKCkge30KICAgICAgICAgICAgICAgICAgICAgLy8gZXhwb3J0
IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKCkge30KICAgICAgICAgICAgICAgICAgICAgLy8gZXhw
b3J0IGRlZmF1bHQgYXN5bmMgeCA9PiB4Ci0gICAgICAgICAgICAgICAgICAgIHZhciBkZWNsYXJh
dGlvbiA9IHRoaXMubWF0Y2hBc3luY0Z1bmN0aW9uKCkgPyB0aGlzLnBhcnNlRnVuY3Rpb25EZWNs
YXJhdGlvbih0cnVlKSA6IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMubWF0Y2hBc3luY0Z1bmN0aW9u
KCkgPyB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbih0cnVlKSA6IHRoaXMucGFyc2VBc3Np
Z25tZW50RXhwcmVzc2lvbigpOwogICAgICAgICAgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlv
biA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9u
KGRlY2xhcmF0aW9uKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2Ug
ewpAQCAtNDk0Myw3ICs0ODgyLDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVz
KSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRl
ZmF1bHQge307CiAgICAgICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IFtdOwogICAg
ICAgICAgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCAoMSArIDIpOwotICAgICAgICAgICAg
ICAgICAgICB2YXIgZGVjbGFyYXRpb24gPSB0aGlzLm1hdGNoKCd7JykgPyB0aGlzLnBhcnNlT2Jq
ZWN0SW5pdGlhbGl6ZXIoKSA6CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlY2xhcmF0aW9u
ID0gdGhpcy5tYXRjaCgneycpID8gdGhpcy5wYXJzZU9iamVjdEluaXRpYWxpemVyKCkgOgogICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaCgnWycpID8gdGhpcy5wYXJzZUFycmF5SW5p
dGlhbGl6ZXIoKSA6IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwogICAgICAgICAg
ICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKICAgICAgICAgICAgICAgICAgICAg
ZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydERl
ZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpOwpAQCAtNDk1MywxNyArNDg5MiwxNyBAQCBy
ZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAog
ICAgICAgICAgICAgICAgIC8vIGV4cG9ydCAqIGZyb20gJ2Zvbyc7CiAgICAgICAgICAgICAgICAg
dGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2hDb250ZXh0
dWFsS2V5d29yZCgnZnJvbScpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0g
dGhpcy5sb29rYWhlYWQudmFsdWUgPyBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tl
biA6IG1lc3NhZ2VzXzEuTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2U7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmxvb2thaGVhZC52YWx1ZSA/IG1lc3NhZ2VzXzEu
TWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDogbWVzc2FnZXNfMS5NZXNzYWdlcy5NaXNzaW5nRnJv
bUNsYXVzZTsKICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2UsIHRo
aXMubG9va2FoZWFkLnZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
dGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICB2YXIgc3JjID0gdGhpcy5wYXJzZU1v
ZHVsZVNwZWNpZmllcigpOworICAgICAgICAgICAgICAgIGNvbnN0IHNyYyA9IHRoaXMucGFyc2VN
b2R1bGVTcGVjaWZpZXIoKTsKICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24o
KTsKICAgICAgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuRXhwb3J0QWxsRGVjbGFyYXRpb24oc3JjKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBlbHNlIGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSA0IC8qIEtleXdvcmQg
Ki8pIHsKICAgICAgICAgICAgICAgICAvLyBleHBvcnQgdmFyIGYgPSAxOwotICAgICAgICAgICAg
ICAgIHZhciBkZWNsYXJhdGlvbiA9IHZvaWQgMDsKKyAgICAgICAgICAgICAgICBsZXQgZGVjbGFy
YXRpb247CiAgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmxvb2thaGVhZC52YWx1ZSkgewog
ICAgICAgICAgICAgICAgICAgICBjYXNlICdsZXQnOgogICAgICAgICAgICAgICAgICAgICBjYXNl
ICdjb25zdCc6CkBAIC00OTgwLDEzICs0OTE5LDEzIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rp
b24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgZXhwb3J0
RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydE5hbWVkRGVj
bGFyYXRpb24oZGVjbGFyYXRpb24sIFtdLCBudWxsKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBlbHNlIGlmICh0aGlzLm1hdGNoQXN5bmNGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xh
cmF0aW9uKCk7CiAgICAgICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIFtd
LCBudWxsKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICB2YXIgc3BlY2lmaWVycyA9IFtdOwotICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBu
dWxsOwotICAgICAgICAgICAgICAgIHZhciBpc0V4cG9ydEZyb21JZGVudGlmaWVyID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWVycyA9IFtdOworICAgICAgICAgICAgICAg
IGxldCBzb3VyY2UgPSBudWxsOworICAgICAgICAgICAgICAgIGxldCBpc0V4cG9ydEZyb21JZGVu
dGlmaWVyID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsKICAgICAg
ICAgICAgICAgICB3aGlsZSAoIXRoaXMubWF0Y2goJ30nKSkgewogICAgICAgICAgICAgICAgICAg
ICBpc0V4cG9ydEZyb21JZGVudGlmaWVyID0gaXNFeHBvcnRGcm9tSWRlbnRpZmllciB8fCB0aGlz
Lm1hdGNoS2V5d29yZCgnZGVmYXVsdCcpOwpAQCAtNTAwNSw3ICs0OTQ0LDcgQEAgcmV0dXJuIC8q
KioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNFeHBvcnRGcm9tSWRlbnRpZmll
cikgewogICAgICAgICAgICAgICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9OyAvLyBtaXNzaW5n
IGZyb21DbGF1c2UKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmxvb2th
aGVhZC52YWx1ZSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDogbWVzc2Fn
ZXNfMS5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZTsKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgbWVzc2FnZSA9IHRoaXMubG9va2FoZWFkLnZhbHVlID8gbWVzc2FnZXNfMS5NZXNzYWdlcy5V
bmV4cGVjdGVkVG9rZW4gOiBtZXNzYWdlc18xLk1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlOwog
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZSwgdGhpcy5sb29rYWhl
YWQudmFsdWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKQEAg
LTUwMTUsOSArNDk1NCw4IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAv
LyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24obnVsbCwg
c3BlY2lmaWVycywgc291cmNlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4g
ZXhwb3J0RGVjbGFyYXRpb247Ci0gICAgICAgIH07Ci0gICAgICAgIHJldHVybiBQYXJzZXI7Ci0g
ICAgfSgpKTsKKyAgICAgICAgfQorICAgIH0KICAgICBleHBvcnRzLlBhcnNlciA9IFBhcnNlcjsK
IAogCkBAIC01MDQ3LDI0ICs0OTg1LDI0IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9k
dWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgInVzZSBzdHJpY3QiOwogICAgIC8qIHRz
bGludDpkaXNhYmxlOm1heC1jbGFzc2VzLXBlci1maWxlICovCiAgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKLSAgICB2YXIg
RXJyb3JIYW5kbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5j
dGlvbiBFcnJvckhhbmRsZXIoKSB7CisgICAgY2xhc3MgRXJyb3JIYW5kbGVyIHsKKyAgICAgICAg
Y29uc3RydWN0b3IoKSB7CiAgICAgICAgICAgICB0aGlzLmVycm9ycyA9IFtdOwogICAgICAgICAg
ICAgdGhpcy50b2xlcmFudCA9IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIEVycm9ySGFuZGxl
ci5wcm90b3R5cGUucmVjb3JkRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IpIHsKKyAgICAgICAgcmVj
b3JkRXJyb3IoZXJyb3IpIHsKICAgICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpOwot
ICAgICAgICB9OwotICAgICAgICBFcnJvckhhbmRsZXIucHJvdG90eXBlLnRvbGVyYXRlID0gZnVu
Y3Rpb24gKGVycm9yKSB7CisgICAgICAgIH0KKyAgICAgICAgdG9sZXJhdGUoZXJyb3IpIHsKICAg
ICAgICAgICAgIGlmICh0aGlzLnRvbGVyYW50KSB7CiAgICAgICAgICAgICAgICAgdGhpcy5yZWNv
cmRFcnJvcihlcnJvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAg
ICAgRXJyb3JIYW5kbGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RFcnJvciA9IGZ1bmN0aW9uIChtc2cs
IGNvbHVtbikgewotICAgICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1zZyk7CisgICAg
ICAgIH0KKyAgICAgICAgY29uc3RydWN0RXJyb3IobXNnLCBjb2x1bW4pIHsKKyAgICAgICAgICAg
IGxldCBlcnJvciA9IG5ldyBFcnJvcihtc2cpOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAg
ICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICAgICAgIH0KQEAgLTUwNzcsMjkgKzUwMTUsMjgg
QEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3Ry
YXAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICov
CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgICAgIH07Ci0gICAgICAgIEVycm9ySGFu
ZGxlci5wcm90b3R5cGUuY3JlYXRlRXJyb3IgPSBmdW5jdGlvbiAoaW5kZXgsIGxpbmUsIGNvbCwg
ZGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgIHZhciBtc2cgPSAnTGluZSAnICsgbGluZSArICc6
ICcgKyBkZXNjcmlwdGlvbjsKLSAgICAgICAgICAgIHZhciBlcnJvciA9IHRoaXMuY29uc3RydWN0
RXJyb3IobXNnLCBjb2wpOworICAgICAgICB9CisgICAgICAgIGNyZWF0ZUVycm9yKGluZGV4LCBs
aW5lLCBjb2wsIGRlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICBjb25zdCBtc2cgPSAnTGluZSAn
ICsgbGluZSArICc6ICcgKyBkZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIGNvbnN0IGVycm9yID0g
dGhpcy5jb25zdHJ1Y3RFcnJvcihtc2csIGNvbCk7CiAgICAgICAgICAgICBlcnJvci5pbmRleCA9
IGluZGV4OwogICAgICAgICAgICAgZXJyb3IubGluZU51bWJlciA9IGxpbmU7CiAgICAgICAgICAg
ICBlcnJvci5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwogICAgICAgICAgICAgcmV0dXJuIGVy
cm9yOwotICAgICAgICB9OwotICAgICAgICBFcnJvckhhbmRsZXIucHJvdG90eXBlLnRocm93RXJy
b3IgPSBmdW5jdGlvbiAoaW5kZXgsIGxpbmUsIGNvbCwgZGVzY3JpcHRpb24pIHsKKyAgICAgICAg
fQorICAgICAgICB0aHJvd0Vycm9yKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKSB7CiAg
ICAgICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2wsIGRlc2Ny
aXB0aW9uKTsKLSAgICAgICAgfTsKLSAgICAgICAgRXJyb3JIYW5kbGVyLnByb3RvdHlwZS50b2xl
cmF0ZUVycm9yID0gZnVuY3Rpb24gKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKSB7Ci0g
ICAgICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2ws
IGRlc2NyaXB0aW9uKTsKKyAgICAgICAgfQorICAgICAgICB0b2xlcmF0ZUVycm9yKGluZGV4LCBs
aW5lLCBjb2wsIGRlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMu
Y3JlYXRlRXJyb3IoaW5kZXgsIGxpbmUsIGNvbCwgZGVzY3JpcHRpb24pOwogICAgICAgICAgICAg
aWYgKHRoaXMudG9sZXJhbnQpIHsKICAgICAgICAgICAgICAgICB0aGlzLnJlY29yZEVycm9yKGVy
cm9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
IHRocm93IGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICByZXR1cm4g
RXJyb3JIYW5kbGVyOwotICAgIH0oKSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgZXhwb3J0cy5F
cnJvckhhbmRsZXIgPSBFcnJvckhhbmRsZXI7CiAKIApAQCAtNTEyMyw2ICs1MDYwLDkgQEAgcmV0
dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAg
ICAgICAgRHVwbGljYXRlQmluZGluZzogJ0R1cGxpY2F0ZSBiaW5kaW5nICUwJywKICAgICAgICAg
RHVwbGljYXRlQ29uc3RydWN0b3I6ICdBIGNsYXNzIG1heSBvbmx5IGhhdmUgb25lIGNvbnN0cnVj
dG9yJywKICAgICAgICAgRHVwbGljYXRlUHJvdG9Qcm9wZXJ0eTogJ0R1cGxpY2F0ZSBfX3Byb3Rv
X18gZmllbGRzIGFyZSBub3QgYWxsb3dlZCBpbiBvYmplY3QgbGl0ZXJhbHMnLAorICAgICAgICBG
b3JBd2FpdEluTm9uQXN5bmM6ICdmb3ItYXdhaXQtb2YgY2FuIG9ubHkgYmUgdXNlZCBpbiBhbiBh
c3luYyBmdW5jdGlvbiBvciBhc3luYyBnZW5lcmF0b3InLAorICAgICAgICBGb3JBd2FpdE9mU2Vt
aWNvbG9uOiAnVW5leHBlY3RlZCBcJztcJyBpbiBmb3ItYXdhaXQtb2YgaGVhZGVyJywKKyAgICAg
ICAgRm9yQXdhaXRPZlNhd0luOiAnVW5leHBlY3RlZCBcJ2luXCcgaW4gZm9yLWF3YWl0LW9mIGhl
YWRlcicsCiAgICAgICAgIEZvckluT2ZMb29wSW5pdGlhbGl6ZXI6ICclMCBsb29wIHZhcmlhYmxl
IGRlY2xhcmF0aW9uIG1heSBub3QgaGF2ZSBhbiBpbml0aWFsaXplcicsCiAgICAgICAgIEdlbmVy
YXRvckluTGVnYWN5Q29udGV4dDogJ0dlbmVyYXRvciBkZWNsYXJhdGlvbnMgYXJlIG5vdCBhbGxv
d2VkIGluIGxlZ2FjeSBjb250ZXh0cycsCiAgICAgICAgIElsbGVnYWxCcmVhazogJ0lsbGVnYWwg
YnJlYWsgc3RhdGVtZW50JywKQEAgLTUxMzcsNiArNTA3Nyw4IEBAIHJldHVybiAvKioqKioqLyAo
ZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgIEludmFsaWRM
SFNJbkZvckluOiAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItaW4nLAogICAgICAgICBJ
bnZhbGlkTEhTSW5Gb3JMb29wOiAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItbG9vcCcs
CiAgICAgICAgIEludmFsaWRNb2R1bGVTcGVjaWZpZXI6ICdVbmV4cGVjdGVkIHRva2VuJywKKyAg
ICAgICAgSW52YWxpZE51bWVyaWNTZXBhcmF0b3JBZnRlckxlYWRpbmdaZXJvOiAnTnVtZXJpYyBz
ZXJwYXJhdG9yIGNhbiBub3QgYmUgdXNlZCBhZnRlciBsZWFkaW5nIDAnLAorICAgICAgICBJbnZh
bGlkTnVtZXJpY1NlcGFyYXRvckFmdGVyTnVtZXJpY0xpdGVyYWw6ICdOdW1lcmljIHNlcGFyYXRv
cnMgYXJlIG5vdCBhbGxvd2VkIGF0IHRoZSBlbmQgb2YgbnVtZXJpYyBsaXRlcmFscycsCiAgICAg
ICAgIEludmFsaWRSZWdFeHA6ICdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbicsCiAgICAgICAg
IExldEluTGV4aWNhbEJpbmRpbmc6ICdsZXQgaXMgZGlzYWxsb3dlZCBhcyBhIGxleGljYWxseSBi
b3VuZCBuYW1lJywKICAgICAgICAgTWlzc2luZ0Zyb21DbGF1c2U6ICdVbmV4cGVjdGVkIHRva2Vu
JywKQEAgLTUxODEsMTcgKzUxMjMsMTcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1
bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKIAogICAgICJ1c2Ugc3RyaWN0IjsKICAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0p
OwotICAgIHZhciBhc3NlcnRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7Ci0gICAgdmFyIGNo
YXJhY3Rlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKLSAgICB2YXIgbWVzc2FnZXNfMSA9
IF9fd2VicGFja19yZXF1aXJlX18oMTEpOworICAgIGNvbnN0IGFzc2VydF8xID0gX193ZWJwYWNr
X3JlcXVpcmVfXyg5KTsKKyAgICBjb25zdCBjaGFyYWN0ZXJfMSA9IF9fd2VicGFja19yZXF1aXJl
X18oNCk7CisgICAgY29uc3QgbWVzc2FnZXNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpOwog
ICAgIGZ1bmN0aW9uIGhleFZhbHVlKGNoKSB7CiAgICAgICAgIHJldHVybiAnMDEyMzQ1Njc4OWFi
Y2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTsKICAgICB9CiAgICAgZnVuY3Rpb24gb2N0
YWxWYWx1ZShjaCkgewogICAgICAgICByZXR1cm4gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKTsKICAg
ICB9Ci0gICAgdmFyIFNjYW5uZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgIGZ1bmN0aW9uIFNjYW5uZXIoY29kZSwgaGFuZGxlcikgeworICAgIGNsYXNzIFNjYW5uZXIg
eworICAgICAgICBjb25zdHJ1Y3Rvcihjb2RlLCBoYW5kbGVyKSB7CiAgICAgICAgICAgICB0aGlz
LnNvdXJjZSA9IGNvZGU7CiAgICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGhhbmRsZXI7
CiAgICAgICAgICAgICB0aGlzLnRyYWNrQ29tbWVudCA9IGZhbHNlOwpAQCAtNTIwMiwzMyArNTE0
NCwzMSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jv
b3RzdHJhcAogICAgICAgICAgICAgdGhpcy5saW5lU3RhcnQgPSAwOwogICAgICAgICAgICAgdGhp
cy5jdXJseVN0YWNrID0gW107CiAgICAgICAgIH0KLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUu
c2F2ZVN0YXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBzYXZlU3RhdGUoKSB7CiAgICAgICAg
ICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLmluZGV4LAogICAgICAg
ICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlciwKICAgICAgICAgICAgICAgICBs
aW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0CiAgICAgICAgICAgICB9OwotICAgICAgICB9OwotICAg
ICAgICBTY2FubmVyLnByb3RvdHlwZS5yZXN0b3JlU3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUpIHsK
KyAgICAgICAgfQorICAgICAgICByZXN0b3JlU3RhdGUoc3RhdGUpIHsKICAgICAgICAgICAgIHRo
aXMuaW5kZXggPSBzdGF0ZS5pbmRleDsKICAgICAgICAgICAgIHRoaXMubGluZU51bWJlciA9IHN0
YXRlLmxpbmVOdW1iZXI7CiAgICAgICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHN0YXRlLmxpbmVT
dGFydDsKLSAgICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuZW9mID0gZnVuY3Rp
b24gKCkgeworICAgICAgICB9CisgICAgICAgIGVvZigpIHsKICAgICAgICAgICAgIHJldHVybiB0
aGlzLmluZGV4ID49IHRoaXMubGVuZ3RoOwotICAgICAgICB9OwotICAgICAgICBTY2FubmVyLnBy
b3RvdHlwZS50aHJvd1VuZXhwZWN0ZWRUb2tlbiA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7Ci0gICAg
ICAgICAgICBpZiAobWVzc2FnZSA9PT0gdm9pZCAwKSB7IG1lc3NhZ2UgPSBtZXNzYWdlc18xLk1l
c3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbklsbGVnYWw7IH0KKyAgICAgICAgfQorICAgICAgICB0aHJv
d1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlID0gbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVk
VG9rZW5JbGxlZ2FsKSB7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIudGhy
b3dFcnJvcih0aGlzLmluZGV4LCB0aGlzLmxpbmVOdW1iZXIsIHRoaXMuaW5kZXggLSB0aGlzLmxp
bmVTdGFydCArIDEsIG1lc3NhZ2UpOwotICAgICAgICB9OwotICAgICAgICBTY2FubmVyLnByb3Rv
dHlwZS50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbiA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7Ci0gICAg
ICAgICAgICBpZiAobWVzc2FnZSA9PT0gdm9pZCAwKSB7IG1lc3NhZ2UgPSBtZXNzYWdlc18xLk1l
c3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbklsbGVnYWw7IH0KKyAgICAgICAgfQorICAgICAgICB0b2xl
cmF0ZVVuZXhwZWN0ZWRUb2tlbihtZXNzYWdlID0gbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVj
dGVkVG9rZW5JbGxlZ2FsKSB7CiAgICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlci50b2xlcmF0
ZUVycm9yKHRoaXMuaW5kZXgsIHRoaXMubGluZU51bWJlciwgdGhpcy5pbmRleCAtIHRoaXMubGlu
ZVN0YXJ0ICsgMSwgbWVzc2FnZSk7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8g
aHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY29tbWVudHMKLSAgICAgICAgU2Nh
bm5lci5wcm90b3R5cGUuc2tpcFNpbmdsZUxpbmVDb21tZW50ID0gZnVuY3Rpb24gKG9mZnNldCkg
ewotICAgICAgICAgICAgdmFyIGNvbW1lbnRzID0gW107Ci0gICAgICAgICAgICB2YXIgc3RhcnQs
IGxvYzsKKyAgICAgICAgc2tpcFNpbmdsZUxpbmVDb21tZW50KG9mZnNldCkgeworICAgICAgICAg
ICAgbGV0IGNvbW1lbnRzID0gW107CisgICAgICAgICAgICBsZXQgc3RhcnQsIGxvYzsKICAgICAg
ICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkgewogICAgICAgICAgICAgICAgIGNvbW1lbnRz
ID0gW107CiAgICAgICAgICAgICAgICAgc3RhcnQgPSB0aGlzLmluZGV4IC0gb2Zmc2V0OwpAQCAt
NTI0MSw3ICs1MTgxLDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8v
IHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNoID0g
dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTsKKyAgICAgICAgICAgICAgICBjb25z
dCBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7CiAgICAgICAgICAgICAg
ICAgKyt0aGlzLmluZGV4OwogICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0
ZXIuaXNMaW5lVGVybWluYXRvcihjaCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
dHJhY2tDb21tZW50KSB7CkBAIC01MjQ5LDcgKzUxODksNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1
bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmU6IHRoaXMubGluZU51bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2x1bW46IHRoaXMuaW5kZXggLSB0aGlzLmxpbmVTdGFydCAtIDEKICAgICAgICAgICAg
ICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtdWx0aUxpbmU6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNsaWNlOiBbc3RhcnQgKyBvZmZzZXQsIHRoaXMuaW5kZXggLSAxXSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCB0aGlzLmluZGV4IC0gMV0sCkBAIC01MjcwLDcg
KzUyMTAsNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFj
a0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmVOdW1iZXIsCiAg
ICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0CiAg
ICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7CisgICAgICAg
ICAgICAgICAgY29uc3QgZW50cnkgPSB7CiAgICAgICAgICAgICAgICAgICAgIG11bHRpTGluZTog
ZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgIHNsaWNlOiBbc3RhcnQgKyBvZmZzZXQsIHRoaXMu
aW5kZXhdLAogICAgICAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCB0aGlzLmluZGV4XSwK
QEAgLTUyNzksMTAgKzUyMTksMTAgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVz
KSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBjb21tZW50cy5wdXNoKGVu
dHJ5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBjb21tZW50czsKLSAgICAg
ICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuc2tpcE11bHRpTGluZUNvbW1lbnQgPSBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgY29tbWVudHMgPSBbXTsKLSAgICAgICAgICAg
IHZhciBzdGFydCwgbG9jOworICAgICAgICB9CisgICAgICAgIHNraXBNdWx0aUxpbmVDb21tZW50
KCkgeworICAgICAgICAgICAgbGV0IGNvbW1lbnRzID0gW107CisgICAgICAgICAgICBsZXQgc3Rh
cnQsIGxvYzsKICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkgewogICAgICAgICAg
ICAgICAgIGNvbW1lbnRzID0gW107CiAgICAgICAgICAgICAgICAgc3RhcnQgPSB0aGlzLmluZGV4
IC0gMjsKQEAgLTUyOTUsNyArNTIzNSw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9k
dWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgewotICAgICAgICAgICAgICAg
IHZhciBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7CisgICAgICAgICAg
ICAgICAgY29uc3QgY2ggPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpOwogICAg
ICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihj
aCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHRoaXMuc291cmNl
LmNoYXJDb2RlQXQodGhpcy5pbmRleCArIDEpID09PSAweDBBKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICArK3RoaXMuaW5kZXg7CkBAIC01MzEzLDcgKzUyNTMsNyBAQCByZXR1cm4gLyoqKioq
Ki8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmVOdW1iZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgZW50cnkgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50cnkg
PSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpTGluZTogdHJ1ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2U6IFtzdGFydCArIDIsIHRoaXMuaW5k
ZXggLSAyXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwg
dGhpcy5pbmRleF0sCkBAIC01MzM1LDcgKzUyNzUsNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0
aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICBs
aW5lOiB0aGlzLmxpbmVOdW1iZXIsCiAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5p
bmRleCAtIHRoaXMubGluZVN0YXJ0CiAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAg
ICB2YXIgZW50cnkgPSB7CisgICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSB7CiAgICAgICAg
ICAgICAgICAgICAgIG11bHRpTGluZTogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgc2xpY2U6
IFtzdGFydCArIDIsIHRoaXMuaW5kZXhdLAogICAgICAgICAgICAgICAgICAgICByYW5nZTogW3N0
YXJ0LCB0aGlzLmluZGV4XSwKQEAgLTUzNDUsMTUgKzUyODUsMTUgQEAgcmV0dXJuIC8qKioqKiov
IChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgICAg
IHJldHVybiBjb21tZW50czsKLSAgICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUu
c2NhbkNvbW1lbnRzID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGNvbW1lbnRzOwor
ICAgICAgICB9CisgICAgICAgIHNjYW5Db21tZW50cygpIHsKKyAgICAgICAgICAgIGxldCBjb21t
ZW50czsKICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkgewogICAgICAgICAgICAg
ICAgIGNvbW1lbnRzID0gW107CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgc3RhcnQg
PSAodGhpcy5pbmRleCA9PT0gMCk7CisgICAgICAgICAgICBsZXQgc3RhcnQgPSAodGhpcy5pbmRl
eCA9PT0gMCk7CiAgICAgICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpOworICAgICAg
ICAgICAgICAgIGxldCBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7CiAg
ICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc1doaXRlU3BhY2UoY2gp
KSB7CiAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKICAgICAgICAgICAgICAgICB9
CkBAIC01MzcwLDcgKzUzMTAsNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMp
IHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc291
cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIDEpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
Y2ggPT09IDB4MkYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMjsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5za2lwU2luZ2xlTGlu
ZUNvbW1lbnQoMik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21tZW50ID0gdGhp
cy5za2lwU2luZ2xlTGluZUNvbW1lbnQoMik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy50cmFja0NvbW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50
cyA9IGNvbW1lbnRzLmNvbmNhdChjb21tZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
QEAgLTUzNzgsNyArNTMxOCw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykg
eyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoY2ggPT09IDB4MkEpIHsgLy8gVSswMDJBIGlzICcqJwogICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAyOwotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGNvbW1lbnQgPSB0aGlzLnNraXBNdWx0aUxpbmVDb21tZW50KCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjb21tZW50ID0gdGhpcy5za2lwTXVsdGlMaW5lQ29tbWVudCgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMgPSBjb21tZW50cy5jb25jYXQoY29tbWVu
dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC01MzkyLDcgKzUzMzIsNyBAQCByZXR1
cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAg
ICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCAr
IDEpID09PSAweDJEKSAmJiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMikg
PT09IDB4M0UpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnLS0+JyBpcyBhIHNpbmds
ZS1saW5lIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMzsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5za2lwU2luZ2xlTGlu
ZUNvbW1lbnQoMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21tZW50ID0gdGhp
cy5za2lwU2luZ2xlTGluZUNvbW1lbnQoMyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy50cmFja0NvbW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50
cyA9IGNvbW1lbnRzLmNvbmNhdChjb21tZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
QEAgLTU0MDQsNyArNTM0NCw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykg
eyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT09IDB4
M0MgJiYgIXRoaXMuaXNNb2R1bGUpIHsgLy8gVSswMDNDIGlzICc8JwogICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy5zb3VyY2Uuc2xpY2UodGhpcy5pbmRleCArIDEsIHRoaXMuaW5kZXggKyA0
KSA9PT0gJyEtLScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gNDsg
Ly8gYDwhLS1gCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMuc2tp
cFNpbmdsZUxpbmVDb21tZW50KDQpOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29t
bWVudCA9IHRoaXMuc2tpcFNpbmdsZUxpbmVDb21tZW50KDQpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29tbWVudHMgPSBjb21tZW50cy5jb25jYXQoY29tbWVudCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CkBAIC01NDE4LDkgKzUzNTgsOSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9u
KG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBjb21tZW50czsKLSAgICAgICAgfTsKKyAgICAg
ICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1mdXR1
cmUtcmVzZXJ2ZWQtd29yZHMKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuaXNGdXR1cmVSZXNl
cnZlZFdvcmQgPSBmdW5jdGlvbiAoaWQpIHsKKyAgICAgICAgaXNGdXR1cmVSZXNlcnZlZFdvcmQo
aWQpIHsKICAgICAgICAgICAgIHN3aXRjaCAoaWQpIHsKICAgICAgICAgICAgICAgICBjYXNlICdl
bnVtJzoKICAgICAgICAgICAgICAgICBjYXNlICdleHBvcnQnOgpAQCAtNTQzMCw4ICs1MzcwLDgg
QEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3Ry
YXAKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIFNjYW5uZXIucHJvdG90
eXBlLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCA9IGZ1bmN0aW9uIChpZCkgeworICAgICAgICB9
CisgICAgICAgIGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChpZCkgewogICAgICAgICAgICAgc3dp
dGNoIChpZCkgewogICAgICAgICAgICAgICAgIGNhc2UgJ2ltcGxlbWVudHMnOgogICAgICAgICAg
ICAgICAgIGNhc2UgJ2ludGVyZmFjZSc6CkBAIC01NDQ2LDEyICs1Mzg2LDEyIEBAIHJldHVybiAv
KioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5pc1Jlc3Ry
aWN0ZWRXb3JkID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIH0KKyAgICAgICAgaXNSZXN0cmlj
dGVkV29yZChpZCkgewogICAgICAgICAgICAgcmV0dXJuIGlkID09PSAnZXZhbCcgfHwgaWQgPT09
ICdhcmd1bWVudHMnOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8v
dGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWtleXdvcmRzCi0gICAgICAgIFNjYW5uZXIucHJv
dG90eXBlLmlzS2V5d29yZCA9IGZ1bmN0aW9uIChpZCkgeworICAgICAgICBpc0tleXdvcmQoaWQp
IHsKICAgICAgICAgICAgIHN3aXRjaCAoaWQubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZSAyOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaWYnKSB8fCAoaWQgPT09
ICdpbicpIHx8IChpZCA9PT0gJ2RvJyk7CkBAIC01NDc3LDIyICs1NDE3LDIyIEBAIHJldHVybiAv
KioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5jb2RlUG9p
bnRBdCA9IGZ1bmN0aW9uIChpKSB7Ci0gICAgICAgICAgICB2YXIgY3AgPSB0aGlzLnNvdXJjZS5j
aGFyQ29kZUF0KGkpOworICAgICAgICB9CisgICAgICAgIGNvZGVQb2ludEF0KGkpIHsKKyAgICAg
ICAgICAgIGxldCBjcCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgICAgICBp
ZiAoY3AgPj0gMHhEODAwICYmIGNwIDw9IDB4REJGRikgewotICAgICAgICAgICAgICAgIHZhciBz
ZWNvbmQgPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KGkgKyAxKTsKKyAgICAgICAgICAgICAgICBj
b25zdCBzZWNvbmQgPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KGkgKyAxKTsKICAgICAgICAgICAg
ICAgICBpZiAoc2Vjb25kID49IDB4REMwMCAmJiBzZWNvbmQgPD0gMHhERkZGKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBmaXJzdCA9IGNwOworICAgICAgICAgICAgICAgICAgICBjb25zdCBm
aXJzdCA9IGNwOwogICAgICAgICAgICAgICAgICAgICBjcCA9IChmaXJzdCAtIDB4RDgwMCkgKiAw
eDQwMCArIHNlY29uZCAtIDB4REMwMCArIDB4MTAwMDA7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGNwOwotICAgICAgICB9OwotICAgICAgICBT
Y2FubmVyLnByb3RvdHlwZS5zY2FuSGV4RXNjYXBlID0gZnVuY3Rpb24gKHByZWZpeCkgewotICAg
ICAgICAgICAgdmFyIGxlbiA9IChwcmVmaXggPT09ICd1JykgPyA0IDogMjsKLSAgICAgICAgICAg
IHZhciBjb2RlID0gMDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kp
IHsKKyAgICAgICAgfQorICAgICAgICBzY2FuSGV4RXNjYXBlKHByZWZpeCkgeworICAgICAgICAg
ICAgY29uc3QgbGVuID0gKHByZWZpeCA9PT0gJ3UnKSA/IDQgOiAyOworICAgICAgICAgICAgbGV0
IGNvZGUgPSAwOworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSkgewog
ICAgICAgICAgICAgICAgIGlmICghdGhpcy5lb2YoKSAmJiBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIu
aXNIZXhEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgewogICAgICAg
ICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgaGV4VmFsdWUodGhpcy5zb3VyY2VbdGhp
cy5pbmRleCsrXSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTUwMSwxMCArNTQ0MSwxMCBAQCBy
ZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcuZnJvbUNoYXJDb2RlKGNvZGUpOwotICAgICAgICB9OwotICAgICAgICBTY2FubmVyLnByb3Rv
dHlwZS5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgIHZhciBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOwotICAgICAgICAgICAgdmFyIGNv
ZGUgPSAwOworICAgICAgICB9CisgICAgICAgIHNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCkg
eworICAgICAgICAgICAgbGV0IGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07CisgICAgICAg
ICAgICBsZXQgY29kZSA9IDA7CiAgICAgICAgICAgICAvLyBBdCBsZWFzdCwgb25lIGhleCBkaWdp
dCBpcyByZXF1aXJlZC4KICAgICAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7CiAgICAgICAgICAg
ICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwpAQCAtNTUyMCwxMSArNTQ2MCwxMSBA
QCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJh
cAogICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuZnJvbUNvZGVQ
b2ludChjb2RlKTsKLSAgICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuZ2V0SWRl
bnRpZmllciA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuaW5k
ZXgrKzsKKyAgICAgICAgfQorICAgICAgICBnZXRJZGVudGlmaWVyKCkgeworICAgICAgICAgICAg
Y29uc3Qgc3RhcnQgPSB0aGlzLmluZGV4Kys7CiAgICAgICAgICAgICB3aGlsZSAoIXRoaXMuZW9m
KCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRo
aXMuaW5kZXgpOworICAgICAgICAgICAgICAgIGNvbnN0IGNoID0gdGhpcy5zb3VyY2UuY2hhckNv
ZGVBdCh0aGlzLmluZGV4KTsKICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gQmxhY2tzbGFzaCAoVSswMDVDKSBtYXJrcyBVbmljb2RlIGVz
Y2FwZSBzZXF1ZW5jZS4KICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHN0YXJ0OwpA
QCAtNTU0MywxMyArNTQ4MywxMyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMp
IHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiB0aGlzLnNvdXJjZS5zbGljZShzdGFydCwgdGhpcy5pbmRleCk7
Ci0gICAgICAgIH07Ci0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLmdldENvbXBsZXhJZGVudGlm
aWVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGNwID0gdGhpcy5jb2RlUG9pbnRB
dCh0aGlzLmluZGV4KTsKLSAgICAgICAgICAgIHZhciBpZCA9IGNoYXJhY3Rlcl8xLkNoYXJhY3Rl
ci5mcm9tQ29kZVBvaW50KGNwKTsKKyAgICAgICAgfQorICAgICAgICBnZXRDb21wbGV4SWRlbnRp
ZmllcigpIHsKKyAgICAgICAgICAgIGxldCBjcCA9IHRoaXMuY29kZVBvaW50QXQodGhpcy5pbmRl
eCk7CisgICAgICAgICAgICBsZXQgaWQgPSBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuZnJvbUNvZGVQ
b2ludChjcCk7CiAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IGlkLmxlbmd0aDsKICAgICAgICAg
ICAgIC8vICdcdScgKFUrMDA1QywgVSswMDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVy
LgotICAgICAgICAgICAgdmFyIGNoOworICAgICAgICAgICAgbGV0IGNoOwogICAgICAgICAgICAg
aWYgKGNwID09PSAweDVDKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlLmNoYXJD
b2RlQXQodGhpcy5pbmRleCkgIT09IDB4NzUpIHsKICAgICAgICAgICAgICAgICAgICAgdGhpcy50
aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwpAQCAtNTU5NiwxMSArNTUzNiwxMSBAQCByZXR1cm4gLyoq
KioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBpZDsKLSAgICAgICAg
fTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUub2N0YWxUb0RlY2ltYWwgPSBmdW5jdGlvbiAo
Y2gpIHsKKyAgICAgICAgfQorICAgICAgICBvY3RhbFRvRGVjaW1hbChjaCkgewogICAgICAgICAg
ICAgLy8gXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQotICAgICAgICAgICAgdmFyIG9j
dGFsID0gKGNoICE9PSAnMCcpOwotICAgICAgICAgICAgdmFyIGNvZGUgPSBvY3RhbFZhbHVlKGNo
KTsKKyAgICAgICAgICAgIGxldCBvY3RhbCA9IChjaCAhPT0gJzAnKTsKKyAgICAgICAgICAgIGxl
dCBjb2RlID0gb2N0YWxWYWx1ZShjaCk7CiAgICAgICAgICAgICBpZiAoIXRoaXMuZW9mKCkgJiYg
Y2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0
KHRoaXMuaW5kZXgpKSkgewogICAgICAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBjb2RlID0gY29kZSAqIDggKyBvY3RhbFZhbHVlKHRoaXMuc291cmNlW3RoaXMuaW5k
ZXgrK10pOwpAQCAtNTYxNCwxMyArNTU1NCwxMyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9u
KG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIGNvZGU6IGNv
ZGUsCiAgICAgICAgICAgICAgICAgb2N0YWw6IG9jdGFsCiAgICAgICAgICAgICB9OwotICAgICAg
ICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2
Mi8jc2VjLW5hbWVzLWFuZC1rZXl3b3JkcwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5zY2Fu
SWRlbnRpZmllciA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciB0eXBlOwotICAgICAg
ICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDsKKyAgICAgICAgc2NhbklkZW50aWZpZXIoKSB7
CisgICAgICAgICAgICBsZXQgdHlwZTsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5p
bmRleDsKICAgICAgICAgICAgIC8vIEJhY2tzbGFzaCAoVSswMDVDKSBzdGFydHMgYW4gZXNjYXBl
ZCBjaGFyYWN0ZXIuCi0gICAgICAgICAgICB2YXIgaWQgPSAodGhpcy5zb3VyY2UuY2hhckNvZGVB
dChzdGFydCkgPT09IDB4NUMpID8gdGhpcy5nZXRDb21wbGV4SWRlbnRpZmllcigpIDogdGhpcy5n
ZXRJZGVudGlmaWVyKCk7CisgICAgICAgICAgICBjb25zdCBpZCA9ICh0aGlzLnNvdXJjZS5jaGFy
Q29kZUF0KHN0YXJ0KSA9PT0gMHg1QykgPyB0aGlzLmdldENvbXBsZXhJZGVudGlmaWVyKCkgOiB0
aGlzLmdldElkZW50aWZpZXIoKTsKICAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGtleXdvcmQg
b3IgbGl0ZXJhbCB3aXRoIG9ubHkgb25lIGNoYXJhY3Rlci4KICAgICAgICAgICAgIC8vIFRodXMs
IGl0IG11c3QgYmUgYW4gaWRlbnRpZmllci4KICAgICAgICAgICAgIGlmIChpZC5sZW5ndGggPT09
IDEpIHsKQEAgLTU2MzksNyArNTU3OSw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9k
dWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgdHlwZSA9IDMgLyog
SWRlbnRpZmllciAqLzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh0eXBlICE9PSAz
IC8qIElkZW50aWZpZXIgKi8gJiYgKHN0YXJ0ICsgaWQubGVuZ3RoICE9PSB0aGlzLmluZGV4KSkg
ewotICAgICAgICAgICAgICAgIHZhciByZXN0b3JlID0gdGhpcy5pbmRleDsKKyAgICAgICAgICAg
ICAgICBjb25zdCByZXN0b3JlID0gdGhpcy5pbmRleDsKICAgICAgICAgICAgICAgICB0aGlzLmlu
ZGV4ID0gc3RhcnQ7CiAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tl
bihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRFc2NhcGVkUmVzZXJ2ZWRXb3JkKTsKICAgICAg
ICAgICAgICAgICB0aGlzLmluZGV4ID0gcmVzdG9yZTsKQEAgLTU2NTIsMTIgKzU1OTIsMTIgQEAg
cmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAK
ICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgICAgICAgZW5kOiB0aGlz
LmluZGV4CiAgICAgICAgICAgICB9OwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8v
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXB1bmN0dWF0b3JzCi0gICAgICAg
IFNjYW5uZXIucHJvdG90eXBlLnNjYW5QdW5jdHVhdG9yID0gZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDsKKyAgICAgICAgc2NhblB1bmN0dWF0b3IoKSB7
CisgICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuaW5kZXg7CiAgICAgICAgICAgICAvLyBD
aGVjayBmb3IgbW9zdCBjb21tb24gc2luZ2xlLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4KLSAgICAg
ICAgICAgIHZhciBzdHIgPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKKyAgICAgICAgICAgIGxl
dCBzdHIgPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAoc3Ry
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSAnKCc6CiAgICAgICAgICAgICAgICAgY2FzZSAneyc6
CkBAIC01NzMyLDM4ICs1NjcyLDU4IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxl
cykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAog
ICAgICAgICAgICAgICAgIGVuZDogdGhpcy5pbmRleAogICAgICAgICAgICAgfTsKLSAgICAgICAg
fTsKKyAgICAgICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIv
I3NlYy1saXRlcmFscy1udW1lcmljLWxpdGVyYWxzCi0gICAgICAgIFNjYW5uZXIucHJvdG90eXBl
LnNjYW5IZXhMaXRlcmFsID0gZnVuY3Rpb24gKHN0YXJ0KSB7Ci0gICAgICAgICAgICB2YXIgbnVt
ID0gJyc7Ci0gICAgICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0hleERpZ2l0KHRoaXMuc291cmNlLmNoYXJD
b2RlQXQodGhpcy5pbmRleCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBzY2FuSGV4TGl0ZXJhbChzdGFydCkgeworICAgICAgICAgICAgbGV0IG51bSA9ICcnOworICAg
ICAgICAgICAgbGV0IG5leHRJbnZhbGlkTnVtZXJpY1NlcGFyYXRvclBvc2l0aW9uID0gdGhpcy5p
bmRleDsKKyAgICAgICAgICAgIHdoaWxlIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNIZXhEaWdp
dCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSB8fCB0aGlzLnNvdXJjZVt0aGlz
LmluZGV4XSA9PT0gJ18nKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlW3RoaXMu
aW5kZXhdID09PSAnXycpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPT09
IG5leHRJbnZhbGlkTnVtZXJpY1NlcGFyYXRvclBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworICAgICAgICAgICAgICAgICAg
ICBuZXh0SW52YWxpZE51bWVyaWNTZXBhcmF0b3JQb3NpdGlvbiA9IHRoaXMuaW5kZXg7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChudW0ubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgdGhpcy50
aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRo
aXMuaW5kZXggPT09IG5leHRJbnZhbGlkTnVtZXJpY1NlcGFyYXRvclBvc2l0aW9uKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2Vz
LkludmFsaWROdW1lcmljU2VwYXJhdG9yQWZ0ZXJOdW1lcmljTGl0ZXJhbCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBsZXQgYmlnaW50ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodGhp
cy5zb3VyY2VbdGhpcy5pbmRleF0gPT09ICduJykgeworICAgICAgICAgICAgICAgICsrdGhpcy5p
bmRleDsKKyAgICAgICAgICAgICAgICBiaWdpbnQgPSB0cnVlOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0aGlz
LnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgewogICAgICAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVy
biB7CiAgICAgICAgICAgICAgICAgdHlwZTogNiAvKiBOdW1lcmljTGl0ZXJhbCAqLywKICAgICAg
ICAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQoJzB4JyArIG51bSwgMTYpLAorICAgICAgICAgICAg
ICAgIGJpZ2ludDogYmlnaW50LAogICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGlu
ZU51bWJlciwKICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0LAogICAg
ICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaW5k
ZXgKICAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIFNjYW5uZXIucHJvdG90eXBl
LnNjYW5CaW5hcnlMaXRlcmFsID0gZnVuY3Rpb24gKHN0YXJ0KSB7Ci0gICAgICAgICAgICB2YXIg
bnVtID0gJyc7Ci0gICAgICAgICAgICB2YXIgY2g7Ci0gICAgICAgICAgICB3aGlsZSAoIXRoaXMu
ZW9mKCkpIHsKLSAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOwot
ICAgICAgICAgICAgICAgIGlmIChjaCAhPT0gJzAnICYmIGNoICE9PSAnMScpIHsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2NhbkJpbmFyeUxpdGVyYWwo
c3RhcnQpIHsKKyAgICAgICAgICAgIGxldCBudW0gPSAnJzsKKyAgICAgICAgICAgIGxldCBjaDsK
KyAgICAgICAgICAgIGxldCBuZXh0SW52YWxpZE51bWVyaWNTZXBhcmF0b3JQb3NpdGlvbiA9IHRo
aXMuaW5kZXg7CisgICAgICAgICAgICB3aGlsZSAodGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09
ICcwJyB8fCB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJzEnIHx8IHRoaXMuc291cmNlW3Ro
aXMuaW5kZXhdID09PSAnXycpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhp
cy5pbmRleF0gPT09ICdfJykgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA9
PT0gbmV4dEludmFsaWROdW1lcmljU2VwYXJhdG9yUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisgICAgICAgICAgICAgICAg
ICAgIG5leHRJbnZhbGlkTnVtZXJpY1NlcGFyYXRvclBvc2l0aW9uID0gdGhpcy5pbmRleDsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIG51bSArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOwogICAgICAgICAgICAgfQpA
QCAtNTc3MSw2ICs1NzMxLDE0IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykg
eyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgLy8gb25seSAwYiBvciAwQgog
ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID09PSBuZXh0SW52YWxpZE51bWVyaWNTZXBh
cmF0b3JQb3NpdGlvbikgeworICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9r
ZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTnVtZXJpY1NlcGFyYXRvckFmdGVyTnVtZXJp
Y0xpdGVyYWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGV0IGJpZ2ludCA9IGZhbHNl
OworICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAnbicpIHsKKyAg
ICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisgICAgICAgICAgICAgICAgYmlnaW50ID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghdGhpcy5lb2YoKSkgewogICAgICAg
ICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTsKICAgICAg
ICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLwpAQCAtNTc4MSwxNSArNTc0OSwx
NiBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3Rz
dHJhcAogICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICB0eXBlOiA2IC8qIE51
bWVyaWNMaXRlcmFsICovLAogICAgICAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludChudW0sIDIp
LAorICAgICAgICAgICAgICAgIGJpZ2ludDogYmlnaW50LAogICAgICAgICAgICAgICAgIGxpbmVO
dW1iZXI6IHRoaXMubGluZU51bWJlciwKICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMu
bGluZVN0YXJ0LAogICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgICAg
ICBlbmQ6IHRoaXMuaW5kZXgKICAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIFNj
YW5uZXIucHJvdG90eXBlLnNjYW5PY3RhbExpdGVyYWwgPSBmdW5jdGlvbiAocHJlZml4LCBzdGFy
dCkgewotICAgICAgICAgICAgdmFyIG51bSA9ICcnOwotICAgICAgICAgICAgdmFyIG9jdGFsID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgc2Nhbk9jdGFsTGl0ZXJhbChwcmVmaXgsIHN0YXJ0
LCBsZWdhY3kpIHsKKyAgICAgICAgICAgIGxldCBudW0gPSAnJzsKKyAgICAgICAgICAgIGxldCBv
Y3RhbCA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09j
dGFsRGlnaXQocHJlZml4LmNoYXJDb2RlQXQoMCkpKSB7CiAgICAgICAgICAgICAgICAgb2N0YWwg
PSB0cnVlOwogICAgICAgICAgICAgICAgIG51bSA9ICcwJyArIHRoaXMuc291cmNlW3RoaXMuaW5k
ZXgrK107CkBAIC01Nzk3LDkgKzU3NjYsMTUgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgICsrdGhpcy5pbmRleDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxl
ICghdGhpcy5lb2YoKSkgewotICAgICAgICAgICAgICAgIGlmICghY2hhcmFjdGVyXzEuQ2hhcmFj
dGVyLmlzT2N0YWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgewot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGxldCBuZXh0SW52YWxpZE51
bWVyaWNTZXBhcmF0b3JQb3NpdGlvbiA9IGxlZ2FjeSA/IC0xIDogdGhpcy5pbmRleDsKKyAgICAg
ICAgICAgIHdoaWxlIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNPY3RhbERpZ2l0KHRoaXMuc291
cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpIHx8IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09
PSAnXycpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09
ICdfJykgeworICAgICAgICAgICAgICAgICAgICBpZiAobGVnYWN5IHx8IHRoaXMuaW5kZXggPT09
IG5leHRJbnZhbGlkTnVtZXJpY1NlcGFyYXRvclBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworICAgICAgICAgICAgICAgICAg
ICBuZXh0SW52YWxpZE51bWVyaWNTZXBhcmF0b3JQb3NpdGlvbiA9IHRoaXMuaW5kZXg7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKICAgICAgICAgICAgIH0KQEAg
LTU4MDcsNiArNTc4MiwxNCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsg
Ly8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIC8vIG9ubHkgMG8gb3IgME8KICAg
ICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CiAgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA9PT0gbmV4dEludmFsaWROdW1lcmljU2VwYXJh
dG9yUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2Vu
KG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZE51bWVyaWNTZXBhcmF0b3JBZnRlck51bWVyaWNM
aXRlcmFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxldCBiaWdpbnQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGlmICghbGVnYWN5ICYmIHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAn
bicpIHsKKyAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisgICAgICAgICAgICAgICAgYmln
aW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5D
aGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmlu
ZGV4KSkgfHwgY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNl
LmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1Vu
ZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICAgICAgfQpAQCAtNTgxNCwxNyArNTc5NywxOCBAQCBy
ZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAog
ICAgICAgICAgICAgICAgIHR5cGU6IDYgLyogTnVtZXJpY0xpdGVyYWwgKi8sCiAgICAgICAgICAg
ICAgICAgdmFsdWU6IHBhcnNlSW50KG51bSwgOCksCiAgICAgICAgICAgICAgICAgb2N0YWw6IG9j
dGFsLAorICAgICAgICAgICAgICAgIGJpZ2ludDogYmlnaW50LAogICAgICAgICAgICAgICAgIGxp
bmVOdW1iZXI6IHRoaXMubGluZU51bWJlciwKICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRo
aXMubGluZVN0YXJ0LAogICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAg
ICAgICBlbmQ6IHRoaXMuaW5kZXgKICAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAg
IFNjYW5uZXIucHJvdG90eXBlLmlzSW1wbGljaXRPY3RhbExpdGVyYWwgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIH0KKyAgICAgICAgaXNJbXBsaWNpdE9jdGFsTGl0ZXJhbCgpIHsKICAgICAgICAg
ICAgIC8vIEltcGxpY2l0IG9jdGFsLCB1bmxlc3MgdGhlcmUgaXMgYSBub24tb2N0YWwgZGlnaXQu
CiAgICAgICAgICAgICAvLyAoQW5uZXggQi4xLjEgb24gTnVtZXJpYyBMaXRlcmFscykKLSAgICAg
ICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmluZGV4ICsgMTsgaSA8IHRoaXMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVtpXTsKKyAgICAgICAgICAg
IGZvciAobGV0IGkgPSB0aGlzLmluZGV4ICsgMTsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBjaCA9IHRoaXMuc291cmNlW2ldOwogICAgICAgICAgICAgICAg
IGlmIChjaCA9PT0gJzgnIHx8IGNoID09PSAnOScpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KQEAgLTU4MzMsMTIgKzU4MTcsMTMgQEAgcmV0
dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuc2Nhbk51bWVyaWNMaXRlcmFs
ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDsKLSAg
ICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlW3N0YXJ0XTsKKyAgICAgICAgfQorICAgICAg
ICBzY2FuTnVtZXJpY0xpdGVyYWwoKSB7CisgICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMu
aW5kZXg7CisgICAgICAgICAgICBsZXQgY2ggPSB0aGlzLnNvdXJjZVtzdGFydF07CiAgICAgICAg
ICAgICBhc3NlcnRfMS5hc3NlcnQoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0
KGNoLmNoYXJDb2RlQXQoMCkpIHx8IChjaCA9PT0gJy4nKSwgJ051bWVyaWMgbGl0ZXJhbCBtdXN0
IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBwb2ludCcpOwotICAgICAg
ICAgICAgdmFyIG51bSA9ICcnOworICAgICAgICAgICAgbGV0IG5leHRJbnZhbGlkTnVtZXJpY1Nl
cGFyYXRvclBvc2l0aW9uID0gLTE7CisgICAgICAgICAgICBsZXQgbnVtID0gJyc7CiAgICAgICAg
ICAgICBpZiAoY2ggIT09ICcuJykgewogICAgICAgICAgICAgICAgIG51bSA9IHRoaXMuc291cmNl
W3RoaXMuaW5kZXgrK107CiAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmlu
ZGV4XTsKQEAgLTU4NDYsNiArNTgzMSw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9k
dWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgLy8gT2N0YWwgbnVt
YmVyIHN0YXJ0cyB3aXRoICcwJy4KICAgICAgICAgICAgICAgICAvLyBPY3RhbCBudW1iZXIgaW4g
RVM2IHN0YXJ0cyB3aXRoICcwbycuCiAgICAgICAgICAgICAgICAgLy8gQmluYXJ5IG51bWJlciBp
biBFUzYgc3RhcnRzIHdpdGggJzBiJy4KKyAgICAgICAgICAgICAgICBsZXQgd2FzWmVyb1ByZWZp
eGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKG51bSA9PT0gJzAnKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3gnIHx8IGNoID09PSAnWCcpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKQEAgLTU4NTYsMzQgKzU4NDIsOTcgQEAgcmV0dXJu
IC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5CaW5hcnlMaXRlcmFsKHN0YXJ0KTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdv
JyB8fCBjaCA9PT0gJ08nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5z
Y2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBsZWdhY3kgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNj
YW5PY3RhbExpdGVyYWwoY2gsIHN0YXJ0LCBsZWdhY3kpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaCAmJiBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNP
Y3RhbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGhpcy5pc0ltcGxpY2l0T2N0YWxMaXRlcmFsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5zY2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVnYWN5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCwgbGVn
YWN5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdfJykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFs
aWROdW1lcmljU2VwYXJhdG9yQWZ0ZXJMZWFkaW5nWmVybyk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgd2FzWmVyb1ByZWZpeGVkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5p
c0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworICAg
ICAgICAgICAgICAgIHdoaWxlIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQo
dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkgfHwgdGhpcy5zb3VyY2VbdGhpcy5p
bmRleF0gPT09ICdfJykgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhp
cy5pbmRleF0gPT09ICdfJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhc1plcm9Q
cmVmaXhlZCB8fCB0aGlzLmluZGV4ID09PSBuZXh0SW52YWxpZE51bWVyaWNTZXBhcmF0b3JQb3Np
dGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVk
VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICsrdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJbnZhbGlkTnVt
ZXJpY1NlcGFyYXRvclBvc2l0aW9uID0gdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IG51bSArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOwogICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA9PT0gbmV4dEludmFsaWROdW1lcmljU2VwYXJh
dG9yUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRU
b2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWROdW1lcmljU2VwYXJhdG9yQWZ0ZXJMZWFk
aW5nWmVybyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNoID0gdGhpcy5z
b3VyY2VbdGhpcy5pbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnbicgJiYgKCF3
YXNaZXJvUHJlZml4ZWQgfHwgbnVtID09PSAnMCcpKSB7CisgICAgICAgICAgICAgICAgICAgICsr
dGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rl
ci5pc0lkZW50aWZpZXJTdGFydCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0g
Z2xvYmFsVGhpcy5CaWdJbnQgPyBnbG9iYWxUaGlzLkJpZ0ludCh0aGlzLnNvdXJjZS5zbGljZShz
dGFydCwgdGhpcy5pbmRleCAtIDEpLnJlcGxhY2UoL18vZywgJycpKSA6IC8qIGlzdGFuYnVsIGln
bm9yZSBuZXh0ICovIG51bGw7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlOiA2IC8qIE51bWVyaWNMaXRlcmFsICovLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgYmln
aW50OiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5saW5l
TnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFy
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZDogdGhpcy5pbmRleAorICAgICAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjaCA9PT0gJy4nKSB7
CiAgICAgICAgICAgICAgICAgbnVtICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107Ci0gICAg
ICAgICAgICAgICAgd2hpbGUgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0
aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworICAgICAgICAgICAgICAgIGlm
ICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJ18nKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgbmV4dEludmFsaWROdW1lcmljU2VwYXJhdG9yUG9zaXRpb24gPSAtMTsKKyAgICAg
ICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRo
aXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpIHx8IHRoaXMuc291cmNlW3RoaXMuaW5k
ZXhdID09PSAnXycpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlW3RoaXMu
aW5kZXhdID09PSAnXycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluZGV4
ID09PSBuZXh0SW52YWxpZE51bWVyaWNTZXBhcmF0b3JQb3NpdGlvbikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5leHRJbnZhbGlkTnVtZXJpY1NlcGFyYXRvclBvc2l0aW9u
ID0gdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG51bSArPSB0aGlzLnNvdXJjZVt0
aGlzLmluZGV4KytdOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjaCA9IHRo
aXMuc291cmNlW3RoaXMuaW5kZXhdOworICAgICAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID09
PSBuZXh0SW52YWxpZE51bWVyaWNTZXBhcmF0b3JQb3NpdGlvbikgeworICAgICAgICAgICAgICAg
ICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxp
ZE51bWVyaWNTZXBhcmF0b3JBZnRlck51bWVyaWNMaXRlcmFsKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0Un
KSB7CiAgICAgICAgICAgICAgICAgbnVtICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CiAg
ICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKKyAgICAgICAgICAg
ICAgICBpZiAoY2ggPT09ICdfJykgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5l
eHBlY3RlZFRva2VuKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChj
aCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsKICAgICAgICAgICAgICAgICAgICAgbnVtICs9IHRo
aXMuc291cmNlW3RoaXMuaW5kZXgrK107CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNv
dXJjZVt0aGlzLmluZGV4XSA9PT0gJ18nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnRocm93VW5leHBlY3RlZFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgbmV4dEludmFsaWROdW1lcmljU2VwYXJhdG9yUG9z
aXRpb24gPSAtMTsKICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlz
RGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHdoaWxlIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGln
aXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNv
dXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSB8fCB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9
PT0gJ18nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhpcy5p
bmRleF0gPT09ICdfJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlu
ZGV4ID09PSBuZXh0SW52YWxpZE51bWVyaWNTZXBhcmF0b3JQb3NpdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsr
dGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SW52YWxpZE51bWVy
aWNTZXBhcmF0b3JQb3NpdGlvbiA9IHRoaXMuaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTU4OTEsNiArNTk0MCw5IEBAIHJldHVy
biAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAg
ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA9PT0gbmV4
dEludmFsaWROdW1lcmljU2VwYXJhdG9yUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aGlz
LnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZE51bWVyaWNT
ZXBhcmF0b3JBZnRlck51bWVyaWNMaXRlcmFsKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQodGhpcy5zb3VyY2Uu
Y2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5l
eHBlY3RlZFRva2VuKCk7CiAgICAgICAgICAgICB9CkBAIC01OTAyLDE3ICs1OTU0LDE3IEBAIHJl
dHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAg
ICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICAgICAgIGVuZDogdGhpcy5p
bmRleAogICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBo
dHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1saXRlcmFscy1zdHJpbmctbGl0ZXJh
bHMKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblN0cmluZ0xpdGVyYWwgPSBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4OwotICAgICAgICAgICAg
dmFyIHF1b3RlID0gdGhpcy5zb3VyY2Vbc3RhcnRdOworICAgICAgICBzY2FuU3RyaW5nTGl0ZXJh
bCgpIHsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5pbmRleDsKKyAgICAgICAgICAg
IGxldCBxdW90ZSA9IHRoaXMuc291cmNlW3N0YXJ0XTsKICAgICAgICAgICAgIGFzc2VydF8xLmFz
c2VydCgocXVvdGUgPT09ICdcJycgfHwgcXVvdGUgPT09ICciJyksICdTdHJpbmcgbGl0ZXJhbCBt
dXN0IHN0YXJ0cyB3aXRoIGEgcXVvdGUnKTsKICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKLSAg
ICAgICAgICAgIHZhciBvY3RhbCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIHN0ciA9ICcnOwor
ICAgICAgICAgICAgbGV0IG9jdGFsID0gZmFsc2U7CisgICAgICAgICAgICBsZXQgc3RyID0gJyc7
CiAgICAgICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKLSAgICAgICAgICAgICAgICB2YXIg
Y2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworICAgICAgICAgICAgICAgIGxldCBjaCA9
IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CiAgICAgICAgICAgICAgICAgaWYgKGNoID09PSBx
dW90ZSkgewogICAgICAgICAgICAgICAgICAgICBxdW90ZSA9ICcnOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTU5MjcsNyArNTk3OSw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rp
b24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHIgKz0gdGhpcy5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHVuZXNjYXBlZENoYXIgPSB0aGlzLnNjYW5IZXhFc2NhcGUoY2gpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5lc2NhcGVkQ2hhciA9IHRoaXMuc2NhbkhleEVz
Y2FwZShjaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2Nh
cGVkQ2hhciA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTU5MzUsNyArNTk4Nyw3IEBAIHJldHVybiAvKioqKioqLyAoZnVu
Y3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB1bmVzY2FwZWQgPSB0aGlzLnNjYW5IZXhFc2NhcGUoY2gpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmVzY2FwZWQgPSB0aGlzLnNjYW5I
ZXhFc2NhcGUoY2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2Nh
cGVkID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZEhleEVzY2Fw
ZVNlcXVlbmNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNTk2Niw3
ICs2MDE4LDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBh
Y2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoICYmIGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQoY2gu
Y2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBvY3RUb0RlYyA9IHRoaXMub2N0YWxUb0RlY2ltYWwoY2gpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgb2N0VG9EZWMgPSB0aGlzLm9jdGFsVG9EZWNpbWFsKGNo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdGFsID0gb2N0VG9EZWMu
b2N0YWwgfHwgb2N0YWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIg
Kz0gU3RyaW5nLmZyb21DaGFyQ29kZShvY3RUb0RlYy5jb2RlKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQpAQCAtNjAwNCwxOCArNjA1NiwxOCBAQCByZXR1cm4gLyoqKioqKi8g
KGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAg
IHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKICAgICAgICAg
ICAgIH07Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5Lmdp
dGh1Yi5pby9lY21hMjYyLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMK
LSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblRlbXBsYXRlID0gZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgdmFyIGNvb2tlZCA9ICcnOwotICAgICAgICAgICAgdmFyIHRlcm1pbmF0ZWQg
PSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuaW5kZXg7Ci0gICAgICAgICAg
ICB2YXIgaGVhZCA9ICh0aGlzLnNvdXJjZVtzdGFydF0gPT09ICdgJyk7Ci0gICAgICAgICAgICB2
YXIgdGFpbCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIHJhd09mZnNldCA9IDI7CisgICAgICAg
IHNjYW5UZW1wbGF0ZSgpIHsKKyAgICAgICAgICAgIGxldCBjb29rZWQgPSAnJzsKKyAgICAgICAg
ICAgIGxldCB0ZXJtaW5hdGVkID0gZmFsc2U7CisgICAgICAgICAgICBjb25zdCBzdGFydCA9IHRo
aXMuaW5kZXg7CisgICAgICAgICAgICBjb25zdCBoZWFkID0gKHRoaXMuc291cmNlW3N0YXJ0XSA9
PT0gJ2AnKTsKKyAgICAgICAgICAgIGxldCB0YWlsID0gZmFsc2U7CisgICAgICAgICAgICBsZXQg
cmF3T2Zmc2V0ID0gMjsKICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKICAgICAgICAgICAgIHdo
aWxlICghdGhpcy5lb2YoKSkgewotICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNl
W3RoaXMuaW5kZXgrK107CisgICAgICAgICAgICAgICAgbGV0IGNoID0gdGhpcy5zb3VyY2VbdGhp
cy5pbmRleCsrXTsKICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdgJykgewogICAgICAgICAg
ICAgICAgICAgICByYXdPZmZzZXQgPSAxOwogICAgICAgICAgICAgICAgICAgICB0YWlsID0gdHJ1
ZTsKQEAgLTYwNTAsOCArNjEwMiw4IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxl
cykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb29rZWQgKz0gdGhpcy5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3Rv
cmUgPSB0aGlzLmluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHVuZXNjYXBlZENoYXIgPSB0aGlzLnNjYW5IZXhFc2NhcGUoY2gpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdG9yZSA9IHRoaXMuaW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmVzY2FwZWRDaGFyID0gdGhpcy5z
Y2FuSGV4RXNjYXBlKGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh1bmVzY2FwZWRDaGFyICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29va2VkICs9IHVuZXNjYXBlZENoYXI7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CkBAIC02MDYyLDcgKzYxMTQsNyBAQCByZXR1cm4gLyoqKioqKi8g
KGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgdW5lc2NhcGVkID0gdGhpcy5zY2FuSGV4RXNjYXBlKGNoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5lc2NhcGVkID0gdGhpcy5z
Y2FuSGV4RXNjYXBlKGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVu
ZXNjYXBlZCA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRIZXhF
c2NhcGVTZXF1ZW5jZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTYx
MzIsMjYgKzYxODQsMjYgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8v
IHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAg
ICAgICAgICAgZW5kOiB0aGlzLmluZGV4CiAgICAgICAgICAgICB9OwotICAgICAgICB9OworICAg
ICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxp
dGVyYWxzLXJlZ3VsYXItZXhwcmVzc2lvbi1saXRlcmFscwotICAgICAgICBTY2FubmVyLnByb3Rv
dHlwZS50ZXN0UmVnRXhwID0gZnVuY3Rpb24gKHBhdHRlcm4sIGZsYWdzKSB7CisgICAgICAgIHRl
c3RSZWdFeHAocGF0dGVybiwgZmxhZ3MpIHsKICAgICAgICAgICAgIC8vIFRoZSBCTVAgY2hhcmFj
dGVyIHRvIHVzZSBhcyBhIHJlcGxhY2VtZW50IGZvciBhc3RyYWwgc3ltYm9scyB3aGVuCiAgICAg
ICAgICAgICAvLyB0cmFuc2xhdGluZyBhbiBFUzYgInUiLWZsYWdnZWQgcGF0dGVybiB0byBhbiBF
UzUtY29tcGF0aWJsZQogICAgICAgICAgICAgLy8gYXBwcm94aW1hdGlvbi4KICAgICAgICAgICAg
IC8vIE5vdGU6IHJlcGxhY2luZyB3aXRoICdcdUZGRkYnIGVuYWJsZXMgZmFsc2UgcG9zaXRpdmVz
IGluIHVubGlrZWx5CiAgICAgICAgICAgICAvLyBzY2VuYXJpb3MuIEZvciBleGFtcGxlLCBgW1x1
ezEwNDRmfS1cdXsxMDQ0MH1dYCBpcyBhbiBpbnZhbGlkCiAgICAgICAgICAgICAvLyBwYXR0ZXJu
IHRoYXQgd291bGQgbm90IGJlIGRldGVjdGVkIGJ5IHRoaXMgc3Vic3RpdHV0aW9uLgotICAgICAg
ICAgICAgdmFyIGFzdHJhbFN1YnN0aXR1dGUgPSAnXHVGRkZGJzsKLSAgICAgICAgICAgIHZhciB0
bXAgPSBwYXR0ZXJuOwotICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICAgICAg
Y29uc3QgYXN0cmFsU3Vic3RpdHV0ZSA9ICdcdUZGRkYnOworICAgICAgICAgICAgbGV0IHRtcCA9
IHBhdHRlcm47CisgICAgICAgICAgICBjb25zdCBzZWxmID0gdGhpczsKICAgICAgICAgICAgIGlm
IChmbGFncy5pbmRleE9mKCd1JykgPj0gMCkgewogICAgICAgICAgICAgICAgIHRtcCA9IHRtcAog
ICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGV2ZXJ5IFVuaWNvZGUgZXNjYXBlIHNlcXVl
bmNlIHdpdGggdGhlIGVxdWl2YWxlbnQKICAgICAgICAgICAgICAgICAgICAgLy8gQk1QIGNoYXJh
Y3RlciBvciBhIGNvbnN0YW50IEFTQ0lJIGNvZGUgcG9pbnQgaW4gdGhlIGNhc2Ugb2YKICAgICAg
ICAgICAgICAgICAgICAgLy8gYXN0cmFsIHN5bWJvbHMuIChTZWUgdGhlIGFib3ZlIG5vdGUgb24g
YGFzdHJhbFN1YnN0aXR1dGVgCiAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBtb3JlIGluZm9y
bWF0aW9uLikKLSAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcdVx7KFswLTlhLWZBLUZd
KylcfXxcXHUoW2EtZkEtRjAtOV17NH0pL2csIGZ1bmN0aW9uICgkMCwgJDEsICQyKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBjb2RlUG9pbnQgPSBwYXJzZUludCgkMSB8fCAkMiwgMTYpOwor
ICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFx1XHsoWzAtOWEtZkEtRl0rKVx9fFxcdShb
YS1mQS1GMC05XXs0fSkvZywgKCQwLCAkMSwgJDIpID0+IHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY29kZVBvaW50ID0gcGFyc2VJbnQoJDEgfHwgJDIsIDE2KTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvZGVQb2ludCA+IDB4MTBGRkZGKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZFJl
Z0V4cCk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTYxODIsMTMgKzYyMzQsMTMgQEAgcmV0
dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAg
ICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLwogICAgICAgICAgICAgICAg
IHJldHVybiBudWxsOwogICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICBTY2FubmVy
LnByb3RvdHlwZS5zY2FuUmVnRXhwQm9keSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZh
ciBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOworICAgICAgICB9CisgICAgICAgIHNjYW5S
ZWdFeHBCb2R5KCkgeworICAgICAgICAgICAgbGV0IGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRl
eF07CiAgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQoY2ggPT09ICcvJywgJ1JlZ3VsYXIgZXhw
cmVzc2lvbiBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoJyk7Ci0gICAgICAgICAgICB2
YXIgc3RyID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKLSAgICAgICAgICAgIHZhciBjbGFz
c01hcmtlciA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIHRlcm1pbmF0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGxldCBzdHIgPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworICAgICAgICAg
ICAgbGV0IGNsYXNzTWFya2VyID0gZmFsc2U7CisgICAgICAgICAgICBsZXQgdGVybWluYXRlZCA9
IGZhbHNlOwogICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7CiAgICAgICAgICAgICAg
ICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOwogICAgICAgICAgICAgICAgIHN0ciAr
PSBjaDsKQEAgLTYyMjMsMTIgKzYyNzUsMTIgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IC8vIEV4Y2x1ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2guCiAgICAgICAgICAgICByZXR1
cm4gc3RyLnN1YnN0cigxLCBzdHIubGVuZ3RoIC0gMik7Ci0gICAgICAgIH07Ci0gICAgICAgIFNj
YW5uZXIucHJvdG90eXBlLnNjYW5SZWdFeHBGbGFncyA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgIHZhciBzdHIgPSAnJzsKLSAgICAgICAgICAgIHZhciBmbGFncyA9ICcnOworICAgICAgICB9
CisgICAgICAgIHNjYW5SZWdFeHBGbGFncygpIHsKKyAgICAgICAgICAgIGxldCBzdHIgPSAnJzsK
KyAgICAgICAgICAgIGxldCBmbGFncyA9ICcnOwogICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVv
ZigpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07
CisgICAgICAgICAgICAgICAgbGV0IGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07CiAgICAg
ICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydChj
aC5jaGFyQ29kZUF0KDApKSkgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CkBAIC02MjM3LDggKzYyODksOCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9u
KG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICBjaCA9
IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09
ICd1JykgewogICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OwotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHJlc3RvcmUgPSB0aGlzLmluZGV4OwotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGNoYXIgPSB0aGlzLnNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxldCByZXN0b3JlID0gdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgPSB0aGlzLnNjYW5IZXhFc2NhcGUoJ3UnKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjaGFyICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxhZ3MgKz0gY2hhcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHN0
ciArPSAnXFx1JzsgcmVzdG9yZSA8IHRoaXMuaW5kZXg7ICsrcmVzdG9yZSkgewpAQCAtNjI2Mywx
MiArNjMxNSwxMiBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2Vi
cGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHJldHVybiBmbGFnczsKLSAgICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUu
c2NhblJlZ0V4cCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMu
aW5kZXg7Ci0gICAgICAgICAgICB2YXIgcGF0dGVybiA9IHRoaXMuc2NhblJlZ0V4cEJvZHkoKTsK
LSAgICAgICAgICAgIHZhciBmbGFncyA9IHRoaXMuc2NhblJlZ0V4cEZsYWdzKCk7Ci0gICAgICAg
ICAgICB2YXIgdmFsdWUgPSB0aGlzLnRlc3RSZWdFeHAocGF0dGVybiwgZmxhZ3MpOworICAgICAg
ICB9CisgICAgICAgIHNjYW5SZWdFeHAoKSB7CisgICAgICAgICAgICBjb25zdCBzdGFydCA9IHRo
aXMuaW5kZXg7CisgICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5zY2FuUmVnRXhwQm9k
eSgpOworICAgICAgICAgICAgY29uc3QgZmxhZ3MgPSB0aGlzLnNjYW5SZWdFeHBGbGFncygpOwor
ICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnRlc3RSZWdFeHAocGF0dGVybiwgZmxhZ3Mp
OwogICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICB0eXBlOiA5IC8qIFJlZ3Vs
YXJFeHByZXNzaW9uICovLAogICAgICAgICAgICAgICAgIHZhbHVlOiAnJywKQEAgLTYyODAsOCAr
NjMzMiw4IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNr
Qm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICAgICAg
IGVuZDogdGhpcy5pbmRleAogICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAgU2Nh
bm5lci5wcm90b3R5cGUubGV4ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB9CisgICAgICAgIGxl
eCgpIHsKICAgICAgICAgICAgIGlmICh0aGlzLmVvZigpKSB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHsKICAgICAgICAgICAgICAgICAgICAgdHlwZTogMiAvKiBFT0YgKi8sCkBAIC02MjkyLDcg
KzYzNDQsNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFj
a0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKICAgICAgICAg
ICAgICAgICB9OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGNwID0gdGhpcy5zb3Vy
Y2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IGNwID0gdGhpcy5z
b3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTsKICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJf
MS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQoY3ApKSB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuc2NhbklkZW50aWZpZXIoKTsKICAgICAgICAgICAgIH0KQEAgLTYzMjcsOSArNjM3
OSw4IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9v
dHN0cmFwCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0
dXJuIHRoaXMuc2NhblB1bmN0dWF0b3IoKTsKLSAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIFNj
YW5uZXI7Ci0gICAgfSgpKTsKKyAgICAgICAgfQorICAgIH0KICAgICBleHBvcnRzLlNjYW5uZXIg
PSBTY2FubmVyOwogCiAKQEAgLTY2MjEsMTYgKzY2NzIsMTYgQEAgcmV0dXJuIC8qKioqKiovIChm
dW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKIAogICAgICJ1c2Ugc3RyaWN0
IjsKICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZh
bHVlOiB0cnVlIH0pOwotICAgIHZhciBlcnJvcl9oYW5kbGVyXzEgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDEwKTsKLSAgICB2YXIgc2Nhbm5lcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7Ci0g
ICAgdmFyIHRva2VuXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKLSAgICB2YXIgUmVhZGVy
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBSZWFkZXIo
KSB7CisgICAgY29uc3QgZXJyb3JfaGFuZGxlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7
CisgICAgY29uc3Qgc2Nhbm5lcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7CisgICAgY29u
c3QgdG9rZW5fMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpOworICAgIGNsYXNzIFJlYWRlciB7
CisgICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBbXTsK
ICAgICAgICAgICAgIHRoaXMuY3VybHkgPSB0aGlzLnBhcmVuID0gLTE7CiAgICAgICAgIH0KICAg
ICAgICAgLy8gQSBmdW5jdGlvbiBmb2xsb3dpbmcgb25lIG9mIHRob3NlIHRva2VucyBpcyBhbiBl
eHByZXNzaW9uLgotICAgICAgICBSZWFkZXIucHJvdG90eXBlLmJlZm9yZUZ1bmN0aW9uRXhwcmVz
c2lvbiA9IGZ1bmN0aW9uICh0KSB7CisgICAgICAgIGJlZm9yZUZ1bmN0aW9uRXhwcmVzc2lvbih0
KSB7CiAgICAgICAgICAgICByZXR1cm4gWycoJywgJ3snLCAnWycsICdpbicsICd0eXBlb2YnLCAn
aW5zdGFuY2VvZicsICduZXcnLAogICAgICAgICAgICAgICAgICdyZXR1cm4nLCAnY2FzZScsICdk
ZWxldGUnLCAndGhyb3cnLCAndm9pZCcsCiAgICAgICAgICAgICAgICAgLy8gYXNzaWdubWVudCBv
cGVyYXRvcnMKQEAgLTY2NDAsMTkgKzY2OTEsMTkgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlv
bihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAnKycsICct
JywgJyonLCAnKionLCAnLycsICclJywgJysrJywgJy0tJywgJzw8JywgJz4+JywgJz4+PicsICcm
JywKICAgICAgICAgICAgICAgICAnfCcsICdeJywgJyEnLCAnficsICcmJicsICd8fCcsICc/Jywg
JzonLCAnPT09JywgJz09JywgJz49JywKICAgICAgICAgICAgICAgICAnPD0nLCAnPCcsICc+Jywg
JyE9JywgJyE9PSddLmluZGV4T2YodCkgPj0gMDsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAg
ICAgICAvLyBEZXRlcm1pbmUgaWYgZm9yd2FyZCBzbGFzaCAoLykgaXMgYW4gb3BlcmF0b3Igb3Ig
cGFydCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbgogICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5j
b20vbW96aWxsYS9zd2VldC5qcy93aWtpL2Rlc2lnbgotICAgICAgICBSZWFkZXIucHJvdG90eXBl
LmlzUmVnZXhTdGFydCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBwcmV2aW91cyA9
IHRoaXMudmFsdWVzW3RoaXMudmFsdWVzLmxlbmd0aCAtIDFdOwotICAgICAgICAgICAgdmFyIHJl
Z2V4ID0gKHByZXZpb3VzICE9PSBudWxsKTsKKyAgICAgICAgaXNSZWdleFN0YXJ0KCkgeworICAg
ICAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnZhbHVlc1t0aGlzLnZhbHVlcy5sZW5ndGgg
LSAxXTsKKyAgICAgICAgICAgIGxldCByZWdleCA9IChwcmV2aW91cyAhPT0gbnVsbCk7CiAgICAg
ICAgICAgICBzd2l0Y2ggKHByZXZpb3VzKSB7CiAgICAgICAgICAgICAgICAgY2FzZSAndGhpcyc6
CiAgICAgICAgICAgICAgICAgY2FzZSAnXSc6CiAgICAgICAgICAgICAgICAgICAgIHJlZ2V4ID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Ug
JyknOgotICAgICAgICAgICAgICAgICAgICB2YXIga2V5d29yZCA9IHRoaXMudmFsdWVzW3RoaXMu
cGFyZW4gLSAxXTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5d29yZCA9IHRoaXMudmFs
dWVzW3RoaXMucGFyZW4gLSAxXTsKICAgICAgICAgICAgICAgICAgICAgcmVnZXggPSAoa2V5d29y
ZCA9PT0gJ2lmJyB8fCBrZXl3b3JkID09PSAnd2hpbGUnIHx8IGtleXdvcmQgPT09ICdmb3InIHx8
IGtleXdvcmQgPT09ICd3aXRoJyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIGNhc2UgJ30nOgpAQCAtNjY2MSwxMiArNjcxMiwxMiBAQCByZXR1cm4gLyoqKioq
Ki8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAg
ICAgICAgICByZWdleCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVl
c1t0aGlzLmN1cmx5IC0gM10gPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEFub255bW91cyBmdW5jdGlvbiwgZS5nLiBmdW5jdGlvbigpe30gLzQyCi0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgY2hlY2sgPSB0aGlzLnZhbHVlc1t0aGlzLmN1cmx5IC0gNF07
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVjayA9IHRoaXMudmFsdWVzW3RoaXMu
Y3VybHkgLSA0XTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4ID0gY2hlY2sgPyAhdGhp
cy5iZWZvcmVGdW5jdGlvbkV4cHJlc3Npb24oY2hlY2spIDogZmFsc2U7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52YWx1ZXNbdGhpcy5j
dXJseSAtIDRdID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBO
YW1lZCBmdW5jdGlvbiwgZS5nLiBmdW5jdGlvbiBmKCl7fSAvNDIvCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgY2hlY2sgPSB0aGlzLnZhbHVlc1t0aGlzLmN1cmx5IC0gNV07CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGVjayA9IHRoaXMudmFsdWVzW3RoaXMuY3VybHkgLSA1
XTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4ID0gY2hlY2sgPyAhdGhpcy5iZWZvcmVG
dW5jdGlvbkV4cHJlc3Npb24oY2hlY2spIDogdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTY2NzQsOCArNjcyNSw4IEBAIHJldHVybiAv
KioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHJl
Z2V4OwotICAgICAgICB9OwotICAgICAgICBSZWFkZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlv
biAodG9rZW4pIHsKKyAgICAgICAgfQorICAgICAgICBwdXNoKHRva2VuKSB7CiAgICAgICAgICAg
ICBpZiAodG9rZW4udHlwZSA9PT0gNyAvKiBQdW5jdHVhdG9yICovIHx8IHRva2VuLnR5cGUgPT09
IDQgLyogS2V5d29yZCAqLykgewogICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0g
J3snKSB7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VybHkgPSB0aGlzLnZhbHVlcy5sZW5n
dGg7CkBAIC02Njg4LDExICs2NzM5LDEwIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9k
dWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKG51bGwpOwogICAgICAgICAgICAgfQotICAgICAgICB9
OwotICAgICAgICByZXR1cm4gUmVhZGVyOwotICAgIH0oKSk7Ci0gICAgdmFyIFRva2VuaXplciA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gVG9rZW5pemVy
KGNvZGUsIGNvbmZpZykgeworICAgICAgICB9CisgICAgfQorICAgIGNsYXNzIFRva2VuaXplciB7
CisgICAgICAgIGNvbnN0cnVjdG9yKGNvZGUsIGNvbmZpZykgewogICAgICAgICAgICAgdGhpcy5l
cnJvckhhbmRsZXIgPSBuZXcgZXJyb3JfaGFuZGxlcl8xLkVycm9ySGFuZGxlcigpOwogICAgICAg
ICAgICAgdGhpcy5lcnJvckhhbmRsZXIudG9sZXJhbnQgPSBjb25maWcgPyAodHlwZW9mIGNvbmZp
Zy50b2xlcmFudCA9PT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy50b2xlcmFudCkgOiBmYWxzZTsKICAg
ICAgICAgICAgIHRoaXMuc2Nhbm5lciA9IG5ldyBzY2FubmVyXzEuU2Nhbm5lcihjb2RlLCB0aGlz
LmVycm9ySGFuZGxlcik7CkBAIC02NzAyLDE3ICs2NzUyLDE3IEBAIHJldHVybiAvKioqKioqLyAo
ZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB0aGlz
LmJ1ZmZlciA9IFtdOwogICAgICAgICAgICAgdGhpcy5yZWFkZXIgPSBuZXcgUmVhZGVyKCk7CiAg
ICAgICAgIH0KLSAgICAgICAgVG9rZW5pemVyLnByb3RvdHlwZS5lcnJvcnMgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGVycm9ycygpIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFu
ZGxlci5lcnJvcnM7Ci0gICAgICAgIH07Ci0gICAgICAgIFRva2VuaXplci5wcm90b3R5cGUuZ2V0
TmV4dFRva2VuID0gZnVuY3Rpb24gKCkgeworICAgICAgICB9CisgICAgICAgIGdldE5leHRUb2tl
bigpIHsKICAgICAgICAgICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDApIHsKLSAgICAg
ICAgICAgICAgICB2YXIgY29tbWVudHMgPSB0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgY29tbWVudHMgPSB0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRz
KCk7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci50cmFja0NvbW1lbnQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tZW50cy5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSBjb21tZW50c1tpXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2Uo
ZS5zbGljZVswXSwgZS5zbGljZVsxXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29t
bWVudCA9IHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tZW50
cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZSA9IGNvbW1l
bnRzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNjYW5u
ZXIuc291cmNlLnNsaWNlKGUuc2xpY2VbMF0sIGUuc2xpY2VbMV0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY29tbWVudCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlOiBlLm11bHRpTGluZSA/ICdCbG9ja0NvbW1lbnQnIDogJ0xpbmVDb21tZW50JywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKICAgICAgICAgICAgICAgICAgICAg
ICAgIH07CkBAIC02NzI2LDcgKzY3NzYsNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1v
ZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghdGhpcy5zY2FubmVyLmVvZigpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBsb2MgPSB2b2lkIDA7CisgICAgICAgICAgICAgICAg
ICAgIGxldCBsb2M7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrTG9jKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2MgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhcnQ6IHsKQEAgLTY3MzYsMTAgKzY3ODYsMTAgQEAgcmV0dXJuIC8qKioqKiovIChmdW5j
dGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQ6IHt9CiAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtYXliZVJlZ2V4ID0gKHRoaXMuc2Nh
bm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XSA9PT0gJy8nKSAmJiB0aGlzLnJlYWRlci5p
c1JlZ2V4U3RhcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdm9pZCAwOwor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXliZVJlZ2V4ID0gKHRoaXMuc2Nhbm5lci5zb3Vy
Y2VbdGhpcy5zY2FubmVyLmluZGV4XSA9PT0gJy8nKSAmJiB0aGlzLnJlYWRlci5pc1JlZ2V4U3Rh
cnQoKTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IHRva2VuOwogICAgICAgICAgICAgICAgICAg
ICBpZiAobWF5YmVSZWdleCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0g
dGhpcy5zY2FubmVyLnNhdmVTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RhdGUgPSB0aGlzLnNjYW5uZXIuc2F2ZVN0YXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5zY2FubmVy
LnNjYW5SZWdFeHAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTY3NTIsNyArNjgw
Miw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9v
dHN0cmFwCiAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuc2Nhbm5lci5sZXgo
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRl
ci5wdXNoKHRva2VuKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0geworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGU6IHRva2VuXzEuVG9rZW5OYW1lW3Rva2VuLnR5cGVdLAogICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWU6IHRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVu
ZCkKICAgICAgICAgICAgICAgICAgICAgfTsKQEAgLTY3NjcsMTcgKzY4MTcsMTYgQEAgcmV0dXJu
IC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGVudHJ5LmxvYyA9IGxvYzsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gOSAvKiBSZWd1bGFyRXhw
cmVzc2lvbiAqLykgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSB0b2tl
bi5wYXR0ZXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdzID0gdG9rZW4uZmxh
Z3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5yZWdleCA9IHsgcGF0dGVybjogcGF0
dGVybiwgZmxhZ3M6IGZsYWdzIH07CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXR0
ZXJuID0gdG9rZW4ucGF0dGVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsYWdz
ID0gdG9rZW4uZmxhZ3M7CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5yZWdleCA9IHsg
cGF0dGVybiwgZmxhZ3MgfTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICB0aGlzLmJ1ZmZlci5wdXNoKGVudHJ5KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXIuc2hpZnQoKTsKLSAgICAgICAg
fTsKLSAgICAgICAgcmV0dXJuIFRva2VuaXplcjsKLSAgICB9KCkpOworICAgICAgICB9CisgICAg
fQogICAgIGV4cG9ydHMuVG9rZW5pemVyID0gVG9rZW5pemVyOwogCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVl
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5
bnRheFRyZWUuanMKaW5kZXggMmY3NzY5ODBlMDIuLjhlOWE4OTJhNmM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJl
ZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2Ny
aXB0U3ludGF4VHJlZS5qcwpAQCAtNzEyLDcgKzcxMiw4IEBAIFdJLlNjcmlwdFN5bnRheFRyZWUg
PSBjbGFzcyBTY3JpcHRTeW50YXhUcmVlCiAgICAgICAgICAgICAgICAgdHlwZTogV0kuU2NyaXB0
U3ludGF4VHJlZS5Ob2RlVHlwZS5Gb3JPZlN0YXRlbWVudCwKICAgICAgICAgICAgICAgICBsZWZ0
OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5sZWZ0KSwKICAgICAgICAgICAg
ICAgICByaWdodDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUucmlnaHQpLAot
ICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2Rl
LmJvZHkpCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhU
cmVlKG5vZGUuYm9keSksCisgICAgICAgICAgICAgICAgYXdhaXQ6IG5vZGUuYXdhaXQKICAgICAg
ICAgICAgIH07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAiRnVuY3Rpb25EZWNs
YXJhdGlvbiI6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9UZXN0L1Rlc3RIYXJuZXNzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVGVzdC9UZXN0SGFybmVzcy5qcwppbmRleCAwYTdiN2E5ZGM1Mi4uZWM3MzU5YWRkNWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rlc3QvVGVzdEhh
cm5lc3MuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC9U
ZXN0SGFybmVzcy5qcwpAQCAtMjAxLDYgKzIwMSwxNCBAQCBUZXN0SGFybmVzcyA9IGNsYXNzIFRl
c3RIYXJuZXNzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHRoaXMubG9nKCJGQUlMOiAiICsg
c3RyaW5naWZpZWRNZXNzYWdlKTsKICAgICB9CiAKKyAgICBwYXNzT3JGYWlsKGNvbmRpdGlvbiwg
bWVzc2FnZSkKKyAgICB7CisgICAgICAgIGlmIChjb25kaXRpb24pCisgICAgICAgICAgICB0aGlz
LnBhc3MobWVzc2FnZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuZmFpbChtZXNz
YWdlKTsKKyAgICB9CisKICAgICAvLyBVc2UgdGhpcyB0byBleHBlY3QgYW4gZXhjZXB0aW9uLiBU
byBmdXJ0aGVyIGV4YW1pbmUgdGhlIGV4Y2VwdGlvbiwKICAgICAvLyBjaGFpbiBvbnRvIHRoZSBy
ZXN1bHQgd2l0aCAudGhlbigpIGFuZCBhZGQgeW91ciBvd24gdGVzdCBhc3NlcnRpb25zLgogICAg
IC8vIFRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHJlamVjdGVkIGlmIGFuIGV4Y2VwdGlvbiB3YXMg
bm90IHRocm93bi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1dvcmtlcnMvRm9ybWF0dGVyL0VzcHJpbWFGb3JtYXR0ZXIuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Xb3JrZXJzL0Zvcm1hdHRlci9Fc3ByaW1hRm9ybWF0dGVy
LmpzCmluZGV4IDNjZmU5MzVmYjU4Li5iY2I3ODI0MzQzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvV29ya2Vycy9Gb3JtYXR0ZXIvRXNwcmltYUZvcm1h
dHRlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Xb3JrZXJz
L0Zvcm1hdHRlci9Fc3ByaW1hRm9ybWF0dGVyLmpzCkBAIC00NzEsNyArNDcxLDcgQEAgRXNwcmlt
YUZvcm1hdHRlciA9IGNsYXNzIEVzcHJpbWFGb3JtYXR0ZXIKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChub2RlVHlwZSA9PT0gIkZvclN0YXRlbWVudCIgfHwgbm9kZVR5cGUgPT09ICJGb3JPZlN0
YXRlbWVudCIgfHwgbm9kZVR5cGUgPT09ICJGb3JJblN0YXRlbWVudCIpIHsKLSAgICAgICAgICAg
IGlmICh0b2tlblZhbHVlID09PSAiZm9yIikgeworICAgICAgICAgICAgaWYgKHRva2VuVmFsdWUg
PT09ICJmb3IiIHx8IHRva2VuVmFsdWUgPT09ICJhd2FpdCIpIHsKICAgICAgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZFRva2VuKHRva2VuVmFsdWUsIHRva2VuT2Zmc2V0KTsKICAgICAgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZFNwYWNlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwo=
</data>
<flag name="review"
          id="392220"
          type_id="1"
          status="+"
          setter="ross.kirsling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376454</attachid>
            <date>2019-08-15 17:47:47 -0700</date>
            <delta_ts>2019-08-15 20:03:39 -0700</delta_ts>
            <desc>[PATCH] For Landing</desc>
            <filename>for-landing-1.patch</filename>
            <type>text/plain</type>
            <size>322447</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyMWY2YjZmZWUwMi4uZWRlNjUxZDRhMzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAor
MjAxOS0wOC0xNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IFVwZGF0ZSBFc3ByaW1hIHRvIHN1cHBvcnQgbW9kZXJuIEphdmFT
Y3JpcHQgbGFuZ3VhZ2UgZmVhdHVyZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMDc5NgorCisgICAgICAgIFJldmlld2VkIGJ5IFJvc3MgS2lyc2xp
bmcuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlw
dC10ZXN0cy9jbGFzc2VzLWV4cGVjdGVkLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0
aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2NsYXNzZXMuanM6CisgICAgICAgICogaW5z
cGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvZm9yLXN0YXRlbWVu
dHMtZXhwZWN0ZWQuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2Vz
L2phdmFzY3JpcHQtdGVzdHMvZm9yLXN0YXRlbWVudHMuanM6CisgICAgICAgICogaW5zcGVjdG9y
L2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvZ2VuZXJhdG9ycy1leHBlY3Rl
ZC5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlw
dC10ZXN0cy9nZW5lcmF0b3JzLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL3Jl
c291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL251bWJlcnMtZXhwZWN0ZWQuanM6IEFkZGVkLgorICAg
ICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL251
bWJlcnMuanM6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNl
cy9qYXZhc2NyaXB0LXRlc3RzL3RyeS1jYXRjaC1maW5hbGx5LXN0YXRlbWVudHMtZXhwZWN0ZWQu
anM6CisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQt
dGVzdHMvdHJ5LWNhdGNoLWZpbmFsbHktc3RhdGVtZW50cy5qczoKKyAgICAgICAgKiBpbnNwZWN0
b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy91bmFyeS1iaW5hcnktZXhw
cmVzc2lvbnMtZXhwZWN0ZWQuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVz
b3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdW5hcnktYmluYXJ5LWV4cHJlc3Npb25zLmpzOgorICAg
ICAgICBUZXN0IGZvcm1hdHRpbmcgb2YgbmV3IEphdmFTY3JpcHQgbGFuZ3VhZ2UgZmVhdHVyZXMu
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0dGluZy9mb3JtYXR0aW5nLWNzcy1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvZm9ybWF0dGluZy1qYXZhc2Ny
aXB0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0dGluZy9mb3JtYXR0
aW5nLWphdmFzY3JpcHQuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNv
dXJjZXMvdXRpbGl0aWVzLmpzOgorICAgICAgICAoVGVzdFBhZ2UucmVnaXN0ZXJJbml0aWFsaXpl
ci5hc3luYy5ydW5Gb3JtYXR0aW5nVGVzdCk6CisgICAgICAgIChUZXN0UGFnZS5yZWdpc3Rlcklu
aXRpYWxpemVyLndpbmRvdy5hZGRGb3JtYXR0aW5nVGVzdHMpOgorICAgICAgICAoVGVzdFBhZ2Uu
cmVnaXN0ZXJJbml0aWFsaXplcik6CisgICAgICAgIENsZWFuZXIgb3V0cHV0IGFuZCBiZXR0ZXIg
aGFuZGxpbmcgZm9yIGRlYnVnZ2luZyBmYWlsdXJlcy4KKworICAgICAgICAqIGluc3BlY3Rvci9t
b2RlbC9wYXJzZS1zY3JpcHQtc3ludGF4LXRyZWUuaHRtbDoKKyAgICAgICAgVGVzdCBuZXcgQVNU
IHBlcm11dGF0aW9ucy4KKwogMjAxOS0wOC0xNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9A
YXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFVwZGF0ZSBFc3ByaW1hIHRvIHRy
dW5rIChtaW5vciBmaXhlcykKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3Jt
YXR0aW5nL2Zvcm1hdHRpbmctY3NzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9mb3JtYXR0aW5nL2Zvcm1hdHRpbmctY3NzLWV4cGVjdGVkLnR4dAppbmRleCAzOGViMDRmOGQx
OC4uYTk0MWY1ZTdkMDEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0
aW5nL2Zvcm1hdHRpbmctY3NzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZm9ybWF0dGluZy9mb3JtYXR0aW5nLWNzcy1leHBlY3RlZC50eHQKQEAgLTIsMjQgKzIsMTIg
QEAgVGVzdCBDU1MgZm9ybWF0dGluZy4KIAogCiA9PSBSdW5uaW5nIHRlc3Qgc3VpdGU6IENTU0Zv
cm1hdHRlcgotLS0gUnVubmluZyB0ZXN0IGNhc2U6IENTU0Zvcm1hdHRlci5iYXNpYy5jc3MKLVBB
U1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IENTU0Zvcm1hdHRlci5jb21tZW50LmNzcwotUEFT
UwotCi0tLSBSdW5uaW5nIHRlc3QgY2FzZTogQ1NTRm9ybWF0dGVyLmdyYWRpZW50LmNzcwotUEFT
UwotCi0tLSBSdW5uaW5nIHRlc3QgY2FzZTogQ1NTRm9ybWF0dGVyLmtleWZyYW1lcy5jc3MKLVBB
U1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IENTU0Zvcm1hdHRlci5tZWRpYS1xdWVyeS5jc3MK
LVBBU1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IENTU0Zvcm1hdHRlci5zZWxlY3RvcnMuY3Nz
Ci1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDU1NGb3JtYXR0ZXIud3JhcHBpbmcuY3Nz
Ci1QQVNTCistLSBSdW5uaW5nIHRlc3QgY2FzZTogQ1NTRm9ybWF0dGVyCitQQVNTOiBiYXNpYy5j
c3MKK1BBU1M6IGNvbW1lbnQuY3NzCitQQVNTOiBncmFkaWVudC5jc3MKK1BBU1M6IGtleWZyYW1l
cy5jc3MKK1BBU1M6IG1lZGlhLXF1ZXJ5LmNzcworUEFTUzogc2VsZWN0b3JzLmNzcworUEFTUzog
d3JhcHBpbmcuY3NzCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0
aW5nL2Zvcm1hdHRpbmctamF2YXNjcmlwdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvZm9ybWF0dGluZy9mb3JtYXR0aW5nLWphdmFzY3JpcHQtZXhwZWN0ZWQudHh0CmluZGV4
IDJiYTVkNzNiNDBlLi5jNGNiYjZkM2JkNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2Zvcm1hdHRpbmcvZm9ybWF0dGluZy1qYXZhc2NyaXB0LWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9mb3JtYXR0aW5nLWphdmFzY3JpcHQtZXhw
ZWN0ZWQudHh0CkBAIC0yLDg3ICsyLDM0IEBAIFRlc3QgSmF2YVNjcmlwdCBmb3JtYXR0aW5nLgog
CiAKID09IFJ1bm5pbmcgdGVzdCBzdWl0ZTogRXNwcmltYUZvcm1hdHRlci5KYXZhU2NyaXB0Ci0t
LSBSdW5uaW5nIHRlc3QgY2FzZTogRXNwcmltYUZvcm1hdHRlci5KYXZhU2NyaXB0LmFycm93LWZ1
bmN0aW9ucy5qcwotUEFTUwotCi0tLSBSdW5uaW5nIHRlc3QgY2FzZTogRXNwcmltYUZvcm1hdHRl
ci5KYXZhU2NyaXB0LmNsYXNzZXMuanMKLVBBU1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IEVz
cHJpbWFGb3JtYXR0ZXIuSmF2YVNjcmlwdC5jb21tZW50cy1hbmQtcHJlc2VydmUtbmV3bGluZXMu
anMKLVBBU1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNj
cmlwdC5jb21tZW50cy1vbmx5LmpzCi1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBFc3By
aW1hRm9ybWF0dGVyLkphdmFTY3JpcHQuZG8td2hpbGUtc3RhdGVtZW50LmpzCi1QQVNTCi0KLS0t
IFJ1bm5pbmcgdGVzdCBjYXNlOiBFc3ByaW1hRm9ybWF0dGVyLkphdmFTY3JpcHQuZm9yLXN0YXRl
bWVudHMuanMKLVBBU1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIu
SmF2YVNjcmlwdC5mdW5jdGlvbnMuanMKLVBBU1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IEVz
cHJpbWFGb3JtYXR0ZXIuSmF2YVNjcmlwdC5nZW5lcmF0b3JzLmpzCi1QQVNTCi0KLS0tIFJ1bm5p
bmcgdGVzdCBjYXNlOiBFc3ByaW1hRm9ybWF0dGVyLkphdmFTY3JpcHQuaWYtc3RhdGVtZW50Lmpz
Ci1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBFc3ByaW1hRm9ybWF0dGVyLkphdmFTY3Jp
cHQuaW1wb3J0LmpzCi1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBFc3ByaW1hRm9ybWF0
dGVyLkphdmFTY3JpcHQubGFiZWwtYnJlYWstY29udGludWUtYmxvY2suanMKLVBBU1MKLQotLS0g
UnVubmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNjcmlwdC5sb2dpYy1leHBy
ZXNzaW9ucy5qcwotUEFTUwotCi0tLSBSdW5uaW5nIHRlc3QgY2FzZTogRXNwcmltYUZvcm1hdHRl
ci5KYXZhU2NyaXB0Lm5ldy1leHByZXNzaW9uLmpzCi1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBj
YXNlOiBFc3ByaW1hRm9ybWF0dGVyLkphdmFTY3JpcHQub2JqZWN0LWFycmF5LWxpdGVyYWwuanMK
LVBBU1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNjcmlw
dC5vdGhlci1zdGF0ZW1lbnRzLmpzCi1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBFc3By
aW1hRm9ybWF0dGVyLkphdmFTY3JpcHQucmV0dXJuLXN0YXRlbWVudC5qcwotUEFTUwotCi0tLSBS
dW5uaW5nIHRlc3QgY2FzZTogRXNwcmltYUZvcm1hdHRlci5KYXZhU2NyaXB0LnNhbXBsZS1qcXVl
cnkuanMKLVBBU1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2
YVNjcmlwdC5zYW1wbGUtbm9ybWFsLXV0aWxpdGllcy5qcwotUEFTUwotCi0tLSBSdW5uaW5nIHRl
c3QgY2FzZTogRXNwcmltYUZvcm1hdHRlci5KYXZhU2NyaXB0LnNhbXBsZS13ZWJpbnNwZWN0b3It
b2JqZWN0LmpzCi1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBFc3ByaW1hRm9ybWF0dGVy
LkphdmFTY3JpcHQuc3dpdGNoLWNhc2UtZGVmYXVsdC5qcwotUEFTUwotCi0tLSBSdW5uaW5nIHRl
c3QgY2FzZTogRXNwcmltYUZvcm1hdHRlci5KYXZhU2NyaXB0LnRlbXBsYXRlLXN0cmluZ3MuanMK
LVBBU1MKLQotLS0gUnVubmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNjcmlw
dC50ZXJuYXJ5LWV4cHJlc3Npb25zLmpzCi1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBF
c3ByaW1hRm9ybWF0dGVyLkphdmFTY3JpcHQudHJ5LWNhdGNoLWZpbmFsbHktc3RhdGVtZW50cy5q
cwotUEFTUwotCi0tLSBSdW5uaW5nIHRlc3QgY2FzZTogRXNwcmltYUZvcm1hdHRlci5KYXZhU2Ny
aXB0LnVuYXJ5LWJpbmFyeS1leHByZXNzaW9ucy5qcwotUEFTUwotCi0tLSBSdW5uaW5nIHRlc3Qg
Y2FzZTogRXNwcmltYUZvcm1hdHRlci5KYXZhU2NyaXB0LnZhcmlhYmxlLWRlY2xhcmF0aW9uLmpz
Ci1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBFc3ByaW1hRm9ybWF0dGVyLkphdmFTY3Jp
cHQud2hpbGUtc3RhdGVtZW50LmpzCi1QQVNTCi0KLS0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBFc3By
aW1hRm9ybWF0dGVyLkphdmFTY3JpcHQud2l0aC1zdGF0ZW1lbnQuanMKLVBBU1MKLQotLS0gUnVu
bmluZyB0ZXN0IGNhc2U6IEVzcHJpbWFGb3JtYXR0ZXIuSmF2YVNjcmlwdC5tb2R1bGVzLmpzCi1Q
QVNTCistLSBSdW5uaW5nIHRlc3QgY2FzZTogRXNwcmltYUZvcm1hdHRlci5KYXZhU2NyaXB0CitQ
QVNTOiBhcnJvdy1mdW5jdGlvbnMuanMKK1BBU1M6IGNsYXNzZXMuanMKK1BBU1M6IGNvbW1lbnRz
LWFuZC1wcmVzZXJ2ZS1uZXdsaW5lcy5qcworUEFTUzogY29tbWVudHMtb25seS5qcworUEFTUzog
ZG8td2hpbGUtc3RhdGVtZW50LmpzCitQQVNTOiBmb3Itc3RhdGVtZW50cy5qcworUEFTUzogZnVu
Y3Rpb25zLmpzCitQQVNTOiBnZW5lcmF0b3JzLmpzCitQQVNTOiBpZi1zdGF0ZW1lbnQuanMKK1BB
U1M6IGltcG9ydC5qcworUEFTUzogbGFiZWwtYnJlYWstY29udGludWUtYmxvY2suanMKK1BBU1M6
IGxvZ2ljLWV4cHJlc3Npb25zLmpzCitQQVNTOiBuZXctZXhwcmVzc2lvbi5qcworUEFTUzogbnVt
YmVycy5qcworUEFTUzogb2JqZWN0LWFycmF5LWxpdGVyYWwuanMKK1BBU1M6IG90aGVyLXN0YXRl
bWVudHMuanMKK1BBU1M6IHJldHVybi1zdGF0ZW1lbnQuanMKK1BBU1M6IHNhbXBsZS1qcXVlcnku
anMKK1BBU1M6IHNhbXBsZS1ub3JtYWwtdXRpbGl0aWVzLmpzCitQQVNTOiBzYW1wbGUtd2ViaW5z
cGVjdG9yLW9iamVjdC5qcworUEFTUzogc3dpdGNoLWNhc2UtZGVmYXVsdC5qcworUEFTUzogdGVt
cGxhdGUtc3RyaW5ncy5qcworUEFTUzogdGVybmFyeS1leHByZXNzaW9ucy5qcworUEFTUzogdHJ5
LWNhdGNoLWZpbmFsbHktc3RhdGVtZW50cy5qcworUEFTUzogdW5hcnktYmluYXJ5LWV4cHJlc3Np
b25zLmpzCitQQVNTOiB2YXJpYWJsZS1kZWNsYXJhdGlvbi5qcworUEFTUzogd2hpbGUtc3RhdGVt
ZW50LmpzCitQQVNTOiB3aXRoLXN0YXRlbWVudC5qcworUEFTUzogbW9kdWxlcy5qcwogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9mb3JtYXR0aW5nLWphdmFz
Y3JpcHQuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL2Zvcm1hdHRpbmct
amF2YXNjcmlwdC5odG1sCmluZGV4IDlkYjY2MTc4M2Q0Li5jNjU0YzdhYjI4MCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvZm9ybWF0dGluZy1qYXZhc2NyaXB0
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvZm9ybWF0dGluZy1q
YXZhc2NyaXB0Lmh0bWwKQEAgLTIyLDYgKzIyLDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAg
ICJyZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9sYWJlbC1icmVhay1jb250aW51ZS1ibG9jay5q
cyIsCiAgICAgICAgICJyZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9sb2dpYy1leHByZXNzaW9u
cy5qcyIsCiAgICAgICAgICJyZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9uZXctZXhwcmVzc2lv
bi5qcyIsCisgICAgICAgICJyZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9udW1iZXJzLmpzIiwK
ICAgICAgICAgInJlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL29iamVjdC1hcnJheS1saXRlcmFs
LmpzIiwKICAgICAgICAgInJlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL290aGVyLXN0YXRlbWVu
dHMuanMiLAogICAgICAgICAicmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvcmV0dXJuLXN0YXRl
bWVudC5qcyIsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9y
ZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9jbGFzc2VzLWV4cGVjdGVkLmpzIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvY2xhc3Nl
cy1leHBlY3RlZC5qcwppbmRleCBkYzUwNmUwODEwZi4uYjMyNzdiZTg1NmYgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRl
c3RzL2NsYXNzZXMtZXhwZWN0ZWQuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1h
dHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvY2xhc3Nlcy1leHBlY3RlZC5qcwpAQCAt
MTQ0LDMgKzE0NCw1NiBAQCBjbGFzcyBGb28gewogICAgIGFzeW5jIDEoKSB7fQogICAgIGFzeW5j
IFsiZiJdKCkge30KIH0KKworLy8gRVMyMDE4IC0gQXN5bmMgSXRlcmF0aW9uIC8gQXN5bmMgR2Vu
ZXJhdG9ycworCitjbGFzcyBGb28geworICAgIHN0YXRpYyBhc3luYyAqYXN5bmMoKQorICAgIHsK
KyAgICAgICAgMQorICAgIH0KKyAgICBhc3luYyAqYXN5bmMoKQorICAgIHsKKyAgICAgICAgMQor
ICAgIH0KKyAgICAqYXN5bmMoKQorICAgIHsKKyAgICAgICAgMQorICAgIH0KK30KKworY2xhc3Mg
Rm9vIHsKKyAgICBzdGF0aWMgYXN5bmMgKmFzeW5jKCkKKyAgICB7CisgICAgICAgIDEKKyAgICB9
CisgICAgYXN5bmMgKmFzeW5jKCkKKyAgICB7CisgICAgICAgIDEKKyAgICB9CisgICAgKmFzeW5j
KCkKKyAgICB7CisgICAgICAgIDEKKyAgICB9Cit9CisKK2NsYXNzIEZvbyB7CisgICAgc3RhdGlj
IGFzeW5jICphc3luYygpCisgICAgeworICAgICAgICAxCisgICAgfQorICAgIGFzeW5jICphc3lu
YygpCisgICAgeworICAgICAgICAxCisgICAgfQorICAgICphc3luYygpCisgICAgeworICAgICAg
ICAxCisgICAgfQorfQorCitjbGFzcyBGb28geworICAgIGFzeW5jICoiZiIoKSB7fQorICAgIGFz
eW5jICoxKCkge30KKyAgICBhc3luYyAqWyJmIl0oKSB7fQorfQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvY2xh
c3Nlcy5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZh
c2NyaXB0LXRlc3RzL2NsYXNzZXMuanMKaW5kZXggMTEyMzNlYjM4YjcuLjA2ZGUzZDVkOGY0IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2
YXNjcmlwdC10ZXN0cy9jbGFzc2VzLmpzCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3Jt
YXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2NsYXNzZXMuanMKQEAgLTIwLDMgKzIw
LDEzIEBAIEEgPSBjbGFzcyBGb28gZXh0ZW5kcyhiP0JhcjpCYXIpe2NvbnN0cnVjdG9yKCl7bmV3
LnRhcmdldC5zdGF0aWNNZXRob2QoKX1zdGF0aWMKIGNsYXNzIEZvb3tzdGF0aWMgYXN5bmMgYXN5
bmMoKXsxfWFzeW5jIGFzeW5jKCl7MX1hc3luYygpezF9fQogCiBjbGFzcyBGb297YXN5bmMiZiIo
KXt9YXN5bmMgMSgpe31hc3luY1siZiJdKCl7fX0KKworLy8gRVMyMDE4IC0gQXN5bmMgSXRlcmF0
aW9uIC8gQXN5bmMgR2VuZXJhdG9ycworCitjbGFzcyBGb297c3RhdGljIGFzeW5jKmFzeW5jKCl7
MX1hc3luYyphc3luYygpezF9KmFzeW5jKCl7MX19CisKK2NsYXNzIEZvb3tzdGF0aWMgYXN5bmMg
KmFzeW5jKCl7MX1hc3luYyAqYXN5bmMoKXsxfSphc3luYygpezF9fQorCitjbGFzcyBGb297c3Rh
dGljIGFzeW5jICogYXN5bmMoKXsxfWFzeW5jICogYXN5bmMoKXsxfSogYXN5bmMoKXsxfX0KKwor
Y2xhc3MgRm9ve2FzeW5jKiJmIigpe31hc3luYyoxKCl7fWFzeW5jKlsiZiJdKCl7fX0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2Ny
aXB0LXRlc3RzL2Zvci1zdGF0ZW1lbnRzLWV4cGVjdGVkLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvZm9yLXN0YXRlbWVudHMt
ZXhwZWN0ZWQuanMKaW5kZXggOWZmOTRiZmNmNjYuLmZmZTRiZDA4YzQ4IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0
cy9mb3Itc3RhdGVtZW50cy1leHBlY3RlZC5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Zm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9mb3Itc3RhdGVtZW50cy1leHBl
Y3RlZC5qcwpAQCAtMTM3LDMgKzEzNywyMiBAQCBmb3IgKHZhciB7Zm9vfSBvZiB3aW5kb3cpCiAg
ICAgOwogZm9yICh2YXIgW3gsIHldIG9mIFsxLCAyLCAzXSkKICAgICA7CisKKy8vIEVTMjAxOCAt
IEFzeW5jIEl0ZXJhdGlvbiAvIEFzeW5jIEdlbmVyYXRvcnMKKworYXN5bmMgZnVuY3Rpb24gZigp
IHsKKyAgICBmb3IgYXdhaXQgKHggb2YgW10pCisgICAgICAgIDsKKyAgICBmb3IgYXdhaXQgKHgg
b2YgWzEsIDIsIDNdKQorICAgICAgICA7CisgICAgZm9yIGF3YWl0ICh4IG9mIChbMSwgMiwgM10p
KQorICAgICAgICA7CisgICAgZm9yIGF3YWl0ICh2YXIgeCBvZiB3aW5kb3cpCisgICAgICAgIDsK
KyAgICBmb3IgYXdhaXQgKHZhciB4IG9mICh3aW5kb3cpKQorICAgICAgICA7CisgICAgZm9yIGF3
YWl0IChsZXQge2Zvb30gb2Ygd2luZG93KQorICAgICAgICA7CisgICAgZm9yIGF3YWl0IChsZXQg
W3gsIHldIG9mIFsxLCAyLCAzXSkKKyAgICAgICAgOworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvZm9yLXN0
YXRlbWVudHMuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMv
amF2YXNjcmlwdC10ZXN0cy9mb3Itc3RhdGVtZW50cy5qcwppbmRleCA0MjRmNjVmOGU0MC4uMWI0
MmQzZDA3YjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jl
c291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Zvci1zdGF0ZW1lbnRzLmpzCisrKyBiL0xheW91dFRl
c3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Zvci1z
dGF0ZW1lbnRzLmpzCkBAIC02OSwzICs2OSwxNSBAQCBmb3IodmFyIHggb2Ygd2luZG93KTsKIGZv
cih2YXIgeCBvZiAod2luZG93KSk7CiBmb3IodmFye2Zvb31vZiB3aW5kb3cpOwogZm9yKHZhclt4
LHldb2ZbMSwyLDNdKTsKKworLy8gRVMyMDE4IC0gQXN5bmMgSXRlcmF0aW9uIC8gQXN5bmMgR2Vu
ZXJhdG9ycworCithc3luYyBmdW5jdGlvbiBmKCkgeworICAgIGZvciBhd2FpdCAoeCBvZltdKTsK
KyAgICBmb3IgYXdhaXQoeCBvZlsxLDIsM10pOworICAgIGZvciBhd2FpdCh4IG9mKFsxLDIsM10p
KTsKKyAgICBmb3IgYXdhaXQodmFyIHggb2Ygd2luZG93KTsKKyAgICBmb3IgYXdhaXQodmFyIHgg
b2YgKHdpbmRvdykpOworICAgIGZvciBhd2FpdChsZXR7Zm9vfW9mIHdpbmRvdyk7CisgICAgZm9y
IGF3YWl0KGxldFt4LHldb2ZbMSwyLDNdKTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2dlbmVyYXRvcnMt
ZXhwZWN0ZWQuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMv
amF2YXNjcmlwdC10ZXN0cy9nZW5lcmF0b3JzLWV4cGVjdGVkLmpzCmluZGV4IDQ4OWVlOGRjOTEy
Li5jMzdiN2ZkZjg2NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRp
bmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvZ2VuZXJhdG9ycy1leHBlY3RlZC5qcworKysg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10
ZXN0cy9nZW5lcmF0b3JzLWV4cGVjdGVkLmpzCkBAIC0zMCwzICszMCwzOCBAQCBmdW5jdGlvbiog
Z2VuKCkgewogZnVuY3Rpb24qIGdlbihhPTEsIFtiLCBjXSwgLi4ucmVzdCkgewogICAgIHJldHVy
biB5aWVsZCB5aWVsZCBmb28oImZvbyIpCiB9CisKKy8vIEVTMjAxOCAtIEFzeW5jIEl0ZXJhdGlv
biAvIEFzeW5jIEdlbmVyYXRvcnMKKworYXN5bmMgZnVuY3Rpb24qIGdlbigpIHt9Cithc3luYyBm
dW5jdGlvbiogZ2VuKCkgeworICAgIDEKK30KK2FzeW5jIGZ1bmN0aW9uKiBnZW4oKSB7fQorYXN5
bmMgZnVuY3Rpb24qIGdlbigpIHsKKyAgICAxCit9Cithc3luYyBmdW5jdGlvbiogZ2VuKCkge30K
K2FzeW5jIGZ1bmN0aW9uKiBnZW4oKSB7CisgICAgMQorfQorCithc3luYyBmdW5jdGlvbiogZ2Vu
KCkgeworICAgIHlpZWxkCit9Cithc3luYyBmdW5jdGlvbiogZ2VuKCkgeworICAgIHlpZWxkIHgK
K30KK2FzeW5jIGZ1bmN0aW9uKiBnZW4oKSB7CisgICAgeWllbGQgIngiCit9Cithc3luYyBmdW5j
dGlvbiogZ2VuKCkgeworICAgIHlpZWxkIFt4XQorfQorYXN5bmMgZnVuY3Rpb24qIGdlbigpIHsK
KyAgICB5aWVsZCBmb28oKQorfQorCithc3luYyBmdW5jdGlvbiogZ2VuKGE9MSwgW2IsIGNdLCAu
Li5yZXN0KSB7CisgICAgcmV0dXJuIHlpZWxkIHlpZWxkIGZvbygiZm9vIikKK30KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0
LXRlc3RzL2dlbmVyYXRvcnMuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9y
ZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9nZW5lcmF0b3JzLmpzCmluZGV4IDdkZTY2ODkzZTgy
Li5hNmMwMTZjNGVmYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRp
bmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvZ2VuZXJhdG9ycy5qcworKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9nZW5l
cmF0b3JzLmpzCkBAIC0xMiwzICsxMiwyMCBAQCBmdW5jdGlvbipnZW4oKXt5aWVsZFt4XX0KIGZ1
bmN0aW9uKmdlbigpe3lpZWxkIGZvbygpfQogCiBmdW5jdGlvbiAqZ2VuKGE9MSxbYixjXSwuLi5y
ZXN0KXtyZXR1cm4geWllbGQgeWllbGQgZm9vKCJmb28iKX0KKworLy8gRVMyMDE4IC0gQXN5bmMg
SXRlcmF0aW9uIC8gQXN5bmMgR2VuZXJhdG9ycworCithc3luYyBmdW5jdGlvbipnZW4oKXt9Cith
c3luYyBmdW5jdGlvbipnZW4oKXsxfQorYXN5bmMgZnVuY3Rpb24qIGdlbigpe30KK2FzeW5jIGZ1
bmN0aW9uKiBnZW4oKXsxfQorYXN5bmMgZnVuY3Rpb24gKmdlbigpe30KK2FzeW5jIGZ1bmN0aW9u
ICpnZW4oKXsxfQorCithc3luYyBmdW5jdGlvbipnZW4oKXt5aWVsZH0KK2FzeW5jIGZ1bmN0aW9u
Kmdlbigpe3lpZWxkIHh9Cithc3luYyBmdW5jdGlvbipnZW4oKXt5aWVsZCJ4In0KK2FzeW5jIGZ1
bmN0aW9uKmdlbigpe3lpZWxkW3hdfQorYXN5bmMgZnVuY3Rpb24qZ2VuKCl7eWllbGQgZm9vKCl9
CisKK2FzeW5jIGZ1bmN0aW9uICpnZW4oYT0xLFtiLGNdLC4uLnJlc3Qpe3JldHVybiB5aWVsZCB5
aWVsZCBmb28oImZvbyIpfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1h
dHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvbnVtYmVycy1leHBlY3RlZC5qcyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3Rz
L251bWJlcnMtZXhwZWN0ZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjMzMjA2NmNhZWJjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvbnVtYmVycy1leHBlY3RlZC5q
cwpAQCAtMCwwICsxLDYwIEBACisvLyBCYXNpY3MKKzA7CisxOworMTIzOworTmFOOworSW5maW5p
dHk7CisKKy8vIEZsb2F0cworMS4yOworMWUyOworMS5lMzsKKzEuMmUzOworMS4yZSszOworMS4y
ZS0zOworCisvLyBEZWNpbWFsIFByZWZpeAorLjI7CisuMmUzOworLjJlKzM7CisuMmUtMzsKKwor
Ly8gWmVybyBQcmVmaXhlZCAvIExlZ2FjeSBPY3RhbAorMDA7CiswMTA7CiswMDk7CisKKy8vIEhl
eCwgT2N0YWwsIEJpbmFyeQorMHgxMDE7CiswWDIwMTsKKzBvMTAxOworME8yMDE7CiswYjEwMTsK
KzBCMTAxOworCisvLyBFUzIwMTkgLSBOdW1lcmljIFNlcGFyYXRvcnMKKzFfMl8zXzQ7CisxXzAw
MF8wMDA7CisxMDAwMF8wMDsKKzFfMDAwMDAwXzBfMF8wOworMV8yLjNfNGU1XzY7CisxXzEuMl8y
OworMV8xZTJfMjsKKzB4MV8wOworMFgyXzA7CiswbzFfMDsKKzBPMl8wOworMGIxXzA7CiswQjFf
MDsKKworLy8gRVMyMDIwIC0gQmlnSW50CiswbjsKKzEyM247CisxMjM0NTY3ODkxMjM0NTY3ODkx
MjM0NTY3ODkxMjM0NTY3ODkxMjM0NTY3ODkxMjM0NTY3ODkxMjM0NTY3ODluOworMV8yXzNuOwor
MHgxMjNuOworMHgyMjNuOworMG8xMjNuOworME8yMjNuOworMGIxMDFuOworMEIxMDFuOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFz
Y3JpcHQtdGVzdHMvbnVtYmVycy5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5n
L3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL251bWJlcnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMzMjA2NmNhZWJjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMv
bnVtYmVycy5qcwpAQCAtMCwwICsxLDYwIEBACisvLyBCYXNpY3MKKzA7CisxOworMTIzOworTmFO
OworSW5maW5pdHk7CisKKy8vIEZsb2F0cworMS4yOworMWUyOworMS5lMzsKKzEuMmUzOworMS4y
ZSszOworMS4yZS0zOworCisvLyBEZWNpbWFsIFByZWZpeAorLjI7CisuMmUzOworLjJlKzM7Cisu
MmUtMzsKKworLy8gWmVybyBQcmVmaXhlZCAvIExlZ2FjeSBPY3RhbAorMDA7CiswMTA7CiswMDk7
CisKKy8vIEhleCwgT2N0YWwsIEJpbmFyeQorMHgxMDE7CiswWDIwMTsKKzBvMTAxOworME8yMDE7
CiswYjEwMTsKKzBCMTAxOworCisvLyBFUzIwMTkgLSBOdW1lcmljIFNlcGFyYXRvcnMKKzFfMl8z
XzQ7CisxXzAwMF8wMDA7CisxMDAwMF8wMDsKKzFfMDAwMDAwXzBfMF8wOworMV8yLjNfNGU1XzY7
CisxXzEuMl8yOworMV8xZTJfMjsKKzB4MV8wOworMFgyXzA7CiswbzFfMDsKKzBPMl8wOworMGIx
XzA7CiswQjFfMDsKKworLy8gRVMyMDIwIC0gQmlnSW50CiswbjsKKzEyM247CisxMjM0NTY3ODkx
MjM0NTY3ODkxMjM0NTY3ODkxMjM0NTY3ODkxMjM0NTY3ODkxMjM0NTY3ODkxMjM0NTY3ODluOwor
MV8yXzNuOworMHgxMjNuOworMHgyMjNuOworMG8xMjNuOworME8yMjNuOworMGIxMDFuOworMEIx
MDFuOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3Vy
Y2VzL2phdmFzY3JpcHQtdGVzdHMvdHJ5LWNhdGNoLWZpbmFsbHktc3RhdGVtZW50cy1leHBlY3Rl
ZC5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2Ny
aXB0LXRlc3RzL3RyeS1jYXRjaC1maW5hbGx5LXN0YXRlbWVudHMtZXhwZWN0ZWQuanMKaW5kZXgg
ZDZmNzQzMGYyNDQuLmM0Zjk4YzUxZjE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy90cnktY2F0Y2gtZmluYWxs
eS1zdGF0ZW1lbnRzLWV4cGVjdGVkLmpzCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3Jt
YXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3RyeS1jYXRjaC1maW5hbGx5LXN0YXRl
bWVudHMtZXhwZWN0ZWQuanMKQEAgLTEsMyArMSwzMiBAQAordHJ5IHt9IGNhdGNoIHt9Cit0cnkg
e30gY2F0Y2gge30gZmluYWxseSB7fQorCit0cnkgeworICAgIDEKK30gY2F0Y2gge30KK3RyeSB7
CisgICAgMQorfSBjYXRjaCB7fSBmaW5hbGx5IHt9Cit0cnkgeworICAgIDEKK30gY2F0Y2ggewor
ICAgIDIKK30gZmluYWxseSB7fQordHJ5IHsKKyAgICAxCit9IGNhdGNoIHsKKyAgICAyCit9IGZp
bmFsbHkgeworICAgIDMKK30KKwordHJ5IHt9IGNhdGNoIHsKKyAgICAyCit9IGZpbmFsbHkge30K
K3RyeSB7fSBjYXRjaCB7fSBmaW5hbGx5IHsKKyAgICAzCit9CisKIHRyeSB7fSBjYXRjaCAoZSkg
e30KIHRyeSB7fSBjYXRjaCAoZSkge30gZmluYWxseSB7fQogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy90cnkt
Y2F0Y2gtZmluYWxseS1zdGF0ZW1lbnRzLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1h
dHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdHJ5LWNhdGNoLWZpbmFsbHktc3RhdGVt
ZW50cy5qcwppbmRleCBjMjRkNDkwY2Q0Ny4uMDNjN2JjZmI4NTYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3Ry
eS1jYXRjaC1maW5hbGx5LXN0YXRlbWVudHMuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdHJ5LWNhdGNoLWZpbmFsbHkt
c3RhdGVtZW50cy5qcwpAQCAtMSwzICsxLDE0IEBACit0cnl7fWNhdGNoe30KK3RyeXt9Y2F0Y2h7
fWZpbmFsbHl7fQorCit0cnl7MX1jYXRjaHt9Cit0cnl7MX1jYXRjaHt9ZmluYWxseXt9Cit0cnl7
MX1jYXRjaHsyfWZpbmFsbHl7fQordHJ5ezF9Y2F0Y2h7Mn1maW5hbGx5ezN9CisKK3RyeXt9Y2F0
Y2h7Mn1maW5hbGx5e30KK3RyeXt9Y2F0Y2h7fWZpbmFsbHl7M30KKwogdHJ5e31jYXRjaChlKXt9
CiB0cnl7fWNhdGNoKGUpe31maW5hbGx5e30KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdW5hcnktYmluYXJ5
LWV4cHJlc3Npb25zLWV4cGVjdGVkLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRp
bmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdW5hcnktYmluYXJ5LWV4cHJlc3Npb25zLWV4
cGVjdGVkLmpzCmluZGV4IDIyN2Y4YTg0OGNhLi5kN2JlNDY3NmE1NSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMv
dW5hcnktYmluYXJ5LWV4cHJlc3Npb25zLWV4cGVjdGVkLmpzCisrKyBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3VuYXJ5LWJpbmFy
eS1leHByZXNzaW9ucy1leHBlY3RlZC5qcwpAQCAtNjcsMyArNjcsMTAgQEAgdHlwZW9mIHg7CiB0
eXBlb2YgKHgpOwogeCBpbnN0YW5jZW9mIHg7CiB4IGluc3RhbmNlb2YgKHgpOworCisvLyBFUzIw
MjAgLSBCaWdJbnQKKzFuICsgMm4gLSAzbiAqIDRuIC8gNW4gJSA2bjsKKzEyM24gPT09IDA7Cisw
ID09PSAxMjNuOworKzEyM24gPT09IC0xMjNuOworLTEyM24gPT09ICsxMjNuOwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQt
dGVzdHMvdW5hcnktYmluYXJ5LWV4cHJlc3Npb25zLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdW5hcnktYmluYXJ5LWV4cHJl
c3Npb25zLmpzCmluZGV4IGQwNjgyZjZkNzVhLi4zZmI0N2QwNzFhMyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMv
dW5hcnktYmluYXJ5LWV4cHJlc3Npb25zLmpzCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9m
b3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3VuYXJ5LWJpbmFyeS1leHByZXNz
aW9ucy5qcwpAQCAtNjEsMyArNjEsMTEgQEAgdHlwZW9mIHg7CiB0eXBlb2YoeCk7CiB4IGluc3Rh
bmNlb2YgeDsKIHggaW5zdGFuY2VvZih4KTsKKworCisvLyBFUzIwMjAgLSBCaWdJbnQKKzFuKzJu
LTNuKjRuLzVuJTZuOworMTIzbj09PTA7CiswPT09MTIzbjsKKysxMjNuPT09LTEyM247CistMTIz
bj09PSsxMjNuOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcv
cmVzb3VyY2VzL3V0aWxpdGllcy5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5n
L3Jlc291cmNlcy91dGlsaXRpZXMuanMKaW5kZXggNTE5ZWM0ZDljZWYuLjE0Y2FlZjg0ZjQ2IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvdXRp
bGl0aWVzLmpzCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNl
cy91dGlsaXRpZXMuanMKQEAgLTksNDcgKzksNDcgQEAgVGVzdFBhZ2UucmVnaXN0ZXJJbml0aWFs
aXplcihmdW5jdGlvbigpIHsKICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgZnVuY3Rpb24gcnVu
Rm9ybWF0dGluZ1Rlc3QobW9kZSwgdGVzdE5hbWUsIHRlc3RVUkwpIHsKLSAgICAgICAgcmV0dXJu
IGxvYWRGb3JtYXR0aW5nVGVzdEFuZEV4cGVjdGVkUmVzdWx0cyh0ZXN0VVJMKS50aGVuKGZ1bmN0
aW9uKHJlc3VsdHMpIHsKLSAgICAgICAgICAgIGxldCB7dGVzdFRleHQsIGV4cGVjdGVkVGV4dH0g
PSByZXN1bHRzOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29s
dmUsIHJlamVjdCkgewotICAgICAgICAgICAgICAgIGxldCB3b3JrZXJQcm94eSA9IFdJLkZvcm1h
dHRlcldvcmtlclByb3h5LnNpbmdsZXRvbigpOwotICAgICAgICAgICAgICAgIGNvbnN0IGluZGVu
dFN0cmluZyA9ICIgICAgIjsKKyAgICBhc3luYyBmdW5jdGlvbiBydW5Gb3JtYXR0aW5nVGVzdCht
b2RlLCB0ZXN0TmFtZSwgdGVzdFVSTCkgeworICAgICAgICBsZXQge3Rlc3RUZXh0LCBleHBlY3Rl
ZFRleHR9ID0gYXdhaXQgbG9hZEZvcm1hdHRpbmdUZXN0QW5kRXhwZWN0ZWRSZXN1bHRzKHRlc3RV
UkwpOworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0
KSB7CisgICAgICAgICAgICBsZXQgd29ya2VyUHJveHkgPSBXSS5Gb3JtYXR0ZXJXb3JrZXJQcm94
eS5zaW5nbGV0b24oKTsKKyAgICAgICAgICAgIGNvbnN0IGluZGVudFN0cmluZyA9ICIgICAgIjsK
IAotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHtmb3JtYXR0ZWRUZXh0LCBzb3Vy
Y2VNYXBEYXRhfSkgewotICAgICAgICAgICAgICAgICAgICBsZXQgcGFzcyA9IGZvcm1hdHRlZFRl
eHQgPT09IGV4cGVjdGVkVGV4dDsKLSAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5s
b2cocGFzcyA/ICJQQVNTIiA6ICJGQUlMIik7CisgICAgICAgICAgICBmdW5jdGlvbiBjYWxsYmFj
ayh7Zm9ybWF0dGVkVGV4dCwgc291cmNlTWFwRGF0YX0pIHsKKyAgICAgICAgICAgICAgICBsZXQg
cGFzcyA9IGZvcm1hdHRlZFRleHQgPT09IGV4cGVjdGVkVGV4dDsKKyAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LnBhc3NPckZhaWwocGFzcywgdGVzdE5hbWUpOwogCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghcGFzcykgewotICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5sb2coIklucHV0OiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5s
b2coIi0tLS0tLS0tLS0tIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmxvZyh0ZXN0VGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0Lmxv
ZygiLS0tLS0tLS0tLS0iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
bG9nKCJGb3JtYXR0ZWQgT3V0cHV0OiAiICsgZm9ybWF0dGVkVGV4dC5sZW5ndGgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIi0tLS0tLS0tLS0tIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZyhmb3JtYXR0ZWRUZXh0KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCItLS0tLS0tLS0tLSIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkV4cGVjdGVkIE91dHB1
dDogIiArIGV4cGVjdGVkVGV4dC5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5sb2coIi0tLS0tLS0tLS0tIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmxvZyhleHBlY3RlZFRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5sb2coIi0tLS0tLS0tLS0tIik7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHBhc3MpOworICAgICAgICAgICAgICAgIGlm
IChmb3JtYXR0ZWRUZXh0ID09PSBudWxsKQorICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmxvZygiRmFpbGVkIHRvIHBhcnNlISIpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFw
YXNzKSB7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJJbnB1dDoiKTsK
KyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIi0tLS0tLS0tLS0tIik7Cisg
ICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKHRlc3RUZXh0KTsKKyAgICAgICAg
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIi0tLS0tLS0tLS0tIik7CisgICAgICAgICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJGb3JtYXR0ZWQgT3V0cHV0OiAiICsgZm9ybWF0
dGVkVGV4dC5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygi
LS0tLS0tLS0tLS0iKTsKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coZm9y
bWF0dGVkVGV4dCk7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCItLS0t
LS0tLS0tLSIpOworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiRXhwZWN0
ZWQgT3V0cHV0OiAiICsgZXhwZWN0ZWRUZXh0Lmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAg
IEluc3BlY3RvclRlc3QubG9nKCItLS0tLS0tLS0tLSIpOworICAgICAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmxvZyhleHBlY3RlZFRleHQpOworICAgICAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmxvZygiLS0tLS0tLS0tLS0iKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlICJ0ZXh0L2ph
dmFzY3JpcHQiOiB7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBpc01vZHVsZSA9IC9ebW9kdWxl
Ly50ZXN0KHRlc3ROYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgd29ya2VyUHJveHkuZm9ybWF0
SmF2YVNjcmlwdCh0ZXN0VGV4dCwgaXNNb2R1bGUsIGluZGVudFN0cmluZywgY2FsbGJhY2spOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgY2FzZSAi
dGV4dC9jc3MiOgotICAgICAgICAgICAgICAgICAgICB3b3JrZXJQcm94eS5mb3JtYXRDU1ModGVz
dFRleHQsIGluZGVudFN0cmluZywgY2FsbGJhY2spOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHN3aXRj
aCAobW9kZSkgeworICAgICAgICAgICAgY2FzZSAidGV4dC9qYXZhc2NyaXB0IjogeworICAgICAg
ICAgICAgICAgIGxldCBpc01vZHVsZSA9IC9ebW9kdWxlLy50ZXN0KHRlc3ROYW1lKTsKKyAgICAg
ICAgICAgICAgICB3b3JrZXJQcm94eS5mb3JtYXRKYXZhU2NyaXB0KHRlc3RUZXh0LCBpc01vZHVs
ZSwgaW5kZW50U3RyaW5nLCBjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgInRleHQvY3NzIjoKKyAgICAgICAgICAgICAg
ICB3b3JrZXJQcm94eS5mb3JtYXRDU1ModGVzdFRleHQsIGluZGVudFN0cmluZywgY2FsbGJhY2sp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAg
ICB9CiAKQEAgLTU3LDE2ICs1NywxNiBAQCBUZXN0UGFnZS5yZWdpc3RlckluaXRpYWxpemVyKGZ1
bmN0aW9uKCkgewogICAgICAgICBsZXQgdGVzdFBhZ2VVUkwgPSBXSS5uZXR3b3JrTWFuYWdlci5t
YWluRnJhbWUubWFpblJlc291cmNlLnVybDsKICAgICAgICAgbGV0IHRlc3RQYWdlUmVzb3VyY2Vz
VVJMID0gdGVzdFBhZ2VVUkwuc3Vic3RyaW5nKDAsIHRlc3RQYWdlVVJMLmxhc3RJbmRleE9mKCIv
IikpOwogCi0gICAgICAgIGZvciAobGV0IHRlc3Qgb2YgdGVzdHMpIHsKLSAgICAgICAgICAgIGxl
dCB0ZXN0TmFtZSA9IHRlc3Quc3Vic3RyaW5nKHRlc3QubGFzdEluZGV4T2YoIi8iKSArIDEpOwot
ICAgICAgICAgICAgbGV0IHRlc3RVUkwgPSB0ZXN0UGFnZVJlc291cmNlc1VSTCArICIvIiArIHRl
c3Q7Ci0gICAgICAgICAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7Ci0gICAgICAgICAgICAgICAgbmFt
ZTogc3VpdGUubmFtZSArICIuIiArIHRlc3ROYW1lLAotICAgICAgICAgICAgICAgIHRlc3QocmVz
b2x2ZSwgcmVqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bkZvcm1hdHRpbmdUZXN0KG1v
ZGUsIHRlc3ROYW1lLCB0ZXN0VVJMKS50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7Ci0gICAg
ICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB0aW1lb3V0OiAtMSwKLSAgICAgICAgICAg
IH0pOwotICAgICAgICB9CisgICAgICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAgICAg
IG5hbWU6IHN1aXRlLm5hbWUsCisgICAgICAgICAgICB0aW1lb3V0OiAtMSwKKyAgICAgICAgICAg
IGFzeW5jIHRlc3QocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICAgICAgZm9yIChsZXQg
dGVzdCBvZiB0ZXN0cykgeworICAgICAgICAgICAgICAgICAgICBsZXQgdGVzdE5hbWUgPSB0ZXN0
LnN1YnN0cmluZyh0ZXN0Lmxhc3RJbmRleE9mKCIvIikgKyAxKTsKKyAgICAgICAgICAgICAgICAg
ICAgbGV0IHRlc3RVUkwgPSB0ZXN0UGFnZVJlc291cmNlc1VSTCArICIvIiArIHRlc3Q7CisgICAg
ICAgICAgICAgICAgICAgIGF3YWl0IHJ1bkZvcm1hdHRpbmdUZXN0KG1vZGUsIHRlc3ROYW1lLCB0
ZXN0VVJMKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwog
ICAgIH07CiB9KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9wYXJz
ZS1zY3JpcHQtc3ludGF4LXRyZWUuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9w
YXJzZS1zY3JpcHQtc3ludGF4LXRyZWUuaHRtbAppbmRleCAyMGFkZTg2NDI2YS4uNDY3YzRmZWEy
NWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9wYXJzZS1zY3JpcHQt
c3ludGF4LXRyZWUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvcGFyc2Ut
c2NyaXB0LXN5bnRheC10cmVlLmh0bWwKQEAgLTEwOSwxMCArMTA5LDIwIEBAIGZ1bmN0aW9uIHRl
c3QoKQogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuYXJndW1lbnRzWzFdLnR5cGUgPT09
IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTGl0ZXJhbCk7CiAgICAgSW5zcGVjdG9yVGVz
dC5sb2coInBhc3NlZCBDYWxsRXhwcmVzc2lvbiIpOwogCi0gICAgbm9kZSA9IG1ha2VOb2RlKCJ0
cnkge30gY2F0Y2goZSkge30gIiwgZmFsc2UpOworICAgIG5vZGUgPSBtYWtlTm9kZSgidHJ5IHt9
IGNhdGNoKGUpIHt9IiwgZmFsc2UpOwogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUudHlw
ZSA9PT0gV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5UcnlTdGF0ZW1lbnQpOworICAgIElu
c3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuaGFuZGxlci50eXBlID09PSBXSS5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLkNhdGNoQ2xhdXNlKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2Rl
LmhhbmRsZXIucGFyYW0udHlwZSA9PT0gV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVu
dGlmaWVyKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydCghbm9kZS5maW5hbGl6ZXIpOworICAg
IG5vZGUgPSBtYWtlTm9kZSgidHJ5IHt9IGNhdGNoIHt9IiwgZmFsc2UpOworICAgIEluc3BlY3Rv
clRlc3QuYXNzZXJ0KG5vZGUudHlwZSA9PT0gV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5U
cnlTdGF0ZW1lbnQpOworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuaGFuZGxlci50eXBl
ID09PSBXSS5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNhdGNoQ2xhdXNlKTsKKyAgICBJbnNw
ZWN0b3JUZXN0LmFzc2VydCghbm9kZS5oYW5kbGVyLnBhcmFtKTsKKyAgICBub2RlID0gbWFrZU5v
ZGUoInRyeSB7fSBmaW5hbGx5IHt9IiwgZmFsc2UpOworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0
KG5vZGUudHlwZSA9PT0gV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5UcnlTdGF0ZW1lbnQp
OworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KCFub2RlLmhhbmRsZXIpOworICAgIEluc3BlY3Rv
clRlc3QuYXNzZXJ0KG5vZGUuZmluYWxpemVyLnR5cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuQmxvY2tTdGF0ZW1lbnQpOwogICAgIEluc3BlY3RvclRlc3QubG9nKCJwYXNzZWQg
VHJ5U3RhdGVtZW50Iik7Ci0gICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5oYW5kbGVyLnR5
cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ2F0Y2hDbGF1c2UpOwogICAgIElu
c3BlY3RvclRlc3QubG9nKCJwYXNzZWQgQ2F0Y2hDbGF1c2UiKTsKIAogICAgIG5vZGUgPSBtYWtl
Tm9kZSgiZm9vID8gYmFyIDogYmF6OyIsIHRydWUpOwpAQCAtMTgzLDYgKzE5Myw3IEBAIGZ1bmN0
aW9uIHRlc3QoKQogCiAgICAgbm9kZSA9IG1ha2VOb2RlKCJmb3IodmFyIHggb2Yge30pOyIsIGZh
bHNlKTsKICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLnR5cGUgPT09IFdJLlNjcmlwdFN5
bnRheFRyZWUuTm9kZVR5cGUuRm9yT2ZTdGF0ZW1lbnQpOworICAgIEluc3BlY3RvclRlc3QuYXNz
ZXJ0KCFub2RlLmF3YWl0KTsKICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmxlZnQpOwog
ICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUubGVmdC50eXBlID09PSBXSS5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0KG5vZGUucmlnaHQpOwpAQCAtMTkxLDEwICsyMDIsMTYgQEAgZnVuY3Rpb24gdGVzdCgp
CiAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5ib2R5LnR5cGUgPT09IFdJLlNjcmlwdFN5
bnRheFRyZWUuTm9kZVR5cGUuRW1wdHlTdGF0ZW1lbnQpOwogICAgIG5vZGUgPSBtYWtlTm9kZSgi
Zm9yKHZhciB7eH0gb2Yge30pOyIsIGZhbHNlKTsKICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChu
b2RlLnR5cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRm9yT2ZTdGF0ZW1lbnQp
OworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KCFub2RlLmF3YWl0KTsKICAgICBJbnNwZWN0b3JU
ZXN0LmFzc2VydChub2RlLmxlZnQpOwogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUubGVm
dC50eXBlID09PSBXSS5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVjbGFyYXRp
b24pOwogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUubGVmdC5kZWNsYXJhdGlvbnNbMF0u
aWQudHlwZSA9PT0gV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5PYmplY3RQYXR0ZXJuKTsK
ICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmxlZnQuZGVjbGFyYXRpb25zWzBdLmlkLnBy
b3BlcnRpZXNbMF0udmFsdWUubmFtZSA9PT0gIngiKTsKKyAgICBub2RlID0gbWFrZU5vZGUoImFz
eW5jIGZ1bmN0aW9uIGZvbygpIHsgZm9yIGF3YWl0ICh4IG9mIFtdKTsgfSIsIGZhbHNlKTsKKyAg
ICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLnR5cGUgPT09IFdJLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQo
bm9kZS5hc3luYyk7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5ib2R5LmJvZHlbMF0u
dHlwZSA9PT0gV0kuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Gb3JPZlN0YXRlbWVudCk7Cisg
ICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5ib2R5LmJvZHlbMF0uYXdhaXQpOwogICAgIElu
c3BlY3RvclRlc3QubG9nKCJwYXNzZWQgRm9yT2ZTdGF0ZW1lbnQiKTsKIAogICAgIG5vZGUgPSBt
YWtlTm9kZSgiZnVuY3Rpb24gZm9vKHgseSl7fSIsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdl
TG9nCmluZGV4IDEyN2Y4NzZmODNkLi5iZDA5Njc5NzIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTktMDgtMTUgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29y
YXJvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBVcGRhdGUgRXNwcmltYSB0
byBzdXBwb3J0IG1vZGVybiBKYXZhU2NyaXB0IGxhbmd1YWdlIGZlYXR1cmVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA3OTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBSb3NzIEtpcnNsaW5nLgorCisgICAgICAgIFVzZSBhIGZvcmsgb2YgRXNwcmlt
YSB0byBzdXBwb3J0IG1vZGVybiBKYXZhU2NyaXB0IGxhbmd1YWdlIGZlYXR1cmVzCisgICAgICAg
IHdoaWxlIGdvaW5nIHRocm91Z2ggdGhlIHByb2Nlc3MgdG8gdXBzdHJlYW0gc3VwcG9ydDoKKwor
ICAgICAgICAgIEVTMjAxOCBGZWF0dXJlOiBBc3luYyBJdGVyYXRpb24gKGZvci1hd2FpdC1vZikK
KyAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2VzcHJpbWEvaXNzdWVzLzE5OTAK
KworICAgICAgICAgIEVTMjAxOSBGZWF0dXJlOiBOdW1lcmljIFNlcGFyYXRvcgorICAgICAgICAg
IGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvZXNwcmltYS9pc3N1ZXMvMTk4OQorCisgICAgICAg
ICAgRVMyMDE5IEZlYXR1cmU6IE9wdGlvbmFsIGNhdGNoIGJpbmRpbmcKKyAgICAgICAgICBodHRw
czovL2dpdGh1Yi5jb20vanF1ZXJ5L2VzcHJpbWEvaXNzdWVzLzE5NTMKKworICAgICAgICAgIEVT
MjAyMCBGZWF0dXJlOiBCaWdJbnQKKyAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5
L2VzcHJpbWEvaXNzdWVzLzE5ODgKKworICAgICAgICBFU1RyZWUgY29tcGF0aWJsZSBBU1QgY2hh
bmdlcyBhcmUgc3VtbWFyaXplZCBhczoKKworICAgICAgICAgIC0gQ2F0Y2hDbGF1c2UgYHBhcmFt
YCBwcm9wZXJ0eSBpcyBub3cgbnVsbGFibGUKKyAgICAgICAgICAtIEZvck9mU3RhdGVtZW50IG5v
dyBoYXMgYSBib29sZWFuIGBhd2FpdGAgcHJvcGVydHkKKyAgICAgICAgICAtIExpdGVyYWwgY2Fu
IGJlIGEgYCJiaWdpbnQiYCB0eXBlICh3b3JrcyBpZiB0aGUgZW52aXJvbm1lbnQgaGFzIEJpZ0lu
dCBvciBub3QpCisKKyAgICAgICAgVGhlIHByZXR0eSBwcmludGVyIG9ubHkgbmVlZGVkIHRvIGhh
dmUgYWRkaXRpb25hbCBoYW5kbGluZyBmb3IgYGZvci1hd2FpdC1vZmAuCisKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvZXNwcmltYS5qczoKKyAgICAgICAgTmV3IHZl
cnNpb24uIFR5cGVzY3JpcHQgb3V0cHV0IGV4cGVjdHMgYSBtb2Rlcm4gSmF2YVNjcmlwdCBlbnZp
cm9ubWVudAorICAgICAgICBpbnN0ZWFkIG9mIGp1c3QgRVM2LgorCisgICAgICAgICogVG9vbHMv
Rm9ybWF0dGluZy9pbmRleC5odG1sOgorICAgICAgICBVcGRhdGUgdGhlIGZvcm1hdHRpbmcgdG9v
bCBmb3IgZWFzaWVyIHVzZSBpbiBjYXNlIG9mIGVycm9ycy4KKworICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanM6CisgICAgICAgIChXSS5TY3JpcHRTeW50
YXhUcmVlLnByb3RvdHlwZS5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKToKKworICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvVGVzdC9UZXN0SGFybmVzcy5qczoKKyAgICAgICAgKFRlc3RIYXJuZXNz
LnByb3RvdHlwZS5wYXNzT3JGYWlsKToKKyAgICAgICAgQ29udmVuaWVuY2UgZm9yIHBhc3MvZmFp
bCB3aXRoIHRoZSBzYW1lIG1lc3NhZ2UgYmFzZWQgb24gYSBjb25kaXRpb24uCisKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL1dvcmtlcnMvRm9ybWF0dGVyL0VzcHJpbWFGb3JtYXR0ZXIuanM6Cisg
ICAgICAgIChFc3ByaW1hRm9ybWF0dGVyLnByb3RvdHlwZS5faGFuZGxlVG9rZW5BdE5vZGUpOgor
ICAgICAgICBFbnN1cmUgYSBzcGFjZSBhZnRlciBgYXdhaXRgIGluIGBmb3IgYXdhaXRgIHN5bnRh
eC4KKwogMjAxOS0wOC0xNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFVwZGF0ZSBFc3ByaW1hIHRvIHRydW5rIChtaW5vciBm
aXhlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9Gb3JtYXR0aW5n
L2luZGV4Lmh0bWwgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvRm9ybWF0dGluZy9pbmRl
eC5odG1sCmluZGV4IGMwMjQ2MDM5YWVkLi41ZmMwY2YwYzA0NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1Rvb2xzL0Zvcm1hdHRpbmcvaW5kZXguaHRtbAorKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVG9vbHMvRm9ybWF0dGluZy9pbmRleC5odG1sCkBAIC01NSw2ICs1NSw3
IEBACiAgICAgICAgICJsb2dpYy1leHByZXNzaW9ucy5qcyIsCiAgICAgICAgICJ0ZXJuYXJ5LWV4
cHJlc3Npb25zLmpzIiwKICAgICAgICAgIm5ldy1leHByZXNzaW9uLmpzIiwKKyAgICAgICAgIm51
bWJlcnMuanMiLAogICAgICAgICAibGFiZWwtYnJlYWstY29udGludWUtYmxvY2suanMiLAogICAg
ICAgICAid2l0aC1zdGF0ZW1lbnQuanMiLAogICAgICAgICAicmV0dXJuLXN0YXRlbWVudC5qcyIs
CkBAIC0yMDEsNyArMjAyLDcgQEAKICAgICAgICAgICAgIGxldCBkZWJ1Z0Zvcm1hdHRlciA9IG5l
dyBFc3ByaW1hRm9ybWF0dGVyRGVidWcoY20uZ2V0VmFsdWUoKSwgY3VycmVudFNvdXJjZVR5cGUo
KSk7CiAgICAgICAgICAgICBkZWJ1Z1RleHQgPSBkZWJ1Z0Zvcm1hdHRlci5kZWJ1Z1RleHQ7CiAg
ICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7Ci0gICAgICAgICAgICBkZWJ1Z1RleHQgPSAiUGFyc2Ug
ZXJyb3IiOworICAgICAgICAgICAgZGVidWdUZXh0ID0gIlBhcnNlIGVycm9yOiAiICsgSlNPTi5z
dHJpbmdpZnkoZXJyb3IsIG51bGwsIDIpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gT3V0cHV0
IHRoZSByZXN1bHRzLgpAQCAtMjY1LDEyICsyNjYsMTIgQEAKIAogICAgICAgICAgICAgLy8gQ29t
cGFyZSByZXN1bHRzLgogICAgICAgICAgICAgbGV0IHBhc3MgPSBmb3JtYXR0ZXIuZm9ybWF0dGVk
VGV4dCA9PT0gZXhwZWN0ZWREYXRhOwotICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCIvKiAiICsg
KHBhc3MgPyAiUEFTUyIgOiAiRkFJTCIpICsgIjogIiArIHRlc3QgKyAiICovIik7CisgICAgICAg
ICAgICByZXN1bHRzLnB1c2goIi8qICIgKyAocGFzcyA/ICJQQVNTIiA6ICIhISBGQUlMIikgKyAi
OiAiICsgdGVzdCArICIgKi8iKTsKIAogICAgICAgICAgICAgLy8gT3V0cHV0IGZhaWx1cmVzIHRv
IGNvbnNvbGUuCiAgICAgICAgICAgICBpZiAoIXBhc3MpIHsKICAgICAgICAgICAgICAgICBjb25z
b2xlLmxvZygiVGVzdCIsIHRlc3QpOwotICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJGb3Jt
YXR0ZWQgT3V0cHV0IiwgZm9ybWF0dGVyLmZvcm1hdHRlZFRleHQubGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICBjb25zb2xlLmxvZygiRm9ybWF0dGVkIE91dHB1dCIsIGZvcm1hdHRlci5mb3JtYXR0
ZWRUZXh0ID8gZm9ybWF0dGVyLmZvcm1hdHRlZFRleHQubGVuZ3RoIDogbnVsbCk7CiAgICAgICAg
ICAgICAgICAgY29uc29sZS5sb2coZm9ybWF0dGVyLmZvcm1hdHRlZFRleHQpOwogICAgICAgICAg
ICAgICAgIGNvbnNvbGUubG9nKCJFeHBlY3RlZCBPdXRwdXQiLCBleHBlY3RlZERhdGEubGVuZ3Ro
KTsKICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhleHBlY3RlZERhdGEpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmltYS9l
c3ByaW1hLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
RXNwcmltYS9lc3ByaW1hLmpzCmluZGV4IDljMzNiOWQ4OTY2Li4wMDRhNzg1MjM4NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmlt
YS9lc3ByaW1hLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4
dGVybmFsL0VzcHJpbWEvZXNwcmltYS5qcwpAQCAtODIsMTMgKzgyLDEzIEBAIHJldHVybiAvKioq
KioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICAgICovCiAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9k
dWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKLSAgICB2YXIgY29tbWVudF9oYW5kbGVyXzEgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDEpOwotICAgIHZhciBqc3hfcGFyc2VyXzEgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDMpOwotICAgIHZhciBwYXJzZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7Ci0g
ICAgdmFyIHRva2VuaXplcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7CisgICAgY29uc3Qg
Y29tbWVudF9oYW5kbGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpOworICAgIGNvbnN0IGpz
eF9wYXJzZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7CisgICAgY29uc3QgcGFyc2VyXzEg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpOworICAgIGNvbnN0IHRva2VuaXplcl8xID0gX193ZWJw
YWNrX3JlcXVpcmVfXygxNSk7CiAgICAgZnVuY3Rpb24gcGFyc2UoY29kZSwgb3B0aW9ucywgZGVs
ZWdhdGUpIHsKLSAgICAgICAgdmFyIGNvbW1lbnRIYW5kbGVyID0gbnVsbDsKLSAgICAgICAgdmFy
IHByb3h5RGVsZWdhdGUgPSBmdW5jdGlvbiAobm9kZSwgbWV0YWRhdGEpIHsKKyAgICAgICAgbGV0
IGNvbW1lbnRIYW5kbGVyID0gbnVsbDsKKyAgICAgICAgY29uc3QgcHJveHlEZWxlZ2F0ZSA9IChu
b2RlLCBtZXRhZGF0YSkgPT4gewogICAgICAgICAgICAgaWYgKGRlbGVnYXRlKSB7CiAgICAgICAg
ICAgICAgICAgZGVsZWdhdGUobm9kZSwgbWV0YWRhdGEpOwogICAgICAgICAgICAgfQpAQCAtOTYs
MTEgKzk2LDExIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJw
YWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgY29tbWVudEhhbmRsZXIudmlzaXQobm9kZSwg
bWV0YWRhdGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9OwotICAgICAgICB2YXIgcGFyc2Vy
RGVsZWdhdGUgPSAodHlwZW9mIGRlbGVnYXRlID09PSAnZnVuY3Rpb24nKSA/IHByb3h5RGVsZWdh
dGUgOiBudWxsOwotICAgICAgICB2YXIgY29sbGVjdENvbW1lbnQgPSBmYWxzZTsKKyAgICAgICAg
bGV0IHBhcnNlckRlbGVnYXRlID0gKHR5cGVvZiBkZWxlZ2F0ZSA9PT0gJ2Z1bmN0aW9uJykgPyBw
cm94eURlbGVnYXRlIDogbnVsbDsKKyAgICAgICAgbGV0IGNvbGxlY3RDb21tZW50ID0gZmFsc2U7
CiAgICAgICAgIGlmIChvcHRpb25zKSB7CiAgICAgICAgICAgICBjb2xsZWN0Q29tbWVudCA9ICh0
eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5jb21tZW50KTsK
LSAgICAgICAgICAgIHZhciBhdHRhY2hDb21tZW50ID0gKHR5cGVvZiBvcHRpb25zLmF0dGFjaENv
bW1lbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLmF0dGFjaENvbW1lbnQpOworICAgICAgICAg
ICAgY29uc3QgYXR0YWNoQ29tbWVudCA9ICh0eXBlb2Ygb3B0aW9ucy5hdHRhY2hDb21tZW50ID09
PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5hdHRhY2hDb21tZW50KTsKICAgICAgICAgICAgIGlmIChj
b2xsZWN0Q29tbWVudCB8fCBhdHRhY2hDb21tZW50KSB7CiAgICAgICAgICAgICAgICAgY29tbWVu
dEhhbmRsZXIgPSBuZXcgY29tbWVudF9oYW5kbGVyXzEuQ29tbWVudEhhbmRsZXIoKTsKICAgICAg
ICAgICAgICAgICBjb21tZW50SGFuZGxlci5hdHRhY2ggPSBhdHRhY2hDb21tZW50OwpAQCAtMTA4
LDE5ICsxMDgsMTkgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdl
YnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBwYXJzZXJEZWxlZ2F0ZSA9IHByb3h5RGVs
ZWdhdGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgdmFyIGlzTW9kdWxlID0g
ZmFsc2U7CisgICAgICAgIGxldCBpc01vZHVsZSA9IGZhbHNlOwogICAgICAgICBpZiAob3B0aW9u
cyAmJiB0eXBlb2Ygb3B0aW9ucy5zb3VyY2VUeXBlID09PSAnc3RyaW5nJykgewogICAgICAgICAg
ICAgaXNNb2R1bGUgPSAob3B0aW9ucy5zb3VyY2VUeXBlID09PSAnbW9kdWxlJyk7CiAgICAgICAg
IH0KLSAgICAgICAgdmFyIHBhcnNlcjsKKyAgICAgICAgbGV0IHBhcnNlcjsKICAgICAgICAgaWYg
KG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMuanN4ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5q
c3gpIHsKICAgICAgICAgICAgIHBhcnNlciA9IG5ldyBqc3hfcGFyc2VyXzEuSlNYUGFyc2VyKGNv
ZGUsIG9wdGlvbnMsIHBhcnNlckRlbGVnYXRlKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIHBhcnNlciA9IG5ldyBwYXJzZXJfMS5QYXJzZXIoY29kZSwgb3B0aW9ucywg
cGFyc2VyRGVsZWdhdGUpOwogICAgICAgICB9Ci0gICAgICAgIHZhciBwcm9ncmFtID0gaXNNb2R1
bGUgPyBwYXJzZXIucGFyc2VNb2R1bGUoKSA6IHBhcnNlci5wYXJzZVNjcmlwdCgpOwotICAgICAg
ICB2YXIgYXN0ID0gcHJvZ3JhbTsKKyAgICAgICAgY29uc3QgcHJvZ3JhbSA9IGlzTW9kdWxlID8g
cGFyc2VyLnBhcnNlTW9kdWxlKCkgOiBwYXJzZXIucGFyc2VTY3JpcHQoKTsKKyAgICAgICAgY29u
c3QgYXN0ID0gcHJvZ3JhbTsKICAgICAgICAgaWYgKGNvbGxlY3RDb21tZW50ICYmIGNvbW1lbnRI
YW5kbGVyKSB7CiAgICAgICAgICAgICBhc3QuY29tbWVudHMgPSBjb21tZW50SGFuZGxlci5jb21t
ZW50czsKICAgICAgICAgfQpAQCAtMTM0LDI0ICsxMzQsMjQgQEAgcmV0dXJuIC8qKioqKiovIChm
dW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICB9CiAgICAgZXhwb3J0
cy5wYXJzZSA9IHBhcnNlOwogICAgIGZ1bmN0aW9uIHBhcnNlTW9kdWxlKGNvZGUsIG9wdGlvbnMs
IGRlbGVnYXRlKSB7Ci0gICAgICAgIHZhciBwYXJzaW5nT3B0aW9ucyA9IG9wdGlvbnMgfHwge307
CisgICAgICAgIGNvbnN0IHBhcnNpbmdPcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICAg
cGFyc2luZ09wdGlvbnMuc291cmNlVHlwZSA9ICdtb2R1bGUnOwogICAgICAgICByZXR1cm4gcGFy
c2UoY29kZSwgcGFyc2luZ09wdGlvbnMsIGRlbGVnYXRlKTsKICAgICB9CiAgICAgZXhwb3J0cy5w
YXJzZU1vZHVsZSA9IHBhcnNlTW9kdWxlOwogICAgIGZ1bmN0aW9uIHBhcnNlU2NyaXB0KGNvZGUs
IG9wdGlvbnMsIGRlbGVnYXRlKSB7Ci0gICAgICAgIHZhciBwYXJzaW5nT3B0aW9ucyA9IG9wdGlv
bnMgfHwge307CisgICAgICAgIGNvbnN0IHBhcnNpbmdPcHRpb25zID0gb3B0aW9ucyB8fCB7fTsK
ICAgICAgICAgcGFyc2luZ09wdGlvbnMuc291cmNlVHlwZSA9ICdzY3JpcHQnOwogICAgICAgICBy
ZXR1cm4gcGFyc2UoY29kZSwgcGFyc2luZ09wdGlvbnMsIGRlbGVnYXRlKTsKICAgICB9CiAgICAg
ZXhwb3J0cy5wYXJzZVNjcmlwdCA9IHBhcnNlU2NyaXB0OwogICAgIGZ1bmN0aW9uIHRva2VuaXpl
KGNvZGUsIG9wdGlvbnMsIGRlbGVnYXRlKSB7Ci0gICAgICAgIHZhciB0b2tlbml6ZXIgPSBuZXcg
dG9rZW5pemVyXzEuVG9rZW5pemVyKGNvZGUsIG9wdGlvbnMpOwotICAgICAgICB2YXIgdG9rZW5z
OworICAgICAgICBjb25zdCB0b2tlbml6ZXIgPSBuZXcgdG9rZW5pemVyXzEuVG9rZW5pemVyKGNv
ZGUsIG9wdGlvbnMpOworICAgICAgICBsZXQgdG9rZW5zOwogICAgICAgICB0b2tlbnMgPSBbXTsK
ICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOworICAgICAgICAgICAgICAg
IGxldCB0b2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKICAgICAgICAgICAgICAgICBp
ZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KQEAgLTE4MiwyMiArMTgyLDIyIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxl
cykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAKICAgICAidXNlIHN0cmljdCI7CiAgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsK
LSAgICB2YXIgc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOwotICAgIHZhciBDb21t
ZW50SGFuZGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rp
b24gQ29tbWVudEhhbmRsZXIoKSB7CisgICAgY29uc3Qgc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDIpOworICAgIGNsYXNzIENvbW1lbnRIYW5kbGVyIHsKKyAgICAgICAgY29uc3RydWN0
b3IoKSB7CiAgICAgICAgICAgICB0aGlzLmF0dGFjaCA9IGZhbHNlOwogICAgICAgICAgICAgdGhp
cy5jb21tZW50cyA9IFtdOwogICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdOwogICAgICAgICAg
ICAgdGhpcy5sZWFkaW5nID0gW107CiAgICAgICAgICAgICB0aGlzLnRyYWlsaW5nID0gW107CiAg
ICAgICAgIH0KLSAgICAgICAgQ29tbWVudEhhbmRsZXIucHJvdG90eXBlLmluc2VydElubmVyQ29t
bWVudHMgPSBmdW5jdGlvbiAobm9kZSwgbWV0YWRhdGEpIHsKKyAgICAgICAgaW5zZXJ0SW5uZXJD
b21tZW50cyhub2RlLCBtZXRhZGF0YSkgewogICAgICAgICAgICAgLy8gIGlubm5lckNvbW1lbnRz
IGZvciBwcm9wZXJ0aWVzIGVtcHR5IGJsb2NrCiAgICAgICAgICAgICAvLyAgYGZ1bmN0aW9uIGEo
KSB7LyoqIGNvbW1lbnRzICoqXC99YAogICAgICAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gc3lu
dGF4XzEuU3ludGF4LkJsb2NrU3RhdGVtZW50ICYmIG5vZGUuYm9keS5sZW5ndGggPT09IDApIHsK
LSAgICAgICAgICAgICAgICB2YXIgaW5uZXJDb21tZW50cyA9IFtdOwotICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSB0aGlzLmxlYWRpbmcubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5sZWFkaW5nW2ldOworICAgICAgICAg
ICAgICAgIGNvbnN0IGlubmVyQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICBmb3IgKGxl
dCBpID0gdGhpcy5sZWFkaW5nLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5sZWFkaW5nW2ldOwogICAgICAgICAgICAgICAg
ICAgICBpZiAobWV0YWRhdGEuZW5kLm9mZnNldCA+PSBlbnRyeS5zdGFydCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5uZXJDb21tZW50cy51bnNoaWZ0KGVudHJ5LmNvbW1lbnQpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWFkaW5nLnNwbGljZShpLCAxKTsKQEAgLTIwOCwx
MiArMjA4LDEyIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJw
YWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIG5vZGUuaW5uZXJDb21tZW50cyA9IGlu
bmVyQ29tbWVudHM7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9
OwotICAgICAgICBDb21tZW50SGFuZGxlci5wcm90b3R5cGUuZmluZFRyYWlsaW5nQ29tbWVudHMg
PSBmdW5jdGlvbiAobWV0YWRhdGEpIHsKLSAgICAgICAgICAgIHZhciB0cmFpbGluZ0NvbW1lbnRz
ID0gW107CisgICAgICAgIH0KKyAgICAgICAgZmluZFRyYWlsaW5nQ29tbWVudHMobWV0YWRhdGEp
IHsKKyAgICAgICAgICAgIGxldCB0cmFpbGluZ0NvbW1lbnRzID0gW107CiAgICAgICAgICAgICBp
ZiAodGhpcy50cmFpbGluZy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IHRoaXMudHJhaWxpbmcubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cmFpbGluZ1tpXTsKKyAgICAgICAgICAgICAgICBm
b3IgKGxldCBpID0gdGhpcy50cmFpbGluZy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMudHJhaWxpbmdbaV07CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChlbnRyeS5zdGFydCA+PSBtZXRhZGF0YS5lbmQub2Zmc2V0KSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzLnVuc2hpZnQoZW50cnkuY29t
bWVudCk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIyMSwyMSArMjIxLDIxIEBAIHJldHVy
biAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAg
ICAgICAgICAgICAgdGhpcy50cmFpbGluZy5sZW5ndGggPSAwOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cmFpbGluZ0NvbW1lbnRzOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGxh
c3QgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CisgICAgICAgICAgICBjb25z
dCBsYXN0ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgICAgICAgICAg
aWYgKGxhc3QgJiYgbGFzdC5ub2RlLnRyYWlsaW5nQ29tbWVudHMpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgZmlyc3RDb21tZW50ID0gbGFzdC5ub2RlLnRyYWlsaW5nQ29tbWVudHNbMF07CisgICAg
ICAgICAgICAgICAgY29uc3QgZmlyc3RDb21tZW50ID0gbGFzdC5ub2RlLnRyYWlsaW5nQ29tbWVu
dHNbMF07CiAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q29tbWVudCAmJiBmaXJzdENvbW1lbnQu
cmFuZ2VbMF0gPj0gbWV0YWRhdGEuZW5kLm9mZnNldCkgewogICAgICAgICAgICAgICAgICAgICB0
cmFpbGluZ0NvbW1lbnRzID0gbGFzdC5ub2RlLnRyYWlsaW5nQ29tbWVudHM7CiAgICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZSBsYXN0Lm5vZGUudHJhaWxpbmdDb21tZW50czsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJhaWxpbmdDb21tZW50
czsKLSAgICAgICAgfTsKLSAgICAgICAgQ29tbWVudEhhbmRsZXIucHJvdG90eXBlLmZpbmRMZWFk
aW5nQ29tbWVudHMgPSBmdW5jdGlvbiAobWV0YWRhdGEpIHsKLSAgICAgICAgICAgIHZhciBsZWFk
aW5nQ29tbWVudHMgPSBbXTsKLSAgICAgICAgICAgIHZhciB0YXJnZXQ7CisgICAgICAgIH0KKyAg
ICAgICAgZmluZExlYWRpbmdDb21tZW50cyhtZXRhZGF0YSkgeworICAgICAgICAgICAgY29uc3Qg
bGVhZGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICBsZXQgdGFyZ2V0OwogICAgICAgICAg
ICAgd2hpbGUgKHRoaXMuc3RhY2subGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAgIHZhciBl
bnRyeSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBlbnRyeSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgICAg
ICAgICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkuc3RhcnQgPj0gbWV0YWRhdGEuc3RhcnQub2Zm
c2V0KSB7CiAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGVudHJ5Lm5vZGU7CiAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7CkBAIC0yNDUsOSArMjQ1LDkgQEAgcmV0dXJu
IC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodGFyZ2V0KSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gdGFyZ2V0LmxlYWRpbmdDb21tZW50cyA/IHRhcmdl
dC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIDogMDsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gY291bnQgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgY29t
bWVudCA9IHRhcmdldC5sZWFkaW5nQ29tbWVudHNbaV07CisgICAgICAgICAgICAgICAgY29uc3Qg
Y291bnQgPSB0YXJnZXQubGVhZGluZ0NvbW1lbnRzID8gdGFyZ2V0LmxlYWRpbmdDb21tZW50cy5s
ZW5ndGggOiAwOworICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBjb3VudCAtIDE7IGkgPj0g
MDsgLS1pKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1lbnQgPSB0YXJnZXQubGVh
ZGluZ0NvbW1lbnRzW2ldOwogICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudC5yYW5nZVsx
XSA8PSBtZXRhZGF0YS5zdGFydC5vZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxl
YWRpbmdDb21tZW50cy51bnNoaWZ0KGNvbW1lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
dGFyZ2V0LmxlYWRpbmdDb21tZW50cy5zcGxpY2UoaSwgMSk7CkBAIC0yNTgsMjIgKzI1OCwyMiBA
QCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJh
cAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gbGVhZGluZ0NvbW1l
bnRzOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGVhZGlu
Zy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9
IHRoaXMubGVhZGluZ1tpXTsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmxlYWRpbmcu
bGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9
IHRoaXMubGVhZGluZ1tpXTsKICAgICAgICAgICAgICAgICBpZiAoZW50cnkuc3RhcnQgPD0gbWV0
YWRhdGEuc3RhcnQub2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgIGxlYWRpbmdDb21tZW50
cy51bnNoaWZ0KGVudHJ5LmNvbW1lbnQpOwogICAgICAgICAgICAgICAgICAgICB0aGlzLmxlYWRp
bmcuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJldHVybiBsZWFkaW5nQ29tbWVudHM7Ci0gICAgICAgIH07Ci0gICAgICAgIENvbW1l
bnRIYW5kbGVyLnByb3RvdHlwZS52aXNpdE5vZGUgPSBmdW5jdGlvbiAobm9kZSwgbWV0YWRhdGEp
IHsKKyAgICAgICAgfQorICAgICAgICB2aXNpdE5vZGUobm9kZSwgbWV0YWRhdGEpIHsKICAgICAg
ICAgICAgIGlmIChub2RlLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5Qcm9ncmFtICYmIG5vZGUu
Ym9keS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgdGhpcy5pbnNlcnRJbm5lckNvbW1lbnRzKG5vZGUsIG1ldGFkYXRhKTsK
LSAgICAgICAgICAgIHZhciB0cmFpbGluZ0NvbW1lbnRzID0gdGhpcy5maW5kVHJhaWxpbmdDb21t
ZW50cyhtZXRhZGF0YSk7Ci0gICAgICAgICAgICB2YXIgbGVhZGluZ0NvbW1lbnRzID0gdGhpcy5m
aW5kTGVhZGluZ0NvbW1lbnRzKG1ldGFkYXRhKTsKKyAgICAgICAgICAgIGNvbnN0IHRyYWlsaW5n
Q29tbWVudHMgPSB0aGlzLmZpbmRUcmFpbGluZ0NvbW1lbnRzKG1ldGFkYXRhKTsKKyAgICAgICAg
ICAgIGNvbnN0IGxlYWRpbmdDb21tZW50cyA9IHRoaXMuZmluZExlYWRpbmdDb21tZW50cyhtZXRh
ZGF0YSk7CiAgICAgICAgICAgICBpZiAobGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHsKICAg
ICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IGxlYWRpbmdDb21tZW50czsKICAg
ICAgICAgICAgIH0KQEAgLTI4NCwxMCArMjg0LDEwIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rp
b24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgbm9kZTog
bm9kZSwKICAgICAgICAgICAgICAgICBzdGFydDogbWV0YWRhdGEuc3RhcnQub2Zmc2V0CiAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgfTsKLSAgICAgICAgQ29tbWVudEhhbmRsZXIucHJvdG90eXBl
LnZpc2l0Q29tbWVudCA9IGZ1bmN0aW9uIChub2RlLCBtZXRhZGF0YSkgewotICAgICAgICAgICAg
dmFyIHR5cGUgPSAobm9kZS50eXBlWzBdID09PSAnTCcpID8gJ0xpbmUnIDogJ0Jsb2NrJzsKLSAg
ICAgICAgICAgIHZhciBjb21tZW50ID0geworICAgICAgICB9CisgICAgICAgIHZpc2l0Q29tbWVu
dChub2RlLCBtZXRhZGF0YSkgeworICAgICAgICAgICAgY29uc3QgdHlwZSA9IChub2RlLnR5cGVb
MF0gPT09ICdMJykgPyAnTGluZScgOiAnQmxvY2snOworICAgICAgICAgICAgY29uc3QgY29tbWVu
dCA9IHsKICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAogICAgICAgICAgICAgICAgIHZhbHVl
OiBub2RlLnZhbHVlCiAgICAgICAgICAgICB9OwpAQCAtMjk5LDcgKzI5OSw3IEBAIHJldHVybiAv
KioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB0aGlzLmNvbW1lbnRzLnB1c2goY29tbWVudCk7CiAgICAgICAg
ICAgICBpZiAodGhpcy5hdHRhY2gpIHsKLSAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbW1l
bnQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZTogbm9kZS52YWx1ZSwKQEAgLTMxNCw4ICszMTQsOCBAQCByZXR1cm4g
LyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAg
ICAgICAgICAgIHRoaXMubGVhZGluZy5wdXNoKGVudHJ5KTsKICAgICAgICAgICAgICAgICB0aGlz
LnRyYWlsaW5nLnB1c2goZW50cnkpOwogICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgICAg
ICBDb21tZW50SGFuZGxlci5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbiAobm9kZSwgbWV0YWRh
dGEpIHsKKyAgICAgICAgfQorICAgICAgICB2aXNpdChub2RlLCBtZXRhZGF0YSkgewogICAgICAg
ICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ0xpbmVDb21tZW50JykgewogICAgICAgICAgICAgICAg
IHRoaXMudmlzaXRDb21tZW50KG5vZGUsIG1ldGFkYXRhKTsKICAgICAgICAgICAgIH0KQEAgLTMy
NSw5ICszMjUsOCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2Vi
cGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5hdHRhY2gpIHsKICAgICAg
ICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLCBtZXRhZGF0YSk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgIH07Ci0gICAgICAgIHJldHVybiBDb21tZW50SGFuZGxlcjsKLSAgICB9KCkpOwor
ICAgICAgICB9CisgICAgfQogICAgIGV4cG9ydHMuQ29tbWVudEhhbmRsZXIgPSBDb21tZW50SGFu
ZGxlcjsKIAogCkBAIC00MTMsNDUgKzQxMiwzMSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9u
KG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBl
eHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiAKICAgICAidXNlIHN0cmljdCI7Ci0vKiBp
c3RhbmJ1bCBpZ25vcmUgbmV4dCAqLwotICAgIHZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlz
Ll9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIGV4dGVuZFN0YXRpY3Mg
PSBmdW5jdGlvbiAoZCwgYikgewotICAgICAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5z
ZXRQcm90b3R5cGVPZiB8fAotICAgICAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0
YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHwK
LSAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChi
Lmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTsKLSAgICAgICAgICAgIHJldHVybiBl
eHRlbmRTdGF0aWNzKGQsIGIpOwotICAgICAgICB9OwotICAgICAgICByZXR1cm4gZnVuY3Rpb24g
KGQsIGIpIHsKLSAgICAgICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7Ci0gICAgICAgICAgICBm
dW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH0KLSAgICAgICAgICAgIGQucHJv
dG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0g
Yi5wcm90b3R5cGUsIG5ldyBfXygpKTsKLSAgICAgICAgfTsKLSAgICB9KSgpOwogICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7
Ci0gICAgdmFyIGNoYXJhY3Rlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKLSAgICB2YXIg
SlNYTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7Ci0gICAgdmFyIGpzeF9zeW50YXhfMSA9
IF9fd2VicGFja19yZXF1aXJlX18oNik7Ci0gICAgdmFyIE5vZGUgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDcpOwotICAgIHZhciBwYXJzZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7Ci0gICAg
dmFyIHRva2VuXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKLSAgICB2YXIgeGh0bWxfZW50
aXRpZXNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpOworICAgIGNvbnN0IGNoYXJhY3Rlcl8x
ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKKyAgICBjb25zdCBKU1hOb2RlID0gX193ZWJwYWNr
X3JlcXVpcmVfXyg1KTsKKyAgICBjb25zdCBqc3hfc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDYpOworICAgIGNvbnN0IE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpOworICAgIGNv
bnN0IHBhcnNlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKKyAgICBjb25zdCB0b2tlbl8x
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7CisgICAgY29uc3QgeGh0bWxfZW50aXRpZXNfMSA9
IF9fd2VicGFja19yZXF1aXJlX18oMTQpOwogICAgIHRva2VuXzEuVG9rZW5OYW1lWzEwMCAvKiBJ
ZGVudGlmaWVyICovXSA9ICdKU1hJZGVudGlmaWVyJzsKICAgICB0b2tlbl8xLlRva2VuTmFtZVsx
MDEgLyogVGV4dCAqL10gPSAnSlNYVGV4dCc7CiAgICAgLy8gRnVsbHkgcXVhbGlmaWVkIGVsZW1l
bnQgbmFtZSwgZS5nLiA8c3ZnOnBhdGg+IHJldHVybnMgInN2ZzpwYXRoIgogICAgIGZ1bmN0aW9u
IGdldFF1YWxpZmllZEVsZW1lbnROYW1lKGVsZW1lbnROYW1lKSB7Ci0gICAgICAgIHZhciBxdWFs
aWZpZWROYW1lOworICAgICAgICBsZXQgcXVhbGlmaWVkTmFtZTsKICAgICAgICAgc3dpdGNoIChl
bGVtZW50TmFtZS50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIGpzeF9zeW50YXhfMS5KU1hTeW50
YXguSlNYSWRlbnRpZmllcjoKLSAgICAgICAgICAgICAgICB2YXIgaWQgPSBlbGVtZW50TmFtZTsK
KyAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGVsZW1lbnROYW1lOwogICAgICAgICAgICAgICAg
IHF1YWxpZmllZE5hbWUgPSBpZC5uYW1lOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWE5hbWVzcGFjZWROYW1lOgotICAg
ICAgICAgICAgICAgIHZhciBucyA9IGVsZW1lbnROYW1lOworICAgICAgICAgICAgICAgIGNvbnN0
IG5zID0gZWxlbWVudE5hbWU7CiAgICAgICAgICAgICAgICAgcXVhbGlmaWVkTmFtZSA9IGdldFF1
YWxpZmllZEVsZW1lbnROYW1lKG5zLm5hbWVzcGFjZSkgKyAnOicgKwogICAgICAgICAgICAgICAg
ICAgICBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShucy5uYW1lKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hNZW1iZXJF
eHByZXNzaW9uOgotICAgICAgICAgICAgICAgIHZhciBleHByID0gZWxlbWVudE5hbWU7CisgICAg
ICAgICAgICAgICAgY29uc3QgZXhwciA9IGVsZW1lbnROYW1lOwogICAgICAgICAgICAgICAgIHF1
YWxpZmllZE5hbWUgPSBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShleHByLm9iamVjdCkgKyAnLicg
KwogICAgICAgICAgICAgICAgICAgICBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShleHByLnByb3Bl
cnR5KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ2MSw1NSArNDQ2LDU0IEBAIHJldHVy
biAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIHF1YWxpZmllZE5hbWU7CiAgICAgfQotICAgIHZhciBKU1hQ
YXJzZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7Ci0gICAgICAgIF9fZXh0
ZW5kcyhKU1hQYXJzZXIsIF9zdXBlcik7Ci0gICAgICAgIGZ1bmN0aW9uIEpTWFBhcnNlcihjb2Rl
LCBvcHRpb25zLCBkZWxlZ2F0ZSkgewotICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRo
aXMsIGNvZGUsIG9wdGlvbnMsIGRlbGVnYXRlKSB8fCB0aGlzOworICAgIGNsYXNzIEpTWFBhcnNl
ciBleHRlbmRzIHBhcnNlcl8xLlBhcnNlciB7CisgICAgICAgIGNvbnN0cnVjdG9yKGNvZGUsIG9w
dGlvbnMsIGRlbGVnYXRlKSB7CisgICAgICAgICAgICBzdXBlcihjb2RlLCBvcHRpb25zLCBkZWxl
Z2F0ZSk7CiAgICAgICAgIH0KLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZVByaW1h
cnlFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0
Y2goJzwnKSA/IHRoaXMucGFyc2VKU1hSb290KCkgOiBfc3VwZXIucHJvdG90eXBlLnBhcnNlUHJp
bWFyeUV4cHJlc3Npb24uY2FsbCh0aGlzKTsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2Vy
LnByb3RvdHlwZS5zdGFydEpTWCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcGFyc2VQcmltYXJ5
RXhwcmVzc2lvbigpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdGNoKCc8JykgPyB0aGlz
LnBhcnNlSlNYUm9vdCgpIDogc3VwZXIucGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpOworICAgICAg
ICB9CisgICAgICAgIHN0YXJ0SlNYKCkgewogICAgICAgICAgICAgLy8gVW53aW5kIHRoZSBzY2Fu
bmVyIGJlZm9yZSB0aGUgbG9va2FoZWFkIHRva2VuLgogICAgICAgICAgICAgdGhpcy5zY2FubmVy
LmluZGV4ID0gdGhpcy5zdGFydE1hcmtlci5pbmRleDsKICAgICAgICAgICAgIHRoaXMuc2Nhbm5l
ci5saW5lTnVtYmVyID0gdGhpcy5zdGFydE1hcmtlci5saW5lOwogICAgICAgICAgICAgdGhpcy5z
Y2FubmVyLmxpbmVTdGFydCA9IHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggLSB0aGlzLnN0YXJ0TWFy
a2VyLmNvbHVtbjsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5maW5p
c2hKU1ggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIH0KKyAgICAgICAgZmluaXNoSlNYKCkgewog
ICAgICAgICAgICAgLy8gUHJpbWUgdGhlIG5leHQgbG9va2FoZWFkLgogICAgICAgICAgICAgdGhp
cy5uZXh0VG9rZW4oKTsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5y
ZWVudGVySlNYID0gZnVuY3Rpb24gKCkgeworICAgICAgICB9CisgICAgICAgIHJlZW50ZXJKU1go
KSB7CiAgICAgICAgICAgICB0aGlzLnN0YXJ0SlNYKCk7CiAgICAgICAgICAgICB0aGlzLmV4cGVj
dEpTWCgnfScpOwogICAgICAgICAgICAgLy8gUG9wIHRoZSBjbG9zaW5nICd9JyBhZGRlZCBmcm9t
IHRoZSBsb29rYWhlYWQuCiAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcudG9rZW5zKSB7CiAg
ICAgICAgICAgICAgICAgdGhpcy50b2tlbnMucG9wKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
IH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUuY3JlYXRlSlNYTm9kZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgfQorICAgICAgICBjcmVhdGVKU1hOb2RlKCkgewogICAgICAgICAgICAg
dGhpcy5jb2xsZWN0Q29tbWVudHMoKTsKICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAg
ICAgICAgaW5kZXg6IHRoaXMuc2Nhbm5lci5pbmRleCwKICAgICAgICAgICAgICAgICBsaW5lOiB0
aGlzLnNjYW5uZXIubGluZU51bWJlciwKICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuc2Nh
bm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQKICAgICAgICAgICAgIH07Ci0gICAg
ICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUuY3JlYXRlSlNYQ2hpbGROb2RlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB9CisgICAgICAgIGNyZWF0ZUpTWENoaWxkTm9kZSgpIHsK
ICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuc2Nhbm5l
ci5pbmRleCwKICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwK
ICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5l
ci5saW5lU3RhcnQKICAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNl
ci5wcm90b3R5cGUuc2NhblhIVE1MRW50aXR5ID0gZnVuY3Rpb24gKHF1b3RlKSB7Ci0gICAgICAg
ICAgICB2YXIgcmVzdWx0ID0gJyYnOwotICAgICAgICAgICAgdmFyIHZhbGlkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIHZhciB0ZXJtaW5hdGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgbnVtZXJp
YyA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIGhleCA9IGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHNjYW5YSFRNTEVudGl0eShxdW90ZSkgeworICAgICAgICAgICAgbGV0IHJlc3VsdCA9ICcm
JzsKKyAgICAgICAgICAgIGxldCB2YWxpZCA9IHRydWU7CisgICAgICAgICAgICBsZXQgdGVybWlu
YXRlZCA9IGZhbHNlOworICAgICAgICAgICAgbGV0IG51bWVyaWMgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGxldCBoZXggPSBmYWxzZTsKICAgICAgICAgICAgIHdoaWxlICghdGhpcy5zY2FubmVyLmVv
ZigpICYmIHZhbGlkICYmICF0ZXJtaW5hdGVkKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNoID0g
dGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdOworICAgICAgICAgICAgICAg
IGNvbnN0IGNoID0gdGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdOwogICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTM5LDcgKzUyMyw3IEBAIHJldHVybiAvKioqKioq
LyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAodmFsaWQgJiYgdGVybWluYXRlZCAmJiByZXN1bHQubGVuZ3RoID4g
MikgewogICAgICAgICAgICAgICAgIC8vIGUuZy4gJyYjeDQxOycgYmVjb21lcyBqdXN0ICcjeDQx
JwotICAgICAgICAgICAgICAgIHZhciBzdHIgPSByZXN1bHQuc3Vic3RyKDEsIHJlc3VsdC5sZW5n
dGggLSAyKTsKKyAgICAgICAgICAgICAgICBjb25zdCBzdHIgPSByZXN1bHQuc3Vic3RyKDEsIHJl
c3VsdC5sZW5ndGggLSAyKTsKICAgICAgICAgICAgICAgICBpZiAobnVtZXJpYyAmJiBzdHIubGVu
Z3RoID4gMSkgewogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBTdHJpbmcuZnJvbUNoYXJD
b2RlKHBhcnNlSW50KHN0ci5zdWJzdHIoMSksIDEwKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAt
NTUxLDEzICs1MzUsMTMgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8v
IHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8v
IFNjYW4gdGhlIG5leHQgSlNYIHRva2VuLiBUaGlzIHJlcGxhY2VzIFNjYW5uZXIjbGV4IHdoZW4g
aW4gSlNYIG1vZGUuCi0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUubGV4SlNYID0gZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgdmFyIGNwID0gdGhpcy5zY2FubmVyLnNvdXJjZS5jaGFyQ29k
ZUF0KHRoaXMuc2Nhbm5lci5pbmRleCk7CisgICAgICAgIGxleEpTWCgpIHsKKyAgICAgICAgICAg
IGNvbnN0IGNwID0gdGhpcy5zY2FubmVyLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuc2Nhbm5lci5p
bmRleCk7CiAgICAgICAgICAgICAvLyA8ID4gLyA6ID0geyB9CiAgICAgICAgICAgICBpZiAoY3Ag
PT09IDYwIHx8IGNwID09PSA2MiB8fCBjcCA9PT0gNDcgfHwgY3AgPT09IDU4IHx8IGNwID09PSA2
MSB8fCBjcCA9PT0gMTIzIHx8IGNwID09PSAxMjUpIHsKLSAgICAgICAgICAgICAgICB2YXIgdmFs
dWUgPSB0aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleCsrXTsKKyAgICAgICAg
ICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmlu
ZGV4KytdOwogICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgIHR5
cGU6IDcgLyogUHVuY3R1YXRvciAqLywKICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVl
LApAQCAtNTY5LDExICs1NTMsMTEgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVz
KSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vICIg
JwogICAgICAgICAgICAgaWYgKGNwID09PSAzNCB8fCBjcCA9PT0gMzkpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgc3RhcnQgPSB0aGlzLnNjYW5uZXIuaW5kZXg7Ci0gICAgICAgICAgICAgICAgdmFy
IHF1b3RlID0gdGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXgrK107Ci0gICAg
ICAgICAgICAgICAgdmFyIHN0ciA9ICcnOworICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0g
dGhpcy5zY2FubmVyLmluZGV4OworICAgICAgICAgICAgICAgIGNvbnN0IHF1b3RlID0gdGhpcy5z
Y2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXgrK107CisgICAgICAgICAgICAgICAgbGV0
IHN0ciA9ICcnOwogICAgICAgICAgICAgICAgIHdoaWxlICghdGhpcy5zY2FubmVyLmVvZigpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5z
Y2FubmVyLmluZGV4KytdOworICAgICAgICAgICAgICAgICAgICBjb25zdCBjaCA9IHRoaXMuc2Nh
bm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4KytdOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoY2ggPT09IHF1b3RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgfQpAQCAtNTk1LDEwICs1NzksMTAgQEAgcmV0dXJuIC8qKioqKiovIChm
dW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIC8vIC4uLiBvciAuCiAgICAgICAgICAgICBpZiAoY3AgPT09IDQ2KSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIG4xID0gdGhpcy5zY2FubmVyLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMu
c2Nhbm5lci5pbmRleCArIDEpOwotICAgICAgICAgICAgICAgIHZhciBuMiA9IHRoaXMuc2Nhbm5l
ci5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5kZXggKyAyKTsKLSAgICAgICAgICAg
ICAgICB2YXIgdmFsdWUgPSAobjEgPT09IDQ2ICYmIG4yID09PSA0NikgPyAnLi4uJyA6ICcuJzsK
LSAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisgICAgICAg
ICAgICAgICAgY29uc3QgbjEgPSB0aGlzLnNjYW5uZXIuc291cmNlLmNoYXJDb2RlQXQodGhpcy5z
Y2FubmVyLmluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgY29uc3QgbjIgPSB0aGlzLnNjYW5u
ZXIuc291cmNlLmNoYXJDb2RlQXQodGhpcy5zY2FubmVyLmluZGV4ICsgMik7CisgICAgICAgICAg
ICAgICAgY29uc3QgdmFsdWUgPSAobjEgPT09IDQ2ICYmIG4yID09PSA0NikgPyAnLi4uJyA6ICcu
JzsKKyAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKICAg
ICAgICAgICAgICAgICB0aGlzLnNjYW5uZXIuaW5kZXggKz0gdmFsdWUubGVuZ3RoOwogICAgICAg
ICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDcgLyogUHVuY3R1
YXRvciAqLywKQEAgLTYyMywxMCArNjA3LDEwIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24o
bW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAvLyBJZGVudGlmZXIgY2FuIG5vdCBjb250YWluIGJhY2tzbGFzaCAoY2hhciBjb2RlIDkyKS4K
ICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQo
Y3ApICYmIChjcCAhPT0gOTIpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5z
Y2FubmVyLmluZGV4OworICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zY2FubmVy
LmluZGV4OwogICAgICAgICAgICAgICAgICsrdGhpcy5zY2FubmVyLmluZGV4OwogICAgICAgICAg
ICAgICAgIHdoaWxlICghdGhpcy5zY2FubmVyLmVvZigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBjaCA9IHRoaXMuc2Nhbm5lci5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBjaCA9IHRoaXMuc2Nhbm5lci5zb3VyY2Uu
Y2hhckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQoY2gpICYmIChjaCAhPT0gOTIp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMuc2Nhbm5lci5pbmRleDsKICAgICAg
ICAgICAgICAgICAgICAgfQpAQCAtNjM4LDcgKzYyMiw3IEBAIHJldHVybiAvKioqKioqLyAoZnVu
Y3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKHN0YXJ0LCB0
aGlzLnNjYW5uZXIuaW5kZXgpOworICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5zY2Fu
bmVyLnNvdXJjZS5zbGljZShzdGFydCwgdGhpcy5zY2FubmVyLmluZGV4KTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICB0eXBlOiAxMDAgLyogSWRlbnRpZmll
ciAqLywKICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGlkLApAQCAtNjQ5LDEzICs2MzMsMTMg
QEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3Ry
YXAKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IHRoaXMuc2Nhbm5lci5sZXgoKTsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3Rv
dHlwZS5uZXh0SlNYVG9rZW4gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIH0KKyAgICAgICAgbmV4
dEpTWFRva2VuKCkgewogICAgICAgICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMoKTsKICAgICAg
ICAgICAgIHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7CiAgICAg
ICAgICAgICB0aGlzLnN0YXJ0TWFya2VyLmxpbmUgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjsK
ICAgICAgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIuY29sdW1uID0gdGhpcy5zY2FubmVyLmluZGV4
IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMu
bGV4SlNYKCk7CisgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMubGV4SlNYKCk7CiAgICAg
ICAgICAgICB0aGlzLmxhc3RNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7CiAgICAg
ICAgICAgICB0aGlzLmxhc3RNYXJrZXIubGluZSA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOwog
ICAgICAgICAgICAgdGhpcy5sYXN0TWFya2VyLmNvbHVtbiA9IHRoaXMuc2Nhbm5lci5pbmRleCAt
IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7CkBAIC02NjMsMTUgKzY0NywxNSBAQCByZXR1cm4gLyoq
KioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAg
ICAgICAgIHRoaXMudG9rZW5zLnB1c2godGhpcy5jb252ZXJ0VG9rZW4odG9rZW4pKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKLSAgICAgICAgfTsKLSAgICAgICAg
SlNYUGFyc2VyLnByb3RvdHlwZS5uZXh0SlNYVGV4dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
fQorICAgICAgICBuZXh0SlNYVGV4dCgpIHsKICAgICAgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIu
aW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7CiAgICAgICAgICAgICB0aGlzLnN0YXJ0TWFya2Vy
LmxpbmUgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjsKICAgICAgICAgICAgIHRoaXMuc3RhcnRN
YXJrZXIuY29sdW1uID0gdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFy
dDsKLSAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKLSAgICAgICAg
ICAgIHZhciB0ZXh0ID0gJyc7CisgICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc2Nhbm5l
ci5pbmRleDsKKyAgICAgICAgICAgIGxldCB0ZXh0ID0gJyc7CiAgICAgICAgICAgICB3aGlsZSAo
IXRoaXMuc2Nhbm5lci5lb2YoKSkgewotICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc2Nh
bm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XTsKKyAgICAgICAgICAgICAgICBjb25zdCBj
aCA9IHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XTsKICAgICAgICAgICAg
ICAgICBpZiAoY2ggPT09ICd7JyB8fCBjaCA9PT0gJzwnKSB7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTY4OCw3ICs2NzIsNyBAQCByZXR1cm4gLyoq
KioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAg
ICAgdGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4OwogICAgICAgICAg
ICAgdGhpcy5sYXN0TWFya2VyLmxpbmUgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjsKICAgICAg
ICAgICAgIHRoaXMubGFzdE1hcmtlci5jb2x1bW4gPSB0aGlzLnNjYW5uZXIuaW5kZXggLSB0aGlz
LnNjYW5uZXIubGluZVN0YXJ0OwotICAgICAgICAgICAgdmFyIHRva2VuID0geworICAgICAgICAg
ICAgY29uc3QgdG9rZW4gPSB7CiAgICAgICAgICAgICAgICAgdHlwZTogMTAxIC8qIFRleHQgKi8s
CiAgICAgICAgICAgICAgICAgdmFsdWU6IHRleHQsCiAgICAgICAgICAgICAgICAgbGluZU51bWJl
cjogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCkBAIC03MDAsMTYzICs2ODQsMTYzIEBAIHJldHVy
biAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAg
ICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaCh0aGlzLmNvbnZlcnRUb2tlbih0b2tlbikpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRva2VuOwotICAgICAgICB9OwotICAg
ICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBlZWtKU1hUb2tlbiA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc2Nhbm5lci5zYXZlU3RhdGUoKTsKKyAgICAgICAg
fQorICAgICAgICBwZWVrSlNYVG9rZW4oKSB7CisgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRo
aXMuc2Nhbm5lci5zYXZlU3RhdGUoKTsKICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5zY2FuQ29t
bWVudHMoKTsKLSAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5sZXhKU1goKTsKKyAgICAgICAg
ICAgIGNvbnN0IG5leHQgPSB0aGlzLmxleEpTWCgpOwogICAgICAgICAgICAgdGhpcy5zY2FubmVy
LnJlc3RvcmVTdGF0ZShzdGF0ZSk7CiAgICAgICAgICAgICByZXR1cm4gbmV4dDsKLSAgICAgICAg
fTsKKyAgICAgICAgfQogICAgICAgICAvLyBFeHBlY3QgdGhlIG5leHQgSlNYIHRva2VuIHRvIG1h
dGNoIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci4KICAgICAgICAgLy8gSWYgbm90LCBhbiBleGNl
cHRpb24gd2lsbCBiZSB0aHJvd24uCi0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUuZXhwZWN0
SlNYID0gZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5l
eHRKU1hUb2tlbigpOworICAgICAgICBleHBlY3RKU1godmFsdWUpIHsKKyAgICAgICAgICAgIGNv
bnN0IHRva2VuID0gdGhpcy5uZXh0SlNYVG9rZW4oKTsKICAgICAgICAgICAgIGlmICh0b2tlbi50
eXBlICE9PSA3IC8qIFB1bmN0dWF0b3IgKi8gfHwgdG9rZW4udmFsdWUgIT09IHZhbHVlKSB7CiAg
ICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gUmV0dXJuIHRydWUgaWYg
dGhlIG5leHQgSlNYIHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgotICAg
ICAgICBKU1hQYXJzZXIucHJvdG90eXBlLm1hdGNoSlNYID0gZnVuY3Rpb24gKHZhbHVlKSB7Ci0g
ICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMucGVla0pTWFRva2VuKCk7CisgICAgICAgIG1hdGNo
SlNYKHZhbHVlKSB7CisgICAgICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5wZWVrSlNYVG9rZW4o
KTsKICAgICAgICAgICAgIHJldHVybiBuZXh0LnR5cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLyAm
JiBuZXh0LnZhbHVlID09PSB2YWx1ZTsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZUpTWElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2
YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpOwotICAgICAgICAgICAgdmFyIHRva2VuID0g
dGhpcy5uZXh0SlNYVG9rZW4oKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUpTWElkZW50aWZp
ZXIoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7Cisg
ICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMubmV4dEpTWFRva2VuKCk7CiAgICAgICAgICAg
ICBpZiAodG9rZW4udHlwZSAhPT0gMTAwIC8qIElkZW50aWZpZXIgKi8pIHsKICAgICAgICAgICAg
ICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWElkZW50
aWZpZXIodG9rZW4udmFsdWUpKTsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZUpTWEVsZW1lbnROYW1lID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKLSAgICAgICAgICAgIHZhciBlbGVtZW50TmFt
ZSA9IHRoaXMucGFyc2VKU1hJZGVudGlmaWVyKCk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VK
U1hFbGVtZW50TmFtZSgpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZUpT
WE5vZGUoKTsKKyAgICAgICAgICAgIGxldCBlbGVtZW50TmFtZSA9IHRoaXMucGFyc2VKU1hJZGVu
dGlmaWVyKCk7CiAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEpTWCgnOicpKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IGVsZW1lbnROYW1lOworICAgICAgICAgICAgICAgIGNv
bnN0IG5hbWVzcGFjZSA9IGVsZW1lbnROYW1lOwogICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0
SlNYKCc6Jyk7Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWVfMSA9IHRoaXMucGFyc2VKU1hJZGVu
dGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBKU1hOb2RlLkpTWE5hbWVzcGFjZWROYW1lKG5hbWVzcGFjZSwgbmFtZV8xKSk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMucGFyc2VKU1hJZGVudGlmaWVyKCk7Cisg
ICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hO
b2RlLkpTWE5hbWVzcGFjZWROYW1lKG5hbWVzcGFjZSwgbmFtZSkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaEpTWCgnLicpKSB7CiAgICAgICAgICAgICAg
ICAgd2hpbGUgKHRoaXMubWF0Y2hKU1goJy4nKSkgewotICAgICAgICAgICAgICAgICAgICB2YXIg
b2JqZWN0ID0gZWxlbWVudE5hbWU7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdCA9
IGVsZW1lbnROYW1lOwogICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgnLicpOwot
ICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnBhcnNlSlNYSWRlbnRpZmll
cigpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMucGFyc2VKU1hJ
ZGVudGlmaWVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gdGhpcy5maW5h
bGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hNZW1iZXJFeHByZXNzaW9uKG9iamVjdCwgcHJvcGVy
dHkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm4gZWxlbWVudE5hbWU7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUu
cGFyc2VKU1hBdHRyaWJ1dGVOYW1lID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKLSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVOYW1l
OwotICAgICAgICAgICAgdmFyIGlkZW50aWZpZXIgPSB0aGlzLnBhcnNlSlNYSWRlbnRpZmllcigp
OworICAgICAgICB9CisgICAgICAgIHBhcnNlSlNYQXR0cmlidXRlTmFtZSgpIHsKKyAgICAgICAg
ICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKKyAgICAgICAgICAgIGxldCBh
dHRyaWJ1dGVOYW1lOworICAgICAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IHRoaXMucGFyc2VK
U1hJZGVudGlmaWVyKCk7CiAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEpTWCgnOicpKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IGlkZW50aWZpZXI7CisgICAgICAgICAgICAg
ICAgY29uc3QgbmFtZXNwYWNlID0gaWRlbnRpZmllcjsKICAgICAgICAgICAgICAgICB0aGlzLmV4
cGVjdEpTWCgnOicpOwotICAgICAgICAgICAgICAgIHZhciBuYW1lXzIgPSB0aGlzLnBhcnNlSlNY
SWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWE5hbWVzcGFjZWROYW1lKG5hbWVzcGFjZSwgbmFtZV8y
KSk7CisgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMucGFyc2VKU1hJZGVudGlmaWVy
KCk7CisgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9IHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IEpTWE5vZGUuSlNYTmFtZXNwYWNlZE5hbWUobmFtZXNwYWNlLCBuYW1lKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1l
ID0gaWRlbnRpZmllcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1
dGVOYW1lOwotICAgICAgICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNY
U3RyaW5nTGl0ZXJhbEF0dHJpYnV0ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlz
Lm5leHRKU1hUb2tlbigpOworICAgICAgICB9CisgICAgICAgIHBhcnNlSlNYU3RyaW5nTGl0ZXJh
bEF0dHJpYnV0ZSgpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5v
ZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5uZXh0SlNYVG9rZW4oKTsKICAg
ICAgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSA4IC8qIFN0cmluZ0xpdGVyYWwgKi8pIHsKICAg
ICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHZhciByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsKKyAg
ICAgICAgICAgIGNvbnN0IHJhdyA9IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pOwogICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuTGl0ZXJhbCh0b2tlbi52YWx1
ZSwgcmF3KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VK
U1hFeHByZXNzaW9uQXR0cmlidXRlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUpTWEV4
cHJlc3Npb25BdHRyaWJ1dGUoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVh
dGVKU1hOb2RlKCk7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgneycpOwogICAgICAgICAg
ICAgdGhpcy5maW5pc2hKU1goKTsKICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd9JykpIHsK
ICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IoJ0pTWCBhdHRyaWJ1dGVzIG11c3Qg
b25seSBiZSBhc3NpZ25lZCBhIG5vbi1lbXB0eSBleHByZXNzaW9uJyk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB2YXIgZXhwcmVzc2lvbiA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbigpOworICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMucGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbigpOwogICAgICAgICAgICAgdGhpcy5yZWVudGVySlNYKCk7CiAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hFeHByZXNzaW9u
Q29udGFpbmVyKGV4cHJlc3Npb24pKTsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZUpTWEF0dHJpYnV0ZVZhbHVlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB9
CisgICAgICAgIHBhcnNlSlNYQXR0cmlidXRlVmFsdWUoKSB7CiAgICAgICAgICAgICByZXR1cm4g
dGhpcy5tYXRjaEpTWCgneycpID8gdGhpcy5wYXJzZUpTWEV4cHJlc3Npb25BdHRyaWJ1dGUoKSA6
CiAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaEpTWCgnPCcpID8gdGhpcy5wYXJzZUpTWEVsZW1l
bnQoKSA6IHRoaXMucGFyc2VKU1hTdHJpbmdMaXRlcmFsQXR0cmlidXRlKCk7Ci0gICAgICAgIH07
Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hOYW1lVmFsdWVBdHRyaWJ1dGUg
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9k
ZSgpOwotICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLnBhcnNlSlNYQXR0cmlidXRlTmFtZSgp
OwotICAgICAgICAgICAgdmFyIHZhbHVlID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBwYXJz
ZUpTWE5hbWVWYWx1ZUF0dHJpYnV0ZSgpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlz
LmNyZWF0ZUpTWE5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnBhcnNlSlNY
QXR0cmlidXRlTmFtZSgpOworICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDsKICAgICAgICAg
ICAgIGlmICh0aGlzLm1hdGNoSlNYKCc9JykpIHsKICAgICAgICAgICAgICAgICB0aGlzLmV4cGVj
dEpTWCgnPScpOwogICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZUpTWEF0dHJpYnV0
ZVZhbHVlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hBdHRyaWJ1dGUobmFtZSwgdmFsdWUpKTsKLSAgICAgICAg
fTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWFNwcmVhZEF0dHJpYnV0ZSA9
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2Rl
KCk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VKU1hTcHJlYWRBdHRyaWJ1dGUoKSB7CisgICAg
ICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CiAgICAgICAgICAgICB0
aGlzLmV4cGVjdEpTWCgneycpOwogICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJy4uLicpOwog
ICAgICAgICAgICAgdGhpcy5maW5pc2hKU1goKTsKLSAgICAgICAgICAgIHZhciBhcmd1bWVudCA9
IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAgICAgICAgY29uc3QgYXJn
dW1lbnQgPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKICAgICAgICAgICAgIHRo
aXMucmVlbnRlckpTWCgpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IEpTWE5vZGUuSlNYU3ByZWFkQXR0cmlidXRlKGFyZ3VtZW50KSk7Ci0gICAgICAgIH07Ci0g
ICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hBdHRyaWJ1dGVzID0gZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBbXTsKKyAgICAgICAgfQorICAgICAg
ICBwYXJzZUpTWEF0dHJpYnV0ZXMoKSB7CisgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0g
W107CiAgICAgICAgICAgICB3aGlsZSAoIXRoaXMubWF0Y2hKU1goJy8nKSAmJiAhdGhpcy5tYXRj
aEpTWCgnPicpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IHRoaXMubWF0Y2hK
U1goJ3snKSA/IHRoaXMucGFyc2VKU1hTcHJlYWRBdHRyaWJ1dGUoKSA6CisgICAgICAgICAgICAg
ICAgY29uc3QgYXR0cmlidXRlID0gdGhpcy5tYXRjaEpTWCgneycpID8gdGhpcy5wYXJzZUpTWFNw
cmVhZEF0dHJpYnV0ZSgpIDoKICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJzZUpTWE5hbWVW
YWx1ZUF0dHJpYnV0ZSgpOwogICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChhdHRyaWJ1
dGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7Ci0gICAg
ICAgIH07Ci0gICAgICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hPcGVuaW5nRWxlbWVu
dCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hO
b2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VKU1hPcGVuaW5nRWxlbWVudCgpIHsKKyAg
ICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKICAgICAgICAgICAg
IHRoaXMuZXhwZWN0SlNYKCc8Jyk7Ci0gICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMucGFyc2VK
U1hFbGVtZW50TmFtZSgpOwotICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLnBhcnNl
SlNYQXR0cmlidXRlcygpOwotICAgICAgICAgICAgdmFyIHNlbGZDbG9zaW5nID0gdGhpcy5tYXRj
aEpTWCgnLycpOworICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMucGFyc2VKU1hFbGVtZW50
TmFtZSgpOworICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXMucGFyc2VKU1hBdHRy
aWJ1dGVzKCk7CisgICAgICAgICAgICBjb25zdCBzZWxmQ2xvc2luZyA9IHRoaXMubWF0Y2hKU1go
Jy8nKTsKICAgICAgICAgICAgIGlmIChzZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgIHRo
aXMuZXhwZWN0SlNYKCcvJyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0aGlzLmV4cGVj
dEpTWCgnPicpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpT
WE5vZGUuSlNYT3BlbmluZ0VsZW1lbnQobmFtZSwgc2VsZkNsb3NpbmcsIGF0dHJpYnV0ZXMpKTsK
LSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEJvdW5kYXJ5
RWxlbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVh
dGVKU1hOb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VKU1hCb3VuZGFyeUVsZW1lbnQo
KSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CiAgICAg
ICAgICAgICB0aGlzLmV4cGVjdEpTWCgnPCcpOwogICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hK
U1goJy8nKSkgewogICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCcvJyk7Ci0gICAgICAg
ICAgICAgICAgdmFyIGVsZW1lbnROYW1lID0gdGhpcy5wYXJzZUpTWEVsZW1lbnROYW1lKCk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudE5hbWUgPSB0aGlzLnBhcnNlSlNYRWxlbWVudE5h
bWUoKTsKICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgnPicpOwogICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWENsb3NpbmdFbGVt
ZW50KGVsZW1lbnROYW1lKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgbmFtZSA9
IHRoaXMucGFyc2VKU1hFbGVtZW50TmFtZSgpOwotICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMg
PSB0aGlzLnBhcnNlSlNYQXR0cmlidXRlcygpOwotICAgICAgICAgICAgdmFyIHNlbGZDbG9zaW5n
ID0gdGhpcy5tYXRjaEpTWCgnLycpOworICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMucGFy
c2VKU1hFbGVtZW50TmFtZSgpOworICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXMu
cGFyc2VKU1hBdHRyaWJ1dGVzKCk7CisgICAgICAgICAgICBjb25zdCBzZWxmQ2xvc2luZyA9IHRo
aXMubWF0Y2hKU1goJy8nKTsKICAgICAgICAgICAgIGlmIChzZWxmQ2xvc2luZykgewogICAgICAg
ICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCcvJyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB0aGlzLmV4cGVjdEpTWCgnPicpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IEpTWE5vZGUuSlNYT3BlbmluZ0VsZW1lbnQobmFtZSwgc2VsZkNsb3NpbmcsIGF0
dHJpYnV0ZXMpKTsKLSAgICAgICAgfTsKLSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJz
ZUpTWEVtcHR5RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVKU1hDaGlsZE5vZGUoKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUpT
WEVtcHR5RXhwcmVzc2lvbigpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0
ZUpTWENoaWxkTm9kZSgpOwogICAgICAgICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMoKTsKICAg
ICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5pbmRleCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKICAg
ICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7
CiAgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIuY29sdW1uID0gdGhpcy5zY2FubmVyLmluZGV4
IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWEVtcHR5RXhwcmVzc2lvbigpKTsKLSAgICAgICAgfTsK
LSAgICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEV4cHJlc3Npb25Db250YWluZXIg
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9k
ZSgpOworICAgICAgICB9CisgICAgICAgIHBhcnNlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcigpIHsK
KyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKICAgICAgICAg
ICAgIHRoaXMuZXhwZWN0SlNYKCd7Jyk7Ci0gICAgICAgICAgICB2YXIgZXhwcmVzc2lvbjsKKyAg
ICAgICAgICAgIGxldCBleHByZXNzaW9uOwogICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hKU1go
J30nKSkgewogICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSB0aGlzLnBhcnNlSlNYRW1wdHlF
eHByZXNzaW9uKCk7CiAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJ30nKTsKQEAgLTg2
NywxOSArODUxLDE5IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3
ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgdGhpcy5yZWVudGVySlNYKCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNY
Tm9kZS5KU1hFeHByZXNzaW9uQ29udGFpbmVyKGV4cHJlc3Npb24pKTsKLSAgICAgICAgfTsKLSAg
ICAgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWENoaWxkcmVuID0gZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gW107CisgICAgICAgIH0KKyAgICAgICAgcGFy
c2VKU1hDaGlsZHJlbigpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gW107CiAgICAg
ICAgICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2YoKSkgewotICAgICAgICAgICAgICAgIHZh
ciBub2RlID0gdGhpcy5jcmVhdGVKU1hDaGlsZE5vZGUoKTsKLSAgICAgICAgICAgICAgICB2YXIg
dG9rZW4gPSB0aGlzLm5leHRKU1hUZXh0KCk7CisgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9
IHRoaXMuY3JlYXRlSlNYQ2hpbGROb2RlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgdG9rZW4g
PSB0aGlzLm5leHRKU1hUZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnN0YXJ0IDwg
dG9rZW4uZW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByYXcgPSB0aGlzLmdldFRva2Vu
UmF3KHRva2VuKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hUZXh0KHRva2VuLnZhbHVlLCByYXcpKTsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9k
ZS5KU1hUZXh0KHRva2VuLnZhbHVlLCByYXcpKTsKICAgICAgICAgICAgICAgICAgICAgY2hpbGRy
ZW4ucHVzaChjaGlsZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICh0
aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleF0gPT09ICd7JykgewotICAgICAg
ICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5wYXJzZUpTWEV4cHJlc3Npb25Db250
YWluZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5wYXJz
ZUpTWEV4cHJlc3Npb25Db250YWluZXIoKTsKICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4u
cHVzaChjb250YWluZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNl
IHsKQEAgLTg4NywzMyArODcxLDMzIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxl
cykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuOwotICAgICAgICB9OwotICAgICAgICBKU1hQ
YXJzZXIucHJvdG90eXBlLnBhcnNlQ29tcGxleEpTWEVsZW1lbnQgPSBmdW5jdGlvbiAoZWwpIHsK
LSAgICAgICAgICAgIHZhciBzdGFjayA9IFtdOworICAgICAgICB9CisgICAgICAgIHBhcnNlQ29t
cGxleEpTWEVsZW1lbnQoZWwpIHsKKyAgICAgICAgICAgIGNvbnN0IHN0YWNrID0gW107CiAgICAg
ICAgICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2YoKSkgewogICAgICAgICAgICAgICAgIGVs
LmNoaWxkcmVuID0gZWwuY2hpbGRyZW4uY29uY2F0KHRoaXMucGFyc2VKU1hDaGlsZHJlbigpKTsK
LSAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYQ2hpbGROb2RlKCk7Ci0g
ICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLnBhcnNlSlNYQm91bmRhcnlFbGVtZW50
KCk7CisgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlSlNYQ2hpbGROb2Rl
KCk7CisgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGFyc2VKU1hCb3VuZGFy
eUVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBqc3hfc3lu
dGF4XzEuSlNYU3ludGF4LkpTWE9wZW5pbmdFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBvcGVuaW5nID0gZWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3Blbmlu
ZyA9IGVsZW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVuaW5nLnNlbGZDbG9zaW5n
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBKU1hOb2RlLkpTWEVsZW1lbnQob3BlbmluZywgW10sIG51bGwpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNY
Tm9kZS5KU1hFbGVtZW50KG9wZW5pbmcsIFtdLCBudWxsKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBlbC5jaGlsZHJlbi5wdXNoKGNoaWxkKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1
c2goZWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWwgPSB7IG5vZGU6IG5vZGUsIG9wZW5p
bmc6IG9wZW5pbmcsIGNsb3Npbmc6IG51bGwsIGNoaWxkcmVuOiBbXSB9OworICAgICAgICAgICAg
ICAgICAgICAgICAgZWwgPSB7IG5vZGUsIG9wZW5pbmcsIGNsb3Npbmc6IG51bGwsIGNoaWxkcmVu
OiBbXSB9OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNY
Q2xvc2luZ0VsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgZWwuY2xvc2luZyA9IGVsZW1l
bnQ7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBvcGVuXzEgPSBnZXRRdWFsaWZpZWRFbGVtZW50
TmFtZShlbC5vcGVuaW5nLm5hbWUpOwotICAgICAgICAgICAgICAgICAgICB2YXIgY2xvc2VfMSA9
IGdldFF1YWxpZmllZEVsZW1lbnROYW1lKGVsLmNsb3NpbmcubmFtZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChvcGVuXzEgIT09IGNsb3NlXzEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMudG9sZXJhdGVFcnJvcignRXhwZWN0ZWQgY29ycmVzcG9uZGluZyBKU1ggY2xvc2luZyB0
YWcgZm9yICUwJywgb3Blbl8xKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BlbiA9IGdl
dFF1YWxpZmllZEVsZW1lbnROYW1lKGVsLm9wZW5pbmcubmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNsb3NlID0gZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUoZWwuY2xvc2luZy5uYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9wZW4gIT09IGNsb3NlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IoJ0V4cGVjdGVkIGNvcnJlc3BvbmRpbmcg
SlNYIGNsb3NpbmcgdGFnIGZvciAlMCcsIG9wZW4pOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmZpbmFsaXplKGVsLm5vZGUsIG5ldyBKU1hOb2Rl
LkpTWEVsZW1lbnQoZWwub3BlbmluZywgZWwuY2hpbGRyZW4sIGVsLmNsb3NpbmcpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5maW5hbGl6ZShlbC5ub2RlLCBu
ZXcgSlNYTm9kZS5KU1hFbGVtZW50KGVsLm9wZW5pbmcsIGVsLmNoaWxkcmVuLCBlbC5jbG9zaW5n
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFd
OwogICAgICAgICAgICAgICAgICAgICAgICAgZWwuY2hpbGRyZW4ucHVzaChjaGlsZCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKQEAgLTkyNCwzNCArOTA4LDMzIEBAIHJl
dHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGVsOwot
ICAgICAgICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYRWxlbWVudCA9
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2Rl
KCk7Ci0gICAgICAgICAgICB2YXIgb3BlbmluZyA9IHRoaXMucGFyc2VKU1hPcGVuaW5nRWxlbWVu
dCgpOwotICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gW107Ci0gICAgICAgICAgICB2YXIgY2xv
c2luZyA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VKU1hFbGVtZW50KCkgeworICAg
ICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpOworICAgICAgICAgICAg
Y29uc3Qgb3BlbmluZyA9IHRoaXMucGFyc2VKU1hPcGVuaW5nRWxlbWVudCgpOworICAgICAgICAg
ICAgbGV0IGNoaWxkcmVuID0gW107CisgICAgICAgICAgICBsZXQgY2xvc2luZyA9IG51bGw7CiAg
ICAgICAgICAgICBpZiAoIW9wZW5pbmcuc2VsZkNsb3NpbmcpIHsKLSAgICAgICAgICAgICAgICB2
YXIgZWwgPSB0aGlzLnBhcnNlQ29tcGxleEpTWEVsZW1lbnQoeyBub2RlOiBub2RlLCBvcGVuaW5n
OiBvcGVuaW5nLCBjbG9zaW5nOiBjbG9zaW5nLCBjaGlsZHJlbjogY2hpbGRyZW4gfSk7CisgICAg
ICAgICAgICAgICAgY29uc3QgZWwgPSB0aGlzLnBhcnNlQ29tcGxleEpTWEVsZW1lbnQoeyBub2Rl
LCBvcGVuaW5nLCBjbG9zaW5nLCBjaGlsZHJlbiB9KTsKICAgICAgICAgICAgICAgICBjaGlsZHJl
biA9IGVsLmNoaWxkcmVuOwogICAgICAgICAgICAgICAgIGNsb3NpbmcgPSBlbC5jbG9zaW5nOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IEpTWE5vZGUuSlNYRWxlbWVudChvcGVuaW5nLCBjaGlsZHJlbiwgY2xvc2luZykpOwotICAgICAg
ICB9OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYUm9vdCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUpTWFJvb3QoKSB7CiAgICAgICAgICAgICAv
LyBQb3AgdGhlIG9wZW5pbmcgJzwnIGFkZGVkIGZyb20gdGhlIGxvb2thaGVhZC4KICAgICAgICAg
ICAgIGlmICh0aGlzLmNvbmZpZy50b2tlbnMpIHsKICAgICAgICAgICAgICAgICB0aGlzLnRva2Vu
cy5wb3AoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMuc3RhcnRKU1goKTsKLSAg
ICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5wYXJzZUpTWEVsZW1lbnQoKTsKKyAgICAgICAg
ICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBhcnNlSlNYRWxlbWVudCgpOwogICAgICAgICAgICAg
dGhpcy5maW5pc2hKU1goKTsKICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwotICAgICAgICB9
OwotICAgICAgICBKU1hQYXJzZXIucHJvdG90eXBlLmlzU3RhcnRPZkV4cHJlc3Npb24gPSBmdW5j
dGlvbiAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5pc1N0YXJ0T2ZF
eHByZXNzaW9uLmNhbGwodGhpcykgfHwgdGhpcy5tYXRjaCgnPCcpOwotICAgICAgICB9OwotICAg
ICAgICByZXR1cm4gSlNYUGFyc2VyOwotICAgIH0ocGFyc2VyXzEuUGFyc2VyKSk7CisgICAgICAg
IH0KKyAgICAgICAgaXNTdGFydE9mRXhwcmVzc2lvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBz
dXBlci5pc1N0YXJ0T2ZFeHByZXNzaW9uKCkgfHwgdGhpcy5tYXRjaCgnPCcpOworICAgICAgICB9
CisgICAgfQogICAgIGV4cG9ydHMuSlNYUGFyc2VyID0gSlNYUGFyc2VyOwogCiAKQEAgLTk2Miw3
ICs5NDUsNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFj
a0Jvb3RzdHJhcAogICAgICJ1c2Ugc3RyaWN0IjsKICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
ZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwogICAgIC8vIFNlZSBhbHNv
IHRvb2xzL2dlbmVyYXRlLXVuaWNvZGUtcmVnZXguanMuCi0gICAgdmFyIFJlZ2V4ID0geworICAg
IGNvbnN0IFJlZ2V4ID0gewogICAgICAgICAvLyBVbmljb2RlIHYxMi4xLjAgTm9uQXNjaWlJZGVu
dGlmaWVyU3RhcnQ6CiAgICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OiAvW1x4QUFceEI1
XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAy
RTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM3
Rlx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNG
Ny1cdTA0ODFcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MC1cdTA1ODhcdTA1
RDAtXHUwNUVBXHUwNUVGLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUw
NkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcx
MFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQVx1MDdGNFx1MDdG
NVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwODYw
LVx1MDg2QVx1MDhBMC1cdTA4QjRcdTA4QjYtXHUwOEJEXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1
MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTgwXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5
My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlE
Q1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTA5RkNcdTBBMDUtXHUwQTBBXHUwQTBG
XHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZc
dTBBMzhcdTBBMzlcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERc
dTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUt
XHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQUY5XHUwQjA1LVx1MEIwQ1x1MEIwRlx1
MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1
MEIzRFx1MEI1Q1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUw
QjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBC
QTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMFx1MEMwNS1cdTBDMENcdTBD
MEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzlcdTBDM0RcdTBDNTgtXHUwQzVBXHUw
QzYwXHUwQzYxXHUwQzgwXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUw
Q0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBD
RjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMFx1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBE
NTQtXHUwRDU2XHUwRDVGLVx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1
MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1
MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFcdTBFODJcdTBFODRcdTBFODYtXHUwRThBXHUwRThDLVx1
MEVBM1x1MEVBNVx1MEVBNy1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUw
RUM2XHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1
MEY4Q1x1MTAwMC1cdTEwMkFcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1
MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXHUxMDhFXHUxMEEwLVx1MTBDNVx1
MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1MC1c
dTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAt
XHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4
LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEz
OEZcdTEzQTAtXHUxM0Y1XHUxM0Y4LVx1MTNGRFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUx
NjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcwQ1x1MTcwRS1c
dTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcw
XHUxNzgwLVx1MTdCM1x1MTdEN1x1MTdEQ1x1MTgyMC1cdTE4NzhcdTE4ODAtXHUxOEE4XHUxOEFB
XHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4
MC1cdTE5QUJcdTE5QjAtXHUxOUM5XHUxQTAwLVx1MUExNlx1MUEyMC1cdTFBNTRcdTFBQTdcdTFC
MDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZcdTFCQkEtXHUx
QkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQzgwLVx1MUM4OFx1
MUM5MC1cdTFDQkFcdTFDQkQtXHUxQ0JGXHUxQ0U5LVx1MUNFQ1x1MUNFRS1cdTFDRjNcdTFDRjVc
dTFDRjZcdTFDRkFcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAt
XHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYt
XHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2
LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFG
RjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEw
QS1cdTIxMTNcdTIxMTVcdTIxMTgtXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEz
OVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJD
MkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNcdTJE
MDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJE
QTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1
MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MzAwNS1cdTMwMDdc
dTMwMjEtXHUzMDI5XHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0NcdTMwNDEtXHUzMDk2XHUzMDlC
LVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRlx1MzEzMS1cdTMx
OEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkVGXHVB
MDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1
QTYyQlx1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjlEXHVBNkEwLVx1QTZFRlx1QTcxNy1cdUE3MUZc
dUE3MjItXHVBNzg4XHVBNzhCLVx1QTdCRlx1QTdDMi1cdUE3QzZcdUE3RjctXHVBODAxXHVBODAz
LVx1QTgwNVx1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4
QjNcdUE4RjItXHVBOEY3XHVBOEZCXHVBOEZEXHVBOEZFXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5
NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QTlFMC1cdUE5RTRcdUE5RTYtXHVB
OUVGXHVBOUZBLVx1QTlGRVx1QUEwMC1cdUFBMjhcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1
QUE2MC1cdUFBNzZcdUFBN0FcdUFBN0UtXHVBQUFGXHVBQUIxXHVBQUI1XHVBQUI2XHVBQUI5LVx1
QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNFx1
QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgt
XHVBQjJFXHVBQjMwLVx1QUI1QVx1QUI1Qy1cdUFCNjdcdUFCNzAtXHVBQkUyXHVBQzAwLVx1RDdB
M1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZC
MDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XHVG
QjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZC
RDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1
RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVc
dUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXXxcdUQ4
MDBbXHVEQzAwLVx1REMwQlx1REMwRC1cdURDMjZcdURDMjgtXHVEQzNBXHVEQzNDXHVEQzNEXHVE
QzNGLVx1REM0RFx1REM1MC1cdURDNURcdURDODAtXHVEQ0ZBXHVERDQwLVx1REQ3NFx1REU4MC1c
dURFOUNcdURFQTAtXHVERUQwXHVERjAwLVx1REYxRlx1REYyRC1cdURGNEFcdURGNTAtXHVERjc1
XHVERjgwLVx1REY5RFx1REZBMC1cdURGQzNcdURGQzgtXHVERkNGXHVERkQxLVx1REZENV18XHVE
ODAxW1x1REMwMC1cdURDOURcdURDQjAtXHVEQ0QzXHVEQ0Q4LVx1RENGQlx1REQwMC1cdUREMjdc
dUREMzAtXHVERDYzXHVERTAwLVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAtXHVERjY3XXxcdUQ4
MDJbXHVEQzAwLVx1REMwNVx1REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURDMzhcdURDM0NcdURD
M0YtXHVEQzU1XHVEQzYwLVx1REM3Nlx1REM4MC1cdURDOUVcdURDRTAtXHVEQ0YyXHVEQ0Y0XHVE
Q0Y1XHVERDAwLVx1REQxNVx1REQyMC1cdUREMzlcdUREODAtXHVEREI3XHVEREJFXHVEREJGXHVE
RTAwXHVERTEwLVx1REUxM1x1REUxNS1cdURFMTdcdURFMTktXHVERTM1XHVERTYwLVx1REU3Q1x1
REU4MC1cdURFOUNcdURFQzAtXHVERUM3XHVERUM5LVx1REVFNFx1REYwMC1cdURGMzVcdURGNDAt
XHVERjU1XHVERjYwLVx1REY3Mlx1REY4MC1cdURGOTFdfFx1RDgwM1tcdURDMDAtXHVEQzQ4XHVE
QzgwLVx1RENCMlx1RENDMC1cdURDRjJcdUREMDAtXHVERDIzXHVERjAwLVx1REYxQ1x1REYyN1x1
REYzMC1cdURGNDVcdURGRTAtXHVERkY2XXxcdUQ4MDRbXHVEQzAzLVx1REMzN1x1REM4My1cdURD
QUZcdURDRDAtXHVEQ0U4XHVERDAzLVx1REQyNlx1REQ0NFx1REQ1MC1cdURENzJcdURENzZcdURE
ODMtXHVEREIyXHVEREMxLVx1RERDNFx1REREQVx1REREQ1x1REUwMC1cdURFMTFcdURFMTMtXHVE
RTJCXHVERTgwLVx1REU4Nlx1REU4OFx1REU4QS1cdURFOERcdURFOEYtXHVERTlEXHVERTlGLVx1
REVBOFx1REVCMC1cdURFREVcdURGMDUtXHVERjBDXHVERjBGXHVERjEwXHVERjEzLVx1REYyOFx1
REYyQS1cdURGMzBcdURGMzJcdURGMzNcdURGMzUtXHVERjM5XHVERjNEXHVERjUwXHVERjVELVx1
REY2MV18XHVEODA1W1x1REMwMC1cdURDMzRcdURDNDctXHVEQzRBXHVEQzVGXHVEQzgwLVx1RENB
Rlx1RENDNFx1RENDNVx1RENDN1x1REQ4MC1cdUREQUVcdURERDgtXHVERERCXHVERTAwLVx1REUy
Rlx1REU0NFx1REU4MC1cdURFQUFcdURFQjhcdURGMDAtXHVERjFBXXxcdUQ4MDZbXHVEQzAwLVx1
REMyQlx1RENBMC1cdURDREZcdURDRkZcdUREQTAtXHVEREE3XHVEREFBLVx1REREMFx1RERFMVx1
RERFM1x1REUwMFx1REUwQi1cdURFMzJcdURFM0FcdURFNTBcdURFNUMtXHVERTg5XHVERTlEXHVE
RUMwLVx1REVGOF18XHVEODA3W1x1REMwMC1cdURDMDhcdURDMEEtXHVEQzJFXHVEQzQwXHVEQzcy
LVx1REM4Rlx1REQwMC1cdUREMDZcdUREMDhcdUREMDlcdUREMEItXHVERDMwXHVERDQ2XHVERDYw
LVx1REQ2NVx1REQ2N1x1REQ2OFx1REQ2QS1cdUREODlcdUREOThcdURFRTAtXHVERUYyXXxcdUQ4
MDhbXHVEQzAwLVx1REY5OV18XHVEODA5W1x1REMwMC1cdURDNkVcdURDODAtXHVERDQzXXxbXHVE
ODBDXHVEODFDLVx1RDgyMFx1RDg0MC1cdUQ4NjhcdUQ4NkEtXHVEODZDXHVEODZGLVx1RDg3Mlx1
RDg3NC1cdUQ4NzldW1x1REMwMC1cdURGRkZdfFx1RDgwRFtcdURDMDAtXHVEQzJFXXxcdUQ4MTFb
XHVEQzAwLVx1REU0Nl18XHVEODFBW1x1REMwMC1cdURFMzhcdURFNDAtXHVERTVFXHVERUQwLVx1
REVFRFx1REYwMC1cdURGMkZcdURGNDAtXHVERjQzXHVERjYzLVx1REY3N1x1REY3RC1cdURGOEZd
fFx1RDgxQltcdURFNDAtXHVERTdGXHVERjAwLVx1REY0QVx1REY1MFx1REY5My1cdURGOUZcdURG
RTBcdURGRTFcdURGRTNdfFx1RDgyMVtcdURDMDAtXHVERkY3XXxcdUQ4MjJbXHVEQzAwLVx1REVG
Ml18XHVEODJDW1x1REMwMC1cdUREMUVcdURENTAtXHVERDUyXHVERDY0LVx1REQ2N1x1REQ3MC1c
dURFRkJdfFx1RDgyRltcdURDMDAtXHVEQzZBXHVEQzcwLVx1REM3Q1x1REM4MC1cdURDODhcdURD
OTAtXHVEQzk5XXxcdUQ4MzVbXHVEQzAwLVx1REM1NFx1REM1Ni1cdURDOUNcdURDOUVcdURDOUZc
dURDQTJcdURDQTVcdURDQTZcdURDQTktXHVEQ0FDXHVEQ0FFLVx1RENCOVx1RENCQlx1RENCRC1c
dURDQzNcdURDQzUtXHVERDA1XHVERDA3LVx1REQwQVx1REQwRC1cdUREMTRcdUREMTYtXHVERDFD
XHVERDFFLVx1REQzOVx1REQzQi1cdUREM0VcdURENDAtXHVERDQ0XHVERDQ2XHVERDRBLVx1REQ1
MFx1REQ1Mi1cdURFQTVcdURFQTgtXHVERUMwXHVERUMyLVx1REVEQVx1REVEQy1cdURFRkFcdURF
RkMtXHVERjE0XHVERjE2LVx1REYzNFx1REYzNi1cdURGNEVcdURGNTAtXHVERjZFXHVERjcwLVx1
REY4OFx1REY4QS1cdURGQThcdURGQUEtXHVERkMyXHVERkM0LVx1REZDQl18XHVEODM4W1x1REQw
MC1cdUREMkNcdUREMzctXHVERDNEXHVERDRFXHVERUMwLVx1REVFQl18XHVEODNBW1x1REMwMC1c
dURDQzRcdUREMDAtXHVERDQzXHVERDRCXXxcdUQ4M0JbXHVERTAwLVx1REUwM1x1REUwNS1cdURF
MUZcdURFMjFcdURFMjJcdURFMjRcdURFMjdcdURFMjktXHVERTMyXHVERTM0LVx1REUzN1x1REUz
OVx1REUzQlx1REU0Mlx1REU0N1x1REU0OVx1REU0Qlx1REU0RC1cdURFNEZcdURFNTFcdURFNTJc
dURFNTRcdURFNTdcdURFNTlcdURFNUJcdURFNURcdURFNUZcdURFNjFcdURFNjJcdURFNjRcdURF
NjctXHVERTZBXHVERTZDLVx1REU3Mlx1REU3NC1cdURFNzdcdURFNzktXHVERTdDXHVERTdFXHVE
RTgwLVx1REU4OVx1REU4Qi1cdURFOUJcdURFQTEtXHVERUEzXHVERUE1LVx1REVBOVx1REVBQi1c
dURFQkJdfFx1RDg2OVtcdURDMDAtXHVERUQ2XHVERjAwLVx1REZGRl18XHVEODZEW1x1REMwMC1c
dURGMzRcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMxRFx1REMyMC1cdURGRkZdfFx1
RDg3M1tcdURDMDAtXHVERUExXHVERUIwLVx1REZGRl18XHVEODdBW1x1REMwMC1cdURGRTBdfFx1
RDg3RVtcdURDMDAtXHVERTFEXS8sCiAgICAgICAgIC8vIFVuaWNvZGUgdjEyLjEuMCBOb25Bc2Np
aUlkZW50aWZpZXJQYXJ0OgpAQCAtOTcwLDI5ICs5NTMsMjkgQEAgcmV0dXJuIC8qKioqKiovIChm
dW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICB9OwogICAgIGV4cG9y
dHMuQ2hhcmFjdGVyID0gewogICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZTpuby1iaXR3aXNlICov
Ci0gICAgICAgIGZyb21Db2RlUG9pbnQ6IGZ1bmN0aW9uIChjcCkgeworICAgICAgICBmcm9tQ29k
ZVBvaW50KGNwKSB7CiAgICAgICAgICAgICByZXR1cm4gKGNwIDwgMHgxMDAwMCkgPyBTdHJpbmcu
ZnJvbUNoYXJDb2RlKGNwKSA6CiAgICAgICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgw
eEQ4MDAgKyAoKGNwIC0gMHgxMDAwMCkgPj4gMTApKSArCiAgICAgICAgICAgICAgICAgICAgIFN0
cmluZy5mcm9tQ2hhckNvZGUoMHhEQzAwICsgKChjcCAtIDB4MTAwMDApICYgMTAyMykpOwogICAg
ICAgICB9LAogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy13
aGl0ZS1zcGFjZQotICAgICAgICBpc1doaXRlU3BhY2U6IGZ1bmN0aW9uIChjcCkgeworICAgICAg
ICBpc1doaXRlU3BhY2UoY3ApIHsKICAgICAgICAgICAgIHJldHVybiAoY3AgPT09IDB4MjApIHx8
IChjcCA9PT0gMHgwOSkgfHwgKGNwID09PSAweDBCKSB8fCAoY3AgPT09IDB4MEMpIHx8IChjcCA9
PT0gMHhBMCkgfHwKICAgICAgICAgICAgICAgICAoY3AgPj0gMHgxNjgwICYmIFsweDE2ODAsIDB4
MjAwMCwgMHgyMDAxLCAweDIwMDIsIDB4MjAwMywgMHgyMDA0LCAweDIwMDUsIDB4MjAwNiwgMHgy
MDA3LCAweDIwMDgsIDB4MjAwOSwgMHgyMDBBLCAweDIwMkYsIDB4MjA1RiwgMHgzMDAwLCAweEZF
RkZdLmluZGV4T2YoY3ApID49IDApOwogICAgICAgICB9LAogICAgICAgICAvLyBodHRwczovL3Rj
MzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1saW5lLXRlcm1pbmF0b3JzCi0gICAgICAgIGlzTGlu
ZVRlcm1pbmF0b3I6IGZ1bmN0aW9uIChjcCkgeworICAgICAgICBpc0xpbmVUZXJtaW5hdG9yKGNw
KSB7CiAgICAgICAgICAgICByZXR1cm4gKGNwID09PSAweDBBKSB8fCAoY3AgPT09IDB4MEQpIHx8
IChjcCA9PT0gMHgyMDI4KSB8fCAoY3AgPT09IDB4MjAyOSk7CiAgICAgICAgIH0sCiAgICAgICAg
IC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW5hbWVzLWFuZC1rZXl3b3Jk
cwotICAgICAgICBpc0lkZW50aWZpZXJTdGFydDogZnVuY3Rpb24gKGNwKSB7CisgICAgICAgIGlz
SWRlbnRpZmllclN0YXJ0KGNwKSB7CiAgICAgICAgICAgICByZXR1cm4gKGNwID09PSAweDI0KSB8
fCAoY3AgPT09IDB4NUYpIHx8IC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpCiAgICAg
ICAgICAgICAgICAgKGNwID49IDB4NDEgJiYgY3AgPD0gMHg1QSkgfHwgLy8gQS4uWgogICAgICAg
ICAgICAgICAgIChjcCA+PSAweDYxICYmIGNwIDw9IDB4N0EpIHx8IC8vIGEuLnoKICAgICAgICAg
ICAgICAgICAoY3AgPT09IDB4NUMpIHx8IC8vIFwgKGJhY2tzbGFzaCkKICAgICAgICAgICAgICAg
ICAoKGNwID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoZXhw
b3J0cy5DaGFyYWN0ZXIuZnJvbUNvZGVQb2ludChjcCkpKTsKICAgICAgICAgfSwKLSAgICAgICAg
aXNJZGVudGlmaWVyUGFydDogZnVuY3Rpb24gKGNwKSB7CisgICAgICAgIGlzSWRlbnRpZmllclBh
cnQoY3ApIHsKICAgICAgICAgICAgIHJldHVybiAoY3AgPT09IDB4MjQpIHx8IChjcCA9PT0gMHg1
RikgfHwgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSkKICAgICAgICAgICAgICAgICAo
Y3AgPj0gMHg0MSAmJiBjcCA8PSAweDVBKSB8fCAvLyBBLi5aCiAgICAgICAgICAgICAgICAgKGNw
ID49IDB4NjEgJiYgY3AgPD0gMHg3QSkgfHwgLy8gYS4uegpAQCAtMTAwMSwxNSArOTg0LDE1IEBA
IHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFw
CiAgICAgICAgICAgICAgICAgKChjcCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZp
ZXJQYXJ0LnRlc3QoZXhwb3J0cy5DaGFyYWN0ZXIuZnJvbUNvZGVQb2ludChjcCkpKTsKICAgICAg
ICAgfSwKICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbGl0
ZXJhbHMtbnVtZXJpYy1saXRlcmFscwotICAgICAgICBpc0RlY2ltYWxEaWdpdDogZnVuY3Rpb24g
KGNwKSB7CisgICAgICAgIGlzRGVjaW1hbERpZ2l0KGNwKSB7CiAgICAgICAgICAgICByZXR1cm4g
KGNwID49IDB4MzAgJiYgY3AgPD0gMHgzOSk7IC8vIDAuLjkKICAgICAgICAgfSwKLSAgICAgICAg
aXNIZXhEaWdpdDogZnVuY3Rpb24gKGNwKSB7CisgICAgICAgIGlzSGV4RGlnaXQoY3ApIHsKICAg
ICAgICAgICAgIHJldHVybiAoY3AgPj0gMHgzMCAmJiBjcCA8PSAweDM5KSB8fCAvLyAwLi45CiAg
ICAgICAgICAgICAgICAgKGNwID49IDB4NDEgJiYgY3AgPD0gMHg0NikgfHwgLy8gQS4uRgogICAg
ICAgICAgICAgICAgIChjcCA+PSAweDYxICYmIGNwIDw9IDB4NjYpOyAvLyBhLi5mCiAgICAgICAg
IH0sCi0gICAgICAgIGlzT2N0YWxEaWdpdDogZnVuY3Rpb24gKGNwKSB7CisgICAgICAgIGlzT2N0
YWxEaWdpdChjcCkgewogICAgICAgICAgICAgcmV0dXJuIChjcCA+PSAweDMwICYmIGNwIDw9IDB4
MzcpOyAvLyAwLi43CiAgICAgICAgIH0KICAgICB9OwpAQCAtMTAyMSwxMDIgKzEwMDQsOTEgQEAg
cmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAK
IAogICAgICJ1c2Ugc3RyaWN0IjsKICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywg
Il9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwotICAgIHZhciBqc3hfc3ludGF4XzEgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDYpOworICAgIGNvbnN0IGpzeF9zeW50YXhfMSA9IF9fd2VicGFj
a19yZXF1aXJlX18oNik7CiAgICAgLyogdHNsaW50OmRpc2FibGU6bWF4LWNsYXNzZXMtcGVyLWZp
bGUgKi8KLSAgICB2YXIgSlNYQ2xvc2luZ0VsZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEpTWENsb3NpbmdFbGVtZW50KG5hbWUpIHsKKyAgICBj
bGFzcyBKU1hDbG9zaW5nRWxlbWVudCB7CisgICAgICAgIGNvbnN0cnVjdG9yKG5hbWUpIHsKICAg
ICAgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYQ2xvc2luZ0Vs
ZW1lbnQ7CiAgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBKU1hDbG9zaW5nRWxlbWVudDsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRz
LkpTWENsb3NpbmdFbGVtZW50ID0gSlNYQ2xvc2luZ0VsZW1lbnQ7Ci0gICAgdmFyIEpTWEVsZW1l
bnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEpTWEVs
ZW1lbnQob3BlbmluZ0VsZW1lbnQsIGNoaWxkcmVuLCBjbG9zaW5nRWxlbWVudCkgeworICAgIGNs
YXNzIEpTWEVsZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3RvcihvcGVuaW5nRWxlbWVudCwgY2hp
bGRyZW4sIGNsb3NpbmdFbGVtZW50KSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3lu
dGF4XzEuSlNYU3ludGF4LkpTWEVsZW1lbnQ7CiAgICAgICAgICAgICB0aGlzLm9wZW5pbmdFbGVt
ZW50ID0gb3BlbmluZ0VsZW1lbnQ7CiAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRy
ZW47CiAgICAgICAgICAgICB0aGlzLmNsb3NpbmdFbGVtZW50ID0gY2xvc2luZ0VsZW1lbnQ7CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTWEVsZW1lbnQ7Ci0gICAgfSgpKTsKKyAgICB9CiAg
ICAgZXhwb3J0cy5KU1hFbGVtZW50ID0gSlNYRWxlbWVudDsKLSAgICB2YXIgSlNYRW1wdHlFeHBy
ZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBK
U1hFbXB0eUV4cHJlc3Npb24oKSB7CisgICAgY2xhc3MgSlNYRW1wdHlFeHByZXNzaW9uIHsKKyAg
ICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4
XzEuSlNYU3ludGF4LkpTWEVtcHR5RXhwcmVzc2lvbjsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gSlNYRW1wdHlFeHByZXNzaW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuSlNY
RW1wdHlFeHByZXNzaW9uID0gSlNYRW1wdHlFeHByZXNzaW9uOwotICAgIHZhciBKU1hFeHByZXNz
aW9uQ29udGFpbmVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5j
dGlvbiBKU1hFeHByZXNzaW9uQ29udGFpbmVyKGV4cHJlc3Npb24pIHsKKyAgICBjbGFzcyBKU1hF
eHByZXNzaW9uQ29udGFpbmVyIHsKKyAgICAgICAgY29uc3RydWN0b3IoZXhwcmVzc2lvbikgewog
ICAgICAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hFeHByZXNz
aW9uQ29udGFpbmVyOwogICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjsKLSAgICB9
KCkpOworICAgIH0KICAgICBleHBvcnRzLkpTWEV4cHJlc3Npb25Db250YWluZXIgPSBKU1hFeHBy
ZXNzaW9uQ29udGFpbmVyOwotICAgIHZhciBKU1hJZGVudGlmaWVyID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBKU1hJZGVudGlmaWVyKG5hbWUpIHsKKyAg
ICBjbGFzcyBKU1hJZGVudGlmaWVyIHsKKyAgICAgICAgY29uc3RydWN0b3IobmFtZSkgewogICAg
ICAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hJZGVudGlmaWVy
OwogICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gSlNYSWRlbnRpZmllcjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkpTWElkZW50
aWZpZXIgPSBKU1hJZGVudGlmaWVyOwotICAgIHZhciBKU1hNZW1iZXJFeHByZXNzaW9uID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBKU1hNZW1iZXJFeHBy
ZXNzaW9uKG9iamVjdCwgcHJvcGVydHkpIHsKKyAgICBjbGFzcyBKU1hNZW1iZXJFeHByZXNzaW9u
IHsKKyAgICAgICAgY29uc3RydWN0b3Iob2JqZWN0LCBwcm9wZXJ0eSkgewogICAgICAgICAgICAg
dGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hNZW1iZXJFeHByZXNzaW9uOwog
ICAgICAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7CiAgICAgICAgICAgICB0aGlzLnByb3Bl
cnR5ID0gcHJvcGVydHk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTWE1lbWJlckV4cHJl
c3Npb247Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5KU1hNZW1iZXJFeHByZXNzaW9u
ID0gSlNYTWVtYmVyRXhwcmVzc2lvbjsKLSAgICB2YXIgSlNYQXR0cmlidXRlID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBKU1hBdHRyaWJ1dGUobmFtZSwg
dmFsdWUpIHsKKyAgICBjbGFzcyBKU1hBdHRyaWJ1dGUgeworICAgICAgICBjb25zdHJ1Y3Rvcihu
YW1lLCB2YWx1ZSkgewogICAgICAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5
bnRheC5KU1hBdHRyaWJ1dGU7CiAgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAg
ICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBKU1hB
dHRyaWJ1dGU7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5KU1hBdHRyaWJ1dGUgPSBK
U1hBdHRyaWJ1dGU7Ci0gICAgdmFyIEpTWE5hbWVzcGFjZWROYW1lID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBKU1hOYW1lc3BhY2VkTmFtZShuYW1lc3Bh
Y2UsIG5hbWUpIHsKKyAgICBjbGFzcyBKU1hOYW1lc3BhY2VkTmFtZSB7CisgICAgICAgIGNvbnN0
cnVjdG9yKG5hbWVzcGFjZSwgbmFtZSkgewogICAgICAgICAgICAgdGhpcy50eXBlID0ganN4X3N5
bnRheF8xLkpTWFN5bnRheC5KU1hOYW1lc3BhY2VkTmFtZTsKICAgICAgICAgICAgIHRoaXMubmFt
ZXNwYWNlID0gbmFtZXNwYWNlOwogICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gSlNYTmFtZXNwYWNlZE5hbWU7Ci0gICAgfSgpKTsKKyAgICB9
CiAgICAgZXhwb3J0cy5KU1hOYW1lc3BhY2VkTmFtZSA9IEpTWE5hbWVzcGFjZWROYW1lOwotICAg
IHZhciBKU1hPcGVuaW5nRWxlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgZnVuY3Rpb24gSlNYT3BlbmluZ0VsZW1lbnQobmFtZSwgc2VsZkNsb3NpbmcsIGF0dHJp
YnV0ZXMpIHsKKyAgICBjbGFzcyBKU1hPcGVuaW5nRWxlbWVudCB7CisgICAgICAgIGNvbnN0cnVj
dG9yKG5hbWUsIHNlbGZDbG9zaW5nLCBhdHRyaWJ1dGVzKSB7CiAgICAgICAgICAgICB0aGlzLnR5
cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWE9wZW5pbmdFbGVtZW50OwogICAgICAgICAg
ICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBzZWxm
Q2xvc2luZzsKICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIEpTWE9wZW5pbmdFbGVtZW50OwotICAgIH0oKSk7CisgICAg
fQogICAgIGV4cG9ydHMuSlNYT3BlbmluZ0VsZW1lbnQgPSBKU1hPcGVuaW5nRWxlbWVudDsKLSAg
ICB2YXIgSlNYU3ByZWFkQXR0cmlidXRlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewot
ICAgICAgICBmdW5jdGlvbiBKU1hTcHJlYWRBdHRyaWJ1dGUoYXJndW1lbnQpIHsKKyAgICBjbGFz
cyBKU1hTcHJlYWRBdHRyaWJ1dGUgeworICAgICAgICBjb25zdHJ1Y3Rvcihhcmd1bWVudCkgewog
ICAgICAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hTcHJlYWRB
dHRyaWJ1dGU7CiAgICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIEpTWFNwcmVhZEF0dHJpYnV0ZTsKLSAgICB9KCkpOworICAgIH0K
ICAgICBleHBvcnRzLkpTWFNwcmVhZEF0dHJpYnV0ZSA9IEpTWFNwcmVhZEF0dHJpYnV0ZTsKLSAg
ICB2YXIgSlNYVGV4dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVu
Y3Rpb24gSlNYVGV4dCh2YWx1ZSwgcmF3KSB7CisgICAgY2xhc3MgSlNYVGV4dCB7CisgICAgICAg
IGNvbnN0cnVjdG9yKHZhbHVlLCByYXcpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IGpzeF9z
eW50YXhfMS5KU1hTeW50YXguSlNYVGV4dDsKICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1
ZTsKICAgICAgICAgICAgIHRoaXMucmF3ID0gcmF3OwogICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBKU1hUZXh0OwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuSlNYVGV4dCA9IEpTWFRl
eHQ7CiAKIApAQCAtMTE0NywyNiArMTExOSwyNCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9u
KG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogCiAgICAgInVzZSBzdHJpY3QiOwogICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRy
dWUgfSk7Ci0gICAgdmFyIHN5bnRheF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTsKKyAgICBj
b25zdCBzeW50YXhfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CiAgICAgLyogdHNsaW50OmRp
c2FibGU6bWF4LWNsYXNzZXMtcGVyLWZpbGUgKi8KLSAgICB2YXIgQXJyYXlFeHByZXNzaW9uID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBBcnJheUV4cHJl
c3Npb24oZWxlbWVudHMpIHsKKyAgICBjbGFzcyBBcnJheUV4cHJlc3Npb24geworICAgICAgICBj
b25zdHJ1Y3RvcihlbGVtZW50cykgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEu
U3ludGF4LkFycmF5RXhwcmVzc2lvbjsKICAgICAgICAgICAgIHRoaXMuZWxlbWVudHMgPSBlbGVt
ZW50czsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gQXJyYXlFeHByZXNzaW9uOwotICAgIH0o
KSk7CisgICAgfQogICAgIGV4cG9ydHMuQXJyYXlFeHByZXNzaW9uID0gQXJyYXlFeHByZXNzaW9u
OwotICAgIHZhciBBcnJheVBhdHRlcm4gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0g
ICAgICAgIGZ1bmN0aW9uIEFycmF5UGF0dGVybihlbGVtZW50cykgeworICAgIGNsYXNzIEFycmF5
UGF0dGVybiB7CisgICAgICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRzKSB7CiAgICAgICAgICAgICB0
aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQXJyYXlQYXR0ZXJuOwogICAgICAgICAgICAgdGhp
cy5lbGVtZW50cyA9IGVsZW1lbnRzOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBBcnJheVBh
dHRlcm47Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5BcnJheVBhdHRlcm4gPSBBcnJh
eVBhdHRlcm47Ci0gICAgdmFyIEFycm93RnVuY3Rpb25FeHByZXNzaW9uID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lv
bihwYXJhbXMsIGJvZHksIGV4cHJlc3Npb24pIHsKKyAgICBjbGFzcyBBcnJvd0Z1bmN0aW9uRXhw
cmVzc2lvbiB7CisgICAgICAgIGNvbnN0cnVjdG9yKHBhcmFtcywgYm9keSwgZXhwcmVzc2lvbikg
ewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkFycm93RnVuY3Rpb25F
eHByZXNzaW9uOwogICAgICAgICAgICAgdGhpcy5pZCA9IG51bGw7CiAgICAgICAgICAgICB0aGlz
LnBhcmFtcyA9IHBhcmFtczsKQEAgLTExNzUsMzAgKzExNDUsMjcgQEAgcmV0dXJuIC8qKioqKiov
IChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIHRo
aXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247CiAgICAgICAgICAgICB0aGlzLmFzeW5jID0gZmFs
c2U7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOwot
ICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gPSBB
cnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjsKLSAgICB2YXIgQXNzaWdubWVudEV4cHJlc3Npb24gPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEFzc2lnbm1lbnRF
eHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkgeworICAgIGNsYXNzIEFzc2lnbm1lbnRF
eHByZXNzaW9uIHsKKyAgICAgICAgY29uc3RydWN0b3Iob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSB7
CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQXNzaWdubWVudEV4cHJl
c3Npb247CiAgICAgICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7CiAgICAgICAgICAg
ICB0aGlzLmxlZnQgPSBsZWZ0OwogICAgICAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0OwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBBc3NpZ25tZW50RXhwcmVzc2lvbjsKLSAgICB9KCkpOwor
ICAgIH0KICAgICBleHBvcnRzLkFzc2lnbm1lbnRFeHByZXNzaW9uID0gQXNzaWdubWVudEV4cHJl
c3Npb247Ci0gICAgdmFyIEFzc2lnbm1lbnRQYXR0ZXJuID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rp
b24gKCkgewotICAgICAgICBmdW5jdGlvbiBBc3NpZ25tZW50UGF0dGVybihsZWZ0LCByaWdodCkg
eworICAgIGNsYXNzIEFzc2lnbm1lbnRQYXR0ZXJuIHsKKyAgICAgICAgY29uc3RydWN0b3IobGVm
dCwgcmlnaHQpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Bc3Np
Z25tZW50UGF0dGVybjsKICAgICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7CiAgICAgICAgICAg
ICB0aGlzLnJpZ2h0ID0gcmlnaHQ7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEFzc2lnbm1l
bnRQYXR0ZXJuOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuQXNzaWdubWVudFBhdHRl
cm4gPSBBc3NpZ25tZW50UGF0dGVybjsKLSAgICB2YXIgQXN5bmNBcnJvd0Z1bmN0aW9uRXhwcmVz
c2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQXN5
bmNBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMsIGJvZHksIGV4cHJlc3Npb24pIHsKKyAg
ICBjbGFzcyBBc3luY0Fycm93RnVuY3Rpb25FeHByZXNzaW9uIHsKKyAgICAgICAgY29uc3RydWN0
b3IocGFyYW1zLCBib2R5LCBleHByZXNzaW9uKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBz
eW50YXhfMS5TeW50YXguQXJyb3dGdW5jdGlvbkV4cHJlc3Npb247CiAgICAgICAgICAgICB0aGlz
LmlkID0gbnVsbDsKICAgICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOwpAQCAtMTIwNywy
NTMgKzExNzQsMjM2IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3
ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9u
OwogICAgICAgICAgICAgdGhpcy5hc3luYyA9IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIEFzeW5jQXJyb3dGdW5jdGlvbkV4cHJlc3Npb247Ci0gICAgfSgpKTsKKyAgICB9CiAgICAg
ZXhwb3J0cy5Bc3luY0Fycm93RnVuY3Rpb25FeHByZXNzaW9uID0gQXN5bmNBcnJvd0Z1bmN0aW9u
RXhwcmVzc2lvbjsKLSAgICB2YXIgQXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBBc3luY0Z1bmN0aW9uRGVjbGFy
YXRpb24oaWQsIHBhcmFtcywgYm9keSkgeworICAgIGNsYXNzIEFzeW5jRnVuY3Rpb25EZWNsYXJh
dGlvbiB7CisgICAgICAgIGNvbnN0cnVjdG9yKGlkLCBwYXJhbXMsIGJvZHksIGdlbmVyYXRvcikg
ewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkZ1bmN0aW9uRGVjbGFy
YXRpb247CiAgICAgICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgICAgICB0aGlzLnBhcmFt
cyA9IHBhcmFtczsKICAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7Ci0gICAgICAgICAgICB0
aGlzLmdlbmVyYXRvciA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBnZW5l
cmF0b3I7CiAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBmYWxzZTsKICAgICAgICAgICAg
IHRoaXMuYXN5bmMgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBBc3luY0Z1bmN0
aW9uRGVjbGFyYXRpb247Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5Bc3luY0Z1bmN0
aW9uRGVjbGFyYXRpb24gPSBBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb247Ci0gICAgdmFyIEFzeW5j
RnVuY3Rpb25FeHByZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAg
ICBmdW5jdGlvbiBBc3luY0Z1bmN0aW9uRXhwcmVzc2lvbihpZCwgcGFyYW1zLCBib2R5KSB7Cisg
ICAgY2xhc3MgQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24geworICAgICAgICBjb25zdHJ1Y3Rvcihp
ZCwgcGFyYW1zLCBib2R5LCBnZW5lcmF0b3IpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5
bnRheF8xLlN5bnRheC5GdW5jdGlvbkV4cHJlc3Npb247CiAgICAgICAgICAgICB0aGlzLmlkID0g
aWQ7CiAgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKICAgICAgICAgICAgIHRoaXMu
Ym9keSA9IGJvZHk7Ci0gICAgICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGZhbHNlOworICAgICAg
ICAgICAgdGhpcy5nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CiAgICAgICAgICAgICB0aGlzLmV4cHJl
c3Npb24gPSBmYWxzZTsKICAgICAgICAgICAgIHRoaXMuYXN5bmMgPSB0cnVlOwogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBBc3luY0Z1bmN0aW9uRXhwcmVzc2lvbjsKLSAgICB9KCkpOworICAg
IH0KICAgICBleHBvcnRzLkFzeW5jRnVuY3Rpb25FeHByZXNzaW9uID0gQXN5bmNGdW5jdGlvbkV4
cHJlc3Npb247Ci0gICAgdmFyIEF3YWl0RXhwcmVzc2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQXdhaXRFeHByZXNzaW9uKGFyZ3VtZW50KSB7Cisg
ICAgY2xhc3MgQXdhaXRFeHByZXNzaW9uIHsKKyAgICAgICAgY29uc3RydWN0b3IoYXJndW1lbnQp
IHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Bd2FpdEV4cHJlc3Np
b247CiAgICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIEF3YWl0RXhwcmVzc2lvbjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBv
cnRzLkF3YWl0RXhwcmVzc2lvbiA9IEF3YWl0RXhwcmVzc2lvbjsKLSAgICB2YXIgQmluYXJ5RXhw
cmVzc2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24g
QmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHsKLSAgICAgICAgICAgIHZh
ciBsb2dpY2FsID0gKG9wZXJhdG9yID09PSAnfHwnIHx8IG9wZXJhdG9yID09PSAnJiYnKTsKKyAg
ICBjbGFzcyBCaWdJbnRMaXRlcmFsIHsKKyAgICAgICAgY29uc3RydWN0b3IodmFsdWUsIGJpZ2lu
dCwgcmF3KSB7CisgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguTGl0ZXJh
bDsKKyAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuYmln
aW50ID0gYmlnaW50OworICAgICAgICAgICAgdGhpcy5yYXcgPSByYXc7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZXhwb3J0cy5CaWdJbnRMaXRlcmFsID0gQmlnSW50TGl0ZXJhbDsKKyAgICBjbGFz
cyBCaW5hcnlFeHByZXNzaW9uIHsKKyAgICAgICAgY29uc3RydWN0b3Iob3BlcmF0b3IsIGxlZnQs
IHJpZ2h0KSB7CisgICAgICAgICAgICBjb25zdCBsb2dpY2FsID0gKG9wZXJhdG9yID09PSAnfHwn
IHx8IG9wZXJhdG9yID09PSAnJiYnKTsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IGxvZ2ljYWwg
PyBzeW50YXhfMS5TeW50YXguTG9naWNhbEV4cHJlc3Npb24gOiBzeW50YXhfMS5TeW50YXguQmlu
YXJ5RXhwcmVzc2lvbjsKICAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjsKICAg
ICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7CiAgICAgICAgICAgICB0aGlzLnJpZ2h0ID0gcmln
aHQ7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEJpbmFyeUV4cHJlc3Npb247Ci0gICAgfSgp
KTsKKyAgICB9CiAgICAgZXhwb3J0cy5CaW5hcnlFeHByZXNzaW9uID0gQmluYXJ5RXhwcmVzc2lv
bjsKLSAgICB2YXIgQmxvY2tTdGF0ZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
Ci0gICAgICAgIGZ1bmN0aW9uIEJsb2NrU3RhdGVtZW50KGJvZHkpIHsKKyAgICBjbGFzcyBCbG9j
a1N0YXRlbWVudCB7CisgICAgICAgIGNvbnN0cnVjdG9yKGJvZHkpIHsKICAgICAgICAgICAgIHRo
aXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5CbG9ja1N0YXRlbWVudDsKICAgICAgICAgICAgIHRo
aXMuYm9keSA9IGJvZHk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEJsb2NrU3RhdGVtZW50
OwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuQmxvY2tTdGF0ZW1lbnQgPSBCbG9ja1N0
YXRlbWVudDsKLSAgICB2YXIgQnJlYWtTdGF0ZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEJyZWFrU3RhdGVtZW50KGxhYmVsKSB7CisgICAgY2xh
c3MgQnJlYWtTdGF0ZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3RvcihsYWJlbCkgewogICAgICAg
ICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkJyZWFrU3RhdGVtZW50OwogICAgICAg
ICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBCcmVh
a1N0YXRlbWVudDsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkJyZWFrU3RhdGVtZW50
ID0gQnJlYWtTdGF0ZW1lbnQ7Ci0gICAgdmFyIENhbGxFeHByZXNzaW9uID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBDYWxsRXhwcmVzc2lvbihjYWxsZWUs
IGFyZ3MpIHsKKyAgICBjbGFzcyBDYWxsRXhwcmVzc2lvbiB7CisgICAgICAgIGNvbnN0cnVjdG9y
KGNhbGxlZSwgYXJncykgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4
LkNhbGxFeHByZXNzaW9uOwogICAgICAgICAgICAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7CiAgICAg
ICAgICAgICB0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IENhbGxFeHByZXNzaW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuQ2FsbEV4cHJl
c3Npb24gPSBDYWxsRXhwcmVzc2lvbjsKLSAgICB2YXIgQ2F0Y2hDbGF1c2UgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIENhdGNoQ2xhdXNlKHBhcmFtLCBi
b2R5KSB7CisgICAgY2xhc3MgQ2F0Y2hDbGF1c2UgeworICAgICAgICBjb25zdHJ1Y3RvcihwYXJh
bSwgYm9keSkgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkNhdGNo
Q2xhdXNlOwogICAgICAgICAgICAgdGhpcy5wYXJhbSA9IHBhcmFtOwogICAgICAgICAgICAgdGhp
cy5ib2R5ID0gYm9keTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gQ2F0Y2hDbGF1c2U7Ci0g
ICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5DYXRjaENsYXVzZSA9IENhdGNoQ2xhdXNlOwot
ICAgIHZhciBDbGFzc0JvZHkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAg
IGZ1bmN0aW9uIENsYXNzQm9keShib2R5KSB7CisgICAgY2xhc3MgQ2xhc3NCb2R5IHsKKyAgICAg
ICAgY29uc3RydWN0b3IoYm9keSkgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEu
U3ludGF4LkNsYXNzQm9keTsKICAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIENsYXNzQm9keTsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBv
cnRzLkNsYXNzQm9keSA9IENsYXNzQm9keTsKLSAgICB2YXIgQ2xhc3NEZWNsYXJhdGlvbiA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gQ2xhc3NEZWNsYXJh
dGlvbihpZCwgc3VwZXJDbGFzcywgYm9keSkgeworICAgIGNsYXNzIENsYXNzRGVjbGFyYXRpb24g
eworICAgICAgICBjb25zdHJ1Y3RvcihpZCwgc3VwZXJDbGFzcywgYm9keSkgewogICAgICAgICAg
ICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkNsYXNzRGVjbGFyYXRpb247CiAgICAgICAg
ICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgICAgICB0aGlzLnN1cGVyQ2xhc3MgPSBzdXBlckNs
YXNzOwogICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gQ2xhc3NEZWNsYXJhdGlvbjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkNs
YXNzRGVjbGFyYXRpb24gPSBDbGFzc0RlY2xhcmF0aW9uOwotICAgIHZhciBDbGFzc0V4cHJlc3Np
b24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIENsYXNz
RXhwcmVzc2lvbihpZCwgc3VwZXJDbGFzcywgYm9keSkgeworICAgIGNsYXNzIENsYXNzRXhwcmVz
c2lvbiB7CisgICAgICAgIGNvbnN0cnVjdG9yKGlkLCBzdXBlckNsYXNzLCBib2R5KSB7CiAgICAg
ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQ2xhc3NFeHByZXNzaW9uOwogICAg
ICAgICAgICAgdGhpcy5pZCA9IGlkOwogICAgICAgICAgICAgdGhpcy5zdXBlckNsYXNzID0gc3Vw
ZXJDbGFzczsKICAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIENsYXNzRXhwcmVzc2lvbjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRz
LkNsYXNzRXhwcmVzc2lvbiA9IENsYXNzRXhwcmVzc2lvbjsKLSAgICB2YXIgQ29tcHV0ZWRNZW1i
ZXJFeHByZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5j
dGlvbiBDb21wdXRlZE1lbWJlckV4cHJlc3Npb24ob2JqZWN0LCBwcm9wZXJ0eSkgeworICAgIGNs
YXNzIENvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbiB7CisgICAgICAgIGNvbnN0cnVjdG9yKG9iamVj
dCwgcHJvcGVydHkpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5N
ZW1iZXJFeHByZXNzaW9uOwogICAgICAgICAgICAgdGhpcy5jb21wdXRlZCA9IHRydWU7CiAgICAg
ICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDsKICAgICAgICAgICAgIHRoaXMucHJvcGVydHkg
PSBwcm9wZXJ0eTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gQ29tcHV0ZWRNZW1iZXJFeHBy
ZXNzaW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuQ29tcHV0ZWRNZW1iZXJFeHBy
ZXNzaW9uID0gQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uOwotICAgIHZhciBDb25kaXRpb25hbEV4
cHJlc3Npb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9u
IENvbmRpdGlvbmFsRXhwcmVzc2lvbih0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHsKKyAg
ICBjbGFzcyBDb25kaXRpb25hbEV4cHJlc3Npb24geworICAgICAgICBjb25zdHJ1Y3Rvcih0ZXN0
LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRh
eF8xLlN5bnRheC5Db25kaXRpb25hbEV4cHJlc3Npb247CiAgICAgICAgICAgICB0aGlzLnRlc3Qg
PSB0ZXN0OwogICAgICAgICAgICAgdGhpcy5jb25zZXF1ZW50ID0gY29uc2VxdWVudDsKICAgICAg
ICAgICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlOwogICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBDb25kaXRpb25hbEV4cHJlc3Npb247Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0
cy5Db25kaXRpb25hbEV4cHJlc3Npb24gPSBDb25kaXRpb25hbEV4cHJlc3Npb247Ci0gICAgdmFy
IENvbnRpbnVlU3RhdGVtZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAg
ICBmdW5jdGlvbiBDb250aW51ZVN0YXRlbWVudChsYWJlbCkgeworICAgIGNsYXNzIENvbnRpbnVl
U3RhdGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3IobGFiZWwpIHsKICAgICAgICAgICAgIHRo
aXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Db250aW51ZVN0YXRlbWVudDsKICAgICAgICAgICAg
IHRoaXMubGFiZWwgPSBsYWJlbDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gQ29udGludWVT
dGF0ZW1lbnQ7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5Db250aW51ZVN0YXRlbWVu
dCA9IENvbnRpbnVlU3RhdGVtZW50OwotICAgIHZhciBEZWJ1Z2dlclN0YXRlbWVudCA9IC8qKiBA
Y2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gRGVidWdnZXJTdGF0ZW1l
bnQoKSB7CisgICAgY2xhc3MgRGVidWdnZXJTdGF0ZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3Rv
cigpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5EZWJ1Z2dlclN0
YXRlbWVudDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gRGVidWdnZXJTdGF0ZW1lbnQ7Ci0g
ICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5EZWJ1Z2dlclN0YXRlbWVudCA9IERlYnVnZ2Vy
U3RhdGVtZW50OwotICAgIHZhciBEaXJlY3RpdmUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAo
KSB7Ci0gICAgICAgIGZ1bmN0aW9uIERpcmVjdGl2ZShleHByZXNzaW9uLCBkaXJlY3RpdmUpIHsK
KyAgICBjbGFzcyBEaXJlY3RpdmUgeworICAgICAgICBjb25zdHJ1Y3RvcihleHByZXNzaW9uLCBk
aXJlY3RpdmUpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5FeHBy
ZXNzaW9uU3RhdGVtZW50OwogICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lv
bjsKICAgICAgICAgICAgIHRoaXMuZGlyZWN0aXZlID0gZGlyZWN0aXZlOwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBEaXJlY3RpdmU7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5E
aXJlY3RpdmUgPSBEaXJlY3RpdmU7Ci0gICAgdmFyIERvV2hpbGVTdGF0ZW1lbnQgPSAvKiogQGNs
YXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIERvV2hpbGVTdGF0ZW1lbnQo
Ym9keSwgdGVzdCkgeworICAgIGNsYXNzIERvV2hpbGVTdGF0ZW1lbnQgeworICAgICAgICBjb25z
dHJ1Y3Rvcihib2R5LCB0ZXN0KSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5T
eW50YXguRG9XaGlsZVN0YXRlbWVudDsKICAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CiAg
ICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBE
b1doaWxlU3RhdGVtZW50OwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuRG9XaGlsZVN0
YXRlbWVudCA9IERvV2hpbGVTdGF0ZW1lbnQ7Ci0gICAgdmFyIEVtcHR5U3RhdGVtZW50ID0gLyoq
IEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBFbXB0eVN0YXRlbWVu
dCgpIHsKKyAgICBjbGFzcyBFbXB0eVN0YXRlbWVudCB7CisgICAgICAgIGNvbnN0cnVjdG9yKCkg
ewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkVtcHR5U3RhdGVtZW50
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBFbXB0eVN0YXRlbWVudDsKLSAgICB9KCkpOwor
ICAgIH0KICAgICBleHBvcnRzLkVtcHR5U3RhdGVtZW50ID0gRW1wdHlTdGF0ZW1lbnQ7Ci0gICAg
dmFyIEV4cG9ydEFsbERlY2xhcmF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewot
ICAgICAgICBmdW5jdGlvbiBFeHBvcnRBbGxEZWNsYXJhdGlvbihzb3VyY2UpIHsKKyAgICBjbGFz
cyBFeHBvcnRBbGxEZWNsYXJhdGlvbiB7CisgICAgICAgIGNvbnN0cnVjdG9yKHNvdXJjZSkgewog
ICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkV4cG9ydEFsbERlY2xhcmF0
aW9uOwogICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7CiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIEV4cG9ydEFsbERlY2xhcmF0aW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4
cG9ydHMuRXhwb3J0QWxsRGVjbGFyYXRpb24gPSBFeHBvcnRBbGxEZWNsYXJhdGlvbjsKLSAgICB2
YXIgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkg
ewotICAgICAgICBmdW5jdGlvbiBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZGVjbGFyYXRpb24p
IHsKKyAgICBjbGFzcyBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24geworICAgICAgICBjb25zdHJ1
Y3RvcihkZWNsYXJhdGlvbikgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3lu
dGF4LkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjsKICAgICAgICAgICAgIHRoaXMuZGVjbGFyYXRp
b24gPSBkZWNsYXJhdGlvbjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gRXhwb3J0RGVmYXVs
dERlY2xhcmF0aW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuRXhwb3J0RGVmYXVs
dERlY2xhcmF0aW9uID0gRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOwotICAgIHZhciBFeHBvcnRO
YW1lZERlY2xhcmF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBm
dW5jdGlvbiBFeHBvcnROYW1lZERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzLCBz
b3VyY2UpIHsKKyAgICBjbGFzcyBFeHBvcnROYW1lZERlY2xhcmF0aW9uIHsKKyAgICAgICAgY29u
c3RydWN0b3IoZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIHNvdXJjZSkgewogICAgICAgICAgICAg
dGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkV4cG9ydE5hbWVkRGVjbGFyYXRpb247CiAgICAg
ICAgICAgICB0aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb247CiAgICAgICAgICAgICB0aGlz
LnNwZWNpZmllcnMgPSBzcGVjaWZpZXJzOwogICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3Vy
Y2U7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEV4cG9ydE5hbWVkRGVjbGFyYXRpb247Ci0g
ICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5FeHBvcnROYW1lZERlY2xhcmF0aW9uID0gRXhw
b3J0TmFtZWREZWNsYXJhdGlvbjsKLSAgICB2YXIgRXhwb3J0U3BlY2lmaWVyID0gLyoqIEBjbGFz
cyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBFeHBvcnRTcGVjaWZpZXIobG9j
YWwsIGV4cG9ydGVkKSB7CisgICAgY2xhc3MgRXhwb3J0U3BlY2lmaWVyIHsKKyAgICAgICAgY29u
c3RydWN0b3IobG9jYWwsIGV4cG9ydGVkKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50
YXhfMS5TeW50YXguRXhwb3J0U3BlY2lmaWVyOwogICAgICAgICAgICAgdGhpcy5leHBvcnRlZCA9
IGV4cG9ydGVkOwogICAgICAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsOwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBFeHBvcnRTcGVjaWZpZXI7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhw
b3J0cy5FeHBvcnRTcGVjaWZpZXIgPSBFeHBvcnRTcGVjaWZpZXI7Ci0gICAgdmFyIEV4cHJlc3Np
b25TdGF0ZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0
aW9uIEV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcmVzc2lvbikgeworICAgIGNsYXNzIEV4cHJlc3Np
b25TdGF0ZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3RvcihleHByZXNzaW9uKSB7CiAgICAgICAg
ICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRXhwcmVzc2lvblN0YXRlbWVudDsKICAg
ICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247CiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIEV4cHJlc3Npb25TdGF0ZW1lbnQ7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhw
b3J0cy5FeHByZXNzaW9uU3RhdGVtZW50ID0gRXhwcmVzc2lvblN0YXRlbWVudDsKLSAgICB2YXIg
Rm9ySW5TdGF0ZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1
bmN0aW9uIEZvckluU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KSB7CisgICAgY2xhc3MgRm9y
SW5TdGF0ZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3RvcihsZWZ0LCByaWdodCwgYm9keSkgewog
ICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkZvckluU3RhdGVtZW50Owog
ICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsKICAgICAgICAgICAgIHRoaXMucmlnaHQgPSBy
aWdodDsKICAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CiAgICAgICAgICAgICB0aGlzLmVh
Y2ggPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gRm9ySW5TdGF0ZW1lbnQ7Ci0g
ICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5Gb3JJblN0YXRlbWVudCA9IEZvckluU3RhdGVt
ZW50OwotICAgIHZhciBGb3JPZlN0YXRlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgZnVuY3Rpb24gRm9yT2ZTdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpIHsK
KyAgICBjbGFzcyBGb3JPZlN0YXRlbWVudCB7CisgICAgICAgIGNvbnN0cnVjdG9yKGxlZnQsIHJp
Z2h0LCBib2R5LCBpc0F3YWl0KSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5T
eW50YXguRm9yT2ZTdGF0ZW1lbnQ7CiAgICAgICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0OwogICAg
ICAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0OwogICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9k
eTsKKyAgICAgICAgICAgIHRoaXMuYXdhaXQgPSBpc0F3YWl0OwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBGb3JPZlN0YXRlbWVudDsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkZv
ck9mU3RhdGVtZW50ID0gRm9yT2ZTdGF0ZW1lbnQ7Ci0gICAgdmFyIEZvclN0YXRlbWVudCA9IC8q
KiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gRm9yU3RhdGVtZW50
KGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkgeworICAgIGNsYXNzIEZvclN0YXRlbWVudCB7Cisg
ICAgICAgIGNvbnN0cnVjdG9yKGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkgewogICAgICAgICAg
ICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkZvclN0YXRlbWVudDsKICAgICAgICAgICAg
IHRoaXMuaW5pdCA9IGluaXQ7CiAgICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OwogICAgICAg
ICAgICAgdGhpcy51cGRhdGUgPSB1cGRhdGU7CiAgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBGb3JTdGF0ZW1lbnQ7Ci0gICAgfSgpKTsKKyAg
ICB9CiAgICAgZXhwb3J0cy5Gb3JTdGF0ZW1lbnQgPSBGb3JTdGF0ZW1lbnQ7Ci0gICAgdmFyIEZ1
bmN0aW9uRGVjbGFyYXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAg
IGZ1bmN0aW9uIEZ1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHBhcmFtcywgYm9keSwgZ2VuZXJhdG9y
KSB7CisgICAgY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbiB7CisgICAgICAgIGNvbnN0cnVjdG9y
KGlkLCBwYXJhbXMsIGJvZHksIGdlbmVyYXRvcikgewogICAgICAgICAgICAgdGhpcy50eXBlID0g
c3ludGF4XzEuU3ludGF4LkZ1bmN0aW9uRGVjbGFyYXRpb247CiAgICAgICAgICAgICB0aGlzLmlk
ID0gaWQ7CiAgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKQEAgLTE0NjIsMTEgKzE0
MTIsMTAgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tC
b290c3RyYXAKICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGZhbHNlOwogICAgICAgICAg
ICAgdGhpcy5hc3luYyA9IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBGdW5jdGlv
bkRlY2xhcmF0aW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuRnVuY3Rpb25EZWNs
YXJhdGlvbiA9IEZ1bmN0aW9uRGVjbGFyYXRpb247Ci0gICAgdmFyIEZ1bmN0aW9uRXhwcmVzc2lv
biA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gRnVuY3Rp
b25FeHByZXNzaW9uKGlkLCBwYXJhbXMsIGJvZHksIGdlbmVyYXRvcikgeworICAgIGNsYXNzIEZ1
bmN0aW9uRXhwcmVzc2lvbiB7CisgICAgICAgIGNvbnN0cnVjdG9yKGlkLCBwYXJhbXMsIGJvZHks
IGdlbmVyYXRvcikgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkZ1
bmN0aW9uRXhwcmVzc2lvbjsKICAgICAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgICAg
IHRoaXMucGFyYW1zID0gcGFyYW1zOwpAQCAtMTQ3NSw5NyArMTQyNCw4NiBAQCByZXR1cm4gLyoq
KioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAg
ICAgdGhpcy5leHByZXNzaW9uID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLmFzeW5jID0gZmFs
c2U7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEZ1bmN0aW9uRXhwcmVzc2lvbjsKLSAgICB9
KCkpOworICAgIH0KICAgICBleHBvcnRzLkZ1bmN0aW9uRXhwcmVzc2lvbiA9IEZ1bmN0aW9uRXhw
cmVzc2lvbjsKLSAgICB2YXIgSWRlbnRpZmllciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgZnVuY3Rpb24gSWRlbnRpZmllcihuYW1lKSB7CisgICAgY2xhc3MgSWRlbnRp
ZmllciB7CisgICAgICAgIGNvbnN0cnVjdG9yKG5hbWUpIHsKICAgICAgICAgICAgIHRoaXMudHlw
ZSA9IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyOwogICAgICAgICAgICAgdGhpcy5uYW1lID0g
bmFtZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gSWRlbnRpZmllcjsKLSAgICB9KCkpOwor
ICAgIH0KICAgICBleHBvcnRzLklkZW50aWZpZXIgPSBJZGVudGlmaWVyOwotICAgIHZhciBJZlN0
YXRlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24g
SWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7CisgICAgY2xhc3MgSWZT
dGF0ZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3Rvcih0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5h
dGUpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5JZlN0YXRlbWVu
dDsKICAgICAgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7CiAgICAgICAgICAgICB0aGlzLmNvbnNl
cXVlbnQgPSBjb25zZXF1ZW50OwogICAgICAgICAgICAgdGhpcy5hbHRlcm5hdGUgPSBhbHRlcm5h
dGU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIElmU3RhdGVtZW50OwotICAgIH0oKSk7Cisg
ICAgfQogICAgIGV4cG9ydHMuSWZTdGF0ZW1lbnQgPSBJZlN0YXRlbWVudDsKLSAgICB2YXIgSW1w
b3J0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBJbXBv
cnQoKSB7CisgICAgY2xhc3MgSW1wb3J0IHsKKyAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAg
ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguSW1wb3J0OwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBJbXBvcnQ7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5JbXBv
cnQgPSBJbXBvcnQ7Ci0gICAgdmFyIEltcG9ydERlY2xhcmF0aW9uID0gLyoqIEBjbGFzcyAqLyAo
ZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBJbXBvcnREZWNsYXJhdGlvbihzcGVjaWZp
ZXJzLCBzb3VyY2UpIHsKKyAgICBjbGFzcyBJbXBvcnREZWNsYXJhdGlvbiB7CisgICAgICAgIGNv
bnN0cnVjdG9yKHNwZWNpZmllcnMsIHNvdXJjZSkgewogICAgICAgICAgICAgdGhpcy50eXBlID0g
c3ludGF4XzEuU3ludGF4LkltcG9ydERlY2xhcmF0aW9uOwogICAgICAgICAgICAgdGhpcy5zcGVj
aWZpZXJzID0gc3BlY2lmaWVyczsKICAgICAgICAgICAgIHRoaXMuc291cmNlID0gc291cmNlOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbXBvcnREZWNsYXJhdGlvbjsKLSAgICB9KCkpOwor
ICAgIH0KICAgICBleHBvcnRzLkltcG9ydERlY2xhcmF0aW9uID0gSW1wb3J0RGVjbGFyYXRpb247
Ci0gICAgdmFyIEltcG9ydERlZmF1bHRTcGVjaWZpZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlv
biAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIEltcG9ydERlZmF1bHRTcGVjaWZpZXIobG9jYWwpIHsK
KyAgICBjbGFzcyBJbXBvcnREZWZhdWx0U3BlY2lmaWVyIHsKKyAgICAgICAgY29uc3RydWN0b3Io
bG9jYWwpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5JbXBvcnRE
ZWZhdWx0U3BlY2lmaWVyOwogICAgICAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOwotICAgIH0oKSk7Cisg
ICAgfQogICAgIGV4cG9ydHMuSW1wb3J0RGVmYXVsdFNwZWNpZmllciA9IEltcG9ydERlZmF1bHRT
cGVjaWZpZXI7Ci0gICAgdmFyIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllciA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gSW1wb3J0TmFtZXNwYWNlU3BlY2lm
aWVyKGxvY2FsKSB7CisgICAgY2xhc3MgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyIHsKKyAgICAg
ICAgY29uc3RydWN0b3IobG9jYWwpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8x
LlN5bnRheC5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI7CiAgICAgICAgICAgICB0aGlzLmxvY2Fs
ID0gbG9jYWw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEltcG9ydE5hbWVzcGFjZVNwZWNp
ZmllcjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkltcG9ydE5hbWVzcGFjZVNwZWNp
ZmllciA9IEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjsKLSAgICB2YXIgSW1wb3J0U3BlY2lmaWVy
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBJbXBvcnRT
cGVjaWZpZXIobG9jYWwsIGltcG9ydGVkKSB7CisgICAgY2xhc3MgSW1wb3J0U3BlY2lmaWVyIHsK
KyAgICAgICAgY29uc3RydWN0b3IobG9jYWwsIGltcG9ydGVkKSB7CiAgICAgICAgICAgICB0aGlz
LnR5cGUgPSBzeW50YXhfMS5TeW50YXguSW1wb3J0U3BlY2lmaWVyOwogICAgICAgICAgICAgdGhp
cy5sb2NhbCA9IGxvY2FsOwogICAgICAgICAgICAgdGhpcy5pbXBvcnRlZCA9IGltcG9ydGVkOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbXBvcnRTcGVjaWZpZXI7Ci0gICAgfSgpKTsKKyAg
ICB9CiAgICAgZXhwb3J0cy5JbXBvcnRTcGVjaWZpZXIgPSBJbXBvcnRTcGVjaWZpZXI7Ci0gICAg
dmFyIExhYmVsZWRTdGF0ZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgIGZ1bmN0aW9uIExhYmVsZWRTdGF0ZW1lbnQobGFiZWwsIGJvZHkpIHsKKyAgICBjbGFzcyBM
YWJlbGVkU3RhdGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3IobGFiZWwsIGJvZHkpIHsKICAg
ICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5MYWJlbGVkU3RhdGVtZW50Owog
ICAgICAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsOwogICAgICAgICAgICAgdGhpcy5ib2R5ID0g
Ym9keTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gTGFiZWxlZFN0YXRlbWVudDsKLSAgICB9
KCkpOworICAgIH0KICAgICBleHBvcnRzLkxhYmVsZWRTdGF0ZW1lbnQgPSBMYWJlbGVkU3RhdGVt
ZW50OwotICAgIHZhciBMaXRlcmFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAg
ICAgICBmdW5jdGlvbiBMaXRlcmFsKHZhbHVlLCByYXcpIHsKKyAgICBjbGFzcyBMaXRlcmFsIHsK
KyAgICAgICAgY29uc3RydWN0b3IodmFsdWUsIHJhdykgewogICAgICAgICAgICAgdGhpcy50eXBl
ID0gc3ludGF4XzEuU3ludGF4LkxpdGVyYWw7CiAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFs
dWU7CiAgICAgICAgICAgICB0aGlzLnJhdyA9IHJhdzsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gTGl0ZXJhbDsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLkxpdGVyYWwgPSBMaXRl
cmFsOwotICAgIHZhciBNZXRhUHJvcGVydHkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7
Ci0gICAgICAgIGZ1bmN0aW9uIE1ldGFQcm9wZXJ0eShtZXRhLCBwcm9wZXJ0eSkgeworICAgIGNs
YXNzIE1ldGFQcm9wZXJ0eSB7CisgICAgICAgIGNvbnN0cnVjdG9yKG1ldGEsIHByb3BlcnR5KSB7
CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguTWV0YVByb3BlcnR5Owog
ICAgICAgICAgICAgdGhpcy5tZXRhID0gbWV0YTsKICAgICAgICAgICAgIHRoaXMucHJvcGVydHkg
PSBwcm9wZXJ0eTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gTWV0YVByb3BlcnR5OwotICAg
IH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuTWV0YVByb3BlcnR5ID0gTWV0YVByb3BlcnR5Owot
ICAgIHZhciBNZXRob2REZWZpbml0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewot
ICAgICAgICBmdW5jdGlvbiBNZXRob2REZWZpbml0aW9uKGtleSwgY29tcHV0ZWQsIHZhbHVlLCBr
aW5kLCBpc1N0YXRpYykgeworICAgIGNsYXNzIE1ldGhvZERlZmluaXRpb24geworICAgICAgICBj
b25zdHJ1Y3RvcihrZXksIGNvbXB1dGVkLCB2YWx1ZSwga2luZCwgaXNTdGF0aWMpIHsKICAgICAg
ICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5NZXRob2REZWZpbml0aW9uOwogICAg
ICAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICAgICAgICAgICB0aGlzLmNvbXB1dGVkID0gY29t
cHV0ZWQ7CkBAIC0xNTczLDQ1ICsxNTExLDQwIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24o
bW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB0aGlzLmtpbmQgPSBr
aW5kOwogICAgICAgICAgICAgdGhpcy5zdGF0aWMgPSBpc1N0YXRpYzsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gTWV0aG9kRGVmaW5pdGlvbjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBv
cnRzLk1ldGhvZERlZmluaXRpb24gPSBNZXRob2REZWZpbml0aW9uOwotICAgIHZhciBNb2R1bGUg
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIE1vZHVsZShi
b2R5KSB7CisgICAgY2xhc3MgTW9kdWxlIHsKKyAgICAgICAgY29uc3RydWN0b3IoYm9keSkgewog
ICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlByb2dyYW07CiAgICAgICAg
ICAgICB0aGlzLmJvZHkgPSBib2R5OwogICAgICAgICAgICAgdGhpcy5zb3VyY2VUeXBlID0gJ21v
ZHVsZSc7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE1vZHVsZTsKLSAgICB9KCkpOworICAg
IH0KICAgICBleHBvcnRzLk1vZHVsZSA9IE1vZHVsZTsKLSAgICB2YXIgTmV3RXhwcmVzc2lvbiA9
IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gTmV3RXhwcmVz
c2lvbihjYWxsZWUsIGFyZ3MpIHsKKyAgICBjbGFzcyBOZXdFeHByZXNzaW9uIHsKKyAgICAgICAg
Y29uc3RydWN0b3IoY2FsbGVlLCBhcmdzKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50
YXhfMS5TeW50YXguTmV3RXhwcmVzc2lvbjsKICAgICAgICAgICAgIHRoaXMuY2FsbGVlID0gY2Fs
bGVlOwogICAgICAgICAgICAgdGhpcy5hcmd1bWVudHMgPSBhcmdzOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBOZXdFeHByZXNzaW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMu
TmV3RXhwcmVzc2lvbiA9IE5ld0V4cHJlc3Npb247Ci0gICAgdmFyIE9iamVjdEV4cHJlc3Npb24g
PSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIE9iamVjdEV4
cHJlc3Npb24ocHJvcGVydGllcykgeworICAgIGNsYXNzIE9iamVjdEV4cHJlc3Npb24geworICAg
ICAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBz
eW50YXhfMS5TeW50YXguT2JqZWN0RXhwcmVzc2lvbjsKICAgICAgICAgICAgIHRoaXMucHJvcGVy
dGllcyA9IHByb3BlcnRpZXM7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE9iamVjdEV4cHJl
c3Npb247Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5PYmplY3RFeHByZXNzaW9uID0g
T2JqZWN0RXhwcmVzc2lvbjsKLSAgICB2YXIgT2JqZWN0UGF0dGVybiA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gT2JqZWN0UGF0dGVybihwcm9wZXJ0aWVz
KSB7CisgICAgY2xhc3MgT2JqZWN0UGF0dGVybiB7CisgICAgICAgIGNvbnN0cnVjdG9yKHByb3Bl
cnRpZXMpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5PYmplY3RQ
YXR0ZXJuOwogICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllczsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gT2JqZWN0UGF0dGVybjsKLSAgICB9KCkpOworICAgIH0KICAg
ICBleHBvcnRzLk9iamVjdFBhdHRlcm4gPSBPYmplY3RQYXR0ZXJuOwotICAgIHZhciBQcm9wZXJ0
eSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gUHJvcGVy
dHkoa2luZCwga2V5LCBjb21wdXRlZCwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kKSB7CisgICAg
Y2xhc3MgUHJvcGVydHkgeworICAgICAgICBjb25zdHJ1Y3RvcihraW5kLCBrZXksIGNvbXB1dGVk
LCB2YWx1ZSwgbWV0aG9kLCBzaG9ydGhhbmQpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5
bnRheF8xLlN5bnRheC5Qcm9wZXJ0eTsKICAgICAgICAgICAgIHRoaXMua2V5ID0ga2V5OwogICAg
ICAgICAgICAgdGhpcy5jb21wdXRlZCA9IGNvbXB1dGVkOwpAQCAtMTYyMCwyMTEgKzE1NTMsMTg3
IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0
cmFwCiAgICAgICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDsKICAgICAgICAgICAgIHRoaXMu
c2hvcnRoYW5kID0gc2hvcnRoYW5kOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0
eTsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLlByb3BlcnR5ID0gUHJvcGVydHk7Ci0g
ICAgdmFyIFJlZ2V4TGl0ZXJhbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgZnVuY3Rpb24gUmVnZXhMaXRlcmFsKHZhbHVlLCByYXcsIHBhdHRlcm4sIGZsYWdzKSB7Cisg
ICAgY2xhc3MgUmVnZXhMaXRlcmFsIHsKKyAgICAgICAgY29uc3RydWN0b3IodmFsdWUsIHJhdywg
cGF0dGVybiwgZmxhZ3MpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRh
eC5MaXRlcmFsOwogICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogICAgICAgICAgICAg
dGhpcy5yYXcgPSByYXc7Ci0gICAgICAgICAgICB0aGlzLnJlZ2V4ID0geyBwYXR0ZXJuOiBwYXR0
ZXJuLCBmbGFnczogZmxhZ3MgfTsKKyAgICAgICAgICAgIHRoaXMucmVnZXggPSB7IHBhdHRlcm4s
IGZsYWdzIH07CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFJlZ2V4TGl0ZXJhbDsKLSAgICB9
KCkpOworICAgIH0KICAgICBleHBvcnRzLlJlZ2V4TGl0ZXJhbCA9IFJlZ2V4TGl0ZXJhbDsKLSAg
ICB2YXIgUmVzdEVsZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAg
IGZ1bmN0aW9uIFJlc3RFbGVtZW50KGFyZ3VtZW50KSB7CisgICAgY2xhc3MgUmVzdEVsZW1lbnQg
eworICAgICAgICBjb25zdHJ1Y3Rvcihhcmd1bWVudCkgewogICAgICAgICAgICAgdGhpcy50eXBl
ID0gc3ludGF4XzEuU3ludGF4LlJlc3RFbGVtZW50OwogICAgICAgICAgICAgdGhpcy5hcmd1bWVu
dCA9IGFyZ3VtZW50OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBSZXN0RWxlbWVudDsKLSAg
ICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLlJlc3RFbGVtZW50ID0gUmVzdEVsZW1lbnQ7Ci0g
ICAgdmFyIFJldHVyblN0YXRlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgZnVuY3Rpb24gUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KSB7CisgICAgY2xhc3MgUmV0
dXJuU3RhdGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3IoYXJndW1lbnQpIHsKICAgICAgICAg
ICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5SZXR1cm5TdGF0ZW1lbnQ7CiAgICAgICAg
ICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IFJldHVyblN0YXRlbWVudDsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLlJldHVyblN0
YXRlbWVudCA9IFJldHVyblN0YXRlbWVudDsKLSAgICB2YXIgU2NyaXB0ID0gLyoqIEBjbGFzcyAq
LyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBTY3JpcHQoYm9keSkgeworICAgIGNs
YXNzIFNjcmlwdCB7CisgICAgICAgIGNvbnN0cnVjdG9yKGJvZHkpIHsKICAgICAgICAgICAgIHRo
aXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Qcm9ncmFtOwogICAgICAgICAgICAgdGhpcy5ib2R5
ID0gYm9keTsKICAgICAgICAgICAgIHRoaXMuc291cmNlVHlwZSA9ICdzY3JpcHQnOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBTY3JpcHQ7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0
cy5TY3JpcHQgPSBTY3JpcHQ7Ci0gICAgdmFyIFNlcXVlbmNlRXhwcmVzc2lvbiA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gU2VxdWVuY2VFeHByZXNzaW9u
KGV4cHJlc3Npb25zKSB7CisgICAgY2xhc3MgU2VxdWVuY2VFeHByZXNzaW9uIHsKKyAgICAgICAg
Y29uc3RydWN0b3IoZXhwcmVzc2lvbnMpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRh
eF8xLlN5bnRheC5TZXF1ZW5jZUV4cHJlc3Npb247CiAgICAgICAgICAgICB0aGlzLmV4cHJlc3Np
b25zID0gZXhwcmVzc2lvbnM7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFNlcXVlbmNlRXhw
cmVzc2lvbjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLlNlcXVlbmNlRXhwcmVzc2lv
biA9IFNlcXVlbmNlRXhwcmVzc2lvbjsKLSAgICB2YXIgU3ByZWFkRWxlbWVudCA9IC8qKiBAY2xh
c3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gU3ByZWFkRWxlbWVudChhcmd1
bWVudCkgeworICAgIGNsYXNzIFNwcmVhZEVsZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3Rvcihh
cmd1bWVudCkgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlNwcmVh
ZEVsZW1lbnQ7CiAgICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIFNwcmVhZEVsZW1lbnQ7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAg
ZXhwb3J0cy5TcHJlYWRFbGVtZW50ID0gU3ByZWFkRWxlbWVudDsKLSAgICB2YXIgU3RhdGljTWVt
YmVyRXhwcmVzc2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVu
Y3Rpb24gU3RhdGljTWVtYmVyRXhwcmVzc2lvbihvYmplY3QsIHByb3BlcnR5KSB7CisgICAgY2xh
c3MgU3RhdGljTWVtYmVyRXhwcmVzc2lvbiB7CisgICAgICAgIGNvbnN0cnVjdG9yKG9iamVjdCwg
cHJvcGVydHkpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5NZW1i
ZXJFeHByZXNzaW9uOwogICAgICAgICAgICAgdGhpcy5jb21wdXRlZCA9IGZhbHNlOwogICAgICAg
ICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7CiAgICAgICAgICAgICB0aGlzLnByb3BlcnR5ID0g
cHJvcGVydHk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN0YXRpY01lbWJlckV4cHJlc3Np
b247Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5TdGF0aWNNZW1iZXJFeHByZXNzaW9u
ID0gU3RhdGljTWVtYmVyRXhwcmVzc2lvbjsKLSAgICB2YXIgU3VwZXIgPSAvKiogQGNsYXNzICov
IChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFN1cGVyKCkgeworICAgIGNsYXNzIFN1
cGVyIHsKKyAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBz
eW50YXhfMS5TeW50YXguU3VwZXI7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN1cGVyOwot
ICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuU3VwZXIgPSBTdXBlcjsKLSAgICB2YXIgU3dp
dGNoQ2FzZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24g
U3dpdGNoQ2FzZSh0ZXN0LCBjb25zZXF1ZW50KSB7CisgICAgY2xhc3MgU3dpdGNoQ2FzZSB7Cisg
ICAgICAgIGNvbnN0cnVjdG9yKHRlc3QsIGNvbnNlcXVlbnQpIHsKICAgICAgICAgICAgIHRoaXMu
dHlwZSA9IHN5bnRheF8xLlN5bnRheC5Td2l0Y2hDYXNlOwogICAgICAgICAgICAgdGhpcy50ZXN0
ID0gdGVzdDsKICAgICAgICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIFN3aXRjaENhc2U7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAg
ZXhwb3J0cy5Td2l0Y2hDYXNlID0gU3dpdGNoQ2FzZTsKLSAgICB2YXIgU3dpdGNoU3RhdGVtZW50
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBTd2l0Y2hT
dGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNlcykgeworICAgIGNsYXNzIFN3aXRjaFN0YXRlbWVu
dCB7CisgICAgICAgIGNvbnN0cnVjdG9yKGRpc2NyaW1pbmFudCwgY2FzZXMpIHsKICAgICAgICAg
ICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Td2l0Y2hTdGF0ZW1lbnQ7CiAgICAgICAg
ICAgICB0aGlzLmRpc2NyaW1pbmFudCA9IGRpc2NyaW1pbmFudDsKICAgICAgICAgICAgIHRoaXMu
Y2FzZXMgPSBjYXNlczsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gU3dpdGNoU3RhdGVtZW50
OwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuU3dpdGNoU3RhdGVtZW50ID0gU3dpdGNo
U3RhdGVtZW50OwotICAgIHZhciBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24gPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFRhZ2dlZFRlbXBsYXRlRXhwcmVz
c2lvbih0YWcsIHF1YXNpKSB7CisgICAgY2xhc3MgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uIHsK
KyAgICAgICAgY29uc3RydWN0b3IodGFnLCBxdWFzaSkgewogICAgICAgICAgICAgdGhpcy50eXBl
ID0gc3ludGF4XzEuU3ludGF4LlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjsKICAgICAgICAgICAg
IHRoaXMudGFnID0gdGFnOwogICAgICAgICAgICAgdGhpcy5xdWFzaSA9IHF1YXNpOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb247Ci0gICAgfSgpKTsK
KyAgICB9CiAgICAgZXhwb3J0cy5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24gPSBUYWdnZWRUZW1w
bGF0ZUV4cHJlc3Npb247Ci0gICAgdmFyIFRlbXBsYXRlRWxlbWVudCA9IC8qKiBAY2xhc3MgKi8g
KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gVGVtcGxhdGVFbGVtZW50KHZhbHVlLCB0
YWlsKSB7CisgICAgY2xhc3MgVGVtcGxhdGVFbGVtZW50IHsKKyAgICAgICAgY29uc3RydWN0b3Io
dmFsdWUsIHRhaWwpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5U
ZW1wbGF0ZUVsZW1lbnQ7CiAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICAgICAg
ICAgICB0aGlzLnRhaWwgPSB0YWlsOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBUZW1wbGF0
ZUVsZW1lbnQ7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5UZW1wbGF0ZUVsZW1lbnQg
PSBUZW1wbGF0ZUVsZW1lbnQ7Ci0gICAgdmFyIFRlbXBsYXRlTGl0ZXJhbCA9IC8qKiBAY2xhc3Mg
Ki8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24gVGVtcGxhdGVMaXRlcmFsKHF1YXNp
cywgZXhwcmVzc2lvbnMpIHsKKyAgICBjbGFzcyBUZW1wbGF0ZUxpdGVyYWwgeworICAgICAgICBj
b25zdHJ1Y3RvcihxdWFzaXMsIGV4cHJlc3Npb25zKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUg
PSBzeW50YXhfMS5TeW50YXguVGVtcGxhdGVMaXRlcmFsOwogICAgICAgICAgICAgdGhpcy5xdWFz
aXMgPSBxdWFzaXM7CiAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnM7
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFRlbXBsYXRlTGl0ZXJhbDsKLSAgICB9KCkpOwor
ICAgIH0KICAgICBleHBvcnRzLlRlbXBsYXRlTGl0ZXJhbCA9IFRlbXBsYXRlTGl0ZXJhbDsKLSAg
ICB2YXIgVGhpc0V4cHJlc3Npb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgIGZ1bmN0aW9uIFRoaXNFeHByZXNzaW9uKCkgeworICAgIGNsYXNzIFRoaXNFeHByZXNzaW9u
IHsKKyAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50
YXhfMS5TeW50YXguVGhpc0V4cHJlc3Npb247CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFRo
aXNFeHByZXNzaW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuVGhpc0V4cHJlc3Np
b24gPSBUaGlzRXhwcmVzc2lvbjsKLSAgICB2YXIgVGhyb3dTdGF0ZW1lbnQgPSAvKiogQGNsYXNz
ICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFRocm93U3RhdGVtZW50KGFyZ3Vt
ZW50KSB7CisgICAgY2xhc3MgVGhyb3dTdGF0ZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3Rvcihh
cmd1bWVudCkgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlRocm93
U3RhdGVtZW50OwogICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBUaHJvd1N0YXRlbWVudDsKLSAgICB9KCkpOworICAgIH0KICAg
ICBleHBvcnRzLlRocm93U3RhdGVtZW50ID0gVGhyb3dTdGF0ZW1lbnQ7Ci0gICAgdmFyIFRyeVN0
YXRlbWVudCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rpb24g
VHJ5U3RhdGVtZW50KGJsb2NrLCBoYW5kbGVyLCBmaW5hbGl6ZXIpIHsKKyAgICBjbGFzcyBUcnlT
dGF0ZW1lbnQgeworICAgICAgICBjb25zdHJ1Y3RvcihibG9jaywgaGFuZGxlciwgZmluYWxpemVy
KSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguVHJ5U3RhdGVtZW50
OwogICAgICAgICAgICAgdGhpcy5ibG9jayA9IGJsb2NrOwogICAgICAgICAgICAgdGhpcy5oYW5k
bGVyID0gaGFuZGxlcjsKICAgICAgICAgICAgIHRoaXMuZmluYWxpemVyID0gZmluYWxpemVyOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBUcnlTdGF0ZW1lbnQ7Ci0gICAgfSgpKTsKKyAgICB9
CiAgICAgZXhwb3J0cy5UcnlTdGF0ZW1lbnQgPSBUcnlTdGF0ZW1lbnQ7Ci0gICAgdmFyIFVuYXJ5
RXhwcmVzc2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZnVuY3Rp
b24gVW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBhcmd1bWVudCkgeworICAgIGNsYXNzIFVuYXJ5
RXhwcmVzc2lvbiB7CisgICAgICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yLCBhcmd1bWVudCkgewog
ICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlVuYXJ5RXhwcmVzc2lvbjsK
ICAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjsKICAgICAgICAgICAgIHRoaXMu
YXJndW1lbnQgPSBhcmd1bWVudDsKICAgICAgICAgICAgIHRoaXMucHJlZml4ID0gdHJ1ZTsKICAg
ICAgICAgfQotICAgICAgICByZXR1cm4gVW5hcnlFeHByZXNzaW9uOwotICAgIH0oKSk7CisgICAg
fQogICAgIGV4cG9ydHMuVW5hcnlFeHByZXNzaW9uID0gVW5hcnlFeHByZXNzaW9uOwotICAgIHZh
ciBVcGRhdGVFeHByZXNzaW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAg
ICBmdW5jdGlvbiBVcGRhdGVFeHByZXNzaW9uKG9wZXJhdG9yLCBhcmd1bWVudCwgcHJlZml4KSB7
CisgICAgY2xhc3MgVXBkYXRlRXhwcmVzc2lvbiB7CisgICAgICAgIGNvbnN0cnVjdG9yKG9wZXJh
dG9yLCBhcmd1bWVudCwgcHJlZml4KSB7CiAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhf
MS5TeW50YXguVXBkYXRlRXhwcmVzc2lvbjsKICAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBv
cGVyYXRvcjsKICAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKICAgICAgICAg
ICAgIHRoaXMucHJlZml4ID0gcHJlZml4OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBVcGRh
dGVFeHByZXNzaW9uOwotICAgIH0oKSk7CisgICAgfQogICAgIGV4cG9ydHMuVXBkYXRlRXhwcmVz
c2lvbiA9IFVwZGF0ZUV4cHJlc3Npb247Ci0gICAgdmFyIFZhcmlhYmxlRGVjbGFyYXRpb24gPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFZhcmlhYmxlRGVj
bGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKSB7CisgICAgY2xhc3MgVmFyaWFibGVEZWNsYXJh
dGlvbiB7CisgICAgICAgIGNvbnN0cnVjdG9yKGRlY2xhcmF0aW9ucywga2luZCkgewogICAgICAg
ICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRpb247CiAg
ICAgICAgICAgICB0aGlzLmRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9uczsKICAgICAgICAgICAg
IHRoaXMua2luZCA9IGtpbmQ7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFZhcmlhYmxlRGVj
bGFyYXRpb247Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5WYXJpYWJsZURlY2xhcmF0
aW9uID0gVmFyaWFibGVEZWNsYXJhdGlvbjsKLSAgICB2YXIgVmFyaWFibGVEZWNsYXJhdG9yID0g
LyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBWYXJpYWJsZURl
Y2xhcmF0b3IoaWQsIGluaXQpIHsKKyAgICBjbGFzcyBWYXJpYWJsZURlY2xhcmF0b3IgeworICAg
ICAgICBjb25zdHJ1Y3RvcihpZCwgaW5pdCkgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3lu
dGF4XzEuU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRvcjsKICAgICAgICAgICAgIHRoaXMuaWQgPSBp
ZDsKICAgICAgICAgICAgIHRoaXMuaW5pdCA9IGluaXQ7CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIFZhcmlhYmxlRGVjbGFyYXRvcjsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLlZh
cmlhYmxlRGVjbGFyYXRvciA9IFZhcmlhYmxlRGVjbGFyYXRvcjsKLSAgICB2YXIgV2hpbGVTdGF0
ZW1lbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFdo
aWxlU3RhdGVtZW50KHRlc3QsIGJvZHkpIHsKKyAgICBjbGFzcyBXaGlsZVN0YXRlbWVudCB7Cisg
ICAgICAgIGNvbnN0cnVjdG9yKHRlc3QsIGJvZHkpIHsKICAgICAgICAgICAgIHRoaXMudHlwZSA9
IHN5bnRheF8xLlN5bnRheC5XaGlsZVN0YXRlbWVudDsKICAgICAgICAgICAgIHRoaXMudGVzdCA9
IHRlc3Q7CiAgICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBXaGlsZVN0YXRlbWVudDsKLSAgICB9KCkpOworICAgIH0KICAgICBleHBvcnRzLldo
aWxlU3RhdGVtZW50ID0gV2hpbGVTdGF0ZW1lbnQ7Ci0gICAgdmFyIFdpdGhTdGF0ZW1lbnQgPSAv
KiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFdpdGhTdGF0ZW1l
bnQob2JqZWN0LCBib2R5KSB7CisgICAgY2xhc3MgV2l0aFN0YXRlbWVudCB7CisgICAgICAgIGNv
bnN0cnVjdG9yKG9iamVjdCwgYm9keSkgewogICAgICAgICAgICAgdGhpcy50eXBlID0gc3ludGF4
XzEuU3ludGF4LldpdGhTdGF0ZW1lbnQ7CiAgICAgICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVj
dDsKICAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIFdpdGhTdGF0ZW1lbnQ7Ci0gICAgfSgpKTsKKyAgICB9CiAgICAgZXhwb3J0cy5XaXRoU3Rh
dGVtZW50ID0gV2l0aFN0YXRlbWVudDsKLSAgICB2YXIgWWllbGRFeHByZXNzaW9uID0gLyoqIEBj
bGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBZaWVsZEV4cHJlc3Npb24o
YXJndW1lbnQsIGRlbGVnYXRlKSB7CisgICAgY2xhc3MgWWllbGRFeHByZXNzaW9uIHsKKyAgICAg
ICAgY29uc3RydWN0b3IoYXJndW1lbnQsIGRlbGVnYXRlKSB7CiAgICAgICAgICAgICB0aGlzLnR5
cGUgPSBzeW50YXhfMS5TeW50YXguWWllbGRFeHByZXNzaW9uOwogICAgICAgICAgICAgdGhpcy5h
cmd1bWVudCA9IGFyZ3VtZW50OwogICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRl
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBZaWVsZEV4cHJlc3Npb247Ci0gICAgfSgpKTsK
KyAgICB9CiAgICAgZXhwb3J0cy5ZaWVsZEV4cHJlc3Npb24gPSBZaWVsZEV4cHJlc3Npb247CiAK
IApAQCAtMTgzNCwxNyArMTc0MywxNiBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVs
ZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogCiAgICAgInVzZSBzdHJpY3QiOwogICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7
Ci0gICAgdmFyIGFzc2VydF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTsKLSAgICB2YXIgZXJy
b3JfaGFuZGxlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7Ci0gICAgdmFyIG1lc3NhZ2Vz
XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTsKLSAgICB2YXIgTm9kZSA9IF9fd2VicGFja19y
ZXF1aXJlX18oNyk7Ci0gICAgdmFyIHNjYW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIp
OwotICAgIHZhciBzeW50YXhfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7Ci0gICAgdmFyIHRv
a2VuXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKLSAgICB2YXIgQXJyb3dQYXJhbWV0ZXJQ
bGFjZUhvbGRlciA9ICdBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyJzsKLSAgICB2YXIgUGFyc2Vy
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBQYXJzZXIo
Y29kZSwgb3B0aW9ucywgZGVsZWdhdGUpIHsKLSAgICAgICAgICAgIGlmIChvcHRpb25zID09PSB2
b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9CisgICAgY29uc3QgYXNzZXJ0XzEgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDkpOworICAgIGNvbnN0IGVycm9yX2hhbmRsZXJfMSA9IF9fd2VicGFja19yZXF1
aXJlX18oMTApOworICAgIGNvbnN0IG1lc3NhZ2VzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEx
KTsKKyAgICBjb25zdCBOb2RlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTsKKyAgICBjb25zdCBz
Y2FubmVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKKyAgICBjb25zdCBzeW50YXhfMSA9
IF9fd2VicGFja19yZXF1aXJlX18oMik7CisgICAgY29uc3QgdG9rZW5fMSA9IF9fd2VicGFja19y
ZXF1aXJlX18oMTMpOworICAgIGNvbnN0IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIgPSAnQXJy
b3dQYXJhbWV0ZXJQbGFjZUhvbGRlcic7CisgICAgY2xhc3MgUGFyc2VyIHsKKyAgICAgICAgY29u
c3RydWN0b3IoY29kZSwgb3B0aW9ucyA9IHt9LCBkZWxlZ2F0ZSkgewogICAgICAgICAgICAgdGhp
cy5jb25maWcgPSB7CiAgICAgICAgICAgICAgICAgcmFuZ2U6ICh0eXBlb2Ygb3B0aW9ucy5yYW5n
ZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlLAogICAgICAgICAgICAgICAgIGxvYzog
KHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLmxvYywKQEAgLTE5
MzEsNDAgKzE4MzksMzIgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8v
IHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuc2Nhbm5lci5p
bmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQKICAgICAgICAgICAgIH07CiAgICAgICAgIH0K
LSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS50aHJvd0Vycm9yID0gZnVuY3Rpb24gKG1lc3NhZ2VG
b3JtYXQpIHsKLSAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbXTsKLSAgICAgICAgICAgIGZvciAo
dmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgdmFsdWVzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEp
OwotICAgICAgICAgICAgdmFyIG1zZyA9IG1lc3NhZ2VGb3JtYXQucmVwbGFjZSgvJShcZCkvZywg
ZnVuY3Rpb24gKHdob2xlLCBpZHgpIHsKKyAgICAgICAgdGhyb3dFcnJvcihtZXNzYWdlRm9ybWF0
LCAuLi52YWx1ZXMpIHsKKyAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOworICAgICAgICAgICAgY29uc3QgbXNnID0gbWVzc2Fn
ZUZvcm1hdC5yZXBsYWNlKC8lKFxkKS9nLCAod2hvbGUsIGlkeCkgPT4gewogICAgICAgICAgICAg
ICAgIGFzc2VydF8xLmFzc2VydChpZHggPCBhcmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNl
IG11c3QgYmUgaW4gcmFuZ2UnKTsKICAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1tpZHhdOwog
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmxhc3RNYXJrZXIu
aW5kZXg7Ci0gICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMubGFzdE1hcmtlci5saW5lOwotICAg
ICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGFzdE1hcmtlci5jb2x1bW4gKyAxOworICAgICAg
ICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxhc3RNYXJrZXIuaW5kZXg7CisgICAgICAgICAgICBj
b25zdCBsaW5lID0gdGhpcy5sYXN0TWFya2VyLmxpbmU7CisgICAgICAgICAgICBjb25zdCBjb2x1
bW4gPSB0aGlzLmxhc3RNYXJrZXIuY29sdW1uICsgMTsKICAgICAgICAgICAgIHRocm93IHRoaXMu
ZXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2x1bW4sIG1zZyk7Ci0gICAg
ICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUudG9sZXJhdGVFcnJvciA9IGZ1bmN0aW9u
IChtZXNzYWdlRm9ybWF0KSB7Ci0gICAgICAgICAgICB2YXIgdmFsdWVzID0gW107Ci0gICAgICAg
ICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewotICAg
ICAgICAgICAgICAgIHZhbHVlc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJn
dW1lbnRzLCAxKTsKLSAgICAgICAgICAgIHZhciBtc2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxhY2Uo
LyUoXGQpL2csIGZ1bmN0aW9uICh3aG9sZSwgaWR4KSB7CisgICAgICAgIH0KKyAgICAgICAgdG9s
ZXJhdGVFcnJvcihtZXNzYWdlRm9ybWF0LCAuLi52YWx1ZXMpIHsKKyAgICAgICAgICAgIGNvbnN0
IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOworICAgICAg
ICAgICAgY29uc3QgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKC8lKFxkKS9nLCAod2hvbGUs
IGlkeCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChpZHggPCBhcmdzLmxl
bmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UnKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gYXJnc1tpZHhdOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB2YXIg
aW5kZXggPSB0aGlzLmxhc3RNYXJrZXIuaW5kZXg7Ci0gICAgICAgICAgICB2YXIgbGluZSA9IHRo
aXMuc2Nhbm5lci5saW5lTnVtYmVyOwotICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGFz
dE1hcmtlci5jb2x1bW4gKyAxOworICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxhc3RN
YXJrZXIuaW5kZXg7CisgICAgICAgICAgICBjb25zdCBsaW5lID0gdGhpcy5zY2FubmVyLmxpbmVO
dW1iZXI7CisgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmxhc3RNYXJrZXIuY29sdW1u
ICsgMTsKICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYXRlRXJyb3IoaW5kZXgs
IGxpbmUsIGNvbHVtbiwgbXNnKTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBU
aHJvdyBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiB0aGUgdG9rZW4uCi0gICAgICAgIFBhcnNlci5w
cm90b3R5cGUudW5leHBlY3RlZFRva2VuRXJyb3IgPSBmdW5jdGlvbiAodG9rZW4sIG1lc3NhZ2Up
IHsKLSAgICAgICAgICAgIHZhciBtc2cgPSBtZXNzYWdlIHx8IG1lc3NhZ2VzXzEuTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuOwotICAgICAgICAgICAgdmFyIHZhbHVlOworICAgICAgICB1bmV4cGVj
dGVkVG9rZW5FcnJvcih0b2tlbiwgbWVzc2FnZSkgeworICAgICAgICAgICAgbGV0IG1zZyA9IG1l
c3NhZ2UgfHwgbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW47CisgICAgICAgICAg
ICBsZXQgdmFsdWU7CiAgICAgICAgICAgICBpZiAodG9rZW4pIHsKICAgICAgICAgICAgICAgICBp
ZiAoIW1lc3NhZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgbXNnID0gKHRva2VuLnR5cGUgPT09
IDIgLyogRU9GICovKSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZEVPUyA6CkBAIC0x
OTg5LDM1ICsxODg5LDM1IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAv
LyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtc2cgPSBtc2cu
cmVwbGFjZSgnJTAnLCB2YWx1ZSk7CiAgICAgICAgICAgICBpZiAodG9rZW4gJiYgdHlwZW9mIHRv
a2VuLmxpbmVOdW1iZXIgPT09ICdudW1iZXInKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGluZGV4
ID0gdG9rZW4uc3RhcnQ7Ci0gICAgICAgICAgICAgICAgdmFyIGxpbmUgPSB0b2tlbi5saW5lTnVt
YmVyOwotICAgICAgICAgICAgICAgIHZhciBsYXN0TWFya2VyTGluZVN0YXJ0ID0gdGhpcy5sYXN0
TWFya2VyLmluZGV4IC0gdGhpcy5sYXN0TWFya2VyLmNvbHVtbjsKLSAgICAgICAgICAgICAgICB2
YXIgY29sdW1uID0gdG9rZW4uc3RhcnQgLSBsYXN0TWFya2VyTGluZVN0YXJ0ICsgMTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBpbmRleCA9IHRva2VuLnN0YXJ0OworICAgICAgICAgICAgICAgIGNv
bnN0IGxpbmUgPSB0b2tlbi5saW5lTnVtYmVyOworICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RN
YXJrZXJMaW5lU3RhcnQgPSB0aGlzLmxhc3RNYXJrZXIuaW5kZXggLSB0aGlzLmxhc3RNYXJrZXIu
Y29sdW1uOworICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRva2VuLnN0YXJ0IC0gbGFz
dE1hcmtlckxpbmVTdGFydCArIDE7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JI
YW5kbGVyLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2x1bW4sIG1zZyk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlz
Lmxhc3RNYXJrZXIuaW5kZXg7Ci0gICAgICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmxhc3RN
YXJrZXIubGluZTsKLSAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5sYXN0TWFya2Vy
LmNvbHVtbiArIDE7CisgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxhc3RNYXJr
ZXIuaW5kZXg7CisgICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IHRoaXMubGFzdE1hcmtlci5s
aW5lOworICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMubGFzdE1hcmtlci5jb2x1
bW4gKyAxOwogICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5jcmVhdGVF
cnJvcihpbmRleCwgbGluZSwgY29sdW1uLCBtc2cpOwogICAgICAgICAgICAgfQotICAgICAgICB9
OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnRocm93VW5leHBlY3RlZFRva2VuID0gZnVuY3Rp
b24gKHRva2VuLCBtZXNzYWdlKSB7CisgICAgICAgIH0KKyAgICAgICAgdGhyb3dVbmV4cGVjdGVk
VG9rZW4odG9rZW4sIG1lc3NhZ2UpIHsKICAgICAgICAgICAgIHRocm93IHRoaXMudW5leHBlY3Rl
ZFRva2VuRXJyb3IodG9rZW4sIG1lc3NhZ2UpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIu
cHJvdG90eXBlLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuID0gZnVuY3Rpb24gKHRva2VuLCBtZXNz
YWdlKSB7CisgICAgICAgIH0KKyAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4s
IG1lc3NhZ2UpIHsKICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYXRlKHRoaXMu
dW5leHBlY3RlZFRva2VuRXJyb3IodG9rZW4sIG1lc3NhZ2UpKTsKLSAgICAgICAgfTsKLSAgICAg
ICAgUGFyc2VyLnByb3RvdHlwZS5jb2xsZWN0Q29tbWVudHMgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIH0KKyAgICAgICAgY29sbGVjdENvbW1lbnRzKCkgewogICAgICAgICAgICAgaWYgKCF0aGlz
LmNvbmZpZy5jb21tZW50KSB7CiAgICAgICAgICAgICAgICAgdGhpcy5zY2FubmVyLnNjYW5Db21t
ZW50cygpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGNvbW1lbnRzID0gdGhpcy5zY2FubmVyLnNjYW5Db21tZW50cygpOworICAgICAgICAg
ICAgICAgIGNvbnN0IGNvbW1lbnRzID0gdGhpcy5zY2FubmVyLnNjYW5Db21tZW50cygpOwogICAg
ICAgICAgICAgICAgIGlmIChjb21tZW50cy5sZW5ndGggPiAwICYmIHRoaXMuZGVsZWdhdGUpIHsK
LSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tZW50cy5sZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSBjb21tZW50c1tpXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gdm9pZCAwOworICAgICAgICAgICAgICAg
ICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1lbnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBlID0gY29tbWVudHNbaV07CisgICAgICAgICAgICAgICAg
ICAgICAgICBsZXQgbm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZS5tdWx0aUxpbmUgPyAnQmxvY2tDb21tZW50
JyA6ICdMaW5lQ29tbWVudCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRo
aXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2UoZS5zbGljZVswXSwgZS5zbGljZVsxXSkKQEAgLTIwMjgs
NyArMTkyOCw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJw
YWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcubG9j
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sb2MgPSBlLmxvYzsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXRhZGF0
YSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmU6IGUubG9jLnN0YXJ0LmxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbHVtbjogZS5sb2Muc3RhcnQuY29sdW1uLApAQCAtMjA0NCwxMyArMTk0NCwxMyBA
QCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJh
cAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIEZyb20gaW50ZXJuYWwgcmVwcmVz
ZW50YXRpb24gdG8gYW4gZXh0ZXJuYWwgc3RydWN0dXJlCi0gICAgICAgIFBhcnNlci5wcm90b3R5
cGUuZ2V0VG9rZW5SYXcgPSBmdW5jdGlvbiAodG9rZW4pIHsKKyAgICAgICAgZ2V0VG9rZW5SYXco
dG9rZW4pIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKHRv
a2VuLnN0YXJ0LCB0b2tlbi5lbmQpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90
eXBlLmNvbnZlcnRUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikgewotICAgICAgICAgICAgdmFyIHQg
PSB7CisgICAgICAgIH0KKyAgICAgICAgY29udmVydFRva2VuKHRva2VuKSB7CisgICAgICAgICAg
ICBjb25zdCB0ID0gewogICAgICAgICAgICAgICAgIHR5cGU6IHRva2VuXzEuVG9rZW5OYW1lW3Rv
a2VuLnR5cGVdLAogICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFRva2VuUmF3KHRva2Vu
KQogICAgICAgICAgICAgfTsKQEAgLTIwNzAsMTQgKzE5NzAsMTQgQEAgcmV0dXJuIC8qKioqKiov
IChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAg
ICB9OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IDkgLyog
UmVndWxhckV4cHJlc3Npb24gKi8pIHsKLSAgICAgICAgICAgICAgICB2YXIgcGF0dGVybiA9IHRv
a2VuLnBhdHRlcm47Ci0gICAgICAgICAgICAgICAgdmFyIGZsYWdzID0gdG9rZW4uZmxhZ3M7Ci0g
ICAgICAgICAgICAgICAgdC5yZWdleCA9IHsgcGF0dGVybjogcGF0dGVybiwgZmxhZ3M6IGZsYWdz
IH07CisgICAgICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IHRva2VuLnBhdHRlcm47CisgICAg
ICAgICAgICAgICAgY29uc3QgZmxhZ3MgPSB0b2tlbi5mbGFnczsKKyAgICAgICAgICAgICAgICB0
LnJlZ2V4ID0geyBwYXR0ZXJuLCBmbGFncyB9OwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmV0dXJuIHQ7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUubmV4dFRva2Vu
ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7
CisgICAgICAgIH0KKyAgICAgICAgbmV4dFRva2VuKCkgeworICAgICAgICAgICAgY29uc3QgdG9r
ZW4gPSB0aGlzLmxvb2thaGVhZDsKICAgICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5pbmRleCA9
IHRoaXMuc2Nhbm5lci5pbmRleDsKICAgICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lID0g
dGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7CiAgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIuY29s
dW1uID0gdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKQEAgLTIw
ODcsNyArMTk4Nyw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3
ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtlci5saW5lID0g
dGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7CiAgICAgICAgICAgICAgICAgdGhpcy5zdGFydE1hcmtl
ci5jb2x1bW4gPSB0aGlzLnNjYW5uZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0Owog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7
CisgICAgICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5zY2FubmVyLmxleCgpOwogICAgICAgICAg
ICAgdGhpcy5oYXNMaW5lVGVybWluYXRvciA9ICh0b2tlbi5saW5lTnVtYmVyICE9PSBuZXh0Lmxp
bmVOdW1iZXIpOwogICAgICAgICAgICAgaWYgKG5leHQgJiYgdGhpcy5jb250ZXh0LnN0cmljdCAm
JiBuZXh0LnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLykgewogICAgICAgICAgICAgICAgIGlm
ICh0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKG5leHQudmFsdWUpKSB7CkBA
IC0yMDk5LDEwICsxOTk5LDEwIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykg
eyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaCh0
aGlzLmNvbnZlcnRUb2tlbihuZXh0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm4gdG9rZW47Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUubmV4dFJlZ2V4
VG9rZW4gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIH0KKyAgICAgICAgbmV4dFJlZ2V4VG9rZW4o
KSB7CiAgICAgICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50cygpOwotICAgICAgICAgICAgdmFy
IHRva2VuID0gdGhpcy5zY2FubmVyLnNjYW5SZWdFeHAoKTsKKyAgICAgICAgICAgIGNvbnN0IHRv
a2VuID0gdGhpcy5zY2FubmVyLnNjYW5SZWdFeHAoKTsKICAgICAgICAgICAgIGlmICh0aGlzLmNv
bmZpZy50b2tlbnMpIHsKICAgICAgICAgICAgICAgICAvLyBQb3AgdGhlIHByZXZpb3VzIHRva2Vu
LCAnLycgb3IgJy89JwogICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYWRkZWQgZnJvbSB0aGUg
bG9va2FoZWFkIHRva2VuLgpAQCAtMjExMywxOCArMjAxMywxNyBAQCByZXR1cm4gLyoqKioqKi8g
KGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgdGhp
cy5sb29rYWhlYWQgPSB0b2tlbjsKICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CiAgICAg
ICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5
cGUuY3JlYXRlTm9kZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgfQorICAgICAgICBjcmVhdGVO
b2RlKCkgewogICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICBpbmRleDogdGhp
cy5zdGFydE1hcmtlci5pbmRleCwKICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLnN0YXJ0TWFy
a2VyLmxpbmUsCiAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLnN0YXJ0TWFya2VyLmNvbHVt
bgogICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5z
dGFydE5vZGUgPSBmdW5jdGlvbiAodG9rZW4sIGxhc3RMaW5lU3RhcnQpIHsKLSAgICAgICAgICAg
IGlmIChsYXN0TGluZVN0YXJ0ID09PSB2b2lkIDApIHsgbGFzdExpbmVTdGFydCA9IDA7IH0KLSAg
ICAgICAgICAgIHZhciBjb2x1bW4gPSB0b2tlbi5zdGFydCAtIHRva2VuLmxpbmVTdGFydDsKLSAg
ICAgICAgICAgIHZhciBsaW5lID0gdG9rZW4ubGluZU51bWJlcjsKKyAgICAgICAgfQorICAgICAg
ICBzdGFydE5vZGUodG9rZW4sIGxhc3RMaW5lU3RhcnQgPSAwKSB7CisgICAgICAgICAgICBsZXQg
Y29sdW1uID0gdG9rZW4uc3RhcnQgLSB0b2tlbi5saW5lU3RhcnQ7CisgICAgICAgICAgICBsZXQg
bGluZSA9IHRva2VuLmxpbmVOdW1iZXI7CiAgICAgICAgICAgICBpZiAoY29sdW1uIDwgMCkgewog
ICAgICAgICAgICAgICAgIGNvbHVtbiArPSBsYXN0TGluZVN0YXJ0OwogICAgICAgICAgICAgICAg
IGxpbmUtLTsKQEAgLTIxMzQsOCArMjAzMyw4IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24o
bW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgbGluZTogbGlu
ZSwKICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbgogICAgICAgICAgICAgfTsKLSAgICAg
ICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5maW5hbGl6ZSA9IGZ1bmN0aW9uIChtYXJr
ZXIsIG5vZGUpIHsKKyAgICAgICAgfQorICAgICAgICBmaW5hbGl6ZShtYXJrZXIsIG5vZGUpIHsK
ICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5yYW5nZSkgewogICAgICAgICAgICAgICAgIG5v
ZGUucmFuZ2UgPSBbbWFya2VyLmluZGV4LCB0aGlzLmxhc3RNYXJrZXIuaW5kZXhdOwogICAgICAg
ICAgICAgfQpAQCAtMjE1NSw3ICsyMDU0LDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAodGhpcy5kZWxlZ2F0ZSkgewotICAgICAgICAgICAgICAg
IHZhciBtZXRhZGF0YSA9IHsKKyAgICAgICAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHsKICAg
ICAgICAgICAgICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6
IG1hcmtlci5saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBtYXJrZXIuY29s
dW1uLApAQCAtMjE3MCwxOSArMjA2OSwxOSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1v
ZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIHRoaXMuZGVsZWdh
dGUobm9kZSwgbWV0YWRhdGEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG5v
ZGU7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gRXhwZWN0IHRoZSBuZXh0IHRv
a2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci4KICAgICAgICAgLy8gSWYgbm90
LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUu
ZXhwZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlz
Lm5leHRUb2tlbigpOworICAgICAgICBleHBlY3QodmFsdWUpIHsKKyAgICAgICAgICAgIGNvbnN0
IHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlICE9
PSA3IC8qIFB1bmN0dWF0b3IgKi8gfHwgdG9rZW4udmFsdWUgIT09IHZhbHVlKSB7CiAgICAgICAg
ICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7CiAgICAgICAgICAgICB9
Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gUXVpZXRseSBleHBlY3QgYSBjb21t
YSB3aGVuIGluIHRvbGVyYW50IG1vZGUsIG90aGVyd2lzZSBkZWxlZ2F0ZXMgdG8gZXhwZWN0KCku
Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUuZXhwZWN0Q29tbWFTZXBhcmF0b3IgPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIGV4cGVjdENvbW1hU2VwYXJhdG9yKCkgewogICAgICAgICAgICAgaWYg
KHRoaXMuY29uZmlnLnRvbGVyYW50KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdGhp
cy5sb29rYWhlYWQ7CisgICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmxvb2thaGVh
ZDsKICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gNyAvKiBQdW5jdHVhdG9yICov
ICYmIHRva2VuLnZhbHVlID09PSAnLCcpIHsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0
VG9rZW4oKTsKICAgICAgICAgICAgICAgICB9CkBAIC0yMTk3LDM0ICsyMDk2LDM0IEBAIHJldHVy
biAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOwogICAgICAg
ICAgICAgfQotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIEV4cGVjdCB0aGUgbmV4
dCB0b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIGtleXdvcmQuCiAgICAgICAgIC8vIElmIG5v
dCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgotICAgICAgICBQYXJzZXIucHJvdG90eXBl
LmV4cGVjdEtleXdvcmQgPSBmdW5jdGlvbiAoa2V5d29yZCkgewotICAgICAgICAgICAgdmFyIHRv
a2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgZXhwZWN0S2V5d29yZChrZXl3b3JkKSB7
CisgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7CiAgICAgICAgICAg
ICBpZiAodG9rZW4udHlwZSAhPT0gNCAvKiBLZXl3b3JkICovIHx8IHRva2VuLnZhbHVlICE9PSBr
ZXl3b3JkKSB7CiAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tl
bik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gUmV0
dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0
b3IuCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICAgICAgbWF0Y2godmFsdWUpIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvb2thaGVh
ZC50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYgdGhpcy5sb29rYWhlYWQudmFsdWUgPT09
IHZhbHVlOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIFJldHVybiB0cnVlIGlm
IHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBrZXl3b3JkCi0gICAgICAgIFBh
cnNlci5wcm90b3R5cGUubWF0Y2hLZXl3b3JkID0gZnVuY3Rpb24gKGtleXdvcmQpIHsKKyAgICAg
ICAgbWF0Y2hLZXl3b3JkKGtleXdvcmQpIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvb2th
aGVhZC50eXBlID09PSA0IC8qIEtleXdvcmQgKi8gJiYgdGhpcy5sb29rYWhlYWQudmFsdWUgPT09
IGtleXdvcmQ7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gUmV0dXJuIHRydWUg
aWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNvbnRleHR1YWwga2V5d29y
ZAogICAgICAgICAvLyAod2hlcmUgYW4gaWRlbnRpZmllciBpcyBzb21ldGltZXMgYSBrZXl3b3Jk
IGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCkKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5tYXRj
aENvbnRleHR1YWxLZXl3b3JkID0gZnVuY3Rpb24gKGtleXdvcmQpIHsKKyAgICAgICAgbWF0Y2hD
b250ZXh0dWFsS2V5d29yZChrZXl3b3JkKSB7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb29r
YWhlYWQudHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovICYmIHRoaXMubG9va2FoZWFkLnZhbHVl
ID09PSBrZXl3b3JkOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIFJldHVybiB0
cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IKLSAgICAgICAg
UGFyc2VyLnByb3RvdHlwZS5tYXRjaEFzc2lnbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgbWF0
Y2hBc3NpZ24oKSB7CiAgICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gNyAv
KiBQdW5jdHVhdG9yICovKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdmFyIG9wID0gdGhpcy5sb29rYWhlYWQudmFsdWU7CisgICAg
ICAgICAgICBjb25zdCBvcCA9IHRoaXMubG9va2FoZWFkLnZhbHVlOwogICAgICAgICAgICAgcmV0
dXJuIG9wID09PSAnPScgfHwKICAgICAgICAgICAgICAgICBvcCA9PT0gJyo9JyB8fAogICAgICAg
ICAgICAgICAgIG9wID09PSAnKio9JyB8fApAQCAtMjIzOCw3ICsyMTM3LDcgQEAgcmV0dXJuIC8q
KioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAg
ICAgICAgICBvcCA9PT0gJyY9JyB8fAogICAgICAgICAgICAgICAgIG9wID09PSAnXj0nIHx8CiAg
ICAgICAgICAgICAgICAgb3AgPT09ICd8PSc7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAg
ICAgLy8gQ292ZXIgZ3JhbW1hciBzdXBwb3J0LgogICAgICAgICAvLwogICAgICAgICAvLyBXaGVu
IGFuIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBwb3NpdGlvbiBzdGFydHMgd2l0aCBhbiBsZWZ0IHBh
cmVudGhlc2lzLCB0aGUgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgdHlwZQpAQCAtMjI3MCwxNCArMjE2
OSwxNCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jv
b3RzdHJhcAogICAgICAgICAvLyBpbmhlcml0Q292ZXJHcmFtbWFyIGZ1bmN0aW9uIHJ1bnMgdGhl
IGdpdmVuIHBhcnNlIGZ1bmN0aW9uIHdpdGggYSBuZXcgY292ZXIgZ3JhbW1hciBjb250ZXh0LCBh
bmQgaXQgcHJvcGFnYXRlcwogICAgICAgICAvLyB0aGUgZmxhZ3Mgb3V0c2lkZSBvZiB0aGUgcGFy
c2VyLiBUaGlzIG1lYW5zIHRoZSBwcm9kdWN0aW9uIHRoZSBwYXJzZXIgcGFyc2VzIGlzIHVzZWQg
YXMgYSBwYXJ0IG9mIGEgcG90ZW50aWFsCiAgICAgICAgIC8vIHBhdHRlcm4uIFRoZSBDb3Zlcklu
aXRpYWxpemVkTmFtZSBjaGVjayBpcyBkZWZlcnJlZC4KLSAgICAgICAgUGFyc2VyLnByb3RvdHlw
ZS5pc29sYXRlQ292ZXJHcmFtbWFyID0gZnVuY3Rpb24gKHBhcnNlRnVuY3Rpb24pIHsKLSAgICAg
ICAgICAgIHZhciBwcmV2aW91c0lzQmluZGluZ0VsZW1lbnQgPSB0aGlzLmNvbnRleHQuaXNCaW5k
aW5nRWxlbWVudDsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0lzQXNzaWdubWVudFRhcmdldCA9
IHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ7Ci0gICAgICAgICAgICB2YXIgcHJldmlv
dXNGaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSB0aGlzLmNvbnRleHQuZmlyc3RDb3Zl
ckluaXRpYWxpemVkTmFtZUVycm9yOworICAgICAgICBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNl
RnVuY3Rpb24pIHsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzSXNCaW5kaW5nRWxlbWVudCA9
IHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50OworICAgICAgICAgICAgY29uc3QgcHJldmlv
dXNJc0Fzc2lnbm1lbnRUYXJnZXQgPSB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0Owor
ICAgICAgICAgICAgY29uc3QgcHJldmlvdXNGaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3Ig
PSB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yOwogICAgICAgICAg
ICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7CiAgICAgICAgICAgICB0aGlzLmNv
bnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDsKLSAgICAgICAgICAg
IHZhciByZXN1bHQgPSBwYXJzZUZ1bmN0aW9uLmNhbGwodGhpcyk7CisgICAgICAgICAgICBjb25z
dCByZXN1bHQgPSBwYXJzZUZ1bmN0aW9uLmNhbGwodGhpcyk7CiAgICAgICAgICAgICBpZiAodGhp
cy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciAhPT0gbnVsbCkgewogICAg
ICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5jb250ZXh0LmZpcnN0
Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcik7CiAgICAgICAgICAgICB9CkBAIC0yMjg1LDIxICsy
MTg0LDIxIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNr
Qm9vdHN0cmFwCiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0g
cHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQ7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmly
c3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gcHJldmlvdXNGaXJzdENvdmVySW5pdGlhbGl6
ZWROYW1lRXJyb3I7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9OwotICAg
ICAgICBQYXJzZXIucHJvdG90eXBlLmluaGVyaXRDb3ZlckdyYW1tYXIgPSBmdW5jdGlvbiAocGFy
c2VGdW5jdGlvbikgewotICAgICAgICAgICAgdmFyIHByZXZpb3VzSXNCaW5kaW5nRWxlbWVudCA9
IHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50OwotICAgICAgICAgICAgdmFyIHByZXZpb3Vz
SXNBc3NpZ25tZW50VGFyZ2V0ID0gdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldDsKLSAg
ICAgICAgICAgIHZhciBwcmV2aW91c0ZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IHRo
aXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I7CisgICAgICAgIH0KKyAg
ICAgICAgaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZUZ1bmN0aW9uKSB7CisgICAgICAgICAgICBj
b25zdCBwcmV2aW91c0lzQmluZGluZ0VsZW1lbnQgPSB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxl
bWVudDsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzSXNBc3NpZ25tZW50VGFyZ2V0ID0gdGhp
cy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldDsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3Vz
Rmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJ
bml0aWFsaXplZE5hbWVFcnJvcjsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdF
bGVtZW50ID0gdHJ1ZTsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJn
ZXQgPSB0cnVlOwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXpl
ZE5hbWVFcnJvciA9IG51bGw7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gcGFyc2VGdW5jdGlv
bi5jYWxsKHRoaXMpOworICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VGdW5jdGlvbi5j
YWxsKHRoaXMpOwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSB0
aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCAmJiBwcmV2aW91c0lzQmluZGluZ0VsZW1lbnQ7
CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gdGhpcy5jb250
ZXh0LmlzQXNzaWdubWVudFRhcmdldCAmJiBwcmV2aW91c0lzQXNzaWdubWVudFRhcmdldDsKICAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBw
cmV2aW91c0ZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciB8fCB0aGlzLmNvbnRleHQuZmly
c3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5jb25zdW1lU2VtaWNvbG9uID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICB9CisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKSB7CiAg
ICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnOycpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5u
ZXh0VG9rZW4oKTsKICAgICAgICAgICAgIH0KQEAgLTIzMTEsMTIgKzIyMTAsMTIgQEAgcmV0dXJu
IC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAg
ICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIubGluZSA9IHRoaXMuc3RhcnRNYXJrZXIubGluZTsK
ICAgICAgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIuY29sdW1uID0gdGhpcy5zdGFydE1hcmtl
ci5jb2x1bW47CiAgICAgICAgICAgICB9Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAg
Ly8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJpbWFyeS1leHByZXNzaW9u
Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VQcmltYXJ5RXhwcmVzc2lvbiA9IGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAg
ICAgICAgICB2YXIgZXhwcjsKLSAgICAgICAgICAgIHZhciB0b2tlbiwgcmF3OworICAgICAgICBw
YXJzZVByaW1hcnlFeHByZXNzaW9uKCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMu
Y3JlYXRlTm9kZSgpOworICAgICAgICAgICAgbGV0IGV4cHI7CisgICAgICAgICAgICBsZXQgdG9r
ZW4sIHJhdzsKICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQudHlwZSkgewogICAg
ICAgICAgICAgICAgIGNhc2UgMyAvKiBJZGVudGlmaWVyICovOgogICAgICAgICAgICAgICAgICAg
ICBpZiAoKHRoaXMuY29udGV4dC5pc01vZHVsZSB8fCB0aGlzLmNvbnRleHQuYXdhaXQpICYmIHRo
aXMubG9va2FoZWFkLnZhbHVlID09PSAnYXdhaXQnKSB7CkBAIC0yMzMzLDcgKzIyMzIsMTMgQEAg
cmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAK
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOwogICAgICAg
ICAgICAgICAgICAgICByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsKLSAgICAgICAgICAg
ICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuTGl0ZXJhbCh0b2tl
bi52YWx1ZSwgcmF3KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi5iaWdpbnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJpZ2ludFN0cmluZyA9IHRva2VuLnZhbHVl
ICE9PSBudWxsID8gdG9rZW4udmFsdWUudG9TdHJpbmcoKSA6IC8qIGlzdGFuYnVsIGlnbm9yZSBu
ZXh0ICovIHRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCAt
IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IE5vZGUuQmlnSW50TGl0ZXJhbCh0b2tlbi52YWx1ZSwgYmlnaW50U3RyaW5nLCByYXcpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxp
dGVyYWwodG9rZW4udmFsdWUsIHJhdykpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgMSAvKiBCb29sZWFuTGl0
ZXJhbCAqLzoKICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRh
cmdldCA9IGZhbHNlOwpAQCAtMjQwOSwxNyArMjMxNCwxNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1
bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAg
ICBleHByID0gdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBleHByOwotICAgICAgICB9OworICAgICAg
ICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5
LWluaXRpYWxpemVyCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTcHJlYWRFbGVtZW50
ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKKyAgICAgICAgcGFyc2VTcHJlYWRFbGVtZW50KCkgeworICAgICAgICAgICAgY29uc3Qgbm9k
ZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwogICAgICAgICAgICAgdGhpcy5leHBlY3QoJy4uLicpOwot
ICAgICAgICAgICAgdmFyIGFyZyA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24pOworICAgICAgICAgICAgY29uc3QgYXJnID0gdGhpcy5pbmhl
cml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CiAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5TcHJlYWRFbGVtZW50KGFy
ZykpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQXJyYXlJbml0
aWFsaXplciA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVh
dGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTsKKyAgICAgICAgfQorICAg
ICAgICBwYXJzZUFycmF5SW5pdGlhbGl6ZXIoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0g
dGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IFtdOwogICAg
ICAgICAgICAgdGhpcy5leHBlY3QoJ1snKTsKICAgICAgICAgICAgIHdoaWxlICghdGhpcy5tYXRj
aCgnXScpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJywnKSkgewpAQCAtMjQy
Nyw3ICsyMzMyLDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdl
YnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChudWxsKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgn
Li4uJykpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLnBhcnNlU3By
ZWFkRWxlbWVudCgpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5w
YXJzZVNwcmVhZEVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNo
KCddJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1l
bnRUYXJnZXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5p
c0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CkBAIC0yNDQ0LDE1ICsyMzQ5LDE1IEBAIHJldHVybiAv
KioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnXScpOwogICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKSk7
Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5p
by9lY21hMjYyLyNzZWMtb2JqZWN0LWluaXRpYWxpemVyCi0gICAgICAgIFBhcnNlci5wcm90b3R5
cGUucGFyc2VQcm9wZXJ0eU1ldGhvZCA9IGZ1bmN0aW9uIChwYXJhbXMpIHsKKyAgICAgICAgcGFy
c2VQcm9wZXJ0eU1ldGhvZChwYXJhbXMpIHsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fz
c2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRp
bmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QgPSB0aGlz
LmNvbnRleHQuc3RyaWN0OwotICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dTdHJpY3REaXJl
Y3RpdmUgPSB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU7CisgICAgICAgICAgICBj
b25zdCBwcmV2aW91c1N0cmljdCA9IHRoaXMuY29udGV4dC5zdHJpY3Q7CisgICAgICAgICAgICBj
b25zdCBwcmV2aW91c0FsbG93U3RyaWN0RGlyZWN0aXZlID0gdGhpcy5jb250ZXh0LmFsbG93U3Ry
aWN0RGlyZWN0aXZlOwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0
aXZlID0gcGFyYW1zLnNpbXBsZTsKLSAgICAgICAgICAgIHZhciBib2R5ID0gdGhpcy5pc29sYXRl
Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKTsKKyAgICAgICAg
ICAgIGNvbnN0IGJvZHkgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUZ1bmN0
aW9uU291cmNlRWxlbWVudHMpOwogICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3Qg
JiYgcGFyYW1zLmZpcnN0UmVzdHJpY3RlZCkgewogICAgICAgICAgICAgICAgIHRoaXMudG9sZXJh
dGVVbmV4cGVjdGVkVG9rZW4ocGFyYW1zLmZpcnN0UmVzdHJpY3RlZCwgcGFyYW1zLm1lc3NhZ2Up
OwogICAgICAgICAgICAgfQpAQCAtMjQ2Miw0MCArMjM2Nyw0MCBAQCByZXR1cm4gLyoqKioqKi8g
KGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgdGhp
cy5jb250ZXh0LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0OwogICAgICAgICAgICAgdGhpcy5jb250
ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlID0gcHJldmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZTsK
ICAgICAgICAgICAgIHJldHVybiBib2R5OwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJv
dG90eXBlLnBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICAgIHZhciBpc0dlbmVyYXRvciA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0
aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKyAgICAgICAgfQorICAgICAgICBwYXJzZVByb3BlcnR5
TWV0aG9kRnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb25zdCBpc0dlbmVyYXRvciA9IGZhbHNl
OworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAg
ICAgY29uc3QgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CiAg
ICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHRydWU7Ci0gICAgICAgICAgICB2
YXIgcGFyYW1zID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKTsKLSAgICAgICAgICAgIHZh
ciBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2QocGFyYW1zKTsKKyAgICAgICAgICAg
IGNvbnN0IHBhcmFtcyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCk7CisgICAgICAgICAg
ICBjb25zdCBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2QocGFyYW1zKTsKICAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwogICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHBy
ZXNzaW9uKG51bGwsIHBhcmFtcy5wYXJhbXMsIG1ldGhvZCwgaXNHZW5lcmF0b3IpKTsKLSAgICAg
ICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVByb3BlcnR5TWV0aG9kQXN5bmNG
dW5jdGlvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVh
dGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250
ZXh0LmFsbG93WWllbGQ7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNBd2FpdCA9IHRoaXMuY29u
dGV4dC5hd2FpdDsKKyAgICAgICAgfQorICAgICAgICBwYXJzZVByb3BlcnR5TWV0aG9kQXN5bmNG
dW5jdGlvbihpc0dlbmVyYXRvcikgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3Jl
YXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5j
b250ZXh0LmFsbG93WWllbGQ7CisgICAgICAgICAgICBjb25zdCBwcmV2aW91c0F3YWl0ID0gdGhp
cy5jb250ZXh0LmF3YWl0OwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBm
YWxzZTsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hd2FpdCA9IHRydWU7Ci0gICAgICAgICAg
ICB2YXIgcGFyYW1zID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKTsKLSAgICAgICAgICAg
IHZhciBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2QocGFyYW1zKTsKKyAgICAgICAg
ICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCk7CisgICAgICAg
ICAgICBjb25zdCBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2QocGFyYW1zKTsKICAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwog
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmF3YWl0ID0gcHJldmlvdXNBd2FpdDsKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFzeW5jRnVuY3Rpb25FeHBy
ZXNzaW9uKG51bGwsIHBhcmFtcy5wYXJhbXMsIG1ldGhvZCkpOwotICAgICAgICB9OwotICAgICAg
ICBQYXJzZXIucHJvdG90eXBlLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAg
dmFyIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgIHZhciBrZXk7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Bc3luY0Z1bmN0aW9u
RXhwcmVzc2lvbihudWxsLCBwYXJhbXMucGFyYW1zLCBtZXRob2QsIGlzR2VuZXJhdG9yKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpIHsKKyAgICAgICAgICAg
IGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IHRva2Vu
ID0gdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIGxldCBrZXk7CiAgICAgICAgICAgICBz
d2l0Y2ggKHRva2VuLnR5cGUpIHsKICAgICAgICAgICAgICAgICBjYXNlIDggLyogU3RyaW5nTGl0
ZXJhbCAqLzoKICAgICAgICAgICAgICAgICBjYXNlIDYgLyogTnVtZXJpY0xpdGVyYWwgKi86CiAg
ICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHRva2VuLm9jdGFs
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2Vu
KHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHJhdyA9IHRoaXMuZ2V0VG9r
ZW5SYXcodG9rZW4pOworICAgICAgICAgICAgICAgICAgICBjb25zdCByYXcgPSB0aGlzLmdldFRv
a2VuUmF3KHRva2VuKTsKICAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5maW5hbGl6ZShu
b2RlLCBuZXcgTm9kZS5MaXRlcmFsKHRva2VuLnZhbHVlLCByYXcpKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSAzIC8qIElkZW50aWZpZXIgKi86CkBA
IC0yNTE3LDI3ICsyNDIyLDMxIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykg
eyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMudGhy
b3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0
dXJuIGtleTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5pc1Byb3BlcnR5
S2V5ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKKyAgICAgICAgfQorICAgICAgICBpc1Byb3Bl
cnR5S2V5KGtleSwgdmFsdWUpIHsKICAgICAgICAgICAgIHJldHVybiAoa2V5LnR5cGUgPT09IHN5
bnRheF8xLlN5bnRheC5JZGVudGlmaWVyICYmIGtleS5uYW1lID09PSB2YWx1ZSkgfHwKICAgICAg
ICAgICAgICAgICAoa2V5LnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5MaXRlcmFsICYmIGtleS52
YWx1ZSA9PT0gdmFsdWUpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBh
cnNlT2JqZWN0UHJvcGVydHkgPSBmdW5jdGlvbiAoaGFzUHJvdG8pIHsKLSAgICAgICAgICAgIHZh
ciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlz
Lmxvb2thaGVhZDsKLSAgICAgICAgICAgIHZhciBraW5kOwotICAgICAgICAgICAgdmFyIGtleSA9
IG51bGw7Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSBudWxsOwotICAgICAgICAgICAgdmFyIGNv
bXB1dGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgbWV0aG9kID0gZmFsc2U7Ci0gICAgICAg
ICAgICB2YXIgc2hvcnRoYW5kID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgaXNBc3luYyA9IGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHBhcnNlT2JqZWN0UHJvcGVydHkoaGFzUHJvdG8pIHsK
KyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAg
IGNvbnN0IHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisgICAgICAgICAgICBsZXQga2luZDsKKyAg
ICAgICAgICAgIGxldCBrZXkgPSBudWxsOworICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDsK
KyAgICAgICAgICAgIGxldCBjb21wdXRlZCA9IGZhbHNlOworICAgICAgICAgICAgbGV0IG1ldGhv
ZCA9IGZhbHNlOworICAgICAgICAgICAgbGV0IHNob3J0aGFuZCA9IGZhbHNlOworICAgICAgICAg
ICAgbGV0IGlzQXN5bmMgPSBmYWxzZTsKKyAgICAgICAgICAgIGxldCBpc0FzeW5jR2VuZXJhdG9y
ID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gMyAvKiBJZGVudGlmaWVy
ICovKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGlkID0gdG9rZW4udmFsdWU7CisgICAgICAgICAg
ICAgICAgY29uc3QgaWQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgICB0aGlzLm5leHRU
b2tlbigpOwogICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpOwotICAg
ICAgICAgICAgICAgIGlzQXN5bmMgPSAhdGhpcy5oYXNMaW5lVGVybWluYXRvciAmJiAoaWQgPT09
ICdhc3luYycpICYmCi0gICAgICAgICAgICAgICAgICAgICF0aGlzLm1hdGNoKCc6JykgJiYgIXRo
aXMubWF0Y2goJygnKSAmJiAhdGhpcy5tYXRjaCgnKicpICYmICF0aGlzLm1hdGNoKCcsJyk7Cisg
ICAgICAgICAgICAgICAgaXNBc3luYyA9ICF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yICYmIChpZCA9
PT0gJ2FzeW5jJykgJiYgIXRoaXMubWF0Y2goJzonKSAmJiAhdGhpcy5tYXRjaCgnKCcpICYmICF0
aGlzLm1hdGNoKCcsJyk7CisgICAgICAgICAgICAgICAgaXNBc3luY0dlbmVyYXRvciA9IHRoaXMu
bWF0Y2goJyonKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNBc3luY0dlbmVyYXRvcikgeworICAg
ICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBrZXkgPSBpc0FzeW5jID8gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5
KCkgOiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIoaWQpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJyonKSkgewpAQCAtMjU0
Nyw3ICsyNDU2LDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdl
YnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2goJ1sn
KTsKICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBsb29rYWhlYWRQcm9wZXJ0eUtleSA9IHRo
aXMucXVhbGlmaWVkUHJvcGVydHlOYW1lKHRoaXMubG9va2FoZWFkKTsKKyAgICAgICAgICAgIGNv
bnN0IGxvb2thaGVhZFByb3BlcnR5S2V5ID0gdGhpcy5xdWFsaWZpZWRQcm9wZXJ0eU5hbWUodGhp
cy5sb29rYWhlYWQpOwogICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRp
ZmllciAqLyAmJiAhaXNBc3luYyAmJiB0b2tlbi52YWx1ZSA9PT0gJ2dldCcgJiYgbG9va2FoZWFk
UHJvcGVydHlLZXkpIHsKICAgICAgICAgICAgICAgICBraW5kID0gJ2dldCc7CiAgICAgICAgICAg
ICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7CkBAIC0yNTg0LDE2ICsyNDkzLDE2IEBA
IHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFw
CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRo
aXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJygnKSkgewotICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSA9IGlzQXN5bmMgPyB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2RBc3luY0Z1bmN0aW9u
KCkgOiB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbigpOworICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IGlzQXN5bmMgPyB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2RBc3luY0Z1bmN0
aW9uKGlzQXN5bmNHZW5lcmF0b3IpIDogdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24o
KTsKICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gMyAvKiBJZGVudGlmaWVy
ICovKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IE5vZGUuSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBj
b25zdCBpZCA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWRlbnRpZmllcih0b2tlbi52
YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFt
ZUVycm9yID0gdGhpcy5sb29rYWhlYWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5l
eHRUb2tlbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBpbml0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFy
KHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBpbml0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuQXNzaWdubWVudFBhdHRlcm4oaWQsIGluaXQpKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKQEAgLTI2MDYsMTIg
KzI1MTUsMTIgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBh
Y2tCb290c3RyYXAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Qcm9wZXJ0eShraW5kLCBrZXks
IGNvbXB1dGVkLCB2YWx1ZSwgbWV0aG9kLCBzaG9ydGhhbmQpKTsKLSAgICAgICAgfTsKLSAgICAg
ICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU9iamVjdEluaXRpYWxpemVyID0gZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgfQor
ICAgICAgICBwYXJzZU9iamVjdEluaXRpYWxpemVyKCkgeworICAgICAgICAgICAgY29uc3Qgbm9k
ZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwogICAgICAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsKLSAg
ICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW107Ci0gICAgICAgICAgICB2YXIgaGFzUHJvdG8g
PSB7IHZhbHVlOiBmYWxzZSB9OworICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IFtdOwor
ICAgICAgICAgICAgY29uc3QgaGFzUHJvdG8gPSB7IHZhbHVlOiBmYWxzZSB9OwogICAgICAgICAg
ICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHsKICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVz
LnB1c2godGhpcy5tYXRjaCgnLi4uJykgPyB0aGlzLnBhcnNlU3ByZWFkRWxlbWVudCgpIDogdGhp
cy5wYXJzZU9iamVjdFByb3BlcnR5KGhhc1Byb3RvKSk7CiAgICAgICAgICAgICAgICAgaWYgKCF0
aGlzLm1hdGNoKCd9JykpIHsKQEAgLTI2MjAsMzEgKzI1MjksMzEgQEAgcmV0dXJuIC8qKioqKiov
IChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5PYmplY3RFeHByZXNzaW9uKHByb3BlcnRpZXMpKTsKLSAg
ICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2Vj
bWEyNjIvI3NlYy10ZW1wbGF0ZS1saXRlcmFscwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBh
cnNlVGVtcGxhdGVIZWFkID0gZnVuY3Rpb24gKCkgeworICAgICAgICBwYXJzZVRlbXBsYXRlSGVh
ZCgpIHsKICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydCh0aGlzLmxvb2thaGVhZC5oZWFkLCAn
VGVtcGxhdGUgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSB0ZW1wbGF0ZSBoZWFkJyk7Ci0gICAg
ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIHRv
a2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgIHZhciByYXcgPSB0b2tlbi52YWx1
ZTsKLSAgICAgICAgICAgIHZhciBjb29rZWQgPSB0b2tlbi5jb29rZWQ7Ci0gICAgICAgICAgICBy
ZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5UZW1wbGF0ZUVsZW1lbnQoeyByYXc6
IHJhdywgY29va2VkOiBjb29rZWQgfSwgdG9rZW4udGFpbCkpOwotICAgICAgICB9OwotICAgICAg
ICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVGVtcGxhdGVFbGVtZW50ID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAg
Y29uc3QgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOworICAgICAgICAgICAgY29uc3QgcmF3ID0g
dG9rZW4udmFsdWU7CisgICAgICAgICAgICBjb25zdCBjb29rZWQgPSB0b2tlbi5jb29rZWQ7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5UZW1wbGF0ZUVs
ZW1lbnQoeyByYXcsIGNvb2tlZCB9LCB0b2tlbi50YWlsKSk7CisgICAgICAgIH0KKyAgICAgICAg
cGFyc2VUZW1wbGF0ZUVsZW1lbnQoKSB7CiAgICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQu
dHlwZSAhPT0gMTAgLyogVGVtcGxhdGUgKi8pIHsKICAgICAgICAgICAgICAgICB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9r
ZW4oKTsKLSAgICAgICAgICAgIHZhciByYXcgPSB0b2tlbi52YWx1ZTsKLSAgICAgICAgICAgIHZh
ciBjb29rZWQgPSB0b2tlbi5jb29rZWQ7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5UZW1wbGF0ZUVsZW1lbnQoeyByYXc6IHJhdywgY29va2VkOiBjb29r
ZWQgfSwgdG9rZW4udGFpbCkpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBl
LnBhcnNlVGVtcGxhdGVMaXRlcmFsID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBleHByZXNzaW9ucyA9IFtd
OwotICAgICAgICAgICAgdmFyIHF1YXNpcyA9IFtdOwotICAgICAgICAgICAgdmFyIHF1YXNpID0g
dGhpcy5wYXJzZVRlbXBsYXRlSGVhZCgpOworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMu
Y3JlYXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigp
OworICAgICAgICAgICAgY29uc3QgcmF3ID0gdG9rZW4udmFsdWU7CisgICAgICAgICAgICBjb25z
dCBjb29rZWQgPSB0b2tlbi5jb29rZWQ7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5UZW1wbGF0ZUVsZW1lbnQoeyByYXcsIGNvb2tlZCB9LCB0b2tlbi50
YWlsKSk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKSB7CisgICAg
ICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25z
dCBleHByZXNzaW9ucyA9IFtdOworICAgICAgICAgICAgY29uc3QgcXVhc2lzID0gW107CisgICAg
ICAgICAgICBsZXQgcXVhc2kgPSB0aGlzLnBhcnNlVGVtcGxhdGVIZWFkKCk7CiAgICAgICAgICAg
ICBxdWFzaXMucHVzaChxdWFzaSk7CiAgICAgICAgICAgICB3aGlsZSAoIXF1YXNpLnRhaWwpIHsK
ICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMucGFyc2VFeHByZXNzaW9uKCkp
OwpAQCAtMjY1Miw5ICsyNTYxLDkgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVz
KSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBxdWFzaXMucHVzaChxdWFz
aSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5UZW1wbGF0ZUxpdGVyYWwocXVhc2lzLCBleHByZXNzaW9ucykpOwotICAgICAg
ICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2
Mi8jc2VjLWdyb3VwaW5nLW9wZXJhdG9yCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucmVpbnRl
cnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuID0gZnVuY3Rpb24gKGV4cHIpIHsKKyAgICAgICAgcmVp
bnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIpIHsKICAgICAgICAgICAgIHN3aXRjaCAo
ZXhwci50eXBlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguSWRlbnRp
ZmllcjoKICAgICAgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5NZW1iZXJFeHByZXNz
aW9uOgpAQCAtMjY2Nyw3ICsyNTc2LDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1
bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguQXJyYXlFeHByZXNzaW9uOgogICAg
ICAgICAgICAgICAgICAgICBleHByLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQXJyYXlQYXR0ZXJu
OwotICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHIuZWxlbWVudHMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBl
eHByLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZXhwci5lbGVtZW50c1tpXSAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuZWxlbWVudHNbaV0pOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjY3NSw4ICsyNTg0LDggQEAgcmV0dXJuIC8q
KioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXgu
T2JqZWN0RXhwcmVzc2lvbjoKICAgICAgICAgICAgICAgICAgICAgZXhwci50eXBlID0gc3ludGF4
XzEuU3ludGF4Lk9iamVjdFBhdHRlcm47Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZXhwci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgcHJvcGVydHkgPSBleHByLnByb3BlcnRpZXNbaV07CisgICAgICAgICAgICAg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGV4cHIucHJvcGVydGll
c1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9u
QXNQYXR0ZXJuKHByb3BlcnR5LnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5TcHJlYWRFbGVtZW50
ID8gcHJvcGVydHkgOiBwcm9wZXJ0eS52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yNjg5LDkgKzI1OTgsOSBAQCByZXR1cm4gLyoq
KioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAg
ICAgICAgICAgICAvLyBBbGxvdyBvdGhlciBub2RlIHR5cGUgZm9yIHRvbGVyYW50IHBhcnNpbmcu
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICB9Owot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlR3JvdXBFeHByZXNzaW9uID0gZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgdmFyIGV4cHI7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VHcm91
cEV4cHJlc3Npb24oKSB7CisgICAgICAgICAgICBsZXQgZXhwcjsKICAgICAgICAgICAgIHRoaXMu
ZXhwZWN0KCcoJyk7CiAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7CiAgICAgICAg
ICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKQEAgLTI3MDUsOCArMjYxNCw4IEBAIHJldHVybiAv
KioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICAgICAg
dmFyIHBhcmFtcyA9IFtdOworICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VG9rZW4gPSB0aGlz
Lmxvb2thaGVhZDsKKyAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBbXTsKICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5tYXRjaCgnLi4uJykpIHsKICAgICAgICAgICAgICAgICAgICAgZXhw
ciA9IHRoaXMucGFyc2VSZXN0RWxlbWVudChwYXJhbXMpOwogICAgICAgICAgICAgICAgICAgICB0
aGlzLmV4cGVjdCgnKScpOwpAQCAtMjcyMCwxMSArMjYyOSwxMSBAQCByZXR1cm4gLyoqKioqKi8g
KGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAg
ICAgICB9OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIGFycm93ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGxl
dCBhcnJvdyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5k
aW5nRWxlbWVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVy
aXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJywnKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGV4cHJlc3Npb25zID0gW107CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBl
eHByZXNzaW9ucyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmlz
QXNzaWdubWVudFRhcmdldCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVz
c2lvbnMucHVzaChleHByKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLmxv
b2thaGVhZC50eXBlICE9PSAyIC8qIEVPRiAqLykgewpAQCAtMjczNCw3ICsyNjQzLDcgQEAgcmV0
dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cHJl
c3Npb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByZXNzaW9uc1tpXSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJyb3cgPSB0cnVlOwpAQCAtMjc1NCw3ICsyNjYzLDcgQEAgcmV0dXJuIC8qKioq
KiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc9PicpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBl
eHByZXNzaW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcmVzc2lvbnNbaV0p
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFycm93ID0gdHJ1ZTsKQEAgLTI3OTEsMTQgKzI3MDAsMTQgQEAgcmV0dXJu
IC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4o
dGhpcy5sb29rYWhlYWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IHN5bnRheF8xLlN5
bnRheC5TZXF1ZW5jZUV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwci5leHByZXNzaW9ucy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCBleHByLmV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhw
ci5leHByZXNzaW9uc1tpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
cGFyYW1ldGVycyA9IChleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5TZXF1ZW5jZUV4cHJl
c3Npb24gPyBleHByLmV4cHJlc3Npb25zIDogW2V4cHJdKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IChleHByLnR5cGUgPT09IHN5bnRheF8xLlN5
bnRheC5TZXF1ZW5jZUV4cHJlc3Npb24gPyBleHByLmV4cHJlc3Npb25zIDogW2V4cHJdKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtZXRlcnMsCkBAIC0y
ODExLDE0ICsyNzIwLDE0IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAv
LyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8g
aHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtbGVmdC1oYW5kLXNpZGUtZXhwcmVz
c2lvbnMKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUFyZ3VtZW50cyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcGFyc2VBcmd1bWVudHMoKSB7CiAgICAgICAgICAgICB0aGlzLmV4cGVj
dCgnKCcpOwotICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTsKKyAgICAgICAgICAgIGNvbnN0IGFy
Z3MgPSBbXTsKICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpKSB7CiAgICAgICAgICAg
ICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlz
Lm1hdGNoKCcuLi4nKSA/IHRoaXMucGFyc2VTcHJlYWRFbGVtZW50KCkgOgorICAgICAgICAgICAg
ICAgICAgICBjb25zdCBleHByID0gdGhpcy5tYXRjaCgnLi4uJykgPyB0aGlzLnBhcnNlU3ByZWFk
RWxlbWVudCgpIDoKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNvbGF0ZUNvdmVyR3Jh
bW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwogICAgICAgICAgICAgICAgICAg
ICBhcmdzLnB1c2goZXhwcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcp
JykpIHsKQEAgLTI4MzIsMzAgKzI3NDEsMzAgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHRoaXMuZXhwZWN0KCcpJyk7CiAgICAgICAgICAgICByZXR1cm4gYXJnczsKLSAgICAgICAgfTsK
LSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5pc0lkZW50aWZpZXJOYW1lID0gZnVuY3Rpb24gKHRv
a2VuKSB7CisgICAgICAgIH0KKyAgICAgICAgaXNJZGVudGlmaWVyTmFtZSh0b2tlbikgewogICAg
ICAgICAgICAgcmV0dXJuIHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLyB8fAogICAg
ICAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyB8fAogICAgICAgICAg
ICAgICAgIHRva2VuLnR5cGUgPT09IDEgLyogQm9vbGVhbkxpdGVyYWwgKi8gfHwKICAgICAgICAg
ICAgICAgICB0b2tlbi50eXBlID09PSA1IC8qIE51bGxMaXRlcmFsICovOwotICAgICAgICB9Owot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlSWRlbnRpZmllck5hbWUgPSBmdW5jdGlvbiAo
KSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAg
ICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKyAgICAgICAgfQorICAgICAgICBwYXJz
ZUlkZW50aWZpZXJOYW1lKCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRl
Tm9kZSgpOworICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOwogICAg
ICAgICAgICAgaWYgKCF0aGlzLmlzSWRlbnRpZmllck5hbWUodG9rZW4pKSB7CiAgICAgICAgICAg
ICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVy
KHRva2VuLnZhbHVlKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFy
c2VOZXdFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBpZCA9IHRoaXMucGFyc2VJZGVudGlm
aWVyTmFtZSgpOworICAgICAgICB9CisgICAgICAgIHBhcnNlTmV3RXhwcmVzc2lvbigpIHsKKyAg
ICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGNv
bnN0IGlkID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7CiAgICAgICAgICAgICBhc3NlcnRf
MS5hc3NlcnQoaWQubmFtZSA9PT0gJ25ldycsICdOZXcgZXhwcmVzc2lvbiBtdXN0IHN0YXJ0IHdp
dGggYG5ld2AnKTsKLSAgICAgICAgICAgIHZhciBleHByOworICAgICAgICAgICAgbGV0IGV4cHI7
CiAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLicpKSB7CiAgICAgICAgICAgICAgICAgdGhp
cy5uZXh0VG9rZW4oKTsKICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9
PT0gMyAvKiBJZGVudGlmaWVyICovICYmIHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSAmJiB0
aGlzLmxvb2thaGVhZC52YWx1ZSA9PT0gJ3RhcmdldCcpIHsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIHByb3BlcnR5ID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgTm9kZS5NZXRhUHJvcGVydHkoaWQsIHByb3BlcnR5
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC0yODY2LDI1
ICsyNzc1LDI1IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJw
YWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0
aGlzLmxvb2thaGVhZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICB2YXIgY2FsbGVlID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFy
c2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHRo
aXMubWF0Y2goJygnKSA/IHRoaXMucGFyc2VBcmd1bWVudHMoKSA6IFtdOworICAgICAgICAgICAg
ICAgIGNvbnN0IGNhbGxlZSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlTGVm
dEhhbmRTaWRlRXhwcmVzc2lvbik7CisgICAgICAgICAgICAgICAgY29uc3QgYXJncyA9IHRoaXMu
bWF0Y2goJygnKSA/IHRoaXMucGFyc2VBcmd1bWVudHMoKSA6IFtdOwogICAgICAgICAgICAgICAg
IGV4cHIgPSBuZXcgTm9kZS5OZXdFeHByZXNzaW9uKGNhbGxlZSwgYXJncyk7CiAgICAgICAgICAg
ICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBleHByKTsKLSAgICAg
ICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUFzeW5jQXJndW1lbnQgPSBmdW5j
dGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgYXJnID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHBy
ZXNzaW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VBc3luY0FyZ3VtZW50KCkgeworICAg
ICAgICAgICAgY29uc3QgYXJnID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CiAg
ICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0g
bnVsbDsKICAgICAgICAgICAgIHJldHVybiBhcmc7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VBc3luY0FyZ3VtZW50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
fQorICAgICAgICBwYXJzZUFzeW5jQXJndW1lbnRzKCkgewogICAgICAgICAgICAgdGhpcy5leHBl
Y3QoJygnKTsKLSAgICAgICAgICAgIHZhciBhcmdzID0gW107CisgICAgICAgICAgICBjb25zdCBh
cmdzID0gW107CiAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSkgewogICAgICAgICAg
ICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBleHByID0gdGhp
cy5tYXRjaCgnLi4uJykgPyB0aGlzLnBhcnNlU3ByZWFkRWxlbWVudCgpIDoKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMubWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVNwcmVh
ZEVsZW1lbnQoKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzb2xhdGVDb3Zlckdy
YW1tYXIodGhpcy5wYXJzZUFzeW5jQXJndW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBhcmdz
LnB1c2goZXhwcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHsK
QEAgLTI4OTgsMjkgKzI4MDcsMjkgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVz
KSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMu
ZXhwZWN0KCcpJyk7CiAgICAgICAgICAgICByZXR1cm4gYXJnczsKLSAgICAgICAgfTsKLSAgICAg
ICAgUGFyc2VyLnByb3RvdHlwZS5tYXRjaEltcG9ydENhbGwgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLm1hdGNoS2V5d29yZCgnaW1wb3J0Jyk7CisgICAgICAg
IH0KKyAgICAgICAgbWF0Y2hJbXBvcnRDYWxsKCkgeworICAgICAgICAgICAgbGV0IG1hdGNoID0g
dGhpcy5tYXRjaEtleXdvcmQoJ2ltcG9ydCcpOwogICAgICAgICAgICAgaWYgKG1hdGNoKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zY2FubmVyLnNhdmVTdGF0ZSgpOworICAg
ICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zY2FubmVyLnNhdmVTdGF0ZSgpOwogICAg
ICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTsKLSAgICAgICAgICAgICAg
ICB2YXIgbmV4dCA9IHRoaXMuc2Nhbm5lci5sZXgoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBu
ZXh0ID0gdGhpcy5zY2FubmVyLmxleCgpOwogICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5y
ZXN0b3JlU3RhdGUoc3RhdGUpOwogICAgICAgICAgICAgICAgIG1hdGNoID0gKG5leHQudHlwZSA9
PT0gNyAvKiBQdW5jdHVhdG9yICovKSAmJiAobmV4dC52YWx1ZSA9PT0gJygnKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgfTsKLSAgICAgICAgUGFy
c2VyLnByb3RvdHlwZS5wYXJzZUltcG9ydENhbGwgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICB9CisgICAgICAgIHBhcnNl
SW1wb3J0Q2FsbCgpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnaW1wb3J0Jyk7CiAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JbXBvcnQoKSk7Ci0gICAgICAg
IH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9u
QWxsb3dDYWxsID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0
aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgIHZhciBtYXliZUFzeW5jID0gdGhpcy5tYXRjaENv
bnRleHR1YWxLZXl3b3JkKCdhc3luYycpOwotICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJ
biA9IHRoaXMuY29udGV4dC5hbGxvd0luOworICAgICAgICB9CisgICAgICAgIHBhcnNlTGVmdEhh
bmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpIHsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0VG9r
ZW4gPSB0aGlzLmxvb2thaGVhZDsKKyAgICAgICAgICAgIGNvbnN0IG1heWJlQXN5bmMgPSB0aGlz
Lm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzeW5jJyk7CisgICAgICAgICAgICBjb25zdCBwcmV2
aW91c0FsbG93SW4gPSB0aGlzLmNvbnRleHQuYWxsb3dJbjsKICAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5hbGxvd0luID0gdHJ1ZTsKLSAgICAgICAgICAgIHZhciBleHByOworICAgICAgICAgICAg
bGV0IGV4cHI7CiAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ3N1cGVyJykgJiYg
dGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KSB7CiAgICAgICAgICAgICAgICAgZXhwciA9IHRo
aXMuY3JlYXRlTm9kZSgpOwogICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CkBAIC0y
OTM3LDIwICsyODQ2LDIwIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAv
LyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Jp
bmRpbmdFbGVtZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5p
c0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVj
dCgnLicpOwotICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnBhcnNlSWRl
bnRpZmllck5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlz
LnBhcnNlSWRlbnRpZmllck5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMu
ZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLlN0YXRpY01lbWJl
ckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnKCcpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBhc3luY0Fycm93ID0gbWF5YmVBc3luYyAmJiAoc3RhcnRUb2tlbi5saW5lTnVtYmVyID09
PSB0aGlzLmxvb2thaGVhZC5saW5lTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
YXN5bmNBcnJvdyA9IG1heWJlQXN5bmMgJiYgKHN0YXJ0VG9rZW4ubGluZU51bWJlciA9PT0gdGhp
cy5sb29rYWhlYWQubGluZU51bWJlcik7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4
dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IGFyZ3MgPSBhc3luY0Fycm93ID8gdGhpcy5wYXJzZUFzeW5jQXJndW1lbnRzKCkgOiB0aGlzLnBh
cnNlQXJndW1lbnRzKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBhc3luY0Fy
cm93ID8gdGhpcy5wYXJzZUFzeW5jQXJndW1lbnRzKCkgOiB0aGlzLnBhcnNlQXJndW1lbnRzKCk7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5J
bXBvcnQgJiYgYXJncy5sZW5ndGggIT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkJhZEltcG9ydENhbGxBcml0eSk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMu
ZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkNhbGxFeHByZXNz
aW9uKGV4cHIsIGFyZ3MpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGFzeW5jQXJyb3cgJiYg
dGhpcy5tYXRjaCgnPT4nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihhcmdzW2ldKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7
CkBAIC0yOTY0LDEyICsyODczLDEyIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxl
cykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4
dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB0aGlz
LmV4cGVjdCgnWycpOwotICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmlz
b2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cHJlc3Npb24pOworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNl
RXhwcmVzc2lvbik7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCddJyk7CiAgICAg
ICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0
VG9rZW4pLCBuZXcgTm9kZS5Db21wdXRlZE1lbWJlckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5sb29r
YWhlYWQudHlwZSA9PT0gMTAgLyogVGVtcGxhdGUgKi8gJiYgdGhpcy5sb29rYWhlYWQuaGVhZCkg
ewotICAgICAgICAgICAgICAgICAgICB2YXIgcXVhc2kgPSB0aGlzLnBhcnNlVGVtcGxhdGVMaXRl
cmFsKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1YXNpID0gdGhpcy5wYXJzZVRlbXBs
YXRlTGl0ZXJhbCgpOwogICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0
aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUuVGFnZ2VkVGVtcGxhdGVFeHByZXNz
aW9uKGV4cHIsIHF1YXNpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVs
c2UgewpAQCAtMjk3OCwyNiArMjg4NywyNiBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1v
ZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgfQogICAgICAgICAgICAg
dGhpcy5jb250ZXh0LmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47CiAgICAgICAgICAgICByZXR1
cm4gZXhwcjsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVN1cGVy
ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZVN1cGVyKCkgeworICAgICAgICAgICAgY29uc3Qg
bm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwogICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3Jk
KCdzdXBlcicpOwogICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCdbJykgJiYgIXRoaXMubWF0
Y2goJy4nKSkgewogICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhp
cy5sb29rYWhlYWQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuU3VwZXIoKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB9CisgICAgICAgIHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbigpIHsKICAgICAg
ICAgICAgIGFzc2VydF8xLmFzc2VydCh0aGlzLmNvbnRleHQuYWxsb3dJbiwgJ2NhbGxlZSBvZiBu
ZXcgZXhwcmVzc2lvbiBhbHdheXMgYWxsb3cgaW4ga2V5d29yZC4nKTsKLSAgICAgICAgICAgIHZh
ciBub2RlID0gdGhpcy5zdGFydE5vZGUodGhpcy5sb29rYWhlYWQpOwotICAgICAgICAgICAgdmFy
IGV4cHIgPSAodGhpcy5tYXRjaEtleXdvcmQoJ3N1cGVyJykgJiYgdGhpcy5jb250ZXh0LmluRnVu
Y3Rpb25Cb2R5KSA/IHRoaXMucGFyc2VTdXBlcigpIDoKKyAgICAgICAgICAgIGNvbnN0IG5vZGUg
PSB0aGlzLnN0YXJ0Tm9kZSh0aGlzLmxvb2thaGVhZCk7CisgICAgICAgICAgICBsZXQgZXhwciA9
ICh0aGlzLm1hdGNoS2V5d29yZCgnc3VwZXInKSAmJiB0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJv
ZHkpID8gdGhpcy5wYXJzZVN1cGVyKCkgOgogICAgICAgICAgICAgICAgIHRoaXMuaW5oZXJpdENv
dmVyR3JhbW1hcih0aGlzLm1hdGNoS2V5d29yZCgnbmV3JykgPyB0aGlzLnBhcnNlTmV3RXhwcmVz
c2lvbiA6IHRoaXMucGFyc2VQcmltYXJ5RXhwcmVzc2lvbik7CiAgICAgICAgICAgICB3aGlsZSAo
dHJ1ZSkgewogICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCdbJykpIHsKICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCdbJyk7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBwcm9wZXJ0eSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwcmVz
c2lvbik7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5pc29sYXRl
Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHByZXNzaW9uKTsKICAgICAgICAgICAgICAgICAgICAg
dGhpcy5leHBlY3QoJ10nKTsKICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IE5vZGUuQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uKGV4cHIsIHByb3BlcnR5
KSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzAwNSwxMSArMjkxNCwxMSBAQCByZXR1cm4gLyoq
KioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAg
ICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwogICAgICAg
ICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJy4nKTsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIHByb3BlcnR5ID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlN0YXRp
Y01lbWJlckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gMTAgLyogVGVt
cGxhdGUgKi8gJiYgdGhpcy5sb29rYWhlYWQuaGVhZCkgewotICAgICAgICAgICAgICAgICAgICB2
YXIgcXVhc2kgPSB0aGlzLnBhcnNlVGVtcGxhdGVMaXRlcmFsKCk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHF1YXNpID0gdGhpcy5wYXJzZVRlbXBsYXRlTGl0ZXJhbCgpOwogICAgICAgICAg
ICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5UYWdnZWRUZW1w
bGF0ZUV4cHJlc3Npb24oZXhwciwgcXVhc2kpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgZWxzZSB7CkBAIC0zMDE3LDE0ICsyOTI2LDE0IEBAIHJldHVybiAvKioqKioqLyAo
ZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAgIH07Cisg
ICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMt
dXBkYXRlLWV4cHJlc3Npb25zCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VVcGRhdGVF
eHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGV4cHI7Ci0gICAgICAg
ICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOworICAgICAgICBwYXJzZVVwZGF0
ZUV4cHJlc3Npb24oKSB7CisgICAgICAgICAgICBsZXQgZXhwcjsKKyAgICAgICAgICAgIGNvbnN0
IHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNo
KCcrKycpIHx8IHRoaXMubWF0Y2goJy0tJykpIHsKLSAgICAgICAgICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pOwotICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9
IHRoaXMubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3Rh
cnROb2RlKHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5u
ZXh0VG9rZW4oKTsKICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFt
bWFyKHRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24pOwogICAgICAgICAgICAgICAgIGlmICh0aGlz
LmNvbnRleHQuc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZp
ZXIgJiYgdGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkgewogICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJp
Y3RMSFNQcmVmaXgpOwpAQCAtMzAzMiw3ICsyOTQxLDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5j
dGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBpZiAo
IXRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQpIHsKICAgICAgICAgICAgICAgICAgICAg
dGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdu
bWVudCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhciBwcmVmaXggPSB0
cnVlOworICAgICAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVXBkYXRlRXhwcmVzc2lvbih0
b2tlbi52YWx1ZSwgZXhwciwgcHJlZml4KSk7CiAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0
LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHRoaXMuY29udGV4
dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CkBAIC0zMDQ5LDI3ICsyOTU4LDI3IEBAIHJldHVy
biAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRl
eHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIG9wZXJhdG9yID0gdGhpcy5uZXh0VG9rZW4oKS52YWx1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBwcmVmaXggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG9wZXJhdG9yID0gdGhpcy5uZXh0VG9rZW4oKS52YWx1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAg
ZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2Rl
LlVwZGF0ZUV4cHJlc3Npb24ob3BlcmF0b3IsIGV4cHIsIHByZWZpeCkpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmV0dXJuIGV4cHI7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90
YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdW5hcnktb3BlcmF0b3JzCi0gICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VBd2FpdEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICBwYXJzZUF3YWl0RXhw
cmVzc2lvbigpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
ICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICB2YXIgYXJndW1lbnQg
PSB0aGlzLnBhcnNlVW5hcnlFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBjb25zdCBhcmd1bWVu
dCA9IHRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKICAgICAgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkF3YWl0RXhwcmVzc2lvbihhcmd1bWVudCkpOwotICAg
ICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVW5hcnlFeHByZXNzaW9uID0g
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGV4cHI7CisgICAgICAgIH0KKyAgICAgICAg
cGFyc2VVbmFyeUV4cHJlc3Npb24oKSB7CisgICAgICAgICAgICBsZXQgZXhwcjsKICAgICAgICAg
ICAgIGlmICh0aGlzLm1hdGNoKCcrJykgfHwgdGhpcy5tYXRjaCgnLScpIHx8IHRoaXMubWF0Y2go
J34nKSB8fCB0aGlzLm1hdGNoKCchJykgfHwKICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoS2V5
d29yZCgnZGVsZXRlJykgfHwgdGhpcy5tYXRjaEtleXdvcmQoJ3ZvaWQnKSB8fCB0aGlzLm1hdGNo
S2V5d29yZCgndHlwZW9mJykpIHsKLSAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuc3Rh
cnROb2RlKHRoaXMubG9va2FoZWFkKTsKLSAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlz
Lm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXJ0Tm9k
ZSh0aGlzLmxvb2thaGVhZCk7CisgICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLm5l
eHRUb2tlbigpOwogICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1t
YXIodGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lvbik7CiAgICAgICAgICAgICAgICAgZXhwciA9IHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBl
eHByKSk7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgZXhwci5v
cGVyYXRvciA9PT0gJ2RlbGV0ZScgJiYgZXhwci5hcmd1bWVudC50eXBlID09PSBzeW50YXhfMS5T
eW50YXguSWRlbnRpZmllcikgewpAQCAtMzA4NSwyMCArMjk5NCwyMCBAQCByZXR1cm4gLyoqKioq
Ki8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAg
ICAgIGV4cHIgPSB0aGlzLnBhcnNlVXBkYXRlRXhwcmVzc2lvbigpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90
b3R5cGUucGFyc2VFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAgICAgdmFy
IGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lv
bik7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24oKSB7
CisgICAgICAgICAgICBjb25zdCBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisgICAgICAg
ICAgICBsZXQgZXhwciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlVW5hcnlF
eHByZXNzaW9uKTsKICAgICAgICAgICAgIGlmIChleHByLnR5cGUgIT09IHN5bnRheF8xLlN5bnRh
eC5VbmFyeUV4cHJlc3Npb24gJiYgdGhpcy5tYXRjaCgnKionKSkgewogICAgICAgICAgICAgICAg
IHRoaXMubmV4dFRva2VuKCk7CiAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdu
bWVudFRhcmdldCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRp
bmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgdmFyIGxlZnQgPSBleHByOwotICAg
ICAgICAgICAgICAgIHZhciByaWdodCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBh
cnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICBjb25zdCBsZWZ0
ID0gZXhwcjsKKyAgICAgICAgICAgICAgICBjb25zdCByaWdodCA9IHRoaXMuaXNvbGF0ZUNvdmVy
R3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKTsKICAgICAgICAgICAg
ICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3
IE5vZGUuQmluYXJ5RXhwcmVzc2lvbignKionLCBsZWZ0LCByaWdodCkpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAg
ICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZXhwLW9wZXJhdG9yCiAg
ICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW11bHRpcGxpY2F0
aXZlLW9wZXJhdG9ycwogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIv
I3NlYy1hZGRpdGl2ZS1vcGVyYXRvcnMKQEAgLTMxMDcsOSArMzAxNiw5IEBAIHJldHVybiAvKioq
KioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgIC8v
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWVxdWFsaXR5LW9wZXJhdG9ycwog
ICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1iaW5hcnktYml0
d2lzZS1vcGVyYXRvcnMKICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYy
LyNzZWMtYmluYXJ5LWxvZ2ljYWwtb3BlcmF0b3JzCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUu
YmluYXJ5UHJlY2VkZW5jZSA9IGZ1bmN0aW9uICh0b2tlbikgewotICAgICAgICAgICAgdmFyIG9w
ID0gdG9rZW4udmFsdWU7Ci0gICAgICAgICAgICB2YXIgcHJlY2VkZW5jZTsKKyAgICAgICAgYmlu
YXJ5UHJlY2VkZW5jZSh0b2tlbikgeworICAgICAgICAgICAgY29uc3Qgb3AgPSB0b2tlbi52YWx1
ZTsKKyAgICAgICAgICAgIGxldCBwcmVjZWRlbmNlOwogICAgICAgICAgICAgaWYgKHRva2VuLnR5
cGUgPT09IDcgLyogUHVuY3R1YXRvciAqLykgewogICAgICAgICAgICAgICAgIHByZWNlZGVuY2Ug
PSB0aGlzLm9wZXJhdG9yUHJlY2VkZW5jZVtvcF0gfHwgMDsKICAgICAgICAgICAgIH0KQEAgLTMx
MjAsMjEgKzMwMjksMjEgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8v
IHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBwcmVjZWRlbmNlID0gMDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBwcmVjZWRlbmNlOwotICAgICAgICB9OwotICAg
ICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQmluYXJ5RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAg
ICAgICB2YXIgZXhwciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25l
bnRpYXRpb25FeHByZXNzaW9uKTsKLSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2Fo
ZWFkOwotICAgICAgICAgICAgdmFyIHByZWMgPSB0aGlzLmJpbmFyeVByZWNlZGVuY2UodG9rZW4p
OworICAgICAgICB9CisgICAgICAgIHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpIHsKKyAgICAgICAg
ICAgIGNvbnN0IHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKyAgICAgICAgICAgIGxldCBl
eHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHBvbmVudGlhdGlvbkV4
cHJlc3Npb24pOworICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKyAg
ICAgICAgICAgIGxldCBwcmVjID0gdGhpcy5iaW5hcnlQcmVjZWRlbmNlKHRva2VuKTsKICAgICAg
ICAgICAgIGlmIChwcmVjID4gMCkgewogICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7
CiAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgdmFyIG1hcmtlcnMgPSBbc3RhcnRUb2tlbiwgdGhpcy5sb29rYWhl
YWRdOwotICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gZXhwcjsKLSAgICAgICAgICAgICAgICB2
YXIgcmlnaHQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50aWF0
aW9uRXhwcmVzc2lvbik7Ci0gICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gW2xlZnQsIHRva2Vu
LnZhbHVlLCByaWdodF07Ci0gICAgICAgICAgICAgICAgdmFyIHByZWNlZGVuY2VzID0gW3ByZWNd
OworICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlcnMgPSBbc3RhcnRUb2tlbiwgdGhpcy5sb29r
YWhlYWRdOworICAgICAgICAgICAgICAgIGxldCBsZWZ0ID0gZXhwcjsKKyAgICAgICAgICAgICAg
ICBsZXQgcmlnaHQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50
aWF0aW9uRXhwcmVzc2lvbik7CisgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2sgPSBbbGVmdCwg
dG9rZW4udmFsdWUsIHJpZ2h0XTsKKyAgICAgICAgICAgICAgICBjb25zdCBwcmVjZWRlbmNlcyA9
IFtwcmVjXTsKICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAg
ICAgICBwcmVjID0gdGhpcy5iaW5hcnlQcmVjZWRlbmNlKHRoaXMubG9va2FoZWFkKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHByZWMgPD0gMCkgewpAQCAtMzE0MywxMSArMzA1MiwxMSBAQCBy
ZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAog
ICAgICAgICAgICAgICAgICAgICAvLyBSZWR1Y2U6IG1ha2UgYSBiaW5hcnkgZXhwcmVzc2lvbiBm
cm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuCiAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICgoc3RhY2subGVuZ3RoID4gMikgJiYgKHByZWMgPD0gcHJlY2VkZW5jZXNbcHJlY2VkZW5jZXMu
bGVuZ3RoIC0gMV0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IHN0YWNrLnBv
cCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdG9yID0gc3RhY2sucG9wKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRvciA9IHN0YWNrLnBvcCgpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkZW5jZXMucG9wKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0ID0gc3RhY2sucG9wKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBt
YXJrZXJzLnBvcCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0
YXJ0Tm9kZShtYXJrZXJzW21hcmtlcnMubGVuZ3RoIC0gMV0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhcnROb2RlKG1hcmtlcnNbbWFya2Vycy5sZW5ndGgg
LSAxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpKSk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgLy8gU2hpZnQuCkBA
IC0zMTU3LDQxICszMDY2LDQxIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykg
eyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGhp
cy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24p
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gRmluYWwgcmVkdWNlIHRv
IGNsZWFuLXVwIHRoZSBzdGFjay4KLSAgICAgICAgICAgICAgICB2YXIgaSA9IHN0YWNrLmxlbmd0
aCAtIDE7CisgICAgICAgICAgICAgICAgbGV0IGkgPSBzdGFjay5sZW5ndGggLSAxOwogICAgICAg
ICAgICAgICAgIGV4cHIgPSBzdGFja1tpXTsKLSAgICAgICAgICAgICAgICB2YXIgbGFzdE1hcmtl
ciA9IG1hcmtlcnMucG9wKCk7CisgICAgICAgICAgICAgICAgbGV0IGxhc3RNYXJrZXIgPSBtYXJr
ZXJzLnBvcCgpOwogICAgICAgICAgICAgICAgIHdoaWxlIChpID4gMSkgewotICAgICAgICAgICAg
ICAgICAgICB2YXIgbWFya2VyID0gbWFya2Vycy5wb3AoKTsKLSAgICAgICAgICAgICAgICAgICAg
dmFyIGxhc3RMaW5lU3RhcnQgPSBsYXN0TWFya2VyICYmIGxhc3RNYXJrZXIubGluZVN0YXJ0Owot
ICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKG1hcmtlciwgbGFz
dExpbmVTdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvciA9IHN0YWNrW2kg
LSAxXTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFya2VyID0gbWFya2Vycy5wb3AoKTsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdExpbmVTdGFydCA9IGxhc3RNYXJrZXIgJiYg
bGFzdE1hcmtlci5saW5lU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0
aGlzLnN0YXJ0Tm9kZShtYXJrZXIsIGxhc3RMaW5lU3RhcnQpOworICAgICAgICAgICAgICAgICAg
ICBjb25zdCBvcGVyYXRvciA9IHN0YWNrW2kgLSAxXTsKICAgICAgICAgICAgICAgICAgICAgZXhw
ciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRv
ciwgc3RhY2tbaSAtIDJdLCBleHByKSk7CiAgICAgICAgICAgICAgICAgICAgIGkgLT0gMjsKICAg
ICAgICAgICAgICAgICAgICAgbGFzdE1hcmtlciA9IG1hcmtlcjsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZXhwcjsKLSAgICAgICAgfTsKKyAg
ICAgICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1j
b25kaXRpb25hbC1vcGVyYXRvcgotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQ29uZGl0
aW9uYWxFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHN0YXJ0VG9r
ZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5pbmhlcml0
Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VCaW5hcnlFeHByZXNzaW9uKTsKKyAgICAgICAgcGFyc2VD
b25kaXRpb25hbEV4cHJlc3Npb24oKSB7CisgICAgICAgICAgICBjb25zdCBzdGFydFRva2VuID0g
dGhpcy5sb29rYWhlYWQ7CisgICAgICAgICAgICBsZXQgZXhwciA9IHRoaXMuaW5oZXJpdENvdmVy
R3JhbW1hcih0aGlzLnBhcnNlQmluYXJ5RXhwcmVzc2lvbik7CiAgICAgICAgICAgICBpZiAodGhp
cy5tYXRjaCgnPycpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAg
ICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0LmFsbG93SW47Cisg
ICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0LmFsbG93
SW47CiAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSB0cnVlOwotICAgICAg
ICAgICAgICAgIHZhciBjb25zZXF1ZW50ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMu
cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisgICAgICAgICAgICAgICAgY29uc3QgY29uc2Vx
dWVudCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24pOwogICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gcHJldmlvdXNB
bGxvd0luOwogICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc6Jyk7Ci0gICAgICAgICAgICAg
ICAgdmFyIGFsdGVybmF0ZSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgIGNvbnN0IGFsdGVybmF0ZSA9IHRo
aXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwog
ICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0
VG9rZW4pLCBuZXcgTm9kZS5Db25kaXRpb25hbEV4cHJlc3Npb24oZXhwciwgY29uc2VxdWVudCwg
YWx0ZXJuYXRlKSk7CiAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRh
cmdldCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVt
ZW50ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZXhwcjsKLSAg
ICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2Vj
bWEyNjIvI3NlYy1hc3NpZ25tZW50LW9wZXJhdG9ycwotICAgICAgICBQYXJzZXIucHJvdG90eXBl
LmNoZWNrUGF0dGVyblBhcmFtID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmFtKSB7CisgICAgICAg
IGNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtKSB7CiAgICAgICAgICAgICBzd2l0Y2gg
KHBhcmFtLnR5cGUpIHsKICAgICAgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5JZGVu
dGlmaWVyOgogICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlUGFyYW0ob3B0aW9ucywg
cGFyYW0sIHBhcmFtLm5hbWUpOwpAQCAtMzIwMywxNSArMzExMiwxNSBAQCByZXR1cm4gLyoqKioq
Ki8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAg
ICAgICAgICB0aGlzLmNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtLmxlZnQpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5
bnRheC5BcnJheVBhdHRlcm46Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcGFyYW0uZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBwYXJhbS5lbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhcmFtLmVsZW1lbnRzW2ldICE9PSBudWxsKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJh
bS5lbGVtZW50c1tpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBzeW50YXhfMS5TeW50YXguT2JqZWN0UGF0dGVybjoKLSAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBwYXJhbS5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBwYXJhbS5wcm9wZXJ0aWVzW2ldOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtLnByb3BlcnRpZXMubGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gcGFy
YW0ucHJvcGVydGllc1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tQYXR0
ZXJuUGFyYW0ob3B0aW9ucywgKHByb3BlcnR5LnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5SZXN0
RWxlbWVudCkgPyBwcm9wZXJ0eSA6IHByb3BlcnR5LnZhbHVlKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTMyMTksMTEgKzMxMjgsMTEgQEAg
cmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBv
cHRpb25zLnNpbXBsZSA9IG9wdGlvbnMuc2ltcGxlICYmIChwYXJhbSBpbnN0YW5jZW9mIE5vZGUu
SWRlbnRpZmllcik7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucmVpbnRl
cnByZXRBc0NvdmVyRm9ybWFsc0xpc3QgPSBmdW5jdGlvbiAoZXhwcikgewotICAgICAgICAgICAg
dmFyIHBhcmFtcyA9IFtleHByXTsKLSAgICAgICAgICAgIHZhciBvcHRpb25zOwotICAgICAgICAg
ICAgdmFyIGFzeW5jQXJyb3cgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZWludGVycHJl
dEFzQ292ZXJGb3JtYWxzTGlzdChleHByKSB7CisgICAgICAgICAgICBsZXQgcGFyYW1zID0gW2V4
cHJdOworICAgICAgICAgICAgbGV0IG9wdGlvbnM7CisgICAgICAgICAgICBsZXQgYXN5bmNBcnJv
dyA9IGZhbHNlOwogICAgICAgICAgICAgc3dpdGNoIChleHByLnR5cGUpIHsKICAgICAgICAgICAg
ICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyOgogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTMyMzgsOCArMzE0Nyw4IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24o
bW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgc2ltcGxlOiB0
cnVlLAogICAgICAgICAgICAgICAgIHBhcmFtU2V0OiB7fQogICAgICAgICAgICAgfTsKLSAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIHBhcmFtID0gcGFyYW1zW2ldOworICAgICAgICAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBwYXJh
bSA9IHBhcmFtc1tpXTsKICAgICAgICAgICAgICAgICBpZiAocGFyYW0udHlwZSA9PT0gc3ludGF4
XzEuU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChw
YXJhbS5yaWdodC50eXBlID09PSBzeW50YXhfMS5TeW50YXguWWllbGRFeHByZXNzaW9uKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0ucmlnaHQuYXJndW1lbnQpIHsKQEAgLTMy
NTgsMTUgKzMxNjcsMTUgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8v
IHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBwYXJhbTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0IHx8ICF0aGlz
LmNvbnRleHQuYWxsb3dZaWVsZCkgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcGFyYW1zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbSA9
IHBhcmFtc1tpXTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtcy5s
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbSA9IHBhcmFtc1tp
XTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09IHN5bnRheF8xLlN5bnRh
eC5ZaWVsZEV4cHJlc3Npb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dV
bmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG9wdGlvbnMu
bWVzc2FnZSA9PT0gbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGUpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmNvbnRleHQuc3RyaWN0ID8gb3B0aW9ucy5zdHJp
Y3RlZCA6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkOworICAgICAgICAgICAgICAgIGNvbnN0IHRv
a2VuID0gdGhpcy5jb250ZXh0LnN0cmljdCA/IG9wdGlvbnMuc3RyaWN0ZWQgOiBvcHRpb25zLmZp
cnN0UmVzdHJpY3RlZDsKICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2Vu
KHRva2VuLCBvcHRpb25zLm1lc3NhZ2UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0
dXJuIHsKQEAgLTMyNzYsMTkgKzMxODUsMTkgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBmaXJzdFJlc3Ry
aWN0ZWQ6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLAogICAgICAgICAgICAgICAgIG1lc3NhZ2U6
IG9wdGlvbnMubWVzc2FnZQogICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFy
c2VyLnByb3RvdHlwZS5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgdmFyIGV4cHI7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VBc3NpZ25tZW50
RXhwcmVzc2lvbigpIHsKKyAgICAgICAgICAgIGxldCBleHByOwogICAgICAgICAgICAgaWYgKCF0
aGlzLmNvbnRleHQuYWxsb3dZaWVsZCAmJiB0aGlzLm1hdGNoS2V5d29yZCgneWllbGQnKSkgewog
ICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLnBhcnNlWWllbGRFeHByZXNzaW9uKCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgc3RhcnRU
b2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHN0YXJ0
VG9rZW47CisgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFk
OworICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9IHN0YXJ0VG9rZW47CiAgICAgICAgICAgICAg
ICAgZXhwciA9IHRoaXMucGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKTsKICAgICAgICAgICAg
ICAgICBpZiAodG9rZW4udHlwZSA9PT0gMyAvKiBJZGVudGlmaWVyICovICYmICh0b2tlbi5saW5l
TnVtYmVyID09PSB0aGlzLmxvb2thaGVhZC5saW5lTnVtYmVyKSAmJiB0b2tlbi52YWx1ZSA9PT0g
J2FzeW5jJykgewogICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9
PT0gMyAvKiBJZGVudGlmaWVyICovIHx8IHRoaXMubWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJnID0gdGhpcy5wYXJzZVByaW1hcnlFeHByZXNz
aW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmcgPSB0aGlzLnBhcnNlUHJp
bWFyeUV4cHJlc3Npb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnBy
ZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGFyZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBleHBy
ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxh
Y2VIb2xkZXIsCkBAIC0zMzAxLDI1ICszMjEwLDI1IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rp
b24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycm93LWZ1bmN0aW9uLWRlZmlu
aXRpb25zCiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJn
ZXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0Vs
ZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGlzQXN5bmMgPSBleHByLmFz
eW5jOwotICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHRoaXMucmVpbnRlcnByZXRBc0Nv
dmVyRm9ybWFsc0xpc3QoZXhwcik7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQXN5bmMg
PSBleHByLmFzeW5jOworICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5yZWlu
dGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChleHByKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGxpc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc0xpbmVUZXJtaW5h
dG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0
ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFt
ZUVycm9yID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c1N0cmlj
dCA9IHRoaXMuY29udGV4dC5zdHJpY3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJl
dmlvdXNBbGxvd1N0cmljdERpcmVjdGl2ZSA9IHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVj
dGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzU3RyaWN0ID0gdGhp
cy5jb250ZXh0LnN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3Vz
QWxsb3dTdHJpY3REaXJlY3RpdmUgPSB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU7
CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3Rp
dmUgPSBsaXN0LnNpbXBsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0Fs
bG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBwcmV2aW91c0F3YWl0ID0gdGhpcy5jb250ZXh0LmF3YWl0OworICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93
WWllbGQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0F3YWl0ID0gdGhp
cy5jb250ZXh0LmF3YWl0OwogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFs
bG93WWllbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmF3
YWl0ID0gaXNBc3luYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5z
dGFydE5vZGUoc3RhcnRUb2tlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2Rl
ID0gdGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmV4cGVjdCgnPT4nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib2R5ID0gdm9p
ZCAwOworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJvZHk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5tYXRjaCgneycpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHByZXZpb3VzQWxsb3dJbiA9IHRoaXMuY29udGV4dC5hbGxvd0luOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQWxsb3dJbiA9IHRoaXMuY29udGV4dC5h
bGxvd0luOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0lu
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gdGhpcy5wYXJzZUZ1
bmN0aW9uU291cmNlRWxlbWVudHMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmNvbnRleHQuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKQEAgLTMzMjcsNyArMzIzNiw3IEBA
IHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFw
CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib2R5ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50
RXhwcmVzc2lvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgZXhwcmVzc2lvbiA9IGJvZHkudHlwZSAhPT0gc3ludGF4XzEuU3ludGF4LkJs
b2NrU3RhdGVtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9
IGJvZHkudHlwZSAhPT0gc3ludGF4XzEuU3ludGF4LkJsb2NrU3RhdGVtZW50OwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgbGlzdC5maXJzdFJlc3Ry
aWN0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3Rl
ZFRva2VuKGxpc3QuZmlyc3RSZXN0cmljdGVkLCBsaXN0Lm1lc3NhZ2UpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtMzM0OCw3ICszMjU3LDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5j
dGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTEhT
SW5Bc3NpZ25tZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gc3ludGF4
XzEuU3ludGF4LklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
aWQgPSBleHByOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gZXhwcjsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3Rl
ZFdvcmQoaWQubmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50
b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RM
SFNBc3NpZ25tZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0zMzY0LDIx
ICszMjczLDIxIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJw
YWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJl
dEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3IgPSB0b2tlbi52YWx1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciByaWdodCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBh
cnNlQXNzaWdubWVudEV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
b3BlcmF0b3IgPSB0b2tlbi52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJp
Z2h0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlz
LnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUuQXNzaWdubWVudEV4cHJlc3Npb24ob3Bl
cmF0b3IsIGV4cHIsIHJpZ2h0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRl
eHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybiBleHByOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMz
OS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNvbW1hLW9wZXJhdG9yCi0gICAgICAgIFBhcnNlci5w
cm90b3R5cGUucGFyc2VFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFy
IHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgIHZhciBleHByID0gdGhp
cy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7Cisg
ICAgICAgIHBhcnNlRXhwcmVzc2lvbigpIHsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0VG9rZW4g
PSB0aGlzLmxvb2thaGVhZDsKKyAgICAgICAgICAgIGxldCBleHByID0gdGhpcy5pc29sYXRlQ292
ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CiAgICAgICAgICAgICBp
ZiAodGhpcy5tYXRjaCgnLCcpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGV4cHJlc3Npb25zID0g
W107CisgICAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBbXTsKICAgICAgICAgICAg
ICAgICBleHByZXNzaW9ucy5wdXNoKGV4cHIpOwogICAgICAgICAgICAgICAgIHdoaWxlICh0aGlz
Lmxvb2thaGVhZC50eXBlICE9PSAyIC8qIEVPRiAqLykgewogICAgICAgICAgICAgICAgICAgICBp
ZiAoIXRoaXMubWF0Y2goJywnKSkgewpAQCAtMzM5MCwxMCArMzI5OSwxMCBAQCByZXR1cm4gLyoq
KioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAg
ICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBu
ZXcgTm9kZS5TZXF1ZW5jZUV4cHJlc3Npb24oZXhwcmVzc2lvbnMpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBleHByOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAg
IC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWJsb2NrCi0gICAgICAgIFBh
cnNlci5wcm90b3R5cGUucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHZhciBzdGF0ZW1lbnQ7CisgICAgICAgIHBhcnNlU3RhdGVtZW50TGlzdEl0ZW0o
KSB7CisgICAgICAgICAgICBsZXQgc3RhdGVtZW50OwogICAgICAgICAgICAgdGhpcy5jb250ZXh0
LmlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNC
aW5kaW5nRWxlbWVudCA9IHRydWU7CiAgICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlw
ZSA9PT0gNCAvKiBLZXl3b3JkICovKSB7CkBAIC0zNDM2LDExICszMzQ1LDExIEBAIHJldHVybiAv
KioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAg
ICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIHN0YXRlbWVudDsKLSAgICAgICAgfTsKLSAgICAgICAgUGFy
c2VyLnByb3RvdHlwZS5wYXJzZUJsb2NrID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUJsb2Nr
KCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwogICAgICAg
ICAgICAgdGhpcy5leHBlY3QoJ3snKTsKLSAgICAgICAgICAgIHZhciBibG9jayA9IFtdOworICAg
ICAgICAgICAgY29uc3QgYmxvY2sgPSBbXTsKICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJ30nKSkgewogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTM0NDksMTggKzMzNTgsMTggQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlv
bihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHRoaXMuZXhwZWN0KCd9Jyk7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShu
b2RlLCBuZXcgTm9kZS5CbG9ja1N0YXRlbWVudChibG9jaykpOwotICAgICAgICB9OworICAgICAg
ICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxldC1h
bmQtY29uc3QtZGVjbGFyYXRpb25zCi0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VMZXhp
Y2FsQmluZGluZyA9IGZ1bmN0aW9uIChraW5kLCBvcHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIg
bm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtdOwot
ICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFyYW1zLCBraW5kKTsKKyAg
ICAgICAgcGFyc2VMZXhpY2FsQmluZGluZyhraW5kLCBvcHRpb25zKSB7CisgICAgICAgICAgICBj
b25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25zdCBwYXJhbXMg
PSBbXTsKKyAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFyYW1zLCBr
aW5kKTsKICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGlkLnR5cGUgPT09
IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
c2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAg
IHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFZhck5hbWUpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBpbml0ID0g
bnVsbDsKKyAgICAgICAgICAgIGxldCBpbml0ID0gbnVsbDsKICAgICAgICAgICAgIGlmIChraW5k
ID09PSAnY29uc3QnKSB7CiAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoS2V5d29yZCgn
aW4nKSAmJiAhdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdvZicpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCc9JykpIHsKQEAgLTM0NzcsNDUgKzMzODYsNDUgQEAg
cmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAK
ICAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0b3IoaWQsIGlu
aXQpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUJpbmRpbmdM
aXN0ID0gZnVuY3Rpb24gKGtpbmQsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgIHZhciBsaXN0ID0g
W3RoaXMucGFyc2VMZXhpY2FsQmluZGluZyhraW5kLCBvcHRpb25zKV07CisgICAgICAgIH0KKyAg
ICAgICAgcGFyc2VCaW5kaW5nTGlzdChraW5kLCBvcHRpb25zKSB7CisgICAgICAgICAgICBjb25z
dCBsaXN0ID0gW3RoaXMucGFyc2VMZXhpY2FsQmluZGluZyhraW5kLCBvcHRpb25zKV07CiAgICAg
ICAgICAgICB3aGlsZSAodGhpcy5tYXRjaCgnLCcpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5u
ZXh0VG9rZW4oKTsKICAgICAgICAgICAgICAgICBsaXN0LnB1c2godGhpcy5wYXJzZUxleGljYWxC
aW5kaW5nKGtpbmQsIG9wdGlvbnMpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVy
biBsaXN0OwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLmlzTGV4aWNhbERl
Y2xhcmF0aW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5z
Y2FubmVyLnNhdmVTdGF0ZSgpOworICAgICAgICB9CisgICAgICAgIGlzTGV4aWNhbERlY2xhcmF0
aW9uKCkgeworICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnNjYW5uZXIuc2F2ZVN0YXRl
KCk7CiAgICAgICAgICAgICB0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7Ci0gICAgICAgICAg
ICB2YXIgbmV4dCA9IHRoaXMuc2Nhbm5lci5sZXgoKTsKKyAgICAgICAgICAgIGNvbnN0IG5leHQg
PSB0aGlzLnNjYW5uZXIubGV4KCk7CiAgICAgICAgICAgICB0aGlzLnNjYW5uZXIucmVzdG9yZVN0
YXRlKHN0YXRlKTsKICAgICAgICAgICAgIHJldHVybiAobmV4dC50eXBlID09PSAzIC8qIElkZW50
aWZpZXIgKi8pIHx8CiAgICAgICAgICAgICAgICAgKG5leHQudHlwZSA9PT0gNyAvKiBQdW5jdHVh
dG9yICovICYmIG5leHQudmFsdWUgPT09ICdbJykgfHwKICAgICAgICAgICAgICAgICAobmV4dC50
eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gJiYgbmV4dC52YWx1ZSA9PT0gJ3snKSB8fAogICAg
ICAgICAgICAgICAgIChuZXh0LnR5cGUgPT09IDQgLyogS2V5d29yZCAqLyAmJiBuZXh0LnZhbHVl
ID09PSAnbGV0JykgfHwKICAgICAgICAgICAgICAgICAobmV4dC50eXBlID09PSA0IC8qIEtleXdv
cmQgKi8gJiYgbmV4dC52YWx1ZSA9PT0gJ3lpZWxkJyk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBh
cnNlci5wcm90b3R5cGUucGFyc2VMZXhpY2FsRGVjbGFyYXRpb24gPSBmdW5jdGlvbiAob3B0aW9u
cykgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAg
ICAgIHZhciBraW5kID0gdGhpcy5uZXh0VG9rZW4oKS52YWx1ZTsKKyAgICAgICAgfQorICAgICAg
ICBwYXJzZUxleGljYWxEZWNsYXJhdGlvbihvcHRpb25zKSB7CisgICAgICAgICAgICBjb25zdCBu
b2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25zdCBraW5kID0gdGhpcy5u
ZXh0VG9rZW4oKS52YWx1ZTsKICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChraW5kID09PSAn
bGV0JyB8fCBraW5kID09PSAnY29uc3QnLCAnTGV4aWNhbCBkZWNsYXJhdGlvbiBtdXN0IGJlIGVp
dGhlciBsZXQgb3IgY29uc3QnKTsKLSAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbnMgPSB0aGlz
LnBhcnNlQmluZGluZ0xpc3Qoa2luZCwgb3B0aW9ucyk7CisgICAgICAgICAgICBjb25zdCBkZWNs
YXJhdGlvbnMgPSB0aGlzLnBhcnNlQmluZGluZ0xpc3Qoa2luZCwgb3B0aW9ucyk7CiAgICAgICAg
ICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBr
aW5kKSk7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5Lmdp
dGh1Yi5pby9lY21hMjYyLyNzZWMtZGVzdHJ1Y3R1cmluZy1iaW5kaW5nLXBhdHRlcm5zCi0gICAg
ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VCaW5kaW5nUmVzdEVsZW1lbnQgPSBmdW5jdGlvbiAo
cGFyYW1zLCBraW5kKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OworICAgICAgICBwYXJzZUJpbmRpbmdSZXN0RWxlbWVudChwYXJhbXMsIGtpbmQpIHsKKyAgICAg
ICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAgICAgICAgICAgIHRoaXMu
ZXhwZWN0KCcuLi4nKTsKLSAgICAgICAgICAgIHZhciBhcmcgPSB0aGlzLnBhcnNlUGF0dGVybihw
YXJhbXMsIGtpbmQpOworICAgICAgICAgICAgY29uc3QgYXJnID0gdGhpcy5wYXJzZVBhdHRlcm4o
cGFyYW1zLCBraW5kKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBOb2RlLlJlc3RFbGVtZW50KGFyZykpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJv
dG90eXBlLnBhcnNlQXJyYXlQYXR0ZXJuID0gZnVuY3Rpb24gKHBhcmFtcywga2luZCkgewotICAg
ICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgfQorICAgICAg
ICBwYXJzZUFycmF5UGF0dGVybihwYXJhbXMsIGtpbmQpIHsKKyAgICAgICAgICAgIGNvbnN0IG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCdbJyk7Ci0g
ICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTsKKyAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRz
ID0gW107CiAgICAgICAgICAgICB3aGlsZSAoIXRoaXMubWF0Y2goJ10nKSkgewogICAgICAgICAg
ICAgICAgIGlmICh0aGlzLm1hdGNoKCcsJykpIHsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5u
ZXh0VG9rZW4oKTsKQEAgLTM1MzYsMjMgKzM0NDUsMjMgQEAgcmV0dXJuIC8qKioqKiovIChmdW5j
dGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHRoaXMuZXhwZWN0KCddJyk7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5BcnJheVBhdHRlcm4oZWxlbWVudHMpKTsKLSAgICAgICAgfTsKLSAg
ICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVByb3BlcnR5UGF0dGVybiA9IGZ1bmN0aW9uIChw
YXJhbXMsIGtpbmQpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
Ci0gICAgICAgICAgICB2YXIgY29tcHV0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBzaG9y
dGhhbmQgPSBmYWxzZTsKLSAgICAgICAgICAgIHZhciBtZXRob2QgPSBmYWxzZTsKLSAgICAgICAg
ICAgIHZhciBrZXk7Ci0gICAgICAgICAgICB2YXIgdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAg
cGFyc2VQcm9wZXJ0eVBhdHRlcm4ocGFyYW1zLCBraW5kKSB7CisgICAgICAgICAgICBjb25zdCBu
b2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBsZXQgY29tcHV0ZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGxldCBzaG9ydGhhbmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGNvbnN0
IG1ldGhvZCA9IGZhbHNlOworICAgICAgICAgICAgbGV0IGtleTsKKyAgICAgICAgICAgIGxldCB2
YWx1ZTsKICAgICAgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSAzIC8qIElkZW50
aWZpZXIgKi8pIHsKLSAgICAgICAgICAgICAgICB2YXIga2V5VG9rZW4gPSB0aGlzLmxvb2thaGVh
ZDsKKyAgICAgICAgICAgICAgICBjb25zdCBrZXlUb2tlbiA9IHRoaXMubG9va2FoZWFkOwogICAg
ICAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLSAgICAg
ICAgICAgICAgICB2YXIgaW5pdCA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWRlbnRp
ZmllcihrZXlUb2tlbi52YWx1ZSkpOworICAgICAgICAgICAgICAgIGNvbnN0IGluaXQgPSB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIoa2V5VG9rZW4udmFsdWUpKTsKICAg
ICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7CiAgICAgICAgICAgICAgICAgICAg
IHBhcmFtcy5wdXNoKGtleVRva2VuKTsKICAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbigpOwogICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZmluYWxpemUodGhpcy5z
dGFydE5vZGUoa2V5VG9rZW4pLCBuZXcgTm9kZS5Bc3NpZ25tZW50UGF0dGVybihpbml0LCBleHBy
KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLm1h
dGNoKCc6JykpIHsKQEAgLTM1NzIsMTEgKzM0ODEsMTEgQEAgcmV0dXJuIC8qKioqKiovIChmdW5j
dGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICB2YWx1
ZSA9IHRoaXMucGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1zLCBraW5kKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlBy
b3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kKSk7
Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VSZXN0UHJvcGVydHkg
PSBmdW5jdGlvbiAocGFyYW1zLCBraW5kKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
Y3JlYXRlTm9kZSgpOworICAgICAgICB9CisgICAgICAgIHBhcnNlUmVzdFByb3BlcnR5KHBhcmFt
cywga2luZCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwog
ICAgICAgICAgICAgdGhpcy5leHBlY3QoJy4uLicpOwotICAgICAgICAgICAgdmFyIGFyZyA9IHRo
aXMucGFyc2VQYXR0ZXJuKHBhcmFtcyk7CisgICAgICAgICAgICBjb25zdCBhcmcgPSB0aGlzLnBh
cnNlUGF0dGVybihwYXJhbXMpOwogICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJz0nKSkgewog
ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkRlZmF1
bHRSZXN0UHJvcGVydHkpOwogICAgICAgICAgICAgfQpAQCAtMzU4NCwxMCArMzQ5MywxMCBAQCBy
ZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAog
ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlByb3Bl
cnR5QWZ0ZXJSZXN0UHJvcGVydHkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuUmVzdEVsZW1lbnQoYXJnKSk7Ci0gICAgICAg
IH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VPYmplY3RQYXR0ZXJuID0gZnVuY3Rp
b24gKHBhcmFtcywga2luZCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKLSAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW107CisgICAgICAgIH0KKyAgICAg
ICAgcGFyc2VPYmplY3RQYXR0ZXJuKHBhcmFtcywga2luZCkgeworICAgICAgICAgICAgY29uc3Qg
bm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9
IFtdOwogICAgICAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsKICAgICAgICAgICAgIHdoaWxlICgh
dGhpcy5tYXRjaCgnfScpKSB7CiAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHRoaXMu
bWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVJlc3RQcm9wZXJ0eShwYXJhbXMsIGtpbmQpIDogdGhp
cy5wYXJzZVByb3BlcnR5UGF0dGVybihwYXJhbXMsIGtpbmQpKTsKQEAgLTM1OTcsOSArMzUwNiw5
IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0
cmFwCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnfScpOwogICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuT2JqZWN0UGF0dGVybihw
cm9wZXJ0aWVzKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VQ
YXR0ZXJuID0gZnVuY3Rpb24gKHBhcmFtcywga2luZCkgewotICAgICAgICAgICAgdmFyIHBhdHRl
cm47CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCkgeworICAg
ICAgICAgICAgbGV0IHBhdHRlcm47CiAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnWycpKSB7
CiAgICAgICAgICAgICAgICAgcGF0dGVybiA9IHRoaXMucGFyc2VBcnJheVBhdHRlcm4ocGFyYW1z
LCBraW5kKTsKICAgICAgICAgICAgIH0KQEAgLTM2MTQsMjQgKzM1MjMsMjQgQEAgcmV0dXJuIC8q
KioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAg
ICAgICAgICBwYXR0ZXJuID0gdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcihraW5kKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuOwotICAgICAgICB9OwotICAg
ICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0ID0gZnVuY3Rpb24g
KHBhcmFtcywga2luZCkgewotICAgICAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2th
aGVhZDsKLSAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFyYW1z
LCBraW5kKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZVBhdHRlcm5XaXRoRGVmYXVsdChwYXJh
bXMsIGtpbmQpIHsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVh
ZDsKKyAgICAgICAgICAgIGxldCBwYXR0ZXJuID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFyYW1zLCBr
aW5kKTsKICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCc9JykpIHsKICAgICAgICAgICAgICAg
ICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWll
bGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKyAgICAgICAgICAgICAgICBjb25zdCBwcmV2
aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKICAgICAgICAgICAgICAg
ICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgdmFyIHJp
Z2h0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbik7CisgICAgICAgICAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmlzb2xhdGVDb3Zlckdy
YW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKICAgICAgICAgICAgICAgICB0
aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKICAgICAgICAgICAg
ICAgICBwYXR0ZXJuID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwg
bmV3IE5vZGUuQXNzaWdubWVudFBhdHRlcm4ocGF0dGVybiwgcmlnaHQpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuOwotICAgICAgICB9OworICAgICAgICB9CiAg
ICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXZhcmlhYmxlLXN0
YXRlbWVudAotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVmFyaWFibGVJZGVudGlmaWVy
ID0gZnVuY3Rpb24gKGtpbmQpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVO
b2RlKCk7Ci0gICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOworICAgICAg
ICBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcihraW5kKSB7CisgICAgICAgICAgICBjb25zdCBub2Rl
ID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMubmV4
dFRva2VuKCk7CiAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gNCAvKiBLZXl3b3JkICov
ICYmIHRva2VuLnZhbHVlID09PSAneWllbGQnKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
Y29udGV4dC5zdHJpY3QpIHsKICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhw
ZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQp
OwpAQCAtMzY1NCwxNyArMzU2MywxNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVs
ZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVV
bmV4cGVjdGVkVG9rZW4odG9rZW4pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpOwot
ICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVmFyaWFibGVEZWNsYXJh
dGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
Y3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtdOwotICAgICAgICAgICAg
dmFyIGlkID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFyYW1zLCAndmFyJyk7CisgICAgICAgIH0KKyAg
ICAgICAgcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKG9wdGlvbnMpIHsKKyAgICAgICAgICAgIGNv
bnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9
IFtdOworICAgICAgICAgICAgY29uc3QgaWQgPSB0aGlzLnBhcnNlUGF0dGVybihwYXJhbXMsICd2
YXInKTsKICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGlkLnR5cGUgPT09
IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
c2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAg
IHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFZhck5hbWUpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBpbml0ID0g
bnVsbDsKKyAgICAgICAgICAgIGxldCBpbml0ID0gbnVsbDsKICAgICAgICAgICAgIGlmICh0aGlz
Lm1hdGNoKCc9JykpIHsKICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwogICAgICAg
ICAgICAgICAgIGluaXQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKTsKQEAgLTM2NzMsNTEgKzM1ODIsNTEgQEAgcmV0dXJuIC8qKioqKiov
IChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAg
ICB0aGlzLmV4cGVjdCgnPScpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdG9yKGlkLCBpbml0KSk7
Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VWYXJpYWJsZURlY2xh
cmF0aW9uTGlzdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7Ci0gICAgICAgICAgICB2YXIgb3B0ID0g
eyBpbkZvcjogb3B0aW9ucy5pbkZvciB9OwotICAgICAgICAgICAgdmFyIGxpc3QgPSBbXTsKKyAg
ICAgICAgfQorICAgICAgICBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KG9wdGlvbnMpIHsK
KyAgICAgICAgICAgIGNvbnN0IG9wdCA9IHsgaW5Gb3I6IG9wdGlvbnMuaW5Gb3IgfTsKKyAgICAg
ICAgICAgIGNvbnN0IGxpc3QgPSBbXTsKICAgICAgICAgICAgIGxpc3QucHVzaCh0aGlzLnBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbihvcHQpKTsKICAgICAgICAgICAgIHdoaWxlICh0aGlzLm1hdGNo
KCcsJykpIHsKICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwogICAgICAgICAgICAg
ICAgIGxpc3QucHVzaCh0aGlzLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihvcHQpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBsaXN0OwotICAgICAgICB9OwotICAgICAgICBQ
YXJzZXIucHJvdG90eXBlLnBhcnNlVmFyaWFibGVTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0g
ICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICB9CisgICAg
ICAgIHBhcnNlVmFyaWFibGVTdGF0ZW1lbnQoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0g
dGhpcy5jcmVhdGVOb2RlKCk7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3Zhcicp
OwotICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IHRoaXMucGFyc2VWYXJpYWJsZURlY2xh
cmF0aW9uTGlzdCh7IGluRm9yOiBmYWxzZSB9KTsKKyAgICAgICAgICAgIGNvbnN0IGRlY2xhcmF0
aW9ucyA9IHRoaXMucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCh7IGluRm9yOiBmYWxzZSB9
KTsKICAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOwogICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNs
YXJhdGlvbnMsICd2YXInKSk7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0
cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZW1wdHktc3RhdGVtZW50Ci0gICAgICAg
IFBhcnNlci5wcm90b3R5cGUucGFyc2VFbXB0eVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgIHBhcnNlRW1w
dHlTdGF0ZW1lbnQoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2Rl
KCk7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnOycpOwogICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRW1wdHlTdGF0ZW1lbnQoKSk7Ci0gICAgICAgIH07
CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNz
ZWMtZXhwcmVzc2lvbi1zdGF0ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUV4
cHJlc3Npb25TdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlRXhw
cmVzc2lvbigpOworICAgICAgICBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoKSB7CisgICAgICAg
ICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25zdCBl
eHByID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKICAgICAgICAgICAgIHRoaXMuY29uc3VtZVNl
bWljb2xvbigpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5v
ZGUuRXhwcmVzc2lvblN0YXRlbWVudChleHByKSk7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAg
ICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaWYtc3RhdGVtZW50
Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJZkNsYXVzZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcGFyc2VJZkNsYXVzZSgpIHsKICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQu
c3RyaWN0ICYmIHRoaXMubWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7CiAgICAgICAgICAgICAg
ICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb24p
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VTdGF0ZW1lbnQo
KTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUlmU3RhdGVtZW50
ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKLSAgICAgICAgICAgIHZhciBjb25zZXF1ZW50OwotICAgICAgICAgICAgdmFyIGFsdGVybmF0
ZSA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VJZlN0YXRlbWVudCgpIHsKKyAgICAg
ICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGxldCBj
b25zZXF1ZW50OworICAgICAgICAgICAgbGV0IGFsdGVybmF0ZSA9IG51bGw7CiAgICAgICAgICAg
ICB0aGlzLmV4cGVjdEtleXdvcmQoJ2lmJyk7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKCcp
OwotICAgICAgICAgICAgdmFyIHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworICAgICAg
ICAgICAgY29uc3QgdGVzdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICBp
ZiAoIXRoaXMubWF0Y2goJyknKSAmJiB0aGlzLmNvbmZpZy50b2xlcmFudCkgewogICAgICAgICAg
ICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7CiAg
ICAgICAgICAgICAgICAgY29uc2VxdWVudCA9IHRoaXMuZmluYWxpemUodGhpcy5jcmVhdGVOb2Rl
KCksIG5ldyBOb2RlLkVtcHR5U3RhdGVtZW50KCkpOwpAQCAtMzczMSwxOCArMzY0MCwxOCBAQCBy
ZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklmU3RhdGVtZW50KHRlc3QsIGNvbnNlcXVlbnQsIGFs
dGVybmF0ZSkpOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMz
OS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWRvLXdoaWxlLXN0YXRlbWVudAotICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlRG9XaGlsZVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgIHBhcnNlRG9XaGls
ZVN0YXRlbWVudCgpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZG8nKTsKLSAgICAgICAgICAgIHZh
ciBwcmV2aW91c0luSXRlcmF0aW9uID0gdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uOworICAgICAg
ICAgICAgY29uc3QgcHJldmlvdXNJbkl0ZXJhdGlvbiA9IHRoaXMuY29udGV4dC5pbkl0ZXJhdGlv
bjsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IHRydWU7Ci0gICAgICAg
ICAgICB2YXIgYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGNvbnN0
IGJvZHkgPSB0aGlzLnBhcnNlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQu
aW5JdGVyYXRpb24gPSBwcmV2aW91c0luSXRlcmF0aW9uOwogICAgICAgICAgICAgdGhpcy5leHBl
Y3RLZXl3b3JkKCd3aGlsZScpOwogICAgICAgICAgICAgdGhpcy5leHBlY3QoJygnKTsKLSAgICAg
ICAgICAgIHZhciB0ZXN0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGNv
bnN0IHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOwogICAgICAgICAgICAgaWYgKCF0aGlz
Lm1hdGNoKCcpJykgJiYgdGhpcy5jb25maWcudG9sZXJhbnQpIHsKICAgICAgICAgICAgICAgICB0
aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpOwogICAgICAgICAg
ICAgfQpAQCAtMzc1Myw1MSArMzY2Miw2NSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1v
ZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkRv
V2hpbGVTdGF0ZW1lbnQoYm9keSwgdGVzdCkpOwotICAgICAgICB9OworICAgICAgICB9CiAgICAg
ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXdoaWxlLXN0YXRlbWVu
dAotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlV2hpbGVTdGF0ZW1lbnQgPSBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAg
ICAgICAgdmFyIGJvZHk7CisgICAgICAgIHBhcnNlV2hpbGVTdGF0ZW1lbnQoKSB7CisgICAgICAg
ICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBsZXQgYm9k
eTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnd2hpbGUnKTsKICAgICAgICAgICAg
IHRoaXMuZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICB2YXIgdGVzdCA9IHRoaXMucGFyc2VFeHBy
ZXNzaW9uKCk7CisgICAgICAgICAgICBjb25zdCB0ZXN0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24o
KTsKICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpICYmIHRoaXMuY29uZmlnLnRvbGVy
YW50KSB7CiAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlz
Lm5leHRUb2tlbigpKTsKICAgICAgICAgICAgICAgICBib2R5ID0gdGhpcy5maW5hbGl6ZSh0aGlz
LmNyZWF0ZU5vZGUoKSwgbmV3IE5vZGUuRW1wdHlTdGF0ZW1lbnQoKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKScpOwot
ICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0luSXRlcmF0aW9uID0gdGhpcy5jb250ZXh0Lmlu
SXRlcmF0aW9uOworICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzSW5JdGVyYXRpb24gPSB0
aGlzLmNvbnRleHQuaW5JdGVyYXRpb247CiAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmlu
SXRlcmF0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBib2R5ID0gdGhpcy5wYXJzZVN0YXRl
bWVudCgpOwogICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IHByZXZp
b3VzSW5JdGVyYXRpb247CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5XaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KSk7Ci0gICAg
ICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
MjYyLyNzZWMtZm9yLXN0YXRlbWVudAogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlv
L2VjbWEyNjIvI3NlYy1mb3ItaW4tYW5kLWZvci1vZi1zdGF0ZW1lbnRzCi0gICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VGb3JTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICB2YXIgaW5pdCA9IG51bGw7Ci0gICAgICAgICAgICB2YXIgdGVzdCA9IG51bGw7Ci0gICAgICAg
ICAgICB2YXIgdXBkYXRlID0gbnVsbDsKLSAgICAgICAgICAgIHZhciBmb3JJbiA9IHRydWU7Ci0g
ICAgICAgICAgICB2YXIgbGVmdCwgcmlnaHQ7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
Y3JlYXRlTm9kZSgpOworICAgICAgICBwYXJzZUZvclN0YXRlbWVudCgpIHsKKyAgICAgICAgICAg
IGxldCBpbml0ID0gbnVsbDsKKyAgICAgICAgICAgIGxldCB0ZXN0ID0gbnVsbDsKKyAgICAgICAg
ICAgIGxldCB1cGRhdGUgPSBudWxsOworICAgICAgICAgICAgbGV0IGZvckluID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGxldCBpc0ZvckF3YWl0T2YgPSBmYWxzZTsKKyAgICAgICAgICAgIGxldCBsZWZ0
LCByaWdodDsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAg
ICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZm9yJyk7CisgICAgICAgICAgICBpZiAodGhp
cy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhd2FpdCcpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCF0aGlzLmNvbnRleHQuYXdhaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1Vu
ZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCwgbWVzc2FnZXNfMS5NZXNzYWdlcy5Gb3JBd2Fp
dEluTm9uQXN5bmMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLm5l
eHRUb2tlbigpOworICAgICAgICAgICAgICAgIGlzRm9yQXdhaXRPZiA9IHRydWU7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKCcpOwogICAgICAgICAgICAgaWYgKHRo
aXMubWF0Y2goJzsnKSkgeworICAgICAgICAgICAgICAgIGlmIChpc0ZvckF3YWl0T2YpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVh
ZCwgbWVzc2FnZXNfMS5NZXNzYWdlcy5Gb3JBd2FpdE9mU2VtaWNvbG9uKTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29y
ZCgndmFyJykpIHsKICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuY3JlYXRlTm9kZSgp
OwogICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAg
ICAgICB2YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0LmFsbG93SW47CisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQWxsb3dJbiA9IHRoaXMuY29udGV4dC5hbGxvd0lu
OwogICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRpb25zID0gdGhpcy5wYXJzZVZhcmlhYmxlRGVj
bGFyYXRpb25MaXN0KHsgaW5Gb3I6IHRydWUgfSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGRlY2xhcmF0aW9ucyA9IHRoaXMucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCh7IGluRm9y
OiB0cnVlIH0pOwogICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IHBy
ZXZpb3VzQWxsb3dJbjsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9ucy5sZW5n
dGggPT09IDEgJiYgdGhpcy5tYXRjaEtleXdvcmQoJ2luJykpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBkZWNsID0gZGVjbGFyYXRpb25zWzBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzRm9yQXdhaXRPZikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQsIG1lc3NhZ2VzXzEuTWVzc2FnZXMu
Rm9yQXdhaXRPZlNhd0luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGRlY2wgPSBkZWNsYXJhdGlvbnNbMF07CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZGVjbC5pbml0ICYmIChkZWNsLmlkLnR5cGUgPT09IHN5bnRheF8xLlN5
bnRheC5BcnJheVBhdHRlcm4gfHwgZGVjbC5pZC50eXBlID09PSBzeW50YXhfMS5TeW50YXguT2Jq
ZWN0UGF0dGVybiB8fCB0aGlzLmNvbnRleHQuc3RyaWN0KSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkZvckluT2ZM
b29wSW5pdGlhbGl6ZXIsICdmb3ItaW4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAg
LTM4MjIsNyArMzc0NSw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAv
LyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdjb25zdCcpIHx8IHRoaXMubWF0Y2hLZXl3b3JkKCds
ZXQnKSkgewogICAgICAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBraW5kID0gdGhpcy5uZXh0VG9rZW4oKS52YWx1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3Qga2luZCA9IHRoaXMubmV4dFRva2VuKCkudmFsdWU7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LnN0cmljdCAmJiB0aGlzLmxvb2th
aGVhZC52YWx1ZSA9PT0gJ2luJykgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRo
aXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuSWRlbnRpZmllcihraW5kKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwpAQCAtMzgzMSwxMSArMzc1NCwxNCBAQCBy
ZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0LmFsbG93SW47CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBwcmV2aW91c0FsbG93SW4gPSB0aGlzLmNvbnRleHQuYWxsb3dJbjsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRpb25zID0gdGhpcy5wYXJzZUJpbmRp
bmdMaXN0KGtpbmQsIHsgaW5Gb3I6IHRydWUgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBkZWNsYXJhdGlvbnMgPSB0aGlzLnBhcnNlQmluZGluZ0xpc3Qoa2luZCwgeyBpbkZvcjog
dHJ1ZSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0g
cHJldmlvdXNBbGxvd0luOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9u
cy5sZW5ndGggPT09IDEgJiYgZGVjbGFyYXRpb25zWzBdLmluaXQgPT09IG51bGwgJiYgdGhpcy5t
YXRjaEtleXdvcmQoJ2luJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNG
b3JBd2FpdE9mKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dV
bmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQsIG1lc3NhZ2VzXzEuTWVzc2FnZXMuRm9yQXdh
aXRPZlNhd0luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuVmFyaWFi
bGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLm5leHRUb2tlbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl
ZnQgPSBpbml0OwpAQCAtMzg1Nyw4ICszNzgzLDggQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlv
bihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGluaXRTdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4gPSB0aGlzLmNvbnRleHQuYWxsb3dJbjsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3QgaW5pdFN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0LmFs
bG93SW47CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhp
cy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5j
b250ZXh0LmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47CkBAIC0zODY2LDYgKzM3OTIsOSBAQCBy
ZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFy
Z2V0IHx8IGluaXQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9u
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3Nh
Z2VzXzEuTWVzc2FnZXMuSW52YWxpZExIU0luRm9ySW4pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRm9yQXdhaXRPZikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29r
YWhlYWQsIG1lc3NhZ2VzXzEuTWVzc2FnZXMuRm9yQXdhaXRPZlNhd0luKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0
dGVybihpbml0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OwpAQCAtMzg4
NSw3ICszODE0LDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdl
YnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcsJykpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5pdFNlcSA9IFtpbml0XTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbml0U2VxID0gW2luaXRdOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLm1hdGNoKCcsJykpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5pdFNlcS5wdXNoKHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlz
LnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTsKQEAgLTM5MDUsMTQgKzM4MzQsMTQgQEAgcmV0
dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAg
ICAgICAgICAgICAgICAgICAgdXBkYXRlID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgYm9keTsKKyAgICAg
ICAgICAgIGxldCBib2R5OwogICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykgJiYgdGhp
cy5jb25maWcudG9sZXJhbnQpIHsKICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBl
Y3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpOwogICAgICAgICAgICAgICAgIGJvZHkgPSB0aGlz
LmZpbmFsaXplKHRoaXMuY3JlYXRlTm9kZSgpLCBuZXcgTm9kZS5FbXB0eVN0YXRlbWVudCgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHRoaXMu
ZXhwZWN0KCcpJyk7Ci0gICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzSW5JdGVyYXRpb24gPSB0
aGlzLmNvbnRleHQuaW5JdGVyYXRpb247CisgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNJ
bkl0ZXJhdGlvbiA9IHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbjsKICAgICAgICAgICAgICAgICB0
aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSB0cnVlOwogICAgICAgICAgICAgICAgIGJvZHkgPSB0
aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVN0YXRlbWVudCk7CiAgICAgICAgICAg
ICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uID0gcHJldmlvdXNJbkl0ZXJhdGlvbjsKQEAg
LTM5MjAsMTcgKzM4NDksMTcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7
IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIHJldHVybiAodHlwZW9mIGxlZnQgPT09
ICd1bmRlZmluZWQnKSA/CiAgICAgICAgICAgICAgICAgdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5Gb3JTdGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KSkgOgogICAgICAgICAg
ICAgICAgIGZvckluID8gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Gb3JJblN0YXRlbWVu
dChsZWZ0LCByaWdodCwgYm9keSkpIDoKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5Gb3JPZlN0YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSkpOwotICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LkZvck9mU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5LCBpc0ZvckF3YWl0T2YpKTsKKyAgICAg
ICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jb250
aW51ZS1zdGF0ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNvbnRpbnVlU3Rh
dGVtZW50ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0
ZU5vZGUoKTsKKyAgICAgICAgcGFyc2VDb250aW51ZVN0YXRlbWVudCgpIHsKKyAgICAgICAgICAg
IGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0
S2V5d29yZCgnY29udGludWUnKTsKLSAgICAgICAgICAgIHZhciBsYWJlbCA9IG51bGw7CisgICAg
ICAgICAgICBsZXQgbGFiZWwgPSBudWxsOwogICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFk
LnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLyAmJiAhdGhpcy5oYXNMaW5lVGVybWluYXRvcikg
ewotICAgICAgICAgICAgICAgIHZhciBpZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIo
KTsKKyAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZp
ZXIoKTsKICAgICAgICAgICAgICAgICBsYWJlbCA9IGlkOwotICAgICAgICAgICAgICAgIHZhciBr
ZXkgPSAnJCcgKyBpZC5uYW1lOworICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9ICckJyArIGlk
Lm5hbWU7CiAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl
cnR5LmNhbGwodGhpcy5jb250ZXh0LmxhYmVsU2V0LCBrZXkpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlVua25vd25MYWJlbCwgaWQu
bmFtZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzk0MCwxNSArMzg2OSwxNSBAQCByZXR1cm4g
LyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAg
ICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLklsbGVnYWxDb250
aW51ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShu
b2RlLCBuZXcgTm9kZS5Db250aW51ZVN0YXRlbWVudChsYWJlbCkpOwotICAgICAgICB9OworICAg
ICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWJy
ZWFrLXN0YXRlbWVudAotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQnJlYWtTdGF0ZW1l
bnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9k
ZSgpOworICAgICAgICBwYXJzZUJyZWFrU3RhdGVtZW50KCkgeworICAgICAgICAgICAgY29uc3Qg
bm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwogICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3Jk
KCdicmVhaycpOwotICAgICAgICAgICAgdmFyIGxhYmVsID0gbnVsbDsKKyAgICAgICAgICAgIGxl
dCBsYWJlbCA9IG51bGw7CiAgICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0g
MyAvKiBJZGVudGlmaWVyICovICYmICF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGlkID0gdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOwotICAgICAg
ICAgICAgICAgIHZhciBrZXkgPSAnJCcgKyBpZC5uYW1lOworICAgICAgICAgICAgICAgIGNvbnN0
IGlkID0gdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICAgICAgICAgIGNv
bnN0IGtleSA9ICckJyArIGlkLm5hbWU7CiAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJv
dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb250ZXh0LmxhYmVsU2V0LCBrZXkpKSB7
CiAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2Vz
LlVua25vd25MYWJlbCwgaWQubmFtZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzk1OSwzMiAr
Mzg4OCwzMiBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFj
a0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1l
c3NhZ2VzLklsbGVnYWxCcmVhayk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4g
dGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5CcmVha1N0YXRlbWVudChsYWJlbCkpOwotICAg
ICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNt
YTI2Mi8jc2VjLXJldHVybi1zdGF0ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJz
ZVJldHVyblN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcGFyc2VSZXR1cm5TdGF0
ZW1lbnQoKSB7CiAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSkg
ewogICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2Vz
LklsbGVnYWxSZXR1cm4pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgncmV0dXJuJyk7Ci0gICAgICAg
ICAgICB2YXIgaGFzQXJndW1lbnQgPSAoIXRoaXMubWF0Y2goJzsnKSAmJiAhdGhpcy5tYXRjaCgn
fScpICYmCisgICAgICAgICAgICBjb25zdCBoYXNBcmd1bWVudCA9ICghdGhpcy5tYXRjaCgnOycp
ICYmICF0aGlzLm1hdGNoKCd9JykgJiYKICAgICAgICAgICAgICAgICAhdGhpcy5oYXNMaW5lVGVy
bWluYXRvciAmJiB0aGlzLmxvb2thaGVhZC50eXBlICE9PSAyIC8qIEVPRiAqLykgfHwKICAgICAg
ICAgICAgICAgICB0aGlzLmxvb2thaGVhZC50eXBlID09PSA4IC8qIFN0cmluZ0xpdGVyYWwgKi8g
fHwKICAgICAgICAgICAgICAgICB0aGlzLmxvb2thaGVhZC50eXBlID09PSAxMCAvKiBUZW1wbGF0
ZSAqLzsKLSAgICAgICAgICAgIHZhciBhcmd1bWVudCA9IGhhc0FyZ3VtZW50ID8gdGhpcy5wYXJz
ZUV4cHJlc3Npb24oKSA6IG51bGw7CisgICAgICAgICAgICBjb25zdCBhcmd1bWVudCA9IGhhc0Fy
Z3VtZW50ID8gdGhpcy5wYXJzZUV4cHJlc3Npb24oKSA6IG51bGw7CiAgICAgICAgICAgICB0aGlz
LmNvbnN1bWVTZW1pY29sb24oKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBOb2RlLlJldHVyblN0YXRlbWVudChhcmd1bWVudCkpOwotICAgICAgICB9OworICAg
ICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXdp
dGgtc3RhdGVtZW50Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VXaXRoU3RhdGVtZW50
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBwYXJzZVdpdGhTdGF0ZW1lbnQoKSB7CiAgICAgICAg
ICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCkgewogICAgICAgICAgICAgICAgIHRoaXMudG9s
ZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdE1vZGVXaXRoKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAg
ICAgICB2YXIgYm9keTsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKKyAgICAgICAgICAgIGxldCBib2R5OwogICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3Jk
KCd3aXRoJyk7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKCcpOwotICAgICAgICAgICAgdmFy
IG9iamVjdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBjb25zdCBvYmpl
Y3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOwogICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNo
KCcpJykgJiYgdGhpcy5jb25maWcudG9sZXJhbnQpIHsKICAgICAgICAgICAgICAgICB0aGlzLnRv
bGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpOwogICAgICAgICAgICAgICAg
IGJvZHkgPSB0aGlzLmZpbmFsaXplKHRoaXMuY3JlYXRlTm9kZSgpLCBuZXcgTm9kZS5FbXB0eVN0
YXRlbWVudCgpKTsKQEAgLTM5OTQsMTEgKzM5MjMsMTEgQEAgcmV0dXJuIC8qKioqKiovIChmdW5j
dGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBib2R5
ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuV2l0aFN0YXRlbWVudChvYmplY3QsIGJv
ZHkpKTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0
aHViLmlvL2VjbWEyNjIvI3NlYy1zd2l0Y2gtc3RhdGVtZW50Ci0gICAgICAgIFBhcnNlci5wcm90
b3R5cGUucGFyc2VTd2l0Y2hDYXNlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciB0ZXN0OworICAgICAgICBw
YXJzZVN3aXRjaENhc2UoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVO
b2RlKCk7CisgICAgICAgICAgICBsZXQgdGVzdDsKICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNo
S2V5d29yZCgnZGVmYXVsdCcpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsK
ICAgICAgICAgICAgICAgICB0ZXN0ID0gbnVsbDsKQEAgLTQwMDgsNyArMzkzNyw3IEBAIHJldHVy
biAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAg
ICAgICAgICAgICAgdGVzdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnOicpOwotICAgICAgICAgICAgdmFyIGNvbnNlcXVl
bnQgPSBbXTsKKyAgICAgICAgICAgIGNvbnN0IGNvbnNlcXVlbnQgPSBbXTsKICAgICAgICAgICAg
IHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJ30nKSB8fCB0
aGlzLm1hdGNoS2V5d29yZCgnZGVmYXVsdCcpIHx8IHRoaXMubWF0Y2hLZXl3b3JkKCdjYXNlJykp
IHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00MDE2LDIzICszOTQ1LDIzIEBAIHJl
dHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAg
ICAgICAgICAgICAgICAgY29uc2VxdWVudC5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRl
bSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBOb2RlLlN3aXRjaENhc2UodGVzdCwgY29uc2VxdWVudCkpOwotICAgICAgICB9Owot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU3dpdGNoU3RhdGVtZW50ID0gZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAg
fQorICAgICAgICBwYXJzZVN3aXRjaFN0YXRlbWVudCgpIHsKKyAgICAgICAgICAgIGNvbnN0IG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgn
c3dpdGNoJyk7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKCcpOwotICAgICAgICAgICAgdmFy
IGRpc2NyaW1pbmFudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBjb25z
dCBkaXNjcmltaW5hbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOwogICAgICAgICAgICAgdGhp
cy5leHBlY3QoJyknKTsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0luU3dpdGNoID0gdGhpcy5j
b250ZXh0LmluU3dpdGNoOworICAgICAgICAgICAgY29uc3QgcHJldmlvdXNJblN3aXRjaCA9IHRo
aXMuY29udGV4dC5pblN3aXRjaDsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pblN3aXRjaCA9
IHRydWU7Ci0gICAgICAgICAgICB2YXIgY2FzZXMgPSBbXTsKLSAgICAgICAgICAgIHZhciBkZWZh
dWx0Rm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGNvbnN0IGNhc2VzID0gW107CisgICAgICAg
ICAgICBsZXQgZGVmYXVsdEZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdCgn
eycpOwogICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICBpZiAodGhp
cy5tYXRjaCgnfScpKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB2YXIgY2xhdXNlID0gdGhpcy5wYXJzZVN3aXRjaENhc2Uo
KTsKKyAgICAgICAgICAgICAgICBjb25zdCBjbGF1c2UgPSB0aGlzLnBhcnNlU3dpdGNoQ2FzZSgp
OwogICAgICAgICAgICAgICAgIGlmIChjbGF1c2UudGVzdCA9PT0gbnVsbCkgewogICAgICAgICAg
ICAgICAgICAgICBpZiAoZGVmYXVsdEZvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5NdWx0aXBsZURlZmF1bHRzSW5Td2l0
Y2gpOwpAQCAtNDA0NCwyOCArMzk3MywyOCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1v
ZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgdGhpcy5leHBlY3QoJ30n
KTsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pblN3aXRjaCA9IHByZXZpb3VzSW5Td2l0Y2g7
CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Td2l0Y2hT
dGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNlcykpOwotICAgICAgICB9OworICAgICAgICB9CiAg
ICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxhYmVsbGVkLXN0
YXRlbWVudHMKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUxhYmVsbGVkU3RhdGVtZW50
ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKLSAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKLSAgICAg
ICAgICAgIHZhciBzdGF0ZW1lbnQ7CisgICAgICAgIHBhcnNlTGFiZWxsZWRTdGF0ZW1lbnQoKSB7
CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAg
ICBjb25zdCBleHByID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGxldCBz
dGF0ZW1lbnQ7CiAgICAgICAgICAgICBpZiAoKGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4
LklkZW50aWZpZXIpICYmIHRoaXMubWF0Y2goJzonKSkgewogICAgICAgICAgICAgICAgIHRoaXMu
bmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgdmFyIGlkID0gZXhwcjsKLSAgICAgICAgICAg
ICAgICB2YXIga2V5ID0gJyQnICsgaWQubmFtZTsKKyAgICAgICAgICAgICAgICBjb25zdCBpZCA9
IGV4cHI7CisgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gJyQnICsgaWQubmFtZTsKICAgICAg
ICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMu
Y29udGV4dC5sYWJlbFNldCwga2V5KSkgewogICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93
RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5SZWRlY2xhcmF0aW9uLCAnTGFiZWwnLCBpZC5uYW1l
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmxhYmVs
U2V0W2tleV0gPSB0cnVlOwotICAgICAgICAgICAgICAgIHZhciBib2R5ID0gdm9pZCAwOworICAg
ICAgICAgICAgICAgIGxldCBib2R5OwogICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5
d29yZCgnY2xhc3MnKSkgewogICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBl
Y3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKICAgICAgICAgICAgICAgICAgICAgYm9keSA9IHRo
aXMucGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOwotICAgICAgICAgICAgICAg
ICAgICB2YXIgZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpOwor
ICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xh
cmF0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0KSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRv
a2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtNDA4NSwzMSArNDAxNCwzNiBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9u
KG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIHN0YXRlbWVu
dCA9IG5ldyBOb2RlLkV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBzdGF0ZW1lbnQpOwotICAgICAg
ICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2
Mi8jc2VjLXRocm93LXN0YXRlbWVudAotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVGhy
b3dTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
Y3JlYXRlTm9kZSgpOworICAgICAgICBwYXJzZVRocm93U3RhdGVtZW50KCkgeworICAgICAgICAg
ICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwogICAgICAgICAgICAgdGhpcy5leHBl
Y3RLZXl3b3JkKCd0aHJvdycpOwogICAgICAgICAgICAgaWYgKHRoaXMuaGFzTGluZVRlcm1pbmF0
b3IpIHsKICAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdl
cy5OZXdsaW5lQWZ0ZXJUaHJvdyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgYXJn
dW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgY29uc3QgYXJndW1l
bnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOwogICAgICAgICAgICAgdGhpcy5jb25zdW1lU2Vt
aWNvbG9uKCk7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9k
ZS5UaHJvd1N0YXRlbWVudChhcmd1bWVudCkpOwotICAgICAgICB9OworICAgICAgICB9CiAgICAg
ICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRyeS1zdGF0ZW1lbnQK
LSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNhdGNoQ2xhdXNlID0gZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgcGFy
c2VDYXRjaENsYXVzZSgpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKKyAgICAgICAgICAgIGxldCBib2R5OwogICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3
b3JkKCdjYXRjaCcpOworICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcoJykpIHsKKyAgICAg
ICAgICAgICAgICBib2R5ID0gdGhpcy5wYXJzZUJsb2NrKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQ2F0Y2hDbGF1c2UobnVsbCwgYm9keSkp
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgdGhpcy5leHBlY3QoJygnKTsKICAgICAgICAg
ICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHsKICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5l
eHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHZhciBwYXJhbXMgPSBbXTsKLSAgICAgICAgICAgIHZhciBwYXJhbSA9IHRoaXMucGFyc2VQYXR0
ZXJuKHBhcmFtcyk7Ci0gICAgICAgICAgICB2YXIgcGFyYW1NYXAgPSB7fTsKLSAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGtleSA9ICckJyArIHBhcmFtc1tpXS52YWx1ZTsKKyAgICAgICAgICAgIGNvbnN0IHBh
cmFtcyA9IFtdOworICAgICAgICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLnBhcnNlUGF0dGVybihw
YXJhbXMpOworICAgICAgICAgICAgY29uc3QgcGFyYW1NYXAgPSB7fTsKKyAgICAgICAgICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
Y29uc3Qga2V5ID0gJyQnICsgcGFyYW1zW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgIGlmIChP
YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyYW1NYXAsIGtleSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMu
RHVwbGljYXRlQmluZGluZywgcGFyYW1zW2ldLnZhbHVlKTsKICAgICAgICAgICAgICAgICB9CkBA
IC00MTIxLDM0ICs0MDU1LDM0IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykg
eyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKLSAgICAgICAgICAgIHZhciBib2R5ID0gdGhp
cy5wYXJzZUJsb2NrKCk7CisgICAgICAgICAgICBib2R5ID0gdGhpcy5wYXJzZUJsb2NrKCk7CiAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5DYXRjaENsYXVz
ZShwYXJhbSwgYm9keSkpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBh
cnNlRmluYWxseUNsYXVzZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgfQorICAgICAgICBwYXJz
ZUZpbmFsbHlDbGF1c2UoKSB7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2ZpbmFs
bHknKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlQmxvY2soKTsKLSAgICAgICAgfTsK
LSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVRyeVN0YXRlbWVudCA9IGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgIH0K
KyAgICAgICAgcGFyc2VUcnlTdGF0ZW1lbnQoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0g
dGhpcy5jcmVhdGVOb2RlKCk7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3RyeScp
OwotICAgICAgICAgICAgdmFyIGJsb2NrID0gdGhpcy5wYXJzZUJsb2NrKCk7Ci0gICAgICAgICAg
ICB2YXIgaGFuZGxlciA9IHRoaXMubWF0Y2hLZXl3b3JkKCdjYXRjaCcpID8gdGhpcy5wYXJzZUNh
dGNoQ2xhdXNlKCkgOiBudWxsOwotICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IHRoaXMubWF0
Y2hLZXl3b3JkKCdmaW5hbGx5JykgPyB0aGlzLnBhcnNlRmluYWxseUNsYXVzZSgpIDogbnVsbDsK
KyAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gdGhpcy5wYXJzZUJsb2NrKCk7CisgICAgICAgICAg
ICBjb25zdCBoYW5kbGVyID0gdGhpcy5tYXRjaEtleXdvcmQoJ2NhdGNoJykgPyB0aGlzLnBhcnNl
Q2F0Y2hDbGF1c2UoKSA6IG51bGw7CisgICAgICAgICAgICBjb25zdCBmaW5hbGl6ZXIgPSB0aGlz
Lm1hdGNoS2V5d29yZCgnZmluYWxseScpID8gdGhpcy5wYXJzZUZpbmFsbHlDbGF1c2UoKSA6IG51
bGw7CiAgICAgICAgICAgICBpZiAoIWhhbmRsZXIgJiYgIWZpbmFsaXplcikgewogICAgICAgICAg
ICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLk5vQ2F0Y2hPckZpbmFs
bHkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuVHJ5U3RhdGVtZW50KGJsb2NrLCBoYW5kbGVyLCBmaW5hbGl6ZXIpKTsKLSAg
ICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2Vj
bWEyNjIvI3NlYy1kZWJ1Z2dlci1zdGF0ZW1lbnQKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5w
YXJzZURlYnVnZ2VyU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgcGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgp
IHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKICAgICAgICAg
ICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZGVidWdnZXInKTsKICAgICAgICAgICAgIHRoaXMuY29u
c3VtZVNlbWljb2xvbigpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IE5vZGUuRGVidWdnZXJTdGF0ZW1lbnQoKSk7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAg
ICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZWNtYXNjcmlwdC1s
YW5ndWFnZS1zdGF0ZW1lbnRzLWFuZC1kZWNsYXJhdGlvbnMKLSAgICAgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBzdGF0
ZW1lbnQ7CisgICAgICAgIHBhcnNlU3RhdGVtZW50KCkgeworICAgICAgICAgICAgbGV0IHN0YXRl
bWVudDsKICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQudHlwZSkgewogICAgICAg
ICAgICAgICAgIGNhc2UgMSAvKiBCb29sZWFuTGl0ZXJhbCAqLzoKICAgICAgICAgICAgICAgICBj
YXNlIDUgLyogTnVsbExpdGVyYWwgKi86CkBAIC00MTU5LDcgKzQwOTMsNyBAQCByZXR1cm4gLyoq
KioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAg
ICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIDcgLyogUHVu
Y3R1YXRvciAqLzoKLSAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5sb29rYWhl
YWQudmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5sb29rYWhl
YWQudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ3snKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlQmxvY2soKTsKICAgICAg
ICAgICAgICAgICAgICAgfQpAQCAtNDIyOSwxNiArNDE2MywxNiBAQCByZXR1cm4gLyoqKioqKi8g
KGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAg
ICAgICBzdGF0ZW1lbnQgPSB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFk
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnQ7Ci0gICAgICAg
IH07CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYy
LyNzZWMtZnVuY3Rpb24tZGVmaW5pdGlvbnMKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJz
ZUZ1bmN0aW9uU291cmNlRWxlbWVudHMgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIg
bm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICBwYXJzZUZ1bmN0aW9uU291cmNlRWxl
bWVudHMoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CiAg
ICAgICAgICAgICB0aGlzLmV4cGVjdCgneycpOwotICAgICAgICAgICAgdmFyIGJvZHkgPSB0aGlz
LnBhcnNlRGlyZWN0aXZlUHJvbG9ndWVzKCk7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNMYWJl
bFNldCA9IHRoaXMuY29udGV4dC5sYWJlbFNldDsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0lu
SXRlcmF0aW9uID0gdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uOwotICAgICAgICAgICAgdmFyIHBy
ZXZpb3VzSW5Td2l0Y2ggPSB0aGlzLmNvbnRleHQuaW5Td2l0Y2g7Ci0gICAgICAgICAgICB2YXIg
cHJldmlvdXNJbkZ1bmN0aW9uQm9keSA9IHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keTsKKyAg
ICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLnBhcnNlRGlyZWN0aXZlUHJvbG9ndWVzKCk7Cisg
ICAgICAgICAgICBjb25zdCBwcmV2aW91c0xhYmVsU2V0ID0gdGhpcy5jb250ZXh0LmxhYmVsU2V0
OworICAgICAgICAgICAgY29uc3QgcHJldmlvdXNJbkl0ZXJhdGlvbiA9IHRoaXMuY29udGV4dC5p
bkl0ZXJhdGlvbjsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzSW5Td2l0Y2ggPSB0aGlzLmNv
bnRleHQuaW5Td2l0Y2g7CisgICAgICAgICAgICBjb25zdCBwcmV2aW91c0luRnVuY3Rpb25Cb2R5
ID0gdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5OwogICAgICAgICAgICAgdGhpcy5jb250ZXh0
LmxhYmVsU2V0ID0ge307CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSBm
YWxzZTsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pblN3aXRjaCA9IGZhbHNlOwpAQCAtNDI1
NSw5ICs0MTg5LDkgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdl
YnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pblN3aXRjaCA9IHByZXZp
b3VzSW5Td2l0Y2g7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkgPSBw
cmV2aW91c0luRnVuY3Rpb25Cb2R5OwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuQmxvY2tTdGF0ZW1lbnQoYm9keSkpOwotICAgICAgICB9OwotICAgICAg
ICBQYXJzZXIucHJvdG90eXBlLnZhbGlkYXRlUGFyYW0gPSBmdW5jdGlvbiAob3B0aW9ucywgcGFy
YW0sIG5hbWUpIHsKLSAgICAgICAgICAgIHZhciBrZXkgPSAnJCcgKyBuYW1lOworICAgICAgICB9
CisgICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0sIG5hbWUpIHsKKyAgICAgICAg
ICAgIGNvbnN0IGtleSA9ICckJyArIG5hbWU7CiAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0
LnN0cmljdCkgewogICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVk
V29yZChuYW1lKSkgewogICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnN0cmljdGVkID0gcGFy
YW07CkBAIC00Mjg5LDExICs0MjIzLDExIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9k
dWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgICAgICBvcHRpb25zLnBhcmFtU2V0W2tleV0gPSB0cnVlOwogICAgICAgICAgICAgfQotICAg
ICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUmVzdEVsZW1lbnQgPSBmdW5j
dGlvbiAocGFyYW1zKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OworICAgICAgICB9CisgICAgICAgIHBhcnNlUmVzdEVsZW1lbnQocGFyYW1zKSB7CisgICAgICAg
ICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CiAgICAgICAgICAgICB0aGlzLmV4
cGVjdCgnLi4uJyk7Ci0gICAgICAgICAgICB2YXIgYXJnID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFy
YW1zKTsKKyAgICAgICAgICAgIGNvbnN0IGFyZyA9IHRoaXMucGFyc2VQYXR0ZXJuKHBhcmFtcyk7
CiAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7CiAgICAgICAgICAgICAgICAgdGhp
cy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuRGVmYXVsdFJlc3RQYXJhbWV0ZXIpOwog
ICAgICAgICAgICAgfQpAQCAtNDMwMSwxOCArNDIzNSwxOCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1
bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIHRo
aXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlBhcmFtZXRlckFmdGVyUmVzdFBhcmFt
ZXRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShu
b2RlLCBuZXcgTm9kZS5SZXN0RWxlbWVudChhcmcpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFy
c2VyLnByb3RvdHlwZS5wYXJzZUZvcm1hbFBhcmFtZXRlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7
Ci0gICAgICAgICAgICB2YXIgcGFyYW1zID0gW107Ci0gICAgICAgICAgICB2YXIgcGFyYW0gPSB0
aGlzLm1hdGNoKCcuLi4nKSA/IHRoaXMucGFyc2VSZXN0RWxlbWVudChwYXJhbXMpIDogdGhpcy5w
YXJzZVBhdHRlcm5XaXRoRGVmYXVsdChwYXJhbXMpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUZv
cm1hbFBhcmFtZXRlcihvcHRpb25zKSB7CisgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBbXTsK
KyAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5tYXRjaCgnLi4uJykgPyB0aGlzLnBhcnNl
UmVzdEVsZW1lbnQocGFyYW1zKSA6IHRoaXMucGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1z
KTsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7
CiAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtc1tpXSwg
cGFyYW1zW2ldLnZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG9wdGlvbnMuc2lt
cGxlID0gb3B0aW9ucy5zaW1wbGUgJiYgKHBhcmFtIGluc3RhbmNlb2YgTm9kZS5JZGVudGlmaWVy
KTsKICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1zLnB1c2gocGFyYW0pOwotICAgICAgICB9Owot
ICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRm9ybWFsUGFyYW1ldGVycyA9IGZ1bmN0aW9u
IChmaXJzdFJlc3RyaWN0ZWQpIHsKLSAgICAgICAgICAgIHZhciBvcHRpb25zOworICAgICAgICB9
CisgICAgICAgIHBhcnNlRm9ybWFsUGFyYW1ldGVycyhmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAg
ICAgICAgIGxldCBvcHRpb25zOwogICAgICAgICAgICAgb3B0aW9ucyA9IHsKICAgICAgICAgICAg
ICAgICBzaW1wbGU6IHRydWUsCiAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKQEAgLTQzNDAs
MzQgKzQyNzQsMzQgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdl
YnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG9wdGlvbnMu
Zmlyc3RSZXN0cmljdGVkLAogICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2Fn
ZQogICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5t
YXRjaEFzeW5jRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbWF0Y2gg
PSB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzeW5jJyk7CisgICAgICAgIH0KKyAgICAg
ICAgbWF0Y2hBc3luY0Z1bmN0aW9uKCkgeworICAgICAgICAgICAgbGV0IG1hdGNoID0gdGhpcy5t
YXRjaENvbnRleHR1YWxLZXl3b3JkKCdhc3luYycpOwogICAgICAgICAgICAgaWYgKG1hdGNoKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zY2FubmVyLnNhdmVTdGF0ZSgpOwor
ICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zY2FubmVyLnNhdmVTdGF0ZSgpOwog
ICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTsKLSAgICAgICAgICAg
ICAgICB2YXIgbmV4dCA9IHRoaXMuc2Nhbm5lci5sZXgoKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBuZXh0ID0gdGhpcy5zY2FubmVyLmxleCgpOwogICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5l
ci5yZXN0b3JlU3RhdGUoc3RhdGUpOwogICAgICAgICAgICAgICAgIG1hdGNoID0gKHN0YXRlLmxp
bmVOdW1iZXIgPT09IG5leHQubGluZU51bWJlcikgJiYgKG5leHQudHlwZSA9PT0gNCAvKiBLZXl3
b3JkICovKSAmJiAobmV4dC52YWx1ZSA9PT0gJ2Z1bmN0aW9uJyk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICByZXR1cm4gbWF0Y2g7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90
b3R5cGUucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uID0gZnVuY3Rpb24gKGlkZW50aWZpZXJJc09w
dGlvbmFsKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAg
ICAgICAgICAgdmFyIGlzQXN5bmMgPSB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzeW5j
Jyk7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKGlkZW50aWZp
ZXJJc09wdGlvbmFsKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2Rl
KCk7CisgICAgICAgICAgICBjb25zdCBpc0FzeW5jID0gdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3
b3JkKCdhc3luYycpOwogICAgICAgICAgICAgaWYgKGlzQXN5bmMpIHsKICAgICAgICAgICAgICAg
ICB0aGlzLm5leHRUb2tlbigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGhpcy5leHBl
Y3RLZXl3b3JkKCdmdW5jdGlvbicpOwotICAgICAgICAgICAgdmFyIGlzR2VuZXJhdG9yID0gaXNB
c3luYyA/IGZhbHNlIDogdGhpcy5tYXRjaCgnKicpOworICAgICAgICAgICAgY29uc3QgaXNHZW5l
cmF0b3IgPSB0aGlzLm1hdGNoKCcqJyk7CiAgICAgICAgICAgICBpZiAoaXNHZW5lcmF0b3IpIHsK
ICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdmFyIG1lc3NhZ2U7Ci0gICAgICAgICAgICB2YXIgaWQgPSBudWxsOwotICAgICAgICAg
ICAgdmFyIGZpcnN0UmVzdHJpY3RlZCA9IG51bGw7CisgICAgICAgICAgICBsZXQgbWVzc2FnZTsK
KyAgICAgICAgICAgIGxldCBpZCA9IG51bGw7CisgICAgICAgICAgICBsZXQgZmlyc3RSZXN0cmlj
dGVkID0gbnVsbDsKICAgICAgICAgICAgIGlmICghaWRlbnRpZmllcklzT3B0aW9uYWwgfHwgIXRo
aXMubWF0Y2goJygnKSkgewotICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2Fo
ZWFkOworICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CiAgICAg
ICAgICAgICAgICAgaWQgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QpIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgewpAQCAtNDM4
NSwyMSArNDMxOSwyMSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8g
d2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dBd2FpdCA9IHRo
aXMuY29udGV4dC5hd2FpdDsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0
aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQWxsb3dB
d2FpdCA9IHRoaXMuY29udGV4dC5hd2FpdDsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQWxs
b3dZaWVsZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkOwogICAgICAgICAgICAgdGhpcy5jb250
ZXh0LmF3YWl0ID0gaXNBc3luYzsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxk
ID0gIWlzR2VuZXJhdG9yOwotICAgICAgICAgICAgdmFyIGZvcm1hbFBhcmFtZXRlcnMgPSB0aGlz
LnBhcnNlRm9ybWFsUGFyYW1ldGVycyhmaXJzdFJlc3RyaWN0ZWQpOwotICAgICAgICAgICAgdmFy
IHBhcmFtcyA9IGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zOwotICAgICAgICAgICAgdmFyIHN0cmlj
dGVkID0gZm9ybWFsUGFyYW1ldGVycy5zdHJpY3RlZDsKKyAgICAgICAgICAgIGNvbnN0IGZvcm1h
bFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycyhmaXJzdFJlc3RyaWN0ZWQp
OworICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gZm9ybWFsUGFyYW1ldGVycy5wYXJhbXM7Cisg
ICAgICAgICAgICBjb25zdCBzdHJpY3RlZCA9IGZvcm1hbFBhcmFtZXRlcnMuc3RyaWN0ZWQ7CiAg
ICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSBmb3JtYWxQYXJhbWV0ZXJzLmZpcnN0UmVzdHJp
Y3RlZDsKICAgICAgICAgICAgIGlmIChmb3JtYWxQYXJhbWV0ZXJzLm1lc3NhZ2UpIHsKICAgICAg
ICAgICAgICAgICBtZXNzYWdlID0gZm9ybWFsUGFyYW1ldGVycy5tZXNzYWdlOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gdGhpcy5jb250ZXh0LnN0cmlj
dDsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93U3RyaWN0RGlyZWN0aXZlID0gdGhpcy5j
b250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlOworICAgICAgICAgICAgY29uc3QgcHJldmlvdXNT
dHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0OworICAgICAgICAgICAgY29uc3QgcHJldmlvdXNB
bGxvd1N0cmljdERpcmVjdGl2ZSA9IHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZTsK
ICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZSA9IGZvcm1hbFBh
cmFtZXRlcnMuc2ltcGxlOwotICAgICAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlRnVuY3Rp
b25Tb3VyY2VFbGVtZW50cygpOworICAgICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMucGFyc2VG
dW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7CiAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0
cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHsKICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5l
eHBlY3RlZFRva2VuKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7CiAgICAgICAgICAgICB9CkBA
IC00NDEwLDI5ICs0MzQ0LDI5IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykg
eyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dTdHJp
Y3REaXJlY3RpdmUgPSBwcmV2aW91c0FsbG93U3RyaWN0RGlyZWN0aXZlOwogICAgICAgICAgICAg
dGhpcy5jb250ZXh0LmF3YWl0ID0gcHJldmlvdXNBbGxvd0F3YWl0OwogICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7Ci0gICAgICAgICAgICBy
ZXR1cm4gaXNBc3luYyA/IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQXN5bmNGdW5jdGlv
bkRlY2xhcmF0aW9uKGlkLCBwYXJhbXMsIGJvZHkpKSA6CisgICAgICAgICAgICByZXR1cm4gaXNB
c3luYyA/IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQXN5bmNGdW5jdGlvbkRlY2xhcmF0
aW9uKGlkLCBwYXJhbXMsIGJvZHksIGlzR2VuZXJhdG9yKSkgOgogICAgICAgICAgICAgICAgIHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25EZWNsYXJhdGlvbihpZCwgcGFyYW1z
LCBib2R5LCBpc0dlbmVyYXRvcikpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90
eXBlLnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg
dmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBpc0FzeW5jID0g
dGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhc3luYycpOworICAgICAgICB9CisgICAgICAg
IHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkgeworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRo
aXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3QgaXNBc3luYyA9IHRoaXMubWF0Y2hD
b250ZXh0dWFsS2V5d29yZCgnYXN5bmMnKTsKICAgICAgICAgICAgIGlmIChpc0FzeW5jKSB7CiAg
ICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKLSAgICAgICAgICAgIHZhciBpc0dl
bmVyYXRvciA9IGlzQXN5bmMgPyBmYWxzZSA6IHRoaXMubWF0Y2goJyonKTsKKyAgICAgICAgICAg
IGNvbnN0IGlzR2VuZXJhdG9yID0gdGhpcy5tYXRjaCgnKicpOwogICAgICAgICAgICAgaWYgKGlz
R2VuZXJhdG9yKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHZhciBtZXNzYWdlOwotICAgICAgICAgICAgdmFyIGlkID0gbnVs
bDsKLSAgICAgICAgICAgIHZhciBmaXJzdFJlc3RyaWN0ZWQ7Ci0gICAgICAgICAgICB2YXIgcHJl
dmlvdXNBbGxvd0F3YWl0ID0gdGhpcy5jb250ZXh0LmF3YWl0OwotICAgICAgICAgICAgdmFyIHBy
ZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkOworICAgICAgICAgICAg
bGV0IG1lc3NhZ2U7CisgICAgICAgICAgICBsZXQgaWQgPSBudWxsOworICAgICAgICAgICAgbGV0
IGZpcnN0UmVzdHJpY3RlZDsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQWxsb3dBd2FpdCA9
IHRoaXMuY29udGV4dC5hd2FpdDsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQWxsb3dZaWVs
ZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkOwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmF3
YWl0ID0gaXNBc3luYzsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gIWlz
R2VuZXJhdG9yOwogICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcoJykpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKyAgICAgICAgICAgICAgICBjb25z
dCB0b2tlbiA9IHRoaXMubG9va2FoZWFkOwogICAgICAgICAgICAgICAgIGlkID0gKCF0aGlzLmNv
bnRleHQuc3RyaWN0ICYmICFpc0dlbmVyYXRvciAmJiB0aGlzLm1hdGNoS2V5d29yZCgneWllbGQn
KSkgPyB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKSA6IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50
aWZpZXIoKTsKICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCkgewogICAg
ICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQodG9rZW4u
dmFsdWUpKSB7CkBAIC00NDUwLDE3ICs0Mzg0LDE3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rp
b24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgZm9ybWFs
UGFyYW1ldGVycyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKGZpcnN0UmVzdHJpY3RlZCk7
Ci0gICAgICAgICAgICB2YXIgcGFyYW1zID0gZm9ybWFsUGFyYW1ldGVycy5wYXJhbXM7Ci0gICAg
ICAgICAgICB2YXIgc3RyaWN0ZWQgPSBmb3JtYWxQYXJhbWV0ZXJzLnN0cmljdGVkOworICAgICAg
ICAgICAgY29uc3QgZm9ybWFsUGFyYW1ldGVycyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJz
KGZpcnN0UmVzdHJpY3RlZCk7CisgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBmb3JtYWxQYXJh
bWV0ZXJzLnBhcmFtczsKKyAgICAgICAgICAgIGNvbnN0IHN0cmljdGVkID0gZm9ybWFsUGFyYW1l
dGVycy5zdHJpY3RlZDsKICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IGZvcm1hbFBhcmFt
ZXRlcnMuZmlyc3RSZXN0cmljdGVkOwogICAgICAgICAgICAgaWYgKGZvcm1hbFBhcmFtZXRlcnMu
bWVzc2FnZSkgewogICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBmb3JtYWxQYXJhbWV0ZXJzLm1l
c3NhZ2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QgPSB0
aGlzLmNvbnRleHQuc3RyaWN0OwotICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dTdHJpY3RE
aXJlY3RpdmUgPSB0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU7CisgICAgICAgICAg
ICBjb25zdCBwcmV2aW91c1N0cmljdCA9IHRoaXMuY29udGV4dC5zdHJpY3Q7CisgICAgICAgICAg
ICBjb25zdCBwcmV2aW91c0FsbG93U3RyaWN0RGlyZWN0aXZlID0gdGhpcy5jb250ZXh0LmFsbG93
U3RyaWN0RGlyZWN0aXZlOwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGly
ZWN0aXZlID0gZm9ybWFsUGFyYW1ldGVycy5zaW1wbGU7Ci0gICAgICAgICAgICB2YXIgYm9keSA9
IHRoaXMucGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7CisgICAgICAgICAgICBjb25zdCBi
b2R5ID0gdGhpcy5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTsKICAgICAgICAgICAgIGlm
ICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkgewogICAgICAgICAgICAg
ICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTsK
ICAgICAgICAgICAgIH0KQEAgLTQ0NzEsMjkgKzQ0MDUsMjkgQEAgcmV0dXJuIC8qKioqKiovIChm
dW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIHRoaXMu
Y29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZSA9IHByZXZpb3VzQWxsb3dTdHJpY3REaXJlY3Rp
dmU7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQgPSBwcmV2aW91c0FsbG93QXdhaXQ7
CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVs
ZDsKLSAgICAgICAgICAgIHJldHVybiBpc0FzeW5jID8gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5Bc3luY0Z1bmN0aW9uRXhwcmVzc2lvbihpZCwgcGFyYW1zLCBib2R5KSkgOgorICAgICAg
ICAgICAgcmV0dXJuIGlzQXN5bmMgPyB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFzeW5j
RnVuY3Rpb25FeHByZXNzaW9uKGlkLCBwYXJhbXMsIGJvZHksIGlzR2VuZXJhdG9yKSkgOgogICAg
ICAgICAgICAgICAgIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHByZXNz
aW9uKGlkLCBwYXJhbXMsIGJvZHksIGlzR2VuZXJhdG9yKSk7Ci0gICAgICAgIH07CisgICAgICAg
IH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZGlyZWN0
aXZlLXByb2xvZ3Vlcy1hbmQtdGhlLXVzZS1zdHJpY3QtZGlyZWN0aXZlCi0gICAgICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VEaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2
YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5j
cmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9u
KCk7Ci0gICAgICAgICAgICB2YXIgZGlyZWN0aXZlID0gKGV4cHIudHlwZSA9PT0gc3ludGF4XzEu
U3ludGF4LkxpdGVyYWwpID8gdGhpcy5nZXRUb2tlblJhdyh0b2tlbikuc2xpY2UoMSwgLTEpIDog
bnVsbDsKKyAgICAgICAgcGFyc2VEaXJlY3RpdmUoKSB7CisgICAgICAgICAgICBjb25zdCB0b2tl
biA9IHRoaXMubG9va2FoZWFkOworICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRl
Tm9kZSgpOworICAgICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7
CisgICAgICAgICAgICBjb25zdCBkaXJlY3RpdmUgPSAoZXhwci50eXBlID09PSBzeW50YXhfMS5T
eW50YXguTGl0ZXJhbCkgPyB0aGlzLmdldFRva2VuUmF3KHRva2VuKS5zbGljZSgxLCAtMSkgOiBu
dWxsOwogICAgICAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7CiAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBkaXJlY3RpdmUgPyBuZXcgTm9kZS5EaXJlY3RpdmUo
ZXhwciwgZGlyZWN0aXZlKSA6IG5ldyBOb2RlLkV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcikpOwot
ICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRGlyZWN0aXZlUHJvbG9n
dWVzID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGZpcnN0UmVzdHJpY3RlZCA9IG51
bGw7Ci0gICAgICAgICAgICB2YXIgYm9keSA9IFtdOworICAgICAgICB9CisgICAgICAgIHBhcnNl
RGlyZWN0aXZlUHJvbG9ndWVzKCkgeworICAgICAgICAgICAgbGV0IGZpcnN0UmVzdHJpY3RlZCA9
IG51bGw7CisgICAgICAgICAgICBjb25zdCBib2R5ID0gW107CiAgICAgICAgICAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworICAg
ICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CiAgICAgICAgICAgICAg
ICAgaWYgKHRva2VuLnR5cGUgIT09IDggLyogU3RyaW5nTGl0ZXJhbCAqLykgewogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFy
IHN0YXRlbWVudCA9IHRoaXMucGFyc2VEaXJlY3RpdmUoKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRGlyZWN0aXZlKCk7CiAgICAgICAgICAgICAgICAgYm9k
eS5wdXNoKHN0YXRlbWVudCk7Ci0gICAgICAgICAgICAgICAgdmFyIGRpcmVjdGl2ZSA9IHN0YXRl
bWVudC5kaXJlY3RpdmU7CisgICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0aXZlID0gc3RhdGVt
ZW50LmRpcmVjdGl2ZTsKICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRpcmVjdGl2ZSAhPT0g
J3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQpAQCAtNDUxMyw5ICs0NDQ3LDkgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVz
KSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICByZXR1cm4gYm9keTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAg
ICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1tZXRob2QtZGVmaW5pdGlv
bnMKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5xdWFsaWZpZWRQcm9wZXJ0eU5hbWUgPSBmdW5j
dGlvbiAodG9rZW4pIHsKKyAgICAgICAgcXVhbGlmaWVkUHJvcGVydHlOYW1lKHRva2VuKSB7CiAg
ICAgICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHsKICAgICAgICAgICAgICAgICBjYXNlIDMg
LyogSWRlbnRpZmllciAqLzoKICAgICAgICAgICAgICAgICBjYXNlIDggLyogU3RyaW5nTGl0ZXJh
bCAqLzoKQEAgLTQ1MzAsNTEgKzQ0NjQsNTEgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH07Ci0g
ICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VHZXR0ZXJNZXRob2QgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAg
dmFyIGlzR2VuZXJhdG9yID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lp
ZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CisgICAgICAgIH0KKyAgICAgICAgcGFyc2VH
ZXR0ZXJNZXRob2QoKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2Rl
KCk7CisgICAgICAgICAgICBjb25zdCBpc0dlbmVyYXRvciA9IGZhbHNlOworICAgICAgICAgICAg
Y29uc3QgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CiAgICAg
ICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9ICFpc0dlbmVyYXRvcjsKLSAgICAgICAg
ICAgIHZhciBmb3JtYWxQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKTsK
KyAgICAgICAgICAgIGNvbnN0IGZvcm1hbFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlRm9ybWFsUGFy
YW1ldGVycygpOwogICAgICAgICAgICAgaWYgKGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zLmxlbmd0
aCA+IDApIHsKICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5N
ZXNzYWdlcy5CYWRHZXR0ZXJBcml0eSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIg
bWV0aG9kID0gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKGZvcm1hbFBhcmFtZXRlcnMpOworICAg
ICAgICAgICAgY29uc3QgbWV0aG9kID0gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKGZvcm1hbFBh
cmFtZXRlcnMpOwogICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91
c0FsbG93WWllbGQ7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5GdW5jdGlvbkV4cHJlc3Npb24obnVsbCwgZm9ybWFsUGFyYW1ldGVycy5wYXJhbXMsIG1l
dGhvZCwgaXNHZW5lcmF0b3IpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlw
ZS5wYXJzZVNldHRlck1ldGhvZCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgaXNHZW5lcmF0b3IgPSBmYWxz
ZTsKLSAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxs
b3dZaWVsZDsKKyAgICAgICAgfQorICAgICAgICBwYXJzZVNldHRlck1ldGhvZCgpIHsKKyAgICAg
ICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0
IGlzR2VuZXJhdG9yID0gZmFsc2U7CisgICAgICAgICAgICBjb25zdCBwcmV2aW91c0FsbG93WWll
bGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5h
bGxvd1lpZWxkID0gIWlzR2VuZXJhdG9yOwotICAgICAgICAgICAgdmFyIGZvcm1hbFBhcmFtZXRl
cnMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpOworICAgICAgICAgICAgY29uc3QgZm9y
bWFsUGFyYW1ldGVycyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCk7CiAgICAgICAgICAg
ICBpZiAoZm9ybWFsUGFyYW1ldGVycy5wYXJhbXMubGVuZ3RoICE9PSAxKSB7CiAgICAgICAgICAg
ICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuQmFkU2V0dGVyQXJp
dHkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWFsUGFyYW1ldGVy
cy5wYXJhbXNbMF0gaW5zdGFuY2VvZiBOb2RlLlJlc3RFbGVtZW50KSB7CiAgICAgICAgICAgICAg
ICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuQmFkU2V0dGVyUmVzdFBh
cmFtZXRlcik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgbWV0aG9kID0gdGhpcy5w
YXJzZVByb3BlcnR5TWV0aG9kKGZvcm1hbFBhcmFtZXRlcnMpOworICAgICAgICAgICAgY29uc3Qg
bWV0aG9kID0gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKGZvcm1hbFBhcmFtZXRlcnMpOwogICAg
ICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CiAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5GdW5jdGlvbkV4
cHJlc3Npb24obnVsbCwgZm9ybWFsUGFyYW1ldGVycy5wYXJhbXMsIG1ldGhvZCwgaXNHZW5lcmF0
b3IpKTsKLSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUdlbmVyYXRv
ck1ldGhvZCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVh
dGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgaXNHZW5lcmF0b3IgPSB0cnVlOwotICAgICAgICAg
ICAgdmFyIHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkOworICAg
ICAgICB9CisgICAgICAgIHBhcnNlR2VuZXJhdG9yTWV0aG9kKCkgeworICAgICAgICAgICAgY29u
c3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3QgaXNHZW5lcmF0
b3IgPSB0cnVlOworICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5j
b250ZXh0LmFsbG93WWllbGQ7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9
IHRydWU7Ci0gICAgICAgICAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRl
cnMoKTsKKyAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0
ZXJzKCk7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlOwotICAg
ICAgICAgICAgdmFyIG1ldGhvZCA9IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChwYXJhbXMpOwor
ICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKHBhcmFt
cyk7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZ
aWVsZDsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkZ1
bmN0aW9uRXhwcmVzc2lvbihudWxsLCBwYXJhbXMucGFyYW1zLCBtZXRob2QsIGlzR2VuZXJhdG9y
KSk7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1
Yi5pby9lY21hMjYyLyNzZWMtZ2VuZXJhdG9yLWZ1bmN0aW9uLWRlZmluaXRpb25zCi0gICAgICAg
IFBhcnNlci5wcm90b3R5cGUuaXNTdGFydE9mRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHZhciBzdGFydCA9IHRydWU7Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlz
Lmxvb2thaGVhZC52YWx1ZTsKKyAgICAgICAgaXNTdGFydE9mRXhwcmVzc2lvbigpIHsKKyAgICAg
ICAgICAgIGxldCBzdGFydCA9IHRydWU7CisgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMu
bG9va2FoZWFkLnZhbHVlOwogICAgICAgICAgICAgc3dpdGNoICh0aGlzLmxvb2thaGVhZC50eXBl
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSA3IC8qIFB1bmN0dWF0b3IgKi86CiAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0ID0gKHZhbHVlID09PSAnWycpIHx8ICh2YWx1ZSA9PT0gJygnKSB8fCAo
dmFsdWUgPT09ICd7JykgfHwKQEAgLTQ1OTMsMTQgKzQ1MjcsMTQgQEAgcmV0dXJuIC8qKioqKiov
IChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gc3RhcnQ7Ci0g
ICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VZaWVsZEV4cHJlc3Npb24g
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OworICAgICAgICB9CisgICAgICAgIHBhcnNlWWllbGRFeHByZXNzaW9uKCkgeworICAgICAgICAg
ICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwogICAgICAgICAgICAgdGhpcy5leHBl
Y3RLZXl3b3JkKCd5aWVsZCcpOwotICAgICAgICAgICAgdmFyIGFyZ3VtZW50ID0gbnVsbDsKLSAg
ICAgICAgICAgIHZhciBkZWxlZ2F0ZSA9IGZhbHNlOworICAgICAgICAgICAgbGV0IGFyZ3VtZW50
ID0gbnVsbDsKKyAgICAgICAgICAgIGxldCBkZWxlZ2F0ZSA9IGZhbHNlOwogICAgICAgICAgICAg
aWYgKCF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByZXZp
b3VzQWxsb3dZaWVsZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkOworICAgICAgICAgICAgICAg
IGNvbnN0IHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkOwogICAg
ICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgZGVsZWdhdGUgPSB0aGlzLm1hdGNoKCcqJyk7CiAgICAgICAgICAgICAgICAgaWYgKGRl
bGVnYXRlKSB7CkBAIC00NjEzLDI1ICs0NTQ3LDI2IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rp
b24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgdGhpcy5j
b250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5ZaWVsZEV4cHJl
c3Npb24oYXJndW1lbnQsIGRlbGVnYXRlKSk7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAg
ICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY2xhc3MtZGVmaW5pdGlv
bnMKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNsYXNzRWxlbWVudCA9IGZ1bmN0aW9u
IChoYXNDb25zdHJ1Y3RvcikgewotICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhl
YWQ7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAg
ICAgdmFyIGtpbmQgPSAnJzsKLSAgICAgICAgICAgIHZhciBrZXkgPSBudWxsOwotICAgICAgICAg
ICAgdmFyIHZhbHVlID0gbnVsbDsKLSAgICAgICAgICAgIHZhciBjb21wdXRlZCA9IGZhbHNlOwot
ICAgICAgICAgICAgdmFyIG1ldGhvZCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIGlzU3RhdGlj
ID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgaXNBc3luYyA9IGZhbHNlOworICAgICAgICBwYXJz
ZUNsYXNzRWxlbWVudChoYXNDb25zdHJ1Y3RvcikgeworICAgICAgICAgICAgbGV0IHRva2VuID0g
dGhpcy5sb29rYWhlYWQ7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2Rl
KCk7CisgICAgICAgICAgICBsZXQga2luZCA9ICcnOworICAgICAgICAgICAgbGV0IGtleSA9IG51
bGw7CisgICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsOworICAgICAgICAgICAgbGV0IGNvbXB1
dGVkID0gZmFsc2U7CisgICAgICAgICAgICBsZXQgbWV0aG9kID0gZmFsc2U7CisgICAgICAgICAg
ICBsZXQgaXNTdGF0aWMgPSBmYWxzZTsKKyAgICAgICAgICAgIGxldCBpc0FzeW5jID0gZmFsc2U7
CisgICAgICAgICAgICBsZXQgaXNBc3luY0dlbmVyYXRvciA9IGZhbHNlOwogICAgICAgICAgICAg
aWYgKHRoaXMubWF0Y2goJyonKSkgewogICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBjb21w
dXRlZCA9IHRoaXMubWF0Y2goJ1snKTsKICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNl
T2JqZWN0UHJvcGVydHlLZXkoKTsKLSAgICAgICAgICAgICAgICB2YXIgaWQgPSBrZXk7CisgICAg
ICAgICAgICAgICAgY29uc3QgaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgaWYgKGlkLm5hbWUg
PT09ICdzdGF0aWMnICYmICh0aGlzLnF1YWxpZmllZFByb3BlcnR5TmFtZSh0aGlzLmxvb2thaGVh
ZCkgfHwgdGhpcy5tYXRjaCgnKicpKSkgewogICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRo
aXMubG9va2FoZWFkOwogICAgICAgICAgICAgICAgICAgICBpc1N0YXRpYyA9IHRydWU7CkBAIC00
NjQ0LDkgKzQ1NzksMTMgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8v
IHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBpZiAoKHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAq
LykgJiYgIXRoaXMuaGFzTGluZVRlcm1pbmF0b3IgJiYgKHRva2VuLnZhbHVlID09PSAnYXN5bmMn
KSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcHVuY3R1YXRvciA9IHRoaXMubG9va2FoZWFk
LnZhbHVlOwotICAgICAgICAgICAgICAgICAgICBpZiAocHVuY3R1YXRvciAhPT0gJzonICYmIHB1
bmN0dWF0b3IgIT09ICcoJyAmJiBwdW5jdHVhdG9yICE9PSAnKicpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgcHVuY3R1YXRvciA9IHRoaXMubG9va2FoZWFkLnZhbHVlOworICAgICAgICAg
ICAgICAgICAgICBpZiAocHVuY3R1YXRvciAhPT0gJzonICYmIHB1bmN0dWF0b3IgIT09ICcoJykg
ewogICAgICAgICAgICAgICAgICAgICAgICAgaXNBc3luYyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpc0FzeW5jR2VuZXJhdG9yID0gdGhpcy5tYXRjaCgnKicpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzQXN5bmNHZW5lcmF0b3IpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAq
LyAmJiB0b2tlbi52YWx1ZSA9PT0gJ2NvbnN0cnVjdG9yJykgewpAQCAtNDY1NSw3ICs0NTk0LDcg
QEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3Ry
YXAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHZhciBsb29rYWhlYWRQcm9wZXJ0eUtleSA9IHRoaXMucXVhbGlmaWVk
UHJvcGVydHlOYW1lKHRoaXMubG9va2FoZWFkKTsKKyAgICAgICAgICAgIGNvbnN0IGxvb2thaGVh
ZFByb3BlcnR5S2V5ID0gdGhpcy5xdWFsaWZpZWRQcm9wZXJ0eU5hbWUodGhpcy5sb29rYWhlYWQp
OwogICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IDMgLyogSWRlbnRpZmllciAqLykgewog
ICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJ2dldCcgJiYgbG9va2FoZWFkUHJv
cGVydHlLZXkpIHsKICAgICAgICAgICAgICAgICAgICAga2luZCA9ICdnZXQnOwpAQCAtNDY4MCw3
ICs0NjE5LDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBh
Y2tCb290c3RyYXAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgha2luZCAmJiBrZXkg
JiYgdGhpcy5tYXRjaCgnKCcpKSB7CiAgICAgICAgICAgICAgICAga2luZCA9ICdpbml0JzsKLSAg
ICAgICAgICAgICAgICB2YWx1ZSA9IGlzQXN5bmMgPyB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2RB
c3luY0Z1bmN0aW9uKCkgOiB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbigpOworICAg
ICAgICAgICAgICAgIHZhbHVlID0gaXNBc3luYyA/IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZEFz
eW5jRnVuY3Rpb24oaXNBc3luY0dlbmVyYXRvcikgOiB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2RG
dW5jdGlvbigpOwogICAgICAgICAgICAgICAgIG1ldGhvZCA9IHRydWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoIWtpbmQpIHsKQEAgLTQ3MDcsMTAgKzQ2NDYsMTAgQEAgcmV0dXJu
IC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5h
bGl6ZShub2RlLCBuZXcgTm9kZS5NZXRob2REZWZpbml0aW9uKGtleSwgY29tcHV0ZWQsIHZhbHVl
LCBraW5kLCBpc1N0YXRpYykpOwotICAgICAgICB9OwotICAgICAgICBQYXJzZXIucHJvdG90eXBl
LnBhcnNlQ2xhc3NFbGVtZW50TGlzdCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBi
b2R5ID0gW107Ci0gICAgICAgICAgICB2YXIgaGFzQ29uc3RydWN0b3IgPSB7IHZhbHVlOiBmYWxz
ZSB9OworICAgICAgICB9CisgICAgICAgIHBhcnNlQ2xhc3NFbGVtZW50TGlzdCgpIHsKKyAgICAg
ICAgICAgIGNvbnN0IGJvZHkgPSBbXTsKKyAgICAgICAgICAgIGNvbnN0IGhhc0NvbnN0cnVjdG9y
ID0geyB2YWx1ZTogZmFsc2UgfTsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7CiAgICAg
ICAgICAgICB3aGlsZSAoIXRoaXMubWF0Y2goJ30nKSkgewogICAgICAgICAgICAgICAgIGlmICh0
aGlzLm1hdGNoKCc7JykpIHsKQEAgLTQ3MjIsNzggKzQ2NjEsNzggQEAgcmV0dXJuIC8qKioqKiov
IChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7CiAgICAgICAgICAgICByZXR1cm4gYm9keTsK
LSAgICAgICAgfTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNsYXNzQm9keSA9IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0g
ICAgICAgICAgICB2YXIgZWxlbWVudExpc3QgPSB0aGlzLnBhcnNlQ2xhc3NFbGVtZW50TGlzdCgp
OworICAgICAgICB9CisgICAgICAgIHBhcnNlQ2xhc3NCb2R5KCkgeworICAgICAgICAgICAgY29u
c3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3QgZWxlbWVudExp
c3QgPSB0aGlzLnBhcnNlQ2xhc3NFbGVtZW50TGlzdCgpOwogICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQ2xhc3NCb2R5KGVsZW1lbnRMaXN0KSk7Ci0gICAg
ICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDbGFzc0RlY2xhcmF0aW9uID0g
ZnVuY3Rpb24gKGlkZW50aWZpZXJJc09wdGlvbmFsKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gdGhp
cy5jb250ZXh0LnN0cmljdDsKKyAgICAgICAgfQorICAgICAgICBwYXJzZUNsYXNzRGVjbGFyYXRp
b24oaWRlbnRpZmllcklzT3B0aW9uYWwpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlz
LmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzU3RyaWN0ID0gdGhpcy5j
b250ZXh0LnN0cmljdDsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSB0cnVlOwog
ICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdjbGFzcycpOwotICAgICAgICAgICAgdmFy
IGlkID0gKGlkZW50aWZpZXJJc09wdGlvbmFsICYmICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSAz
IC8qIElkZW50aWZpZXIgKi8pKSA/IG51bGwgOiB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVy
KCk7Ci0gICAgICAgICAgICB2YXIgc3VwZXJDbGFzcyA9IG51bGw7CisgICAgICAgICAgICBjb25z
dCBpZCA9IChpZGVudGlmaWVySXNPcHRpb25hbCAmJiAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0g
MyAvKiBJZGVudGlmaWVyICovKSkgPyBudWxsIDogdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmll
cigpOworICAgICAgICAgICAgbGV0IHN1cGVyQ2xhc3MgPSBudWxsOwogICAgICAgICAgICAgaWYg
KHRoaXMubWF0Y2hLZXl3b3JkKCdleHRlbmRzJykpIHsKICAgICAgICAgICAgICAgICB0aGlzLm5l
eHRUb2tlbigpOwogICAgICAgICAgICAgICAgIHN1cGVyQ2xhc3MgPSB0aGlzLmlzb2xhdGVDb3Zl
ckdyYW1tYXIodGhpcy5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGNsYXNzQm9keSA9IHRoaXMucGFyc2VDbGFzc0Jv
ZHkoKTsKKyAgICAgICAgICAgIGNvbnN0IGNsYXNzQm9keSA9IHRoaXMucGFyc2VDbGFzc0JvZHko
KTsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkNsYXNzRGVjbGFy
YXRpb24oaWQsIHN1cGVyQ2xhc3MsIGNsYXNzQm9keSkpOwotICAgICAgICB9OwotICAgICAgICBQ
YXJzZXIucHJvdG90eXBlLnBhcnNlQ2xhc3NFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBw
cmV2aW91c1N0cmljdCA9IHRoaXMuY29udGV4dC5zdHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAg
cGFyc2VDbGFzc0V4cHJlc3Npb24oKSB7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5j
cmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25zdCBwcmV2aW91c1N0cmljdCA9IHRoaXMuY29u
dGV4dC5zdHJpY3Q7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gdHJ1ZTsKICAg
ICAgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnY2xhc3MnKTsKLSAgICAgICAgICAgIHZhciBp
ZCA9ICh0aGlzLmxvb2thaGVhZC50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pID8gdGhpcy5w
YXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIDogbnVsbDsKLSAgICAgICAgICAgIHZhciBzdXBlckNs
YXNzID0gbnVsbDsKKyAgICAgICAgICAgIGNvbnN0IGlkID0gKHRoaXMubG9va2FoZWFkLnR5cGUg
PT09IDMgLyogSWRlbnRpZmllciAqLykgPyB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkg
OiBudWxsOworICAgICAgICAgICAgbGV0IHN1cGVyQ2xhc3MgPSBudWxsOwogICAgICAgICAgICAg
aWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdleHRlbmRzJykpIHsKICAgICAgICAgICAgICAgICB0aGlz
Lm5leHRUb2tlbigpOwogICAgICAgICAgICAgICAgIHN1cGVyQ2xhc3MgPSB0aGlzLmlzb2xhdGVD
b3ZlckdyYW1tYXIodGhpcy5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGNsYXNzQm9keSA9IHRoaXMucGFyc2VDbGFz
c0JvZHkoKTsKKyAgICAgICAgICAgIGNvbnN0IGNsYXNzQm9keSA9IHRoaXMucGFyc2VDbGFzc0Jv
ZHkoKTsKICAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSBwcmV2aW91c1N0cmljdDsK
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkNsYXNzRXhw
cmVzc2lvbihpZCwgc3VwZXJDbGFzcywgY2xhc3NCb2R5KSk7Ci0gICAgICAgIH07CisgICAgICAg
IH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc2NyaXB0
cwogICAgICAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1tb2R1bGVz
Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VNb2R1bGUgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHBhcnNlTW9kdWxlKCkgewogICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cmljdCA9
IHRydWU7CiAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNNb2R1bGUgPSB0cnVlOwogICAgICAg
ICAgICAgdGhpcy5zY2FubmVyLmlzTW9kdWxlID0gdHJ1ZTsKLSAgICAgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgYm9keSA9IHRoaXMucGFyc2VE
aXJlY3RpdmVQcm9sb2d1ZXMoKTsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0
ZU5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLnBhcnNlRGlyZWN0aXZlUHJv
bG9ndWVzKCk7CiAgICAgICAgICAgICB3aGlsZSAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMiAv
KiBFT0YgKi8pIHsKICAgICAgICAgICAgICAgICBib2R5LnB1c2godGhpcy5wYXJzZVN0YXRlbWVu
dExpc3RJdGVtKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuTW9kdWxlKGJvZHkpKTsKLSAgICAgICAgfTsKLSAgICAgICAg
UGFyc2VyLnByb3RvdHlwZS5wYXJzZVNjcmlwdCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAg
IHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgYm9keSA9IHRo
aXMucGFyc2VEaXJlY3RpdmVQcm9sb2d1ZXMoKTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZVNj
cmlwdCgpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAg
ICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLnBhcnNlRGlyZWN0aXZlUHJvbG9ndWVzKCk7CiAg
ICAgICAgICAgICB3aGlsZSAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gMiAvKiBFT0YgKi8pIHsK
ICAgICAgICAgICAgICAgICBib2R5LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IE5vZGUuU2NyaXB0KGJvZHkpKTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAv
LyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pbXBvcnRzCi0gICAgICAgIFBh
cnNlci5wcm90b3R5cGUucGFyc2VNb2R1bGVTcGVjaWZpZXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICBwYXJzZU1vZHVs
ZVNwZWNpZmllcigpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKICAgICAgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSA4IC8qIFN0cmluZ0xp
dGVyYWwgKi8pIHsKICAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5N
ZXNzYWdlcy5JbnZhbGlkTW9kdWxlU3BlY2lmaWVyKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICB2YXIgcmF3ID0g
dGhpcy5nZXRUb2tlblJhdyh0b2tlbik7CisgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMu
bmV4dFRva2VuKCk7CisgICAgICAgICAgICBjb25zdCByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRv
a2VuKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxp
dGVyYWwodG9rZW4udmFsdWUsIHJhdykpOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAg
IC8vIGltcG9ydCB7PGZvbyBhcyBiYXI+fSAuLi47Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUu
cGFyc2VJbXBvcnRTcGVjaWZpZXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgdmFyIGltcG9ydGVkOwotICAgICAg
ICAgICAgdmFyIGxvY2FsOworICAgICAgICBwYXJzZUltcG9ydFNwZWNpZmllcigpIHsKKyAgICAg
ICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGxldCBp
bXBvcnRlZDsKKyAgICAgICAgICAgIGxldCBsb2NhbDsKICAgICAgICAgICAgIGlmICh0aGlzLmxv
b2thaGVhZC50eXBlID09PSAzIC8qIElkZW50aWZpZXIgKi8pIHsKICAgICAgICAgICAgICAgICBp
bXBvcnRlZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKICAgICAgICAgICAgICAg
ICBsb2NhbCA9IGltcG9ydGVkOwpAQCAtNDgxNCwxMSArNDc1MywxMSBAQCByZXR1cm4gLyoqKioq
Ki8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBOb2RlLkltcG9ydFNwZWNpZmllcihsb2NhbCwgaW1wb3J0ZWQpKTsKLSAgICAgICAg
fTsKKyAgICAgICAgfQogICAgICAgICAvLyB7Zm9vLCBiYXIgYXMgYmFzfQotICAgICAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlTmFtZWRJbXBvcnRzID0gZnVuY3Rpb24gKCkgeworICAgICAgICBw
YXJzZU5hbWVkSW1wb3J0cygpIHsKICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7Ci0gICAg
ICAgICAgICB2YXIgc3BlY2lmaWVycyA9IFtdOworICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWVy
cyA9IFtdOwogICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHsKICAgICAgICAg
ICAgICAgICBzcGVjaWZpZXJzLnB1c2godGhpcy5wYXJzZUltcG9ydFNwZWNpZmllcigpKTsKICAg
ICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJ30nKSkgewpAQCAtNDgyNywzMiArNDc2Niwz
MiBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3Rz
dHJhcAogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGhpcy5leHBlY3QoJ30nKTsKICAgICAg
ICAgICAgIHJldHVybiBzcGVjaWZpZXJzOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAg
IC8vIGltcG9ydCA8Zm9vPiAuLi47Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJbXBv
cnREZWZhdWx0U3BlY2lmaWVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIG5vZGUg
PSB0aGlzLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIHZhciBsb2NhbCA9IHRoaXMucGFyc2VJ
ZGVudGlmaWVyTmFtZSgpOworICAgICAgICBwYXJzZUltcG9ydERlZmF1bHRTcGVjaWZpZXIoKSB7
CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAg
ICBjb25zdCBsb2NhbCA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOwogICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSW1wb3J0RGVmYXVsdFNwZWNpZmll
cihsb2NhbCkpOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGltcG9ydCA8KiBh
cyBmb28+IC4uLjsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUltcG9ydE5hbWVzcGFj
ZVNwZWNpZmllciA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5j
cmVhdGVOb2RlKCk7CisgICAgICAgIHBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkgewor
ICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwogICAgICAgICAgICAg
dGhpcy5leHBlY3QoJyonKTsKICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaENvbnRleHR1YWxL
ZXl3b3JkKCdhcycpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2Vz
XzEuTWVzc2FnZXMuTm9Bc0FmdGVySW1wb3J0TmFtZXNwYWNlKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICB2YXIgbG9jYWwgPSB0aGlz
LnBhcnNlSWRlbnRpZmllck5hbWUoKTsKKyAgICAgICAgICAgIGNvbnN0IGxvY2FsID0gdGhpcy5w
YXJzZUlkZW50aWZpZXJOYW1lKCk7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShu
b2RlLCBuZXcgTm9kZS5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIobG9jYWwpKTsKLSAgICAgICAg
fTsKLSAgICAgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUltcG9ydERlY2xhcmF0aW9uID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICB9CisgICAgICAgIHBhcnNlSW1wb3J0RGVjbGFyYXRpb24oKSB7
CiAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KSB7CiAgICAgICAg
ICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSWxsZWdhbEltcG9y
dERlY2xhcmF0aW9uKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBub2RlID0gdGhp
cy5jcmVhdGVOb2RlKCk7CisgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5jcmVhdGVOb2Rl
KCk7CiAgICAgICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2ltcG9ydCcpOwotICAgICAgICAg
ICAgdmFyIHNyYzsKLSAgICAgICAgICAgIHZhciBzcGVjaWZpZXJzID0gW107CisgICAgICAgICAg
ICBsZXQgc3JjOworICAgICAgICAgICAgbGV0IHNwZWNpZmllcnMgPSBbXTsKICAgICAgICAgICAg
IGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSA4IC8qIFN0cmluZ0xpdGVyYWwgKi8pIHsKICAg
ICAgICAgICAgICAgICAvLyBpbXBvcnQgJ2Zvbyc7CiAgICAgICAgICAgICAgICAgc3JjID0gdGhp
cy5wYXJzZU1vZHVsZVNwZWNpZmllcigpOwpAQCAtNDg4OCw3ICs0ODI3LDcgQEAgcmV0dXJuIC8q
KioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoQ29udGV4
dHVhbEtleXdvcmQoJ2Zyb20nKSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9
IHRoaXMubG9va2FoZWFkLnZhbHVlID8gbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9r
ZW4gOiBtZXNzYWdlc18xLk1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlOworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5sb29rYWhlYWQudmFsdWUgPyBtZXNzYWdlc18x
Lk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IG1lc3NhZ2VzXzEuTWVzc2FnZXMuTWlzc2luZ0Zy
b21DbGF1c2U7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlLCB0
aGlzLmxvb2thaGVhZC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IHRoaXMubmV4dFRva2VuKCk7CkBAIC00ODk2LDQ0ICs0ODM1LDQ0IEBAIHJldHVybiAvKioqKioq
LyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKICAgICAgICAgICAgIHJldHVy
biB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkltcG9ydERlY2xhcmF0aW9uKHNwZWNpZmll
cnMsIHNyYykpOwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMz
OS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWV4cG9ydHMKLSAgICAgICAgUGFyc2VyLnByb3RvdHlw
ZS5wYXJzZUV4cG9ydFNwZWNpZmllciA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICB2YXIgbG9jYWwgPSB0aGlzLnBh
cnNlSWRlbnRpZmllck5hbWUoKTsKLSAgICAgICAgICAgIHZhciBleHBvcnRlZCA9IGxvY2FsOwor
ICAgICAgICBwYXJzZUV4cG9ydFNwZWNpZmllcigpIHsKKyAgICAgICAgICAgIGNvbnN0IG5vZGUg
PSB0aGlzLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIGNvbnN0IGxvY2FsID0gdGhpcy5wYXJz
ZUlkZW50aWZpZXJOYW1lKCk7CisgICAgICAgICAgICBsZXQgZXhwb3J0ZWQgPSBsb2NhbDsKICAg
ICAgICAgICAgIGlmICh0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzJykpIHsKICAgICAg
ICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwogICAgICAgICAgICAgICAgIGV4cG9ydGVkID0g
dGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHBvcnRTcGVjaWZpZXIobG9jYWws
IGV4cG9ydGVkKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VF
eHBvcnREZWNsYXJhdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgfQorICAgICAgICBwYXJz
ZUV4cG9ydERlY2xhcmF0aW9uKCkgewogICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5pbkZ1
bmN0aW9uQm9keSkgewogICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18x
Lk1lc3NhZ2VzLklsbGVnYWxFeHBvcnREZWNsYXJhdGlvbik7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworICAgICAgICAgICAgY29uc3Qg
bm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwogICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3Jk
KCdleHBvcnQnKTsKLSAgICAgICAgICAgIHZhciBleHBvcnREZWNsYXJhdGlvbjsKKyAgICAgICAg
ICAgIGxldCBleHBvcnREZWNsYXJhdGlvbjsKICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoS2V5
d29yZCgnZGVmYXVsdCcpKSB7CiAgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgLi4u
CiAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKICAgICAgICAgICAgICAgICBpZiAo
dGhpcy5tYXRjaEtleXdvcmQoJ2Z1bmN0aW9uJykpIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
ZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9vICgpIHt9CiAgICAgICAgICAgICAgICAgICAgIC8v
IGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHt9Ci0gICAgICAgICAgICAgICAgICAgIHZhciBk
ZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKHRydWUpOworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xh
cmF0aW9uKHRydWUpOwogICAgICAgICAgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9IHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xh
cmF0aW9uKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRo
aXMubWF0Y2hLZXl3b3JkKCdjbGFzcycpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGV4cG9y
dCBkZWZhdWx0IGNsYXNzIGZvbyB7fQotICAgICAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRp
b24gPSB0aGlzLnBhcnNlQ2xhc3NEZWNsYXJhdGlvbih0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlQ2xhc3NEZWNsYXJhdGlvbih0cnVlKTsK
ICAgICAgICAgICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBOb2RlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoQ29udGV4
dHVhbEtleXdvcmQoJ2FzeW5jJykpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRl
ZmF1bHQgYXN5bmMgZnVuY3Rpb24gZiAoKSB7fQogICAgICAgICAgICAgICAgICAgICAvLyBleHBv
cnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAoKSB7fQogICAgICAgICAgICAgICAgICAgICAvLyBl
eHBvcnQgZGVmYXVsdCBhc3luYyB4ID0+IHgKLSAgICAgICAgICAgICAgICAgICAgdmFyIGRlY2xh
cmF0aW9uID0gdGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKSA/IHRoaXMucGFyc2VGdW5jdGlvbkRl
Y2xhcmF0aW9uKHRydWUpIDogdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gdGhpcy5tYXRjaEFzeW5jRnVuY3Rp
b24oKSA/IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKHRydWUpIDogdGhpcy5wYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydERlY2xhcmF0
aW9uID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHBvcnREZWZhdWx0RGVjbGFyYXRp
b24oZGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxz
ZSB7CkBAIC00OTQzLDcgKzQ4ODIsNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVs
ZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICAvLyBleHBvcnQg
ZGVmYXVsdCB7fTsKICAgICAgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgW107CiAg
ICAgICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0ICgxICsgMik7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IHRoaXMubWF0Y2goJ3snKSA/IHRoaXMucGFyc2VP
YmplY3RJbml0aWFsaXplcigpIDoKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVjbGFyYXRp
b24gPSB0aGlzLm1hdGNoKCd7JykgPyB0aGlzLnBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIoKSA6CiAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKCdbJykgPyB0aGlzLnBhcnNlQXJyYXlJ
bml0aWFsaXplcigpIDogdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CiAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOwogICAgICAgICAgICAgICAgICAg
ICBleHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0
RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSk7CkBAIC00OTUzLDE3ICs0ODkyLDE3IEBA
IHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFw
CiAgICAgICAgICAgICAgICAgLy8gZXhwb3J0ICogZnJvbSAnZm9vJzsKICAgICAgICAgICAgICAg
ICB0aGlzLm5leHRUb2tlbigpOwogICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaENvbnRl
eHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2Ug
PSB0aGlzLmxvb2thaGVhZC52YWx1ZSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRv
a2VuIDogbWVzc2FnZXNfMS5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZTsKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMubG9va2FoZWFkLnZhbHVlID8gbWVzc2FnZXNf
MS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBtZXNzYWdlc18xLk1lc3NhZ2VzLk1pc3NpbmdG
cm9tQ2xhdXNlOwogICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZSwg
dGhpcy5sb29rYWhlYWQudmFsdWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB0aGlzLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgIHZhciBzcmMgPSB0aGlzLnBhcnNl
TW9kdWxlU3BlY2lmaWVyKCk7CisgICAgICAgICAgICAgICAgY29uc3Qgc3JjID0gdGhpcy5wYXJz
ZU1vZHVsZVNwZWNpZmllcigpOwogICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xv
bigpOwogICAgICAgICAgICAgICAgIGV4cG9ydERlY2xhcmF0aW9uID0gdGhpcy5maW5hbGl6ZShu
b2RlLCBuZXcgTm9kZS5FeHBvcnRBbGxEZWNsYXJhdGlvbihzcmMpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IDQgLyogS2V5d29y
ZCAqLykgewogICAgICAgICAgICAgICAgIC8vIGV4cG9ydCB2YXIgZiA9IDE7Ci0gICAgICAgICAg
ICAgICAgdmFyIGRlY2xhcmF0aW9uID0gdm9pZCAwOworICAgICAgICAgICAgICAgIGxldCBkZWNs
YXJhdGlvbjsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMubG9va2FoZWFkLnZhbHVlKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xldCc6CiAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ2NvbnN0JzoKQEAgLTQ5ODAsMTMgKzQ5MTksMTMgQEAgcmV0dXJuIC8qKioqKiovIChmdW5j
dGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBleHBv
cnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0TmFtZWRE
ZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgW10sIG51bGwpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hBc3luY0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpOwor
ICAgICAgICAgICAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUZ1bmN0aW9uRGVj
bGFyYXRpb24oKTsKICAgICAgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0TmFtZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwg
W10sIG51bGwpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIHZhciBzcGVjaWZpZXJzID0gW107Ci0gICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9
IG51bGw7Ci0gICAgICAgICAgICAgICAgdmFyIGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBjb25zdCBzcGVjaWZpZXJzID0gW107CisgICAgICAgICAgICAg
ICAgbGV0IHNvdXJjZSA9IG51bGw7CisgICAgICAgICAgICAgICAgbGV0IGlzRXhwb3J0RnJvbUlk
ZW50aWZpZXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgneycpOwogICAg
ICAgICAgICAgICAgIHdoaWxlICghdGhpcy5tYXRjaCgnfScpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgPSBpc0V4cG9ydEZyb21JZGVudGlmaWVyIHx8IHRo
aXMubWF0Y2hLZXl3b3JkKCdkZWZhdWx0Jyk7CkBAIC01MDA1LDcgKzQ5NDQsNyBAQCByZXR1cm4g
LyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0V4cG9ydEZyb21JZGVudGlm
aWVyKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH07IC8vIG1pc3Np
bmcgZnJvbUNsYXVzZQotICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXMubG9v
a2FoZWFkLnZhbHVlID8gbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBtZXNz
YWdlc18xLk1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlOworICAgICAgICAgICAgICAgICAgICBj
b25zdCBtZXNzYWdlID0gdGhpcy5sb29rYWhlYWQudmFsdWUgPyBtZXNzYWdlc18xLk1lc3NhZ2Vz
LlVuZXhwZWN0ZWRUb2tlbiA6IG1lc3NhZ2VzXzEuTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2U7
CiAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlLCB0aGlzLmxvb2th
aGVhZC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewpA
QCAtNTAxNSw5ICs0OTU0LDggQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7
IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0TmFtZWREZWNsYXJhdGlvbihudWxs
LCBzcGVjaWZpZXJzLCBzb3VyY2UpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVy
biBleHBvcnREZWNsYXJhdGlvbjsKLSAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIFBhcnNlcjsK
LSAgICB9KCkpOworICAgICAgICB9CisgICAgfQogICAgIGV4cG9ydHMuUGFyc2VyID0gUGFyc2Vy
OwogCiAKQEAgLTUwNDcsMjQgKzQ5ODUsMjQgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAidXNlIHN0cmljdCI7CiAgICAgLyog
dHNsaW50OmRpc2FibGU6bWF4LWNsYXNzZXMtcGVyLWZpbGUgKi8KICAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7IHZhbHVlOiB0cnVlIH0pOwotICAgIHZh
ciBFcnJvckhhbmRsZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1
bmN0aW9uIEVycm9ySGFuZGxlcigpIHsKKyAgICBjbGFzcyBFcnJvckhhbmRsZXIgeworICAgICAg
ICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gW107CiAgICAgICAg
ICAgICB0aGlzLnRvbGVyYW50ID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgRXJyb3JIYW5k
bGVyLnByb3RvdHlwZS5yZWNvcmRFcnJvciA9IGZ1bmN0aW9uIChlcnJvcikgeworICAgICAgICBy
ZWNvcmRFcnJvcihlcnJvcikgewogICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcik7
Ci0gICAgICAgIH07Ci0gICAgICAgIEVycm9ySGFuZGxlci5wcm90b3R5cGUudG9sZXJhdGUgPSBm
dW5jdGlvbiAoZXJyb3IpIHsKKyAgICAgICAgfQorICAgICAgICB0b2xlcmF0ZShlcnJvcikgewog
ICAgICAgICAgICAgaWYgKHRoaXMudG9sZXJhbnQpIHsKICAgICAgICAgICAgICAgICB0aGlzLnJl
Y29yZEVycm9yKGVycm9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICB9OwotICAg
ICAgICBFcnJvckhhbmRsZXIucHJvdG90eXBlLmNvbnN0cnVjdEVycm9yID0gZnVuY3Rpb24gKG1z
ZywgY29sdW1uKSB7Ci0gICAgICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobXNnKTsKKyAg
ICAgICAgfQorICAgICAgICBjb25zdHJ1Y3RFcnJvcihtc2csIGNvbHVtbikgeworICAgICAgICAg
ICAgbGV0IGVycm9yID0gbmV3IEVycm9yKG1zZyk7CiAgICAgICAgICAgICB0cnkgewogICAgICAg
ICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgICAgfQpAQCAtNTA3NywyOSArNTAxNSwy
OCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3Rz
dHJhcAogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQg
Ki8KICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKLSAgICAgICAgfTsKLSAgICAgICAgRXJyb3JI
YW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFcnJvciA9IGZ1bmN0aW9uIChpbmRleCwgbGluZSwgY29s
LCBkZXNjcmlwdGlvbikgewotICAgICAgICAgICAgdmFyIG1zZyA9ICdMaW5lICcgKyBsaW5lICsg
JzogJyArIGRlc2NyaXB0aW9uOwotICAgICAgICAgICAgdmFyIGVycm9yID0gdGhpcy5jb25zdHJ1
Y3RFcnJvcihtc2csIGNvbCk7CisgICAgICAgIH0KKyAgICAgICAgY3JlYXRlRXJyb3IoaW5kZXgs
IGxpbmUsIGNvbCwgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgIGNvbnN0IG1zZyA9ICdMaW5l
ICcgKyBsaW5lICsgJzogJyArIGRlc2NyaXB0aW9uOworICAgICAgICAgICAgY29uc3QgZXJyb3Ig
PSB0aGlzLmNvbnN0cnVjdEVycm9yKG1zZywgY29sKTsKICAgICAgICAgICAgIGVycm9yLmluZGV4
ID0gaW5kZXg7CiAgICAgICAgICAgICBlcnJvci5saW5lTnVtYmVyID0gbGluZTsKICAgICAgICAg
ICAgIGVycm9yLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CiAgICAgICAgICAgICByZXR1cm4g
ZXJyb3I7Ci0gICAgICAgIH07Ci0gICAgICAgIEVycm9ySGFuZGxlci5wcm90b3R5cGUudGhyb3dF
cnJvciA9IGZ1bmN0aW9uIChpbmRleCwgbGluZSwgY29sLCBkZXNjcmlwdGlvbikgeworICAgICAg
ICB9CisgICAgICAgIHRocm93RXJyb3IoaW5kZXgsIGxpbmUsIGNvbCwgZGVzY3JpcHRpb24pIHsK
ICAgICAgICAgICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3IoaW5kZXgsIGxpbmUsIGNvbCwgZGVz
Y3JpcHRpb24pOwotICAgICAgICB9OwotICAgICAgICBFcnJvckhhbmRsZXIucHJvdG90eXBlLnRv
bGVyYXRlRXJyb3IgPSBmdW5jdGlvbiAoaW5kZXgsIGxpbmUsIGNvbCwgZGVzY3JpcHRpb24pIHsK
LSAgICAgICAgICAgIHZhciBlcnJvciA9IHRoaXMuY3JlYXRlRXJyb3IoaW5kZXgsIGxpbmUsIGNv
bCwgZGVzY3JpcHRpb24pOworICAgICAgICB9CisgICAgICAgIHRvbGVyYXRlRXJyb3IoaW5kZXgs
IGxpbmUsIGNvbCwgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhp
cy5jcmVhdGVFcnJvcihpbmRleCwgbGluZSwgY29sLCBkZXNjcmlwdGlvbik7CiAgICAgICAgICAg
ICBpZiAodGhpcy50b2xlcmFudCkgewogICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkRXJyb3Io
ZXJyb3IpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIHJldHVy
biBFcnJvckhhbmRsZXI7Ci0gICAgfSgpKTsKKyAgICAgICAgfQorICAgIH0KICAgICBleHBvcnRz
LkVycm9ySGFuZGxlciA9IEVycm9ySGFuZGxlcjsKIAogCkBAIC01MTIzLDYgKzUwNjAsOSBAQCBy
ZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAog
ICAgICAgICBEdXBsaWNhdGVCaW5kaW5nOiAnRHVwbGljYXRlIGJpbmRpbmcgJTAnLAogICAgICAg
ICBEdXBsaWNhdGVDb25zdHJ1Y3RvcjogJ0EgY2xhc3MgbWF5IG9ubHkgaGF2ZSBvbmUgY29uc3Ry
dWN0b3InLAogICAgICAgICBEdXBsaWNhdGVQcm90b1Byb3BlcnR5OiAnRHVwbGljYXRlIF9fcHJv
dG9fXyBmaWVsZHMgYXJlIG5vdCBhbGxvd2VkIGluIG9iamVjdCBsaXRlcmFscycsCisgICAgICAg
IEZvckF3YWl0SW5Ob25Bc3luYzogJ2Zvci1hd2FpdC1vZiBjYW4gb25seSBiZSB1c2VkIGluIGFu
IGFzeW5jIGZ1bmN0aW9uIG9yIGFzeW5jIGdlbmVyYXRvcicsCisgICAgICAgIEZvckF3YWl0T2ZT
ZW1pY29sb246ICdVbmV4cGVjdGVkIFwnO1wnIGluIGZvci1hd2FpdC1vZiBoZWFkZXInLAorICAg
ICAgICBGb3JBd2FpdE9mU2F3SW46ICdVbmV4cGVjdGVkIFwnaW5cJyBpbiBmb3ItYXdhaXQtb2Yg
aGVhZGVyJywKICAgICAgICAgRm9ySW5PZkxvb3BJbml0aWFsaXplcjogJyUwIGxvb3AgdmFyaWFi
bGUgZGVjbGFyYXRpb24gbWF5IG5vdCBoYXZlIGFuIGluaXRpYWxpemVyJywKICAgICAgICAgR2Vu
ZXJhdG9ySW5MZWdhY3lDb250ZXh0OiAnR2VuZXJhdG9yIGRlY2xhcmF0aW9ucyBhcmUgbm90IGFs
bG93ZWQgaW4gbGVnYWN5IGNvbnRleHRzJywKICAgICAgICAgSWxsZWdhbEJyZWFrOiAnSWxsZWdh
bCBicmVhayBzdGF0ZW1lbnQnLApAQCAtNTEzNyw2ICs1MDc3LDggQEAgcmV0dXJuIC8qKioqKiov
IChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgSW52YWxp
ZExIU0luRm9ySW46ICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvci1pbicsCiAgICAgICAg
IEludmFsaWRMSFNJbkZvckxvb3A6ICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvci1sb29w
JywKICAgICAgICAgSW52YWxpZE1vZHVsZVNwZWNpZmllcjogJ1VuZXhwZWN0ZWQgdG9rZW4nLAor
ICAgICAgICBJbnZhbGlkTnVtZXJpY1NlcGFyYXRvckFmdGVyTGVhZGluZ1plcm86ICdOdW1lcmlj
IHNlcnBhcmF0b3IgY2FuIG5vdCBiZSB1c2VkIGFmdGVyIGxlYWRpbmcgMCcsCisgICAgICAgIElu
dmFsaWROdW1lcmljU2VwYXJhdG9yQWZ0ZXJOdW1lcmljTGl0ZXJhbDogJ051bWVyaWMgc2VwYXJh
dG9ycyBhcmUgbm90IGFsbG93ZWQgYXQgdGhlIGVuZCBvZiBudW1lcmljIGxpdGVyYWxzJywKICAg
ICAgICAgSW52YWxpZFJlZ0V4cDogJ0ludmFsaWQgcmVndWxhciBleHByZXNzaW9uJywKICAgICAg
ICAgTGV0SW5MZXhpY2FsQmluZGluZzogJ2xldCBpcyBkaXNhbGxvd2VkIGFzIGEgbGV4aWNhbGx5
IGJvdW5kIG5hbWUnLAogICAgICAgICBNaXNzaW5nRnJvbUNsYXVzZTogJ1VuZXhwZWN0ZWQgdG9r
ZW4nLApAQCAtNTE4MSwxNyArNTEyMywxNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1v
ZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogCiAgICAgInVzZSBzdHJpY3QiOwogICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUg
fSk7Ci0gICAgdmFyIGFzc2VydF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTsKLSAgICB2YXIg
Y2hhcmFjdGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOwotICAgIHZhciBtZXNzYWdlc18x
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7CisgICAgY29uc3QgYXNzZXJ0XzEgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDkpOworICAgIGNvbnN0IGNoYXJhY3Rlcl8xID0gX193ZWJwYWNrX3JlcXVp
cmVfXyg0KTsKKyAgICBjb25zdCBtZXNzYWdlc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7
CiAgICAgZnVuY3Rpb24gaGV4VmFsdWUoY2gpIHsKICAgICAgICAgcmV0dXJuICcwMTIzNDU2Nzg5
YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpOwogICAgIH0KICAgICBmdW5jdGlvbiBv
Y3RhbFZhbHVlKGNoKSB7CiAgICAgICAgIHJldHVybiAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpOwog
ICAgIH0KLSAgICB2YXIgU2Nhbm5lciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgZnVuY3Rpb24gU2Nhbm5lcihjb2RlLCBoYW5kbGVyKSB7CisgICAgY2xhc3MgU2Nhbm5l
ciB7CisgICAgICAgIGNvbnN0cnVjdG9yKGNvZGUsIGhhbmRsZXIpIHsKICAgICAgICAgICAgIHRo
aXMuc291cmNlID0gY29kZTsKICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gaGFuZGxl
cjsKICAgICAgICAgICAgIHRoaXMudHJhY2tDb21tZW50ID0gZmFsc2U7CkBAIC01MjAyLDMzICs1
MTQ0LDMxIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNr
Qm9vdHN0cmFwCiAgICAgICAgICAgICB0aGlzLmxpbmVTdGFydCA9IDA7CiAgICAgICAgICAgICB0
aGlzLmN1cmx5U3RhY2sgPSBbXTsKICAgICAgICAgfQotICAgICAgICBTY2FubmVyLnByb3RvdHlw
ZS5zYXZlU3RhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHNhdmVTdGF0ZSgpIHsKICAgICAg
ICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsCiAgICAg
ICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLAogICAgICAgICAgICAgICAg
IGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQKICAgICAgICAgICAgIH07Ci0gICAgICAgIH07Ci0g
ICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnJlc3RvcmVTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSkg
eworICAgICAgICB9CisgICAgICAgIHJlc3RvcmVTdGF0ZShzdGF0ZSkgewogICAgICAgICAgICAg
dGhpcy5pbmRleCA9IHN0YXRlLmluZGV4OwogICAgICAgICAgICAgdGhpcy5saW5lTnVtYmVyID0g
c3RhdGUubGluZU51bWJlcjsKICAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gc3RhdGUubGlu
ZVN0YXJ0OwotICAgICAgICB9OwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5lb2YgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgIH0KKyAgICAgICAgZW9mKCkgewogICAgICAgICAgICAgcmV0dXJu
IHRoaXMuaW5kZXggPj0gdGhpcy5sZW5ndGg7Ci0gICAgICAgIH07Ci0gICAgICAgIFNjYW5uZXIu
cHJvdG90eXBlLnRocm93VW5leHBlY3RlZFRva2VuID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHsKLSAg
ICAgICAgICAgIGlmIChtZXNzYWdlID09PSB2b2lkIDApIHsgbWVzc2FnZSA9IG1lc3NhZ2VzXzEu
TWVzc2FnZXMuVW5leHBlY3RlZFRva2VuSWxsZWdhbDsgfQorICAgICAgICB9CisgICAgICAgIHRo
cm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0
ZWRUb2tlbklsbGVnYWwpIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci50
aHJvd0Vycm9yKHRoaXMuaW5kZXgsIHRoaXMubGluZU51bWJlciwgdGhpcy5pbmRleCAtIHRoaXMu
bGluZVN0YXJ0ICsgMSwgbWVzc2FnZSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFNjYW5uZXIucHJv
dG90eXBlLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHsKLSAg
ICAgICAgICAgIGlmIChtZXNzYWdlID09PSB2b2lkIDApIHsgbWVzc2FnZSA9IG1lc3NhZ2VzXzEu
TWVzc2FnZXMuVW5leHBlY3RlZFRva2VuSWxsZWdhbDsgfQorICAgICAgICB9CisgICAgICAgIHRv
bGVyYXRlVW5leHBlY3RlZFRva2VuKG1lc3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhw
ZWN0ZWRUb2tlbklsbGVnYWwpIHsKICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVy
YXRlRXJyb3IodGhpcy5pbmRleCwgdGhpcy5saW5lTnVtYmVyLCB0aGlzLmluZGV4IC0gdGhpcy5s
aW5lU3RhcnQgKyAxLCBtZXNzYWdlKTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAv
LyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jb21tZW50cwotICAgICAgICBT
Y2FubmVyLnByb3RvdHlwZS5za2lwU2luZ2xlTGluZUNvbW1lbnQgPSBmdW5jdGlvbiAob2Zmc2V0
KSB7Ci0gICAgICAgICAgICB2YXIgY29tbWVudHMgPSBbXTsKLSAgICAgICAgICAgIHZhciBzdGFy
dCwgbG9jOworICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQob2Zmc2V0KSB7CisgICAgICAg
ICAgICBsZXQgY29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgIGxldCBzdGFydCwgbG9jOwogICAg
ICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7CiAgICAgICAgICAgICAgICAgY29tbWVu
dHMgPSBbXTsKICAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuaW5kZXggLSBvZmZzZXQ7CkBA
IC01MjQxLDcgKzUxODEsNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsg
Ly8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2gg
PSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpOworICAgICAgICAgICAgICAgIGNv
bnN0IGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTsKICAgICAgICAgICAg
ICAgICArK3RoaXMuaW5kZXg7CiAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJh
Y3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAodGhp
cy50cmFja0NvbW1lbnQpIHsKQEAgLTUyNDksNyArNTE4OSw3IEBAIHJldHVybiAvKioqKioqLyAo
ZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZTogdGhpcy5saW5lTnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbHVtbjogdGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0IC0gMQogICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG11bHRpTGluZTogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2xpY2U6IFtzdGFydCArIG9mZnNldCwgdGhpcy5pbmRleCAtIDFdLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIHRoaXMuaW5kZXggLSAxXSwKQEAgLTUyNzAs
NyArNTIxMCw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJw
YWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMubGluZU51bWJlciwK
ICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmluZGV4IC0gdGhpcy5saW5lU3RhcnQK
ICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBlbnRyeSA9IHsKICAgICAgICAgICAgICAgICAgICAgbXVsdGlMaW5l
OiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgc2xpY2U6IFtzdGFydCArIG9mZnNldCwgdGhp
cy5pbmRleF0sCiAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIHRoaXMuaW5kZXhd
LApAQCAtNTI3OSwxMCArNTIxOSwxMCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVs
ZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIGNvbW1lbnRzLnB1c2go
ZW50cnkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGNvbW1lbnRzOwotICAg
ICAgICB9OwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5za2lwTXVsdGlMaW5lQ29tbWVudCA9
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBjb21tZW50cyA9IFtdOwotICAgICAgICAg
ICAgdmFyIHN0YXJ0LCBsb2M7CisgICAgICAgIH0KKyAgICAgICAgc2tpcE11bHRpTGluZUNvbW1l
bnQoKSB7CisgICAgICAgICAgICBsZXQgY29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgIGxldCBz
dGFydCwgbG9jOwogICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7CiAgICAgICAg
ICAgICAgICAgY29tbWVudHMgPSBbXTsKICAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuaW5k
ZXggLSAyOwpAQCAtNTI5NSw3ICs1MjM1LDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICB9OwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTsKKyAgICAgICAg
ICAgICAgICBjb25zdCBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7CiAg
ICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9y
KGNoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQgJiYgdGhpcy5zb3Vy
Y2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSkgPT09IDB4MEEpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICsrdGhpcy5pbmRleDsKQEAgLTUzMTMsNyArNTI1Myw3IEBAIHJldHVybiAvKioq
KioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMubGluZU51bWJlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmluZGV4IC0gdGhpcy5saW5lU3RhcnQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBlbnRyeSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRy
eSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlMaW5lOiB0cnVlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZTogW3N0YXJ0ICsgMiwgdGhpcy5p
bmRleCAtIDJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0
LCB0aGlzLmluZGV4XSwKQEAgLTUzMzUsNyArNTI3NSw3IEBAIHJldHVybiAvKioqKioqLyAoZnVu
Y3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAg
IGxpbmU6IHRoaXMubGluZU51bWJlciwKICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlz
LmluZGV4IC0gdGhpcy5saW5lU3RhcnQKICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAg
ICAgIHZhciBlbnRyeSA9IHsKKyAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHsKICAgICAg
ICAgICAgICAgICAgICAgbXVsdGlMaW5lOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICBzbGlj
ZTogW3N0YXJ0ICsgMiwgdGhpcy5pbmRleF0sCiAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBb
c3RhcnQsIHRoaXMuaW5kZXhdLApAQCAtNTM0NSwxNSArNTI4NSwxNSBAQCByZXR1cm4gLyoqKioq
Ki8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAg
fQogICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICAg
ICAgcmV0dXJuIGNvbW1lbnRzOwotICAgICAgICB9OwotICAgICAgICBTY2FubmVyLnByb3RvdHlw
ZS5zY2FuQ29tbWVudHMgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgY29tbWVudHM7
CisgICAgICAgIH0KKyAgICAgICAgc2NhbkNvbW1lbnRzKCkgeworICAgICAgICAgICAgbGV0IGNv
bW1lbnRzOwogICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7CiAgICAgICAgICAg
ICAgICAgY29tbWVudHMgPSBbXTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBzdGFy
dCA9ICh0aGlzLmluZGV4ID09PSAwKTsKKyAgICAgICAgICAgIGxldCBzdGFydCA9ICh0aGlzLmlu
ZGV4ID09PSAwKTsKICAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgewotICAgICAgICAg
ICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7CisgICAg
ICAgICAgICAgICAgbGV0IGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTsK
ICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzV2hpdGVTcGFjZShj
aCkpIHsKICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OwogICAgICAgICAgICAgICAg
IH0KQEAgLTUzNzAsNyArNTMxMCw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxl
cykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5z
b3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChjaCA9PT0gMHgyRikgewogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAy
OwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSB0aGlzLnNraXBTaW5nbGVM
aW5lQ29tbWVudCgyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1lbnQgPSB0
aGlzLnNraXBTaW5nbGVMaW5lQ29tbWVudCgyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0aGlzLnRyYWNrQ29tbWVudCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1l
bnRzID0gY29tbWVudHMuY29uY2F0KGNvbW1lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtNTM3OCw3ICs1MzE4LDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVz
KSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gMHgyQSkgeyAvLyBVKzAwMkEgaXMgJyonCiAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgY29tbWVudCA9IHRoaXMuc2tpcE11bHRpTGluZUNvbW1lbnQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLnNraXBNdWx0aUxpbmVDb21tZW50
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cyA9IGNvbW1lbnRzLmNvbmNhdChjb21t
ZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTUzOTIsNyArNTMzMiw3IEBAIHJl
dHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAg
ICAgICAgICAgICAgICAgICAgIGlmICgodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4
ICsgMSkgPT09IDB4MkQpICYmICh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXggKyAy
KSA9PT0gMHgzRSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vICctLT4nIGlzIGEgc2lu
Z2xlLWxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAz
OwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSB0aGlzLnNraXBTaW5nbGVM
aW5lQ29tbWVudCgzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1lbnQgPSB0
aGlzLnNraXBTaW5nbGVMaW5lQ29tbWVudCgzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0aGlzLnRyYWNrQ29tbWVudCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1l
bnRzID0gY29tbWVudHMuY29uY2F0KGNvbW1lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtNTQwNCw3ICs1MzQ0LDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVz
KSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0g
MHgzQyAmJiAhdGhpcy5pc01vZHVsZSkgeyAvLyBVKzAwM0MgaXMgJzwnCiAgICAgICAgICAgICAg
ICAgICAgIGlmICh0aGlzLnNvdXJjZS5zbGljZSh0aGlzLmluZGV4ICsgMSwgdGhpcy5pbmRleCAr
IDQpID09PSAnIS0tJykgewogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSA0
OyAvLyBgPCEtLWAKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5z
a2lwU2luZ2xlTGluZUNvbW1lbnQoNCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
b21tZW50ID0gdGhpcy5za2lwU2luZ2xlTGluZUNvbW1lbnQoNCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb21tZW50cyA9IGNvbW1lbnRzLmNvbmNhdChjb21tZW50KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KQEAgLTU0MTgsOSArNTM1OCw5IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rp
b24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGNvbW1lbnRzOwotICAgICAgICB9OworICAg
ICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWZ1
dHVyZS1yZXNlcnZlZC13b3JkcwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5pc0Z1dHVyZVJl
c2VydmVkV29yZCA9IGZ1bmN0aW9uIChpZCkgeworICAgICAgICBpc0Z1dHVyZVJlc2VydmVkV29y
ZChpZCkgewogICAgICAgICAgICAgc3dpdGNoIChpZCkgewogICAgICAgICAgICAgICAgIGNhc2Ug
J2VudW0nOgogICAgICAgICAgICAgICAgIGNhc2UgJ2V4cG9ydCc6CkBAIC01NDMwLDggKzUzNzAs
OCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3Rz
dHJhcAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90
b3R5cGUuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAg
IH0KKyAgICAgICAgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkKSB7CiAgICAgICAgICAgICBz
d2l0Y2ggKGlkKSB7CiAgICAgICAgICAgICAgICAgY2FzZSAnaW1wbGVtZW50cyc6CiAgICAgICAg
ICAgICAgICAgY2FzZSAnaW50ZXJmYWNlJzoKQEAgLTU0NDYsMTIgKzUzODYsMTIgQEAgcmV0dXJu
IC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLmlzUmVz
dHJpY3RlZFdvcmQgPSBmdW5jdGlvbiAoaWQpIHsKKyAgICAgICAgfQorICAgICAgICBpc1Jlc3Ry
aWN0ZWRXb3JkKGlkKSB7CiAgICAgICAgICAgICByZXR1cm4gaWQgPT09ICdldmFsJyB8fCBpZCA9
PT0gJ2FyZ3VtZW50cyc7Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6
Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMta2V5d29yZHMKLSAgICAgICAgU2Nhbm5lci5w
cm90b3R5cGUuaXNLZXl3b3JkID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIGlzS2V5d29yZChp
ZCkgewogICAgICAgICAgICAgc3dpdGNoIChpZC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICBj
YXNlIDI6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdpZicpIHx8IChpZCA9
PT0gJ2luJykgfHwgKGlkID09PSAnZG8nKTsKQEAgLTU0NzcsMjIgKzU0MTcsMjIgQEAgcmV0dXJu
IC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLmNvZGVQ
b2ludEF0ID0gZnVuY3Rpb24gKGkpIHsKLSAgICAgICAgICAgIHZhciBjcCA9IHRoaXMuc291cmNl
LmNoYXJDb2RlQXQoaSk7CisgICAgICAgIH0KKyAgICAgICAgY29kZVBvaW50QXQoaSkgeworICAg
ICAgICAgICAgbGV0IGNwID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdChpKTsKICAgICAgICAgICAg
IGlmIChjcCA+PSAweEQ4MDAgJiYgY3AgPD0gMHhEQkZGKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHNlY29uZCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQoaSArIDEpOworICAgICAgICAgICAgICAg
IGNvbnN0IHNlY29uZCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQoaSArIDEpOwogICAgICAgICAg
ICAgICAgIGlmIChzZWNvbmQgPj0gMHhEQzAwICYmIHNlY29uZCA8PSAweERGRkYpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIGZpcnN0ID0gY3A7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGZpcnN0ID0gY3A7CiAgICAgICAgICAgICAgICAgICAgIGNwID0gKGZpcnN0IC0gMHhEODAwKSAq
IDB4NDAwICsgc2Vjb25kIC0gMHhEQzAwICsgMHgxMDAwMDsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gY3A7Ci0gICAgICAgIH07Ci0gICAgICAg
IFNjYW5uZXIucHJvdG90eXBlLnNjYW5IZXhFc2NhcGUgPSBmdW5jdGlvbiAocHJlZml4KSB7Ci0g
ICAgICAgICAgICB2YXIgbGVuID0gKHByZWZpeCA9PT0gJ3UnKSA/IDQgOiAyOwotICAgICAgICAg
ICAgdmFyIGNvZGUgPSAwOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsr
aSkgeworICAgICAgICB9CisgICAgICAgIHNjYW5IZXhFc2NhcGUocHJlZml4KSB7CisgICAgICAg
ICAgICBjb25zdCBsZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7CisgICAgICAgICAgICBs
ZXQgY29kZSA9IDA7CisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVvZigpICYmIGNoYXJhY3Rlcl8xLkNoYXJhY3Rl
ci5pc0hleERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyBoZXhWYWx1ZSh0aGlzLnNvdXJjZVt0
aGlzLmluZGV4KytdKTsKICAgICAgICAgICAgICAgICB9CkBAIC01NTAxLDEwICs1NDQxLDEwIEBA
IHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFw
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIFN0
cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7Ci0gICAgICAgIH07Ci0gICAgICAgIFNjYW5uZXIucHJv
dG90eXBlLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlID0gZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07Ci0gICAgICAgICAgICB2YXIg
Y29kZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUo
KSB7CisgICAgICAgICAgICBsZXQgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKKyAgICAg
ICAgICAgIGxldCBjb2RlID0gMDsKICAgICAgICAgICAgIC8vIEF0IGxlYXN0LCBvbmUgaGV4IGRp
Z2l0IGlzIHJlcXVpcmVkLgogICAgICAgICAgICAgaWYgKGNoID09PSAnfScpIHsKICAgICAgICAg
ICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CkBAIC01NTIwLDExICs1NDYwLDEx
IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0
cmFwCiAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5mcm9tQ29k
ZVBvaW50KGNvZGUpOwotICAgICAgICB9OwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5nZXRJ
ZGVudGlmaWVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5p
bmRleCsrOworICAgICAgICB9CisgICAgICAgIGdldElkZW50aWZpZXIoKSB7CisgICAgICAgICAg
ICBjb25zdCBzdGFydCA9IHRoaXMuaW5kZXgrKzsKICAgICAgICAgICAgIHdoaWxlICghdGhpcy5l
b2YoKSkgewotICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQo
dGhpcy5pbmRleCk7CisgICAgICAgICAgICAgICAgY29uc3QgY2ggPSB0aGlzLnNvdXJjZS5jaGFy
Q29kZUF0KHRoaXMuaW5kZXgpOwogICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHg1Qykgewog
ICAgICAgICAgICAgICAgICAgICAvLyBCbGFja3NsYXNoIChVKzAwNUMpIG1hcmtzIFVuaWNvZGUg
ZXNjYXBlIHNlcXVlbmNlLgogICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gc3RhcnQ7
CkBAIC01NTQzLDEzICs1NDgzLDEzIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxl
cykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlLnNsaWNlKHN0YXJ0LCB0aGlzLmluZGV4
KTsKLSAgICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5cGUuZ2V0Q29tcGxleElkZW50
aWZpZXIgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgY3AgPSB0aGlzLmNvZGVQb2lu
dEF0KHRoaXMuaW5kZXgpOwotICAgICAgICAgICAgdmFyIGlkID0gY2hhcmFjdGVyXzEuQ2hhcmFj
dGVyLmZyb21Db2RlUG9pbnQoY3ApOworICAgICAgICB9CisgICAgICAgIGdldENvbXBsZXhJZGVu
dGlmaWVyKCkgeworICAgICAgICAgICAgbGV0IGNwID0gdGhpcy5jb2RlUG9pbnRBdCh0aGlzLmlu
ZGV4KTsKKyAgICAgICAgICAgIGxldCBpZCA9IGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5mcm9tQ29k
ZVBvaW50KGNwKTsKICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gaWQubGVuZ3RoOwogICAgICAg
ICAgICAgLy8gJ1x1JyAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0
ZXIuCi0gICAgICAgICAgICB2YXIgY2g7CisgICAgICAgICAgICBsZXQgY2g7CiAgICAgICAgICAg
ICBpZiAoY3AgPT09IDB4NUMpIHsKICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2UuY2hh
ckNvZGVBdCh0aGlzLmluZGV4KSAhPT0gMHg3NSkgewogICAgICAgICAgICAgICAgICAgICB0aGlz
LnRocm93VW5leHBlY3RlZFRva2VuKCk7CkBAIC01NTk2LDExICs1NTM2LDExIEBAIHJldHVybiAv
KioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGlkOwotICAgICAg
ICB9OwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5vY3RhbFRvRGVjaW1hbCA9IGZ1bmN0aW9u
IChjaCkgeworICAgICAgICB9CisgICAgICAgIG9jdGFsVG9EZWNpbWFsKGNoKSB7CiAgICAgICAg
ICAgICAvLyBcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVlbmNlCi0gICAgICAgICAgICB2YXIg
b2N0YWwgPSAoY2ggIT09ICcwJyk7Ci0gICAgICAgICAgICB2YXIgY29kZSA9IG9jdGFsVmFsdWUo
Y2gpOworICAgICAgICAgICAgbGV0IG9jdGFsID0gKGNoICE9PSAnMCcpOworICAgICAgICAgICAg
bGV0IGNvZGUgPSBvY3RhbFZhbHVlKGNoKTsKICAgICAgICAgICAgIGlmICghdGhpcy5lb2YoKSAm
JiBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNPY3RhbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2Rl
QXQodGhpcy5pbmRleCkpKSB7CiAgICAgICAgICAgICAgICAgb2N0YWwgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArIG9jdGFsVmFsdWUodGhpcy5zb3VyY2VbdGhpcy5p
bmRleCsrXSk7CkBAIC01NjE0LDEzICs1NTU0LDEzIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rp
b24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgY29kZTog
Y29kZSwKICAgICAgICAgICAgICAgICBvY3RhbDogb2N0YWwKICAgICAgICAgICAgIH07Ci0gICAg
ICAgIH07CisgICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21h
MjYyLyNzZWMtbmFtZXMtYW5kLWtleXdvcmRzCi0gICAgICAgIFNjYW5uZXIucHJvdG90eXBlLnNj
YW5JZGVudGlmaWVyID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHR5cGU7Ci0gICAg
ICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4OworICAgICAgICBzY2FuSWRlbnRpZmllcigp
IHsKKyAgICAgICAgICAgIGxldCB0eXBlOworICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlz
LmluZGV4OwogICAgICAgICAgICAgLy8gQmFja3NsYXNoIChVKzAwNUMpIHN0YXJ0cyBhbiBlc2Nh
cGVkIGNoYXJhY3Rlci4KLSAgICAgICAgICAgIHZhciBpZCA9ICh0aGlzLnNvdXJjZS5jaGFyQ29k
ZUF0KHN0YXJ0KSA9PT0gMHg1QykgPyB0aGlzLmdldENvbXBsZXhJZGVudGlmaWVyKCkgOiB0aGlz
LmdldElkZW50aWZpZXIoKTsKKyAgICAgICAgICAgIGNvbnN0IGlkID0gKHRoaXMuc291cmNlLmNo
YXJDb2RlQXQoc3RhcnQpID09PSAweDVDKSA/IHRoaXMuZ2V0Q29tcGxleElkZW50aWZpZXIoKSA6
IHRoaXMuZ2V0SWRlbnRpZmllcigpOwogICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8ga2V5d29y
ZCBvciBsaXRlcmFsIHdpdGggb25seSBvbmUgY2hhcmFjdGVyLgogICAgICAgICAgICAgLy8gVGh1
cywgaXQgbXVzdCBiZSBhbiBpZGVudGlmaWVyLgogICAgICAgICAgICAgaWYgKGlkLmxlbmd0aCA9
PT0gMSkgewpAQCAtNTYzOSw3ICs1NTc5LDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICB0eXBlID0gMyAv
KiBJZGVudGlmaWVyICovOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHR5cGUgIT09
IDMgLyogSWRlbnRpZmllciAqLyAmJiAoc3RhcnQgKyBpZC5sZW5ndGggIT09IHRoaXMuaW5kZXgp
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3RvcmUgPSB0aGlzLmluZGV4OworICAgICAgICAg
ICAgICAgIGNvbnN0IHJlc3RvcmUgPSB0aGlzLmluZGV4OwogICAgICAgICAgICAgICAgIHRoaXMu
aW5kZXggPSBzdGFydDsKICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRv
a2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZEVzY2FwZWRSZXNlcnZlZFdvcmQpOwogICAg
ICAgICAgICAgICAgIHRoaXMuaW5kZXggPSByZXN0b3JlOwpAQCAtNTY1MiwxMiArNTU5MiwxMiBA
QCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJh
cAogICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgICAgICBlbmQ6IHRo
aXMuaW5kZXgKICAgICAgICAgICAgIH07Ci0gICAgICAgIH07CisgICAgICAgIH0KICAgICAgICAg
Ly8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHVuY3R1YXRvcnMKLSAgICAg
ICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblB1bmN0dWF0b3IgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4OworICAgICAgICBzY2FuUHVuY3R1YXRvcigp
IHsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5pbmRleDsKICAgICAgICAgICAgIC8v
IENoZWNrIGZvciBtb3N0IGNvbW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgotICAg
ICAgICAgICAgdmFyIHN0ciA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOworICAgICAgICAgICAg
bGV0IHN0ciA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOwogICAgICAgICAgICAgc3dpdGNoIChz
dHIpIHsKICAgICAgICAgICAgICAgICBjYXNlICcoJzoKICAgICAgICAgICAgICAgICBjYXNlICd7
JzoKQEAgLTU3MzIsMzggKzU2NzIsNTggQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1
bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQs
CiAgICAgICAgICAgICAgICAgZW5kOiB0aGlzLmluZGV4CiAgICAgICAgICAgICB9OwotICAgICAg
ICB9OworICAgICAgICB9CiAgICAgICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2
Mi8jc2VjLWxpdGVyYWxzLW51bWVyaWMtbGl0ZXJhbHMKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5
cGUuc2NhbkhleExpdGVyYWwgPSBmdW5jdGlvbiAoc3RhcnQpIHsKLSAgICAgICAgICAgIHZhciBu
dW0gPSAnJzsKLSAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgewotICAgICAgICAgICAg
ICAgIGlmICghY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSGV4RGlnaXQodGhpcy5zb3VyY2UuY2hh
ckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KSB7CisgICAgICAgICAgICBsZXQgbnVtID0gJyc7Cisg
ICAgICAgICAgICBsZXQgbmV4dEludmFsaWROdW1lcmljU2VwYXJhdG9yUG9zaXRpb24gPSB0aGlz
LmluZGV4OworICAgICAgICAgICAgd2hpbGUgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0hleERp
Z2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpIHx8IHRoaXMuc291cmNlW3Ro
aXMuaW5kZXhdID09PSAnXycpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhp
cy5pbmRleF0gPT09ICdfJykgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbmRleCA9
PT0gbmV4dEludmFsaWROdW1lcmljU2VwYXJhdG9yUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisgICAgICAgICAgICAgICAg
ICAgIG5leHRJbnZhbGlkTnVtZXJpY1NlcGFyYXRvclBvc2l0aW9uID0gdGhpcy5pbmRleDsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIG51bSArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKG51bS5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgICB0aGlz
LnRocm93VW5leHBlY3RlZFRva2VuKCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dGhpcy5pbmRleCA9PT0gbmV4dEludmFsaWROdW1lcmljU2VwYXJhdG9yUG9zaXRpb24pIHsKKyAg
ICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuSW52YWxpZE51bWVyaWNTZXBhcmF0b3JBZnRlck51bWVyaWNMaXRlcmFsKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGxldCBiaWdpbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICh0
aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJ24nKSB7CisgICAgICAgICAgICAgICAgKyt0aGlz
LmluZGV4OworICAgICAgICAgICAgICAgIGJpZ2ludCA9IHRydWU7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KHRo
aXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CiAgICAgICAgICAgICAgICAgdGhp
cy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0
dXJuIHsKICAgICAgICAgICAgICAgICB0eXBlOiA2IC8qIE51bWVyaWNMaXRlcmFsICovLAogICAg
ICAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludCgnMHgnICsgbnVtLCAxNiksCisgICAgICAgICAg
ICAgICAgYmlnaW50OiBiaWdpbnQsCiAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5s
aW5lTnVtYmVyLAogICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsCiAg
ICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICAgICAgIGVuZDogdGhpcy5p
bmRleAogICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAgU2Nhbm5lci5wcm90b3R5
cGUuc2NhbkJpbmFyeUxpdGVyYWwgPSBmdW5jdGlvbiAoc3RhcnQpIHsKLSAgICAgICAgICAgIHZh
ciBudW0gPSAnJzsKLSAgICAgICAgICAgIHZhciBjaDsKLSAgICAgICAgICAgIHdoaWxlICghdGhp
cy5lb2YoKSkgewotICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07
Ci0gICAgICAgICAgICAgICAgaWYgKGNoICE9PSAnMCcgJiYgY2ggIT09ICcxJykgewotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzY2FuQmluYXJ5TGl0ZXJh
bChzdGFydCkgeworICAgICAgICAgICAgbGV0IG51bSA9ICcnOworICAgICAgICAgICAgbGV0IGNo
OworICAgICAgICAgICAgbGV0IG5leHRJbnZhbGlkTnVtZXJpY1NlcGFyYXRvclBvc2l0aW9uID0g
dGhpcy5pbmRleDsKKyAgICAgICAgICAgIHdoaWxlICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9
PT0gJzAnIHx8IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAnMScgfHwgdGhpcy5zb3VyY2Vb
dGhpcy5pbmRleF0gPT09ICdfJykgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0
aGlzLmluZGV4XSA9PT0gJ18nKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluZGV4
ID09PSBuZXh0SW52YWxpZE51bWVyaWNTZXBhcmF0b3JQb3NpdGlvbikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAg
ICAgICAgbmV4dEludmFsaWROdW1lcmljU2VwYXJhdG9yUG9zaXRpb24gPSB0aGlzLmluZGV4Owor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgbnVtICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CiAgICAgICAgICAgICB9
CkBAIC01NzcxLDYgKzU3MzEsMTQgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVz
KSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAvLyBvbmx5IDBiIG9yIDBC
CiAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPT09IG5leHRJbnZhbGlkTnVtZXJpY1Nl
cGFyYXRvclBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRU
b2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWROdW1lcmljU2VwYXJhdG9yQWZ0ZXJOdW1l
cmljTGl0ZXJhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZXQgYmlnaW50ID0gZmFs
c2U7CisgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09ICduJykgewor
ICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICBiaWdpbnQgPSB0
cnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCF0aGlzLmVvZigpKSB7CiAgICAg
ICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpOwogICAg
ICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovCkBAIC01NzgxLDE1ICs1NzQ5
LDE2IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9v
dHN0cmFwCiAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgIHR5cGU6IDYgLyog
TnVtZXJpY0xpdGVyYWwgKi8sCiAgICAgICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bSwg
MiksCisgICAgICAgICAgICAgICAgYmlnaW50OiBiaWdpbnQsCiAgICAgICAgICAgICAgICAgbGlu
ZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLAogICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhp
cy5saW5lU3RhcnQsCiAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICAg
ICAgIGVuZDogdGhpcy5pbmRleAogICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAgICAg
U2Nhbm5lci5wcm90b3R5cGUuc2Nhbk9jdGFsTGl0ZXJhbCA9IGZ1bmN0aW9uIChwcmVmaXgsIHN0
YXJ0KSB7Ci0gICAgICAgICAgICB2YXIgbnVtID0gJyc7Ci0gICAgICAgICAgICB2YXIgb2N0YWwg
PSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBzY2FuT2N0YWxMaXRlcmFsKHByZWZpeCwgc3Rh
cnQsIGxlZ2FjeSkgeworICAgICAgICAgICAgbGV0IG51bSA9ICcnOworICAgICAgICAgICAgbGV0
IG9jdGFsID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlz
T2N0YWxEaWdpdChwcmVmaXguY2hhckNvZGVBdCgwKSkpIHsKICAgICAgICAgICAgICAgICBvY3Rh
bCA9IHRydWU7CiAgICAgICAgICAgICAgICAgbnVtID0gJzAnICsgdGhpcy5zb3VyY2VbdGhpcy5p
bmRleCsrXTsKQEAgLTU3OTcsOSArNTc2NiwxNSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9u
KG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgKyt0aGlzLmluZGV4OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hp
bGUgKCF0aGlzLmVvZigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFy
YWN0ZXIuaXNPY3RhbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbGV0IG5leHRJbnZhbGlk
TnVtZXJpY1NlcGFyYXRvclBvc2l0aW9uID0gbGVnYWN5ID8gLTEgOiB0aGlzLmluZGV4OworICAg
ICAgICAgICAgd2hpbGUgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodGhpcy5z
b3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkgfHwgdGhpcy5zb3VyY2VbdGhpcy5pbmRleF0g
PT09ICdfJykgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9
PT0gJ18nKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsZWdhY3kgfHwgdGhpcy5pbmRleCA9
PT0gbmV4dEludmFsaWROdW1lcmljU2VwYXJhdG9yUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisgICAgICAgICAgICAgICAg
ICAgIG5leHRJbnZhbGlkTnVtZXJpY1NlcGFyYXRvclBvc2l0aW9uID0gdGhpcy5pbmRleDsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIG51bSArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOwogICAgICAgICAgICAgfQpA
QCAtNTgwNyw2ICs1NzgyLDE0IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykg
eyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgLy8gb25seSAwbyBvciAwTwog
ICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID09PSBuZXh0SW52YWxpZE51bWVyaWNTZXBh
cmF0b3JQb3NpdGlvbikgeworICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9r
ZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTnVtZXJpY1NlcGFyYXRvckFmdGVyTnVtZXJp
Y0xpdGVyYWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGV0IGJpZ2ludCA9IGZhbHNl
OworICAgICAgICAgICAgaWYgKCFsZWdhY3kgJiYgdGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09
ICduJykgeworICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICBi
aWdpbnQgPSB0cnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8x
LkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMu
aW5kZXgpKSB8fCBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQodGhpcy5zb3Vy
Y2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKICAgICAgICAgICAgICAgICB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKCk7CiAgICAgICAgICAgICB9CkBAIC01ODE0LDE3ICs1Nzk3LDE4IEBA
IHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFw
CiAgICAgICAgICAgICAgICAgdHlwZTogNiAvKiBOdW1lcmljTGl0ZXJhbCAqLywKICAgICAgICAg
ICAgICAgICB2YWx1ZTogcGFyc2VJbnQobnVtLCA4KSwKICAgICAgICAgICAgICAgICBvY3RhbDog
b2N0YWwsCisgICAgICAgICAgICAgICAgYmlnaW50OiBiaWdpbnQsCiAgICAgICAgICAgICAgICAg
bGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLAogICAgICAgICAgICAgICAgIGxpbmVTdGFydDog
dGhpcy5saW5lU3RhcnQsCiAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAg
ICAgICAgIGVuZDogdGhpcy5pbmRleAogICAgICAgICAgICAgfTsKLSAgICAgICAgfTsKLSAgICAg
ICAgU2Nhbm5lci5wcm90b3R5cGUuaXNJbXBsaWNpdE9jdGFsTGl0ZXJhbCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgfQorICAgICAgICBpc0ltcGxpY2l0T2N0YWxMaXRlcmFsKCkgewogICAgICAg
ICAgICAgLy8gSW1wbGljaXQgb2N0YWwsIHVubGVzcyB0aGVyZSBpcyBhIG5vbi1vY3RhbCBkaWdp
dC4KICAgICAgICAgICAgIC8vIChBbm5leCBCLjEuMSBvbiBOdW1lcmljIExpdGVyYWxzKQotICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuaW5kZXggKyAxOyBpIDwgdGhpcy5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlW2ldOworICAgICAgICAg
ICAgZm9yIChsZXQgaSA9IHRoaXMuaW5kZXggKyAxOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgICAgIGNvbnN0IGNoID0gdGhpcy5zb3VyY2VbaV07CiAgICAgICAgICAgICAg
ICAgaWYgKGNoID09PSAnOCcgfHwgY2ggPT09ICc5JykgewogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTgzMywxMiArNTgxNywxMyBAQCBy
ZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9OwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuTnVtZXJpY0xpdGVy
YWwgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4Owot
ICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2Vbc3RhcnRdOworICAgICAgICB9CisgICAg
ICAgIHNjYW5OdW1lcmljTGl0ZXJhbCgpIHsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhp
cy5pbmRleDsKKyAgICAgICAgICAgIGxldCBjaCA9IHRoaXMuc291cmNlW3N0YXJ0XTsKICAgICAg
ICAgICAgIGFzc2VydF8xLmFzc2VydChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGln
aXQoY2guY2hhckNvZGVBdCgwKSkgfHwgKGNoID09PSAnLicpLCAnTnVtZXJpYyBsaXRlcmFsIG11
c3Qgc3RhcnQgd2l0aCBhIGRlY2ltYWwgZGlnaXQgb3IgYSBkZWNpbWFsIHBvaW50Jyk7Ci0gICAg
ICAgICAgICB2YXIgbnVtID0gJyc7CisgICAgICAgICAgICBsZXQgbmV4dEludmFsaWROdW1lcmlj
U2VwYXJhdG9yUG9zaXRpb24gPSAtMTsKKyAgICAgICAgICAgIGxldCBudW0gPSAnJzsKICAgICAg
ICAgICAgIGlmIChjaCAhPT0gJy4nKSB7CiAgICAgICAgICAgICAgICAgbnVtID0gdGhpcy5zb3Vy
Y2VbdGhpcy5pbmRleCsrXTsKICAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMu
aW5kZXhdOwpAQCAtNTg0Niw2ICs1ODMxLDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAvLyBPY3RhbCBu
dW1iZXIgc3RhcnRzIHdpdGggJzAnLgogICAgICAgICAgICAgICAgIC8vIE9jdGFsIG51bWJlciBp
biBFUzYgc3RhcnRzIHdpdGggJzBvJy4KICAgICAgICAgICAgICAgICAvLyBCaW5hcnkgbnVtYmVy
IGluIEVTNiBzdGFydHMgd2l0aCAnMGInLgorICAgICAgICAgICAgICAgIGxldCB3YXNaZXJvUHJl
Zml4ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAobnVtID09PSAnMCcpIHsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OwpAQCAtNTg1NiwzNCArNTg0Miw5NyBAQCByZXR1
cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbkJpbmFyeUxpdGVyYWwoc3RhcnQp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0g
J28nIHx8IGNoID09PSAnTycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LnNjYW5PY3RhbExpdGVyYWwoY2gsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGxlZ2FjeSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
c2Nhbk9jdGFsTGl0ZXJhbChjaCwgc3RhcnQsIGxlZ2FjeSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgaWYgKGNoICYmIGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5p
c09jdGFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLmlzSW1wbGljaXRPY3RhbExpdGVyYWwoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5PY3RhbExpdGVyYWwoY2gsIHN0YXJ0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsZWdhY3kgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5PY3RhbExpdGVyYWwoY2gsIHN0YXJ0LCBs
ZWdhY3kpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ18nKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52
YWxpZE51bWVyaWNTZXBhcmF0b3JBZnRlckxlYWRpbmdaZXJvKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNaZXJvUHJlZml4ZWQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVy
LmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdp
dCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSB8fCB0aGlzLnNvdXJjZVt0aGlz
LmluZGV4XSA9PT0gJ18nKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0
aGlzLmluZGV4XSA9PT0gJ18nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FzWmVy
b1ByZWZpeGVkIHx8IHRoaXMuaW5kZXggPT09IG5leHRJbnZhbGlkTnVtZXJpY1NlcGFyYXRvclBv
c2l0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0
ZWRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgKyt0aGlzLmluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEludmFsaWRO
dW1lcmljU2VwYXJhdG9yUG9zaXRpb24gPSB0aGlzLmluZGV4OworICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgbnVtICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CiAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID09PSBuZXh0SW52YWxpZE51bWVyaWNTZXBh
cmF0b3JQb3NpdGlvbikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3Rl
ZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZE51bWVyaWNTZXBhcmF0b3JBZnRlckxl
YWRpbmdaZXJvKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2ggPSB0aGlz
LnNvdXJjZVt0aGlzLmluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICduJyAmJiAo
IXdhc1plcm9QcmVmaXhlZCB8fCBudW0gPT09ICcwJykpIHsKKyAgICAgICAgICAgICAgICAgICAg
Kyt0aGlzLmluZGV4OworICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFj
dGVyLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUg
PSBnbG9iYWxUaGlzLkJpZ0ludCA/IGdsb2JhbFRoaXMuQmlnSW50KHRoaXMuc291cmNlLnNsaWNl
KHN0YXJ0LCB0aGlzLmluZGV4IC0gMSkucmVwbGFjZSgvXy9nLCAnJykpIDogLyogaXN0YW5idWwg
aWdub3JlIG5leHQgKi8gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGU6IDYgLyogTnVtZXJpY0xpdGVyYWwgKi8sCisgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICBi
aWdpbnQ6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxp
bmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0
YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kOiB0aGlzLmluZGV4CisgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNoID09PSAnLicp
IHsKICAgICAgICAgICAgICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKLSAg
ICAgICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0
KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisgICAgICAgICAgICAgICAg
aWYgKHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAnXycpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBuZXh0SW52YWxpZE51bWVyaWNTZXBhcmF0b3JQb3NpdGlvbiA9IC0xOworICAg
ICAgICAgICAgICAgIHdoaWxlIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQo
dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkgfHwgdGhpcy5zb3VyY2VbdGhpcy5p
bmRleF0gPT09ICdfJykgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhp
cy5pbmRleF0gPT09ICdfJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5k
ZXggPT09IG5leHRJbnZhbGlkTnVtZXJpY1NlcGFyYXRvclBvc2l0aW9uKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4Owor
ICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEludmFsaWROdW1lcmljU2VwYXJhdG9yUG9zaXRp
b24gPSB0aGlzLmluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbnVtICs9IHRoaXMuc291cmNl
W3RoaXMuaW5kZXgrK107CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNoID0g
dGhpcy5zb3VyY2VbdGhpcy5pbmRleF07CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXgg
PT09IG5leHRJbnZhbGlkTnVtZXJpY1NlcGFyYXRvclBvc2l0aW9uKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZh
bGlkTnVtZXJpY1NlcGFyYXRvckFmdGVyTnVtZXJpY0xpdGVyYWwpOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAn
RScpIHsKICAgICAgICAgICAgICAgICBudW0gKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsK
ICAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOworICAgICAgICAg
ICAgICAgIGlmIChjaCA9PT0gJ18nKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dV
bmV4cGVjdGVkVG9rZW4oKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYg
KGNoID09PSAnKycgfHwgY2ggPT09ICctJykgewogICAgICAgICAgICAgICAgICAgICBudW0gKz0g
dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
c291cmNlW3RoaXMuaW5kZXhdID09PSAnXycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXh0SW52YWxpZE51bWVyaWNTZXBhcmF0b3JQ
b3NpdGlvbiA9IC0xOwogICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIu
aXNEZWNpbWFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxE
aWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMu
c291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpIHx8IHRoaXMuc291cmNlW3RoaXMuaW5kZXhd
ID09PSAnXycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0aGlz
LmluZGV4XSA9PT0gJ18nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
aW5kZXggPT09IG5leHRJbnZhbGlkTnVtZXJpY1NlcGFyYXRvclBvc2l0aW9uKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Kyt0aGlzLmluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJbnZhbGlkTnVt
ZXJpY1NlcGFyYXRvclBvc2l0aW9uID0gdGhpcy5pbmRleDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIG51bSArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNTg5MSw2ICs1OTQwLDkgQEAgcmV0
dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAg
ICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID09PSBu
ZXh0SW52YWxpZE51bWVyaWNTZXBhcmF0b3JQb3NpdGlvbikgeworICAgICAgICAgICAgICAgIHRo
aXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTnVtZXJp
Y1NlcGFyYXRvckFmdGVyTnVtZXJpY0xpdGVyYWwpOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0aGlzLnNvdXJj
ZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgewogICAgICAgICAgICAgICAgIHRoaXMudGhyb3dV
bmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgICAgIH0KQEAgLTU5MDIsMTcgKzU5NTQsMTcgQEAg
cmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAK
ICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgICAgICAgZW5kOiB0aGlz
LmluZGV4CiAgICAgICAgICAgICB9OwotICAgICAgICB9OworICAgICAgICB9CiAgICAgICAgIC8v
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWxpdGVyYWxzLXN0cmluZy1saXRl
cmFscwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuU3RyaW5nTGl0ZXJhbCA9IGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuaW5kZXg7Ci0gICAgICAgICAg
ICB2YXIgcXVvdGUgPSB0aGlzLnNvdXJjZVtzdGFydF07CisgICAgICAgIHNjYW5TdHJpbmdMaXRl
cmFsKCkgeworICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmluZGV4OworICAgICAgICAg
ICAgbGV0IHF1b3RlID0gdGhpcy5zb3VyY2Vbc3RhcnRdOwogICAgICAgICAgICAgYXNzZXJ0XzEu
YXNzZXJ0KChxdW90ZSA9PT0gJ1wnJyB8fCBxdW90ZSA9PT0gJyInKSwgJ1N0cmluZyBsaXRlcmFs
IG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZScpOwogICAgICAgICAgICAgKyt0aGlzLmluZGV4Owot
ICAgICAgICAgICAgdmFyIG9jdGFsID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgc3RyID0gJyc7
CisgICAgICAgICAgICBsZXQgb2N0YWwgPSBmYWxzZTsKKyAgICAgICAgICAgIGxldCBzdHIgPSAn
JzsKICAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgewotICAgICAgICAgICAgICAgIHZh
ciBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CisgICAgICAgICAgICAgICAgbGV0IGNo
ID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKICAgICAgICAgICAgICAgICBpZiAoY2ggPT09
IHF1b3RlKSB7CiAgICAgICAgICAgICAgICAgICAgIHF1b3RlID0gJyc7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNTkyNyw3ICs1OTc5LDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5j
dGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ciArPSB0aGlzLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgdW5lc2NhcGVkQ2hhciA9IHRoaXMuc2NhbkhleEVzY2FwZShjaCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmVzY2FwZWRDaGFyID0gdGhpcy5zY2FuSGV4
RXNjYXBlKGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmVz
Y2FwZWRDaGFyID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQpAQCAtNTkzNSw3ICs1OTg3LDcgQEAgcmV0dXJuIC8qKioqKiovIChm
dW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHVuZXNjYXBlZCA9IHRoaXMuc2NhbkhleEVzY2FwZShjaCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuZXNjYXBlZCA9IHRoaXMuc2Nh
bkhleEVzY2FwZShjaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmVz
Y2FwZWQgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkSGV4RXNj
YXBlU2VxdWVuY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC01OTY2
LDcgKzYwMTgsNyBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2Vi
cGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY2ggJiYgY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdChj
aC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIG9jdFRvRGVjID0gdGhpcy5vY3RhbFRvRGVjaW1hbChjaCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBvY3RUb0RlYyA9IHRoaXMub2N0YWxUb0RlY2ltYWwo
Y2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2N0YWwgPSBvY3RUb0Rl
Yy5vY3RhbCB8fCBvY3RhbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG9jdFRvRGVjLmNvZGUpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CkBAIC02MDA0LDE4ICs2MDU2LDE4IEBAIHJldHVybiAvKioqKioq
LyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAg
ICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICAgICAgIGVuZDogdGhpcy5pbmRleAogICAgICAg
ICAgICAgfTsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICAvLyBodHRwczovL3RjMzku
Z2l0aHViLmlvL2VjbWEyNjIvI3NlYy10ZW1wbGF0ZS1saXRlcmFsLWxleGljYWwtY29tcG9uZW50
cwotICAgICAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuVGVtcGxhdGUgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgICAgICB2YXIgY29va2VkID0gJyc7Ci0gICAgICAgICAgICB2YXIgdGVybWluYXRl
ZCA9IGZhbHNlOwotICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDsKLSAgICAgICAg
ICAgIHZhciBoZWFkID0gKHRoaXMuc291cmNlW3N0YXJ0XSA9PT0gJ2AnKTsKLSAgICAgICAgICAg
IHZhciB0YWlsID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgcmF3T2Zmc2V0ID0gMjsKKyAgICAg
ICAgc2NhblRlbXBsYXRlKCkgeworICAgICAgICAgICAgbGV0IGNvb2tlZCA9ICcnOworICAgICAg
ICAgICAgbGV0IHRlcm1pbmF0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0g
dGhpcy5pbmRleDsKKyAgICAgICAgICAgIGNvbnN0IGhlYWQgPSAodGhpcy5zb3VyY2Vbc3RhcnRd
ID09PSAnYCcpOworICAgICAgICAgICAgbGV0IHRhaWwgPSBmYWxzZTsKKyAgICAgICAgICAgIGxl
dCByYXdPZmZzZXQgPSAyOwogICAgICAgICAgICAgKyt0aGlzLmluZGV4OwogICAgICAgICAgICAg
d2hpbGUgKCF0aGlzLmVvZigpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zb3Vy
Y2VbdGhpcy5pbmRleCsrXTsKKyAgICAgICAgICAgICAgICBsZXQgY2ggPSB0aGlzLnNvdXJjZVt0
aGlzLmluZGV4KytdOwogICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ2AnKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHJhd09mZnNldCA9IDE7CiAgICAgICAgICAgICAgICAgICAgIHRhaWwgPSB0
cnVlOwpAQCAtNjA1MCw4ICs2MTAyLDggQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1
bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvb2tlZCArPSB0aGlzLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVz
dG9yZSA9IHRoaXMuaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgdW5lc2NhcGVkQ2hhciA9IHRoaXMuc2NhbkhleEVzY2FwZShjaCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN0b3JlID0gdGhpcy5pbmRleDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuZXNjYXBlZENoYXIgPSB0aGlz
LnNjYW5IZXhFc2NhcGUoY2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHVuZXNjYXBlZENoYXIgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb29rZWQgKz0gdW5lc2NhcGVkQ2hhcjsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KQEAgLTYwNjIsNyArNjExNCw3IEBAIHJldHVybiAvKioqKioq
LyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciB1bmVzY2FwZWQgPSB0aGlzLnNjYW5IZXhFc2NhcGUoY2gp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmVzY2FwZWQgPSB0aGlz
LnNjYW5IZXhFc2NhcGUoY2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dW5lc2NhcGVkID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZEhl
eEVzY2FwZVNlcXVlbmNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
NjEzMiwyNiArNjE4NCwyNiBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsg
Ly8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAg
ICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKICAgICAgICAgICAgIH07Ci0gICAgICAgIH07Cisg
ICAgICAgIH0KICAgICAgICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMt
bGl0ZXJhbHMtcmVndWxhci1leHByZXNzaW9uLWxpdGVyYWxzCi0gICAgICAgIFNjYW5uZXIucHJv
dG90eXBlLnRlc3RSZWdFeHAgPSBmdW5jdGlvbiAocGF0dGVybiwgZmxhZ3MpIHsKKyAgICAgICAg
dGVzdFJlZ0V4cChwYXR0ZXJuLCBmbGFncykgewogICAgICAgICAgICAgLy8gVGhlIEJNUCBjaGFy
YWN0ZXIgdG8gdXNlIGFzIGEgcmVwbGFjZW1lbnQgZm9yIGFzdHJhbCBzeW1ib2xzIHdoZW4KICAg
ICAgICAgICAgIC8vIHRyYW5zbGF0aW5nIGFuIEVTNiAidSItZmxhZ2dlZCBwYXR0ZXJuIHRvIGFu
IEVTNS1jb21wYXRpYmxlCiAgICAgICAgICAgICAvLyBhcHByb3hpbWF0aW9uLgogICAgICAgICAg
ICAgLy8gTm90ZTogcmVwbGFjaW5nIHdpdGggJ1x1RkZGRicgZW5hYmxlcyBmYWxzZSBwb3NpdGl2
ZXMgaW4gdW5saWtlbHkKICAgICAgICAgICAgIC8vIHNjZW5hcmlvcy4gRm9yIGV4YW1wbGUsIGBb
XHV7MTA0NGZ9LVx1ezEwNDQwfV1gIGlzIGFuIGludmFsaWQKICAgICAgICAgICAgIC8vIHBhdHRl
cm4gdGhhdCB3b3VsZCBub3QgYmUgZGV0ZWN0ZWQgYnkgdGhpcyBzdWJzdGl0dXRpb24uCi0gICAg
ICAgICAgICB2YXIgYXN0cmFsU3Vic3RpdHV0ZSA9ICdcdUZGRkYnOwotICAgICAgICAgICAgdmFy
IHRtcCA9IHBhdHRlcm47Ci0gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgICAg
ICBjb25zdCBhc3RyYWxTdWJzdGl0dXRlID0gJ1x1RkZGRic7CisgICAgICAgICAgICBsZXQgdG1w
ID0gcGF0dGVybjsKKyAgICAgICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzOwogICAgICAgICAgICAg
aWYgKGZsYWdzLmluZGV4T2YoJ3UnKSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgdG1wID0gdG1w
CiAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgZXZlcnkgVW5pY29kZSBlc2NhcGUgc2Vx
dWVuY2Ugd2l0aCB0aGUgZXF1aXZhbGVudAogICAgICAgICAgICAgICAgICAgICAvLyBCTVAgY2hh
cmFjdGVyIG9yIGEgY29uc3RhbnQgQVNDSUkgY29kZSBwb2ludCBpbiB0aGUgY2FzZSBvZgogICAg
ICAgICAgICAgICAgICAgICAvLyBhc3RyYWwgc3ltYm9scy4gKFNlZSB0aGUgYWJvdmUgbm90ZSBv
biBgYXN0cmFsU3Vic3RpdHV0ZWAKICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIG1vcmUgaW5m
b3JtYXRpb24uKQotICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFx1XHsoWzAtOWEtZkEt
Rl0rKVx9fFxcdShbYS1mQS1GMC05XXs0fSkvZywgZnVuY3Rpb24gKCQwLCAkMSwgJDIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9IHBhcnNlSW50KCQxIHx8ICQyLCAxNik7
CisgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXHVceyhbMC05YS1mQS1GXSspXH18XFx1
KFthLWZBLUYwLTldezR9KS9nLCAoJDAsICQxLCAkMikgPT4geworICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjb2RlUG9pbnQgPSBwYXJzZUludCgkMSB8fCAkMiwgMTYpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoY29kZVBvaW50ID4gMHgxMEZGRkYpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlk
UmVnRXhwKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNjE4MiwxMyArNjIzNCwxMyBAQCBy
ZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAog
ICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIFNjYW5u
ZXIucHJvdG90eXBlLnNjYW5SZWdFeHBCb2R5ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg
dmFyIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07CisgICAgICAgIH0KKyAgICAgICAgc2Nh
blJlZ0V4cEJvZHkoKSB7CisgICAgICAgICAgICBsZXQgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmlu
ZGV4XTsKICAgICAgICAgICAgIGFzc2VydF8xLmFzc2VydChjaCA9PT0gJy8nLCAnUmVndWxhciBl
eHByZXNzaW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2gnKTsKLSAgICAgICAgICAg
IHZhciBzdHIgPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOwotICAgICAgICAgICAgdmFyIGNs
YXNzTWFya2VyID0gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgdGVybWluYXRlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgbGV0IHN0ciA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CisgICAgICAg
ICAgICBsZXQgY2xhc3NNYXJrZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIGxldCB0ZXJtaW5hdGVk
ID0gZmFsc2U7CiAgICAgICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKICAgICAgICAgICAg
ICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CiAgICAgICAgICAgICAgICAgc3Ry
ICs9IGNoOwpAQCAtNjIyMywxMiArNjI3NSwxMiBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9u
KG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgLy8gRXhjbHVkZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaC4KICAgICAgICAgICAgIHJl
dHVybiBzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTsKLSAgICAgICAgfTsKLSAgICAgICAg
U2Nhbm5lci5wcm90b3R5cGUuc2NhblJlZ0V4cEZsYWdzID0gZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgdmFyIHN0ciA9ICcnOwotICAgICAgICAgICAgdmFyIGZsYWdzID0gJyc7CisgICAgICAg
IH0KKyAgICAgICAgc2NhblJlZ0V4cEZsYWdzKCkgeworICAgICAgICAgICAgbGV0IHN0ciA9ICcn
OworICAgICAgICAgICAgbGV0IGZsYWdzID0gJyc7CiAgICAgICAgICAgICB3aGlsZSAoIXRoaXMu
ZW9mKCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4
XTsKKyAgICAgICAgICAgICAgICBsZXQgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKICAg
ICAgICAgICAgICAgICBpZiAoIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJQYXJ0
KGNoLmNoYXJDb2RlQXQoMCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTYyMzcsOCArNjI4OSw4IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rp
b24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIGNo
ID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9
PT0gJ3UnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgcmVzdG9yZSA9IHRoaXMuaW5kZXg7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgY2hhciA9IHRoaXMuc2NhbkhleEVzY2FwZSgndScpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbGV0IHJlc3RvcmUgPSB0aGlzLmluZGV4OworICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciA9IHRoaXMuc2NhbkhleEVzY2FwZSgndScpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNoYXIgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbGFncyArPSBjaGFyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
c3RyICs9ICdcXHUnOyByZXN0b3JlIDwgdGhpcy5pbmRleDsgKytyZXN0b3JlKSB7CkBAIC02MjYz
LDEyICs2MzE1LDEyIEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3
ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuIGZsYWdzOwotICAgICAgICB9OwotICAgICAgICBTY2FubmVyLnByb3RvdHlw
ZS5zY2FuUmVnRXhwID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhp
cy5pbmRleDsKLSAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gdGhpcy5zY2FuUmVnRXhwQm9keSgp
OwotICAgICAgICAgICAgdmFyIGZsYWdzID0gdGhpcy5zY2FuUmVnRXhwRmxhZ3MoKTsKLSAgICAg
ICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudGVzdFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7CisgICAg
ICAgIH0KKyAgICAgICAgc2NhblJlZ0V4cCgpIHsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0g
dGhpcy5pbmRleDsKKyAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLnNjYW5SZWdFeHBC
b2R5KCk7CisgICAgICAgICAgICBjb25zdCBmbGFncyA9IHRoaXMuc2NhblJlZ0V4cEZsYWdzKCk7
CisgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudGVzdFJlZ0V4cChwYXR0ZXJuLCBmbGFn
cyk7CiAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgIHR5cGU6IDkgLyogUmVn
dWxhckV4cHJlc3Npb24gKi8sCiAgICAgICAgICAgICAgICAgdmFsdWU6ICcnLApAQCAtNjI4MCw4
ICs2MzMyLDggQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBh
Y2tCb290c3RyYXAKICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgICAg
ICAgZW5kOiB0aGlzLmluZGV4CiAgICAgICAgICAgICB9OwotICAgICAgICB9OwotICAgICAgICBT
Y2FubmVyLnByb3RvdHlwZS5sZXggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIH0KKyAgICAgICAg
bGV4KCkgewogICAgICAgICAgICAgaWYgKHRoaXMuZW9mKCkpIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gewogICAgICAgICAgICAgICAgICAgICB0eXBlOiAyIC8qIEVPRiAqLywKQEAgLTYyOTIs
NyArNjM0NCw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJw
YWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIGVuZDogdGhpcy5pbmRleAogICAgICAg
ICAgICAgICAgIH07CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgY3AgPSB0aGlzLnNv
dXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpOworICAgICAgICAgICAgY29uc3QgY3AgPSB0aGlz
LnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpOwogICAgICAgICAgICAgaWYgKGNoYXJhY3Rl
cl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydChjcCkpIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5zY2FuSWRlbnRpZmllcigpOwogICAgICAgICAgICAgfQpAQCAtNjMyNyw5ICs2
Mzc5LDggQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tC
b290c3RyYXAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5zY2FuUHVuY3R1YXRvcigpOwotICAgICAgICB9OwotICAgICAgICByZXR1cm4g
U2Nhbm5lcjsKLSAgICB9KCkpOworICAgICAgICB9CisgICAgfQogICAgIGV4cG9ydHMuU2Nhbm5l
ciA9IFNjYW5uZXI7CiAKIApAQCAtNjYyMSwxNiArNjY3MiwxNiBAQCByZXR1cm4gLyoqKioqKi8g
KGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogCiAgICAgInVzZSBzdHJp
Y3QiOwogICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsg
dmFsdWU6IHRydWUgfSk7Ci0gICAgdmFyIGVycm9yX2hhbmRsZXJfMSA9IF9fd2VicGFja19yZXF1
aXJlX18oMTApOwotICAgIHZhciBzY2FubmVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsK
LSAgICB2YXIgdG9rZW5fMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpOwotICAgIHZhciBSZWFk
ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGZ1bmN0aW9uIFJlYWRl
cigpIHsKKyAgICBjb25zdCBlcnJvcl9oYW5kbGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEw
KTsKKyAgICBjb25zdCBzY2FubmVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKKyAgICBj
b25zdCB0b2tlbl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7CisgICAgY2xhc3MgUmVhZGVy
IHsKKyAgICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgICAgICB0aGlzLnZhbHVlcyA9IFtd
OwogICAgICAgICAgICAgdGhpcy5jdXJseSA9IHRoaXMucGFyZW4gPSAtMTsKICAgICAgICAgfQog
ICAgICAgICAvLyBBIGZ1bmN0aW9uIGZvbGxvd2luZyBvbmUgb2YgdGhvc2UgdG9rZW5zIGlzIGFu
IGV4cHJlc3Npb24uCi0gICAgICAgIFJlYWRlci5wcm90b3R5cGUuYmVmb3JlRnVuY3Rpb25FeHBy
ZXNzaW9uID0gZnVuY3Rpb24gKHQpIHsKKyAgICAgICAgYmVmb3JlRnVuY3Rpb25FeHByZXNzaW9u
KHQpIHsKICAgICAgICAgICAgIHJldHVybiBbJygnLCAneycsICdbJywgJ2luJywgJ3R5cGVvZics
ICdpbnN0YW5jZW9mJywgJ25ldycsCiAgICAgICAgICAgICAgICAgJ3JldHVybicsICdjYXNlJywg
J2RlbGV0ZScsICd0aHJvdycsICd2b2lkJywKICAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50
IG9wZXJhdG9ycwpAQCAtNjY0MCwxOSArNjY5MSwxOSBAQCByZXR1cm4gLyoqKioqKi8gKGZ1bmN0
aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICcrJywg
Jy0nLCAnKicsICcqKicsICcvJywgJyUnLCAnKysnLCAnLS0nLCAnPDwnLCAnPj4nLCAnPj4+Jywg
JyYnLAogICAgICAgICAgICAgICAgICd8JywgJ14nLCAnIScsICd+JywgJyYmJywgJ3x8JywgJz8n
LCAnOicsICc9PT0nLCAnPT0nLCAnPj0nLAogICAgICAgICAgICAgICAgICc8PScsICc8JywgJz4n
LCAnIT0nLCAnIT09J10uaW5kZXhPZih0KSA+PSAwOwotICAgICAgICB9OworICAgICAgICB9CiAg
ICAgICAgIC8vIERldGVybWluZSBpZiBmb3J3YXJkIHNsYXNoICgvKSBpcyBhbiBvcGVyYXRvciBv
ciBwYXJ0IG9mIGEgcmVndWxhciBleHByZXNzaW9uCiAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHVi
LmNvbS9tb3ppbGxhL3N3ZWV0LmpzL3dpa2kvZGVzaWduCi0gICAgICAgIFJlYWRlci5wcm90b3R5
cGUuaXNSZWdleFN0YXJ0ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHByZXZpb3Vz
ID0gdGhpcy52YWx1ZXNbdGhpcy52YWx1ZXMubGVuZ3RoIC0gMV07Ci0gICAgICAgICAgICB2YXIg
cmVnZXggPSAocHJldmlvdXMgIT09IG51bGwpOworICAgICAgICBpc1JlZ2V4U3RhcnQoKSB7Cisg
ICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMudmFsdWVzW3RoaXMudmFsdWVzLmxlbmd0
aCAtIDFdOworICAgICAgICAgICAgbGV0IHJlZ2V4ID0gKHByZXZpb3VzICE9PSBudWxsKTsKICAg
ICAgICAgICAgIHN3aXRjaCAocHJldmlvdXMpIHsKICAgICAgICAgICAgICAgICBjYXNlICd0aGlz
JzoKICAgICAgICAgICAgICAgICBjYXNlICddJzoKICAgICAgICAgICAgICAgICAgICAgcmVnZXgg
PSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2Fz
ZSAnKSc6Ci0gICAgICAgICAgICAgICAgICAgIHZhciBrZXl3b3JkID0gdGhpcy52YWx1ZXNbdGhp
cy5wYXJlbiAtIDFdOworICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXl3b3JkID0gdGhpcy52
YWx1ZXNbdGhpcy5wYXJlbiAtIDFdOwogICAgICAgICAgICAgICAgICAgICByZWdleCA9IChrZXl3
b3JkID09PSAnaWYnIHx8IGtleXdvcmQgPT09ICd3aGlsZScgfHwga2V5d29yZCA9PT0gJ2Zvcicg
fHwga2V5d29yZCA9PT0gJ3dpdGgnKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgY2FzZSAnfSc6CkBAIC02NjYxLDEyICs2NzEyLDEyIEBAIHJldHVybiAvKioq
KioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAg
ICAgICAgICAgIHJlZ2V4ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFs
dWVzW3RoaXMuY3VybHkgLSAzXSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQW5vbnltb3VzIGZ1bmN0aW9uLCBlLmcuIGZ1bmN0aW9uKCl7fSAvNDIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBjaGVjayA9IHRoaXMudmFsdWVzW3RoaXMuY3VybHkgLSA0
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrID0gdGhpcy52YWx1ZXNbdGhp
cy5jdXJseSAtIDRdOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXggPSBjaGVjayA/ICF0
aGlzLmJlZm9yZUZ1bmN0aW9uRXhwcmVzc2lvbihjaGVjaykgOiBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZhbHVlc1t0aGlz
LmN1cmx5IC0gNF0gPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE5hbWVkIGZ1bmN0aW9uLCBlLmcuIGZ1bmN0aW9uIGYoKXt9IC80Mi8KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBjaGVjayA9IHRoaXMudmFsdWVzW3RoaXMuY3VybHkgLSA1XTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrID0gdGhpcy52YWx1ZXNbdGhpcy5jdXJseSAt
IDVdOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXggPSBjaGVjayA/ICF0aGlzLmJlZm9y
ZUZ1bmN0aW9uRXhwcmVzc2lvbihjaGVjaykgOiB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjY3NCw4ICs2NzI1LDggQEAgcmV0dXJu
IC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4g
cmVnZXg7Ci0gICAgICAgIH07Ci0gICAgICAgIFJlYWRlci5wcm90b3R5cGUucHVzaCA9IGZ1bmN0
aW9uICh0b2tlbikgeworICAgICAgICB9CisgICAgICAgIHB1c2godG9rZW4pIHsKICAgICAgICAg
ICAgIGlmICh0b2tlbi50eXBlID09PSA3IC8qIFB1bmN0dWF0b3IgKi8gfHwgdG9rZW4udHlwZSA9
PT0gNCAvKiBLZXl3b3JkICovKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09
PSAneycpIHsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJseSA9IHRoaXMudmFsdWVzLmxl
bmd0aDsKQEAgLTY2ODgsMTEgKzY3MzksMTAgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbiht
b2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2gobnVsbCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
IH07Ci0gICAgICAgIHJldHVybiBSZWFkZXI7Ci0gICAgfSgpKTsKLSAgICB2YXIgVG9rZW5pemVy
ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkgewotICAgICAgICBmdW5jdGlvbiBUb2tlbml6
ZXIoY29kZSwgY29uZmlnKSB7CisgICAgICAgIH0KKyAgICB9CisgICAgY2xhc3MgVG9rZW5pemVy
IHsKKyAgICAgICAgY29uc3RydWN0b3IoY29kZSwgY29uZmlnKSB7CiAgICAgICAgICAgICB0aGlz
LmVycm9ySGFuZGxlciA9IG5ldyBlcnJvcl9oYW5kbGVyXzEuRXJyb3JIYW5kbGVyKCk7CiAgICAg
ICAgICAgICB0aGlzLmVycm9ySGFuZGxlci50b2xlcmFudCA9IGNvbmZpZyA/ICh0eXBlb2YgY29u
ZmlnLnRvbGVyYW50ID09PSAnYm9vbGVhbicgJiYgY29uZmlnLnRvbGVyYW50KSA6IGZhbHNlOwog
ICAgICAgICAgICAgdGhpcy5zY2FubmVyID0gbmV3IHNjYW5uZXJfMS5TY2FubmVyKGNvZGUsIHRo
aXMuZXJyb3JIYW5kbGVyKTsKQEAgLTY3MDIsMTcgKzY3NTIsMTcgQEAgcmV0dXJuIC8qKioqKiov
IChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKICAgICAgICAgICAgIHRo
aXMuYnVmZmVyID0gW107CiAgICAgICAgICAgICB0aGlzLnJlYWRlciA9IG5ldyBSZWFkZXIoKTsK
ICAgICAgICAgfQotICAgICAgICBUb2tlbml6ZXIucHJvdG90eXBlLmVycm9ycyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgZXJyb3JzKCkgewogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JI
YW5kbGVyLmVycm9yczsKLSAgICAgICAgfTsKLSAgICAgICAgVG9rZW5pemVyLnByb3RvdHlwZS5n
ZXROZXh0VG9rZW4gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIH0KKyAgICAgICAgZ2V0TmV4dFRv
a2VuKCkgewogICAgICAgICAgICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA9PT0gMCkgewotICAg
ICAgICAgICAgICAgIHZhciBjb21tZW50cyA9IHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTsK
KyAgICAgICAgICAgICAgICBjb25zdCBjb21tZW50cyA9IHRoaXMuc2Nhbm5lci5zY2FuQ29tbWVu
dHMoKTsKICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLnRyYWNrQ29tbWVudCkgewot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1lbnRzLmxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IGNvbW1lbnRzW2ldOwotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5zY2FubmVyLnNvdXJjZS5zbGlj
ZShlLnNsaWNlWzBdLCBlLnNsaWNlWzFdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBj
b21tZW50ID0geworICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1l
bnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlID0gY29t
bWVudHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2Nh
bm5lci5zb3VyY2Uuc2xpY2UoZS5zbGljZVswXSwgZS5zbGljZVsxXSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjb21tZW50ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGU6IGUubXVsdGlMaW5lID8gJ0Jsb2NrQ29tbWVudCcgOiAnTGluZUNvbW1lbnQnLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQogICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKQEAgLTY3MjYsNyArNjc3Niw3IEBAIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24o
bW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNjYW5uZXIuZW9mKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGxvYyA9IHZvaWQgMDsKKyAgICAgICAgICAgICAg
ICAgICAgbGV0IGxvYzsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tMb2MpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvYyA9IHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGFydDogewpAQCAtNjczNiwxMCArNjc4NiwxMCBAQCByZXR1cm4gLyoqKioqKi8gKGZ1
bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZDoge30KICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdmFyIG1heWJlUmVnZXggPSAodGhpcy5z
Y2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdID09PSAnLycpICYmIHRoaXMucmVhZGVy
LmlzUmVnZXhTdGFydCgpOwotICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB2b2lkIDA7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlUmVnZXggPSAodGhpcy5zY2FubmVyLnNv
dXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdID09PSAnLycpICYmIHRoaXMucmVhZGVyLmlzUmVnZXhT
dGFydCgpOworICAgICAgICAgICAgICAgICAgICBsZXQgdG9rZW47CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChtYXliZVJlZ2V4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUg
PSB0aGlzLnNjYW5uZXIuc2F2ZVN0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGF0ZSA9IHRoaXMuc2Nhbm5lci5zYXZlU3RhdGUoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnNjYW5u
ZXIuc2NhblJlZ0V4cCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNjc1Miw3ICs2
ODAyLDcgQEAgcmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tC
b290c3RyYXAKICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5zY2FubmVyLmxl
eCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVh
ZGVyLnB1c2godG9rZW4pOwotICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gewogICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZTogdG9rZW5fMS5Ub2tlbk5hbWVbdG9rZW4udHlwZV0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZTogdGhpcy5zY2FubmVyLnNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4u
ZW5kKQogICAgICAgICAgICAgICAgICAgICB9OwpAQCAtNjc2NywxNyArNjgxNywxNiBAQCByZXR1
cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcAogICAg
ICAgICAgICAgICAgICAgICAgICAgZW50cnkubG9jID0gbG9jOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSA5IC8qIFJlZ3VsYXJF
eHByZXNzaW9uICovKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0dGVybiA9IHRv
a2VuLnBhdHRlcm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxhZ3MgPSB0b2tlbi5m
bGFnczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnJlZ2V4ID0geyBwYXR0ZXJuOiBw
YXR0ZXJuLCBmbGFnczogZmxhZ3MgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBh
dHRlcm4gPSB0b2tlbi5wYXR0ZXJuOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxh
Z3MgPSB0b2tlbi5mbGFnczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnJlZ2V4ID0g
eyBwYXR0ZXJuLCBmbGFncyB9OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuYnVmZmVyLnB1c2goZW50cnkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlci5zaGlmdCgpOwotICAgICAg
ICB9OwotICAgICAgICByZXR1cm4gVG9rZW5pemVyOwotICAgIH0oKSk7CisgICAgICAgIH0KKyAg
ICB9CiAgICAgZXhwb3J0cy5Ub2tlbml6ZXIgPSBUb2tlbml6ZXI7CiAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRy
ZWUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0
U3ludGF4VHJlZS5qcwppbmRleCAyZjc3Njk4MGUwMi4uOGU5YTg5MmE2YzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHRTeW50YXhU
cmVlLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9T
Y3JpcHRTeW50YXhUcmVlLmpzCkBAIC03MTIsNyArNzEyLDggQEAgV0kuU2NyaXB0U3ludGF4VHJl
ZSA9IGNsYXNzIFNjcmlwdFN5bnRheFRyZWUKICAgICAgICAgICAgICAgICB0eXBlOiBXSS5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLkZvck9mU3RhdGVtZW50LAogICAgICAgICAgICAgICAgIGxl
ZnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmxlZnQpLAogICAgICAgICAg
ICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5yaWdodCks
Ci0gICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5v
ZGUuYm9keSkKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRh
eFRyZWUobm9kZS5ib2R5KSwKKyAgICAgICAgICAgICAgICBhd2FpdDogbm9kZS5hd2FpdAogICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICJGdW5jdGlvbkRl
Y2xhcmF0aW9uIjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1Rlc3QvVGVzdEhhcm5lc3MuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9UZXN0L1Rlc3RIYXJuZXNzLmpzCmluZGV4IDBhN2I3YTlkYzUyLi5lYzczNTlhZGQ1YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC9UZXN0
SGFybmVzcy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0
L1Rlc3RIYXJuZXNzLmpzCkBAIC0yMDEsNiArMjAxLDE0IEBAIFRlc3RIYXJuZXNzID0gY2xhc3Mg
VGVzdEhhcm5lc3MgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgdGhpcy5sb2coIkZBSUw6ICIg
KyBzdHJpbmdpZmllZE1lc3NhZ2UpOwogICAgIH0KIAorICAgIHBhc3NPckZhaWwoY29uZGl0aW9u
LCBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbikKKyAgICAgICAgICAgIHRo
aXMucGFzcyhtZXNzYWdlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5mYWlsKG1l
c3NhZ2UpOworICAgIH0KKwogICAgIC8vIFVzZSB0aGlzIHRvIGV4cGVjdCBhbiBleGNlcHRpb24u
IFRvIGZ1cnRoZXIgZXhhbWluZSB0aGUgZXhjZXB0aW9uLAogICAgIC8vIGNoYWluIG9udG8gdGhl
IHJlc3VsdCB3aXRoIC50aGVuKCkgYW5kIGFkZCB5b3VyIG93biB0ZXN0IGFzc2VydGlvbnMuCiAg
ICAgLy8gVGhlIHJldHVybmVkIHByb21pc2UgaXMgcmVqZWN0ZWQgaWYgYW4gZXhjZXB0aW9uIHdh
cyBub3QgdGhyb3duLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvV29ya2Vycy9Gb3JtYXR0ZXIvRXNwcmltYUZvcm1hdHRlci5qcyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1dvcmtlcnMvRm9ybWF0dGVyL0VzcHJpbWFGb3JtYXR0
ZXIuanMKaW5kZXggM2NmZTkzNWZiNTguLmJjYjc4MjQzNDMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Xb3JrZXJzL0Zvcm1hdHRlci9Fc3ByaW1hRm9y
bWF0dGVyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1dvcmtl
cnMvRm9ybWF0dGVyL0VzcHJpbWFGb3JtYXR0ZXIuanMKQEAgLTQ3MSw3ICs0NzEsNyBAQCBFc3By
aW1hRm9ybWF0dGVyID0gY2xhc3MgRXNwcmltYUZvcm1hdHRlcgogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKG5vZGVUeXBlID09PSAiRm9yU3RhdGVtZW50IiB8fCBub2RlVHlwZSA9PT0gIkZvck9m
U3RhdGVtZW50IiB8fCBub2RlVHlwZSA9PT0gIkZvckluU3RhdGVtZW50IikgewotICAgICAgICAg
ICAgaWYgKHRva2VuVmFsdWUgPT09ICJmb3IiKSB7CisgICAgICAgICAgICBpZiAodG9rZW5WYWx1
ZSA9PT0gImZvciIgfHwgdG9rZW5WYWx1ZSA9PT0gImF3YWl0IikgewogICAgICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kVG9rZW4odG9rZW5WYWx1ZSwgdG9rZW5PZmZzZXQpOwogICAgICAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kU3BhY2UoKTsKICAgICAgICAgICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>