<?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>147109</bug_id>
          
          <creation_ts>2015-07-20 07:39:24 -0700</creation_ts>
          <short_desc>Web Inspector: Update to CodeMirror 5.5 or later</short_desc>
          <delta_ts>2015-08-11 22:40:52 -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>528+ (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>146115</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Timothy Hatcher">timothy</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1110612</commentid>
    <comment_count>0</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-07-20 07:39:24 -0700</bug_when>
    <thetext>CodeMirror 5.5 is out. We should update to the latest.

https://twitter.com/codemirror/status/623085362022359040</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110613</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-07-20 07:39:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/21898870&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110615</commentid>
    <comment_count>2</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-07-20 07:43:36 -0700</bug_when>
    <thetext>We are using 4.2.0 currently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116564</commentid>
    <comment_count>3</comment_count>
      <attachid>258723</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-11 10:07:22 -0700</bug_when>
    <thetext>Created attachment 258723
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116580</commentid>
    <comment_count>4</comment_count>
      <attachid>258723</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-08-11 10:45:30 -0700</bug_when>
    <thetext>Comment on attachment 258723
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Views/CSSStyleDeclarationTextEditor.js:444
&gt; -        if (this._codeMirror.options.readOnly || this._codeMirror.state.focused)
&gt; +        if (this._codeMirror.options.readOnly)

No way to get focused state now?

&gt; Source/WebInspectorUI/UserInterface/Views/HoverMenu.css:62
&gt; +    -webkit-transform: translateY(-1px);

Why? No need to prefix now.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.css:184
&gt; -    -webkit-transform: translateY(1px);
&gt; +    -webkit-transform: translateY(0.5px);

This is curious. Why? No need to prefix now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116581</commentid>
    <comment_count>5</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-08-11 10:45:49 -0700</bug_when>
    <thetext>Please make sure to test by running OpenSource/Source/WebInspectorUI/Scripts/copy-user-interface-resources-dryrun.rb</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116664</commentid>
    <comment_count>6</comment_count>
      <attachid>258723</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-11 13:08:20 -0700</bug_when>
    <thetext>Comment on attachment 258723
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/CSSStyleDeclarationTextEditor.js:444
&gt;&gt; +        if (this._codeMirror.options.readOnly)
&gt; 
&gt; No way to get focused state now?

I think you can still get the focus in the same way, but it seems to fire before this event.  Also, I think that it should still insert newlines even after the editor is focused.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.css:184
&gt;&gt; +    -webkit-transform: translateY(0.5px);
&gt; 
&gt; This is curious. Why? No need to prefix now.

This was purely a style change.  It appeared slightly offset to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116670</commentid>
    <comment_count>7</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-11 13:16:40 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Please make sure to test by running
&gt; OpenSource/Source/WebInspectorUI/Scripts/copy-user-interface-resources-
&gt; dryrun.rb

It&apos;s asking for a destination directory.  What exactly does this do/how do I use it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116685</commentid>
    <comment_count>8</comment_count>
      <attachid>258723</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-08-11 13:38:42 -0700</bug_when>
    <thetext>Comment on attachment 258723
Patch

Make sure to test the Pretty Printer as well.
1. Open Source/WebInspectorUI/Tools/PrettyPrinter/index.html
2. Run the tests for each of the different &quot;modes&quot; you should see all PASS messages</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116781</commentid>
    <comment_count>9</comment_count>
      <attachid>258779</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-11 16:34:37 -0700</bug_when>
    <thetext>Created attachment 258779
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116797</commentid>
    <comment_count>10</comment_count>
      <attachid>258784</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-08-11 17:18:54 -0700</bug_when>
    <thetext>Created attachment 258784
[Animated GIF] Before/after the patch

There are a couple of issues with the patch:
— Increased line-height.
— vertically misaligned in-code elements, such as go-to arrow icons and type profiler tokens.

I can fix them as a follow up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116828</commentid>
    <comment_count>11</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-08-11 19:28:53 -0700</bug_when>
    <thetext>Yes, we need to fix those things. It can happen in a follow up, as long as we don&apos;t forget.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116864</commentid>
    <comment_count>12</comment_count>
      <attachid>258802</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-11 21:45:18 -0700</bug_when>
    <thetext>Created attachment 258802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116880</commentid>
    <comment_count>13</comment_count>
      <attachid>258802</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-11 22:40:49 -0700</bug_when>
    <thetext>Comment on attachment 258802
Patch

Clearing flags on attachment: 258802

Committed r188325: &lt;http://trac.webkit.org/changeset/188325&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116881</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-11 22:40:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258723</attachid>
            <date>2015-08-11 10:07:22 -0700</date>
            <delta_ts>2015-08-11 16:34:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147109-20150811100707.patch</filename>
            <type>text/plain</type>
            <size>322293</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDc0NDc0MGZjOTI4NDQ5ZjA5YzljMTNkNGUxODVj
YTRmNTU2Mjk2MmIuLmRmMDYwZGYwYWE5MDZiZmRlNzQxNDBjZDAwNGRkM2ViZDJjNThhNTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE1LTA4LTExICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBV
cGRhdGUgdG8gQ29kZU1pcnJvciA1LjUgb3IgbGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZWQgQ29kZU1pcnJvciB0byB2ZXJzaW9uIDUu
NSwgYXMgd2VsbCBhcyB0aGUgZXh0ZW5zaW9uIGZpbGVzIGZvciBDb2RlTWlycm9yCisgICAgICAg
IHRoYXQgYXJlIGN1cnJlbnRseSB1c2VkIGluIFdlYkluc3BlY3Rvci4KKworICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9MSUNFTlNFOgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9qdXJlLmpzOgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9zZWJyYWNrZXRzLmpzOgorICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzczoKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5qczoKKyAg
ICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0Lmpz
OgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb21tZW50Lmpz
OgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jc3MuanM6Cisg
ICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2h0bWxtaXhlZC5qczoK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvamF2YXNjcmlwdC5q
czoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbGl2ZXNjcmlw
dC5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hi
cmFja2V0cy5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Iv
b3ZlcmxheS5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Iv
c2Fzcy5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivc2Vh
cmNoY3Vyc29yLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJv
ci9zcWwuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3ht
bC5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25U
ZXh0RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25U
ZXh0RWRpdG9yLnByb3RvdHlwZS5faGFuZGxlTW91c2VEb3duKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2hhbmRsZU1vdXNl
VXApOgorICAgICAgICBDbGlja2luZyBvbiB0aGUgZW5kIG9mIGEgbGluZSBpbiBhIHN0eWxlIHdp
bGwgbm93IGNvcnJlY3RseSBpbnNlcnQgYSBuZXcgbGluZS4KKworICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvVmlld3MvSG92ZXJNZW51LmNzczoKKyAgICAgICAgKC5ob3Zlci1tZW51ID4gaW1nKToK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmNzczoK
KyAgICAgICAgKC5ob3Zlci1tZW51LmNvbG9yID4gaW1nKToKKwogMjAxNS0wOC0xMCAgRGV2aW4g
Um91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogQWRk
IG51bWVyaWNhbCBpbnB1dCBhbmQgc2xpZGVyIGJhc2VkIFZpc3VhbCBlZGl0b3JzIGZvciBDU1Mg
cHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9MSUNFTlNFIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9MSUNFTlNFCmluZGV4IDQ4MmQ1NWViNzNl
YzQzZjg3YWE0MTA1OGM3ZWUzOWJiODMxOGYzN2IuLmY0YTVhNGEyNWYwYzhjZWEwMmJmODE0MTE4
NzgzNDM5MTEzZjQ4ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvTElDRU5TRQorKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL0xJQ0VOU0UKQEAgLTEsNCAr
MSw0IEBACi1Db3B5cmlnaHQgKEMpIDIwMTMgYnkgTWFyaWpuIEhhdmVyYmVrZSA8bWFyaWpuaEBn
bWFpbC5jb20+CitDb3B5cmlnaHQgKEMpIDIwMTUgYnkgTWFyaWpuIEhhdmVyYmVrZSA8bWFyaWpu
aEBnbWFpbC5jb20+IGFuZCBvdGhlcnMKIAogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg
ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogb2YgdGhpcyBz
b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl
IiksIHRvIGRlYWwKQEAgLTE3LDcgKzE3LDMgQEAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS
UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogTElBQklMSVRZLCBX
SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ
TkcgRlJPTSwKIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI
RSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KIFRIRSBTT0ZUV0FSRS4KLQotUGxlYXNlIG5vdGUg
dGhhdCBzb21lIHN1YmRpcmVjdG9yaWVzIG9mIHRoZSBDb2RlTWlycm9yIGRpc3RyaWJ1dGlvbgot
aW5jbHVkZSB0aGVpciBvd24gTElDRU5TRSBmaWxlcywgYW5kIGFyZSByZWxlYXNlZCB1bmRlciBk
aWZmZXJlbnQKLWxpY2VuY2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9qdXJlLmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9qdXJlLmpzCmlu
ZGV4IGY4MWJkMmMxNDAxY2M4N2YzODY3YWI5NTdlMWQ0NmQ2MzQxOTk0MTAuLmQ1MzEwMjJhMmVi
ZmVhMDdmNzVlYTg4MTk4OGZiZjVmNzY4YzMwY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvanVyZS5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9y
L2Nsb2p1cmUuanMKQEAgLTE4LDcgKzE4LDcgQEAKIAogQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJj
bG9qdXJlIiwgZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICB2YXIgQlVJTFRJTiA9ICJidWlsdGlu
IiwgQ09NTUVOVCA9ICJjb21tZW50IiwgU1RSSU5HID0gInN0cmluZyIsIENIQVJBQ1RFUiA9ICJz
dHJpbmctMiIsCi0gICAgICAgIEFUT00gPSAiYXRvbSIsIE5VTUJFUiA9ICJudW1iZXIiLCBCUkFD
S0VUID0gImJyYWNrZXQiLCBLRVlXT1JEID0gImtleXdvcmQiOworICAgICAgICBBVE9NID0gImF0
b20iLCBOVU1CRVIgPSAibnVtYmVyIiwgQlJBQ0tFVCA9ICJicmFja2V0IiwgS0VZV09SRCA9ICJr
ZXl3b3JkIiwgVkFSID0gInZhcmlhYmxlIjsKICAgICB2YXIgSU5ERU5UX1dPUkRfU0tJUCA9IG9w
dGlvbnMuaW5kZW50VW5pdCB8fCAyOwogICAgIHZhciBOT1JNQUxfSU5ERU5UX1VOSVQgPSBvcHRp
b25zLmluZGVudFVuaXQgfHwgMjsKIApAQCAtNTksNyArNTksNyBAQCBDb2RlTWlycm9yLmRlZmlu
ZU1vZGUoImNsb2p1cmUiLCBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgICBzaWduOiAvWyst
XS8sCiAgICAgICAgIGV4cG9uZW50OiAvZS9pLAogICAgICAgICBrZXl3b3JkX2NoYXI6IC9bXlxz
XChcW1w7XClcXV0vLAotICAgICAgICBzeW1ib2w6IC9bXHcqKyFcLVwuXz86PD5cL10vCisgICAg
ICAgIHN5bWJvbDogL1tcdyorIVwtXC5fPzo8PlwvXHhhMS1cdWZmZmZdLwogICAgIH07CiAKICAg
ICBmdW5jdGlvbiBzdGF0ZVN0YWNrKGluZGVudCwgdHlwZSwgcHJldikgeyAvLyByZXByZXNlbnRz
IGEgc3RhdGUgc3RhY2sgb2JqZWN0CkBAIC0xMTQsNyArMTE0LDcgQEAgQ29kZU1pcnJvci5kZWZp
bmVNb2RlKCJjbG9qdXJlIiwgZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgICAgdmFyIGZpcnN0
ID0gc3RyZWFtLm5leHQoKTsKICAgICAgICAgLy8gUmVhZCBzcGVjaWFsIGxpdGVyYWxzOiBiYWNr
c3BhY2UsIG5ld2xpbmUsIHNwYWNlLCByZXR1cm4uCiAgICAgICAgIC8vIEp1c3QgcmVhZCBhbGwg
bG93ZXJjYXNlIGxldHRlcnMuCi0gICAgICAgIGlmIChmaXJzdC5tYXRjaCgvW2Etel0vKSAmJiBz
dHJlYW0ubWF0Y2goL1thLXpdKy8sIHRydWUpKSB7CisgICAgICAgIGlmIChmaXJzdCAmJiBmaXJz
dC5tYXRjaCgvW2Etel0vKSAmJiBzdHJlYW0ubWF0Y2goL1thLXpdKy8sIHRydWUpKSB7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gUmVhZCB1bmljb2RlIGNoYXJh
Y3RlcjogXHUxMDAwIFx1QTBhMQpAQCAtMjIwLDcgKzIyMCw5IEBAIENvZGVNaXJyb3IuZGVmaW5l
TW9kZSgiY2xvanVyZSIsIGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuVHlwZSA9IEJVSUxUSU47CiAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGF0b21zICYmIGF0b21zLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJy
ZW50KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEFUT007
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuVHlwZSA9IG51bGw7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm5UeXBlID0gVkFSOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTIzMiw2ICsyMzQsNyBAQCBDb2RlTWlycm9y
LmRlZmluZU1vZGUoImNsb2p1cmUiLCBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgICAgICAg
cmV0dXJuIHN0YXRlLmluZGVudFN0YWNrLmluZGVudDsKICAgICAgICAgfSwKIAorICAgICAgICBj
bG9zZUJyYWNrZXRzOiB7cGFpcnM6ICIoKVtde31cIlwiIn0sCiAgICAgICAgIGxpbmVDb21tZW50
OiAiOzsiCiAgICAgfTsKIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9zZWJyYWNrZXRzLmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9zZWJy
YWNrZXRzLmpzCmluZGV4IDgzZDQyMjlmNDdiNDQ2ODI0YTM4YjBlOWM2NTg3NDRjNWNmYWY3ZDMu
LjcwMzAyNjhiMDMyZDYwNDQzNjc1NGIwY2E1YjkwZDQ1N2ZmNzcyZWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY2xv
c2VicmFja2V0cy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Db2RlTWlycm9yL2Nsb3NlYnJhY2tldHMuanMKQEAgLTksMTM1ICs5LDE3NyBAQAog
ICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52CiAgICAgbW9kKENvZGVNaXJyb3IpOwogfSkoZnVu
Y3Rpb24oQ29kZU1pcnJvcikgewotICB2YXIgREVGQVVMVF9CUkFDS0VUUyA9ICIoKVtde30nJ1wi
XCIiOwotICB2YXIgREVGQVVMVF9FWFBMT0RFX09OX0VOVEVSID0gIltde30iOwotICB2YXIgU1BB
Q0VfQ0hBUl9SRUdFWCA9IC9ccy87CisgIHZhciBkZWZhdWx0cyA9IHsKKyAgICBwYWlyczogIigp
W117fScnXCJcIiIsCisgICAgdHJpcGxlczogIiIsCisgICAgZXhwbG9kZTogIltde30iCisgIH07
CiAKICAgdmFyIFBvcyA9IENvZGVNaXJyb3IuUG9zOwogCiAgIENvZGVNaXJyb3IuZGVmaW5lT3B0
aW9uKCJhdXRvQ2xvc2VCcmFja2V0cyIsIGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsLCBvbGQpIHsK
LSAgICBpZiAob2xkICE9IENvZGVNaXJyb3IuSW5pdCAmJiBvbGQpCi0gICAgICBjbS5yZW1vdmVL
ZXlNYXAoImF1dG9DbG9zZUJyYWNrZXRzIik7Ci0gICAgaWYgKCF2YWwpIHJldHVybjsKLSAgICB2
YXIgcGFpcnMgPSBERUZBVUxUX0JSQUNLRVRTLCBleHBsb2RlID0gREVGQVVMVF9FWFBMT0RFX09O
X0VOVEVSOwotICAgIGlmICh0eXBlb2YgdmFsID09ICJzdHJpbmciKSBwYWlycyA9IHZhbDsKLSAg
ICBlbHNlIGlmICh0eXBlb2YgdmFsID09ICJvYmplY3QiKSB7Ci0gICAgICBpZiAodmFsLnBhaXJz
ICE9IG51bGwpIHBhaXJzID0gdmFsLnBhaXJzOwotICAgICAgaWYgKHZhbC5leHBsb2RlICE9IG51
bGwpIGV4cGxvZGUgPSB2YWwuZXhwbG9kZTsKKyAgICBpZiAob2xkICYmIG9sZCAhPSBDb2RlTWly
cm9yLkluaXQpIHsKKyAgICAgIGNtLnJlbW92ZUtleU1hcChrZXlNYXApOworICAgICAgY20uc3Rh
dGUuY2xvc2VCcmFja2V0cyA9IG51bGw7CisgICAgfQorICAgIGlmICh2YWwpIHsKKyAgICAgIGNt
LnN0YXRlLmNsb3NlQnJhY2tldHMgPSB2YWw7CisgICAgICBjbS5hZGRLZXlNYXAoa2V5TWFwKTsK
ICAgICB9Ci0gICAgdmFyIG1hcCA9IGJ1aWxkS2V5bWFwKHBhaXJzKTsKLSAgICBpZiAoZXhwbG9k
ZSkgbWFwLkVudGVyID0gYnVpbGRFeHBsb2RlSGFuZGxlcihleHBsb2RlKTsKLSAgICBjbS5hZGRL
ZXlNYXAobWFwKTsKICAgfSk7CiAKLSAgZnVuY3Rpb24gY2hhcnNBcm91bmQoY20sIHBvcykgewot
ICAgIHZhciBzdHIgPSBjbS5nZXRSYW5nZShQb3MocG9zLmxpbmUsIHBvcy5jaCAtIDEpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBQb3MocG9zLmxpbmUsIHBvcy5jaCArIDEpKTsKLSAgICBy
ZXR1cm4gc3RyLmxlbmd0aCA9PSAyID8gc3RyIDogbnVsbDsKKyAgZnVuY3Rpb24gZ2V0T3B0aW9u
KGNvbmYsIG5hbWUpIHsKKyAgICBpZiAobmFtZSA9PSAicGFpcnMiICYmIHR5cGVvZiBjb25mID09
ICJzdHJpbmciKSByZXR1cm4gY29uZjsKKyAgICBpZiAodHlwZW9mIGNvbmYgPT0gIm9iamVjdCIg
JiYgY29uZltuYW1lXSAhPSBudWxsKSByZXR1cm4gY29uZltuYW1lXTsKKyAgICByZXR1cm4gZGVm
YXVsdHNbbmFtZV07CiAgIH0KIAotICBmdW5jdGlvbiBidWlsZEtleW1hcChwYWlycykgewotICAg
IHZhciBtYXAgPSB7Ci0gICAgICBuYW1lIDogImF1dG9DbG9zZUJyYWNrZXRzIiwKLSAgICAgIEJh
Y2tzcGFjZTogZnVuY3Rpb24oY20pIHsKLSAgICAgICAgaWYgKGNtLmdldE9wdGlvbigiZGlzYWJs
ZUlucHV0IikpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0gICAgICAgIHZhciByYW5nZXMgPSBj
bS5saXN0U2VsZWN0aW9ucygpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5s
ZW5ndGg7IGkrKykgewotICAgICAgICAgIGlmICghcmFuZ2VzW2ldLmVtcHR5KCkpIHJldHVybiBD
b2RlTWlycm9yLlBhc3M7Ci0gICAgICAgICAgdmFyIGFyb3VuZCA9IGNoYXJzQXJvdW5kKGNtLCBy
YW5nZXNbaV0uaGVhZCk7Ci0gICAgICAgICAgaWYgKCFhcm91bmQgfHwgcGFpcnMuaW5kZXhPZihh
cm91bmQpICUgMiAhPSAwKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwotICAgICAgICB9Ci0gICAg
ICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAg
ICAgICB2YXIgY3VyID0gcmFuZ2VzW2ldLmhlYWQ7Ci0gICAgICAgICAgY20ucmVwbGFjZVJhbmdl
KCIiLCBQb3MoY3VyLmxpbmUsIGN1ci5jaCAtIDEpLCBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEp
KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH07Ci0gICAgdmFyIGNsb3NpbmdCcmFja2V0cyA9
ICIiOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFpcnMubGVuZ3RoOyBpICs9IDIpIChmdW5j
dGlvbihsZWZ0LCByaWdodCkgewotICAgICAgaWYgKGxlZnQgIT0gcmlnaHQpIGNsb3NpbmdCcmFj
a2V0cyArPSByaWdodDsKLSAgICAgIG1hcFsiJyIgKyBsZWZ0ICsgIiciXSA9IGZ1bmN0aW9uKGNt
KSB7Ci0gICAgICAgIGlmIChjbS5nZXRPcHRpb24oImRpc2FibGVJbnB1dCIpKSByZXR1cm4gQ29k
ZU1pcnJvci5QYXNzOwotICAgICAgICB2YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKSwg
dHlwZSwgbmV4dDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV0sIGN1ciA9IHJhbmdlLmhlYWQs
IGN1clR5cGU7Ci0gICAgICAgICAgaWYgKGxlZnQgPT0gIiciICYmIGNtLmdldFRva2VuVHlwZUF0
KGN1cikgPT0gImNvbW1lbnQiKQotICAgICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsK
LSAgICAgICAgICB2YXIgbmV4dCA9IGNtLmdldFJhbmdlKGN1ciwgUG9zKGN1ci5saW5lLCBjdXIu
Y2ggKyAxKSk7Ci0gICAgICAgICAgaWYgKCFyYW5nZS5lbXB0eSgpKQotICAgICAgICAgICAgY3Vy
VHlwZSA9ICJzdXJyb3VuZCI7Ci0gICAgICAgICAgZWxzZSBpZiAobGVmdCA9PSByaWdodCAmJiBu
ZXh0ID09IHJpZ2h0KSB7Ci0gICAgICAgICAgICBpZiAoY20uZ2V0UmFuZ2UoY3VyLCBQb3MoY3Vy
LmxpbmUsIGN1ci5jaCArIDMpKSA9PSBsZWZ0ICsgbGVmdCArIGxlZnQpCi0gICAgICAgICAgICAg
IGN1clR5cGUgPSAic2tpcFRocmVlIjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
Y3VyVHlwZSA9ICJza2lwIjsKLSAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQgPT0gcmlnaHQgJiYg
Y3VyLmNoID4gMSAmJgotICAgICAgICAgICAgICAgICAgICAgY20uZ2V0UmFuZ2UoUG9zKGN1ci5s
aW5lLCBjdXIuY2ggLSAyKSwgY3VyKSA9PSBsZWZ0ICsgbGVmdCAmJgotICAgICAgICAgICAgICAg
ICAgICAgKGN1ci5jaCA8PSAyIHx8IGNtLmdldFJhbmdlKFBvcyhjdXIubGluZSwgY3VyLmNoIC0g
MyksIFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMikpICE9IGxlZnQpKQotICAgICAgICAgICAgY3Vy
VHlwZSA9ICJhZGRGb3VyIjsKLSAgICAgICAgICBlbHNlIGlmIChsZWZ0ID09IHJpZ2h0ICYmIENv
ZGVNaXJyb3IuaXNXb3JkQ2hhcihuZXh0KSkKLSAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9y
LlBhc3M7Ci0gICAgICAgICAgZWxzZSBpZiAoY20uZ2V0TGluZShjdXIubGluZSkubGVuZ3RoID09
IGN1ci5jaCB8fCBjbG9zaW5nQnJhY2tldHMuaW5kZXhPZihuZXh0KSA+PSAwIHx8IFNQQUNFX0NI
QVJfUkVHRVgudGVzdChuZXh0KSkKLSAgICAgICAgICAgIGN1clR5cGUgPSAiYm90aCI7Ci0gICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKLSAgICAgICAg
ICBpZiAoIXR5cGUpIHR5cGUgPSBjdXJUeXBlOwotICAgICAgICAgIGVsc2UgaWYgKHR5cGUgIT0g
Y3VyVHlwZSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKLSAgICAgICAgfQotCi0gICAgICAgIGNt
Lm9wZXJhdGlvbihmdW5jdGlvbigpIHsKLSAgICAgICAgICBpZiAodHlwZSA9PSAic2tpcCIpIHsK
LSAgICAgICAgICAgIGNtLmV4ZWNDb21tYW5kKCJnb0NoYXJSaWdodCIpOwotICAgICAgICAgIH0g
ZWxzZSBpZiAodHlwZSA9PSAic2tpcFRocmVlIikgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAzOyBpKyspCi0gICAgICAgICAgICAgIGNtLmV4ZWNDb21tYW5kKCJnb0NoYXJSaWdo
dCIpOwotICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAic3Vycm91bmQiKSB7Ci0gICAgICAg
ICAgICB2YXIgc2VscyA9IGNtLmdldFNlbGVjdGlvbnMoKTsKLSAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc2Vscy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgc2Vsc1tpXSA9IGxl
ZnQgKyBzZWxzW2ldICsgcmlnaHQ7Ci0gICAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9ucyhz
ZWxzLCAiYXJvdW5kIik7Ci0gICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICJib3RoIikgewot
ICAgICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbihsZWZ0ICsgcmlnaHQsIG51bGwpOwotICAg
ICAgICAgICAgY20uZXhlY0NvbW1hbmQoImdvQ2hhckxlZnQiKTsKLSAgICAgICAgICB9IGVsc2Ug
aWYgKHR5cGUgPT0gImFkZEZvdXIiKSB7Ci0gICAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9u
KGxlZnQgKyBsZWZ0ICsgbGVmdCArIGxlZnQsICJiZWZvcmUiKTsKLSAgICAgICAgICAgIGNtLmV4
ZWNDb21tYW5kKCJnb0NoYXJSaWdodCIpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAg
ICB9OwotICAgICAgaWYgKGxlZnQgIT0gcmlnaHQpIG1hcFsiJyIgKyByaWdodCArICInIl0gPSBm
dW5jdGlvbihjbSkgewotICAgICAgICB2YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKTsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07Ci0gICAgICAgICAgaWYgKCFyYW5nZS5lbXB0eSgp
IHx8Ci0gICAgICAgICAgICAgIGNtLmdldFJhbmdlKHJhbmdlLmhlYWQsIFBvcyhyYW5nZS5oZWFk
LmxpbmUsIHJhbmdlLmhlYWQuY2ggKyAxKSkgIT0gcmlnaHQpCi0gICAgICAgICAgICByZXR1cm4g
Q29kZU1pcnJvci5QYXNzOwotICAgICAgICB9Ci0gICAgICAgIGNtLmV4ZWNDb21tYW5kKCJnb0No
YXJSaWdodCIpOwotICAgICAgfTsKLSAgICB9KShwYWlycy5jaGFyQXQoaSksIHBhaXJzLmNoYXJB
dChpICsgMSkpOwotICAgIHJldHVybiBtYXA7CisgIHZhciBiaW5kID0gZGVmYXVsdHMucGFpcnMg
KyAiYCI7CisgIHZhciBrZXlNYXAgPSB7QmFja3NwYWNlOiBoYW5kbGVCYWNrc3BhY2UsIEVudGVy
OiBoYW5kbGVFbnRlcn07CisgIGZvciAodmFyIGkgPSAwOyBpIDwgYmluZC5sZW5ndGg7IGkrKykK
KyAgICBrZXlNYXBbIiciICsgYmluZC5jaGFyQXQoaSkgKyAiJyJdID0gaGFuZGxlcihiaW5kLmNo
YXJBdChpKSk7CisKKyAgZnVuY3Rpb24gaGFuZGxlcihjaCkgeworICAgIHJldHVybiBmdW5jdGlv
bihjbSkgeyByZXR1cm4gaGFuZGxlQ2hhcihjbSwgY2gpOyB9OworICB9CisKKyAgZnVuY3Rpb24g
Z2V0Q29uZmlnKGNtKSB7CisgICAgdmFyIGRlZmx0ID0gY20uc3RhdGUuY2xvc2VCcmFja2V0czsK
KyAgICBpZiAoIWRlZmx0KSByZXR1cm4gbnVsbDsKKyAgICB2YXIgbW9kZSA9IGNtLmdldE1vZGVB
dChjbS5nZXRDdXJzb3IoKSk7CisgICAgcmV0dXJuIG1vZGUuY2xvc2VCcmFja2V0cyB8fCBkZWZs
dDsKICAgfQogCi0gIGZ1bmN0aW9uIGJ1aWxkRXhwbG9kZUhhbmRsZXIocGFpcnMpIHsKLSAgICBy
ZXR1cm4gZnVuY3Rpb24oY20pIHsKLSAgICAgIGlmIChjbS5nZXRPcHRpb24oImRpc2FibGVJbnB1
dCIpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwotICAgICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RT
ZWxlY3Rpb25zKCk7CisgIGZ1bmN0aW9uIGhhbmRsZUJhY2tzcGFjZShjbSkgeworICAgIHZhciBj
b25mID0gZ2V0Q29uZmlnKGNtKTsKKyAgICBpZiAoIWNvbmYgfHwgY20uZ2V0T3B0aW9uKCJkaXNh
YmxlSW5wdXQiKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKworICAgIHZhciBwYWlycyA9IGdl
dE9wdGlvbihjb25mLCAicGFpcnMiKTsKKyAgICB2YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlv
bnMoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAg
ICAgaWYgKCFyYW5nZXNbaV0uZW1wdHkoKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICAg
IHZhciBhcm91bmQgPSBjaGFyc0Fyb3VuZChjbSwgcmFuZ2VzW2ldLmhlYWQpOworICAgICAgaWYg
KCFhcm91bmQgfHwgcGFpcnMuaW5kZXhPZihhcm91bmQpICUgMiAhPSAwKSByZXR1cm4gQ29kZU1p
cnJvci5QYXNzOworICAgIH0KKyAgICBmb3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkg
Pj0gMDsgaS0tKSB7CisgICAgICB2YXIgY3VyID0gcmFuZ2VzW2ldLmhlYWQ7CisgICAgICBjbS5y
ZXBsYWNlUmFuZ2UoIiIsIFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMSksIFBvcyhjdXIubGluZSwg
Y3VyLmNoICsgMSkpOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGhhbmRsZUVudGVyKGNtKSB7
CisgICAgdmFyIGNvbmYgPSBnZXRDb25maWcoY20pOworICAgIHZhciBleHBsb2RlID0gY29uZiAm
JiBnZXRPcHRpb24oY29uZiwgImV4cGxvZGUiKTsKKyAgICBpZiAoIWV4cGxvZGUgfHwgY20uZ2V0
T3B0aW9uKCJkaXNhYmxlSW5wdXQiKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKworICAgIHZh
ciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAoIXJhbmdlc1tpXS5lbXB0eSgpKSByZXR1
cm4gQ29kZU1pcnJvci5QYXNzOworICAgICAgdmFyIGFyb3VuZCA9IGNoYXJzQXJvdW5kKGNtLCBy
YW5nZXNbaV0uaGVhZCk7CisgICAgICBpZiAoIWFyb3VuZCB8fCBleHBsb2RlLmluZGV4T2YoYXJv
dW5kKSAlIDIgIT0gMCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICB9CisgICAgY20ub3Bl
cmF0aW9uKGZ1bmN0aW9uKCkgeworICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiXG5cbiIsIG51
bGwpOworICAgICAgY20uZXhlY0NvbW1hbmQoImdvQ2hhckxlZnQiKTsKKyAgICAgIHJhbmdlcyA9
IGNtLmxpc3RTZWxlY3Rpb25zKCk7CiAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5s
ZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoIXJhbmdlc1tpXS5lbXB0eSgpKSByZXR1cm4gQ29k
ZU1pcnJvci5QYXNzOwotICAgICAgICB2YXIgYXJvdW5kID0gY2hhcnNBcm91bmQoY20sIHJhbmdl
c1tpXS5oZWFkKTsKLSAgICAgICAgaWYgKCFhcm91bmQgfHwgcGFpcnMuaW5kZXhPZihhcm91bmQp
ICUgMiAhPSAwKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOworICAgICAgICB2YXIgbGluZSA9IHJh
bmdlc1tpXS5oZWFkLmxpbmU7CisgICAgICAgIGNtLmluZGVudExpbmUobGluZSwgbnVsbCwgdHJ1
ZSk7CisgICAgICAgIGNtLmluZGVudExpbmUobGluZSArIDEsIG51bGwsIHRydWUpOwogICAgICAg
fQotICAgICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgewotICAgICAgICBjbS5yZXBsYWNlU2Vs
ZWN0aW9uKCJcblxuIiwgbnVsbCk7CisgICAgfSk7CisgIH0KKworICBmdW5jdGlvbiBoYW5kbGVD
aGFyKGNtLCBjaCkgeworICAgIHZhciBjb25mID0gZ2V0Q29uZmlnKGNtKTsKKyAgICBpZiAoIWNv
bmYgfHwgY20uZ2V0T3B0aW9uKCJkaXNhYmxlSW5wdXQiKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFz
czsKKworICAgIHZhciBwYWlycyA9IGdldE9wdGlvbihjb25mLCAicGFpcnMiKTsKKyAgICB2YXIg
cG9zID0gcGFpcnMuaW5kZXhPZihjaCk7CisgICAgaWYgKHBvcyA9PSAtMSkgcmV0dXJuIENvZGVN
aXJyb3IuUGFzczsKKyAgICB2YXIgdHJpcGxlcyA9IGdldE9wdGlvbihjb25mLCAidHJpcGxlcyIp
OworCisgICAgdmFyIGlkZW50aWNhbCA9IHBhaXJzLmNoYXJBdChwb3MgKyAxKSA9PSBjaDsKKyAg
ICB2YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKTsKKyAgICB2YXIgb3BlbmluZyA9IHBv
cyAlIDIgPT0gMDsKKworICAgIHZhciB0eXBlLCBuZXh0OworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV0sIGN1
ciA9IHJhbmdlLmhlYWQsIGN1clR5cGU7CisgICAgICB2YXIgbmV4dCA9IGNtLmdldFJhbmdlKGN1
ciwgUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAxKSk7CisgICAgICBpZiAob3BlbmluZyAmJiAhcmFu
Z2UuZW1wdHkoKSkgeworICAgICAgICBjdXJUeXBlID0gInN1cnJvdW5kIjsKKyAgICAgIH0gZWxz
ZSBpZiAoKGlkZW50aWNhbCB8fCAhb3BlbmluZykgJiYgbmV4dCA9PSBjaCkgeworICAgICAgICBp
ZiAodHJpcGxlcy5pbmRleE9mKGNoKSA+PSAwICYmIGNtLmdldFJhbmdlKGN1ciwgUG9zKGN1ci5s
aW5lLCBjdXIuY2ggKyAzKSkgPT0gY2ggKyBjaCArIGNoKQorICAgICAgICAgIGN1clR5cGUgPSAi
c2tpcFRocmVlIjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGN1clR5cGUgPSAic2tpcCI7Cisg
ICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCAmJiBjdXIuY2ggPiAxICYmIHRyaXBsZXMuaW5kZXhP
ZihjaCkgPj0gMCAmJgorICAgICAgICAgICAgICAgICBjbS5nZXRSYW5nZShQb3MoY3VyLmxpbmUs
IGN1ci5jaCAtIDIpLCBjdXIpID09IGNoICsgY2ggJiYKKyAgICAgICAgICAgICAgICAgKGN1ci5j
aCA8PSAyIHx8IGNtLmdldFJhbmdlKFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMyksIFBvcyhjdXIu
bGluZSwgY3VyLmNoIC0gMikpICE9IGNoKSkgeworICAgICAgICBjdXJUeXBlID0gImFkZEZvdXIi
OworICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwpIHsKKyAgICAgICAgaWYgKCFDb2RlTWlycm9y
LmlzV29yZENoYXIobmV4dCkgJiYgZW50ZXJpbmdTdHJpbmcoY20sIGN1ciwgY2gpKSBjdXJUeXBl
ID0gImJvdGgiOworICAgICAgICBlbHNlIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CisgICAgICB9
IGVsc2UgaWYgKG9wZW5pbmcgJiYgKGNtLmdldExpbmUoY3VyLmxpbmUpLmxlbmd0aCA9PSBjdXIu
Y2ggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9zaW5nQnJhY2tldChuZXh0
LCBwYWlycykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL1xzLy50ZXN0KG5leHQp
KSkgeworICAgICAgICBjdXJUeXBlID0gImJvdGgiOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
cmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICAgIH0KKyAgICAgIGlmICghdHlwZSkgdHlwZSA9
IGN1clR5cGU7CisgICAgICBlbHNlIGlmICh0eXBlICE9IGN1clR5cGUpIHJldHVybiBDb2RlTWly
cm9yLlBhc3M7CisgICAgfQorCisgICAgdmFyIGxlZnQgPSBwb3MgJSAyID8gcGFpcnMuY2hhckF0
KHBvcyAtIDEpIDogY2g7CisgICAgdmFyIHJpZ2h0ID0gcG9zICUgMiA/IGNoIDogcGFpcnMuY2hh
ckF0KHBvcyArIDEpOworICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKKyAgICAgIGlmICh0
eXBlID09ICJza2lwIikgeworICAgICAgICBjbS5leGVjQ29tbWFuZCgiZ29DaGFyUmlnaHQiKTsK
KyAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAic2tpcFRocmVlIikgeworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAgICBjbS5leGVjQ29tbWFuZCgiZ29DaGFyUmln
aHQiKTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAic3Vycm91bmQiKSB7CisgICAgICAgIHZh
ciBzZWxzID0gY20uZ2V0U2VsZWN0aW9ucygpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHNlbHMubGVuZ3RoOyBpKyspCisgICAgICAgICAgc2Vsc1tpXSA9IGxlZnQgKyBzZWxzW2ldICsg
cmlnaHQ7CisgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHNlbHMsICJhcm91bmQiKTsKKyAg
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiYm90aCIpIHsKKyAgICAgICAgY20ucmVwbGFjZVNlbGVj
dGlvbihsZWZ0ICsgcmlnaHQsIG51bGwpOworICAgICAgICBjbS50cmlnZ2VyRWxlY3RyaWMobGVm
dCArIHJpZ2h0KTsKICAgICAgICAgY20uZXhlY0NvbW1hbmQoImdvQ2hhckxlZnQiKTsKLSAgICAg
ICAgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICB2YXIgbGluZSA9IHJhbmdlc1tp
XS5oZWFkLmxpbmU7Ci0gICAgICAgICAgY20uaW5kZW50TGluZShsaW5lLCBudWxsLCB0cnVlKTsK
LSAgICAgICAgICBjbS5pbmRlbnRMaW5lKGxpbmUgKyAxLCBudWxsLCB0cnVlKTsKLSAgICAgICAg
fQotICAgICAgfSk7Ci0gICAgfTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiYWRkRm91ciIp
IHsKKyAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbihsZWZ0ICsgbGVmdCArIGxlZnQgKyBsZWZ0
LCAiYmVmb3JlIik7CisgICAgICAgIGNtLmV4ZWNDb21tYW5kKCJnb0NoYXJSaWdodCIpOworICAg
ICAgfQorICAgIH0pOworICB9CisKKyAgZnVuY3Rpb24gaXNDbG9zaW5nQnJhY2tldChjaCwgcGFp
cnMpIHsKKyAgICB2YXIgcG9zID0gcGFpcnMubGFzdEluZGV4T2YoY2gpOworICAgIHJldHVybiBw
b3MgPiAtMSAmJiBwb3MgJSAyID09IDE7CisgIH0KKworICBmdW5jdGlvbiBjaGFyc0Fyb3VuZChj
bSwgcG9zKSB7CisgICAgdmFyIHN0ciA9IGNtLmdldFJhbmdlKFBvcyhwb3MubGluZSwgcG9zLmNo
IC0gMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhwb3MubGluZSwgcG9zLmNoICsg
MSkpOworICAgIHJldHVybiBzdHIubGVuZ3RoID09IDIgPyBzdHIgOiBudWxsOworICB9CisKKyAg
Ly8gUHJvamVjdCB0aGUgdG9rZW4gdHlwZSB0aGF0IHdpbGwgZXhpc3RzIGFmdGVyIHRoZSBnaXZl
biBjaGFyIGlzCisgIC8vIHR5cGVkLCBhbmQgdXNlIGl0IHRvIGRldGVybWluZSB3aGV0aGVyIGl0
IHdvdWxkIGNhdXNlIHRoZSBzdGFydAorICAvLyBvZiBhIHN0cmluZyB0b2tlbi4KKyAgZnVuY3Rp
b24gZW50ZXJpbmdTdHJpbmcoY20sIHBvcywgY2gpIHsKKyAgICB2YXIgbGluZSA9IGNtLmdldExp
bmUocG9zLmxpbmUpOworICAgIHZhciB0b2tlbiA9IGNtLmdldFRva2VuQXQocG9zKTsKKyAgICBp
ZiAoL1xic3RyaW5nMj9cYi8udGVzdCh0b2tlbi50eXBlKSkgcmV0dXJuIGZhbHNlOworICAgIHZh
ciBzdHJlYW0gPSBuZXcgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0obGluZS5zbGljZSgwLCBwb3Mu
Y2gpICsgY2ggKyBsaW5lLnNsaWNlKHBvcy5jaCksIDQpOworICAgIHN0cmVhbS5wb3MgPSBzdHJl
YW0uc3RhcnQgPSB0b2tlbi5zdGFydDsKKyAgICBmb3IgKDs7KSB7CisgICAgICB2YXIgdHlwZTEg
PSBjbS5nZXRNb2RlKCkudG9rZW4oc3RyZWFtLCB0b2tlbi5zdGF0ZSk7CisgICAgICBpZiAoc3Ry
ZWFtLnBvcyA+PSBwb3MuY2ggKyAxKSByZXR1cm4gL1xic3RyaW5nMj9cYi8udGVzdCh0eXBlMSk7
CisgICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOworICAgIH0KICAgfQogfSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2Rl
TWlycm9yL2NvZGVtaXJyb3IuY3NzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzcwppbmRleCAwOThhMzE3YTIyOTA5
OGUyYzBkZDliNmVhZjk4ZjcyM2JmYzg3NmM4Li4zMThkMjVmMDJkOWY5Njc4MWQwZjE4OWRhZTU5
ZWJjMjQwOWEyMDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5j
c3MKQEAgLTQsMTAgKzQsNyBAQAogICAvKiBTZXQgaGVpZ2h0LCB3aWR0aCwgYm9yZGVycywgYW5k
IGdsb2JhbCBmb250IHByb3BlcnRpZXMgaGVyZSAqLwogICBmb250LWZhbWlseTogbW9ub3NwYWNl
OwogICBoZWlnaHQ6IDMwMHB4OwotfQotLkNvZGVNaXJyb3Itc2Nyb2xsIHsKLSAgLyogU2V0IHNj
cm9sbGluZyBiZWhhdmlvdXIgaGVyZSAqLwotICBvdmVyZmxvdzogYXV0bzsKKyAgY29sb3I6IGJs
YWNrOwogfQogCiAvKiBQQURESU5HICovCkBAIC0zNiwxMCArMzMsMTIgQEAKICAgbWluLXdpZHRo
OiAyMHB4OwogICB0ZXh0LWFsaWduOiByaWdodDsKICAgY29sb3I6ICM5OTk7Ci0gIC1tb3otYm94
LXNpemluZzogY29udGVudC1ib3g7Ci0gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OworICB3aGl0
ZS1zcGFjZTogbm93cmFwOwogfQogCisuQ29kZU1pcnJvci1ndXR0ZXJtYXJrZXIgeyBjb2xvcjog
YmxhY2s7IH0KKy5Db2RlTWlycm9yLWd1dHRlcm1hcmtlci1zdWJ0bGUgeyBjb2xvcjogIzk5OTsg
fQorCiAvKiBDVVJTT1IgKi8KIAogLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHsK
QEAgLTQ5LDE1ICs0OCw0MyBAQAogLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3Itc2Vjb25kYXJ5
Y3Vyc29yIHsKICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7CiB9Ci0uQ29kZU1pcnJv
ci5jbS1rZXltYXAtZmF0LWN1cnNvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IgeworLkNvZGVNaXJy
b3IuY20tZmF0LWN1cnNvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewogICB3aWR0aDogYXV0bzsK
ICAgYm9yZGVyOiAwOwogICBiYWNrZ3JvdW5kOiAjN2U3OwogfQorLkNvZGVNaXJyb3IuY20tZmF0
LWN1cnNvciBkaXYuQ29kZU1pcnJvci1jdXJzb3JzIHsKKyAgei1pbmRleDogMTsKK30KKworLmNt
LWFuaW1hdGUtZmF0LWN1cnNvciB7CisgIHdpZHRoOiBhdXRvOworICBib3JkZXI6IDA7CisgIC13
ZWJraXQtYW5pbWF0aW9uOiBibGluayAxLjA2cyBzdGVwcygxKSBpbmZpbml0ZTsKKyAgLW1vei1h
bmltYXRpb246IGJsaW5rIDEuMDZzIHN0ZXBzKDEpIGluZmluaXRlOworICBhbmltYXRpb246IGJs
aW5rIDEuMDZzIHN0ZXBzKDEpIGluZmluaXRlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjN2U3Owor
fQorQC1tb3ota2V5ZnJhbWVzIGJsaW5rIHsKKyAgMCUge30KKyAgNTAlIHsgYmFja2dyb3VuZC1j
b2xvcjogdHJhbnNwYXJlbnQ7IH0KKyAgMTAwJSB7fQorfQorQC13ZWJraXQta2V5ZnJhbWVzIGJs
aW5rIHsKKyAgMCUge30KKyAgNTAlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0K
KyAgMTAwJSB7fQorfQorQGtleWZyYW1lcyBibGluayB7CisgIDAlIHt9CisgIDUwJSB7IGJhY2tn
cm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9CisgIDEwMCUge30KK30KKwogLyogQ2FuIHN0eWxl
IGN1cnNvciBkaWZmZXJlbnQgaW4gb3ZlcndyaXRlIChub24taW5zZXJ0KSBtb2RlICovCiBkaXYu
Q29kZU1pcnJvci1vdmVyd3JpdGUgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHt9CiAKLS5jbS10YWIg
eyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH0KKy5jbS10YWIgeyBkaXNwbGF5OiBpbmxpbmUtYmxv
Y2s7IHRleHQtZGVjb3JhdGlvbjogaW5oZXJpdDsgfQogCiAuQ29kZU1pcnJvci1ydWxlciB7CiAg
IGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2NjYzsKQEAgLTY2LDYgKzkzLDE1IEBAIGRpdi5Db2Rl
TWlycm9yLW92ZXJ3cml0ZSBkaXYuQ29kZU1pcnJvci1jdXJzb3Ige30KIAogLyogREVGQVVMVCBU
SEVNRSAqLwogCisuY20tcy1kZWZhdWx0IC5jbS1oZWFkZXIge2NvbG9yOiBibHVlO30KKy5jbS1z
LWRlZmF1bHQgLmNtLXF1b3RlIHtjb2xvcjogIzA5MDt9CisuY20tbmVnYXRpdmUge2NvbG9yOiAj
ZDQ0O30KKy5jbS1wb3NpdGl2ZSB7Y29sb3I6ICMyOTI7fQorLmNtLWhlYWRlciwgLmNtLXN0cm9u
ZyB7Zm9udC13ZWlnaHQ6IGJvbGQ7fQorLmNtLWVtIHtmb250LXN0eWxlOiBpdGFsaWM7fQorLmNt
LWxpbmsge3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO30KKy5jbS1zdHJpa2V0aHJvdWdoIHt0
ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDt9CisKIC5jbS1zLWRlZmF1bHQgLmNtLWtleXdv
cmQge2NvbG9yOiAjNzA4O30KIC5jbS1zLWRlZmF1bHQgLmNtLWF0b20ge2NvbG9yOiAjMjE5O30K
IC5jbS1zLWRlZmF1bHQgLmNtLW51bWJlciB7Y29sb3I6ICMxNjQ7fQpAQCAtODUsMjIgKzEyMSwx
OSBAQCBkaXYuQ29kZU1pcnJvci1vdmVyd3JpdGUgZGl2LkNvZGVNaXJyb3ItY3Vyc29yIHt9CiAu
Y20tcy1kZWZhdWx0IC5jbS1icmFja2V0IHtjb2xvcjogIzk5Nzt9CiAuY20tcy1kZWZhdWx0IC5j
bS10YWcge2NvbG9yOiAjMTcwO30KIC5jbS1zLWRlZmF1bHQgLmNtLWF0dHJpYnV0ZSB7Y29sb3I6
ICMwMGM7fQotLmNtLXMtZGVmYXVsdCAuY20taGVhZGVyIHtjb2xvcjogYmx1ZTt9Ci0uY20tcy1k
ZWZhdWx0IC5jbS1xdW90ZSB7Y29sb3I6ICMwOTA7fQogLmNtLXMtZGVmYXVsdCAuY20taHIge2Nv
bG9yOiAjOTk5O30KIC5jbS1zLWRlZmF1bHQgLmNtLWxpbmsge2NvbG9yOiAjMDBjO30KIAotLmNt
LW5lZ2F0aXZlIHtjb2xvcjogI2Q0NDt9Ci0uY20tcG9zaXRpdmUge2NvbG9yOiAjMjkyO30KLS5j
bS1oZWFkZXIsIC5jbS1zdHJvbmcge2ZvbnQtd2VpZ2h0OiBib2xkO30KLS5jbS1lbSB7Zm9udC1z
dHlsZTogaXRhbGljO30KLS5jbS1saW5rIHt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9Ci0K
IC5jbS1zLWRlZmF1bHQgLmNtLWVycm9yIHtjb2xvcjogI2YwMDt9CiAuY20taW52YWxpZGNoYXIg
e2NvbG9yOiAjZjAwO30KIAorLkNvZGVNaXJyb3ItY29tcG9zaW5nIHsgYm9yZGVyLWJvdHRvbTog
MnB4IHNvbGlkOyB9CisKKy8qIERlZmF1bHQgc3R5bGVzIGZvciBjb21tb24gYWRkb25zICovCisK
IGRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAj
MGYwO30KIGRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQg
e2NvbG9yOiAjZjIyO30KKy5Db2RlTWlycm9yLW1hdGNoaW5ndGFnIHsgYmFja2dyb3VuZDogcmdi
YSgyNTUsIDE1MCwgMCwgLjMpOyB9CiAuQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQg
e2JhY2tncm91bmQ6ICNlOGYyZmY7fQogCiAvKiBTVE9QICovCkBAIC0xMDksMTQgKzE0MiwxMyBA
QCBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtjb2xv
cjogI2YyMjt9CiAgICB0aGUgZWRpdG9yLiBZb3UgcHJvYmFibHkgc2hvdWxkbid0IHRvdWNoIHRo
ZW0uICovCiAKIC5Db2RlTWlycm9yIHsKLSAgbGluZS1oZWlnaHQ6IDE7CiAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgYmFja2dyb3VuZDogd2hpdGU7Ci0gIGNv
bG9yOiBibGFjazsKIH0KIAogLkNvZGVNaXJyb3Itc2Nyb2xsIHsKKyAgb3ZlcmZsb3c6IHNjcm9s
bCAhaW1wb3J0YW50OyAvKiBUaGluZ3Mgd2lsbCBicmVhayBpZiB0aGlzIGlzIG92ZXJyaWRkZW4g
Ki8KICAgLyogMzBweCBpcyB0aGUgbWFnaWMgbWFyZ2luIHVzZWQgdG8gaGlkZSB0aGUgZWxlbWVu
dCdzIHJlYWwgc2Nyb2xsYmFycyAqLwogICAvKiBTZWUgb3ZlcmZsb3c6IGhpZGRlbiBpbiAuQ29k
ZU1pcnJvciAqLwogICBtYXJnaW4tYm90dG9tOiAtMzBweDsgbWFyZ2luLXJpZ2h0OiAtMzBweDsK
QEAgLTEyNCwxNCArMTU2LDEwIEBAIGRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25t
YXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30KICAgaGVpZ2h0OiAxMDAlOwogICBvdXRsaW5l
OiBub25lOyAvKiBQcmV2ZW50IGRyYWdnaW5nIGZyb20gaGlnaGxpZ2h0aW5nIHRoZSBlbGVtZW50
ICovCiAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJv
eDsKLSAgYm94LXNpemluZzogY29udGVudC1ib3g7CiB9CiAuQ29kZU1pcnJvci1zaXplciB7CiAg
IHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgYm9yZGVyLXJpZ2h0OiAzMHB4IHNvbGlkIHRyYW5zcGFy
ZW50OwotICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwotICBib3gtc2l6aW5nOiBjb250
ZW50LWJveDsKIH0KIAogLyogVGhlIGZha2UsIHZpc2libGUgc2Nyb2xsYmFycy4gVXNlZCB0byBm
b3JjZSByZWRyYXcgZHVyaW5nIHNjcm9sbGluZwpAQCAtMTYxLDI5ICsxODksNDIgQEAgZGl2LkNv
ZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7
fQogCiAuQ29kZU1pcnJvci1ndXR0ZXJzIHsKICAgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAw
OyB0b3A6IDA7Ci0gIHBhZGRpbmctYm90dG9tOiAzMHB4OwogICB6LWluZGV4OiAzOwogfQogLkNv
ZGVNaXJyb3ItZ3V0dGVyIHsKICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgaGVpZ2h0OiAxMDAl
OwotICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwotICBib3gtc2l6aW5nOiBjb250ZW50
LWJveDsKLSAgcGFkZGluZy1ib3R0b206IDMwcHg7Ci0gIG1hcmdpbi1ib3R0b206IC0zMnB4Owog
ICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIG1hcmdpbi1ib3R0b206IC0zMHB4OwogICAvKiBI
YWNrIHRvIG1ha2UgSUU3IGJlaGF2ZSAqLwogICAqem9vbToxOwogICAqZGlzcGxheTppbmxpbmU7
CiB9CisuQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlciB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgei1pbmRleDogNDsKKyAgYmFja2dyb3VuZDogbm9uZSAhaW1wb3J0YW50OworICBib3JkZXI6
IG5vbmUgIWltcG9ydGFudDsKK30KKy5Db2RlTWlycm9yLWd1dHRlci1iYWNrZ3JvdW5kIHsKKyAg
cG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDA7IGJvdHRvbTogMDsKKyAgei1pbmRleDogNDsK
K30KIC5Db2RlTWlycm9yLWd1dHRlci1lbHQgewogICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgIGN1
cnNvcjogZGVmYXVsdDsKICAgei1pbmRleDogNDsKIH0KKy5Db2RlTWlycm9yLWd1dHRlci13cmFw
cGVyIHsKKyAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKKyAgLW1vei11c2VyLXNlbGVjdDog
bm9uZTsKKyAgdXNlci1zZWxlY3Q6IG5vbmU7Cit9CiAKIC5Db2RlTWlycm9yLWxpbmVzIHsKICAg
Y3Vyc29yOiB0ZXh0OworICBtaW4taGVpZ2h0OiAxcHg7IC8qIHByZXZlbnRzIGNvbGxhcHNpbmcg
YmVmb3JlIGZpcnN0IGRyYXcgKi8KIH0KIC5Db2RlTWlycm9yIHByZSB7CiAgIC8qIFJlc2V0IHNv
bWUgc3R5bGVzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgbWlnaHQgaGF2ZSBzZXQgKi8KQEAg
LTIwMCw2ICsyNDEsNyBAQCBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hp
bmdicmFja2V0IHtjb2xvcjogI2YyMjt9CiAgIHotaW5kZXg6IDI7CiAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKICAgb3ZlcmZsb3c6IHZpc2libGU7CisgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xv
cjogdHJhbnNwYXJlbnQ7CiB9CiAuQ29kZU1pcnJvci13cmFwIHByZSB7CiAgIHdvcmQtd3JhcDog
YnJlYWstd29yZDsKQEAgLTIyMSw4ICsyNjMsMTggQEAgZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2Rl
TWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQogCiAuQ29kZU1pcnJvci13
aWRnZXQge30KIAotLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1zY3JvbGwgewotICBvdmVy
Zmxvdy14OiBoaWRkZW47CisuQ29kZU1pcnJvci1jb2RlIHsKKyAgb3V0bGluZTogbm9uZTsKK30K
KworLyogRm9yY2UgY29udGVudC1ib3ggc2l6aW5nIGZvciB0aGUgZWxlbWVudHMgd2hlcmUgd2Ug
ZXhwZWN0IGl0ICovCisuQ29kZU1pcnJvci1zY3JvbGwsCisuQ29kZU1pcnJvci1zaXplciwKKy5D
b2RlTWlycm9yLWd1dHRlciwKKy5Db2RlTWlycm9yLWd1dHRlcnMsCisuQ29kZU1pcnJvci1saW5l
bnVtYmVyIHsKKyAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKyAgYm94LXNpemluZzog
Y29udGVudC1ib3g7CiB9CiAKIC5Db2RlTWlycm9yLW1lYXN1cmUgewpAQCAtMjQzLDcgKzI5NSw3
IEBAIGRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2Nv
bG9yOiAjZjIyO30KIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMgewogICB2aXNpYmlsaXR5OiBoaWRk
ZW47CiAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgei1pbmRleDogMTsKKyAgei1pbmRleDogMzsK
IH0KIC5Db2RlTWlycm9yLWZvY3VzZWQgZGl2LkNvZGVNaXJyb3ItY3Vyc29ycyB7CiAgIHZpc2li
aWxpdHk6IHZpc2libGU7CkBAIC0yNTIsNiArMzA0LDggQEAgZGl2LkNvZGVNaXJyb3ItY3Vyc29y
cyB7CiAuQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNkOWQ5ZDk7IH0KIC5Db2Rl
TWlycm9yLWZvY3VzZWQgLkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDdkNGYw
OyB9CiAuQ29kZU1pcnJvci1jcm9zc2hhaXIgeyBjdXJzb3I6IGNyb3NzaGFpcjsgfQorLkNvZGVN
aXJyb3ItbGluZTo6c2VsZWN0aW9uLCAuQ29kZU1pcnJvci1saW5lID4gc3Bhbjo6c2VsZWN0aW9u
LCAuQ29kZU1pcnJvci1saW5lID4gc3BhbiA+IHNwYW46OnNlbGVjdGlvbiB7IGJhY2tncm91bmQ6
ICNkN2Q0ZjA7IH0KKy5Db2RlTWlycm9yLWxpbmU6Oi1tb3otc2VsZWN0aW9uLCAuQ29kZU1pcnJv
ci1saW5lID4gc3Bhbjo6LW1vei1zZWxlY3Rpb24sIC5Db2RlTWlycm9yLWxpbmUgPiBzcGFuID4g
c3Bhbjo6LW1vei1zZWxlY3Rpb24geyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9CiAKIC5jbS1zZWFy
Y2hpbmcgewogICBiYWNrZ3JvdW5kOiAjZmZhOwpAQCAtMjcwLDMgKzMyNCw5IEBAIGRpdi5Db2Rl
TWlycm9yLWN1cnNvcnMgewogICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgfQogfQorCisvKiBT
ZWUgaXNzdWUgIzI5MDEgKi8KKy5jbS10YWItd3JhcC1oYWNrOmFmdGVyIHsgY29udGVudDogJyc7
IH0KKworLyogSGVscCB1c2VycyB1c2UgbWFya3NlbGVjdGlvbiB0byBzYWZlbHkgc3R5bGUgdGV4
dCBiYWNrZ3JvdW5kICovCitzcGFuLkNvZGVNaXJyb3Itc2VsZWN0ZWR0ZXh0IHsgYmFja2dyb3Vu
ZDogbm9uZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmpzCmluZGV4
IDg2MTJlZDgxMzE2YWM0OTQ2ZDY4ZDcxNThiYjE5NDMzZmVkNGViYWYuLmU5ZTJjMWYzNzU4ZmRm
YTNmNWRlOWFkODk1NDdjNGQ4MDk0ZjAxYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9y
L2NvZGVtaXJyb3IuanMKQEAgLTIzLDE5ICsyMywxNSBAQAogICAvLyBkZXRlY3RlZCBhcmUgZW5h
YmxlZCBiYXNlZCBvbiB1c2VyQWdlbnQgZXRjIHNuaWZmaW5nLgogCiAgIHZhciBnZWNrbyA9IC9n
ZWNrb1wvXGQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICAvLyBpZV91cHRvTiBtZWFu
cyBJbnRlcm5ldCBFeHBsb3JlciB2ZXJzaW9uIE4gb3IgbG93ZXIKICAgdmFyIGllX3VwdG8xMCA9
IC9NU0lFIFxkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwotICB2YXIgaWVfdXB0bzcgPSBp
ZV91cHRvMTAgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PSBudWxsIHx8IGRvY3VtZW50LmRv
Y3VtZW50TW9kZSA8IDgpOwotICB2YXIgaWVfdXB0bzggPSBpZV91cHRvMTAgJiYgKGRvY3VtZW50
LmRvY3VtZW50TW9kZSA9PSBudWxsIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA8IDkpOwotICB2
YXIgaWVfdXB0bzkgPSBpZV91cHRvMTAgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PSBudWxs
IHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA8IDEwKTsKLSAgdmFyIGllXzExdXAgPSAvVHJpZGVu
dFwvKFs3LTldfFxkezIsfSlcLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKKyAgdmFyIGll
XzExdXAgPSAvVHJpZGVudFwvKD86WzctOV18XGR7Mix9KVwuLipydjooXGQrKS8uZXhlYyhuYXZp
Z2F0b3IudXNlckFnZW50KTsKICAgdmFyIGllID0gaWVfdXB0bzEwIHx8IGllXzExdXA7CisgIHZh
ciBpZV92ZXJzaW9uID0gaWUgJiYgKGllX3VwdG8xMCA/IGRvY3VtZW50LmRvY3VtZW50TW9kZSB8
fCA2IDogaWVfMTF1cFsxXSk7CiAgIHZhciB3ZWJraXQgPSAvV2ViS2l0XC8vLnRlc3QobmF2aWdh
dG9yLnVzZXJBZ2VudCk7CiAgIHZhciBxdHdlYmtpdCA9IHdlYmtpdCAmJiAvUXRcL1xkK1wuXGQr
Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogICB2YXIgY2hyb21lID0gL0Nocm9tZVwvLy50
ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogICB2YXIgcHJlc3RvID0gL09wZXJhXC8vLnRlc3Qo
bmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgIHZhciBzYWZhcmkgPSAvQXBwbGUgQ29tcHV0ZXIvLnRl
c3QobmF2aWdhdG9yLnZlbmRvcik7Ci0gIHZhciBraHRtbCA9IC9LSFRNTFwvLy50ZXN0KG5hdmln
YXRvci51c2VyQWdlbnQpOwogICB2YXIgbWFjX2dlTW91bnRhaW5MaW9uID0gL01hYyBPUyBYIDFc
ZFxEKFs4LTldfFxkXGQpXEQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgIHZhciBwaGFu
dG9tID0gL1BoYW50b21KUy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKIApAQCAtNTAsNyAr
NDYsNyBAQAogICBpZiAocHJlc3RvX3ZlcnNpb24gJiYgcHJlc3RvX3ZlcnNpb24gPj0gMTUpIHsg
cHJlc3RvID0gZmFsc2U7IHdlYmtpdCA9IHRydWU7IH0KICAgLy8gU29tZSBicm93c2VycyB1c2Ug
dGhlIHdyb25nIGV2ZW50IHByb3BlcnRpZXMgdG8gc2lnbmFsIGNtZC9jdHJsIG9uIE9TIFgKICAg
dmFyIGZsaXBDdHJsQ21kID0gbWFjICYmIChxdHdlYmtpdCB8fCBwcmVzdG8gJiYgKHByZXN0b192
ZXJzaW9uID09IG51bGwgfHwgcHJlc3RvX3ZlcnNpb24gPCAxMi4xMSkpOwotICB2YXIgY2FwdHVy
ZVJpZ2h0Q2xpY2sgPSBnZWNrbyB8fCAoaWUgJiYgIWllX3VwdG84KTsKKyAgdmFyIGNhcHR1cmVS
aWdodENsaWNrID0gZ2Vja28gfHwgKGllICYmIGllX3ZlcnNpb24gPj0gOSk7CiAKICAgLy8gT3B0
aW1pemUgc29tZSBjb2RlIHdoZW4gdGhlc2UgZmVhdHVyZXMgYXJlIG5vdCB1c2VkLgogICB2YXIg
c2F3UmVhZE9ubHlTcGFucyA9IGZhbHNlLCBzYXdDb2xsYXBzZWRTcGFucyA9IGZhbHNlOwpAQCAt
NjMsNTUgKzU5LDY5IEBACiAgIGZ1bmN0aW9uIENvZGVNaXJyb3IocGxhY2UsIG9wdGlvbnMpIHsK
ICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29kZU1pcnJvcikpIHJldHVybiBuZXcgQ29kZU1p
cnJvcihwbGFjZSwgb3B0aW9ucyk7CiAKLSAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID0gb3B0
aW9ucyB8fCB7fTsKKyAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID0gb3B0aW9ucyA/IGNvcHlP
Ymoob3B0aW9ucykgOiB7fTsKICAgICAvLyBEZXRlcm1pbmUgZWZmZWN0aXZlIG9wdGlvbnMgYmFz
ZWQgb24gZ2l2ZW4gdmFsdWVzIGFuZCBkZWZhdWx0cy4KICAgICBjb3B5T2JqKGRlZmF1bHRzLCBv
cHRpb25zLCBmYWxzZSk7CiAgICAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJzKG9wdGlvbnMpOwog
CiAgICAgdmFyIGRvYyA9IG9wdGlvbnMudmFsdWU7Ci0gICAgaWYgKHR5cGVvZiBkb2MgPT0gInN0
cmluZyIpIGRvYyA9IG5ldyBEb2MoZG9jLCBvcHRpb25zLm1vZGUpOworICAgIGlmICh0eXBlb2Yg
ZG9jID09ICJzdHJpbmciKSBkb2MgPSBuZXcgRG9jKGRvYywgb3B0aW9ucy5tb2RlLCBudWxsLCBv
cHRpb25zLmxpbmVTZXBhcmF0b3IpOwogICAgIHRoaXMuZG9jID0gZG9jOwogCi0gICAgdmFyIGRp
c3BsYXkgPSB0aGlzLmRpc3BsYXkgPSBuZXcgRGlzcGxheShwbGFjZSwgZG9jKTsKKyAgICB2YXIg
aW5wdXQgPSBuZXcgQ29kZU1pcnJvci5pbnB1dFN0eWxlc1tvcHRpb25zLmlucHV0U3R5bGVdKHRo
aXMpOworICAgIHZhciBkaXNwbGF5ID0gdGhpcy5kaXNwbGF5ID0gbmV3IERpc3BsYXkocGxhY2Us
IGRvYywgaW5wdXQpOwogICAgIGRpc3BsYXkud3JhcHBlci5Db2RlTWlycm9yID0gdGhpczsKICAg
ICB1cGRhdGVHdXR0ZXJzKHRoaXMpOwogICAgIHRoZW1lQ2hhbmdlZCh0aGlzKTsKICAgICBpZiAo
b3B0aW9ucy5saW5lV3JhcHBpbmcpCiAgICAgICB0aGlzLmRpc3BsYXkud3JhcHBlci5jbGFzc05h
bWUgKz0gIiBDb2RlTWlycm9yLXdyYXAiOwotICAgIGlmIChvcHRpb25zLmF1dG9mb2N1cyAmJiAh
bW9iaWxlKSBmb2N1c0lucHV0KHRoaXMpOworICAgIGlmIChvcHRpb25zLmF1dG9mb2N1cyAmJiAh
bW9iaWxlKSBkaXNwbGF5LmlucHV0LmZvY3VzKCk7CisgICAgaW5pdFNjcm9sbGJhcnModGhpcyk7
CiAKICAgICB0aGlzLnN0YXRlID0gewogICAgICAga2V5TWFwczogW10sICAvLyBzdG9yZXMgbWFw
cyBhZGRlZCBieSBhZGRLZXlNYXAKICAgICAgIG92ZXJsYXlzOiBbXSwgLy8gaGlnaGxpZ2h0aW5n
IG92ZXJsYXlzLCBhcyBhZGRlZCBieSBhZGRPdmVybGF5CiAgICAgICBtb2RlR2VuOiAwLCAgIC8v
IGJ1bXBlZCB3aGVuIG1vZGUvb3ZlcmxheSBjaGFuZ2VzLCB1c2VkIHRvIGludmFsaWRhdGUgaGln
aGxpZ2h0aW5nIGluZm8KLSAgICAgIG92ZXJ3cml0ZTogZmFsc2UsIGZvY3VzZWQ6IGZhbHNlLAor
ICAgICAgb3ZlcndyaXRlOiBmYWxzZSwKKyAgICAgIGRlbGF5aW5nQmx1ckV2ZW50OiBmYWxzZSwK
KyAgICAgIGZvY3VzZWQ6IGZhbHNlLAogICAgICAgc3VwcHJlc3NFZGl0czogZmFsc2UsIC8vIHVz
ZWQgdG8gZGlzYWJsZSBlZGl0aW5nIGR1cmluZyBrZXkgaGFuZGxlcnMgd2hlbiBpbiByZWFkT25s
eSBtb2RlCi0gICAgICBwYXN0ZUluY29taW5nOiBmYWxzZSwgY3V0SW5jb21pbmc6IGZhbHNlLCAv
LyBoZWxwIHJlY29nbml6ZSBwYXN0ZS9jdXQgZWRpdHMgaW4gcmVhZElucHV0CisgICAgICBwYXN0
ZUluY29taW5nOiBmYWxzZSwgY3V0SW5jb21pbmc6IGZhbHNlLCAvLyBoZWxwIHJlY29nbml6ZSBw
YXN0ZS9jdXQgZWRpdHMgaW4gaW5wdXQucG9sbAogICAgICAgZHJhZ2dpbmdUZXh0OiBmYWxzZSwK
LSAgICAgIGhpZ2hsaWdodDogbmV3IERlbGF5ZWQoKSAvLyBzdG9yZXMgaGlnaGxpZ2h0IHdvcmtl
ciB0aW1lb3V0CisgICAgICBoaWdobGlnaHQ6IG5ldyBEZWxheWVkKCksIC8vIHN0b3JlcyBoaWdo
bGlnaHQgd29ya2VyIHRpbWVvdXQKKyAgICAgIGtleVNlcTogbnVsbCwgIC8vIFVuZmluaXNoZWQg
a2V5IHNlcXVlbmNlCisgICAgICBzcGVjaWFsQ2hhcnM6IG51bGwKICAgICB9OwogCisgICAgdmFy
IGNtID0gdGhpczsKKwogICAgIC8vIE92ZXJyaWRlIG1hZ2ljIHRleHRhcmVhIGNvbnRlbnQgcmVz
dG9yZSB0aGF0IElFIHNvbWV0aW1lcyBkb2VzCiAgICAgLy8gb24gb3VyIGhpZGRlbiB0ZXh0YXJl
YSBvbiByZWxvYWQKLSAgICBpZiAoaWVfdXB0bzEwKSBzZXRUaW1lb3V0KGJpbmQocmVzZXRJbnB1
dCwgdGhpcywgdHJ1ZSksIDIwKTsKKyAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDExKSBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgeyBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KHRydWUpOyB9LCAyMCk7
CiAKICAgICByZWdpc3RlckV2ZW50SGFuZGxlcnModGhpcyk7CiAgICAgZW5zdXJlR2xvYmFsSGFu
ZGxlcnMoKTsKIAotICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgcnVuSW5PcCh0aGlzLCBmdW5jdGlv
bigpIHsKLSAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTsKLSAgICAgIGF0dGFjaERv
YyhjbSwgZG9jKTsKKyAgICBzdGFydE9wZXJhdGlvbih0aGlzKTsKKyAgICB0aGlzLmN1ck9wLmZv
cmNlVXBkYXRlID0gdHJ1ZTsKKyAgICBhdHRhY2hEb2ModGhpcywgZG9jKTsKIAotICAgICAgaWYg
KChvcHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxlKSB8fCBhY3RpdmVFbHQoKSA9PSBkaXNwbGF5
LmlucHV0KQotICAgICAgICBzZXRUaW1lb3V0KGJpbmQob25Gb2N1cywgY20pLCAyMCk7Ci0gICAg
ICBlbHNlCi0gICAgICAgIG9uQmx1cihjbSk7CisgICAgaWYgKChvcHRpb25zLmF1dG9mb2N1cyAm
JiAhbW9iaWxlKSB8fCBjbS5oYXNGb2N1cygpKQorICAgICAgc2V0VGltZW91dChiaW5kKG9uRm9j
dXMsIHRoaXMpLCAyMCk7CisgICAgZWxzZQorICAgICAgb25CbHVyKHRoaXMpOwogCi0gICAgICBm
b3IgKHZhciBvcHQgaW4gb3B0aW9uSGFuZGxlcnMpIGlmIChvcHRpb25IYW5kbGVycy5oYXNPd25Q
cm9wZXJ0eShvcHQpKQotICAgICAgICBvcHRpb25IYW5kbGVyc1tvcHRdKGNtLCBvcHRpb25zW29w
dF0sIEluaXQpOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0SG9va3MubGVuZ3RoOyAr
K2kpIGluaXRIb29rc1tpXShjbSk7Ci0gICAgfSk7CisgICAgZm9yICh2YXIgb3B0IGluIG9wdGlv
bkhhbmRsZXJzKSBpZiAob3B0aW9uSGFuZGxlcnMuaGFzT3duUHJvcGVydHkob3B0KSkKKyAgICAg
IG9wdGlvbkhhbmRsZXJzW29wdF0odGhpcywgb3B0aW9uc1tvcHRdLCBJbml0KTsKKyAgICBtYXli
ZVVwZGF0ZUxpbmVOdW1iZXJXaWR0aCh0aGlzKTsKKyAgICBpZiAob3B0aW9ucy5maW5pc2hJbml0
KSBvcHRpb25zLmZpbmlzaEluaXQodGhpcyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0
SG9va3MubGVuZ3RoOyArK2kpIGluaXRIb29rc1tpXSh0aGlzKTsKKyAgICBlbmRPcGVyYXRpb24o
dGhpcyk7CisgICAgLy8gU3VwcHJlc3Mgb3B0aW1pemVsZWdpYmlsaXR5IGluIFdlYmtpdCwgc2lu
Y2UgaXQgYnJlYWtzIHRleHQKKyAgICAvLyBtZWFzdXJpbmcgb24gbGluZSB3cmFwcGluZyBib3Vu
ZGFyaWVzLgorICAgIGlmICh3ZWJraXQgJiYgb3B0aW9ucy5saW5lV3JhcHBpbmcgJiYKKyAgICAg
ICAgZ2V0Q29tcHV0ZWRTdHlsZShkaXNwbGF5LmxpbmVEaXYpLnRleHRSZW5kZXJpbmcgPT0gIm9w
dGltaXplbGVnaWJpbGl0eSIpCisgICAgICBkaXNwbGF5LmxpbmVEaXYuc3R5bGUudGV4dFJlbmRl
cmluZyA9ICJhdXRvIjsKICAgfQogCiAgIC8vIERJU1BMQVkgQ09OU1RSVUNUT1IKQEAgLTEyMCwz
MiArMTMwLDE3IEBACiAgIC8vIGFuZCBjb250ZW50IGRyYXdpbmcuIEl0IGhvbGRzIHJlZmVyZW5j
ZXMgdG8gRE9NIG5vZGVzIGFuZAogICAvLyBkaXNwbGF5LXJlbGF0ZWQgc3RhdGUuCiAKLSAgZnVu
Y3Rpb24gRGlzcGxheShwbGFjZSwgZG9jKSB7CisgIGZ1bmN0aW9uIERpc3BsYXkocGxhY2UsIGRv
YywgaW5wdXQpIHsKICAgICB2YXIgZCA9IHRoaXM7CisgICAgdGhpcy5pbnB1dCA9IGlucHV0Owog
Ci0gICAgLy8gVGhlIHNlbWloaWRkZW4gdGV4dGFyZWEgdGhhdCBpcyBmb2N1c2VkIHdoZW4gdGhl
IGVkaXRvciBpcwotICAgIC8vIGZvY3VzZWQsIGFuZCByZWNlaXZlcyBpbnB1dC4KLSAgICB2YXIg
aW5wdXQgPSBkLmlucHV0ID0gZWx0KCJ0ZXh0YXJlYSIsIG51bGwsIG51bGwsICJwb3NpdGlvbjog
YWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBvdXRsaW5lOiBu
b25lIik7Ci0gICAgLy8gVGhlIHRleHRhcmVhIGlzIGtlcHQgcG9zaXRpb25lZCBuZWFyIHRoZSBj
dXJzb3IgdG8gcHJldmVudCB0aGUKLSAgICAvLyBmYWN0IHRoYXQgaXQnbGwgYmUgc2Nyb2xsZWQg
aW50byB2aWV3IG9uIGlucHV0IGZyb20gc2Nyb2xsaW5nCi0gICAgLy8gb3VyIGZha2UgY3Vyc29y
IG91dCBvZiB2aWV3LiBPbiB3ZWJraXQsIHdoZW4gd3JhcD1vZmYsIHBhc3RlIGlzCi0gICAgLy8g
dmVyeSBzbG93LiBTbyBtYWtlIHRoZSBhcmVhIHdpZGUgaW5zdGVhZC4KLSAgICBpZiAod2Via2l0
KSBpbnB1dC5zdHlsZS53aWR0aCA9ICIxMDAwcHgiOwotICAgIGVsc2UgaW5wdXQuc2V0QXR0cmli
dXRlKCJ3cmFwIiwgIm9mZiIpOwotICAgIC8vIElmIGJvcmRlcjogMDsgLS0gaU9TIGZhaWxzIHRv
IG9wZW4ga2V5Ym9hcmQgKGlzc3VlICMxMjg3KQotICAgIGlmIChpb3MpIGlucHV0LnN0eWxlLmJv
cmRlciA9ICIxcHggc29saWQgYmxhY2siOwotICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiYXV0b2Nv
cnJlY3QiLCAib2ZmIik7IGlucHV0LnNldEF0dHJpYnV0ZSgiYXV0b2NhcGl0YWxpemUiLCAib2Zm
Iik7IGlucHV0LnNldEF0dHJpYnV0ZSgic3BlbGxjaGVjayIsICJmYWxzZSIpOwotCi0gICAgLy8g
V3JhcHMgYW5kIGhpZGVzIGlucHV0IHRleHRhcmVhCi0gICAgZC5pbnB1dERpdiA9IGVsdCgiZGl2
IiwgW2lucHV0XSwgbnVsbCwgIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsg
d2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iik7Ci0gICAgLy8gVGhlIGZha2Ugc2Nyb2xsYmFyIGVs
ZW1lbnRzLgotICAgIGQuc2Nyb2xsYmFySCA9IGVsdCgiZGl2IiwgW2VsdCgiZGl2IiwgbnVsbCwg
bnVsbCwgImhlaWdodDogMTAwJTsgbWluLWhlaWdodDogMXB4IildLCAiQ29kZU1pcnJvci1oc2Ny
b2xsYmFyIik7Ci0gICAgZC5zY3JvbGxiYXJWID0gZWx0KCJkaXYiLCBbZWx0KCJkaXYiLCBudWxs
LCBudWxsLCAibWluLXdpZHRoOiAxcHgiKV0sICJDb2RlTWlycm9yLXZzY3JvbGxiYXIiKTsKICAg
ICAvLyBDb3ZlcnMgYm90dG9tLXJpZ2h0IHNxdWFyZSB3aGVuIGJvdGggc2Nyb2xsYmFycyBhcmUg
cHJlc2VudC4KICAgICBkLnNjcm9sbGJhckZpbGxlciA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVN
aXJyb3Itc2Nyb2xsYmFyLWZpbGxlciIpOworICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnNldEF0dHJp
YnV0ZSgiY20tbm90LWNvbnRlbnQiLCAidHJ1ZSIpOwogICAgIC8vIENvdmVycyBib3R0b20gb2Yg
Z3V0dGVyIHdoZW4gY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIgaXMgb24KICAgICAvLyBhbmQg
aCBzY3JvbGxiYXIgaXMgcHJlc2VudC4KICAgICBkLmd1dHRlckZpbGxlciA9IGVsdCgiZGl2Iiwg
bnVsbCwgIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciIpOworICAgIGQuZ3V0dGVyRmlsbGVyLnNl
dEF0dHJpYnV0ZSgiY20tbm90LWNvbnRlbnQiLCAidHJ1ZSIpOwogICAgIC8vIFdpbGwgY29udGFp
biB0aGUgYWN0dWFsIGNvZGUsIHBvc2l0aW9uZWQgdG8gY292ZXIgdGhlIHZpZXdwb3J0LgogICAg
IGQubGluZURpdiA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItY29kZSIpOwogICAgIC8v
IEVsZW1lbnRzIGFyZSBhZGRlZCB0byB0aGVzZSB0byByZXByZXNlbnQgc2VsZWN0aW9uIGFuZCBj
dXJzb3JzLgpAQCAtMTYyLDEwICsxNTcsMTEgQEAKICAgICBkLm1vdmVyID0gZWx0KCJkaXYiLCBb
ZWx0KCJkaXYiLCBbZC5saW5lU3BhY2VdLCAiQ29kZU1pcnJvci1saW5lcyIpXSwgbnVsbCwgInBv
c2l0aW9uOiByZWxhdGl2ZSIpOwogICAgIC8vIFNldCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBkb2N1
bWVudCwgYWxsb3dpbmcgc2Nyb2xsaW5nLgogICAgIGQuc2l6ZXIgPSBlbHQoImRpdiIsIFtkLm1v
dmVyXSwgIkNvZGVNaXJyb3Itc2l6ZXIiKTsKKyAgICBkLnNpemVyV2lkdGggPSBudWxsOwogICAg
IC8vIEJlaGF2aW9yIG9mIGVsdHMgd2l0aCBvdmVyZmxvdzogYXV0byBhbmQgcGFkZGluZyBpcwog
ICAgIC8vIGluY29uc2lzdGVudCBhY3Jvc3MgYnJvd3NlcnMuIFRoaXMgaXMgdXNlZCB0byBlbnN1
cmUgdGhlCiAgICAgLy8gc2Nyb2xsYWJsZSBhcmVhIGlzIGJpZyBlbm91Z2guCi0gICAgZC5oZWln
aHRGb3JjZXIgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IGhl
aWdodDogIiArIHNjcm9sbGVyQ3V0T2ZmICsgInB4OyB3aWR0aDogMXB4OyIpOworICAgIGQuaGVp
Z2h0Rm9yY2VyID0gZWx0KCJkaXYiLCBudWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRlOyBo
ZWlnaHQ6ICIgKyBzY3JvbGxlckdhcCArICJweDsgd2lkdGg6IDFweDsiKTsKICAgICAvLyBXaWxs
IGNvbnRhaW4gdGhlIGd1dHRlcnMsIGlmIGFueS4KICAgICBkLmd1dHRlcnMgPSBlbHQoImRpdiIs
IG51bGwsICJDb2RlTWlycm9yLWd1dHRlcnMiKTsKICAgICBkLmxpbmVHdXR0ZXIgPSBudWxsOwpA
QCAtMTczLDU2ICsxNjksNDQgQEAKICAgICBkLnNjcm9sbGVyID0gZWx0KCJkaXYiLCBbZC5zaXpl
ciwgZC5oZWlnaHRGb3JjZXIsIGQuZ3V0dGVyc10sICJDb2RlTWlycm9yLXNjcm9sbCIpOwogICAg
IGQuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsICItMSIpOwogICAgIC8vIFRoZSBl
bGVtZW50IGluIHdoaWNoIHRoZSBlZGl0b3IgbGl2ZXMuCi0gICAgZC53cmFwcGVyID0gZWx0KCJk
aXYiLCBbZC5pbnB1dERpdiwgZC5zY3JvbGxiYXJILCBkLnNjcm9sbGJhclYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZC5zY3JvbGxiYXJGaWxsZXIsIGQuZ3V0dGVyRmlsbGVyLCBkLnNj
cm9sbGVyXSwgIkNvZGVNaXJyb3IiKTsKKyAgICBkLndyYXBwZXIgPSBlbHQoImRpdiIsIFtkLnNj
cm9sbGJhckZpbGxlciwgZC5ndXR0ZXJGaWxsZXIsIGQuc2Nyb2xsZXJdLCAiQ29kZU1pcnJvciIp
OwogCiAgICAgLy8gV29yayBhcm91bmQgSUU3IHotaW5kZXggYnVnIChub3QgcGVyZmVjdCwgaGVu
Y2UgSUU3IG5vdCByZWFsbHkgYmVpbmcgc3VwcG9ydGVkKQotICAgIGlmIChpZV91cHRvNykgeyBk
Lmd1dHRlcnMuc3R5bGUuekluZGV4ID0gLTE7IGQuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0
ID0gMDsgfQotICAgIC8vIE5lZWRlZCB0byBoaWRlIGJpZyBibHVlIGJsaW5raW5nIGN1cnNvciBv
biBNb2JpbGUgU2FmYXJpCi0gICAgaWYgKGlvcykgaW5wdXQuc3R5bGUud2lkdGggPSAiMHB4IjsK
LSAgICBpZiAoIXdlYmtpdCkgZC5zY3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlOwotICAgIC8vIE5l
ZWRlZCB0byBoYW5kbGUgVGFiIGtleSBpbiBLSFRNTAotICAgIGlmIChraHRtbCkgeyBkLmlucHV0
RGl2LnN0eWxlLmhlaWdodCA9ICIxcHgiOyBkLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uID0gImFi
c29sdXRlIjsgfQotICAgIC8vIE5lZWQgdG8gc2V0IGEgbWluaW11bSB3aWR0aCB0byBzZWUgdGhl
IHNjcm9sbGJhciBvbiBJRTcgKGJ1dCBtdXN0IG5vdCBzZXQgaXQgb24gSUU4KS4KLSAgICBpZiAo
aWVfdXB0bzcpIGQuc2Nyb2xsYmFySC5zdHlsZS5taW5IZWlnaHQgPSBkLnNjcm9sbGJhclYuc3R5
bGUubWluV2lkdGggPSAiMThweCI7CisgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA4KSB7IGQu
Z3V0dGVycy5zdHlsZS56SW5kZXggPSAtMTsgZC5zY3JvbGxlci5zdHlsZS5wYWRkaW5nUmlnaHQg
PSAwOyB9CisgICAgaWYgKCF3ZWJraXQgJiYgIShnZWNrbyAmJiBtb2JpbGUpKSBkLnNjcm9sbGVy
LmRyYWdnYWJsZSA9IHRydWU7CiAKLSAgICBpZiAocGxhY2UuYXBwZW5kQ2hpbGQpIHBsYWNlLmFw
cGVuZENoaWxkKGQud3JhcHBlcik7Ci0gICAgZWxzZSBwbGFjZShkLndyYXBwZXIpOworICAgIGlm
IChwbGFjZSkgeworICAgICAgaWYgKHBsYWNlLmFwcGVuZENoaWxkKSBwbGFjZS5hcHBlbmRDaGls
ZChkLndyYXBwZXIpOworICAgICAgZWxzZSBwbGFjZShkLndyYXBwZXIpOworICAgIH0KIAogICAg
IC8vIEN1cnJlbnQgcmVuZGVyZWQgcmFuZ2UgKG1heSBiZSBiaWdnZXIgdGhhbiB0aGUgdmlldyB3
aW5kb3cpLgogICAgIGQudmlld0Zyb20gPSBkLnZpZXdUbyA9IGRvYy5maXJzdDsKKyAgICBkLnJl
cG9ydGVkVmlld0Zyb20gPSBkLnJlcG9ydGVkVmlld1RvID0gZG9jLmZpcnN0OwogICAgIC8vIElu
Zm9ybWF0aW9uIGFib3V0IHRoZSByZW5kZXJlZCBsaW5lcy4KICAgICBkLnZpZXcgPSBbXTsKKyAg
ICBkLnJlbmRlcmVkVmlldyA9IG51bGw7CiAgICAgLy8gSG9sZHMgaW5mbyBhYm91dCBhIHNpbmds
ZSByZW5kZXJlZCBsaW5lIHdoZW4gaXQgd2FzIHJlbmRlcmVkCiAgICAgLy8gZm9yIG1lYXN1cmVt
ZW50LCB3aGlsZSBub3QgaW4gdmlldy4KICAgICBkLmV4dGVybmFsTWVhc3VyZWQgPSBudWxsOwog
ICAgIC8vIEVtcHR5IHNwYWNlIChpbiBwaXhlbHMpIGFib3ZlIHRoZSB2aWV3CiAgICAgZC52aWV3
T2Zmc2V0ID0gMDsKLSAgICBkLmxhc3RTaXplQyA9IDA7CisgICAgZC5sYXN0V3JhcEhlaWdodCA9
IGQubGFzdFdyYXBXaWR0aCA9IDA7CiAgICAgZC51cGRhdGVMaW5lTnVtYmVycyA9IG51bGw7CiAK
KyAgICBkLm5hdGl2ZUJhcldpZHRoID0gZC5iYXJIZWlnaHQgPSBkLmJhcldpZHRoID0gMDsKKyAg
ICBkLnNjcm9sbGJhcnNDbGlwcGVkID0gZmFsc2U7CisKICAgICAvLyBVc2VkIHRvIG9ubHkgcmVz
aXplIHRoZSBsaW5lIG51bWJlciBndXR0ZXIgd2hlbiBuZWNlc3NhcnkgKHdoZW4KICAgICAvLyB0
aGUgYW1vdW50IG9mIGxpbmVzIGNyb3NzZXMgYSBib3VuZGFyeSB0aGF0IG1ha2VzIGl0cyB3aWR0
aCBjaGFuZ2UpCiAgICAgZC5saW5lTnVtV2lkdGggPSBkLmxpbmVOdW1Jbm5lcldpZHRoID0gZC5s
aW5lTnVtQ2hhcnMgPSBudWxsOwotICAgIC8vIFNlZSByZWFkSW5wdXQgYW5kIHJlc2V0SW5wdXQK
LSAgICBkLnByZXZJbnB1dCA9ICIiOwogICAgIC8vIFNldCB0byB0cnVlIHdoZW4gYSBub24taG9y
aXpvbnRhbC1zY3JvbGxpbmcgbGluZSB3aWRnZXQgaXMKICAgICAvLyBhZGRlZC4gQXMgYW4gb3B0
aW1pemF0aW9uLCBsaW5lIHdpZGdldCBhbGlnbmluZyBpcyBza2lwcGVkIHdoZW4KICAgICAvLyB0
aGlzIGlzIGZhbHNlLgogICAgIGQuYWxpZ25XaWRnZXRzID0gZmFsc2U7Ci0gICAgLy8gRmxhZyB0
aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlIGV4cGVjdCBpbnB1dCB0byBhcHBlYXIgcmVhbCBzb29u
Ci0gICAgLy8gbm93IChhZnRlciBzb21lIGV2ZW50IGxpa2UgJ2tleXByZXNzJyBvciAnaW5wdXQn
KSBhbmQgYXJlCi0gICAgLy8gcG9sbGluZyBpbnRlbnNpdmVseS4KLSAgICBkLnBvbGxpbmdGYXN0
ID0gZmFsc2U7Ci0gICAgLy8gU2VsZi1yZXNldHRpbmcgdGltZW91dCBmb3IgdGhlIHBvbGxlcgot
ICAgIGQucG9sbCA9IG5ldyBEZWxheWVkKCk7CiAKICAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQu
Y2FjaGVkVGV4dEhlaWdodCA9IGQuY2FjaGVkUGFkZGluZ0ggPSBudWxsOwogCi0gICAgLy8gVHJh
Y2tzIHdoZW4gcmVzZXRJbnB1dCBoYXMgcHVudGVkIHRvIGp1c3QgcHV0dGluZyBhIHNob3J0Ci0g
ICAgLy8gc3RyaW5nIGludG8gdGhlIHRleHRhcmVhIGluc3RlYWQgb2YgdGhlIGZ1bGwgc2VsZWN0
aW9uLgotICAgIGQuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IGZhbHNlOwotCiAgICAgLy8gVHJhY2tz
IHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIHNvIHRoYXQgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFy
CiAgICAgLy8gY2FuIGJlIGtlcHQgc3RhdGljIHdoZW4gc2Nyb2xsaW5nLgogICAgIGQubWF4TGlu
ZSA9IG51bGw7CkBAIC0yMzgsNiArMjIyLDEwIEBACiAgICAgLy8gVXNlZCB0byB0cmFjayB3aGV0
aGVyIGFueXRoaW5nIGhhcHBlbmVkIHNpbmNlIHRoZSBjb250ZXh0IG1lbnUKICAgICAvLyB3YXMg
b3BlbmVkLgogICAgIGQuc2VsRm9yQ29udGV4dE1lbnUgPSBudWxsOworCisgICAgZC5hY3RpdmVU
b3VjaCA9IG51bGw7CisKKyAgICBpbnB1dC5pbml0KGQpOwogICB9CiAKICAgLy8gU1RBVEUgVVBE
QVRFUwpAQCAtMjY0LDYgKzI1Miw3IEBACiAgICAgaWYgKGNtLm9wdGlvbnMubGluZVdyYXBwaW5n
KSB7CiAgICAgICBhZGRDbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsICJDb2RlTWlycm9yLXdyYXAi
KTsKICAgICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGggPSAiIjsKKyAgICAgIGNt
LmRpc3BsYXkuc2l6ZXJXaWR0aCA9IG51bGw7CiAgICAgfSBlbHNlIHsKICAgICAgIHJtQ2xhc3Mo
Y20uZGlzcGxheS53cmFwcGVyLCAiQ29kZU1pcnJvci13cmFwIik7CiAgICAgICBmaW5kTWF4TGlu
ZShjbSk7CkBAIC0zMDMsMTIgKzI5Miw2IEBACiAgICAgfSk7CiAgIH0KIAotICBmdW5jdGlvbiBr
ZXlNYXBDaGFuZ2VkKGNtKSB7Ci0gICAgdmFyIG1hcCA9IGtleU1hcFtjbS5vcHRpb25zLmtleU1h
cF0sIHN0eWxlID0gbWFwLnN0eWxlOwotICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUg
PSBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLWtleW1hcC1cUysv
ZywgIiIpICsKLSAgICAgIChzdHlsZSA/ICIgY20ta2V5bWFwLSIgKyBzdHlsZSA6ICIiKTsKLSAg
fQotCiAgIGZ1bmN0aW9uIHRoZW1lQ2hhbmdlZChjbSkgewogICAgIGNtLmRpc3BsYXkud3JhcHBl
ci5jbGFzc05hbWUgPSBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNt
LXMtXFMrL2csICIiKSArCiAgICAgICBjbS5vcHRpb25zLnRoZW1lLnJlcGxhY2UoLyhefFxzKVxz
Ki9nLCAiIGNtLXMtIik7CkBAIC0zNDEsNyArMzI0LDYgQEAKICAgZnVuY3Rpb24gdXBkYXRlR3V0
dGVyU3BhY2UoY20pIHsKICAgICB2YXIgd2lkdGggPSBjbS5kaXNwbGF5Lmd1dHRlcnMub2Zmc2V0
V2lkdGg7CiAgICAgY20uZGlzcGxheS5zaXplci5zdHlsZS5tYXJnaW5MZWZ0ID0gd2lkdGggKyAi
cHgiOwotICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFySC5zdHlsZS5sZWZ0ID0gY20ub3B0aW9ucy5m
aXhlZEd1dHRlciA/IHdpZHRoICsgInB4IiA6IDA7CiAgIH0KIAogICAvLyBDb21wdXRlIHRoZSBj
aGFyYWN0ZXIgbGVuZ3RoIG9mIGEgbGluZSwgdGFraW5nIGludG8gYWNjb3VudApAQCAtMzk3LDg3
ICszNzksMTg2IEBACiAgIC8vIFByZXBhcmUgRE9NIHJlYWRzIG5lZWRlZCB0byB1cGRhdGUgdGhl
IHNjcm9sbGJhcnMuIERvbmUgaW4gb25lCiAgIC8vIHNob3QgdG8gbWluaW1pemUgdXBkYXRlL21l
YXN1cmUgcm91bmR0cmlwcy4KICAgZnVuY3Rpb24gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pIHsK
LSAgICB2YXIgc2Nyb2xsID0gY20uZGlzcGxheS5zY3JvbGxlcjsKKyAgICB2YXIgZCA9IGNtLmRp
c3BsYXksIGd1dHRlclcgPSBkLmd1dHRlcnMub2Zmc2V0V2lkdGg7CisgICAgdmFyIGRvY0ggPSBN
YXRoLnJvdW5kKGNtLmRvYy5oZWlnaHQgKyBwYWRkaW5nVmVydChjbS5kaXNwbGF5KSk7CiAgICAg
cmV0dXJuIHsKLSAgICAgIGNsaWVudEhlaWdodDogc2Nyb2xsLmNsaWVudEhlaWdodCwKLSAgICAg
IGJhckhlaWdodDogY20uZGlzcGxheS5zY3JvbGxiYXJWLmNsaWVudEhlaWdodCwKLSAgICAgIHNj
cm9sbFdpZHRoOiBzY3JvbGwuc2Nyb2xsV2lkdGgsIGNsaWVudFdpZHRoOiBzY3JvbGwuY2xpZW50
V2lkdGgsCi0gICAgICBiYXJXaWR0aDogY20uZGlzcGxheS5zY3JvbGxiYXJILmNsaWVudFdpZHRo
LAotICAgICAgZG9jSGVpZ2h0OiBNYXRoLnJvdW5kKGNtLmRvYy5oZWlnaHQgKyBwYWRkaW5nVmVy
dChjbS5kaXNwbGF5KSkKKyAgICAgIGNsaWVudEhlaWdodDogZC5zY3JvbGxlci5jbGllbnRIZWln
aHQsCisgICAgICB2aWV3SGVpZ2h0OiBkLndyYXBwZXIuY2xpZW50SGVpZ2h0LAorICAgICAgc2Ny
b2xsV2lkdGg6IGQuc2Nyb2xsZXIuc2Nyb2xsV2lkdGgsIGNsaWVudFdpZHRoOiBkLnNjcm9sbGVy
LmNsaWVudFdpZHRoLAorICAgICAgdmlld1dpZHRoOiBkLndyYXBwZXIuY2xpZW50V2lkdGgsCisg
ICAgICBiYXJMZWZ0OiBjbS5vcHRpb25zLmZpeGVkR3V0dGVyID8gZ3V0dGVyVyA6IDAsCisgICAg
ICBkb2NIZWlnaHQ6IGRvY0gsCisgICAgICBzY3JvbGxIZWlnaHQ6IGRvY0ggKyBzY3JvbGxHYXAo
Y20pICsgZC5iYXJIZWlnaHQsCisgICAgICBuYXRpdmVCYXJXaWR0aDogZC5uYXRpdmVCYXJXaWR0
aCwKKyAgICAgIGd1dHRlcldpZHRoOiBndXR0ZXJXCiAgICAgfTsKICAgfQogCi0gIC8vIFJlLXN5
bmNocm9uaXplIHRoZSBmYWtlIHNjcm9sbGJhcnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2YgdGhl
Ci0gIC8vIGNvbnRlbnQuCisgIGZ1bmN0aW9uIE5hdGl2ZVNjcm9sbGJhcnMocGxhY2UsIHNjcm9s
bCwgY20pIHsKKyAgICB0aGlzLmNtID0gY207CisgICAgdmFyIHZlcnQgPSB0aGlzLnZlcnQgPSBl
bHQoImRpdiIsIFtlbHQoImRpdiIsIG51bGwsIG51bGwsICJtaW4td2lkdGg6IDFweCIpXSwgIkNv
ZGVNaXJyb3ItdnNjcm9sbGJhciIpOworICAgIHZhciBob3JpeiA9IHRoaXMuaG9yaXogPSBlbHQo
ImRpdiIsIFtlbHQoImRpdiIsIG51bGwsIG51bGwsICJoZWlnaHQ6IDEwMCU7IG1pbi1oZWlnaHQ6
IDFweCIpXSwgIkNvZGVNaXJyb3ItaHNjcm9sbGJhciIpOworICAgIHBsYWNlKHZlcnQpOyBwbGFj
ZShob3Jpeik7CisKKyAgICBvbih2ZXJ0LCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7CisgICAgICBp
ZiAodmVydC5jbGllbnRIZWlnaHQpIHNjcm9sbCh2ZXJ0LnNjcm9sbFRvcCwgInZlcnRpY2FsIik7
CisgICAgfSk7CisgICAgb24oaG9yaXosICJzY3JvbGwiLCBmdW5jdGlvbigpIHsKKyAgICAgIGlm
IChob3Jpei5jbGllbnRXaWR0aCkgc2Nyb2xsKGhvcml6LnNjcm9sbExlZnQsICJob3Jpem9udGFs
Iik7CisgICAgfSk7CisKKyAgICB0aGlzLmNoZWNrZWRPdmVybGF5ID0gZmFsc2U7CisgICAgLy8g
TmVlZCB0byBzZXQgYSBtaW5pbXVtIHdpZHRoIHRvIHNlZSB0aGUgc2Nyb2xsYmFyIG9uIElFNyAo
YnV0IG11c3Qgbm90IHNldCBpdCBvbiBJRTgpLgorICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwg
OCkgdGhpcy5ob3Jpei5zdHlsZS5taW5IZWlnaHQgPSB0aGlzLnZlcnQuc3R5bGUubWluV2lkdGgg
PSAiMThweCI7CisgIH0KKworICBOYXRpdmVTY3JvbGxiYXJzLnByb3RvdHlwZSA9IGNvcHlPYmoo
eworICAgIHVwZGF0ZTogZnVuY3Rpb24obWVhc3VyZSkgeworICAgICAgdmFyIG5lZWRzSCA9IG1l
YXN1cmUuc2Nyb2xsV2lkdGggPiBtZWFzdXJlLmNsaWVudFdpZHRoICsgMTsKKyAgICAgIHZhciBu
ZWVkc1YgPSBtZWFzdXJlLnNjcm9sbEhlaWdodCA+IG1lYXN1cmUuY2xpZW50SGVpZ2h0ICsgMTsK
KyAgICAgIHZhciBzV2lkdGggPSBtZWFzdXJlLm5hdGl2ZUJhcldpZHRoOworCisgICAgICBpZiAo
bmVlZHNWKSB7CisgICAgICAgIHRoaXMudmVydC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAg
ICAgICAgdGhpcy52ZXJ0LnN0eWxlLmJvdHRvbSA9IG5lZWRzSCA/IHNXaWR0aCArICJweCIgOiAi
MCI7CisgICAgICAgIHZhciB0b3RhbEhlaWdodCA9IG1lYXN1cmUudmlld0hlaWdodCAtIChuZWVk
c0ggPyBzV2lkdGggOiAwKTsKKyAgICAgICAgLy8gQSBidWcgaW4gSUU4IGNhbiBjYXVzZSB0aGlz
IHZhbHVlIHRvIGJlIG5lZ2F0aXZlLCBzbyBndWFyZCBpdC4KKyAgICAgICAgdGhpcy52ZXJ0LmZp
cnN0Q2hpbGQuc3R5bGUuaGVpZ2h0ID0KKyAgICAgICAgICBNYXRoLm1heCgwLCBtZWFzdXJlLnNj
cm9sbEhlaWdodCAtIG1lYXN1cmUuY2xpZW50SGVpZ2h0ICsgdG90YWxIZWlnaHQpICsgInB4IjsK
KyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMudmVydC5zdHlsZS5kaXNwbGF5ID0gIiI7Cisg
ICAgICAgIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9ICIwIjsKKyAgICAgIH0K
KworICAgICAgaWYgKG5lZWRzSCkgeworICAgICAgICB0aGlzLmhvcml6LnN0eWxlLmRpc3BsYXkg
PSAiYmxvY2siOworICAgICAgICB0aGlzLmhvcml6LnN0eWxlLnJpZ2h0ID0gbmVlZHNWID8gc1dp
ZHRoICsgInB4IiA6ICIwIjsKKyAgICAgICAgdGhpcy5ob3Jpei5zdHlsZS5sZWZ0ID0gbWVhc3Vy
ZS5iYXJMZWZ0ICsgInB4IjsKKyAgICAgICAgdmFyIHRvdGFsV2lkdGggPSBtZWFzdXJlLnZpZXdX
aWR0aCAtIG1lYXN1cmUuYmFyTGVmdCAtIChuZWVkc1YgPyBzV2lkdGggOiAwKTsKKyAgICAgICAg
dGhpcy5ob3Jpei5maXJzdENoaWxkLnN0eWxlLndpZHRoID0KKyAgICAgICAgICAobWVhc3VyZS5z
Y3JvbGxXaWR0aCAtIG1lYXN1cmUuY2xpZW50V2lkdGggKyB0b3RhbFdpZHRoKSArICJweCI7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLmhvcml6LnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAg
ICAgICAgdGhpcy5ob3Jpei5maXJzdENoaWxkLnN0eWxlLndpZHRoID0gIjAiOworICAgICAgfQor
CisgICAgICBpZiAoIXRoaXMuY2hlY2tlZE92ZXJsYXkgJiYgbWVhc3VyZS5jbGllbnRIZWlnaHQg
PiAwKSB7CisgICAgICAgIGlmIChzV2lkdGggPT0gMCkgdGhpcy5vdmVybGF5SGFjaygpOworICAg
ICAgICB0aGlzLmNoZWNrZWRPdmVybGF5ID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgcmV0dXJu
IHtyaWdodDogbmVlZHNWID8gc1dpZHRoIDogMCwgYm90dG9tOiBuZWVkc0ggPyBzV2lkdGggOiAw
fTsKKyAgICB9LAorICAgIHNldFNjcm9sbExlZnQ6IGZ1bmN0aW9uKHBvcykgeworICAgICAgaWYg
KHRoaXMuaG9yaXouc2Nyb2xsTGVmdCAhPSBwb3MpIHRoaXMuaG9yaXouc2Nyb2xsTGVmdCA9IHBv
czsKKyAgICB9LAorICAgIHNldFNjcm9sbFRvcDogZnVuY3Rpb24ocG9zKSB7CisgICAgICBpZiAo
dGhpcy52ZXJ0LnNjcm9sbFRvcCAhPSBwb3MpIHRoaXMudmVydC5zY3JvbGxUb3AgPSBwb3M7Cisg
ICAgfSwKKyAgICBvdmVybGF5SGFjazogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgdyA9IG1hYyAm
JiAhbWFjX2dlTW91bnRhaW5MaW9uID8gIjEycHgiIDogIjE4cHgiOworICAgICAgdGhpcy5ob3Jp
ei5zdHlsZS5taW5IZWlnaHQgPSB0aGlzLnZlcnQuc3R5bGUubWluV2lkdGggPSB3OworICAgICAg
dmFyIHNlbGYgPSB0aGlzOworICAgICAgdmFyIGJhck1vdXNlRG93biA9IGZ1bmN0aW9uKGUpIHsK
KyAgICAgICAgaWYgKGVfdGFyZ2V0KGUpICE9IHNlbGYudmVydCAmJiBlX3RhcmdldChlKSAhPSBz
ZWxmLmhvcml6KQorICAgICAgICAgIG9wZXJhdGlvbihzZWxmLmNtLCBvbk1vdXNlRG93bikoZSk7
CisgICAgICB9OworICAgICAgb24odGhpcy52ZXJ0LCAibW91c2Vkb3duIiwgYmFyTW91c2VEb3du
KTsKKyAgICAgIG9uKHRoaXMuaG9yaXosICJtb3VzZWRvd24iLCBiYXJNb3VzZURvd24pOworICAg
IH0sCisgICAgY2xlYXI6IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIHBhcmVudCA9IHRoaXMuaG9y
aXoucGFyZW50Tm9kZTsKKyAgICAgIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmhvcml6KTsKKyAg
ICAgIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLnZlcnQpOworICAgIH0KKyAgfSwgTmF0aXZlU2Ny
b2xsYmFycy5wcm90b3R5cGUpOworCisgIGZ1bmN0aW9uIE51bGxTY3JvbGxiYXJzKCkge30KKwor
ICBOdWxsU2Nyb2xsYmFycy5wcm90b3R5cGUgPSBjb3B5T2JqKHsKKyAgICB1cGRhdGU6IGZ1bmN0
aW9uKCkgeyByZXR1cm4ge2JvdHRvbTogMCwgcmlnaHQ6IDB9OyB9LAorICAgIHNldFNjcm9sbExl
ZnQ6IGZ1bmN0aW9uKCkge30sCisgICAgc2V0U2Nyb2xsVG9wOiBmdW5jdGlvbigpIHt9LAorICAg
IGNsZWFyOiBmdW5jdGlvbigpIHt9CisgIH0sIE51bGxTY3JvbGxiYXJzLnByb3RvdHlwZSk7CisK
KyAgQ29kZU1pcnJvci5zY3JvbGxiYXJNb2RlbCA9IHsibmF0aXZlIjogTmF0aXZlU2Nyb2xsYmFy
cywgIm51bGwiOiBOdWxsU2Nyb2xsYmFyc307CisKKyAgZnVuY3Rpb24gaW5pdFNjcm9sbGJhcnMo
Y20pIHsKKyAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJzKSB7CisgICAgICBjbS5kaXNwbGF5
LnNjcm9sbGJhcnMuY2xlYXIoKTsKKyAgICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRk
Q2xhc3MpCisgICAgICAgIHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBjbS5kaXNwbGF5LnNj
cm9sbGJhcnMuYWRkQ2xhc3MpOworICAgIH0KKworICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFycyA9
IG5ldyBDb2RlTWlycm9yLnNjcm9sbGJhck1vZGVsW2NtLm9wdGlvbnMuc2Nyb2xsYmFyU3R5bGVd
KGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgIGNtLmRpc3BsYXkud3JhcHBlci5pbnNlcnRCZWZvcmUo
bm9kZSwgY20uZGlzcGxheS5zY3JvbGxiYXJGaWxsZXIpOworICAgICAgLy8gUHJldmVudCBjbGlj
a3MgaW4gdGhlIHNjcm9sbGJhcnMgZnJvbSBraWxsaW5nIGZvY3VzCisgICAgICBvbihub2RlLCAi
bW91c2Vkb3duIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkKSBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7IH0sIDApOwor
ICAgICAgfSk7CisgICAgICBub2RlLnNldEF0dHJpYnV0ZSgiY20tbm90LWNvbnRlbnQiLCAidHJ1
ZSIpOworICAgIH0sIGZ1bmN0aW9uKHBvcywgYXhpcykgeworICAgICAgaWYgKGF4aXMgPT0gImhv
cml6b250YWwiKSBzZXRTY3JvbGxMZWZ0KGNtLCBwb3MpOworICAgICAgZWxzZSBzZXRTY3JvbGxU
b3AoY20sIHBvcyk7CisgICAgfSwgY20pOworICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGJhcnMu
YWRkQ2xhc3MpCisgICAgICBhZGRDbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsIGNtLmRpc3BsYXku
c2Nyb2xsYmFycy5hZGRDbGFzcyk7CisgIH0KKwogICBmdW5jdGlvbiB1cGRhdGVTY3JvbGxiYXJz
KGNtLCBtZWFzdXJlKSB7CiAgICAgaWYgKCFtZWFzdXJlKSBtZWFzdXJlID0gbWVhc3VyZUZvclNj
cm9sbGJhcnMoY20pOwotICAgIHZhciBkID0gY20uZGlzcGxheTsKLSAgICB2YXIgc2Nyb2xsSGVp
Z2h0ID0gbWVhc3VyZS5kb2NIZWlnaHQgKyBzY3JvbGxlckN1dE9mZjsKLSAgICB2YXIgbmVlZHNI
ID0gbWVhc3VyZS5zY3JvbGxXaWR0aCA+IG1lYXN1cmUuY2xpZW50V2lkdGg7Ci0gICAgdmFyIG5l
ZWRzViA9IHNjcm9sbEhlaWdodCA+IG1lYXN1cmUuY2xpZW50SGVpZ2h0OwotICAgIGlmIChuZWVk
c1YpIHsKLSAgICAgIGQuc2Nyb2xsYmFyVi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICAg
IGQuc2Nyb2xsYmFyVi5zdHlsZS5ib3R0b20gPSBuZWVkc0ggPyBzY3JvbGxiYXJXaWR0aChkLm1l
YXN1cmUpICsgInB4IiA6ICIwIjsKLSAgICAgIC8vIEEgYnVnIGluIElFOCBjYW4gY2F1c2UgdGhp
cyB2YWx1ZSB0byBiZSBuZWdhdGl2ZSwgc28gZ3VhcmQgaXQuCi0gICAgICBkLnNjcm9sbGJhclYu
Zmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQgPQotICAgICAgICBNYXRoLm1heCgwLCBzY3JvbGxIZWln
aHQgLSBtZWFzdXJlLmNsaWVudEhlaWdodCArIChtZWFzdXJlLmJhckhlaWdodCB8fCBkLnNjcm9s
bGJhclYuY2xpZW50SGVpZ2h0KSkgKyAicHgiOwotICAgIH0gZWxzZSB7Ci0gICAgICBkLnNjcm9s
bGJhclYuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgZC5zY3JvbGxiYXJWLmZpcnN0Q2hpbGQu
c3R5bGUuaGVpZ2h0ID0gIjAiOwotICAgIH0KLSAgICBpZiAobmVlZHNIKSB7Ci0gICAgICBkLnNj
cm9sbGJhckguc3R5bGUuZGlzcGxheSA9ICJibG9jayI7Ci0gICAgICBkLnNjcm9sbGJhckguc3R5
bGUucmlnaHQgPSBuZWVkc1YgPyBzY3JvbGxiYXJXaWR0aChkLm1lYXN1cmUpICsgInB4IiA6ICIw
IjsKLSAgICAgIGQuc2Nyb2xsYmFySC5maXJzdENoaWxkLnN0eWxlLndpZHRoID0KLSAgICAgICAg
KG1lYXN1cmUuc2Nyb2xsV2lkdGggLSBtZWFzdXJlLmNsaWVudFdpZHRoICsgKG1lYXN1cmUuYmFy
V2lkdGggfHwgZC5zY3JvbGxiYXJILmNsaWVudFdpZHRoKSkgKyAicHgiOwotICAgIH0gZWxzZSB7
Ci0gICAgICBkLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgZC5zY3JvbGxi
YXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPSAiMCI7CisgICAgdmFyIHN0YXJ0V2lkdGggPSBj
bS5kaXNwbGF5LmJhcldpZHRoLCBzdGFydEhlaWdodCA9IGNtLmRpc3BsYXkuYmFySGVpZ2h0Owor
ICAgIHVwZGF0ZVNjcm9sbGJhcnNJbm5lcihjbSwgbWVhc3VyZSk7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCA0ICYmIHN0YXJ0V2lkdGggIT0gY20uZGlzcGxheS5iYXJXaWR0aCB8fCBzdGFydEhl
aWdodCAhPSBjbS5kaXNwbGF5LmJhckhlaWdodDsgaSsrKSB7CisgICAgICBpZiAoc3RhcnRXaWR0
aCAhPSBjbS5kaXNwbGF5LmJhcldpZHRoICYmIGNtLm9wdGlvbnMubGluZVdyYXBwaW5nKQorICAg
ICAgICB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7CisgICAgICB1cGRhdGVTY3JvbGxiYXJz
SW5uZXIoY20sIG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKSk7CisgICAgICBzdGFydFdpZHRoID0g
Y20uZGlzcGxheS5iYXJXaWR0aDsgc3RhcnRIZWlnaHQgPSBjbS5kaXNwbGF5LmJhckhlaWdodDsK
ICAgICB9Ci0gICAgaWYgKG5lZWRzSCAmJiBuZWVkc1YpIHsKKyAgfQorCisgIC8vIFJlLXN5bmNo
cm9uaXplIHRoZSBmYWtlIHNjcm9sbGJhcnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlCisg
IC8vIGNvbnRlbnQuCisgIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbGJhcnNJbm5lcihjbSwgbWVhc3Vy
ZSkgeworICAgIHZhciBkID0gY20uZGlzcGxheTsKKyAgICB2YXIgc2l6ZXMgPSBkLnNjcm9sbGJh
cnMudXBkYXRlKG1lYXN1cmUpOworCisgICAgZC5zaXplci5zdHlsZS5wYWRkaW5nUmlnaHQgPSAo
ZC5iYXJXaWR0aCA9IHNpemVzLnJpZ2h0KSArICJweCI7CisgICAgZC5zaXplci5zdHlsZS5wYWRk
aW5nQm90dG9tID0gKGQuYmFySGVpZ2h0ID0gc2l6ZXMuYm90dG9tKSArICJweCI7CisKKyAgICBp
ZiAoc2l6ZXMucmlnaHQgJiYgc2l6ZXMuYm90dG9tKSB7CiAgICAgICBkLnNjcm9sbGJhckZpbGxl
ci5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxl
LmhlaWdodCA9IGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLndpZHRoID0gc2Nyb2xsYmFyV2lkdGgo
ZC5tZWFzdXJlKSArICJweCI7CisgICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQg
PSBzaXplcy5ib3R0b20gKyAicHgiOworICAgICAgZC5zY3JvbGxiYXJGaWxsZXIuc3R5bGUud2lk
dGggPSBzaXplcy5yaWdodCArICJweCI7CiAgICAgfSBlbHNlIGQuc2Nyb2xsYmFyRmlsbGVyLnN0
eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBpZiAobmVlZHNIICYmIGNtLm9wdGlvbnMuY292ZXJHdXR0
ZXJOZXh0VG9TY3JvbGxiYXIgJiYgY20ub3B0aW9ucy5maXhlZEd1dHRlcikgeworICAgIGlmIChz
aXplcy5ib3R0b20gJiYgY20ub3B0aW9ucy5jb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciAmJiBj
bS5vcHRpb25zLmZpeGVkR3V0dGVyKSB7CiAgICAgICBkLmd1dHRlckZpbGxlci5zdHlsZS5kaXNw
bGF5ID0gImJsb2NrIjsKLSAgICAgIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmhlaWdodCA9IHNjcm9s
bGJhcldpZHRoKGQubWVhc3VyZSkgKyAicHgiOwotICAgICAgZC5ndXR0ZXJGaWxsZXIuc3R5bGUu
d2lkdGggPSBkLmd1dHRlcnMub2Zmc2V0V2lkdGggKyAicHgiOworICAgICAgZC5ndXR0ZXJGaWxs
ZXIuc3R5bGUuaGVpZ2h0ID0gc2l6ZXMuYm90dG9tICsgInB4IjsKKyAgICAgIGQuZ3V0dGVyRmls
bGVyLnN0eWxlLndpZHRoID0gbWVhc3VyZS5ndXR0ZXJXaWR0aCArICJweCI7CiAgICAgfSBlbHNl
IGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLQotICAgIGlmICghY20uc3RhdGUu
Y2hlY2tlZE92ZXJsYXlTY3JvbGxiYXIgJiYgbWVhc3VyZS5jbGllbnRIZWlnaHQgPiAwKSB7Ci0g
ICAgICBpZiAoc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJlKSA9PT0gMCkgewotICAgICAgICB2YXIg
dyA9IG1hYyAmJiAhbWFjX2dlTW91bnRhaW5MaW9uID8gIjEycHgiIDogIjE4cHgiOwotICAgICAg
ICBkLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGggPSBkLnNjcm9sbGJhckguc3R5bGUubWluSGVp
Z2h0ID0gdzsKLSAgICAgICAgdmFyIGJhck1vdXNlRG93biA9IGZ1bmN0aW9uKGUpIHsKLSAgICAg
ICAgICBpZiAoZV90YXJnZXQoZSkgIT0gZC5zY3JvbGxiYXJWICYmIGVfdGFyZ2V0KGUpICE9IGQu
c2Nyb2xsYmFySCkKLSAgICAgICAgICAgIG9wZXJhdGlvbihjbSwgb25Nb3VzZURvd24pKGUpOwot
ICAgICAgICB9OwotICAgICAgICBvbihkLnNjcm9sbGJhclYsICJtb3VzZWRvd24iLCBiYXJNb3Vz
ZURvd24pOwotICAgICAgICBvbihkLnNjcm9sbGJhckgsICJtb3VzZWRvd24iLCBiYXJNb3VzZURv
d24pOwotICAgICAgfQotICAgICAgY20uc3RhdGUuY2hlY2tlZE92ZXJsYXlTY3JvbGxiYXIgPSB0
cnVlOwotICAgIH0KICAgfQogCiAgIC8vIENvbXB1dGUgdGhlIGxpbmVzIHRoYXQgYXJlIHZpc2li
bGUgaW4gYSBnaXZlbiB2aWV3cG9ydCAoZGVmYXVsdHMKLSAgLy8gdGhlIHRoZSBjdXJyZW50IHNj
cm9sbCBwb3NpdGlvbikuIHZpZXdQb3J0IG1heSBjb250YWluIHRvcCwKKyAgLy8gdGhlIHRoZSBj
dXJyZW50IHNjcm9sbCBwb3NpdGlvbikuIHZpZXdwb3J0IG1heSBjb250YWluIHRvcCwKICAgLy8g
aGVpZ2h0LCBhbmQgZW5zdXJlIChzZWUgb3Auc2Nyb2xsVG9Qb3MpIHByb3BlcnRpZXMuCi0gIGZ1
bmN0aW9uIHZpc2libGVMaW5lcyhkaXNwbGF5LCBkb2MsIHZpZXdQb3J0KSB7Ci0gICAgdmFyIHRv
cCA9IHZpZXdQb3J0ICYmIHZpZXdQb3J0LnRvcCAhPSBudWxsID8gTWF0aC5tYXgoMCwgdmlld1Bv
cnQudG9wKSA6IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wOworICBmdW5jdGlvbiB2aXNpYmxl
TGluZXMoZGlzcGxheSwgZG9jLCB2aWV3cG9ydCkgeworICAgIHZhciB0b3AgPSB2aWV3cG9ydCAm
JiB2aWV3cG9ydC50b3AgIT0gbnVsbCA/IE1hdGgubWF4KDAsIHZpZXdwb3J0LnRvcCkgOiBkaXNw
bGF5LnNjcm9sbGVyLnNjcm9sbFRvcDsKICAgICB0b3AgPSBNYXRoLmZsb29yKHRvcCAtIHBhZGRp
bmdUb3AoZGlzcGxheSkpOwotICAgIHZhciBib3R0b20gPSB2aWV3UG9ydCAmJiB2aWV3UG9ydC5i
b3R0b20gIT0gbnVsbCA/IHZpZXdQb3J0LmJvdHRvbSA6IHRvcCArIGRpc3BsYXkud3JhcHBlci5j
bGllbnRIZWlnaHQ7CisgICAgdmFyIGJvdHRvbSA9IHZpZXdwb3J0ICYmIHZpZXdwb3J0LmJvdHRv
bSAhPSBudWxsID8gdmlld3BvcnQuYm90dG9tIDogdG9wICsgZGlzcGxheS53cmFwcGVyLmNsaWVu
dEhlaWdodDsKIAogICAgIHZhciBmcm9tID0gbGluZUF0SGVpZ2h0KGRvYywgdG9wKSwgdG8gPSBs
aW5lQXRIZWlnaHQoZG9jLCBib3R0b20pOwogICAgIC8vIEVuc3VyZSBpcyBhIHtmcm9tOiB7bGlu
ZSwgY2h9LCB0bzoge2xpbmUsIGNofX0gb2JqZWN0LCBhbmQKICAgICAvLyBmb3JjZXMgdGhvc2Ug
bGluZXMgaW50byB0aGUgdmlld3BvcnQgKGlmIHBvc3NpYmxlKS4KLSAgICBpZiAodmlld1BvcnQg
JiYgdmlld1BvcnQuZW5zdXJlKSB7Ci0gICAgICB2YXIgZW5zdXJlRnJvbSA9IHZpZXdQb3J0LmVu
c3VyZS5mcm9tLmxpbmUsIGVuc3VyZVRvID0gdmlld1BvcnQuZW5zdXJlLnRvLmxpbmU7Ci0gICAg
ICBpZiAoZW5zdXJlRnJvbSA8IGZyb20pCi0gICAgICAgIHJldHVybiB7ZnJvbTogZW5zdXJlRnJv
bSwKLSAgICAgICAgICAgICAgICB0bzogbGluZUF0SGVpZ2h0KGRvYywgaGVpZ2h0QXRMaW5lKGdl
dExpbmUoZG9jLCBlbnN1cmVGcm9tKSkgKyBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0KX07
Ci0gICAgICBpZiAoTWF0aC5taW4oZW5zdXJlVG8sIGRvYy5sYXN0TGluZSgpKSA+PSB0bykKLSAg
ICAgICAgcmV0dXJuIHtmcm9tOiBsaW5lQXRIZWlnaHQoZG9jLCBoZWlnaHRBdExpbmUoZ2V0TGlu
ZShkb2MsIGVuc3VyZVRvKSkgLSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0KSwKLSAgICAg
ICAgICAgICAgICB0bzogZW5zdXJlVG99OworICAgIGlmICh2aWV3cG9ydCAmJiB2aWV3cG9ydC5l
bnN1cmUpIHsKKyAgICAgIHZhciBlbnN1cmVGcm9tID0gdmlld3BvcnQuZW5zdXJlLmZyb20ubGlu
ZSwgZW5zdXJlVG8gPSB2aWV3cG9ydC5lbnN1cmUudG8ubGluZTsKKyAgICAgIGlmIChlbnN1cmVG
cm9tIDwgZnJvbSkgeworICAgICAgICBmcm9tID0gZW5zdXJlRnJvbTsKKyAgICAgICAgdG8gPSBs
aW5lQXRIZWlnaHQoZG9jLCBoZWlnaHRBdExpbmUoZ2V0TGluZShkb2MsIGVuc3VyZUZyb20pKSAr
IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQpOworICAgICAgfSBlbHNlIGlmIChNYXRoLm1p
bihlbnN1cmVUbywgZG9jLmxhc3RMaW5lKCkpID49IHRvKSB7CisgICAgICAgIGZyb20gPSBsaW5l
QXRIZWlnaHQoZG9jLCBoZWlnaHRBdExpbmUoZ2V0TGluZShkb2MsIGVuc3VyZVRvKSkgLSBkaXNw
bGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0KTsKKyAgICAgICAgdG8gPSBlbnN1cmVUbzsKKyAgICAg
IH0KICAgICB9CiAgICAgcmV0dXJuIHtmcm9tOiBmcm9tLCB0bzogTWF0aC5tYXgodG8sIGZyb20g
KyAxKX07CiAgIH0KQEAgLTUxMyw3ICs1OTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJv
ci1ndXR0ZXItZWx0IikpOwogICAgICAgdmFyIGlubmVyVyA9IHRlc3QuZmlyc3RDaGlsZC5vZmZz
ZXRXaWR0aCwgcGFkZGluZyA9IHRlc3Qub2Zmc2V0V2lkdGggLSBpbm5lclc7CiAgICAgICBkaXNw
bGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGggPSAiIjsKLSAgICAgIGRpc3BsYXkubGluZU51bUlu
bmVyV2lkdGggPSBNYXRoLm1heChpbm5lclcsIGRpc3BsYXkubGluZUd1dHRlci5vZmZzZXRXaWR0
aCAtIHBhZGRpbmcpOworICAgICAgZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCA9IE1hdGgubWF4
KGlubmVyVywgZGlzcGxheS5saW5lR3V0dGVyLm9mZnNldFdpZHRoIC0gcGFkZGluZykgKyAxOwog
ICAgICAgZGlzcGxheS5saW5lTnVtV2lkdGggPSBkaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoICsg
cGFkZGluZzsKICAgICAgIGRpc3BsYXkubGluZU51bUNoYXJzID0gZGlzcGxheS5saW5lTnVtSW5u
ZXJXaWR0aCA/IGxhc3QubGVuZ3RoIDogLTE7CiAgICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5
bGUud2lkdGggPSBkaXNwbGF5LmxpbmVOdW1XaWR0aCArICJweCI7CkBAIC01MzYsNzggKzYxNyw2
OCBAQAogCiAgIC8vIERJU1BMQVkgRFJBV0lORwogCi0gIC8vIFVwZGF0ZXMgdGhlIGRpc3BsYXks
IHNlbGVjdGlvbiwgYW5kIHNjcm9sbGJhcnMsIHVzaW5nIHRoZQotICAvLyBpbmZvcm1hdGlvbiBp
biBkaXNwbGF5LnZpZXcgdG8gZmluZCBvdXQgd2hpY2ggbm9kZXMgYXJlIG5vIGxvbmdlcgotICAv
LyB1cC10by1kYXRlLiBUcmllcyB0byBiYWlsIG91dCBlYXJseSB3aGVuIG5vIGNoYW5nZXMgYXJl
IG5lZWRlZCwKLSAgLy8gdW5sZXNzIGZvcmNlZCBpcyB0cnVlLgotICAvLyBSZXR1cm5zIHRydWUg
aWYgYW4gYWN0dWFsIHVwZGF0ZSBoYXBwZW5lZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICBmdW5jdGlv
biB1cGRhdGVEaXNwbGF5KGNtLCB2aWV3UG9ydCwgZm9yY2VkKSB7Ci0gICAgdmFyIG9sZEZyb20g
PSBjbS5kaXNwbGF5LnZpZXdGcm9tLCBvbGRUbyA9IGNtLmRpc3BsYXkudmlld1RvLCB1cGRhdGVk
OwotICAgIHZhciB2aXNpYmxlID0gdmlzaWJsZUxpbmVzKGNtLmRpc3BsYXksIGNtLmRvYywgdmll
d1BvcnQpOwotICAgIGZvciAodmFyIGZpcnN0ID0gdHJ1ZTs7IGZpcnN0ID0gZmFsc2UpIHsKLSAg
ICAgIHZhciBvbGRXaWR0aCA9IGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg7Ci0gICAg
ICBpZiAoIXVwZGF0ZURpc3BsYXlJbm5lcihjbSwgdmlzaWJsZSwgZm9yY2VkKSkgYnJlYWs7Ci0g
ICAgICB1cGRhdGVkID0gdHJ1ZTsKLQotICAgICAgLy8gSWYgdGhlIG1heCBsaW5lIGNoYW5nZWQg
c2luY2UgaXQgd2FzIGxhc3QgbWVhc3VyZWQsIG1lYXN1cmUgaXQsCi0gICAgICAvLyBhbmQgZW5z
dXJlIHRoZSBkb2N1bWVudCdzIHdpZHRoIG1hdGNoZXMgaXQuCi0gICAgICBpZiAoY20uZGlzcGxh
eS5tYXhMaW5lQ2hhbmdlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpCi0gICAgICAgIGFk
anVzdENvbnRlbnRXaWR0aChjbSk7Ci0KLSAgICAgIHZhciBiYXJNZWFzdXJlID0gbWVhc3VyZUZv
clNjcm9sbGJhcnMoY20pOwotICAgICAgdXBkYXRlU2VsZWN0aW9uKGNtKTsKLSAgICAgIHNldERv
Y3VtZW50SGVpZ2h0KGNtLCBiYXJNZWFzdXJlKTsKLSAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoY20s
IGJhck1lYXN1cmUpOwotICAgICAgaWYgKHdlYmtpdCAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGlu
ZykKLSAgICAgICAgY2hlY2tGb3JXZWJraXRXaWR0aEJ1ZyhjbSwgYmFyTWVhc3VyZSk7IC8vIChJ
c3N1ZSAjMjQyMCkKLSAgICAgIGlmIChmaXJzdCAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAm
JiBvbGRXaWR0aCAhPSBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKSB7Ci0gICAgICAg
IGZvcmNlZCA9IHRydWU7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgZm9yY2Vk
ID0gZmFsc2U7CisgIGZ1bmN0aW9uIERpc3BsYXlVcGRhdGUoY20sIHZpZXdwb3J0LCBmb3JjZSkg
eworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKIAotICAgICAgLy8gQ2xpcCBmb3JjZWQg
dmlld3BvcnQgdG8gYWN0dWFsIHNjcm9sbGFibGUgYXJlYS4KLSAgICAgIGlmICh2aWV3UG9ydCAm
JiB2aWV3UG9ydC50b3AgIT0gbnVsbCkKLSAgICAgICAgdmlld1BvcnQgPSB7dG9wOiBNYXRoLm1p
bihiYXJNZWFzdXJlLmRvY0hlaWdodCAtIHNjcm9sbGVyQ3V0T2ZmIC0gYmFyTWVhc3VyZS5jbGll
bnRIZWlnaHQsIHZpZXdQb3J0LnRvcCl9OwotICAgICAgLy8gVXBkYXRlZCBsaW5lIGhlaWdodHMg
bWlnaHQgcmVzdWx0IGluIHRoZSBkcmF3biBhcmVhIG5vdAotICAgICAgLy8gYWN0dWFsbHkgY292
ZXJpbmcgdGhlIHZpZXdwb3J0LiBLZWVwIGxvb3BpbmcgdW50aWwgaXQgZG9lcy4KLSAgICAgIHZp
c2libGUgPSB2aXNpYmxlTGluZXMoY20uZGlzcGxheSwgY20uZG9jLCB2aWV3UG9ydCk7Ci0gICAg
ICBpZiAodmlzaWJsZS5mcm9tID49IGNtLmRpc3BsYXkudmlld0Zyb20gJiYgdmlzaWJsZS50byA8
PSBjbS5kaXNwbGF5LnZpZXdUbykKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHRoaXMudmll
d3BvcnQgPSB2aWV3cG9ydDsKKyAgICAvLyBTdG9yZSBzb21lIHZhbHVlcyB0aGF0IHdlJ2xsIG5l
ZWQgbGF0ZXIgKGJ1dCBkb24ndCB3YW50IHRvIGZvcmNlIGEgcmVsYXlvdXQgZm9yKQorICAgIHRo
aXMudmlzaWJsZSA9IHZpc2libGVMaW5lcyhkaXNwbGF5LCBjbS5kb2MsIHZpZXdwb3J0KTsKKyAg
ICB0aGlzLmVkaXRvcklzSGlkZGVuID0gIWRpc3BsYXkud3JhcHBlci5vZmZzZXRXaWR0aDsKKyAg
ICB0aGlzLndyYXBwZXJIZWlnaHQgPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OworICAg
IHRoaXMud3JhcHBlcldpZHRoID0gZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoOworICAgIHRo
aXMub2xkRGlzcGxheVdpZHRoID0gZGlzcGxheVdpZHRoKGNtKTsKKyAgICB0aGlzLmZvcmNlID0g
Zm9yY2U7CisgICAgdGhpcy5kaW1zID0gZ2V0RGltZW5zaW9ucyhjbSk7CisgICAgdGhpcy5ldmVu
dHMgPSBbXTsKKyAgfQorCisgIERpc3BsYXlVcGRhdGUucHJvdG90eXBlLnNpZ25hbCA9IGZ1bmN0
aW9uKGVtaXR0ZXIsIHR5cGUpIHsKKyAgICBpZiAoaGFzSGFuZGxlcihlbWl0dGVyLCB0eXBlKSkK
KyAgICAgIHRoaXMuZXZlbnRzLnB1c2goYXJndW1lbnRzKTsKKyAgfTsKKyAgRGlzcGxheVVwZGF0
ZS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0aGlzLmV2ZW50cy5sZW5ndGg7IGkrKykKKyAgICAgIHNpZ25hbC5hcHBseShudWxsLCB0aGlz
LmV2ZW50c1tpXSk7CisgIH07CiAKLSAgICBjbS5kaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID0g
bnVsbDsKLSAgICBpZiAodXBkYXRlZCkgewotICAgICAgc2lnbmFsTGF0ZXIoY20sICJ1cGRhdGUi
LCBjbSk7Ci0gICAgICBpZiAoY20uZGlzcGxheS52aWV3RnJvbSAhPSBvbGRGcm9tIHx8IGNtLmRp
c3BsYXkudmlld1RvICE9IG9sZFRvKQotICAgICAgICBzaWduYWxMYXRlcihjbSwgInZpZXdwb3J0
Q2hhbmdlIiwgY20sIGNtLmRpc3BsYXkudmlld0Zyb20sIGNtLmRpc3BsYXkudmlld1RvKTsKKyAg
ZnVuY3Rpb24gbWF5YmVDbGlwU2Nyb2xsYmFycyhjbSkgeworICAgIHZhciBkaXNwbGF5ID0gY20u
ZGlzcGxheTsKKyAgICBpZiAoIWRpc3BsYXkuc2Nyb2xsYmFyc0NsaXBwZWQgJiYgZGlzcGxheS5z
Y3JvbGxlci5vZmZzZXRXaWR0aCkgeworICAgICAgZGlzcGxheS5uYXRpdmVCYXJXaWR0aCA9IGRp
c3BsYXkuc2Nyb2xsZXIub2Zmc2V0V2lkdGggLSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRo
OworICAgICAgZGlzcGxheS5oZWlnaHRGb3JjZXIuc3R5bGUuaGVpZ2h0ID0gc2Nyb2xsR2FwKGNt
KSArICJweCI7CisgICAgICBkaXNwbGF5LnNpemVyLnN0eWxlLm1hcmdpbkJvdHRvbSA9IC1kaXNw
bGF5Lm5hdGl2ZUJhcldpZHRoICsgInB4IjsKKyAgICAgIGRpc3BsYXkuc2l6ZXIuc3R5bGUuYm9y
ZGVyUmlnaHRXaWR0aCA9IHNjcm9sbEdhcChjbSkgKyAicHgiOworICAgICAgZGlzcGxheS5zY3Jv
bGxiYXJzQ2xpcHBlZCA9IHRydWU7CiAgICAgfQotICAgIHJldHVybiB1cGRhdGVkOwogICB9CiAK
ICAgLy8gRG9lcyB0aGUgYWN0dWFsIHVwZGF0aW5nIG9mIHRoZSBsaW5lIGRpc3BsYXkuIEJhaWxz
IG91dAogICAvLyAocmV0dXJuaW5nIGZhbHNlKSB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gYmUg
ZG9uZSBhbmQgZm9yY2VkIGlzCiAgIC8vIGZhbHNlLgotICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5
SW5uZXIoY20sIHZpc2libGUsIGZvcmNlZCkgeworICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5SWZO
ZWVkZWQoY20sIHVwZGF0ZSkgewogICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0g
Y20uZG9jOwotICAgIGlmICghZGlzcGxheS53cmFwcGVyLm9mZnNldFdpZHRoKSB7CisKKyAgICBp
ZiAodXBkYXRlLmVkaXRvcklzSGlkZGVuKSB7CiAgICAgICByZXNldFZpZXcoY20pOwotICAgICAg
cmV0dXJuOworICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIEJhaWwgb3V0IGlm
IHRoZSB2aXNpYmxlIGFyZWEgaXMgYWxyZWFkeSByZW5kZXJlZCBhbmQgbm90aGluZyBjaGFuZ2Vk
LgotICAgIGlmICghZm9yY2VkICYmIHZpc2libGUuZnJvbSA+PSBkaXNwbGF5LnZpZXdGcm9tICYm
IHZpc2libGUudG8gPD0gZGlzcGxheS52aWV3VG8gJiYKLSAgICAgICAgY291bnREaXJ0eVZpZXco
Y20pID09IDApCi0gICAgICByZXR1cm47CisgICAgaWYgKCF1cGRhdGUuZm9yY2UgJiYKKyAgICAg
ICAgdXBkYXRlLnZpc2libGUuZnJvbSA+PSBkaXNwbGF5LnZpZXdGcm9tICYmIHVwZGF0ZS52aXNp
YmxlLnRvIDw9IGRpc3BsYXkudmlld1RvICYmCisgICAgICAgIChkaXNwbGF5LnVwZGF0ZUxpbmVO
dW1iZXJzID09IG51bGwgfHwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA+PSBkaXNwbGF5LnZp
ZXdUbykgJiYKKyAgICAgICAgZGlzcGxheS5yZW5kZXJlZFZpZXcgPT0gZGlzcGxheS52aWV3ICYm
IGNvdW50RGlydHlWaWV3KGNtKSA9PSAwKQorICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KG1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoKGNtKSkKKyAgICBpZiAobWF5YmVVcGRhdGVMaW5l
TnVtYmVyV2lkdGgoY20pKSB7CiAgICAgICByZXNldFZpZXcoY20pOwotICAgIHZhciBkaW1zID0g
Z2V0RGltZW5zaW9ucyhjbSk7CisgICAgICB1cGRhdGUuZGltcyA9IGdldERpbWVuc2lvbnMoY20p
OworICAgIH0KIAogICAgIC8vIENvbXB1dGUgYSBzdWl0YWJsZSBuZXcgdmlld3BvcnQgKGZyb20g
JiB0bykKICAgICB2YXIgZW5kID0gZG9jLmZpcnN0ICsgZG9jLnNpemU7Ci0gICAgdmFyIGZyb20g
PSBNYXRoLm1heCh2aXNpYmxlLmZyb20gLSBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luLCBkb2Mu
Zmlyc3QpOwotICAgIHZhciB0byA9IE1hdGgubWluKGVuZCwgdmlzaWJsZS50byArIGNtLm9wdGlv
bnMudmlld3BvcnRNYXJnaW4pOworICAgIHZhciBmcm9tID0gTWF0aC5tYXgodXBkYXRlLnZpc2li
bGUuZnJvbSAtIGNtLm9wdGlvbnMudmlld3BvcnRNYXJnaW4sIGRvYy5maXJzdCk7CisgICAgdmFy
IHRvID0gTWF0aC5taW4oZW5kLCB1cGRhdGUudmlzaWJsZS50byArIGNtLm9wdGlvbnMudmlld3Bv
cnRNYXJnaW4pOwogICAgIGlmIChkaXNwbGF5LnZpZXdGcm9tIDwgZnJvbSAmJiBmcm9tIC0gZGlz
cGxheS52aWV3RnJvbSA8IDIwKSBmcm9tID0gTWF0aC5tYXgoZG9jLmZpcnN0LCBkaXNwbGF5LnZp
ZXdGcm9tKTsKICAgICBpZiAoZGlzcGxheS52aWV3VG8gPiB0byAmJiBkaXNwbGF5LnZpZXdUbyAt
IHRvIDwgMjApIHRvID0gTWF0aC5taW4oZW5kLCBkaXNwbGF5LnZpZXdUbyk7CiAgICAgaWYgKHNh
d0NvbGxhcHNlZFNwYW5zKSB7CkBAIC02MTYsNyArNjg3LDcgQEAKICAgICB9CiAKICAgICB2YXIg
ZGlmZmVyZW50ID0gZnJvbSAhPSBkaXNwbGF5LnZpZXdGcm9tIHx8IHRvICE9IGRpc3BsYXkudmll
d1RvIHx8Ci0gICAgICBkaXNwbGF5Lmxhc3RTaXplQyAhPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50
SGVpZ2h0OworICAgICAgZGlzcGxheS5sYXN0V3JhcEhlaWdodCAhPSB1cGRhdGUud3JhcHBlckhl
aWdodCB8fCBkaXNwbGF5Lmxhc3RXcmFwV2lkdGggIT0gdXBkYXRlLndyYXBwZXJXaWR0aDsKICAg
ICBhZGp1c3RWaWV3KGNtLCBmcm9tLCB0byk7CiAKICAgICBkaXNwbGF5LnZpZXdPZmZzZXQgPSBo
ZWlnaHRBdExpbmUoZ2V0TGluZShjbS5kb2MsIGRpc3BsYXkudmlld0Zyb20pKTsKQEAgLTYyNCw1
OCArNjk1LDg2IEBACiAgICAgY20uZGlzcGxheS5tb3Zlci5zdHlsZS50b3AgPSBkaXNwbGF5LnZp
ZXdPZmZzZXQgKyAicHgiOwogCiAgICAgdmFyIHRvVXBkYXRlID0gY291bnREaXJ0eVZpZXcoY20p
OwotICAgIGlmICghZGlmZmVyZW50ICYmIHRvVXBkYXRlID09IDAgJiYgIWZvcmNlZCkgcmV0dXJu
OworICAgIGlmICghZGlmZmVyZW50ICYmIHRvVXBkYXRlID09IDAgJiYgIXVwZGF0ZS5mb3JjZSAm
JiBkaXNwbGF5LnJlbmRlcmVkVmlldyA9PSBkaXNwbGF5LnZpZXcgJiYKKyAgICAgICAgKGRpc3Bs
YXkudXBkYXRlTGluZU51bWJlcnMgPT0gbnVsbCB8fCBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJz
ID49IGRpc3BsYXkudmlld1RvKSkKKyAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZvciBi
aWcgY2hhbmdlcywgd2UgaGlkZSB0aGUgZW5jbG9zaW5nIGVsZW1lbnQgZHVyaW5nIHRoZQogICAg
IC8vIHVwZGF0ZSwgc2luY2UgdGhhdCBzcGVlZHMgdXAgdGhlIG9wZXJhdGlvbnMgb24gbW9zdCBi
cm93c2Vycy4KICAgICB2YXIgZm9jdXNlZCA9IGFjdGl2ZUVsdCgpOwogICAgIGlmICh0b1VwZGF0
ZSA+IDQpIGRpc3BsYXkubGluZURpdi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIHBhdGNo
RGlzcGxheShjbSwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycywgZGltcyk7CisgICAgcGF0Y2hE
aXNwbGF5KGNtLCBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzLCB1cGRhdGUuZGltcyk7CiAgICAg
aWYgKHRvVXBkYXRlID4gNCkgZGlzcGxheS5saW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAg
ICBkaXNwbGF5LnJlbmRlcmVkVmlldyA9IGRpc3BsYXkudmlldzsKICAgICAvLyBUaGVyZSBtaWdo
dCBoYXZlIGJlZW4gYSB3aWRnZXQgd2l0aCBhIGZvY3VzZWQgZWxlbWVudCB0aGF0IGdvdAogICAg
IC8vIGhpZGRlbiBvciB1cGRhdGVkLCBpZiBzbyByZS1mb2N1cyBpdC4KICAgICBpZiAoZm9jdXNl
ZCAmJiBhY3RpdmVFbHQoKSAhPSBmb2N1c2VkICYmIGZvY3VzZWQub2Zmc2V0SGVpZ2h0KSBmb2N1
c2VkLmZvY3VzKCk7CiAKICAgICAvLyBQcmV2ZW50IHNlbGVjdGlvbiBhbmQgY3Vyc29ycyBmcm9t
IGludGVyZmVyaW5nIHdpdGggdGhlIHNjcm9sbAotICAgIC8vIHdpZHRoLgorICAgIC8vIHdpZHRo
IGFuZCBoZWlnaHQuCiAgICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxheS5jdXJzb3JEaXYpOwogICAg
IHJlbW92ZUNoaWxkcmVuKGRpc3BsYXkuc2VsZWN0aW9uRGl2KTsKKyAgICBkaXNwbGF5Lmd1dHRl
cnMuc3R5bGUuaGVpZ2h0ID0gZGlzcGxheS5zaXplci5zdHlsZS5taW5IZWlnaHQgPSAwOwogCiAg
ICAgaWYgKGRpZmZlcmVudCkgewotICAgICAgZGlzcGxheS5sYXN0U2l6ZUMgPSBkaXNwbGF5Lndy
YXBwZXIuY2xpZW50SGVpZ2h0OworICAgICAgZGlzcGxheS5sYXN0V3JhcEhlaWdodCA9IHVwZGF0
ZS53cmFwcGVySGVpZ2h0OworICAgICAgZGlzcGxheS5sYXN0V3JhcFdpZHRoID0gdXBkYXRlLndy
YXBwZXJXaWR0aDsKICAgICAgIHN0YXJ0V29ya2VyKGNtLCA0MDApOwogICAgIH0KIAotICAgIHVw
ZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNtKTsKKyAgICBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJz
ID0gbnVsbDsKIAogICAgIHJldHVybiB0cnVlOwogICB9CiAKLSAgZnVuY3Rpb24gYWRqdXN0Q29u
dGVudFdpZHRoKGNtKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAgIHZhciB3
aWR0aCA9IG1lYXN1cmVDaGFyKGNtLCBkaXNwbGF5Lm1heExpbmUsIGRpc3BsYXkubWF4TGluZS50
ZXh0Lmxlbmd0aCkubGVmdDsKLSAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gZmFsc2U7Ci0g
ICAgdmFyIG1pbldpZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggKyAzKTsKLSAgICB2YXIgbWF4U2Ny
b2xsTGVmdCA9IE1hdGgubWF4KDAsIGRpc3BsYXkuc2l6ZXIub2Zmc2V0TGVmdCArIG1pbldpZHRo
ICsgc2Nyb2xsZXJDdXRPZmYgLSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKTsKLSAgICBk
aXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gbWluV2lkdGggKyAicHgiOwotICAgIGlmICht
YXhTY3JvbGxMZWZ0IDwgY20uZG9jLnNjcm9sbExlZnQpCi0gICAgICBzZXRTY3JvbGxMZWZ0KGNt
LCBNYXRoLm1pbihkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQsIG1heFNjcm9sbExlZnQpLCB0
cnVlKTsKLSAgfQorICBmdW5jdGlvbiBwb3N0VXBkYXRlRGlzcGxheShjbSwgdXBkYXRlKSB7Cisg
ICAgdmFyIHZpZXdwb3J0ID0gdXBkYXRlLnZpZXdwb3J0OworICAgIGZvciAodmFyIGZpcnN0ID0g
dHJ1ZTs7IGZpcnN0ID0gZmFsc2UpIHsKKyAgICAgIGlmICghZmlyc3QgfHwgIWNtLm9wdGlvbnMu
bGluZVdyYXBwaW5nIHx8IHVwZGF0ZS5vbGREaXNwbGF5V2lkdGggPT0gZGlzcGxheVdpZHRoKGNt
KSkgeworICAgICAgICAvLyBDbGlwIGZvcmNlZCB2aWV3cG9ydCB0byBhY3R1YWwgc2Nyb2xsYWJs
ZSBhcmVhLgorICAgICAgICBpZiAodmlld3BvcnQgJiYgdmlld3BvcnQudG9wICE9IG51bGwpCisg
ICAgICAgICAgdmlld3BvcnQgPSB7dG9wOiBNYXRoLm1pbihjbS5kb2MuaGVpZ2h0ICsgcGFkZGlu
Z1ZlcnQoY20uZGlzcGxheSkgLSBkaXNwbGF5SGVpZ2h0KGNtKSwgdmlld3BvcnQudG9wKX07Cisg
ICAgICAgIC8vIFVwZGF0ZWQgbGluZSBoZWlnaHRzIG1pZ2h0IHJlc3VsdCBpbiB0aGUgZHJhd24g
YXJlYSBub3QKKyAgICAgICAgLy8gYWN0dWFsbHkgY292ZXJpbmcgdGhlIHZpZXdwb3J0LiBLZWVw
IGxvb3BpbmcgdW50aWwgaXQgZG9lcy4KKyAgICAgICAgdXBkYXRlLnZpc2libGUgPSB2aXNpYmxl
TGluZXMoY20uZGlzcGxheSwgY20uZG9jLCB2aWV3cG9ydCk7CisgICAgICAgIGlmICh1cGRhdGUu
dmlzaWJsZS5mcm9tID49IGNtLmRpc3BsYXkudmlld0Zyb20gJiYgdXBkYXRlLnZpc2libGUudG8g
PD0gY20uZGlzcGxheS52aWV3VG8pCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBp
ZiAoIXVwZGF0ZURpc3BsYXlJZk5lZWRlZChjbSwgdXBkYXRlKSkgYnJlYWs7CisgICAgICB1cGRh
dGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7CisgICAgICB2YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVG
b3JTY3JvbGxiYXJzKGNtKTsKKyAgICAgIHVwZGF0ZVNlbGVjdGlvbihjbSk7CisgICAgICBzZXRE
b2N1bWVudEhlaWdodChjbSwgYmFyTWVhc3VyZSk7CisgICAgICB1cGRhdGVTY3JvbGxiYXJzKGNt
LCBiYXJNZWFzdXJlKTsKKyAgICB9CiAKLSAgZnVuY3Rpb24gc2V0RG9jdW1lbnRIZWlnaHQoY20s
IG1lYXN1cmUpIHsKLSAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IGNtLmRp
c3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcCA9IG1lYXN1cmUuZG9jSGVpZ2h0ICsgInB4IjsK
LSAgICBjbS5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0gTWF0aC5tYXgobWVhc3VyZS5k
b2NIZWlnaHQsIG1lYXN1cmUuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYpICsgInB4IjsK
KyAgICB1cGRhdGUuc2lnbmFsKGNtLCAidXBkYXRlIiwgY20pOworICAgIGlmIChjbS5kaXNwbGF5
LnZpZXdGcm9tICE9IGNtLmRpc3BsYXkucmVwb3J0ZWRWaWV3RnJvbSB8fCBjbS5kaXNwbGF5LnZp
ZXdUbyAhPSBjbS5kaXNwbGF5LnJlcG9ydGVkVmlld1RvKSB7CisgICAgICB1cGRhdGUuc2lnbmFs
KGNtLCAidmlld3BvcnRDaGFuZ2UiLCBjbSwgY20uZGlzcGxheS52aWV3RnJvbSwgY20uZGlzcGxh
eS52aWV3VG8pOworICAgICAgY20uZGlzcGxheS5yZXBvcnRlZFZpZXdGcm9tID0gY20uZGlzcGxh
eS52aWV3RnJvbTsgY20uZGlzcGxheS5yZXBvcnRlZFZpZXdUbyA9IGNtLmRpc3BsYXkudmlld1Rv
OworICAgIH0KICAgfQogCi0gIGZ1bmN0aW9uIGNoZWNrRm9yV2Via2l0V2lkdGhCdWcoY20sIG1l
YXN1cmUpIHsKLSAgICAvLyBXb3JrIGFyb3VuZCBXZWJraXQgYnVnIHdoZXJlIGl0IHNvbWV0aW1l
cyByZXNlcnZlcyBzcGFjZSBmb3IgYQotICAgIC8vIG5vbi1leGlzdGluZyBwaGFudG9tIHNjcm9s
bGJhciBpbiB0aGUgc2Nyb2xsZXIgKElzc3VlICMyNDIwKQotICAgIGlmIChjbS5kaXNwbGF5LnNp
emVyLm9mZnNldFdpZHRoICsgY20uZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoIDwgY20uZGlz
cGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCAtIDEpIHsKLSAgICAgIGNtLmRpc3BsYXkuc2l6ZXIu
c3R5bGUubWluSGVpZ2h0ID0gY20uZGlzcGxheS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wID0gIjBw
eCI7Ci0gICAgICBjbS5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0gbWVhc3VyZS5kb2NI
ZWlnaHQgKyAicHgiOworICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5U2ltcGxlKGNtLCB2aWV3cG9y
dCkgeworICAgIHZhciB1cGRhdGUgPSBuZXcgRGlzcGxheVVwZGF0ZShjbSwgdmlld3BvcnQpOwor
ICAgIGlmICh1cGRhdGVEaXNwbGF5SWZOZWVkZWQoY20sIHVwZGF0ZSkpIHsKKyAgICAgIHVwZGF0
ZUhlaWdodHNJblZpZXdwb3J0KGNtKTsKKyAgICAgIHBvc3RVcGRhdGVEaXNwbGF5KGNtLCB1cGRh
dGUpOworICAgICAgdmFyIGJhck1lYXN1cmUgPSBtZWFzdXJlRm9yU2Nyb2xsYmFycyhjbSk7Cisg
ICAgICB1cGRhdGVTZWxlY3Rpb24oY20pOworICAgICAgc2V0RG9jdW1lbnRIZWlnaHQoY20sIGJh
ck1lYXN1cmUpOworICAgICAgdXBkYXRlU2Nyb2xsYmFycyhjbSwgYmFyTWVhc3VyZSk7CisgICAg
ICB1cGRhdGUuZmluaXNoKCk7CiAgICAgfQogICB9CiAKKyAgZnVuY3Rpb24gc2V0RG9jdW1lbnRI
ZWlnaHQoY20sIG1lYXN1cmUpIHsKKyAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbkhlaWdo
dCA9IG1lYXN1cmUuZG9jSGVpZ2h0ICsgInB4IjsKKyAgICB2YXIgdG90YWwgPSBtZWFzdXJlLmRv
Y0hlaWdodCArIGNtLmRpc3BsYXkuYmFySGVpZ2h0OworICAgIGNtLmRpc3BsYXkuaGVpZ2h0Rm9y
Y2VyLnN0eWxlLnRvcCA9IHRvdGFsICsgInB4IjsKKyAgICBjbS5kaXNwbGF5Lmd1dHRlcnMuc3R5
bGUuaGVpZ2h0ID0gTWF0aC5tYXgodG90YWwgKyBzY3JvbGxHYXAoY20pLCBtZWFzdXJlLmNsaWVu
dEhlaWdodCkgKyAicHgiOworICB9CisKICAgLy8gUmVhZCB0aGUgYWN0dWFsIGhlaWdodHMgb2Yg
dGhlIHJlbmRlcmVkIGxpbmVzLCBhbmQgdXBkYXRlIHRoZWlyCiAgIC8vIHN0b3JlZCBoZWlnaHRz
IHRvIG1hdGNoLgogICBmdW5jdGlvbiB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSkgewpAQCAt
Njg0LDcgKzc4Myw3IEBACiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwbGF5LnZpZXcubGVu
Z3RoOyBpKyspIHsKICAgICAgIHZhciBjdXIgPSBkaXNwbGF5LnZpZXdbaV0sIGhlaWdodDsKICAg
ICAgIGlmIChjdXIuaGlkZGVuKSBjb250aW51ZTsKLSAgICAgIGlmIChpZV91cHRvNykgeworICAg
ICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA4KSB7CiAgICAgICAgIHZhciBib3QgPSBjdXIubm9k
ZS5vZmZzZXRUb3AgKyBjdXIubm9kZS5vZmZzZXRIZWlnaHQ7CiAgICAgICAgIGhlaWdodCA9IGJv
dCAtIHByZXZCb3R0b207CiAgICAgICAgIHByZXZCb3R0b20gPSBib3Q7CkBAIC03MTQsOSArODEz
LDEwIEBACiAgIC8vIHZpZXcsIHNvIHRoYXQgd2UgZG9uJ3QgaW50ZXJsZWF2ZSByZWFkaW5nIGFu
ZCB3cml0aW5nIHRvIHRoZSBET00uCiAgIGZ1bmN0aW9uIGdldERpbWVuc2lvbnMoY20pIHsKICAg
ICB2YXIgZCA9IGNtLmRpc3BsYXksIGxlZnQgPSB7fSwgd2lkdGggPSB7fTsKKyAgICB2YXIgZ3V0
dGVyTGVmdCA9IGQuZ3V0dGVycy5jbGllbnRMZWZ0OwogICAgIGZvciAodmFyIG4gPSBkLmd1dHRl
cnMuZmlyc3RDaGlsZCwgaSA9IDA7IG47IG4gPSBuLm5leHRTaWJsaW5nLCArK2kpIHsKLSAgICAg
IGxlZnRbY20ub3B0aW9ucy5ndXR0ZXJzW2ldXSA9IG4ub2Zmc2V0TGVmdDsKLSAgICAgIHdpZHRo
W2NtLm9wdGlvbnMuZ3V0dGVyc1tpXV0gPSBuLm9mZnNldFdpZHRoOworICAgICAgbGVmdFtjbS5v
cHRpb25zLmd1dHRlcnNbaV1dID0gbi5vZmZzZXRMZWZ0ICsgbi5jbGllbnRMZWZ0ICsgZ3V0dGVy
TGVmdDsKKyAgICAgIHdpZHRoW2NtLm9wdGlvbnMuZ3V0dGVyc1tpXV0gPSBuLmNsaWVudFdpZHRo
OwogICAgIH0KICAgICByZXR1cm4ge2ZpeGVkUG9zOiBjb21wZW5zYXRlRm9ySFNjcm9sbChkKSwK
ICAgICAgICAgICAgIGd1dHRlclRvdGFsV2lkdGg6IGQuZ3V0dGVycy5vZmZzZXRXaWR0aCwKQEAg
LTc0OSw3ICs4NDksNyBAQAogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkr
KykgewogICAgICAgdmFyIGxpbmVWaWV3ID0gdmlld1tpXTsKICAgICAgIGlmIChsaW5lVmlldy5o
aWRkZW4pIHsKLSAgICAgIH0gZWxzZSBpZiAoIWxpbmVWaWV3Lm5vZGUpIHsgLy8gTm90IGRyYXdu
IHlldAorICAgICAgfSBlbHNlIGlmICghbGluZVZpZXcubm9kZSB8fCBsaW5lVmlldy5ub2RlLnBh
cmVudE5vZGUgIT0gY29udGFpbmVyKSB7IC8vIE5vdCBkcmF3biB5ZXQKICAgICAgICAgdmFyIG5v
ZGUgPSBidWlsZExpbmVFbGVtZW50KGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpOwogICAgICAg
ICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKG5vZGUsIGN1cik7CiAgICAgICB9IGVsc2UgeyAvLyBB
bHJlYWR5IGRyYXduCkBAIC03ODAsNyArODgwLDcgQEAKICAgICAgIGlmICh0eXBlID09ICJ0ZXh0
IikgdXBkYXRlTGluZVRleHQoY20sIGxpbmVWaWV3KTsKICAgICAgIGVsc2UgaWYgKHR5cGUgPT0g
Imd1dHRlciIpIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7CiAg
ICAgICBlbHNlIGlmICh0eXBlID09ICJjbGFzcyIpIHVwZGF0ZUxpbmVDbGFzc2VzKGxpbmVWaWV3
KTsKLSAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIndpZGdldCIpIHVwZGF0ZUxpbmVXaWRnZXRzKGxp
bmVWaWV3LCBkaW1zKTsKKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIndpZGdldCIpIHVwZGF0ZUxp
bmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7CiAgICAgfQogICAgIGxpbmVWaWV3LmNoYW5n
ZXMgPSBudWxsOwogICB9CkBAIC03OTMsNyArODkzLDcgQEAKICAgICAgIGlmIChsaW5lVmlldy50
ZXh0LnBhcmVudE5vZGUpCiAgICAgICAgIGxpbmVWaWV3LnRleHQucGFyZW50Tm9kZS5yZXBsYWNl
Q2hpbGQobGluZVZpZXcubm9kZSwgbGluZVZpZXcudGV4dCk7CiAgICAgICBsaW5lVmlldy5ub2Rl
LmFwcGVuZENoaWxkKGxpbmVWaWV3LnRleHQpOwotICAgICAgaWYgKGllX3VwdG83KSBsaW5lVmll
dy5ub2RlLnN0eWxlLnpJbmRleCA9IDI7CisgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDgp
IGxpbmVWaWV3Lm5vZGUuc3R5bGUuekluZGV4ID0gMjsKICAgICB9CiAgICAgcmV0dXJuIGxpbmVW
aWV3Lm5vZGU7CiAgIH0KQEAgLTg1NSwxMyArOTU1LDI2IEBACiAgICAgICBsaW5lVmlldy5ub2Rl
LnJlbW92ZUNoaWxkKGxpbmVWaWV3Lmd1dHRlcik7CiAgICAgICBsaW5lVmlldy5ndXR0ZXIgPSBu
dWxsOwogICAgIH0KKyAgICBpZiAobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCkgeworICAgICAg
bGluZVZpZXcubm9kZS5yZW1vdmVDaGlsZChsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kKTsKKyAg
ICAgIGxpbmVWaWV3Lmd1dHRlckJhY2tncm91bmQgPSBudWxsOworICAgIH0KKyAgICBpZiAobGlu
ZVZpZXcubGluZS5ndXR0ZXJDbGFzcykgeworICAgICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3Jh
cHBlZChsaW5lVmlldyk7CisgICAgICBsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kID0gZWx0KCJk
aXYiLCBudWxsLCAiQ29kZU1pcnJvci1ndXR0ZXItYmFja2dyb3VuZCAiICsgbGluZVZpZXcubGlu
ZS5ndXR0ZXJDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxl
ZnQ6ICIgKyAoY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGRpbXMuZml4ZWRQb3MgOiAtZGltcy5n
dXR0ZXJUb3RhbFdpZHRoKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJweDsgd2lkdGg6ICIgKyBkaW1zLmd1dHRlclRvdGFsV2lkdGggKyAicHgiKTsKKyAgICAgIHdy
YXAuaW5zZXJ0QmVmb3JlKGxpbmVWaWV3Lmd1dHRlckJhY2tncm91bmQsIGxpbmVWaWV3LnRleHQp
OworICAgIH0KICAgICB2YXIgbWFya2VycyA9IGxpbmVWaWV3LmxpbmUuZ3V0dGVyTWFya2VyczsK
ICAgICBpZiAoY20ub3B0aW9ucy5saW5lTnVtYmVycyB8fCBtYXJrZXJzKSB7CiAgICAgICB2YXIg
d3JhcCA9IGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KTsKLSAgICAgIHZhciBndXR0ZXJXcmFw
ID0gbGluZVZpZXcuZ3V0dGVyID0KLSAgICAgICAgd3JhcC5pbnNlcnRCZWZvcmUoZWx0KCJkaXYi
LCBudWxsLCAiQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlciIsICJwb3NpdGlvbjogYWJzb2x1dGU7
IGxlZnQ6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNtLm9wdGlvbnMuZml4
ZWRHdXR0ZXIgPyBkaW1zLmZpeGVkUG9zIDogLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKyAicHgi
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZpZXcudGV4dCk7CisgICAgICB2YXIg
Z3V0dGVyV3JhcCA9IGxpbmVWaWV3Lmd1dHRlciA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJy
b3ItZ3V0dGVyLXdyYXBwZXIiLCAibGVmdDogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGRpbXMuZml4ZWRQ
b3MgOiAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArICJweCIpOworICAgICAgY20uZGlzcGxheS5p
bnB1dC5zZXRVbmVkaXRhYmxlKGd1dHRlcldyYXApOworICAgICAgd3JhcC5pbnNlcnRCZWZvcmUo
Z3V0dGVyV3JhcCwgbGluZVZpZXcudGV4dCk7CisgICAgICBpZiAobGluZVZpZXcubGluZS5ndXR0
ZXJDbGFzcykKKyAgICAgICAgZ3V0dGVyV3JhcC5jbGFzc05hbWUgKz0gIiAiICsgbGluZVZpZXcu
bGluZS5ndXR0ZXJDbGFzczsKICAgICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzICYmICgh
bWFya2VycyB8fCAhbWFya2Vyc1siQ29kZU1pcnJvci1saW5lbnVtYmVycyJdKSkKICAgICAgICAg
bGluZVZpZXcubGluZU51bWJlciA9IGd1dHRlcldyYXAuYXBwZW5kQ2hpbGQoCiAgICAgICAgICAg
ZWx0KCJkaXYiLCBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxpbmVOKSwKQEAgLTg3NywxNCAr
OTkwLDE0IEBACiAgICAgfQogICB9CiAKLSAgZnVuY3Rpb24gdXBkYXRlTGluZVdpZGdldHMobGlu
ZVZpZXcsIGRpbXMpIHsKKyAgZnVuY3Rpb24gdXBkYXRlTGluZVdpZGdldHMoY20sIGxpbmVWaWV3
LCBkaW1zKSB7CiAgICAgaWYgKGxpbmVWaWV3LmFsaWduYWJsZSkgbGluZVZpZXcuYWxpZ25hYmxl
ID0gbnVsbDsKICAgICBmb3IgKHZhciBub2RlID0gbGluZVZpZXcubm9kZS5maXJzdENoaWxkLCBu
ZXh0OyBub2RlOyBub2RlID0gbmV4dCkgewogICAgICAgdmFyIG5leHQgPSBub2RlLm5leHRTaWJs
aW5nOwogICAgICAgaWYgKG5vZGUuY2xhc3NOYW1lID09ICJDb2RlTWlycm9yLWxpbmV3aWRnZXQi
KQogICAgICAgICBsaW5lVmlldy5ub2RlLnJlbW92ZUNoaWxkKG5vZGUpOwogICAgIH0KLSAgICBp
bnNlcnRMaW5lV2lkZ2V0cyhsaW5lVmlldywgZGltcyk7CisgICAgaW5zZXJ0TGluZVdpZGdldHMo
Y20sIGxpbmVWaWV3LCBkaW1zKTsKICAgfQogCiAgIC8vIEJ1aWxkIGEgbGluZSdzIERPTSByZXBy
ZXNlbnRhdGlvbiBmcm9tIHNjcmF0Y2gKQEAgLTg5NiwyNSArMTAwOSwyNiBAQAogCiAgICAgdXBk
YXRlTGluZUNsYXNzZXMobGluZVZpZXcpOwogICAgIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVW
aWV3LCBsaW5lTiwgZGltcyk7Ci0gICAgaW5zZXJ0TGluZVdpZGdldHMobGluZVZpZXcsIGRpbXMp
OworICAgIGluc2VydExpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7CiAgICAgcmV0dXJu
IGxpbmVWaWV3Lm5vZGU7CiAgIH0KIAogICAvLyBBIGxpbmVWaWV3IG1heSBjb250YWluIG11bHRp
cGxlIGxvZ2ljYWwgbGluZXMgKHdoZW4gbWVyZ2VkIGJ5CiAgIC8vIGNvbGxhcHNlZCBzcGFucyku
IFRoZSB3aWRnZXRzIGZvciBhbGwgb2YgdGhlbSBuZWVkIHRvIGJlIGRyYXduLgotICBmdW5jdGlv
biBpbnNlcnRMaW5lV2lkZ2V0cyhsaW5lVmlldywgZGltcykgewotICAgIGluc2VydExpbmVXaWRn
ZXRzRm9yKGxpbmVWaWV3LmxpbmUsIGxpbmVWaWV3LCBkaW1zLCB0cnVlKTsKKyAgZnVuY3Rpb24g
aW5zZXJ0TGluZVdpZGdldHMoY20sIGxpbmVWaWV3LCBkaW1zKSB7CisgICAgaW5zZXJ0TGluZVdp
ZGdldHNGb3IoY20sIGxpbmVWaWV3LmxpbmUsIGxpbmVWaWV3LCBkaW1zLCB0cnVlKTsKICAgICBp
ZiAobGluZVZpZXcucmVzdCkgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0
aDsgaSsrKQotICAgICAgaW5zZXJ0TGluZVdpZGdldHNGb3IobGluZVZpZXcucmVzdFtpXSwgbGlu
ZVZpZXcsIGRpbXMsIGZhbHNlKTsKKyAgICAgIGluc2VydExpbmVXaWRnZXRzRm9yKGNtLCBsaW5l
Vmlldy5yZXN0W2ldLCBsaW5lVmlldywgZGltcywgZmFsc2UpOwogICB9CiAKLSAgZnVuY3Rpb24g
aW5zZXJ0TGluZVdpZGdldHNGb3IobGluZSwgbGluZVZpZXcsIGRpbXMsIGFsbG93QWJvdmUpIHsK
KyAgZnVuY3Rpb24gaW5zZXJ0TGluZVdpZGdldHNGb3IoY20sIGxpbmUsIGxpbmVWaWV3LCBkaW1z
LCBhbGxvd0Fib3ZlKSB7CiAgICAgaWYgKCFsaW5lLndpZGdldHMpIHJldHVybjsKICAgICB2YXIg
d3JhcCA9IGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KTsKICAgICBmb3IgKHZhciBpID0gMCwg
d3MgPSBsaW5lLndpZGdldHM7IGkgPCB3cy5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIHdpZGdl
dCA9IHdzW2ldLCBub2RlID0gZWx0KCJkaXYiLCBbd2lkZ2V0Lm5vZGVdLCAiQ29kZU1pcnJvci1s
aW5ld2lkZ2V0Iik7Ci0gICAgICBpZiAoIXdpZGdldC5oYW5kbGVNb3VzZUV2ZW50cykgbm9kZS5p
Z25vcmVFdmVudHMgPSB0cnVlOworICAgICAgaWYgKCF3aWRnZXQuaGFuZGxlTW91c2VFdmVudHMp
IG5vZGUuc2V0QXR0cmlidXRlKCJjbS1pZ25vcmUtZXZlbnRzIiwgInRydWUiKTsKICAgICAgIHBv
c2l0aW9uTGluZVdpZGdldCh3aWRnZXQsIG5vZGUsIGxpbmVWaWV3LCBkaW1zKTsKKyAgICAgIGNt
LmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZShub2RlKTsKICAgICAgIGlmIChhbGxvd0Fib3Zl
ICYmIHdpZGdldC5hYm92ZSkKICAgICAgICAgd3JhcC5pbnNlcnRCZWZvcmUobm9kZSwgbGluZVZp
ZXcuZ3V0dGVyIHx8IGxpbmVWaWV3LnRleHQpOwogICAgICAgZWxzZQpAQCAtOTU3LDYgKzEwNzEs
OTA0IEBACiAgIGZ1bmN0aW9uIG1heFBvcyhhLCBiKSB7IHJldHVybiBjbXAoYSwgYikgPCAwID8g
YiA6IGE7IH0KICAgZnVuY3Rpb24gbWluUG9zKGEsIGIpIHsgcmV0dXJuIGNtcChhLCBiKSA8IDAg
PyBhIDogYjsgfQogCisgIC8vIElOUFVUIEhBTkRMSU5HCisKKyAgZnVuY3Rpb24gZW5zdXJlRm9j
dXMoY20pIHsKKyAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsgY20uZGlzcGxheS5pbnB1dC5m
b2N1cygpOyBvbkZvY3VzKGNtKTsgfQorICB9CisKKyAgZnVuY3Rpb24gaXNSZWFkT25seShjbSkg
eworICAgIHJldHVybiBjbS5vcHRpb25zLnJlYWRPbmx5IHx8IGNtLmRvYy5jYW50RWRpdDsKKyAg
fQorCisgIC8vIFRoaXMgd2lsbCBiZSBzZXQgdG8gYW4gYXJyYXkgb2Ygc3RyaW5ncyB3aGVuIGNv
cHlpbmcsIHNvIHRoYXQsCisgIC8vIHdoZW4gcGFzdGluZywgd2Uga25vdyB3aGF0IGtpbmQgb2Yg
c2VsZWN0aW9ucyB0aGUgY29waWVkIHRleHQKKyAgLy8gd2FzIG1hZGUgb3V0IG9mLgorICB2YXIg
bGFzdENvcGllZCA9IG51bGw7CisKKyAgZnVuY3Rpb24gYXBwbHlUZXh0SW5wdXQoY20sIGluc2Vy
dGVkLCBkZWxldGVkLCBzZWwsIG9yaWdpbikgeworICAgIHZhciBkb2MgPSBjbS5kb2M7CisgICAg
Y20uZGlzcGxheS5zaGlmdCA9IGZhbHNlOworICAgIGlmICghc2VsKSBzZWwgPSBkb2Muc2VsOwor
CisgICAgdmFyIHBhc3RlID0gY20uc3RhdGUucGFzdGVJbmNvbWluZyB8fCBvcmlnaW4gPT0gInBh
c3RlIjsKKyAgICB2YXIgdGV4dExpbmVzID0gZG9jLnNwbGl0TGluZXMoaW5zZXJ0ZWQpLCBtdWx0
aVBhc3RlID0gbnVsbDsKKyAgICAvLyBXaGVuIHBhc2luZyBOIGxpbmVzIGludG8gTiBzZWxlY3Rp
b25zLCBpbnNlcnQgb25lIGxpbmUgcGVyIHNlbGVjdGlvbgorICAgIGlmIChwYXN0ZSAmJiBzZWwu
cmFuZ2VzLmxlbmd0aCA+IDEpIHsKKyAgICAgIGlmIChsYXN0Q29waWVkICYmIGxhc3RDb3BpZWQu
am9pbigiXG4iKSA9PSBpbnNlcnRlZCkgeworICAgICAgICBpZiAoc2VsLnJhbmdlcy5sZW5ndGgg
JSBsYXN0Q29waWVkLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgbXVsdGlQYXN0ZSA9IFtdOwor
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdENvcGllZC5sZW5ndGg7IGkrKykKKyAg
ICAgICAgICAgIG11bHRpUGFzdGUucHVzaChkb2Muc3BsaXRMaW5lcyhsYXN0Q29waWVkW2ldKSk7
CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAodGV4dExpbmVzLmxlbmd0aCA9PSBzZWwucmFu
Z2VzLmxlbmd0aCkgeworICAgICAgICBtdWx0aVBhc3RlID0gbWFwKHRleHRMaW5lcywgZnVuY3Rp
b24obCkgeyByZXR1cm4gW2xdOyB9KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3JtYWwg
YmVoYXZpb3IgaXMgdG8gaW5zZXJ0IHRoZSBuZXcgdGV4dCBpbnRvIGV2ZXJ5IHNlbGVjdGlvbgor
ICAgIGZvciAodmFyIGkgPSBzZWwucmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7Cisg
ICAgICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2ldOworICAgICAgdmFyIGZyb20gPSByYW5nZS5m
cm9tKCksIHRvID0gcmFuZ2UudG8oKTsKKyAgICAgIGlmIChyYW5nZS5lbXB0eSgpKSB7CisgICAg
ICAgIGlmIChkZWxldGVkICYmIGRlbGV0ZWQgPiAwKSAvLyBIYW5kbGUgZGVsZXRpb24KKyAgICAg
ICAgICBmcm9tID0gUG9zKGZyb20ubGluZSwgZnJvbS5jaCAtIGRlbGV0ZWQpOworICAgICAgICBl
bHNlIGlmIChjbS5zdGF0ZS5vdmVyd3JpdGUgJiYgIXBhc3RlKSAvLyBIYW5kbGUgb3ZlcndyaXRl
CisgICAgICAgICAgdG8gPSBQb3ModG8ubGluZSwgTWF0aC5taW4oZ2V0TGluZShkb2MsIHRvLmxp
bmUpLnRleHQubGVuZ3RoLCB0by5jaCArIGxzdCh0ZXh0TGluZXMpLmxlbmd0aCkpOworICAgICAg
fQorICAgICAgdmFyIHVwZGF0ZUlucHV0ID0gY20uY3VyT3AudXBkYXRlSW5wdXQ7CisgICAgICB2
YXIgY2hhbmdlRXZlbnQgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBtdWx0aVBhc3RlID8g
bXVsdGlQYXN0ZVtpICUgbXVsdGlQYXN0ZS5sZW5ndGhdIDogdGV4dExpbmVzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIG9yaWdpbjogb3JpZ2luIHx8IChwYXN0ZSA/ICJwYXN0ZSIgOiBjbS5z
dGF0ZS5jdXRJbmNvbWluZyA/ICJjdXQiIDogIitpbnB1dCIpfTsKKyAgICAgIG1ha2VDaGFuZ2Uo
Y20uZG9jLCBjaGFuZ2VFdmVudCk7CisgICAgICBzaWduYWxMYXRlcihjbSwgImlucHV0UmVhZCIs
IGNtLCBjaGFuZ2VFdmVudCk7CisgICAgfQorICAgIGlmIChpbnNlcnRlZCAmJiAhcGFzdGUpCisg
ICAgICB0cmlnZ2VyRWxlY3RyaWMoY20sIGluc2VydGVkKTsKKworICAgIGVuc3VyZUN1cnNvclZp
c2libGUoY20pOworICAgIGNtLmN1ck9wLnVwZGF0ZUlucHV0ID0gdXBkYXRlSW5wdXQ7CisgICAg
Y20uY3VyT3AudHlwaW5nID0gdHJ1ZTsKKyAgICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0gY20u
c3RhdGUuY3V0SW5jb21pbmcgPSBmYWxzZTsKKyAgfQorCisgIGZ1bmN0aW9uIGhhbmRsZVBhc3Rl
KGUsIGNtKSB7CisgICAgdmFyIHBhc3RlZCA9IGUuY2xpcGJvYXJkRGF0YSAmJiBlLmNsaXBib2Fy
ZERhdGEuZ2V0RGF0YSgidGV4dC9wbGFpbiIpOworICAgIGlmIChwYXN0ZWQpIHsKKyAgICAgIGUu
cHJldmVudERlZmF1bHQoKTsKKyAgICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgeyBhcHBseVRl
eHRJbnB1dChjbSwgcGFzdGVkLCAwLCBudWxsLCAicGFzdGUiKTsgfSk7CisgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB0cmlnZ2VyRWxlY3RyaWMoY20sIGluc2Vy
dGVkKSB7CisgICAgLy8gV2hlbiBhbiAnZWxlY3RyaWMnIGNoYXJhY3RlciBpcyBpbnNlcnRlZCwg
aW1tZWRpYXRlbHkgdHJpZ2dlciBhIHJlaW5kZW50CisgICAgaWYgKCFjbS5vcHRpb25zLmVsZWN0
cmljQ2hhcnMgfHwgIWNtLm9wdGlvbnMuc21hcnRJbmRlbnQpIHJldHVybjsKKyAgICB2YXIgc2Vs
ID0gY20uZG9jLnNlbDsKKworICAgIGZvciAodmFyIGkgPSBzZWwucmFuZ2VzLmxlbmd0aCAtIDE7
IGkgPj0gMDsgaS0tKSB7CisgICAgICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2ldOworICAgICAg
aWYgKHJhbmdlLmhlYWQuY2ggPiAxMDAgfHwgKGkgJiYgc2VsLnJhbmdlc1tpIC0gMV0uaGVhZC5s
aW5lID09IHJhbmdlLmhlYWQubGluZSkpIGNvbnRpbnVlOworICAgICAgdmFyIG1vZGUgPSBjbS5n
ZXRNb2RlQXQocmFuZ2UuaGVhZCk7CisgICAgICB2YXIgaW5kZW50ZWQgPSBmYWxzZTsKKyAgICAg
IGlmIChtb2RlLmVsZWN0cmljQ2hhcnMpIHsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBt
b2RlLmVsZWN0cmljQ2hhcnMubGVuZ3RoOyBqKyspCisgICAgICAgICAgaWYgKGluc2VydGVkLmlu
ZGV4T2YobW9kZS5lbGVjdHJpY0NoYXJzLmNoYXJBdChqKSkgPiAtMSkgeworICAgICAgICAgICAg
aW5kZW50ZWQgPSBpbmRlbnRMaW5lKGNtLCByYW5nZS5oZWFkLmxpbmUsICJzbWFydCIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgfSBlbHNlIGlmIChtb2RlLmVsZWN0
cmljSW5wdXQpIHsKKyAgICAgICAgaWYgKG1vZGUuZWxlY3RyaWNJbnB1dC50ZXN0KGdldExpbmUo
Y20uZG9jLCByYW5nZS5oZWFkLmxpbmUpLnRleHQuc2xpY2UoMCwgcmFuZ2UuaGVhZC5jaCkpKQor
ICAgICAgICAgIGluZGVudGVkID0gaW5kZW50TGluZShjbSwgcmFuZ2UuaGVhZC5saW5lLCAic21h
cnQiKTsKKyAgICAgIH0KKyAgICAgIGlmIChpbmRlbnRlZCkgc2lnbmFsTGF0ZXIoY20sICJlbGVj
dHJpY0lucHV0IiwgY20sIHJhbmdlLmhlYWQubGluZSk7CisgICAgfQorICB9CisKKyAgZnVuY3Rp
b24gY29weWFibGVSYW5nZXMoY20pIHsKKyAgICB2YXIgdGV4dCA9IFtdLCByYW5nZXMgPSBbXTsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLmRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7
CisgICAgICB2YXIgbGluZSA9IGNtLmRvYy5zZWwucmFuZ2VzW2ldLmhlYWQubGluZTsKKyAgICAg
IHZhciBsaW5lUmFuZ2UgPSB7YW5jaG9yOiBQb3MobGluZSwgMCksIGhlYWQ6IFBvcyhsaW5lICsg
MSwgMCl9OworICAgICAgcmFuZ2VzLnB1c2gobGluZVJhbmdlKTsKKyAgICAgIHRleHQucHVzaChj
bS5nZXRSYW5nZShsaW5lUmFuZ2UuYW5jaG9yLCBsaW5lUmFuZ2UuaGVhZCkpOworICAgIH0KKyAg
ICByZXR1cm4ge3RleHQ6IHRleHQsIHJhbmdlczogcmFuZ2VzfTsKKyAgfQorCisgIGZ1bmN0aW9u
IGRpc2FibGVCcm93c2VyTWFnaWMoZmllbGQpIHsKKyAgICBmaWVsZC5zZXRBdHRyaWJ1dGUoImF1
dG9jb3JyZWN0IiwgIm9mZiIpOworICAgIGZpZWxkLnNldEF0dHJpYnV0ZSgiYXV0b2NhcGl0YWxp
emUiLCAib2ZmIik7CisgICAgZmllbGQuc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwgImZhbHNl
Iik7CisgIH0KKworICAvLyBURVhUQVJFQSBJTlBVVCBTVFlMRQorCisgIGZ1bmN0aW9uIFRleHRh
cmVhSW5wdXQoY20pIHsKKyAgICB0aGlzLmNtID0gY207CisgICAgLy8gU2VlIGlucHV0LnBvbGwg
YW5kIGlucHV0LnJlc2V0CisgICAgdGhpcy5wcmV2SW5wdXQgPSAiIjsKKworICAgIC8vIEZsYWcg
dGhhdCBpbmRpY2F0ZXMgd2hldGhlciB3ZSBleHBlY3QgaW5wdXQgdG8gYXBwZWFyIHJlYWwgc29v
bgorICAgIC8vIG5vdyAoYWZ0ZXIgc29tZSBldmVudCBsaWtlICdrZXlwcmVzcycgb3IgJ2lucHV0
JykgYW5kIGFyZQorICAgIC8vIHBvbGxpbmcgaW50ZW5zaXZlbHkuCisgICAgdGhpcy5wb2xsaW5n
RmFzdCA9IGZhbHNlOworICAgIC8vIFNlbGYtcmVzZXR0aW5nIHRpbWVvdXQgZm9yIHRoZSBwb2xs
ZXIKKyAgICB0aGlzLnBvbGxpbmcgPSBuZXcgRGVsYXllZCgpOworICAgIC8vIFRyYWNrcyB3aGVu
IGlucHV0LnJlc2V0IGhhcyBwdW50ZWQgdG8ganVzdCBwdXR0aW5nIGEgc2hvcnQKKyAgICAvLyBz
dHJpbmcgaW50byB0aGUgdGV4dGFyZWEgaW5zdGVhZCBvZiB0aGUgZnVsbCBzZWxlY3Rpb24uCisg
ICAgdGhpcy5pbmFjY3VyYXRlU2VsZWN0aW9uID0gZmFsc2U7CisgICAgLy8gVXNlZCB0byB3b3Jr
IGFyb3VuZCBJRSBpc3N1ZSB3aXRoIHNlbGVjdGlvbiBiZWluZyBmb3Jnb3R0ZW4gd2hlbiBmb2N1
cyBtb3ZlcyBhd2F5IGZyb20gdGV4dGFyZWEKKyAgICB0aGlzLmhhc1NlbGVjdGlvbiA9IGZhbHNl
OworICAgIHRoaXMuY29tcG9zaW5nID0gbnVsbDsKKyAgfTsKKworICBmdW5jdGlvbiBoaWRkZW5U
ZXh0YXJlYSgpIHsKKyAgICB2YXIgdGUgPSBlbHQoInRleHRhcmVhIiwgbnVsbCwgbnVsbCwgInBv
c2l0aW9uOiBhYnNvbHV0ZTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91
dGxpbmU6IG5vbmUiKTsKKyAgICB2YXIgZGl2ID0gZWx0KCJkaXYiLCBbdGVdLCBudWxsLCAib3Zl
cmZsb3c6IGhpZGRlbjsgcG9zaXRpb246IHJlbGF0aXZlOyB3aWR0aDogM3B4OyBoZWlnaHQ6IDBw
eDsiKTsKKyAgICAvLyBUaGUgdGV4dGFyZWEgaXMga2VwdCBwb3NpdGlvbmVkIG5lYXIgdGhlIGN1
cnNvciB0byBwcmV2ZW50IHRoZQorICAgIC8vIGZhY3QgdGhhdCBpdCdsbCBiZSBzY3JvbGxlZCBp
bnRvIHZpZXcgb24gaW5wdXQgZnJvbSBzY3JvbGxpbmcKKyAgICAvLyBvdXIgZmFrZSBjdXJzb3Ig
b3V0IG9mIHZpZXcuIE9uIHdlYmtpdCwgd2hlbiB3cmFwPW9mZiwgcGFzdGUgaXMKKyAgICAvLyB2
ZXJ5IHNsb3cuIFNvIG1ha2UgdGhlIGFyZWEgd2lkZSBpbnN0ZWFkLgorICAgIGlmICh3ZWJraXQp
IHRlLnN0eWxlLndpZHRoID0gIjEwMDBweCI7CisgICAgZWxzZSB0ZS5zZXRBdHRyaWJ1dGUoIndy
YXAiLCAib2ZmIik7CisgICAgLy8gSWYgYm9yZGVyOiAwOyAtLSBpT1MgZmFpbHMgdG8gb3BlbiBr
ZXlib2FyZCAoaXNzdWUgIzEyODcpCisgICAgaWYgKGlvcykgdGUuc3R5bGUuYm9yZGVyID0gIjFw
eCBzb2xpZCBibGFjayI7CisgICAgZGlzYWJsZUJyb3dzZXJNYWdpYyh0ZSk7CisgICAgcmV0dXJu
IGRpdjsKKyAgfQorCisgIFRleHRhcmVhSW5wdXQucHJvdG90eXBlID0gY29weU9iaih7CisgICAg
aW5pdDogZnVuY3Rpb24oZGlzcGxheSkgeworICAgICAgdmFyIGlucHV0ID0gdGhpcywgY20gPSB0
aGlzLmNtOworCisgICAgICAvLyBXcmFwcyBhbmQgaGlkZXMgaW5wdXQgdGV4dGFyZWEKKyAgICAg
IHZhciBkaXYgPSB0aGlzLndyYXBwZXIgPSBoaWRkZW5UZXh0YXJlYSgpOworICAgICAgLy8gVGhl
IHNlbWloaWRkZW4gdGV4dGFyZWEgdGhhdCBpcyBmb2N1c2VkIHdoZW4gdGhlIGVkaXRvciBpcwor
ICAgICAgLy8gZm9jdXNlZCwgYW5kIHJlY2VpdmVzIGlucHV0LgorICAgICAgdmFyIHRlID0gdGhp
cy50ZXh0YXJlYSA9IGRpdi5maXJzdENoaWxkOworICAgICAgZGlzcGxheS53cmFwcGVyLmluc2Vy
dEJlZm9yZShkaXYsIGRpc3BsYXkud3JhcHBlci5maXJzdENoaWxkKTsKKworICAgICAgLy8gTmVl
ZGVkIHRvIGhpZGUgYmlnIGJsdWUgYmxpbmtpbmcgY3Vyc29yIG9uIE1vYmlsZSBTYWZhcmkgKGRv
ZXNuJ3Qgc2VlbSB0byB3b3JrIGluIGlPUyA4IGFueW1vcmUpCisgICAgICBpZiAoaW9zKSB0ZS5z
dHlsZS53aWR0aCA9ICIwcHgiOworCisgICAgICBvbih0ZSwgImlucHV0IiwgZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkgJiYgaW5wdXQuaGFzU2VsZWN0aW9u
KSBpbnB1dC5oYXNTZWxlY3Rpb24gPSBudWxsOworICAgICAgICBpbnB1dC5wb2xsKCk7CisgICAg
ICB9KTsKKworICAgICAgb24odGUsICJwYXN0ZSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYg
KGhhbmRsZVBhc3RlKGUsIGNtKSkgcmV0dXJuIHRydWU7CisKKyAgICAgICAgY20uc3RhdGUucGFz
dGVJbmNvbWluZyA9IHRydWU7CisgICAgICAgIGlucHV0LmZhc3RQb2xsKCk7CisgICAgICB9KTsK
KworICAgICAgZnVuY3Rpb24gcHJlcGFyZUNvcHlDdXQoZSkgeworICAgICAgICBpZiAoY20uc29t
ZXRoaW5nU2VsZWN0ZWQoKSkgeworICAgICAgICAgIGxhc3RDb3BpZWQgPSBjbS5nZXRTZWxlY3Rp
b25zKCk7CisgICAgICAgICAgaWYgKGlucHV0LmluYWNjdXJhdGVTZWxlY3Rpb24pIHsKKyAgICAg
ICAgICAgIGlucHV0LnByZXZJbnB1dCA9ICIiOworICAgICAgICAgICAgaW5wdXQuaW5hY2N1cmF0
ZVNlbGVjdGlvbiA9IGZhbHNlOworICAgICAgICAgICAgdGUudmFsdWUgPSBsYXN0Q29waWVkLmpv
aW4oIlxuIik7CisgICAgICAgICAgICBzZWxlY3RJbnB1dCh0ZSk7CisgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKCFjbS5vcHRpb25zLmxpbmVXaXNlQ29weUN1dCkgeworICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB2YXIgcmFuZ2VzID0gY29weWFi
bGVSYW5nZXMoY20pOworICAgICAgICAgIGxhc3RDb3BpZWQgPSByYW5nZXMudGV4dDsKKyAgICAg
ICAgICBpZiAoZS50eXBlID09ICJjdXQiKSB7CisgICAgICAgICAgICBjbS5zZXRTZWxlY3Rpb25z
KHJhbmdlcy5yYW5nZXMsIG51bGwsIHNlbF9kb250U2Nyb2xsKTsKKyAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaW5wdXQucHJldklucHV0ID0gIiI7CisgICAgICAgICAgICB0ZS52YWx1
ZSA9IHJhbmdlcy50ZXh0LmpvaW4oIlxuIik7CisgICAgICAgICAgICBzZWxlY3RJbnB1dCh0ZSk7
CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChlLnR5cGUgPT0gImN1dCIpIGNt
LnN0YXRlLmN1dEluY29taW5nID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIG9uKHRlLCAiY3V0Iiwg
cHJlcGFyZUNvcHlDdXQpOworICAgICAgb24odGUsICJjb3B5IiwgcHJlcGFyZUNvcHlDdXQpOwor
CisgICAgICBvbihkaXNwbGF5LnNjcm9sbGVyLCAicGFzdGUiLCBmdW5jdGlvbihlKSB7CisgICAg
ICAgIGlmIChldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpKSByZXR1cm47CisgICAgICAgIGNtLnN0
YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlOworICAgICAgICBpbnB1dC5mb2N1cygpOworICAgICAg
fSk7CisKKyAgICAgIC8vIFByZXZlbnQgbm9ybWFsIHNlbGVjdGlvbiBpbiB0aGUgZWRpdG9yICh3
ZSBoYW5kbGUgb3VyIG93bikKKyAgICAgIG9uKGRpc3BsYXkubGluZVNwYWNlLCAic2VsZWN0c3Rh
cnQiLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmICghZXZlbnRJbldpZGdldChkaXNwbGF5LCBl
KSkgZV9wcmV2ZW50RGVmYXVsdChlKTsKKyAgICAgIH0pOworCisgICAgICBvbih0ZSwgImNvbXBv
c2l0aW9uc3RhcnQiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHN0YXJ0ID0gY20uZ2V0Q3Vy
c29yKCJmcm9tIik7CisgICAgICAgIGlucHV0LmNvbXBvc2luZyA9IHsKKyAgICAgICAgICBzdGFy
dDogc3RhcnQsCisgICAgICAgICAgcmFuZ2U6IGNtLm1hcmtUZXh0KHN0YXJ0LCBjbS5nZXRDdXJz
b3IoInRvIiksIHtjbGFzc05hbWU6ICJDb2RlTWlycm9yLWNvbXBvc2luZyJ9KQorICAgICAgICB9
OworICAgICAgfSk7CisgICAgICBvbih0ZSwgImNvbXBvc2l0aW9uZW5kIiwgZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmIChpbnB1dC5jb21wb3NpbmcpIHsKKyAgICAgICAgICBpbnB1dC5wb2xsKCk7
CisgICAgICAgICAgaW5wdXQuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCk7CisgICAgICAgICAgaW5w
dXQuY29tcG9zaW5nID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfSwKKworICAg
IHByZXBhcmVTZWxlY3Rpb246IGZ1bmN0aW9uKCkgeworICAgICAgLy8gUmVkcmF3IHRoZSBzZWxl
Y3Rpb24gYW5kL29yIGN1cnNvcgorICAgICAgdmFyIGNtID0gdGhpcy5jbSwgZGlzcGxheSA9IGNt
LmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKKyAgICAgIHZhciByZXN1bHQgPSBwcmVwYXJlU2VsZWN0
aW9uKGNtKTsKKworICAgICAgLy8gTW92ZSB0aGUgaGlkZGVuIHRleHRhcmVhIG5lYXIgdGhlIGN1
cnNvciB0byBwcmV2ZW50IHNjcm9sbGluZyBhcnRpZmFjdHMKKyAgICAgIGlmIChjbS5vcHRpb25z
Lm1vdmVJbnB1dFdpdGhDdXJzb3IpIHsKKyAgICAgICAgdmFyIGhlYWRQb3MgPSBjdXJzb3JDb29y
ZHMoY20sIGRvYy5zZWwucHJpbWFyeSgpLmhlYWQsICJkaXYiKTsKKyAgICAgICAgdmFyIHdyYXBP
ZmYgPSBkaXNwbGF5LndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGxpbmVPZmYgPSBk
aXNwbGF5LmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgIHJlc3VsdC50
ZVRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQg
LSAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFBv
cy50b3AgKyBsaW5lT2ZmLnRvcCAtIHdyYXBPZmYudG9wKSk7CisgICAgICAgIHJlc3VsdC50ZUxl
ZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggLSAx
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRQb3Mu
bGVmdCArIGxpbmVPZmYubGVmdCAtIHdyYXBPZmYubGVmdCkpOworICAgICAgfQorCisgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICBzaG93U2VsZWN0aW9uOiBmdW5jdGlvbihkcmF3
bikgeworICAgICAgdmFyIGNtID0gdGhpcy5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXk7CisgICAg
ICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LmN1cnNvckRpdiwgZHJhd24uY3Vyc29ycyk7
CisgICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LnNlbGVjdGlvbkRpdiwgZHJhd24u
c2VsZWN0aW9uKTsKKyAgICAgIGlmIChkcmF3bi50ZVRvcCAhPSBudWxsKSB7CisgICAgICAgIHRo
aXMud3JhcHBlci5zdHlsZS50b3AgPSBkcmF3bi50ZVRvcCArICJweCI7CisgICAgICAgIHRoaXMu
d3JhcHBlci5zdHlsZS5sZWZ0ID0gZHJhd24udGVMZWZ0ICsgInB4IjsKKyAgICAgIH0KKyAgICB9
LAorCisgICAgLy8gUmVzZXQgdGhlIGlucHV0IHRvIGNvcnJlc3BvbmQgdG8gdGhlIHNlbGVjdGlv
biAob3IgdG8gYmUgZW1wdHksCisgICAgLy8gd2hlbiBub3QgdHlwaW5nIGFuZCBub3RoaW5nIGlz
IHNlbGVjdGVkKQorICAgIHJlc2V0OiBmdW5jdGlvbih0eXBpbmcpIHsKKyAgICAgIGlmICh0aGlz
LmNvbnRleHRNZW51UGVuZGluZykgcmV0dXJuOworICAgICAgdmFyIG1pbmltYWwsIHNlbGVjdGVk
LCBjbSA9IHRoaXMuY20sIGRvYyA9IGNtLmRvYzsKKyAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxl
Y3RlZCgpKSB7CisgICAgICAgIHRoaXMucHJldklucHV0ID0gIiI7CisgICAgICAgIHZhciByYW5n
ZSA9IGRvYy5zZWwucHJpbWFyeSgpOworICAgICAgICBtaW5pbWFsID0gaGFzQ29weUV2ZW50ICYm
CisgICAgICAgICAgKHJhbmdlLnRvKCkubGluZSAtIHJhbmdlLmZyb20oKS5saW5lID4gMTAwIHx8
IChzZWxlY3RlZCA9IGNtLmdldFNlbGVjdGlvbigpKS5sZW5ndGggPiAxMDAwKTsKKyAgICAgICAg
dmFyIGNvbnRlbnQgPSBtaW5pbWFsID8gIi0iIDogc2VsZWN0ZWQgfHwgY20uZ2V0U2VsZWN0aW9u
KCk7CisgICAgICAgIHRoaXMudGV4dGFyZWEudmFsdWUgPSBjb250ZW50OworICAgICAgICBpZiAo
Y20uc3RhdGUuZm9jdXNlZCkgc2VsZWN0SW5wdXQodGhpcy50ZXh0YXJlYSk7CisgICAgICAgIGlm
IChpZSAmJiBpZV92ZXJzaW9uID49IDkpIHRoaXMuaGFzU2VsZWN0aW9uID0gY29udGVudDsKKyAg
ICAgIH0gZWxzZSBpZiAoIXR5cGluZykgeworICAgICAgICB0aGlzLnByZXZJbnB1dCA9IHRoaXMu
dGV4dGFyZWEudmFsdWUgPSAiIjsKKyAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSkg
dGhpcy5oYXNTZWxlY3Rpb24gPSBudWxsOworICAgICAgfQorICAgICAgdGhpcy5pbmFjY3VyYXRl
U2VsZWN0aW9uID0gbWluaW1hbDsKKyAgICB9LAorCisgICAgZ2V0RmllbGQ6IGZ1bmN0aW9uKCkg
eyByZXR1cm4gdGhpcy50ZXh0YXJlYTsgfSwKKworICAgIHN1cHBvcnRzVG91Y2g6IGZ1bmN0aW9u
KCkgeyByZXR1cm4gZmFsc2U7IH0sCisKKyAgICBmb2N1czogZnVuY3Rpb24oKSB7CisgICAgICBp
ZiAodGhpcy5jbS5vcHRpb25zLnJlYWRPbmx5ICE9ICJub2N1cnNvciIgJiYgKCFtb2JpbGUgfHwg
YWN0aXZlRWx0KCkgIT0gdGhpcy50ZXh0YXJlYSkpIHsKKyAgICAgICAgdHJ5IHsgdGhpcy50ZXh0
YXJlYS5mb2N1cygpOyB9CisgICAgICAgIGNhdGNoIChlKSB7fSAvLyBJRTggd2lsbCB0aHJvdyBp
ZiB0aGUgdGV4dGFyZWEgaXMgZGlzcGxheTogbm9uZSBvciBub3QgaW4gRE9NCisgICAgICB9Cisg
ICAgfSwKKworICAgIGJsdXI6IGZ1bmN0aW9uKCkgeyB0aGlzLnRleHRhcmVhLmJsdXIoKTsgfSwK
KworICAgIHJlc2V0UG9zaXRpb246IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy53cmFwcGVyLnN0
eWxlLnRvcCA9IHRoaXMud3JhcHBlci5zdHlsZS5sZWZ0ID0gMDsKKyAgICB9LAorCisgICAgcmVj
ZWl2ZWRGb2N1czogZnVuY3Rpb24oKSB7IHRoaXMuc2xvd1BvbGwoKTsgfSwKKworICAgIC8vIFBv
bGwgZm9yIGlucHV0IGNoYW5nZXMsIHVzaW5nIHRoZSBub3JtYWwgcmF0ZSBvZiBwb2xsaW5nLiBU
aGlzCisgICAgLy8gcnVucyBhcyBsb25nIGFzIHRoZSBlZGl0b3IgaXMgZm9jdXNlZC4KKyAgICBz
bG93UG9sbDogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgaW5wdXQgPSB0aGlzOworICAgICAgaWYg
KGlucHV0LnBvbGxpbmdGYXN0KSByZXR1cm47CisgICAgICBpbnB1dC5wb2xsaW5nLnNldCh0aGlz
LmNtLm9wdGlvbnMucG9sbEludGVydmFsLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaW5wdXQucG9s
bCgpOworICAgICAgICBpZiAoaW5wdXQuY20uc3RhdGUuZm9jdXNlZCkgaW5wdXQuc2xvd1BvbGwo
KTsKKyAgICAgIH0pOworICAgIH0sCisKKyAgICAvLyBXaGVuIGFuIGV2ZW50IGhhcyBqdXN0IGNv
bWUgaW4gdGhhdCBpcyBsaWtlbHkgdG8gYWRkIG9yIGNoYW5nZQorICAgIC8vIHNvbWV0aGluZyBp
biB0aGUgaW5wdXQgdGV4dGFyZWEsIHdlIHBvbGwgZmFzdGVyLCB0byBlbnN1cmUgdGhhdAorICAg
IC8vIHRoZSBjaGFuZ2UgYXBwZWFycyBvbiB0aGUgc2NyZWVuIHF1aWNrbHkuCisgICAgZmFzdFBv
bGw6IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIG1pc3NlZCA9IGZhbHNlLCBpbnB1dCA9IHRoaXM7
CisgICAgICBpbnB1dC5wb2xsaW5nRmFzdCA9IHRydWU7CisgICAgICBmdW5jdGlvbiBwKCkgewor
ICAgICAgICB2YXIgY2hhbmdlZCA9IGlucHV0LnBvbGwoKTsKKyAgICAgICAgaWYgKCFjaGFuZ2Vk
ICYmICFtaXNzZWQpIHttaXNzZWQgPSB0cnVlOyBpbnB1dC5wb2xsaW5nLnNldCg2MCwgcCk7fQor
ICAgICAgICBlbHNlIHtpbnB1dC5wb2xsaW5nRmFzdCA9IGZhbHNlOyBpbnB1dC5zbG93UG9sbCgp
O30KKyAgICAgIH0KKyAgICAgIGlucHV0LnBvbGxpbmcuc2V0KDIwLCBwKTsKKyAgICB9LAorCisg
ICAgLy8gUmVhZCBpbnB1dCBmcm9tIHRoZSB0ZXh0YXJlYSwgYW5kIHVwZGF0ZSB0aGUgZG9jdW1l
bnQgdG8gbWF0Y2guCisgICAgLy8gV2hlbiBzb21ldGhpbmcgaXMgc2VsZWN0ZWQsIGl0IGlzIHBy
ZXNlbnQgaW4gdGhlIHRleHRhcmVhLCBhbmQKKyAgICAvLyBzZWxlY3RlZCAodW5sZXNzIGl0IGlz
IGh1Z2UsIGluIHdoaWNoIGNhc2UgYSBwbGFjZWhvbGRlciBpcworICAgIC8vIHVzZWQpLiBXaGVu
IG5vdGhpbmcgaXMgc2VsZWN0ZWQsIHRoZSBjdXJzb3Igc2l0cyBhZnRlciBwcmV2aW91c2x5Cisg
ICAgLy8gc2VlbiB0ZXh0IChjYW4gYmUgZW1wdHkpLCB3aGljaCBpcyBzdG9yZWQgaW4gcHJldklu
cHV0ICh3ZSBtdXN0CisgICAgLy8gbm90IHJlc2V0IHRoZSB0ZXh0YXJlYSB3aGVuIHR5cGluZywg
YmVjYXVzZSB0aGF0IGJyZWFrcyBJTUUpLgorICAgIHBvbGw6IGZ1bmN0aW9uKCkgeworICAgICAg
dmFyIGNtID0gdGhpcy5jbSwgaW5wdXQgPSB0aGlzLnRleHRhcmVhLCBwcmV2SW5wdXQgPSB0aGlz
LnByZXZJbnB1dDsKKyAgICAgIC8vIFNpbmNlIHRoaXMgaXMgY2FsbGVkIGEgKmxvdCosIHRyeSB0
byBiYWlsIG91dCBhcyBjaGVhcGx5IGFzCisgICAgICAvLyBwb3NzaWJsZSB3aGVuIGl0IGlzIGNs
ZWFyIHRoYXQgbm90aGluZyBoYXBwZW5lZC4gaGFzU2VsZWN0aW9uCisgICAgICAvLyB3aWxsIGJl
IHRoZSBjYXNlIHdoZW4gdGhlcmUgaXMgYSBsb3Qgb2YgdGV4dCBpbiB0aGUgdGV4dGFyZWEsCisg
ICAgICAvLyBpbiB3aGljaCBjYXNlIHJlYWRpbmcgaXRzIHZhbHVlIHdvdWxkIGJlIGV4cGVuc2l2
ZS4KKyAgICAgIGlmICh0aGlzLmNvbnRleHRNZW51UGVuZGluZyB8fCAhY20uc3RhdGUuZm9jdXNl
ZCB8fAorICAgICAgICAgIChoYXNTZWxlY3Rpb24oaW5wdXQpICYmICFwcmV2SW5wdXQgJiYgIXRo
aXMuY29tcG9zaW5nKSB8fAorICAgICAgICAgIGlzUmVhZE9ubHkoY20pIHx8IGNtLm9wdGlvbnMu
ZGlzYWJsZUlucHV0IHx8IGNtLnN0YXRlLmtleVNlcSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICB2YXIgdGV4dCA9IGlucHV0LnZhbHVlOworICAgICAgLy8gSWYgbm90aGluZyBjaGFu
Z2VkLCBiYWlsLgorICAgICAgaWYgKHRleHQgPT0gcHJldklucHV0ICYmICFjbS5zb21ldGhpbmdT
ZWxlY3RlZCgpKSByZXR1cm4gZmFsc2U7CisgICAgICAvLyBXb3JrIGFyb3VuZCBub25zZW5zaWNh
bCBzZWxlY3Rpb24gcmVzZXR0aW5nIGluIElFOS8xMCwgYW5kCisgICAgICAvLyBpbmV4cGxpY2Fi
bGUgYXBwZWFyYW5jZSBvZiBwcml2YXRlIGFyZWEgdW5pY29kZSBjaGFyYWN0ZXJzIG9uCisgICAg
ICAvLyBzb21lIGtleSBjb21ib3MgaW4gTWFjICgjMjY4OSkuCisgICAgICBpZiAoaWUgJiYgaWVf
dmVyc2lvbiA+PSA5ICYmIHRoaXMuaGFzU2VsZWN0aW9uID09PSB0ZXh0IHx8CisgICAgICAgICAg
bWFjICYmIC9bXHVmNzAwLVx1ZjdmZl0vLnRlc3QodGV4dCkpIHsKKyAgICAgICAgY20uZGlzcGxh
eS5pbnB1dC5yZXNldCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAg
IGlmIChjbS5kb2Muc2VsID09IGNtLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUpIHsKKyAgICAg
ICAgdmFyIGZpcnN0ID0gdGV4dC5jaGFyQ29kZUF0KDApOworICAgICAgICBpZiAoZmlyc3QgPT0g
MHgyMDBiICYmICFwcmV2SW5wdXQpIHByZXZJbnB1dCA9ICJcdTIwMGIiOworICAgICAgICBpZiAo
Zmlyc3QgPT0gMHgyMWRhKSB7IHRoaXMucmVzZXQoKTsgcmV0dXJuIHRoaXMuY20uZXhlY0NvbW1h
bmQoInVuZG8iKTsgfQorICAgICAgfQorICAgICAgLy8gRmluZCB0aGUgcGFydCBvZiB0aGUgaW5w
dXQgdGhhdCBpcyBhY3R1YWxseSBuZXcKKyAgICAgIHZhciBzYW1lID0gMCwgbCA9IE1hdGgubWlu
KHByZXZJbnB1dC5sZW5ndGgsIHRleHQubGVuZ3RoKTsKKyAgICAgIHdoaWxlIChzYW1lIDwgbCAm
JiBwcmV2SW5wdXQuY2hhckNvZGVBdChzYW1lKSA9PSB0ZXh0LmNoYXJDb2RlQXQoc2FtZSkpICsr
c2FtZTsKKworICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgcnVuSW5PcChjbSwgZnVuY3Rp
b24oKSB7CisgICAgICAgIGFwcGx5VGV4dElucHV0KGNtLCB0ZXh0LnNsaWNlKHNhbWUpLCBwcmV2
SW5wdXQubGVuZ3RoIC0gc2FtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgc2VsZi5j
b21wb3NpbmcgPyAiKmNvbXBvc2UiIDogbnVsbCk7CisKKyAgICAgICAgLy8gRG9uJ3QgbGVhdmUg
bG9uZyB0ZXh0IGluIHRoZSB0ZXh0YXJlYSwgc2luY2UgaXQgbWFrZXMgZnVydGhlciBwb2xsaW5n
IHNsb3cKKyAgICAgICAgaWYgKHRleHQubGVuZ3RoID4gMTAwMCB8fCB0ZXh0LmluZGV4T2YoIlxu
IikgPiAtMSkgaW5wdXQudmFsdWUgPSBzZWxmLnByZXZJbnB1dCA9ICIiOworICAgICAgICBlbHNl
IHNlbGYucHJldklucHV0ID0gdGV4dDsKKworICAgICAgICBpZiAoc2VsZi5jb21wb3NpbmcpIHsK
KyAgICAgICAgICBzZWxmLmNvbXBvc2luZy5yYW5nZS5jbGVhcigpOworICAgICAgICAgIHNlbGYu
Y29tcG9zaW5nLnJhbmdlID0gY20ubWFya1RleHQoc2VsZi5jb21wb3Npbmcuc3RhcnQsIGNtLmdl
dEN1cnNvcigidG8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHtjbGFzc05hbWU6ICJDb2RlTWlycm9yLWNvbXBvc2luZyJ9KTsKKyAgICAgICAgfQorICAg
ICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgZW5zdXJlUG9sbGVkOiBm
dW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlzLnBvbGxpbmdGYXN0ICYmIHRoaXMucG9sbCgpKSB0
aGlzLnBvbGxpbmdGYXN0ID0gZmFsc2U7CisgICAgfSwKKworICAgIG9uS2V5UHJlc3M6IGZ1bmN0
aW9uKCkgeworICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSkgdGhpcy5oYXNTZWxlY3Rp
b24gPSBudWxsOworICAgICAgdGhpcy5mYXN0UG9sbCgpOworICAgIH0sCisKKyAgICBvbkNvbnRl
eHRNZW51OiBmdW5jdGlvbihlKSB7CisgICAgICB2YXIgaW5wdXQgPSB0aGlzLCBjbSA9IGlucHV0
LmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgdGUgPSBpbnB1dC50ZXh0YXJlYTsKKyAgICAgIHZh
ciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUpLCBzY3JvbGxQb3MgPSBkaXNwbGF5LnNjcm9sbGVy
LnNjcm9sbFRvcDsKKyAgICAgIGlmICghcG9zIHx8IHByZXN0bykgcmV0dXJuOyAvLyBPcGVyYSBp
cyBkaWZmaWN1bHQuCisKKyAgICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50IHRleHQgc2VsZWN0aW9u
IG9ubHkgaWYgdGhlIGNsaWNrIGlzIGRvbmUgb3V0c2lkZSBvZiB0aGUgc2VsZWN0aW9uCisgICAg
ICAvLyBhbmQgJ3Jlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudScgb3B0aW9uIGlzIHRydWUuCisg
ICAgICB2YXIgcmVzZXQgPSBjbS5vcHRpb25zLnJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudTsK
KyAgICAgIGlmIChyZXNldCAmJiBjbS5kb2Muc2VsLmNvbnRhaW5zKHBvcykgPT0gLTEpCisgICAg
ICAgIG9wZXJhdGlvbihjbSwgc2V0U2VsZWN0aW9uKShjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihw
b3MpLCBzZWxfZG9udFNjcm9sbCk7CisKKyAgICAgIHZhciBvbGRDU1MgPSB0ZS5zdHlsZS5jc3NU
ZXh0OworICAgICAgaW5wdXQud3JhcHBlci5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7Cisg
ICAgICB0ZS5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDMwcHg7IGhl
aWdodDogMzBweDsgdG9wOiAiICsgKGUuY2xpZW50WSAtIDUpICsKKyAgICAgICAgInB4OyBsZWZ0
OiAiICsgKGUuY2xpZW50WCAtIDUpICsgInB4OyB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiAi
ICsKKyAgICAgICAgKGllID8gInJnYmEoMjU1LCAyNTUsIDI1NSwgLjA1KSIgOiAidHJhbnNwYXJl
bnQiKSArCisgICAgICAgICI7IG91dGxpbmU6IG5vbmU7IGJvcmRlci13aWR0aDogMDsgb3V0bGlu
ZTogbm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9w
YWNpdHk9NSk7IjsKKyAgICAgIGlmICh3ZWJraXQpIHZhciBvbGRTY3JvbGxZID0gd2luZG93LnNj
cm9sbFk7IC8vIFdvcmsgYXJvdW5kIENocm9tZSBpc3N1ZSAoIzI3MTIpCisgICAgICBkaXNwbGF5
LmlucHV0LmZvY3VzKCk7CisgICAgICBpZiAod2Via2l0KSB3aW5kb3cuc2Nyb2xsVG8obnVsbCwg
b2xkU2Nyb2xsWSk7CisgICAgICBkaXNwbGF5LmlucHV0LnJlc2V0KCk7CisgICAgICAvLyBBZGRz
ICJTZWxlY3QgYWxsIiB0byBjb250ZXh0IG1lbnUgaW4gRkYKKyAgICAgIGlmICghY20uc29tZXRo
aW5nU2VsZWN0ZWQoKSkgdGUudmFsdWUgPSBpbnB1dC5wcmV2SW5wdXQgPSAiICI7CisgICAgICBp
bnB1dC5jb250ZXh0TWVudVBlbmRpbmcgPSB0cnVlOworICAgICAgZGlzcGxheS5zZWxGb3JDb250
ZXh0TWVudSA9IGNtLmRvYy5zZWw7CisgICAgICBjbGVhclRpbWVvdXQoZGlzcGxheS5kZXRlY3Rp
bmdTZWxlY3RBbGwpOworCisgICAgICAvLyBTZWxlY3QtYWxsIHdpbGwgYmUgZ3JleWVkIG91dCBp
ZiB0aGVyZSdzIG5vdGhpbmcgdG8gc2VsZWN0LCBzbworICAgICAgLy8gdGhpcyBhZGRzIGEgemVy
by13aWR0aCBzcGFjZSBzbyB0aGF0IHdlIGNhbiBsYXRlciBjaGVjayB3aGV0aGVyCisgICAgICAv
LyBpdCBnb3Qgc2VsZWN0ZWQuCisgICAgICBmdW5jdGlvbiBwcmVwYXJlU2VsZWN0QWxsSGFjaygp
IHsKKyAgICAgICAgaWYgKHRlLnNlbGVjdGlvblN0YXJ0ICE9IG51bGwpIHsKKyAgICAgICAgICB2
YXIgc2VsZWN0ZWQgPSBjbS5zb21ldGhpbmdTZWxlY3RlZCgpOworICAgICAgICAgIHZhciBleHR2
YWwgPSAiXHUyMDBiIiArIChzZWxlY3RlZCA/IHRlLnZhbHVlIDogIiIpOworICAgICAgICAgIHRl
LnZhbHVlID0gIlx1MjFkYSI7IC8vIFVzZWQgdG8gY2F0Y2ggY29udGV4dC1tZW51IHVuZG8KKyAg
ICAgICAgICB0ZS52YWx1ZSA9IGV4dHZhbDsKKyAgICAgICAgICBpbnB1dC5wcmV2SW5wdXQgPSBz
ZWxlY3RlZCA/ICIiIDogIlx1MjAwYiI7CisgICAgICAgICAgdGUuc2VsZWN0aW9uU3RhcnQgPSAx
OyB0ZS5zZWxlY3Rpb25FbmQgPSBleHR2YWwubGVuZ3RoOworICAgICAgICAgIC8vIFJlLXNldCB0
aGlzLCBpbiBjYXNlIHNvbWUgb3RoZXIgaGFuZGxlciB0b3VjaGVkIHRoZQorICAgICAgICAgIC8v
IHNlbGVjdGlvbiBpbiB0aGUgbWVhbnRpbWUuCisgICAgICAgICAgZGlzcGxheS5zZWxGb3JDb250
ZXh0TWVudSA9IGNtLmRvYy5zZWw7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZ1bmN0aW9u
IHJlaGlkZSgpIHsKKyAgICAgICAgaW5wdXQuY29udGV4dE1lbnVQZW5kaW5nID0gZmFsc2U7Cisg
ICAgICAgIGlucHV0LndyYXBwZXIuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOworICAgICAg
ICB0ZS5zdHlsZS5jc3NUZXh0ID0gb2xkQ1NTOworICAgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lv
biA8IDkpIGRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AoZGlzcGxheS5zY3JvbGxlci5z
Y3JvbGxUb3AgPSBzY3JvbGxQb3MpOworCisgICAgICAgIC8vIFRyeSB0byBkZXRlY3QgdGhlIHVz
ZXIgY2hvb3Npbmcgc2VsZWN0LWFsbAorICAgICAgICBpZiAodGUuc2VsZWN0aW9uU3RhcnQgIT0g
bnVsbCkgeworICAgICAgICAgIGlmICghaWUgfHwgKGllICYmIGllX3ZlcnNpb24gPCA5KSkgcHJl
cGFyZVNlbGVjdEFsbEhhY2soKTsKKyAgICAgICAgICB2YXIgaSA9IDAsIHBvbGwgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGlmIChkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID09IGNtLmRv
Yy5zZWwgJiYgdGUuc2VsZWN0aW9uU3RhcnQgPT0gMCAmJgorICAgICAgICAgICAgICAgIHRlLnNl
bGVjdGlvbkVuZCA+IDAgJiYgaW5wdXQucHJldklucHV0ID09ICJcdTIwMGIiKQorICAgICAgICAg
ICAgICBvcGVyYXRpb24oY20sIGNvbW1hbmRzLnNlbGVjdEFsbCkoY20pOworICAgICAgICAgICAg
ZWxzZSBpZiAoaSsrIDwgMTApIGRpc3BsYXkuZGV0ZWN0aW5nU2VsZWN0QWxsID0gc2V0VGltZW91
dChwb2xsLCA1MDApOworICAgICAgICAgICAgZWxzZSBkaXNwbGF5LmlucHV0LnJlc2V0KCk7Cisg
ICAgICAgICAgfTsKKyAgICAgICAgICBkaXNwbGF5LmRldGVjdGluZ1NlbGVjdEFsbCA9IHNldFRp
bWVvdXQocG9sbCwgMjAwKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoaWUgJiYg
aWVfdmVyc2lvbiA+PSA5KSBwcmVwYXJlU2VsZWN0QWxsSGFjaygpOworICAgICAgaWYgKGNhcHR1
cmVSaWdodENsaWNrKSB7CisgICAgICAgIGVfc3RvcChlKTsKKyAgICAgICAgdmFyIG1vdXNldXAg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgICBvZmYod2luZG93LCAibW91c2V1cCIsIG1vdXNldXAp
OworICAgICAgICAgIHNldFRpbWVvdXQocmVoaWRlLCAyMCk7CisgICAgICAgIH07CisgICAgICAg
IG9uKHdpbmRvdywgIm1vdXNldXAiLCBtb3VzZXVwKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IHNldFRpbWVvdXQocmVoaWRlLCA1MCk7CisgICAgICB9CisgICAgfSwKKworICAgIHNldFVuZWRp
dGFibGU6IG5vdGhpbmcsCisKKyAgICBuZWVkc0NvbnRlbnRBdHRyaWJ1dGU6IGZhbHNlCisgIH0s
IFRleHRhcmVhSW5wdXQucHJvdG90eXBlKTsKKworICAvLyBDT05URU5URURJVEFCTEUgSU5QVVQg
U1RZTEUKKworICBmdW5jdGlvbiBDb250ZW50RWRpdGFibGVJbnB1dChjbSkgeworICAgIHRoaXMu
Y20gPSBjbTsKKyAgICB0aGlzLmxhc3RBbmNob3JOb2RlID0gdGhpcy5sYXN0QW5jaG9yT2Zmc2V0
ID0gdGhpcy5sYXN0Rm9jdXNOb2RlID0gdGhpcy5sYXN0Rm9jdXNPZmZzZXQgPSBudWxsOworICAg
IHRoaXMucG9sbGluZyA9IG5ldyBEZWxheWVkKCk7CisgICAgdGhpcy5ncmFjZVBlcmlvZCA9IGZh
bHNlOworICB9CisKKyAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlID0gY29weU9iaih7
CisgICAgaW5pdDogZnVuY3Rpb24oZGlzcGxheSkgeworICAgICAgdmFyIGlucHV0ID0gdGhpcywg
Y20gPSBpbnB1dC5jbTsKKyAgICAgIHZhciBkaXYgPSBpbnB1dC5kaXYgPSBkaXNwbGF5LmxpbmVE
aXY7CisgICAgICBkaXYuY29udGVudEVkaXRhYmxlID0gInRydWUiOworICAgICAgZGlzYWJsZUJy
b3dzZXJNYWdpYyhkaXYpOworCisgICAgICBvbihkaXYsICJwYXN0ZSIsIGZ1bmN0aW9uKGUpIHsg
aGFuZGxlUGFzdGUoZSwgY20pOyB9KQorCisgICAgICBvbihkaXYsICJjb21wb3NpdGlvbnN0YXJ0
IiwgZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgZGF0YSA9IGUuZGF0YTsKKyAgICAgICAgaW5w
dXQuY29tcG9zaW5nID0ge3NlbDogY20uZG9jLnNlbCwgZGF0YTogZGF0YSwgc3RhcnREYXRhOiBk
YXRhfTsKKyAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47CisgICAgICAgIHZhciBwcmltID0gY20u
ZG9jLnNlbC5wcmltYXJ5KCk7CisgICAgICAgIHZhciBsaW5lID0gY20uZ2V0TGluZShwcmltLmhl
YWQubGluZSk7CisgICAgICAgIHZhciBmb3VuZCA9IGxpbmUuaW5kZXhPZihkYXRhLCBNYXRoLm1h
eCgwLCBwcmltLmhlYWQuY2ggLSBkYXRhLmxlbmd0aCkpOworICAgICAgICBpZiAoZm91bmQgPiAt
MSAmJiBmb3VuZCA8PSBwcmltLmhlYWQuY2gpCisgICAgICAgICAgaW5wdXQuY29tcG9zaW5nLnNl
bCA9IHNpbXBsZVNlbGVjdGlvbihQb3MocHJpbS5oZWFkLmxpbmUsIGZvdW5kKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhwcmltLmhlYWQubGlu
ZSwgZm91bmQgKyBkYXRhLmxlbmd0aCkpOworICAgICAgfSk7CisgICAgICBvbihkaXYsICJjb21w
b3NpdGlvbnVwZGF0ZSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaW5wdXQuY29tcG9zaW5nLmRh
dGEgPSBlLmRhdGE7CisgICAgICB9KTsKKyAgICAgIG9uKGRpdiwgImNvbXBvc2l0aW9uZW5kIiwg
ZnVuY3Rpb24oZSkgeworICAgICAgICB2YXIgb3VycyA9IGlucHV0LmNvbXBvc2luZzsKKyAgICAg
ICAgaWYgKCFvdXJzKSByZXR1cm47CisgICAgICAgIGlmIChlLmRhdGEgIT0gb3Vycy5zdGFydERh
dGEgJiYgIS9cdTIwMGIvLnRlc3QoZS5kYXRhKSkKKyAgICAgICAgICBvdXJzLmRhdGEgPSBlLmRh
dGE7CisgICAgICAgIC8vIE5lZWQgYSBzbWFsbCBkZWxheSB0byBwcmV2ZW50IG90aGVyIGNvZGUg
KGlucHV0IGV2ZW50LAorICAgICAgICAvLyBzZWxlY3Rpb24gcG9sbGluZykgZnJvbSBkb2luZyBk
YW1hZ2Ugd2hlbiBmaXJlZCByaWdodCBhZnRlcgorICAgICAgICAvLyBjb21wb3NpdGlvbmVuZC4K
KyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICBpZiAoIW91cnMuaGFu
ZGxlZCkKKyAgICAgICAgICAgIGlucHV0LmFwcGx5Q29tcG9zaXRpb24ob3Vycyk7CisgICAgICAg
ICAgaWYgKGlucHV0LmNvbXBvc2luZyA9PSBvdXJzKQorICAgICAgICAgICAgaW5wdXQuY29tcG9z
aW5nID0gbnVsbDsKKyAgICAgICAgfSwgNTApOworICAgICAgfSk7CisKKyAgICAgIG9uKGRpdiwg
InRvdWNoc3RhcnQiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaW5wdXQuZm9yY2VDb21wb3NpdGlv
bkVuZCgpOworICAgICAgfSk7CisKKyAgICAgIG9uKGRpdiwgImlucHV0IiwgZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmIChpbnB1dC5jb21wb3NpbmcpIHJldHVybjsKKyAgICAgICAgaWYgKCFpbnB1
dC5wb2xsQ29udGVudCgpKQorICAgICAgICAgIHJ1bkluT3AoaW5wdXQuY20sIGZ1bmN0aW9uKCkg
e3JlZ0NoYW5nZShjbSk7fSk7CisgICAgICB9KTsKKworICAgICAgZnVuY3Rpb24gb25Db3B5Q3V0
KGUpIHsKKyAgICAgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsKKyAgICAgICAgICBs
YXN0Q29waWVkID0gY20uZ2V0U2VsZWN0aW9ucygpOworICAgICAgICAgIGlmIChlLnR5cGUgPT0g
ImN1dCIpIGNtLnJlcGxhY2VTZWxlY3Rpb24oIiIsIG51bGwsICJjdXQiKTsKKyAgICAgICAgfSBl
bHNlIGlmICghY20ub3B0aW9ucy5saW5lV2lzZUNvcHlDdXQpIHsKKyAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdmFyIHJhbmdlcyA9IGNvcHlhYmxlUmFuZ2Vz
KGNtKTsKKyAgICAgICAgICBsYXN0Q29waWVkID0gcmFuZ2VzLnRleHQ7CisgICAgICAgICAgaWYg
KGUudHlwZSA9PSAiY3V0IikgeworICAgICAgICAgICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICBjbS5zZXRTZWxlY3Rpb25zKHJhbmdlcy5yYW5nZXMsIDAsIHNlbF9k
b250U2Nyb2xsKTsKKyAgICAgICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiIiwgbnVsbCwg
ImN1dCIpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IC8vIGlPUyBleHBvc2VzIHRoZSBjbGlwYm9hcmQgQVBJLCBidXQgc2VlbXMgdG8gZGlzY2FyZCBj
b250ZW50IGluc2VydGVkIGludG8gaXQKKyAgICAgICAgaWYgKGUuY2xpcGJvYXJkRGF0YSAmJiAh
aW9zKSB7CisgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgIGUuY2xpcGJv
YXJkRGF0YS5jbGVhckRhdGEoKTsKKyAgICAgICAgICBlLmNsaXBib2FyZERhdGEuc2V0RGF0YSgi
dGV4dC9wbGFpbiIsIGxhc3RDb3BpZWQuam9pbigiXG4iKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgLy8gT2xkLWZhc2hpb25lZCBicmllZmx5LWZvY3VzLWEtdGV4dGFyZWEgaGFjawor
ICAgICAgICAgIHZhciBrbHVkZ2UgPSBoaWRkZW5UZXh0YXJlYSgpLCB0ZSA9IGtsdWRnZS5maXJz
dENoaWxkOworICAgICAgICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLmluc2VydEJlZm9yZShrbHVk
Z2UsIGNtLmRpc3BsYXkubGluZVNwYWNlLmZpcnN0Q2hpbGQpOworICAgICAgICAgIHRlLnZhbHVl
ID0gbGFzdENvcGllZC5qb2luKCJcbiIpOworICAgICAgICAgIHZhciBoYWRGb2N1cyA9IGRvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQ7CisgICAgICAgICAgc2VsZWN0SW5wdXQodGUpOworICAgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjbS5kaXNwbGF5LmxpbmVTcGFj
ZS5yZW1vdmVDaGlsZChrbHVkZ2UpOworICAgICAgICAgICAgaGFkRm9jdXMuZm9jdXMoKTsKKyAg
ICAgICAgICB9LCA1MCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIG9uKGRpdiwgImNvcHki
LCBvbkNvcHlDdXQpOworICAgICAgb24oZGl2LCAiY3V0Iiwgb25Db3B5Q3V0KTsKKyAgICB9LAor
CisgICAgcHJlcGFyZVNlbGVjdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgcmVzdWx0ID0g
cHJlcGFyZVNlbGVjdGlvbih0aGlzLmNtLCBmYWxzZSk7CisgICAgICByZXN1bHQuZm9jdXMgPSB0
aGlzLmNtLnN0YXRlLmZvY3VzZWQ7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAg
ICBzaG93U2VsZWN0aW9uOiBmdW5jdGlvbihpbmZvKSB7CisgICAgICBpZiAoIWluZm8gfHwgIXRo
aXMuY20uZGlzcGxheS52aWV3Lmxlbmd0aCkgcmV0dXJuOworICAgICAgaWYgKGluZm8uZm9jdXMp
IHRoaXMuc2hvd1ByaW1hcnlTZWxlY3Rpb24oKTsKKyAgICAgIHRoaXMuc2hvd011bHRpcGxlU2Vs
ZWN0aW9ucyhpbmZvKTsKKyAgICB9LAorCisgICAgc2hvd1ByaW1hcnlTZWxlY3Rpb246IGZ1bmN0
aW9uKCkgeworICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSwgcHJpbSA9IHRo
aXMuY20uZG9jLnNlbC5wcmltYXJ5KCk7CisgICAgICB2YXIgY3VyQW5jaG9yID0gZG9tVG9Qb3Mo
dGhpcy5jbSwgc2VsLmFuY2hvck5vZGUsIHNlbC5hbmNob3JPZmZzZXQpOworICAgICAgdmFyIGN1
ckZvY3VzID0gZG9tVG9Qb3ModGhpcy5jbSwgc2VsLmZvY3VzTm9kZSwgc2VsLmZvY3VzT2Zmc2V0
KTsKKyAgICAgIGlmIChjdXJBbmNob3IgJiYgIWN1ckFuY2hvci5iYWQgJiYgY3VyRm9jdXMgJiYg
IWN1ckZvY3VzLmJhZCAmJgorICAgICAgICAgIGNtcChtaW5Qb3MoY3VyQW5jaG9yLCBjdXJGb2N1
cyksIHByaW0uZnJvbSgpKSA9PSAwICYmCisgICAgICAgICAgY21wKG1heFBvcyhjdXJBbmNob3Is
IGN1ckZvY3VzKSwgcHJpbS50bygpKSA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICAgIHZh
ciBzdGFydCA9IHBvc1RvRE9NKHRoaXMuY20sIHByaW0uZnJvbSgpKTsKKyAgICAgIHZhciBlbmQg
PSBwb3NUb0RPTSh0aGlzLmNtLCBwcmltLnRvKCkpOworICAgICAgaWYgKCFzdGFydCAmJiAhZW5k
KSByZXR1cm47CisKKyAgICAgIHZhciB2aWV3ID0gdGhpcy5jbS5kaXNwbGF5LnZpZXc7CisgICAg
ICB2YXIgb2xkID0gc2VsLnJhbmdlQ291bnQgJiYgc2VsLmdldFJhbmdlQXQoMCk7CisgICAgICBp
ZiAoIXN0YXJ0KSB7CisgICAgICAgIHN0YXJ0ID0ge25vZGU6IHZpZXdbMF0ubWVhc3VyZS5tYXBb
Ml0sIG9mZnNldDogMH07CisgICAgICB9IGVsc2UgaWYgKCFlbmQpIHsgLy8gRklYTUUgZGFuZ2Vy
b3VzbHkgaGFja3kKKyAgICAgICAgdmFyIG1lYXN1cmUgPSB2aWV3W3ZpZXcubGVuZ3RoIC0gMV0u
bWVhc3VyZTsKKyAgICAgICAgdmFyIG1hcCA9IG1lYXN1cmUubWFwcyA/IG1lYXN1cmUubWFwc1tt
ZWFzdXJlLm1hcHMubGVuZ3RoIC0gMV0gOiBtZWFzdXJlLm1hcDsKKyAgICAgICAgZW5kID0ge25v
ZGU6IG1hcFttYXAubGVuZ3RoIC0gMV0sIG9mZnNldDogbWFwW21hcC5sZW5ndGggLSAyXSAtIG1h
cFttYXAubGVuZ3RoIC0gM119OworICAgICAgfQorCisgICAgICB0cnkgeyB2YXIgcm5nID0gcmFu
Z2Uoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0LCBlbmQub2Zmc2V0LCBlbmQubm9kZSk7IH0KKyAg
ICAgIGNhdGNoKGUpIHt9IC8vIE91ciBtb2RlbCBvZiB0aGUgRE9NIG1pZ2h0IGJlIG91dGRhdGVk
LCBpbiB3aGljaCBjYXNlIHRoZSByYW5nZSB3ZSB0cnkgdG8gc2V0IGNhbiBiZSBpbXBvc3NpYmxl
CisgICAgICBpZiAocm5nKSB7CisgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICAg
ICAgc2VsLmFkZFJhbmdlKHJuZyk7CisgICAgICAgIGlmIChvbGQgJiYgc2VsLmFuY2hvck5vZGUg
PT0gbnVsbCkgc2VsLmFkZFJhbmdlKG9sZCk7CisgICAgICAgIGVsc2UgaWYgKGdlY2tvKSB0aGlz
LnN0YXJ0R3JhY2VQZXJpb2QoKTsKKyAgICAgIH0KKyAgICAgIHRoaXMucmVtZW1iZXJTZWxlY3Rp
b24oKTsKKyAgICB9LAorCisgICAgc3RhcnRHcmFjZVBlcmlvZDogZnVuY3Rpb24oKSB7CisgICAg
ICB2YXIgaW5wdXQgPSB0aGlzOworICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZ3JhY2VQZXJpb2Qp
OworICAgICAgdGhpcy5ncmFjZVBlcmlvZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg
ICAgIGlucHV0LmdyYWNlUGVyaW9kID0gZmFsc2U7CisgICAgICAgIGlmIChpbnB1dC5zZWxlY3Rp
b25DaGFuZ2VkKCkpCisgICAgICAgICAgaW5wdXQuY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgeyBp
bnB1dC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsgfSk7CisgICAgICB9LCAyMCk7
CisgICAgfSwKKworICAgIHNob3dNdWx0aXBsZVNlbGVjdGlvbnM6IGZ1bmN0aW9uKGluZm8pIHsK
KyAgICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKHRoaXMuY20uZGlzcGxheS5jdXJzb3JEaXYsIGlu
Zm8uY3Vyc29ycyk7CisgICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZCh0aGlzLmNtLmRpc3BsYXku
c2VsZWN0aW9uRGl2LCBpbmZvLnNlbGVjdGlvbik7CisgICAgfSwKKworICAgIHJlbWVtYmVyU2Vs
ZWN0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCk7CisgICAgICB0aGlzLmxhc3RBbmNob3JOb2RlID0gc2VsLmFuY2hvck5vZGU7IHRoaXMubGFz
dEFuY2hvck9mZnNldCA9IHNlbC5hbmNob3JPZmZzZXQ7CisgICAgICB0aGlzLmxhc3RGb2N1c05v
ZGUgPSBzZWwuZm9jdXNOb2RlOyB0aGlzLmxhc3RGb2N1c09mZnNldCA9IHNlbC5mb2N1c09mZnNl
dDsKKyAgICB9LAorCisgICAgc2VsZWN0aW9uSW5FZGl0b3I6IGZ1bmN0aW9uKCkgeworICAgICAg
dmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKyAgICAgIGlmICghc2VsLnJhbmdlQ291
bnQpIHJldHVybiBmYWxzZTsKKyAgICAgIHZhciBub2RlID0gc2VsLmdldFJhbmdlQXQoMCkuY29t
bW9uQW5jZXN0b3JDb250YWluZXI7CisgICAgICByZXR1cm4gY29udGFpbnModGhpcy5kaXYsIG5v
ZGUpOworICAgIH0sCisKKyAgICBmb2N1czogZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy5j
bS5vcHRpb25zLnJlYWRPbmx5ICE9ICJub2N1cnNvciIpIHRoaXMuZGl2LmZvY3VzKCk7CisgICAg
fSwKKyAgICBibHVyOiBmdW5jdGlvbigpIHsgdGhpcy5kaXYuYmx1cigpOyB9LAorICAgIGdldEZp
ZWxkOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZGl2OyB9LAorCisgICAgc3VwcG9ydHNUb3Vj
aDogZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9LAorCisgICAgcmVjZWl2ZWRGb2N1czogZnVu
Y3Rpb24oKSB7CisgICAgICB2YXIgaW5wdXQgPSB0aGlzOworICAgICAgaWYgKHRoaXMuc2VsZWN0
aW9uSW5FZGl0b3IoKSkKKyAgICAgICAgdGhpcy5wb2xsU2VsZWN0aW9uKCk7CisgICAgICBlbHNl
CisgICAgICAgIHJ1bkluT3AodGhpcy5jbSwgZnVuY3Rpb24oKSB7IGlucHV0LmNtLmN1ck9wLnNl
bGVjdGlvbkNoYW5nZWQgPSB0cnVlOyB9KTsKKworICAgICAgZnVuY3Rpb24gcG9sbCgpIHsKKyAg
ICAgICAgaWYgKGlucHV0LmNtLnN0YXRlLmZvY3VzZWQpIHsKKyAgICAgICAgICBpbnB1dC5wb2xs
U2VsZWN0aW9uKCk7CisgICAgICAgICAgaW5wdXQucG9sbGluZy5zZXQoaW5wdXQuY20ub3B0aW9u
cy5wb2xsSW50ZXJ2YWwsIHBvbGwpOworICAgICAgICB9CisgICAgICB9CisgICAgICB0aGlzLnBv
bGxpbmcuc2V0KHRoaXMuY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsIHBvbGwpOworICAgIH0sCisK
KyAgICBzZWxlY3Rpb25DaGFuZ2VkOiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBzZWwgPSB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCk7CisgICAgICByZXR1cm4gc2VsLmFuY2hvck5vZGUgIT0gdGhpcy5s
YXN0QW5jaG9yTm9kZSB8fCBzZWwuYW5jaG9yT2Zmc2V0ICE9IHRoaXMubGFzdEFuY2hvck9mZnNl
dCB8fAorICAgICAgICBzZWwuZm9jdXNOb2RlICE9IHRoaXMubGFzdEZvY3VzTm9kZSB8fCBzZWwu
Zm9jdXNPZmZzZXQgIT0gdGhpcy5sYXN0Rm9jdXNPZmZzZXQ7CisgICAgfSwKKworICAgIHBvbGxT
ZWxlY3Rpb246IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKCF0aGlzLmNvbXBvc2luZyAmJiAhdGhp
cy5ncmFjZVBlcmlvZCAmJiB0aGlzLnNlbGVjdGlvbkNoYW5nZWQoKSkgeworICAgICAgICB2YXIg
c2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpLCBjbSA9IHRoaXMuY207CisgICAgICAgIHRoaXMu
cmVtZW1iZXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmFyIGFuY2hvciA9IGRvbVRvUG9zKGNtLCBz
ZWwuYW5jaG9yTm9kZSwgc2VsLmFuY2hvck9mZnNldCk7CisgICAgICAgIHZhciBoZWFkID0gZG9t
VG9Qb3MoY20sIHNlbC5mb2N1c05vZGUsIHNlbC5mb2N1c09mZnNldCk7CisgICAgICAgIGlmIChh
bmNob3IgJiYgaGVhZCkgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgc2V0U2Vs
ZWN0aW9uKGNtLmRvYywgc2ltcGxlU2VsZWN0aW9uKGFuY2hvciwgaGVhZCksIHNlbF9kb250U2Ny
b2xsKTsKKyAgICAgICAgICBpZiAoYW5jaG9yLmJhZCB8fCBoZWFkLmJhZCkgY20uY3VyT3Auc2Vs
ZWN0aW9uQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0pOworICAgICAgfQorICAgIH0sCisKKyAg
ICBwb2xsQ29udGVudDogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgY20gPSB0aGlzLmNtLCBkaXNw
bGF5ID0gY20uZGlzcGxheSwgc2VsID0gY20uZG9jLnNlbC5wcmltYXJ5KCk7CisgICAgICB2YXIg
ZnJvbSA9IHNlbC5mcm9tKCksIHRvID0gc2VsLnRvKCk7CisgICAgICBpZiAoZnJvbS5saW5lIDwg
ZGlzcGxheS52aWV3RnJvbSB8fCB0by5saW5lID4gZGlzcGxheS52aWV3VG8gLSAxKSByZXR1cm4g
ZmFsc2U7CisKKyAgICAgIHZhciBmcm9tSW5kZXg7CisgICAgICBpZiAoZnJvbS5saW5lID09IGRp
c3BsYXkudmlld0Zyb20gfHwgKGZyb21JbmRleCA9IGZpbmRWaWV3SW5kZXgoY20sIGZyb20ubGlu
ZSkpID09IDApIHsKKyAgICAgICAgdmFyIGZyb21MaW5lID0gbGluZU5vKGRpc3BsYXkudmlld1sw
XS5saW5lKTsKKyAgICAgICAgdmFyIGZyb21Ob2RlID0gZGlzcGxheS52aWV3WzBdLm5vZGU7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICB2YXIgZnJvbUxpbmUgPSBsaW5lTm8oZGlzcGxheS52aWV3
W2Zyb21JbmRleF0ubGluZSk7CisgICAgICAgIHZhciBmcm9tTm9kZSA9IGRpc3BsYXkudmlld1tm
cm9tSW5kZXggLSAxXS5ub2RlLm5leHRTaWJsaW5nOworICAgICAgfQorICAgICAgdmFyIHRvSW5k
ZXggPSBmaW5kVmlld0luZGV4KGNtLCB0by5saW5lKTsKKyAgICAgIGlmICh0b0luZGV4ID09IGRp
c3BsYXkudmlldy5sZW5ndGggLSAxKSB7CisgICAgICAgIHZhciB0b0xpbmUgPSBkaXNwbGF5LnZp
ZXdUbyAtIDE7CisgICAgICAgIHZhciB0b05vZGUgPSBkaXNwbGF5LmxpbmVEaXYubGFzdENoaWxk
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHRvTGluZSA9IGxpbmVObyhkaXNwbGF5LnZp
ZXdbdG9JbmRleCArIDFdLmxpbmUpIC0gMTsKKyAgICAgICAgdmFyIHRvTm9kZSA9IGRpc3BsYXku
dmlld1t0b0luZGV4ICsgMV0ubm9kZS5wcmV2aW91c1NpYmxpbmc7CisgICAgICB9CisKKyAgICAg
IHZhciBuZXdUZXh0ID0gY20uZG9jLnNwbGl0TGluZXMoZG9tVGV4dEJldHdlZW4oY20sIGZyb21O
b2RlLCB0b05vZGUsIGZyb21MaW5lLCB0b0xpbmUpKTsKKyAgICAgIHZhciBvbGRUZXh0ID0gZ2V0
QmV0d2VlbihjbS5kb2MsIFBvcyhmcm9tTGluZSwgMCksIFBvcyh0b0xpbmUsIGdldExpbmUoY20u
ZG9jLCB0b0xpbmUpLnRleHQubGVuZ3RoKSk7CisgICAgICB3aGlsZSAobmV3VGV4dC5sZW5ndGgg
PiAxICYmIG9sZFRleHQubGVuZ3RoID4gMSkgeworICAgICAgICBpZiAobHN0KG5ld1RleHQpID09
IGxzdChvbGRUZXh0KSkgeyBuZXdUZXh0LnBvcCgpOyBvbGRUZXh0LnBvcCgpOyB0b0xpbmUtLTsg
fQorICAgICAgICBlbHNlIGlmIChuZXdUZXh0WzBdID09IG9sZFRleHRbMF0pIHsgbmV3VGV4dC5z
aGlmdCgpOyBvbGRUZXh0LnNoaWZ0KCk7IGZyb21MaW5lKys7IH0KKyAgICAgICAgZWxzZSBicmVh
azsKKyAgICAgIH0KKworICAgICAgdmFyIGN1dEZyb250ID0gMCwgY3V0RW5kID0gMDsKKyAgICAg
IHZhciBuZXdUb3AgPSBuZXdUZXh0WzBdLCBvbGRUb3AgPSBvbGRUZXh0WzBdLCBtYXhDdXRGcm9u
dCA9IE1hdGgubWluKG5ld1RvcC5sZW5ndGgsIG9sZFRvcC5sZW5ndGgpOworICAgICAgd2hpbGUg
KGN1dEZyb250IDwgbWF4Q3V0RnJvbnQgJiYgbmV3VG9wLmNoYXJDb2RlQXQoY3V0RnJvbnQpID09
IG9sZFRvcC5jaGFyQ29kZUF0KGN1dEZyb250KSkKKyAgICAgICAgKytjdXRGcm9udDsKKyAgICAg
IHZhciBuZXdCb3QgPSBsc3QobmV3VGV4dCksIG9sZEJvdCA9IGxzdChvbGRUZXh0KTsKKyAgICAg
IHZhciBtYXhDdXRFbmQgPSBNYXRoLm1pbihuZXdCb3QubGVuZ3RoIC0gKG5ld1RleHQubGVuZ3Ro
ID09IDEgPyBjdXRGcm9udCA6IDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9s
ZEJvdC5sZW5ndGggLSAob2xkVGV4dC5sZW5ndGggPT0gMSA/IGN1dEZyb250IDogMCkpOworICAg
ICAgd2hpbGUgKGN1dEVuZCA8IG1heEN1dEVuZCAmJgorICAgICAgICAgICAgIG5ld0JvdC5jaGFy
Q29kZUF0KG5ld0JvdC5sZW5ndGggLSBjdXRFbmQgLSAxKSA9PSBvbGRCb3QuY2hhckNvZGVBdChv
bGRCb3QubGVuZ3RoIC0gY3V0RW5kIC0gMSkpCisgICAgICAgICsrY3V0RW5kOworCisgICAgICBu
ZXdUZXh0W25ld1RleHQubGVuZ3RoIC0gMV0gPSBuZXdCb3Quc2xpY2UoMCwgbmV3Qm90Lmxlbmd0
aCAtIGN1dEVuZCk7CisgICAgICBuZXdUZXh0WzBdID0gbmV3VGV4dFswXS5zbGljZShjdXRGcm9u
dCk7CisKKyAgICAgIHZhciBjaEZyb20gPSBQb3MoZnJvbUxpbmUsIGN1dEZyb250KTsKKyAgICAg
IHZhciBjaFRvID0gUG9zKHRvTGluZSwgb2xkVGV4dC5sZW5ndGggPyBsc3Qob2xkVGV4dCkubGVu
Z3RoIC0gY3V0RW5kIDogMCk7CisgICAgICBpZiAobmV3VGV4dC5sZW5ndGggPiAxIHx8IG5ld1Rl
eHRbMF0gfHwgY21wKGNoRnJvbSwgY2hUbykpIHsKKyAgICAgICAgcmVwbGFjZVJhbmdlKGNtLmRv
YywgbmV3VGV4dCwgY2hGcm9tLCBjaFRvLCAiK2lucHV0Iik7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgfQorICAgIH0sCisKKyAgICBlbnN1cmVQb2xsZWQ6IGZ1bmN0aW9uKCkgeworICAg
ICAgdGhpcy5mb3JjZUNvbXBvc2l0aW9uRW5kKCk7CisgICAgfSwKKyAgICByZXNldDogZnVuY3Rp
b24oKSB7CisgICAgICB0aGlzLmZvcmNlQ29tcG9zaXRpb25FbmQoKTsKKyAgICB9LAorICAgIGZv
cmNlQ29tcG9zaXRpb25FbmQ6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKCF0aGlzLmNvbXBvc2lu
ZyB8fCB0aGlzLmNvbXBvc2luZy5oYW5kbGVkKSByZXR1cm47CisgICAgICB0aGlzLmFwcGx5Q29t
cG9zaXRpb24odGhpcy5jb21wb3NpbmcpOworICAgICAgdGhpcy5jb21wb3NpbmcuaGFuZGxlZCA9
IHRydWU7CisgICAgICB0aGlzLmRpdi5ibHVyKCk7CisgICAgICB0aGlzLmRpdi5mb2N1cygpOwor
ICAgIH0sCisgICAgYXBwbHlDb21wb3NpdGlvbjogZnVuY3Rpb24oY29tcG9zaW5nKSB7CisgICAg
ICBpZiAoY29tcG9zaW5nLmRhdGEgJiYgY29tcG9zaW5nLmRhdGEgIT0gY29tcG9zaW5nLnN0YXJ0
RGF0YSkKKyAgICAgICAgb3BlcmF0aW9uKHRoaXMuY20sIGFwcGx5VGV4dElucHV0KSh0aGlzLmNt
LCBjb21wb3NpbmcuZGF0YSwgMCwgY29tcG9zaW5nLnNlbCk7CisgICAgfSwKKworICAgIHNldFVu
ZWRpdGFibGU6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJjb250
ZW50ZWRpdGFibGUiLCAiZmFsc2UiKTsKKyAgICB9LAorCisgICAgb25LZXlQcmVzczogZnVuY3Rp
b24oZSkgeworICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgb3BlcmF0aW9uKHRoaXMu
Y20sIGFwcGx5VGV4dElucHV0KSh0aGlzLmNtLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNv
ZGUgPT0gbnVsbCA/IGUua2V5Q29kZSA6IGUuY2hhckNvZGUpLCAwKTsKKyAgICB9LAorCisgICAg
b25Db250ZXh0TWVudTogbm90aGluZywKKyAgICByZXNldFBvc2l0aW9uOiBub3RoaW5nLAorCisg
ICAgbmVlZHNDb250ZW50QXR0cmlidXRlOiB0cnVlCisgIH0sIENvbnRlbnRFZGl0YWJsZUlucHV0
LnByb3RvdHlwZSk7CisKKyAgZnVuY3Rpb24gcG9zVG9ET00oY20sIHBvcykgeworICAgIHZhciB2
aWV3ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBwb3MubGluZSk7CisgICAgaWYgKCF2aWV3IHx8IHZp
ZXcuaGlkZGVuKSByZXR1cm4gbnVsbDsKKyAgICB2YXIgbGluZSA9IGdldExpbmUoY20uZG9jLCBw
b3MubGluZSk7CisgICAgdmFyIGluZm8gPSBtYXBGcm9tTGluZVZpZXcodmlldywgbGluZSwgcG9z
LmxpbmUpOworCisgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSksIHNpZGUgPSAibGVmdCI7
CisgICAgaWYgKG9yZGVyKSB7CisgICAgICB2YXIgcGFydFBvcyA9IGdldEJpZGlQYXJ0QXQob3Jk
ZXIsIHBvcy5jaCk7CisgICAgICBzaWRlID0gcGFydFBvcyAlIDIgPyAicmlnaHQiIDogImxlZnQi
OworICAgIH0KKyAgICB2YXIgcmVzdWx0ID0gbm9kZUFuZE9mZnNldEluTGluZU1hcChpbmZvLm1h
cCwgcG9zLmNoLCBzaWRlKTsKKyAgICByZXN1bHQub2Zmc2V0ID0gcmVzdWx0LmNvbGxhcHNlID09
ICJyaWdodCIgPyByZXN1bHQuZW5kIDogcmVzdWx0LnN0YXJ0OworICAgIHJldHVybiByZXN1bHQ7
CisgIH0KKworICBmdW5jdGlvbiBiYWRQb3MocG9zLCBiYWQpIHsgaWYgKGJhZCkgcG9zLmJhZCA9
IHRydWU7IHJldHVybiBwb3M7IH0KKworICBmdW5jdGlvbiBkb21Ub1BvcyhjbSwgbm9kZSwgb2Zm
c2V0KSB7CisgICAgdmFyIGxpbmVOb2RlOworICAgIGlmIChub2RlID09IGNtLmRpc3BsYXkubGlu
ZURpdikgeworICAgICAgbGluZU5vZGUgPSBjbS5kaXNwbGF5LmxpbmVEaXYuY2hpbGROb2Rlc1tv
ZmZzZXRdOworICAgICAgaWYgKCFsaW5lTm9kZSkgcmV0dXJuIGJhZFBvcyhjbS5jbGlwUG9zKFBv
cyhjbS5kaXNwbGF5LnZpZXdUbyAtIDEpKSwgdHJ1ZSk7CisgICAgICBub2RlID0gbnVsbDsgb2Zm
c2V0ID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgZm9yIChsaW5lTm9kZSA9IG5vZGU7OyBsaW5l
Tm9kZSA9IGxpbmVOb2RlLnBhcmVudE5vZGUpIHsKKyAgICAgICAgaWYgKCFsaW5lTm9kZSB8fCBs
aW5lTm9kZSA9PSBjbS5kaXNwbGF5LmxpbmVEaXYpIHJldHVybiBudWxsOworICAgICAgICBpZiAo
bGluZU5vZGUucGFyZW50Tm9kZSAmJiBsaW5lTm9kZS5wYXJlbnROb2RlID09IGNtLmRpc3BsYXku
bGluZURpdikgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Y20uZGlzcGxheS52aWV3Lmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgbGluZVZpZXcgPSBjbS5k
aXNwbGF5LnZpZXdbaV07CisgICAgICBpZiAobGluZVZpZXcubm9kZSA9PSBsaW5lTm9kZSkKKyAg
ICAgICAgcmV0dXJuIGxvY2F0ZU5vZGVJbkxpbmVWaWV3KGxpbmVWaWV3LCBub2RlLCBvZmZzZXQp
OworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGxvY2F0ZU5vZGVJbkxpbmVWaWV3KGxpbmVWaWV3
LCBub2RlLCBvZmZzZXQpIHsKKyAgICB2YXIgd3JhcHBlciA9IGxpbmVWaWV3LnRleHQuZmlyc3RD
aGlsZCwgYmFkID0gZmFsc2U7CisgICAgaWYgKCFub2RlIHx8ICFjb250YWlucyh3cmFwcGVyLCBu
b2RlKSkgcmV0dXJuIGJhZFBvcyhQb3MobGluZU5vKGxpbmVWaWV3LmxpbmUpLCAwKSwgdHJ1ZSk7
CisgICAgaWYgKG5vZGUgPT0gd3JhcHBlcikgeworICAgICAgYmFkID0gdHJ1ZTsKKyAgICAgIG5v
ZGUgPSB3cmFwcGVyLmNoaWxkTm9kZXNbb2Zmc2V0XTsKKyAgICAgIG9mZnNldCA9IDA7CisgICAg
ICBpZiAoIW5vZGUpIHsKKyAgICAgICAgdmFyIGxpbmUgPSBsaW5lVmlldy5yZXN0ID8gbHN0KGxp
bmVWaWV3LnJlc3QpIDogbGluZVZpZXcubGluZTsKKyAgICAgICAgcmV0dXJuIGJhZFBvcyhQb3Mo
bGluZU5vKGxpbmUpLCBsaW5lLnRleHQubGVuZ3RoKSwgYmFkKTsKKyAgICAgIH0KKyAgICB9CisK
KyAgICB2YXIgdGV4dE5vZGUgPSBub2RlLm5vZGVUeXBlID09IDMgPyBub2RlIDogbnVsbCwgdG9w
Tm9kZSA9IG5vZGU7CisgICAgaWYgKCF0ZXh0Tm9kZSAmJiBub2RlLmNoaWxkTm9kZXMubGVuZ3Ro
ID09IDEgJiYgbm9kZS5maXJzdENoaWxkLm5vZGVUeXBlID09IDMpIHsKKyAgICAgIHRleHROb2Rl
ID0gbm9kZS5maXJzdENoaWxkOworICAgICAgaWYgKG9mZnNldCkgb2Zmc2V0ID0gdGV4dE5vZGUu
bm9kZVZhbHVlLmxlbmd0aDsKKyAgICB9CisgICAgd2hpbGUgKHRvcE5vZGUucGFyZW50Tm9kZSAh
PSB3cmFwcGVyKSB0b3BOb2RlID0gdG9wTm9kZS5wYXJlbnROb2RlOworICAgIHZhciBtZWFzdXJl
ID0gbGluZVZpZXcubWVhc3VyZSwgbWFwcyA9IG1lYXN1cmUubWFwczsKKworICAgIGZ1bmN0aW9u
IGZpbmQodGV4dE5vZGUsIHRvcE5vZGUsIG9mZnNldCkgeworICAgICAgZm9yICh2YXIgaSA9IC0x
OyBpIDwgKG1hcHMgPyBtYXBzLmxlbmd0aCA6IDApOyBpKyspIHsKKyAgICAgICAgdmFyIG1hcCA9
IGkgPCAwID8gbWVhc3VyZS5tYXAgOiBtYXBzW2ldOworICAgICAgICBmb3IgKHZhciBqID0gMDsg
aiA8IG1hcC5sZW5ndGg7IGogKz0gMykgeworICAgICAgICAgIHZhciBjdXJOb2RlID0gbWFwW2og
KyAyXTsKKyAgICAgICAgICBpZiAoY3VyTm9kZSA9PSB0ZXh0Tm9kZSB8fCBjdXJOb2RlID09IHRv
cE5vZGUpIHsKKyAgICAgICAgICAgIHZhciBsaW5lID0gbGluZU5vKGkgPCAwID8gbGluZVZpZXcu
bGluZSA6IGxpbmVWaWV3LnJlc3RbaV0pOworICAgICAgICAgICAgdmFyIGNoID0gbWFwW2pdICsg
b2Zmc2V0OworICAgICAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgY3VyTm9kZSAhPSB0ZXh0Tm9k
ZSkgY2ggPSBtYXBbaiArIChvZmZzZXQgPyAxIDogMCldOworICAgICAgICAgICAgcmV0dXJuIFBv
cyhsaW5lLCBjaCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICAg
IHZhciBmb3VuZCA9IGZpbmQodGV4dE5vZGUsIHRvcE5vZGUsIG9mZnNldCk7CisgICAgaWYgKGZv
dW5kKSByZXR1cm4gYmFkUG9zKGZvdW5kLCBiYWQpOworCisgICAgLy8gRklYTUUgdGhpcyBpcyBh
bGwgcmVhbGx5IHNoYWt5LiBtaWdodCBoYW5kbGUgdGhlIGZldyBjYXNlcyBpdCBuZWVkcyB0byBo
YW5kbGUsIGJ1dCBsaWtlbHkgdG8gY2F1c2UgcHJvYmxlbXMKKyAgICBmb3IgKHZhciBhZnRlciA9
IHRvcE5vZGUubmV4dFNpYmxpbmcsIGRpc3QgPSB0ZXh0Tm9kZSA/IHRleHROb2RlLm5vZGVWYWx1
ZS5sZW5ndGggLSBvZmZzZXQgOiAwOyBhZnRlcjsgYWZ0ZXIgPSBhZnRlci5uZXh0U2libGluZykg
eworICAgICAgZm91bmQgPSBmaW5kKGFmdGVyLCBhZnRlci5maXJzdENoaWxkLCAwKTsKKyAgICAg
IGlmIChmb3VuZCkKKyAgICAgICAgcmV0dXJuIGJhZFBvcyhQb3MoZm91bmQubGluZSwgZm91bmQu
Y2ggLSBkaXN0KSwgYmFkKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZGlzdCArPSBhZnRlci50ZXh0
Q29udGVudC5sZW5ndGg7CisgICAgfQorICAgIGZvciAodmFyIGJlZm9yZSA9IHRvcE5vZGUucHJl
dmlvdXNTaWJsaW5nLCBkaXN0ID0gb2Zmc2V0OyBiZWZvcmU7IGJlZm9yZSA9IGJlZm9yZS5wcmV2
aW91c1NpYmxpbmcpIHsKKyAgICAgIGZvdW5kID0gZmluZChiZWZvcmUsIGJlZm9yZS5maXJzdENo
aWxkLCAtMSk7CisgICAgICBpZiAoZm91bmQpCisgICAgICAgIHJldHVybiBiYWRQb3MoUG9zKGZv
dW5kLmxpbmUsIGZvdW5kLmNoICsgZGlzdCksIGJhZCk7CisgICAgICBlbHNlCisgICAgICAgIGRp
c3QgKz0gYWZ0ZXIudGV4dENvbnRlbnQubGVuZ3RoOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9u
IGRvbVRleHRCZXR3ZWVuKGNtLCBmcm9tLCB0bywgZnJvbUxpbmUsIHRvTGluZSkgeworICAgIHZh
ciB0ZXh0ID0gIiIsIGNsb3NpbmcgPSBmYWxzZSwgbGluZVNlcCA9IGNtLmRvYy5saW5lU2VwYXJh
dG9yKCk7CisgICAgZnVuY3Rpb24gcmVjb2duaXplTWFya2VyKGlkKSB7IHJldHVybiBmdW5jdGlv
bihtYXJrZXIpIHsgcmV0dXJuIG1hcmtlci5pZCA9PSBpZDsgfTsgfQorICAgIGZ1bmN0aW9uIHdh
bGsobm9kZSkgeworICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkgeworICAgICAgICB2YXIg
Y21UZXh0ID0gbm9kZS5nZXRBdHRyaWJ1dGUoImNtLXRleHQiKTsKKyAgICAgICAgaWYgKGNtVGV4
dCAhPSBudWxsKSB7CisgICAgICAgICAgaWYgKGNtVGV4dCA9PSAiIikgY21UZXh0ID0gbm9kZS50
ZXh0Q29udGVudC5yZXBsYWNlKC9cdTIwMGIvZywgIiIpOworICAgICAgICAgIHRleHQgKz0gY21U
ZXh0OworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgbWFya2VySUQg
PSBub2RlLmdldEF0dHJpYnV0ZSgiY20tbWFya2VyIiksIHJhbmdlOworICAgICAgICBpZiAobWFy
a2VySUQpIHsKKyAgICAgICAgICB2YXIgZm91bmQgPSBjbS5maW5kTWFya3MoUG9zKGZyb21MaW5l
LCAwKSwgUG9zKHRvTGluZSArIDEsIDApLCByZWNvZ25pemVNYXJrZXIoK21hcmtlcklEKSk7Cisg
ICAgICAgICAgaWYgKGZvdW5kLmxlbmd0aCAmJiAocmFuZ2UgPSBmb3VuZFswXS5maW5kKCkpKQor
ICAgICAgICAgICAgdGV4dCArPSBnZXRCZXR3ZWVuKGNtLmRvYywgcmFuZ2UuZnJvbSwgcmFuZ2Uu
dG8pLmpvaW4obGluZVNlcCk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGlmIChub2RlLmdldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikgPT0gImZhbHNlIikgcmV0
dXJuOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7
IGkrKykKKyAgICAgICAgICB3YWxrKG5vZGUuY2hpbGROb2Rlc1tpXSk7CisgICAgICAgIGlmICgv
XihwcmV8ZGl2fHApJC9pLnRlc3Qobm9kZS5ub2RlTmFtZSkpCisgICAgICAgICAgY2xvc2luZyA9
IHRydWU7CisgICAgICB9IGVsc2UgaWYgKG5vZGUubm9kZVR5cGUgPT0gMykgeworICAgICAgICB2
YXIgdmFsID0gbm9kZS5ub2RlVmFsdWU7CisgICAgICAgIGlmICghdmFsKSByZXR1cm47CisgICAg
ICAgIGlmIChjbG9zaW5nKSB7CisgICAgICAgICAgdGV4dCArPSBsaW5lU2VwOworICAgICAgICAg
IGNsb3NpbmcgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB0ZXh0ICs9IHZhbDsKKyAgICAg
IH0KKyAgICB9CisgICAgZm9yICg7OykgeworICAgICAgd2Fsayhmcm9tKTsKKyAgICAgIGlmIChm
cm9tID09IHRvKSBicmVhazsKKyAgICAgIGZyb20gPSBmcm9tLm5leHRTaWJsaW5nOworICAgIH0K
KyAgICByZXR1cm4gdGV4dDsKKyAgfQorCisgIENvZGVNaXJyb3IuaW5wdXRTdHlsZXMgPSB7InRl
eHRhcmVhIjogVGV4dGFyZWFJbnB1dCwgImNvbnRlbnRlZGl0YWJsZSI6IENvbnRlbnRFZGl0YWJs
ZUlucHV0fTsKKwogICAvLyBTRUxFQ1RJT04gLyBDVVJTT1IKIAogICAvLyBTZWxlY3Rpb24gb2Jq
ZWN0cyBhcmUgaW1tdXRhYmxlLiBBIG5ldyBvbmUgaXMgY3JlYXRlZCBldmVyeSB0aW1lCkBAIC0x
MjQ0LDEzICsyMjU2LDE3IEBACiAKICAgLy8gU0VMRUNUSU9OIERSQVdJTkcKIAotICAvLyBSZWRy
YXcgdGhlIHNlbGVjdGlvbiBhbmQvb3IgY3Vyc29yCiAgIGZ1bmN0aW9uIHVwZGF0ZVNlbGVjdGlv
bihjbSkgewotICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jOwotICAg
IHZhciBjdXJGcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAg
ICB2YXIgc2VsRnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Cisg
ICAgY20uZGlzcGxheS5pbnB1dC5zaG93U2VsZWN0aW9uKGNtLmRpc3BsYXkuaW5wdXQucHJlcGFy
ZVNlbGVjdGlvbigpKTsKKyAgfQorCisgIGZ1bmN0aW9uIHByZXBhcmVTZWxlY3Rpb24oY20sIHBy
aW1hcnkpIHsKKyAgICB2YXIgZG9jID0gY20uZG9jLCByZXN1bHQgPSB7fTsKKyAgICB2YXIgY3Vy
RnJhZ21lbnQgPSByZXN1bHQuY3Vyc29ycyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21l
bnQoKTsKKyAgICB2YXIgc2VsRnJhZ21lbnQgPSByZXN1bHQuc2VsZWN0aW9uID0gZG9jdW1lbnQu
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogCiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2Mu
c2VsLnJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKHByaW1hcnkgPT09IGZhbHNlICYm
IGkgPT0gZG9jLnNlbC5wcmltSW5kZXgpIGNvbnRpbnVlOwogICAgICAgdmFyIHJhbmdlID0gZG9j
LnNlbC5yYW5nZXNbaV07CiAgICAgICB2YXIgY29sbGFwc2VkID0gcmFuZ2UuZW1wdHkoKTsKICAg
ICAgIGlmIChjb2xsYXBzZWQgfHwgY20ub3B0aW9ucy5zaG93Q3Vyc29yV2hlblNlbGVjdGluZykK
QEAgLTEyNTgsMjYgKzIyNzQsMTIgQEAKICAgICAgIGlmICghY29sbGFwc2VkKQogICAgICAgICBk
cmF3U2VsZWN0aW9uUmFuZ2UoY20sIHJhbmdlLCBzZWxGcmFnbWVudCk7CiAgICAgfQotCi0gICAg
Ly8gTW92ZSB0aGUgaGlkZGVuIHRleHRhcmVhIG5lYXIgdGhlIGN1cnNvciB0byBwcmV2ZW50IHNj
cm9sbGluZyBhcnRpZmFjdHMKLSAgICBpZiAoY20ub3B0aW9ucy5tb3ZlSW5wdXRXaXRoQ3Vyc29y
KSB7Ci0gICAgICB2YXIgaGVhZFBvcyA9IGN1cnNvckNvb3JkcyhjbSwgZG9jLnNlbC5wcmltYXJ5
KCkuaGVhZCwgImRpdiIpOwotICAgICAgdmFyIHdyYXBPZmYgPSBkaXNwbGF5LndyYXBwZXIuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCksIGxpbmVPZmYgPSBkaXNwbGF5LmxpbmVEaXYuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCk7Ci0gICAgICB2YXIgdG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlz
cGxheS53cmFwcGVyLmNsaWVudEhlaWdodCAtIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlYWRQb3MudG9wICsgbGluZU9mZi50b3AgLSB3cmFwT2ZmLnRvcCkpOwot
ICAgICAgdmFyIGxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xp
ZW50V2lkdGggLSAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVh
ZFBvcy5sZWZ0ICsgbGluZU9mZi5sZWZ0IC0gd3JhcE9mZi5sZWZ0KSk7Ci0gICAgICBkaXNwbGF5
LmlucHV0RGl2LnN0eWxlLnRvcCA9IHRvcCArICJweCI7Ci0gICAgICBkaXNwbGF5LmlucHV0RGl2
LnN0eWxlLmxlZnQgPSBsZWZ0ICsgInB4IjsKLSAgICB9Ci0KLSAgICByZW1vdmVDaGlsZHJlbkFu
ZEFkZChkaXNwbGF5LmN1cnNvckRpdiwgY3VyRnJhZ21lbnQpOwotICAgIHJlbW92ZUNoaWxkcmVu
QW5kQWRkKGRpc3BsYXkuc2VsZWN0aW9uRGl2LCBzZWxGcmFnbWVudCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKICAgfQogCiAgIC8vIERyYXdzIGEgY3Vyc29yIGZvciB0aGUgZ2l2ZW4gcmFuZ2UKICAg
ZnVuY3Rpb24gZHJhd1NlbGVjdGlvbkN1cnNvcihjbSwgcmFuZ2UsIG91dHB1dCkgewotICAgIHZh
ciBwb3MgPSBjdXJzb3JDb29yZHMoY20sIHJhbmdlLmhlYWQsICJkaXYiKTsKKyAgICB2YXIgcG9z
ID0gY3Vyc29yQ29vcmRzKGNtLCByYW5nZS5oZWFkLCAiZGl2IiwgbnVsbCwgbnVsbCwgIWNtLm9w
dGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSk7CiAKICAgICB2YXIgY3Vyc29yID0gb3V0
cHV0LmFwcGVuZENoaWxkKGVsdCgiZGl2IiwgIlx1MDBhMCIsICJDb2RlTWlycm9yLWN1cnNvciIp
KTsKICAgICBjdXJzb3Iuc3R5bGUubGVmdCA9IHBvcy5sZWZ0ICsgInB4IjsKQEAgLTEyOTgsNyAr
MjMwMCw4IEBACiAgIGZ1bmN0aW9uIGRyYXdTZWxlY3Rpb25SYW5nZShjbSwgcmFuZ2UsIG91dHB1
dCkgewogICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jOwogICAgIHZh
ciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICB2YXIg
cGFkZGluZyA9IHBhZGRpbmdIKGNtLmRpc3BsYXkpLCBsZWZ0U2lkZSA9IHBhZGRpbmcubGVmdCwg
cmlnaHRTaWRlID0gZGlzcGxheS5saW5lU3BhY2Uub2Zmc2V0V2lkdGggLSBwYWRkaW5nLnJpZ2h0
OworICAgIHZhciBwYWRkaW5nID0gcGFkZGluZ0goY20uZGlzcGxheSksIGxlZnRTaWRlID0gcGFk
ZGluZy5sZWZ0OworICAgIHZhciByaWdodFNpZGUgPSBNYXRoLm1heChkaXNwbGF5LnNpemVyV2lk
dGgsIGRpc3BsYXlXaWR0aChjbSkgLSBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQpIC0gcGFkZGlu
Zy5yaWdodDsKIAogICAgIGZ1bmN0aW9uIGFkZChsZWZ0LCB0b3AsIHdpZHRoLCBib3R0b20pIHsK
ICAgICAgIGlmICh0b3AgPCAwKSB0b3AgPSAwOwpAQCAtMTM3OSw2ICsyMzgyLDggQEAKICAgICAg
IGRpc3BsYXkuYmxpbmtlciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgICBkaXNw
bGF5LmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5ID0gKG9uID0gIW9uKSA/ICIiIDogImhpZGRl
biI7CiAgICAgICB9LCBjbS5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZSk7CisgICAgZWxzZSBpZiAo
Y20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUgPCAwKQorICAgICAgZGlzcGxheS5jdXJzb3JEaXYu
c3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwogICB9CiAKICAgLy8gSElHSExJR0hUIFdPUktF
UgpAQCAtMTM5NCwxOCArMjM5OSwyMCBAQAogICAgIGlmIChkb2MuZnJvbnRpZXIgPj0gY20uZGlz
cGxheS52aWV3VG8pIHJldHVybjsKICAgICB2YXIgZW5kID0gK25ldyBEYXRlICsgY20ub3B0aW9u
cy53b3JrVGltZTsKICAgICB2YXIgc3RhdGUgPSBjb3B5U3RhdGUoZG9jLm1vZGUsIGdldFN0YXRl
QmVmb3JlKGNtLCBkb2MuZnJvbnRpZXIpKTsKKyAgICB2YXIgY2hhbmdlZExpbmVzID0gW107CiAK
LSAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKICAgICBkb2MuaXRlcihkb2MuZnJvbnRpZXIs
IE1hdGgubWluKGRvYy5maXJzdCArIGRvYy5zaXplLCBjbS5kaXNwbGF5LnZpZXdUbyArIDUwMCks
IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgIGlmIChkb2MuZnJvbnRpZXIgPj0gY20uZGlzcGxheS52
aWV3RnJvbSkgeyAvLyBWaXNpYmxlCiAgICAgICAgIHZhciBvbGRTdHlsZXMgPSBsaW5lLnN0eWxl
czsKICAgICAgICAgdmFyIGhpZ2hsaWdodGVkID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgc3Rh
dGUsIHRydWUpOwogICAgICAgICBsaW5lLnN0eWxlcyA9IGhpZ2hsaWdodGVkLnN0eWxlczsKLSAg
ICAgICAgaWYgKGhpZ2hsaWdodGVkLmNsYXNzZXMpIGxpbmUuc3R5bGVDbGFzc2VzID0gaGlnaGxp
Z2h0ZWQuY2xhc3NlczsKLSAgICAgICAgZWxzZSBpZiAobGluZS5zdHlsZUNsYXNzZXMpIGxpbmUu
c3R5bGVDbGFzc2VzID0gbnVsbDsKLSAgICAgICAgdmFyIGlzY2hhbmdlID0gIW9sZFN0eWxlcyB8
fCBvbGRTdHlsZXMubGVuZ3RoICE9IGxpbmUuc3R5bGVzLmxlbmd0aDsKKyAgICAgICAgdmFyIG9s
ZENscyA9IGxpbmUuc3R5bGVDbGFzc2VzLCBuZXdDbHMgPSBoaWdobGlnaHRlZC5jbGFzc2VzOwor
ICAgICAgICBpZiAobmV3Q2xzKSBsaW5lLnN0eWxlQ2xhc3NlcyA9IG5ld0NsczsKKyAgICAgICAg
ZWxzZSBpZiAob2xkQ2xzKSBsaW5lLnN0eWxlQ2xhc3NlcyA9IG51bGw7CisgICAgICAgIHZhciBp
c2NoYW5nZSA9ICFvbGRTdHlsZXMgfHwgb2xkU3R5bGVzLmxlbmd0aCAhPSBsaW5lLnN0eWxlcy5s
ZW5ndGggfHwKKyAgICAgICAgICBvbGRDbHMgIT0gbmV3Q2xzICYmICghb2xkQ2xzIHx8ICFuZXdD
bHMgfHwgb2xkQ2xzLmJnQ2xhc3MgIT0gbmV3Q2xzLmJnQ2xhc3MgfHwgb2xkQ2xzLnRleHRDbGFz
cyAhPSBuZXdDbHMudGV4dENsYXNzKTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7ICFpc2NoYW5n
ZSAmJiBpIDwgb2xkU3R5bGVzLmxlbmd0aDsgKytpKSBpc2NoYW5nZSA9IG9sZFN0eWxlc1tpXSAh
PSBsaW5lLnN0eWxlc1tpXTsKLSAgICAgICAgaWYgKGlzY2hhbmdlKSByZWdMaW5lQ2hhbmdlKGNt
LCBkb2MuZnJvbnRpZXIsICJ0ZXh0Iik7CisgICAgICAgIGlmIChpc2NoYW5nZSkgY2hhbmdlZExp
bmVzLnB1c2goZG9jLmZyb250aWVyKTsKICAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29weVN0
YXRlKGRvYy5tb2RlLCBzdGF0ZSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBwcm9jZXNzTGlu
ZShjbSwgbGluZS50ZXh0LCBzdGF0ZSk7CkBAIC0xNDE3LDYgKzI0MjQsOSBAQAogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgIH0KICAgICB9KTsKKyAgICBpZiAoY2hhbmdlZExpbmVzLmxlbmd0
aCkgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNo
YW5nZWRMaW5lcy5sZW5ndGg7IGkrKykKKyAgICAgICAgcmVnTGluZUNoYW5nZShjbSwgY2hhbmdl
ZExpbmVzW2ldLCAidGV4dCIpOwogICAgIH0pOwogICB9CiAKQEAgLTE0NzAsMTMgKzI0ODAsMjEg
QEAKICAgICByZXR1cm4gZGF0YTsKICAgfQogCisgIGZ1bmN0aW9uIHNjcm9sbEdhcChjbSkgeyBy
ZXR1cm4gc2Nyb2xsZXJHYXAgLSBjbS5kaXNwbGF5Lm5hdGl2ZUJhcldpZHRoOyB9CisgIGZ1bmN0
aW9uIGRpc3BsYXlXaWR0aChjbSkgeworICAgIHJldHVybiBjbS5kaXNwbGF5LnNjcm9sbGVyLmNs
aWVudFdpZHRoIC0gc2Nyb2xsR2FwKGNtKSAtIGNtLmRpc3BsYXkuYmFyV2lkdGg7CisgIH0KKyAg
ZnVuY3Rpb24gZGlzcGxheUhlaWdodChjbSkgeworICAgIHJldHVybiBjbS5kaXNwbGF5LnNjcm9s
bGVyLmNsaWVudEhlaWdodCAtIHNjcm9sbEdhcChjbSkgLSBjbS5kaXNwbGF5LmJhckhlaWdodDsK
KyAgfQorCiAgIC8vIEVuc3VyZSB0aGUgbGluZVZpZXcud3JhcHBpbmcuaGVpZ2h0cyBhcnJheSBp
cyBwb3B1bGF0ZWQuIFRoaXMgaXMKICAgLy8gYW4gYXJyYXkgb2YgYm90dG9tIG9mZnNldHMgZm9y
IHRoZSBsaW5lcyB0aGF0IG1ha2UgdXAgYSBkcmF3bgogICAvLyBsaW5lLiBXaGVuIGxpbmVXcmFw
cGluZyBpcyBvbiwgdGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZQogICAvLyBoZWlnaHQuCiAg
IGZ1bmN0aW9uIGVuc3VyZUxpbmVIZWlnaHRzKGNtLCBsaW5lVmlldywgcmVjdCkgewogICAgIHZh
ciB3cmFwcGluZyA9IGNtLm9wdGlvbnMubGluZVdyYXBwaW5nOwotICAgIHZhciBjdXJXaWR0aCA9
IHdyYXBwaW5nICYmIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg7CisgICAgdmFyIGN1
cldpZHRoID0gd3JhcHBpbmcgJiYgZGlzcGxheVdpZHRoKGNtKTsKICAgICBpZiAoIWxpbmVWaWV3
Lm1lYXN1cmUuaGVpZ2h0cyB8fCB3cmFwcGluZyAmJiBsaW5lVmlldy5tZWFzdXJlLndpZHRoICE9
IGN1cldpZHRoKSB7CiAgICAgICB2YXIgaGVpZ2h0cyA9IGxpbmVWaWV3Lm1lYXN1cmUuaGVpZ2h0
cyA9IFtdOwogICAgICAgaWYgKHdyYXBwaW5nKSB7CkBAIC0xNTQyLDEwICsyNTYwLDEyIEBACiAg
IGZ1bmN0aW9uIHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZSkgewogICAgIHZhciBsaW5l
TiA9IGxpbmVObyhsaW5lKTsKICAgICB2YXIgdmlldyA9IGZpbmRWaWV3Rm9yTGluZShjbSwgbGlu
ZU4pOwotICAgIGlmICh2aWV3ICYmICF2aWV3LnRleHQpCisgICAgaWYgKHZpZXcgJiYgIXZpZXcu
dGV4dCkgewogICAgICAgdmlldyA9IG51bGw7Ci0gICAgZWxzZSBpZiAodmlldyAmJiB2aWV3LmNo
YW5nZXMpCisgICAgfSBlbHNlIGlmICh2aWV3ICYmIHZpZXcuY2hhbmdlcykgewogICAgICAgdXBk
YXRlTGluZUZvckNoYW5nZXMoY20sIHZpZXcsIGxpbmVOLCBnZXREaW1lbnNpb25zKGNtKSk7Cisg
ICAgICBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7CisgICAgfQogICAgIGlmICghdmlldykK
ICAgICAgIHZpZXcgPSB1cGRhdGVFeHRlcm5hbE1lYXN1cmVtZW50KGNtLCBsaW5lKTsKIApAQCAt
MTU1OSw3ICsyNTc5LDcgQEAKIAogICAvLyBHaXZlbiBhIHByZXBhcmVkIG1lYXN1cmVtZW50IG9i
amVjdCwgbWVhc3VyZXMgdGhlIHBvc2l0aW9uIG9mIGFuCiAgIC8vIGFjdHVhbCBjaGFyYWN0ZXIg
KG9yIGZldGNoZXMgaXQgZnJvbSB0aGUgY2FjaGUpLgotICBmdW5jdGlvbiBtZWFzdXJlQ2hhclBy
ZXBhcmVkKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMpIHsKKyAgZnVuY3Rpb24gbWVhc3VyZUNoYXJQ
cmVwYXJlZChjbSwgcHJlcGFyZWQsIGNoLCBiaWFzLCB2YXJIZWlnaHQpIHsKICAgICBpZiAocHJl
cGFyZWQuYmVmb3JlKSBjaCA9IC0xOwogICAgIHZhciBrZXkgPSBjaCArIChiaWFzIHx8ICIiKSwg
Zm91bmQ7CiAgICAgaWYgKHByZXBhcmVkLmNhY2hlLmhhc093blByb3BlcnR5KGtleSkpIHsKQEAg
LTE1NzQsMTQgKzI1OTQsMTQgQEAKICAgICAgIGZvdW5kID0gbWVhc3VyZUNoYXJJbm5lcihjbSwg
cHJlcGFyZWQsIGNoLCBiaWFzKTsKICAgICAgIGlmICghZm91bmQuYm9ndXMpIHByZXBhcmVkLmNh
Y2hlW2tleV0gPSBmb3VuZDsKICAgICB9Ci0gICAgcmV0dXJuIHtsZWZ0OiBmb3VuZC5sZWZ0LCBy
aWdodDogZm91bmQucmlnaHQsIHRvcDogZm91bmQudG9wLCBib3R0b206IGZvdW5kLmJvdHRvbX07
CisgICAgcmV0dXJuIHtsZWZ0OiBmb3VuZC5sZWZ0LCByaWdodDogZm91bmQucmlnaHQsCisgICAg
ICAgICAgICB0b3A6IHZhckhlaWdodCA/IGZvdW5kLnJ0b3AgOiBmb3VuZC50b3AsCisgICAgICAg
ICAgICBib3R0b206IHZhckhlaWdodCA/IGZvdW5kLnJib3R0b20gOiBmb3VuZC5ib3R0b219Owog
ICB9CiAKICAgdmFyIG51bGxSZWN0ID0ge2xlZnQ6IDAsIHJpZ2h0OiAwLCB0b3A6IDAsIGJvdHRv
bTogMH07CiAKLSAgZnVuY3Rpb24gbWVhc3VyZUNoYXJJbm5lcihjbSwgcHJlcGFyZWQsIGNoLCBi
aWFzKSB7Ci0gICAgdmFyIG1hcCA9IHByZXBhcmVkLm1hcDsKLQorICBmdW5jdGlvbiBub2RlQW5k
T2Zmc2V0SW5MaW5lTWFwKG1hcCwgY2gsIGJpYXMpIHsKICAgICB2YXIgbm9kZSwgc3RhcnQsIGVu
ZCwgY29sbGFwc2U7CiAgICAgLy8gRmlyc3QsIHNlYXJjaCB0aGUgbGluZSBtYXAgZm9yIHRoZSB0
ZXh0IG5vZGUgY29ycmVzcG9uZGluZyB0bywKICAgICAvLyBvciBjbG9zZXN0IHRvLCB0aGUgdGFy
Z2V0IGNoYXJhY3Rlci4KQEAgLTE2MTUsMjIgKzI2MzUsMzUgQEAKICAgICAgICAgYnJlYWs7CiAg
ICAgICB9CiAgICAgfQorICAgIHJldHVybiB7bm9kZTogbm9kZSwgc3RhcnQ6IHN0YXJ0LCBlbmQ6
IGVuZCwgY29sbGFwc2U6IGNvbGxhcHNlLCBjb3ZlclN0YXJ0OiBtU3RhcnQsIGNvdmVyRW5kOiBt
RW5kfTsKKyAgfQorCisgIGZ1bmN0aW9uIG1lYXN1cmVDaGFySW5uZXIoY20sIHByZXBhcmVkLCBj
aCwgYmlhcykgeworICAgIHZhciBwbGFjZSA9IG5vZGVBbmRPZmZzZXRJbkxpbmVNYXAocHJlcGFy
ZWQubWFwLCBjaCwgYmlhcyk7CisgICAgdmFyIG5vZGUgPSBwbGFjZS5ub2RlLCBzdGFydCA9IHBs
YWNlLnN0YXJ0LCBlbmQgPSBwbGFjZS5lbmQsIGNvbGxhcHNlID0gcGxhY2UuY29sbGFwc2U7CiAK
ICAgICB2YXIgcmVjdDsKICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAzKSB7IC8vIElmIGl0IGlz
IGEgdGV4dCBub2RlLCB1c2UgYSByYW5nZSB0byByZXRyaWV2ZSB0aGUgY29vcmRpbmF0ZXMuCi0g
ICAgICB3aGlsZSAoc3RhcnQgJiYgaXNFeHRlbmRpbmdDaGFyKHByZXBhcmVkLmxpbmUudGV4dC5j
aGFyQXQobVN0YXJ0ICsgc3RhcnQpKSkgLS1zdGFydDsKLSAgICAgIHdoaWxlIChtU3RhcnQgKyBl
bmQgPCBtRW5kICYmIGlzRXh0ZW5kaW5nQ2hhcihwcmVwYXJlZC5saW5lLnRleHQuY2hhckF0KG1T
dGFydCArIGVuZCkpKSArK2VuZDsKLSAgICAgIGlmIChpZV91cHRvOCAmJiBzdGFydCA9PSAwICYm
IGVuZCA9PSBtRW5kIC0gbVN0YXJ0KSB7Ci0gICAgICAgIHJlY3QgPSBub2RlLnBhcmVudE5vZGUu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgICB9IGVsc2UgaWYgKGllICYmIGNtLm9wdGlv
bnMubGluZVdyYXBwaW5nKSB7Ci0gICAgICAgIHZhciByZWN0cyA9IHJhbmdlKG5vZGUsIHN0YXJ0
LCBlbmQpLmdldENsaWVudFJlY3RzKCk7Ci0gICAgICAgIGlmIChyZWN0cy5sZW5ndGgpCi0gICAg
ICAgICAgcmVjdCA9IHJlY3RzW2JpYXMgPT0gInJpZ2h0IiA/IHJlY3RzLmxlbmd0aCAtIDEgOiAw
XTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJlY3QgPSBudWxsUmVjdDsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHJlY3QgPSByYW5nZShub2RlLCBzdGFydCwgZW5kKS5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKSB8fCBudWxsUmVjdDsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsr
KSB7IC8vIFJldHJ5IGEgbWF4aW11bSBvZiA0IHRpbWVzIHdoZW4gbm9uc2Vuc2UgcmVjdGFuZ2xl
cyBhcmUgcmV0dXJuZWQKKyAgICAgICAgd2hpbGUgKHN0YXJ0ICYmIGlzRXh0ZW5kaW5nQ2hhcihw
cmVwYXJlZC5saW5lLnRleHQuY2hhckF0KHBsYWNlLmNvdmVyU3RhcnQgKyBzdGFydCkpKSAtLXN0
YXJ0OworICAgICAgICB3aGlsZSAocGxhY2UuY292ZXJTdGFydCArIGVuZCA8IHBsYWNlLmNvdmVy
RW5kICYmIGlzRXh0ZW5kaW5nQ2hhcihwcmVwYXJlZC5saW5lLnRleHQuY2hhckF0KHBsYWNlLmNv
dmVyU3RhcnQgKyBlbmQpKSkgKytlbmQ7CisgICAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwg
OSAmJiBzdGFydCA9PSAwICYmIGVuZCA9PSBwbGFjZS5jb3ZlckVuZCAtIHBsYWNlLmNvdmVyU3Rh
cnQpIHsKKyAgICAgICAgICByZWN0ID0gbm9kZS5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpOworICAgICAgICB9IGVsc2UgaWYgKGllICYmIGNtLm9wdGlvbnMubGluZVdyYXBwaW5n
KSB7CisgICAgICAgICAgdmFyIHJlY3RzID0gcmFuZ2Uobm9kZSwgc3RhcnQsIGVuZCkuZ2V0Q2xp
ZW50UmVjdHMoKTsKKyAgICAgICAgICBpZiAocmVjdHMubGVuZ3RoKQorICAgICAgICAgICAgcmVj
dCA9IHJlY3RzW2JpYXMgPT0gInJpZ2h0IiA/IHJlY3RzLmxlbmd0aCAtIDEgOiAwXTsKKyAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZWN0ID0gbnVsbFJlY3Q7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgcmVjdCA9IHJhbmdlKG5vZGUsIHN0YXJ0LCBlbmQpLmdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpIHx8IG51bGxSZWN0OworICAgICAgICB9CisgICAgICAgIGlmIChyZWN0LmxlZnQg
fHwgcmVjdC5yaWdodCB8fCBzdGFydCA9PSAwKSBicmVhazsKKyAgICAgICAgZW5kID0gc3RhcnQ7
CisgICAgICAgIHN0YXJ0ID0gc3RhcnQgLSAxOworICAgICAgICBjb2xsYXBzZSA9ICJyaWdodCI7
CiAgICAgICB9CisgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDExKSByZWN0ID0gbWF5YmVV
cGRhdGVSZWN0Rm9yWm9vbWluZyhjbS5kaXNwbGF5Lm1lYXN1cmUsIHJlY3QpOwogICAgIH0gZWxz
ZSB7IC8vIElmIGl0IGlzIGEgd2lkZ2V0LCBzaW1wbHkgZ2V0IHRoZSBib3ggZm9yIHRoZSB3aG9s
ZSB3aWRnZXQuCiAgICAgICBpZiAoc3RhcnQgPiAwKSBjb2xsYXBzZSA9IGJpYXMgPSAicmlnaHQi
OwogICAgICAgdmFyIHJlY3RzOwpAQCAtMTYzOSw3ICsyNjcyLDcgQEAKICAgICAgIGVsc2UKICAg
ICAgICAgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgfQotICAgIGlm
IChpZV91cHRvOCAmJiAhc3RhcnQgJiYgKCFyZWN0IHx8ICFyZWN0LmxlZnQgJiYgIXJlY3Qucmln
aHQpKSB7CisgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5ICYmICFzdGFydCAmJiAoIXJlY3Qg
fHwgIXJlY3QubGVmdCAmJiAhcmVjdC5yaWdodCkpIHsKICAgICAgIHZhciByU3BhbiA9IG5vZGUu
cGFyZW50Tm9kZS5nZXRDbGllbnRSZWN0cygpWzBdOwogICAgICAgaWYgKHJTcGFuKQogICAgICAg
ICByZWN0ID0ge2xlZnQ6IHJTcGFuLmxlZnQsIHJpZ2h0OiByU3Bhbi5sZWZ0ICsgY2hhcldpZHRo
KGNtLmRpc3BsYXkpLCB0b3A6IHJTcGFuLnRvcCwgYm90dG9tOiByU3Bhbi5ib3R0b219OwpAQCAt
MTY0NywxOCArMjY4MCwzMyBAQAogICAgICAgICByZWN0ID0gbnVsbFJlY3Q7CiAgICAgfQogCi0g
ICAgdmFyIHRvcCwgYm90ID0gKHJlY3QuYm90dG9tICsgcmVjdC50b3ApIC8gMiAtIHByZXBhcmVk
LnJlY3QudG9wOworICAgIHZhciBydG9wID0gcmVjdC50b3AgLSBwcmVwYXJlZC5yZWN0LnRvcCwg
cmJvdCA9IHJlY3QuYm90dG9tIC0gcHJlcGFyZWQucmVjdC50b3A7CisgICAgdmFyIG1pZCA9IChy
dG9wICsgcmJvdCkgLyAyOwogICAgIHZhciBoZWlnaHRzID0gcHJlcGFyZWQudmlldy5tZWFzdXJl
LmhlaWdodHM7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWlnaHRzLmxlbmd0aCAtIDE7IGkr
KykKLSAgICAgIGlmIChib3QgPCBoZWlnaHRzW2ldKSBicmVhazsKLSAgICB0b3AgPSBpID8gaGVp
Z2h0c1tpIC0gMV0gOiAwOyBib3QgPSBoZWlnaHRzW2ldOworICAgICAgaWYgKG1pZCA8IGhlaWdo
dHNbaV0pIGJyZWFrOworICAgIHZhciB0b3AgPSBpID8gaGVpZ2h0c1tpIC0gMV0gOiAwLCBib3Qg
PSBoZWlnaHRzW2ldOwogICAgIHZhciByZXN1bHQgPSB7bGVmdDogKGNvbGxhcHNlID09ICJyaWdo
dCIgPyByZWN0LnJpZ2h0IDogcmVjdC5sZWZ0KSAtIHByZXBhcmVkLnJlY3QubGVmdCwKICAgICAg
ICAgICAgICAgICAgIHJpZ2h0OiAoY29sbGFwc2UgPT0gImxlZnQiID8gcmVjdC5sZWZ0IDogcmVj
dC5yaWdodCkgLSBwcmVwYXJlZC5yZWN0LmxlZnQsCiAgICAgICAgICAgICAgICAgICB0b3A6IHRv
cCwgYm90dG9tOiBib3R9OwogICAgIGlmICghcmVjdC5sZWZ0ICYmICFyZWN0LnJpZ2h0KSByZXN1
bHQuYm9ndXMgPSB0cnVlOworICAgIGlmICghY20ub3B0aW9ucy5zaW5nbGVDdXJzb3JIZWlnaHRQ
ZXJMaW5lKSB7IHJlc3VsdC5ydG9wID0gcnRvcDsgcmVzdWx0LnJib3R0b20gPSByYm90OyB9CisK
ICAgICByZXR1cm4gcmVzdWx0OwogICB9CiAKKyAgLy8gV29yayBhcm91bmQgcHJvYmxlbSB3aXRo
IGJvdW5kaW5nIGNsaWVudCByZWN0cyBvbiByYW5nZXMgYmVpbmcKKyAgLy8gcmV0dXJuZWQgaW5j
b3JyZWN0bHkgd2hlbiB6b29tZWQgb24gSUUxMCBhbmQgYmVsb3cuCisgIGZ1bmN0aW9uIG1heWJl
VXBkYXRlUmVjdEZvclpvb21pbmcobWVhc3VyZSwgcmVjdCkgeworICAgIGlmICghd2luZG93LnNj
cmVlbiB8fCBzY3JlZW4ubG9naWNhbFhEUEkgPT0gbnVsbCB8fAorICAgICAgICBzY3JlZW4ubG9n
aWNhbFhEUEkgPT0gc2NyZWVuLmRldmljZVhEUEkgfHwgIWhhc0JhZFpvb21lZFJlY3RzKG1lYXN1
cmUpKQorICAgICAgcmV0dXJuIHJlY3Q7CisgICAgdmFyIHNjYWxlWCA9IHNjcmVlbi5sb2dpY2Fs
WERQSSAvIHNjcmVlbi5kZXZpY2VYRFBJOworICAgIHZhciBzY2FsZVkgPSBzY3JlZW4ubG9naWNh
bFlEUEkgLyBzY3JlZW4uZGV2aWNlWURQSTsKKyAgICByZXR1cm4ge2xlZnQ6IHJlY3QubGVmdCAq
IHNjYWxlWCwgcmlnaHQ6IHJlY3QucmlnaHQgKiBzY2FsZVgsCisgICAgICAgICAgICB0b3A6IHJl
Y3QudG9wICogc2NhbGVZLCBib3R0b206IHJlY3QuYm90dG9tICogc2NhbGVZfTsKKyAgfQorCiAg
IGZ1bmN0aW9uIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGVGb3IobGluZVZpZXcpIHsKICAgICBp
ZiAobGluZVZpZXcubWVhc3VyZSkgewogICAgICAgbGluZVZpZXcubWVhc3VyZS5jYWNoZSA9IHt9
OwpAQCAtMTY4Nyw3ICsyNzM1LDggQEAKIAogICAvLyBDb252ZXJ0cyBhIHt0b3AsIGJvdHRvbSwg
bGVmdCwgcmlnaHR9IGJveCBmcm9tIGxpbmUtbG9jYWwKICAgLy8gY29vcmRpbmF0ZXMgaW50byBh
bm90aGVyIGNvb3JkaW5hdGUgc3lzdGVtLiBDb250ZXh0IG1heSBiZSBvbmUgb2YKLSAgLy8gImxp
bmUiLCAiZGl2IiAoZGlzcGxheS5saW5lRGl2KSwgImxvY2FsIi9udWxsIChlZGl0b3IpLCBvciAi
cGFnZSIuCisgIC8vICJsaW5lIiwgImRpdiIgKGRpc3BsYXkubGluZURpdiksICJsb2NhbCIvbnVs
bCAoZWRpdG9yKSwgIndpbmRvdyIsCisgIC8vIG9yICJwYWdlIi4KICAgZnVuY3Rpb24gaW50b0Nv
b3JkU3lzdGVtKGNtLCBsaW5lT2JqLCByZWN0LCBjb250ZXh0KSB7CiAgICAgaWYgKGxpbmVPYmou
d2lkZ2V0cykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lT2JqLndpZGdldHMubGVuZ3RoOyArK2kp
IGlmIChsaW5lT2JqLndpZGdldHNbaV0uYWJvdmUpIHsKICAgICAgIHZhciBzaXplID0gd2lkZ2V0
SGVpZ2h0KGxpbmVPYmoud2lkZ2V0c1tpXSk7CkBAIC0xNzM1LDExICsyNzg0LDExIEBACiAgIC8v
IFJldHVybnMgYSBib3ggZm9yIGEgZ2l2ZW4gY3Vyc29yIHBvc2l0aW9uLCB3aGljaCBtYXkgaGF2
ZSBhbgogICAvLyAnb3RoZXInIHByb3BlcnR5IGNvbnRhaW5pbmcgdGhlIHBvc2l0aW9uIG9mIHRo
ZSBzZWNvbmRhcnkgY3Vyc29yCiAgIC8vIG9uIGEgYmlkaSBib3VuZGFyeS4KLSAgZnVuY3Rpb24g
Y3Vyc29yQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSkg
eworICBmdW5jdGlvbiBjdXJzb3JDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaiwgcHJl
cGFyZWRNZWFzdXJlLCB2YXJIZWlnaHQpIHsKICAgICBsaW5lT2JqID0gbGluZU9iaiB8fCBnZXRM
aW5lKGNtLmRvYywgcG9zLmxpbmUpOwogICAgIGlmICghcHJlcGFyZWRNZWFzdXJlKSBwcmVwYXJl
ZE1lYXN1cmUgPSBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmVPYmopOwogICAgIGZ1bmN0
aW9uIGdldChjaCwgcmlnaHQpIHsKLSAgICAgIHZhciBtID0gbWVhc3VyZUNoYXJQcmVwYXJlZChj
bSwgcHJlcGFyZWRNZWFzdXJlLCBjaCwgcmlnaHQgPyAicmlnaHQiIDogImxlZnQiKTsKKyAgICAg
IHZhciBtID0gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRNZWFzdXJlLCBjaCwgcmln
aHQgPyAicmlnaHQiIDogImxlZnQiLCB2YXJIZWlnaHQpOwogICAgICAgaWYgKHJpZ2h0KSBtLmxl
ZnQgPSBtLnJpZ2h0OyBlbHNlIG0ucmlnaHQgPSBtLmxlZnQ7CiAgICAgICByZXR1cm4gaW50b0Nv
b3JkU3lzdGVtKGNtLCBsaW5lT2JqLCBtLCBjb250ZXh0KTsKICAgICB9CkBAIC0xODkxLDEwICsy
OTQwLDEzIEBACiAgIC8vIGVycm9yLXByb25lKS4gSW5zdGVhZCwgZGlzcGxheSB1cGRhdGVzIGFy
ZSBiYXRjaGVkIGFuZCB0aGVuIGFsbAogICAvLyBjb21iaW5lZCBhbmQgZXhlY3V0ZWQgYXQgb25j
ZS4KIAorICB2YXIgb3BlcmF0aW9uR3JvdXAgPSBudWxsOworCiAgIHZhciBuZXh0T3BJZCA9IDA7
CiAgIC8vIFN0YXJ0IGEgbmV3IG9wZXJhdGlvbi4KICAgZnVuY3Rpb24gc3RhcnRPcGVyYXRpb24o
Y20pIHsKICAgICBjbS5jdXJPcCA9IHsKKyAgICAgIGNtOiBjbSwKICAgICAgIHZpZXdDaGFuZ2Vk
OiBmYWxzZSwgICAgICAvLyBGbGFnIHRoYXQgaW5kaWNhdGVzIHRoYXQgbGluZXMgbWlnaHQgbmVl
ZCB0byBiZSByZWRyYXduCiAgICAgICBzdGFydEhlaWdodDogY20uZG9jLmhlaWdodCwgLy8gVXNl
ZCB0byBkZXRlY3QgbmVlZCB0byB1cGRhdGUgc2Nyb2xsYmFyCiAgICAgICBmb3JjZVVwZGF0ZTog
ZmFsc2UsICAgICAgLy8gVXNlZCB0byBmb3JjZSBhIHJlZHJhdwpAQCAtMTkwMiw2MCArMjk1NCwx
NjAgQEAKICAgICAgIHR5cGluZzogZmFsc2UsICAgICAgICAgICAvLyBXaGV0aGVyIHRoaXMgcmVz
ZXQgc2hvdWxkIGJlIGNhcmVmdWwgdG8gbGVhdmUgZXhpc3RpbmcgdGV4dCAoZm9yIGNvbXBvc2l0
aW5nKQogICAgICAgY2hhbmdlT2JqczogbnVsbCwgICAgICAgIC8vIEFjY3VtdWxhdGVkIGNoYW5n
ZXMsIGZvciBmaXJpbmcgY2hhbmdlIGV2ZW50cwogICAgICAgY3Vyc29yQWN0aXZpdHlIYW5kbGVy
czogbnVsbCwgLy8gU2V0IG9mIGhhbmRsZXJzIHRvIGZpcmUgY3Vyc29yQWN0aXZpdHkgb24KKyAg
ICAgIGN1cnNvckFjdGl2aXR5Q2FsbGVkOiAwLCAvLyBUcmFja3Mgd2hpY2ggY3Vyc29yQWN0aXZp
dHkgaGFuZGxlcnMgaGF2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5CiAgICAgICBzZWxlY3Rpb25DaGFu
Z2VkOiBmYWxzZSwgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIG5lZWRzIHRvIGJlIHJlZHJhd24K
ICAgICAgIHVwZGF0ZU1heExpbmU6IGZhbHNlLCAgICAvLyBTZXQgd2hlbiB0aGUgd2lkZXN0IGxp
bmUgbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBhbmV3CiAgICAgICBzY3JvbGxMZWZ0OiBudWxsLCBz
Y3JvbGxUb3A6IG51bGwsIC8vIEludGVybWVkaWF0ZSBzY3JvbGwgcG9zaXRpb24sIG5vdCBwdXNo
ZWQgdG8gRE9NIHlldAogICAgICAgc2Nyb2xsVG9Qb3M6IG51bGwsICAgICAgIC8vIFVzZWQgdG8g
c2Nyb2xsIHRvIGEgc3BlY2lmaWMgcG9zaXRpb24KKyAgICAgIGZvY3VzOiBmYWxzZSwKICAgICAg
IGlkOiArK25leHRPcElkICAgICAgICAgICAvLyBVbmlxdWUgSUQKICAgICB9OwotICAgIGlmICgh
ZGVsYXllZENhbGxiYWNrRGVwdGgrKykgZGVsYXllZENhbGxiYWNrcyA9IFtdOworICAgIGlmIChv
cGVyYXRpb25Hcm91cCkgeworICAgICAgb3BlcmF0aW9uR3JvdXAub3BzLnB1c2goY20uY3VyT3Ap
OworICAgIH0gZWxzZSB7CisgICAgICBjbS5jdXJPcC5vd25zR3JvdXAgPSBvcGVyYXRpb25Hcm91
cCA9IHsKKyAgICAgICAgb3BzOiBbY20uY3VyT3BdLAorICAgICAgICBkZWxheWVkQ2FsbGJhY2tz
OiBbXQorICAgICAgfTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBmaXJlQ2FsbGJhY2tzRm9y
T3BzKGdyb3VwKSB7CisgICAgLy8gQ2FsbHMgZGVsYXllZCBjYWxsYmFja3MgYW5kIGN1cnNvckFj
dGl2aXR5IGhhbmRsZXJzIHVudGlsIG5vCisgICAgLy8gbmV3IG9uZXMgYXBwZWFyCisgICAgdmFy
IGNhbGxiYWNrcyA9IGdyb3VwLmRlbGF5ZWRDYWxsYmFja3MsIGkgPSAwOworICAgIGRvIHsKKyAg
ICAgIGZvciAoOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKQorICAgICAgICBjYWxsYmFja3Nb
aV0oKTsKKyAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAub3BzLmxlbmd0aDsgaisrKSB7
CisgICAgICAgIHZhciBvcCA9IGdyb3VwLm9wc1tqXTsKKyAgICAgICAgaWYgKG9wLmN1cnNvckFj
dGl2aXR5SGFuZGxlcnMpCisgICAgICAgICAgd2hpbGUgKG9wLmN1cnNvckFjdGl2aXR5Q2FsbGVk
IDwgb3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycy5sZW5ndGgpCisgICAgICAgICAgICBvcC5jdXJz
b3JBY3Rpdml0eUhhbmRsZXJzW29wLmN1cnNvckFjdGl2aXR5Q2FsbGVkKytdKG9wLmNtKTsKKyAg
ICAgIH0KKyAgICB9IHdoaWxlIChpIDwgY2FsbGJhY2tzLmxlbmd0aCk7CiAgIH0KIAogICAvLyBG
aW5pc2ggYW4gb3BlcmF0aW9uLCB1cGRhdGluZyB0aGUgZGlzcGxheSBhbmQgc2lnbmFsbGluZyBk
ZWxheWVkIGV2ZW50cwogICBmdW5jdGlvbiBlbmRPcGVyYXRpb24oY20pIHsKLSAgICB2YXIgb3Ag
PSBjbS5jdXJPcCwgZG9jID0gY20uZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICBjbS5j
dXJPcCA9IG51bGw7Ci0KKyAgICB2YXIgb3AgPSBjbS5jdXJPcCwgZ3JvdXAgPSBvcC5vd25zR3Jv
dXA7CisgICAgaWYgKCFncm91cCkgcmV0dXJuOworCisgICAgdHJ5IHsgZmlyZUNhbGxiYWNrc0Zv
ck9wcyhncm91cCk7IH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIG9wZXJhdGlvbkdyb3VwID0gbnVs
bDsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAub3BzLmxlbmd0aDsgaSsrKQorICAg
ICAgICBncm91cC5vcHNbaV0uY20uY3VyT3AgPSBudWxsOworICAgICAgZW5kT3BlcmF0aW9ucyhn
cm91cCk7CisgICAgfQorICB9CisKKyAgLy8gVGhlIERPTSB1cGRhdGVzIGRvbmUgd2hlbiBhbiBv
cGVyYXRpb24gZmluaXNoZXMgYXJlIGJhdGNoZWQgc28KKyAgLy8gdGhhdCB0aGUgbWluaW11bSBu
dW1iZXIgb2YgcmVsYXlvdXRzIGFyZSByZXF1aXJlZC4KKyAgZnVuY3Rpb24gZW5kT3BlcmF0aW9u
cyhncm91cCkgeworICAgIHZhciBvcHMgPSBncm91cC5vcHM7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBvcHMubGVuZ3RoOyBpKyspIC8vIFJlYWQgRE9NCisgICAgICBlbmRPcGVyYXRpb25fUjEo
b3BzW2ldKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgLy8gV3Jp
dGUgRE9NIChtYXliZSkKKyAgICAgIGVuZE9wZXJhdGlvbl9XMShvcHNbaV0pOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSAvLyBSZWFkIERPTQorICAgICAgZW5kT3Bl
cmF0aW9uX1IyKG9wc1tpXSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBp
KyspIC8vIFdyaXRlIERPTSAobWF5YmUpCisgICAgICBlbmRPcGVyYXRpb25fVzIob3BzW2ldKTsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgLy8gUmVhZCBET00KKyAg
ICAgIGVuZE9wZXJhdGlvbl9maW5pc2gob3BzW2ldKTsKKyAgfQorCisgIGZ1bmN0aW9uIGVuZE9w
ZXJhdGlvbl9SMShvcCkgeworICAgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxh
eTsKKyAgICBtYXliZUNsaXBTY3JvbGxiYXJzKGNtKTsKICAgICBpZiAob3AudXBkYXRlTWF4TGlu
ZSkgZmluZE1heExpbmUoY20pOwogCi0gICAgLy8gSWYgaXQgbG9va3MgbGlrZSBhbiB1cGRhdGUg
bWlnaHQgYmUgbmVlZGVkLCBjYWxsIHVwZGF0ZURpc3BsYXkKLSAgICBpZiAob3Audmlld0NoYW5n
ZWQgfHwgb3AuZm9yY2VVcGRhdGUgfHwgb3Auc2Nyb2xsVG9wICE9IG51bGwgfHwKLSAgICAgICAg
b3Auc2Nyb2xsVG9Qb3MgJiYgKG9wLnNjcm9sbFRvUG9zLmZyb20ubGluZSA8IGRpc3BsYXkudmll
d0Zyb20gfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLnNjcm9sbFRvUG9zLnRvLmxp
bmUgPj0gZGlzcGxheS52aWV3VG8pIHx8Ci0gICAgICAgIGRpc3BsYXkubWF4TGluZUNoYW5nZWQg
JiYgY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKLSAgICAgIHZhciB1cGRhdGVkID0gdXBkYXRl
RGlzcGxheShjbSwge3RvcDogb3Auc2Nyb2xsVG9wLCBlbnN1cmU6IG9wLnNjcm9sbFRvUG9zfSwg
b3AuZm9yY2VVcGRhdGUpOwotICAgICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0SGVp
Z2h0KSBjbS5kb2Muc2Nyb2xsVG9wID0gY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7Cisg
ICAgb3AubXVzdFVwZGF0ZSA9IG9wLnZpZXdDaGFuZ2VkIHx8IG9wLmZvcmNlVXBkYXRlIHx8IG9w
LnNjcm9sbFRvcCAhPSBudWxsIHx8CisgICAgICBvcC5zY3JvbGxUb1BvcyAmJiAob3Auc2Nyb2xs
VG9Qb3MuZnJvbS5saW5lIDwgZGlzcGxheS52aWV3RnJvbSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wLnNjcm9sbFRvUG9zLnRvLmxpbmUgPj0gZGlzcGxheS52aWV3VG8pIHx8CisgICAg
ICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkICYmIGNtLm9wdGlvbnMubGluZVdyYXBwaW5nOworICAg
IG9wLnVwZGF0ZSA9IG9wLm11c3RVcGRhdGUgJiYKKyAgICAgIG5ldyBEaXNwbGF5VXBkYXRlKGNt
LCBvcC5tdXN0VXBkYXRlICYmIHt0b3A6IG9wLnNjcm9sbFRvcCwgZW5zdXJlOiBvcC5zY3JvbGxU
b1Bvc30sIG9wLmZvcmNlVXBkYXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbl9X
MShvcCkgeworICAgIG9wLnVwZGF0ZWREaXNwbGF5ID0gb3AubXVzdFVwZGF0ZSAmJiB1cGRhdGVE
aXNwbGF5SWZOZWVkZWQob3AuY20sIG9wLnVwZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBlbmRP
cGVyYXRpb25fUjIob3ApIHsKKyAgICB2YXIgY20gPSBvcC5jbSwgZGlzcGxheSA9IGNtLmRpc3Bs
YXk7CisgICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KSB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChj
bSk7CisKKyAgICBvcC5iYXJNZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pOworCisg
ICAgLy8gSWYgdGhlIG1heCBsaW5lIGNoYW5nZWQgc2luY2UgaXQgd2FzIGxhc3QgbWVhc3VyZWQs
IG1lYXN1cmUgaXQsCisgICAgLy8gYW5kIGVuc3VyZSB0aGUgZG9jdW1lbnQncyB3aWR0aCBtYXRj
aGVzIGl0LgorICAgIC8vIHVwZGF0ZURpc3BsYXlfVzIgd2lsbCB1c2UgdGhlc2UgcHJvcGVydGll
cyB0byBkbyB0aGUgYWN0dWFsIHJlc2l6aW5nCisgICAgaWYgKGRpc3BsYXkubWF4TGluZUNoYW5n
ZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7CisgICAgICBvcC5hZGp1c3RXaWR0aFRv
ID0gbWVhc3VyZUNoYXIoY20sIGRpc3BsYXkubWF4TGluZSwgZGlzcGxheS5tYXhMaW5lLnRleHQu
bGVuZ3RoKS5sZWZ0ICsgMzsKKyAgICAgIGNtLmRpc3BsYXkuc2l6ZXJXaWR0aCA9IG9wLmFkanVz
dFdpZHRoVG87CisgICAgICBvcC5iYXJNZWFzdXJlLnNjcm9sbFdpZHRoID0KKyAgICAgICAgTWF0
aC5tYXgoZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwgZGlzcGxheS5zaXplci5vZmZzZXRM
ZWZ0ICsgb3AuYWRqdXN0V2lkdGhUbyArIHNjcm9sbEdhcChjbSkgKyBjbS5kaXNwbGF5LmJhcldp
ZHRoKTsKKyAgICAgIG9wLm1heFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBkaXNwbGF5LnNpemVy
Lm9mZnNldExlZnQgKyBvcC5hZGp1c3RXaWR0aFRvIC0gZGlzcGxheVdpZHRoKGNtKSk7CisgICAg
fQorCisgICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5IHx8IG9wLnNlbGVjdGlvbkNoYW5nZWQpCisg
ICAgICBvcC5wcmVwYXJlZFNlbGVjdGlvbiA9IGRpc3BsYXkuaW5wdXQucHJlcGFyZVNlbGVjdGlv
bigpOworICB9CisKKyAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uX1cyKG9wKSB7CisgICAgdmFyIGNt
ID0gb3AuY207CisKKyAgICBpZiAob3AuYWRqdXN0V2lkdGhUbyAhPSBudWxsKSB7CisgICAgICBj
bS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gb3AuYWRqdXN0V2lkdGhUbyArICJweCI7
CisgICAgICBpZiAob3AubWF4U2Nyb2xsTGVmdCA8IGNtLmRvYy5zY3JvbGxMZWZ0KQorICAgICAg
ICBzZXRTY3JvbGxMZWZ0KGNtLCBNYXRoLm1pbihjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExl
ZnQsIG9wLm1heFNjcm9sbExlZnQpLCB0cnVlKTsKKyAgICAgIGNtLmRpc3BsYXkubWF4TGluZUNo
YW5nZWQgPSBmYWxzZTsKICAgICB9Ci0gICAgLy8gSWYgbm8gdXBkYXRlIHdhcyBydW4sIGJ1dCB0
aGUgc2VsZWN0aW9uIGNoYW5nZWQsIHJlZHJhdyB0aGF0LgotICAgIGlmICghdXBkYXRlZCAmJiBv
cC5zZWxlY3Rpb25DaGFuZ2VkKSB1cGRhdGVTZWxlY3Rpb24oY20pOwotICAgIGlmICghdXBkYXRl
ZCAmJiBvcC5zdGFydEhlaWdodCAhPSBjbS5kb2MuaGVpZ2h0KSB1cGRhdGVTY3JvbGxiYXJzKGNt
KTsKKworICAgIGlmIChvcC5wcmVwYXJlZFNlbGVjdGlvbikKKyAgICAgIGNtLmRpc3BsYXkuaW5w
dXQuc2hvd1NlbGVjdGlvbihvcC5wcmVwYXJlZFNlbGVjdGlvbik7CisgICAgaWYgKG9wLnVwZGF0
ZWREaXNwbGF5KQorICAgICAgc2V0RG9jdW1lbnRIZWlnaHQoY20sIG9wLmJhck1lYXN1cmUpOwor
ICAgIGlmIChvcC51cGRhdGVkRGlzcGxheSB8fCBvcC5zdGFydEhlaWdodCAhPSBjbS5kb2MuaGVp
Z2h0KQorICAgICAgdXBkYXRlU2Nyb2xsYmFycyhjbSwgb3AuYmFyTWVhc3VyZSk7CisKKyAgICBp
ZiAob3Auc2VsZWN0aW9uQ2hhbmdlZCkgcmVzdGFydEJsaW5rKGNtKTsKKworICAgIGlmIChjbS5z
dGF0ZS5mb2N1c2VkICYmIG9wLnVwZGF0ZUlucHV0KQorICAgICAgY20uZGlzcGxheS5pbnB1dC5y
ZXNldChvcC50eXBpbmcpOworICAgIGlmIChvcC5mb2N1cyAmJiBvcC5mb2N1cyA9PSBhY3RpdmVF
bHQoKSkgZW5zdXJlRm9jdXMob3AuY20pOworICB9CisKKyAgZnVuY3Rpb24gZW5kT3BlcmF0aW9u
X2ZpbmlzaChvcCkgeworICAgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwg
ZG9jID0gY20uZG9jOworCisgICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KSBwb3N0VXBkYXRlRGlz
cGxheShjbSwgb3AudXBkYXRlKTsKIAogICAgIC8vIEFib3J0IG1vdXNlIHdoZWVsIGRlbHRhIG1l
YXN1cmVtZW50LCB3aGVuIHNjcm9sbGluZyBleHBsaWNpdGx5CiAgICAgaWYgKGRpc3BsYXkud2hl
ZWxTdGFydFggIT0gbnVsbCAmJiAob3Auc2Nyb2xsVG9wICE9IG51bGwgfHwgb3Auc2Nyb2xsTGVm
dCAhPSBudWxsIHx8IG9wLnNjcm9sbFRvUG9zKSkKICAgICAgIGRpc3BsYXkud2hlZWxTdGFydFgg
PSBkaXNwbGF5LndoZWVsU3RhcnRZID0gbnVsbDsKIAogICAgIC8vIFByb3BhZ2F0ZSB0aGUgc2Ny
b2xsIHBvc2l0aW9uIHRvIHRoZSBhY3R1YWwgRE9NIHNjcm9sbGVyCi0gICAgaWYgKG9wLnNjcm9s
bFRvcCAhPSBudWxsICYmIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IG9wLnNjcm9sbFRv
cCkgewotICAgICAgdmFyIHRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkuc2Nyb2xs
ZXIuc2Nyb2xsSGVpZ2h0IC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIG9wLnNjcm9s
bFRvcCkpOwotICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSBkaXNwbGF5LnNjcm9s
bGJhclYuc2Nyb2xsVG9wID0gZG9jLnNjcm9sbFRvcCA9IHRvcDsKLSAgICB9Ci0gICAgaWYgKG9w
LnNjcm9sbExlZnQgIT0gbnVsbCAmJiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgIT0gb3Au
c2Nyb2xsTGVmdCkgewotICAgICAgdmFyIGxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNw
bGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwg
b3Auc2Nyb2xsTGVmdCkpOwotICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ID0gZGlz
cGxheS5zY3JvbGxiYXJILnNjcm9sbExlZnQgPSBkb2Muc2Nyb2xsTGVmdCA9IGxlZnQ7CisgICAg
aWYgKG9wLnNjcm9sbFRvcCAhPSBudWxsICYmIChkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCAh
PSBvcC5zY3JvbGxUb3AgfHwgb3AuZm9yY2VTY3JvbGwpKSB7CisgICAgICBkb2Muc2Nyb2xsVG9w
ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQgLSBk
aXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCwgb3Auc2Nyb2xsVG9wKSk7CisgICAgICBkaXNw
bGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKGRvYy5zY3JvbGxUb3ApOworICAgICAgZGlzcGxh
eS5zY3JvbGxlci5zY3JvbGxUb3AgPSBkb2Muc2Nyb2xsVG9wOworICAgIH0KKyAgICBpZiAob3Au
c2Nyb2xsTGVmdCAhPSBudWxsICYmIChkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgIT0gb3Au
c2Nyb2xsTGVmdCB8fCBvcC5mb3JjZVNjcm9sbCkpIHsKKyAgICAgIGRvYy5zY3JvbGxMZWZ0ID0g
TWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aCAtIGRpc3Bs
YXlXaWR0aChjbSksIG9wLnNjcm9sbExlZnQpKTsKKyAgICAgIGRpc3BsYXkuc2Nyb2xsYmFycy5z
ZXRTY3JvbGxMZWZ0KGRvYy5zY3JvbGxMZWZ0KTsKKyAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuc2Ny
b2xsTGVmdCA9IGRvYy5zY3JvbGxMZWZ0OwogICAgICAgYWxpZ25Ib3Jpem9udGFsbHkoY20pOwog
ICAgIH0KICAgICAvLyBJZiB3ZSBuZWVkIHRvIHNjcm9sbCBhIHNwZWNpZmljIHBvc2l0aW9uIGlu
dG8gdmlldywgZG8gc28uCiAgICAgaWYgKG9wLnNjcm9sbFRvUG9zKSB7Ci0gICAgICB2YXIgY29v
cmRzID0gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIGNsaXBQb3MoY20uZG9jLCBvcC5zY3JvbGxUb1Bv
cy5mcm9tKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUG9zKGNt
LmRvYywgb3Auc2Nyb2xsVG9Qb3MudG8pLCBvcC5zY3JvbGxUb1Bvcy5tYXJnaW4pOworICAgICAg
dmFyIGNvb3JkcyA9IHNjcm9sbFBvc0ludG9WaWV3KGNtLCBjbGlwUG9zKGRvYywgb3Auc2Nyb2xs
VG9Qb3MuZnJvbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBv
cyhkb2MsIG9wLnNjcm9sbFRvUG9zLnRvKSwgb3Auc2Nyb2xsVG9Qb3MubWFyZ2luKTsKICAgICAg
IGlmIChvcC5zY3JvbGxUb1Bvcy5pc0N1cnNvciAmJiBjbS5zdGF0ZS5mb2N1c2VkKSBtYXliZVNj
cm9sbFdpbmRvdyhjbSwgY29vcmRzKTsKICAgICB9CiAKLSAgICBpZiAob3Auc2VsZWN0aW9uQ2hh
bmdlZCkgcmVzdGFydEJsaW5rKGNtKTsKLQotICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkICYmIG9w
LnVwZGF0ZUlucHV0KQotICAgICAgcmVzZXRJbnB1dChjbSwgb3AudHlwaW5nKTsKLQogICAgIC8v
IEZpcmUgZXZlbnRzIGZvciBtYXJrZXJzIHRoYXQgYXJlIGhpZGRlbi91bmlkZGVuIGJ5IGVkaXRp
bmcgb3IKICAgICAvLyB1bmRvaW5nCiAgICAgdmFyIGhpZGRlbiA9IG9wLm1heWJlSGlkZGVuTWFy
a2VycywgdW5oaWRkZW4gPSBvcC5tYXliZVVuaGlkZGVuTWFya2VyczsKQEAgLTE5NjQsMTggKzMx
MTYsMTQgQEAKICAgICBpZiAodW5oaWRkZW4pIGZvciAodmFyIGkgPSAwOyBpIDwgdW5oaWRkZW4u
bGVuZ3RoOyArK2kpCiAgICAgICBpZiAodW5oaWRkZW5baV0ubGluZXMubGVuZ3RoKSBzaWduYWwo
dW5oaWRkZW5baV0sICJ1bmhpZGUiKTsKIAotICAgIHZhciBkZWxheWVkOwotICAgIGlmICghLS1k
ZWxheWVkQ2FsbGJhY2tEZXB0aCkgewotICAgICAgZGVsYXllZCA9IGRlbGF5ZWRDYWxsYmFja3M7
Ci0gICAgICBkZWxheWVkQ2FsbGJhY2tzID0gbnVsbDsKLSAgICB9CisgICAgaWYgKGRpc3BsYXku
d3JhcHBlci5vZmZzZXRIZWlnaHQpCisgICAgICBkb2Muc2Nyb2xsVG9wID0gY20uZGlzcGxheS5z
Y3JvbGxlci5zY3JvbGxUb3A7CisKICAgICAvLyBGaXJlIGNoYW5nZSBldmVudHMsIGFuZCBkZWxh
eWVkIGV2ZW50IGhhbmRsZXJzCiAgICAgaWYgKG9wLmNoYW5nZU9ianMpCiAgICAgICBzaWduYWwo
Y20sICJjaGFuZ2VzIiwgY20sIG9wLmNoYW5nZU9ianMpOwotICAgIGlmIChkZWxheWVkKSBmb3Ig
KHZhciBpID0gMDsgaSA8IGRlbGF5ZWQubGVuZ3RoOyArK2kpIGRlbGF5ZWRbaV0oKTsKLSAgICBp
ZiAob3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycykKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
b3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycy5sZW5ndGg7IGkrKykKLSAgICAgICAgb3AuY3Vyc29y
QWN0aXZpdHlIYW5kbGVyc1tpXShjbSk7CisgICAgaWYgKG9wLnVwZGF0ZSkKKyAgICAgIG9wLnVw
ZGF0ZS5maW5pc2goKTsKICAgfQogCiAgIC8vIFJ1biB0aGUgZ2l2ZW4gZnVuY3Rpb24gaW4gYW4g
b3BlcmF0aW9uCkBAIC0yMjAxLDE1MiArMzM0OSw2IEBACiAgICAgcmV0dXJuIGRpcnR5OwogICB9
CiAKLSAgLy8gSU5QVVQgSEFORExJTkcKLQotICAvLyBQb2xsIGZvciBpbnB1dCBjaGFuZ2VzLCB1
c2luZyB0aGUgbm9ybWFsIHJhdGUgb2YgcG9sbGluZy4gVGhpcwotICAvLyBydW5zIGFzIGxvbmcg
YXMgdGhlIGVkaXRvciBpcyBmb2N1c2VkLgotICBmdW5jdGlvbiBzbG93UG9sbChjbSkgewotICAg
IGlmIChjbS5kaXNwbGF5LnBvbGxpbmdGYXN0KSByZXR1cm47Ci0gICAgY20uZGlzcGxheS5wb2xs
LnNldChjbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgZnVuY3Rpb24oKSB7Ci0gICAgICByZWFkSW5w
dXQoY20pOwotICAgICAgaWYgKGNtLnN0YXRlLmZvY3VzZWQpIHNsb3dQb2xsKGNtKTsKLSAgICB9
KTsKLSAgfQotCi0gIC8vIFdoZW4gYW4gZXZlbnQgaGFzIGp1c3QgY29tZSBpbiB0aGF0IGlzIGxp
a2VseSB0byBhZGQgb3IgY2hhbmdlCi0gIC8vIHNvbWV0aGluZyBpbiB0aGUgaW5wdXQgdGV4dGFy
ZWEsIHdlIHBvbGwgZmFzdGVyLCB0byBlbnN1cmUgdGhhdAotICAvLyB0aGUgY2hhbmdlIGFwcGVh
cnMgb24gdGhlIHNjcmVlbiBxdWlja2x5LgotICBmdW5jdGlvbiBmYXN0UG9sbChjbSkgewotICAg
IHZhciBtaXNzZWQgPSBmYWxzZTsKLSAgICBjbS5kaXNwbGF5LnBvbGxpbmdGYXN0ID0gdHJ1ZTsK
LSAgICBmdW5jdGlvbiBwKCkgewotICAgICAgdmFyIGNoYW5nZWQgPSByZWFkSW5wdXQoY20pOwot
ICAgICAgaWYgKCFjaGFuZ2VkICYmICFtaXNzZWQpIHttaXNzZWQgPSB0cnVlOyBjbS5kaXNwbGF5
LnBvbGwuc2V0KDYwLCBwKTt9Ci0gICAgICBlbHNlIHtjbS5kaXNwbGF5LnBvbGxpbmdGYXN0ID0g
ZmFsc2U7IHNsb3dQb2xsKGNtKTt9Ci0gICAgfQotICAgIGNtLmRpc3BsYXkucG9sbC5zZXQoMjAs
IHApOwotICB9Ci0KLSAgLy8gUmVhZCBpbnB1dCBmcm9tIHRoZSB0ZXh0YXJlYSwgYW5kIHVwZGF0
ZSB0aGUgZG9jdW1lbnQgdG8gbWF0Y2guCi0gIC8vIFdoZW4gc29tZXRoaW5nIGlzIHNlbGVjdGVk
LCBpdCBpcyBwcmVzZW50IGluIHRoZSB0ZXh0YXJlYSwgYW5kCi0gIC8vIHNlbGVjdGVkICh1bmxl
c3MgaXQgaXMgaHVnZSwgaW4gd2hpY2ggY2FzZSBhIHBsYWNlaG9sZGVyIGlzCi0gIC8vIHVzZWQp
LiBXaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIHRoZSBjdXJzb3Igc2l0cyBhZnRlciBwcmV2aW91
c2x5Ci0gIC8vIHNlZW4gdGV4dCAoY2FuIGJlIGVtcHR5KSwgd2hpY2ggaXMgc3RvcmVkIGluIHBy
ZXZJbnB1dCAod2UgbXVzdAotICAvLyBub3QgcmVzZXQgdGhlIHRleHRhcmVhIHdoZW4gdHlwaW5n
LCBiZWNhdXNlIHRoYXQgYnJlYWtzIElNRSkuCi0gIGZ1bmN0aW9uIHJlYWRJbnB1dChjbSkgewot
ICAgIHZhciBpbnB1dCA9IGNtLmRpc3BsYXkuaW5wdXQsIHByZXZJbnB1dCA9IGNtLmRpc3BsYXku
cHJldklucHV0LCBkb2MgPSBjbS5kb2M7Ci0gICAgLy8gU2luY2UgdGhpcyBpcyBjYWxsZWQgYSAq
bG90KiwgdHJ5IHRvIGJhaWwgb3V0IGFzIGNoZWFwbHkgYXMKLSAgICAvLyBwb3NzaWJsZSB3aGVu
IGl0IGlzIGNsZWFyIHRoYXQgbm90aGluZyBoYXBwZW5lZC4gaGFzU2VsZWN0aW9uCi0gICAgLy8g
d2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIGEgbG90IG9mIHRleHQgaW4gdGhlIHRleHRh
cmVhLAotICAgIC8vIGluIHdoaWNoIGNhc2UgcmVhZGluZyBpdHMgdmFsdWUgd291bGQgYmUgZXhw
ZW5zaXZlLgotICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCB8fCAoaGFzU2VsZWN0aW9uKGlucHV0
KSAmJiAhcHJldklucHV0KSB8fCBpc1JlYWRPbmx5KGNtKSB8fCBjbS5vcHRpb25zLmRpc2FibGVJ
bnB1dCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBTZWUgcGFzdGUgaGFuZGxlciBmb3Ig
bW9yZSBvbiB0aGUgZmFrZWRMYXN0Q2hhciBrbHVkZ2UKLSAgICBpZiAoY20uc3RhdGUucGFzdGVJ
bmNvbWluZyAmJiBjbS5zdGF0ZS5mYWtlZExhc3RDaGFyKSB7Ci0gICAgICBpbnB1dC52YWx1ZSA9
IGlucHV0LnZhbHVlLnN1YnN0cmluZygwLCBpbnB1dC52YWx1ZS5sZW5ndGggLSAxKTsKLSAgICAg
IGNtLnN0YXRlLmZha2VkTGFzdENoYXIgPSBmYWxzZTsKLSAgICB9Ci0gICAgdmFyIHRleHQgPSBp
bnB1dC52YWx1ZTsKLSAgICAvLyBJZiBub3RoaW5nIGNoYW5nZWQsIGJhaWwuCi0gICAgaWYgKHRl
eHQgPT0gcHJldklucHV0ICYmICFjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSByZXR1cm4gZmFsc2U7
Ci0gICAgLy8gV29yayBhcm91bmQgbm9uc2Vuc2ljYWwgc2VsZWN0aW9uIHJlc2V0dGluZyBpbiBJ
RTkvMTAKLSAgICBpZiAoaWUgJiYgIWllX3VwdG84ICYmIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxl
Y3Rpb24gPT09IHRleHQpIHsKLSAgICAgIHJlc2V0SW5wdXQoY20pOwotICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHZhciB3aXRoT3AgPSAhY20uY3VyT3A7Ci0gICAgaWYgKHdpdGhP
cCkgc3RhcnRPcGVyYXRpb24oY20pOwotICAgIGNtLmRpc3BsYXkuc2hpZnQgPSBmYWxzZTsKLQot
ICAgIGlmICh0ZXh0LmNoYXJDb2RlQXQoMCkgPT0gMHgyMDBiICYmIGRvYy5zZWwgPT0gY20uZGlz
cGxheS5zZWxGb3JDb250ZXh0TWVudSAmJiAhcHJldklucHV0KQotICAgICAgcHJldklucHV0ID0g
Ilx1MjAwYiI7Ci0gICAgLy8gRmluZCB0aGUgcGFydCBvZiB0aGUgaW5wdXQgdGhhdCBpcyBhY3R1
YWxseSBuZXcKLSAgICB2YXIgc2FtZSA9IDAsIGwgPSBNYXRoLm1pbihwcmV2SW5wdXQubGVuZ3Ro
LCB0ZXh0Lmxlbmd0aCk7Ci0gICAgd2hpbGUgKHNhbWUgPCBsICYmIHByZXZJbnB1dC5jaGFyQ29k
ZUF0KHNhbWUpID09IHRleHQuY2hhckNvZGVBdChzYW1lKSkgKytzYW1lOwotICAgIHZhciBpbnNl
cnRlZCA9IHRleHQuc2xpY2Uoc2FtZSksIHRleHRMaW5lcyA9IHNwbGl0TGluZXMoaW5zZXJ0ZWQp
OwotCi0gICAgLy8gV2hlbiBwYXNpbmcgTiBsaW5lcyBpbnRvIE4gc2VsZWN0aW9ucywgaW5zZXJ0
IG9uZSBsaW5lIHBlciBzZWxlY3Rpb24KLSAgICB2YXIgbXVsdGlQYXN0ZSA9IGNtLnN0YXRlLnBh
c3RlSW5jb21pbmcgJiYgdGV4dExpbmVzLmxlbmd0aCA+IDEgJiYgZG9jLnNlbC5yYW5nZXMubGVu
Z3RoID09IHRleHRMaW5lcy5sZW5ndGg7Ci0KLSAgICAvLyBOb3JtYWwgYmVoYXZpb3IgaXMgdG8g
aW5zZXJ0IHRoZSBuZXcgdGV4dCBpbnRvIGV2ZXJ5IHNlbGVjdGlvbgotICAgIGZvciAodmFyIGkg
PSBkb2Muc2VsLnJhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewotICAgICAgdmFyIHJh
bmdlID0gZG9jLnNlbC5yYW5nZXNbaV07Ci0gICAgICB2YXIgZnJvbSA9IHJhbmdlLmZyb20oKSwg
dG8gPSByYW5nZS50bygpOwotICAgICAgLy8gSGFuZGxlIGRlbGV0aW9uCi0gICAgICBpZiAoc2Ft
ZSA8IHByZXZJbnB1dC5sZW5ndGgpCi0gICAgICAgIGZyb20gPSBQb3MoZnJvbS5saW5lLCBmcm9t
LmNoIC0gKHByZXZJbnB1dC5sZW5ndGggLSBzYW1lKSk7Ci0gICAgICAvLyBIYW5kbGUgb3Zlcndy
aXRlCi0gICAgICBlbHNlIGlmIChjbS5zdGF0ZS5vdmVyd3JpdGUgJiYgcmFuZ2UuZW1wdHkoKSAm
JiAhY20uc3RhdGUucGFzdGVJbmNvbWluZykKLSAgICAgICAgdG8gPSBQb3ModG8ubGluZSwgTWF0
aC5taW4oZ2V0TGluZShkb2MsIHRvLmxpbmUpLnRleHQubGVuZ3RoLCB0by5jaCArIGxzdCh0ZXh0
TGluZXMpLmxlbmd0aCkpOwotICAgICAgdmFyIHVwZGF0ZUlucHV0ID0gY20uY3VyT3AudXBkYXRl
SW5wdXQ7Ci0gICAgICB2YXIgY2hhbmdlRXZlbnQgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0
OiBtdWx0aVBhc3RlID8gW3RleHRMaW5lc1tpXV0gOiB0ZXh0TGluZXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgb3JpZ2luOiBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID8gInBhc3RlIiA6IGNt
LnN0YXRlLmN1dEluY29taW5nID8gImN1dCIgOiAiK2lucHV0In07Ci0gICAgICBtYWtlQ2hhbmdl
KGNtLmRvYywgY2hhbmdlRXZlbnQpOwotICAgICAgc2lnbmFsTGF0ZXIoY20sICJpbnB1dFJlYWQi
LCBjbSwgY2hhbmdlRXZlbnQpOwotICAgICAgLy8gV2hlbiBhbiAnZWxlY3RyaWMnIGNoYXJhY3Rl
ciBpcyBpbnNlcnRlZCwgaW1tZWRpYXRlbHkgdHJpZ2dlciBhIHJlaW5kZW50Ci0gICAgICBpZiAo
aW5zZXJ0ZWQgJiYgIWNtLnN0YXRlLnBhc3RlSW5jb21pbmcgJiYgY20ub3B0aW9ucy5lbGVjdHJp
Y0NoYXJzICYmCi0gICAgICAgICAgY20ub3B0aW9ucy5zbWFydEluZGVudCAmJiByYW5nZS5oZWFk
LmNoIDwgMTAwICYmCi0gICAgICAgICAgKCFpIHx8IGRvYy5zZWwucmFuZ2VzW2kgLSAxXS5oZWFk
LmxpbmUgIT0gcmFuZ2UuaGVhZC5saW5lKSkgewotICAgICAgICB2YXIgbW9kZSA9IGNtLmdldE1v
ZGVBdChyYW5nZS5oZWFkKTsKLSAgICAgICAgaWYgKG1vZGUuZWxlY3RyaWNDaGFycykgewotICAg
ICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbW9kZS5lbGVjdHJpY0NoYXJzLmxlbmd0aDsgaisr
KQotICAgICAgICAgICAgaWYgKGluc2VydGVkLmluZGV4T2YobW9kZS5lbGVjdHJpY0NoYXJzLmNo
YXJBdChqKSkgPiAtMSkgewotICAgICAgICAgICAgICBpbmRlbnRMaW5lKGNtLCByYW5nZS5oZWFk
LmxpbmUsICJzbWFydCIpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIGlmIChtb2RlLmVsZWN0cmljSW5wdXQpIHsKLSAgICAgICAgICB2YXIgZW5k
ID0gY2hhbmdlRW5kKGNoYW5nZUV2ZW50KTsKLSAgICAgICAgICBpZiAobW9kZS5lbGVjdHJpY0lu
cHV0LnRlc3QoZ2V0TGluZShkb2MsIGVuZC5saW5lKS50ZXh0LnNsaWNlKDAsIGVuZC5jaCkpKQot
ICAgICAgICAgICAgaW5kZW50TGluZShjbSwgcmFuZ2UuaGVhZC5saW5lLCAic21hcnQiKTsKLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKTsKLSAg
ICBjbS5jdXJPcC51cGRhdGVJbnB1dCA9IHVwZGF0ZUlucHV0OwotICAgIGNtLmN1ck9wLnR5cGlu
ZyA9IHRydWU7Ci0KLSAgICAvLyBEb24ndCBsZWF2ZSBsb25nIHRleHQgaW4gdGhlIHRleHRhcmVh
LCBzaW5jZSBpdCBtYWtlcyBmdXJ0aGVyIHBvbGxpbmcgc2xvdwotICAgIGlmICh0ZXh0Lmxlbmd0
aCA+IDEwMDAgfHwgdGV4dC5pbmRleE9mKCJcbiIpID4gLTEpIGlucHV0LnZhbHVlID0gY20uZGlz
cGxheS5wcmV2SW5wdXQgPSAiIjsKLSAgICBlbHNlIGNtLmRpc3BsYXkucHJldklucHV0ID0gdGV4
dDsKLSAgICBpZiAod2l0aE9wKSBlbmRPcGVyYXRpb24oY20pOwotICAgIGNtLnN0YXRlLnBhc3Rl
SW5jb21pbmcgPSBjbS5zdGF0ZS5jdXRJbmNvbWluZyA9IGZhbHNlOwotICAgIHJldHVybiB0cnVl
OwotICB9Ci0KLSAgLy8gUmVzZXQgdGhlIGlucHV0IHRvIGNvcnJlc3BvbmQgdG8gdGhlIHNlbGVj
dGlvbiAob3IgdG8gYmUgZW1wdHksCi0gIC8vIHdoZW4gbm90IHR5cGluZyBhbmQgbm90aGluZyBp
cyBzZWxlY3RlZCkKLSAgZnVuY3Rpb24gcmVzZXRJbnB1dChjbSwgdHlwaW5nKSB7Ci0gICAgdmFy
IG1pbmltYWwsIHNlbGVjdGVkLCBkb2MgPSBjbS5kb2M7Ci0gICAgaWYgKGNtLnNvbWV0aGluZ1Nl
bGVjdGVkKCkpIHsKLSAgICAgIGNtLmRpc3BsYXkucHJldklucHV0ID0gIiI7Ci0gICAgICB2YXIg
cmFuZ2UgPSBkb2Muc2VsLnByaW1hcnkoKTsKLSAgICAgIG1pbmltYWwgPSBoYXNDb3B5RXZlbnQg
JiYKLSAgICAgICAgKHJhbmdlLnRvKCkubGluZSAtIHJhbmdlLmZyb20oKS5saW5lID4gMTAwIHx8
IChzZWxlY3RlZCA9IGNtLmdldFNlbGVjdGlvbigpKS5sZW5ndGggPiAxMDAwKTsKLSAgICAgIHZh
ciBjb250ZW50ID0gbWluaW1hbCA/ICItIiA6IHNlbGVjdGVkIHx8IGNtLmdldFNlbGVjdGlvbigp
OwotICAgICAgY20uZGlzcGxheS5pbnB1dC52YWx1ZSA9IGNvbnRlbnQ7Ci0gICAgICBpZiAoY20u
c3RhdGUuZm9jdXNlZCkgc2VsZWN0SW5wdXQoY20uZGlzcGxheS5pbnB1dCk7Ci0gICAgICBpZiAo
aWUgJiYgIWllX3VwdG84KSBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID0gY29udGVudDsK
LSAgICB9IGVsc2UgaWYgKCF0eXBpbmcpIHsKLSAgICAgIGNtLmRpc3BsYXkucHJldklucHV0ID0g
Y20uZGlzcGxheS5pbnB1dC52YWx1ZSA9ICIiOwotICAgICAgaWYgKGllICYmICFpZV91cHRvOCkg
Y20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9IG51bGw7Ci0gICAgfQotICAgIGNtLmRpc3Bs
YXkuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IG1pbmltYWw7Ci0gIH0KLQotICBmdW5jdGlvbiBmb2N1
c0lucHV0KGNtKSB7Ci0gICAgaWYgKGNtLm9wdGlvbnMucmVhZE9ubHkgIT0gIm5vY3Vyc29yIiAm
JiAoIW1vYmlsZSB8fCBhY3RpdmVFbHQoKSAhPSBjbS5kaXNwbGF5LmlucHV0KSkKLSAgICAgIGNt
LmRpc3BsYXkuaW5wdXQuZm9jdXMoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGVuc3VyZUZvY3VzKGNt
KSB7Ci0gICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSB7IGZvY3VzSW5wdXQoY20pOyBvbkZvY3Vz
KGNtKTsgfQotICB9Ci0KLSAgZnVuY3Rpb24gaXNSZWFkT25seShjbSkgewotICAgIHJldHVybiBj
bS5vcHRpb25zLnJlYWRPbmx5IHx8IGNtLmRvYy5jYW50RWRpdDsKLSAgfQotCiAgIC8vIEVWRU5U
IEhBTkRMRVJTCiAKICAgLy8gQXR0YWNoIHRoZSBuZWNlc3NhcnkgZXZlbnQgaGFuZGxlcnMgd2hl
biBpbml0aWFsaXppbmcgdGhlIGVkaXRvcgpAQCAtMjM1NCwyNSArMzM1Niw3NCBAQAogICAgIHZh
ciBkID0gY20uZGlzcGxheTsKICAgICBvbihkLnNjcm9sbGVyLCAibW91c2Vkb3duIiwgb3BlcmF0
aW9uKGNtLCBvbk1vdXNlRG93bikpOwogICAgIC8vIE9sZGVyIElFJ3Mgd2lsbCBub3QgZmlyZSBh
IHNlY29uZCBtb3VzZWRvd24gZm9yIGEgZG91YmxlIGNsaWNrCi0gICAgaWYgKGllX3VwdG8xMCkK
KyAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDExKQogICAgICAgb24oZC5zY3JvbGxlciwgImRi
bGNsaWNrIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7CiAgICAgICAgIGlmIChzaWduYWxE
T01FdmVudChjbSwgZSkpIHJldHVybjsKICAgICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShj
bSwgZSk7CiAgICAgICAgIGlmICghcG9zIHx8IGNsaWNrSW5HdXR0ZXIoY20sIGUpIHx8IGV2ZW50
SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHJldHVybjsKICAgICAgICAgZV9wcmV2ZW50RGVmYXVs
dChlKTsKLSAgICAgICAgdmFyIHdvcmQgPSBmaW5kV29yZEF0KGNtLCBwb3MpOworICAgICAgICB2
YXIgd29yZCA9IGNtLmZpbmRXb3JkQXQocG9zKTsKICAgICAgICAgZXh0ZW5kU2VsZWN0aW9uKGNt
LmRvYywgd29yZC5hbmNob3IsIHdvcmQuaGVhZCk7CiAgICAgICB9KSk7CiAgICAgZWxzZQogICAg
ICAgb24oZC5zY3JvbGxlciwgImRibGNsaWNrIiwgZnVuY3Rpb24oZSkgeyBzaWduYWxET01FdmVu
dChjbSwgZSkgfHwgZV9wcmV2ZW50RGVmYXVsdChlKTsgfSk7Ci0gICAgLy8gUHJldmVudCBub3Jt
YWwgc2VsZWN0aW9uIGluIHRoZSBlZGl0b3IgKHdlIGhhbmRsZSBvdXIgb3duKQotICAgIG9uKGQu
bGluZVNwYWNlLCAic2VsZWN0c3RhcnQiLCBmdW5jdGlvbihlKSB7Ci0gICAgICBpZiAoIWV2ZW50
SW5XaWRnZXQoZCwgZSkpIGVfcHJldmVudERlZmF1bHQoZSk7CisgICAgLy8gU29tZSBicm93c2Vy
cyBmaXJlIGNvbnRleHRtZW51ICphZnRlciogb3BlbmluZyB0aGUgbWVudSwgYXQKKyAgICAvLyB3
aGljaCBwb2ludCB3ZSBjYW4ndCBtZXNzIHdpdGggaXQgYW55bW9yZS4gQ29udGV4dCBtZW51IGlz
CisgICAgLy8gaGFuZGxlZCBpbiBvbk1vdXNlRG93biBmb3IgdGhlc2UgYnJvd3NlcnMuCisgICAg
aWYgKCFjYXB0dXJlUmlnaHRDbGljaykgb24oZC5zY3JvbGxlciwgImNvbnRleHRtZW51IiwgZnVu
Y3Rpb24oZSkge29uQ29udGV4dE1lbnUoY20sIGUpO30pOworCisgICAgLy8gVXNlZCB0byBzdXBw
cmVzcyBtb3VzZSBldmVudCBoYW5kbGluZyB3aGVuIGEgdG91Y2ggaGFwcGVucworICAgIHZhciB0
b3VjaEZpbmlzaGVkLCBwcmV2VG91Y2ggPSB7ZW5kOiAwfTsKKyAgICBmdW5jdGlvbiBmaW5pc2hU
b3VjaCgpIHsKKyAgICAgIGlmIChkLmFjdGl2ZVRvdWNoKSB7CisgICAgICAgIHRvdWNoRmluaXNo
ZWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2QuYWN0aXZlVG91Y2ggPSBudWxsO30sIDEwMDAp
OworICAgICAgICBwcmV2VG91Y2ggPSBkLmFjdGl2ZVRvdWNoOworICAgICAgICBwcmV2VG91Y2gu
ZW5kID0gK25ldyBEYXRlOworICAgICAgfQorICAgIH07CisgICAgZnVuY3Rpb24gaXNNb3VzZUxp
a2VUb3VjaEV2ZW50KGUpIHsKKyAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoICE9IDEpIHJldHVy
biBmYWxzZTsKKyAgICAgIHZhciB0b3VjaCA9IGUudG91Y2hlc1swXTsKKyAgICAgIHJldHVybiB0
b3VjaC5yYWRpdXNYIDw9IDEgJiYgdG91Y2gucmFkaXVzWSA8PSAxOworICAgIH0KKyAgICBmdW5j
dGlvbiBmYXJBd2F5KHRvdWNoLCBvdGhlcikgeworICAgICAgaWYgKG90aGVyLmxlZnQgPT0gbnVs
bCkgcmV0dXJuIHRydWU7CisgICAgICB2YXIgZHggPSBvdGhlci5sZWZ0IC0gdG91Y2gubGVmdCwg
ZHkgPSBvdGhlci50b3AgLSB0b3VjaC50b3A7CisgICAgICByZXR1cm4gZHggKiBkeCArIGR5ICog
ZHkgPiAyMCAqIDIwOworICAgIH0KKyAgICBvbihkLnNjcm9sbGVyLCAidG91Y2hzdGFydCIsIGZ1
bmN0aW9uKGUpIHsKKyAgICAgIGlmICghaXNNb3VzZUxpa2VUb3VjaEV2ZW50KGUpKSB7CisgICAg
ICAgIGNsZWFyVGltZW91dCh0b3VjaEZpbmlzaGVkKTsKKyAgICAgICAgdmFyIG5vdyA9ICtuZXcg
RGF0ZTsKKyAgICAgICAgZC5hY3RpdmVUb3VjaCA9IHtzdGFydDogbm93LCBtb3ZlZDogZmFsc2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJldjogbm93IC0gcHJldlRvdWNoLmVuZCA8PSAz
MDAgPyBwcmV2VG91Y2ggOiBudWxsfTsKKyAgICAgICAgaWYgKGUudG91Y2hlcy5sZW5ndGggPT0g
MSkgeworICAgICAgICAgIGQuYWN0aXZlVG91Y2gubGVmdCA9IGUudG91Y2hlc1swXS5wYWdlWDsK
KyAgICAgICAgICBkLmFjdGl2ZVRvdWNoLnRvcCA9IGUudG91Y2hlc1swXS5wYWdlWTsKKyAgICAg
ICAgfQorICAgICAgfQorICAgIH0pOworICAgIG9uKGQuc2Nyb2xsZXIsICJ0b3VjaG1vdmUiLCBm
dW5jdGlvbigpIHsKKyAgICAgIGlmIChkLmFjdGl2ZVRvdWNoKSBkLmFjdGl2ZVRvdWNoLm1vdmVk
ID0gdHJ1ZTsKICAgICB9KTsKLSAgICAvLyBTb21lIGJyb3dzZXJzIGZpcmUgY29udGV4dG1lbnUg
KmFmdGVyKiBvcGVuaW5nIHRoZSBtZW51LCBhdAotICAgIC8vIHdoaWNoIHBvaW50IHdlIGNhbid0
IG1lc3Mgd2l0aCBpdCBhbnltb3JlLiBDb250ZXh0IG1lbnUgaXMKLSAgICAvLyBoYW5kbGVkIGlu
IG9uTW91c2VEb3duIGZvciB0aGVzZSBicm93c2Vycy4KLSAgICBpZiAoIWNhcHR1cmVSaWdodENs
aWNrKSBvbihkLnNjcm9sbGVyLCAiY29udGV4dG1lbnUiLCBmdW5jdGlvbihlKSB7b25Db250ZXh0
TWVudShjbSwgZSk7fSk7CisgICAgb24oZC5zY3JvbGxlciwgInRvdWNoZW5kIiwgZnVuY3Rpb24o
ZSkgeworICAgICAgdmFyIHRvdWNoID0gZC5hY3RpdmVUb3VjaDsKKyAgICAgIGlmICh0b3VjaCAm
JiAhZXZlbnRJbldpZGdldChkLCBlKSAmJiB0b3VjaC5sZWZ0ICE9IG51bGwgJiYKKyAgICAgICAg
ICAhdG91Y2gubW92ZWQgJiYgbmV3IERhdGUgLSB0b3VjaC5zdGFydCA8IDMwMCkgeworICAgICAg
ICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcihkLmFjdGl2ZVRvdWNoLCAicGFnZSIpLCByYW5nZTsK
KyAgICAgICAgaWYgKCF0b3VjaC5wcmV2IHx8IGZhckF3YXkodG91Y2gsIHRvdWNoLnByZXYpKSAv
LyBTaW5nbGUgdGFwCisgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2UocG9zLCBwb3MpOworICAg
ICAgICBlbHNlIGlmICghdG91Y2gucHJldi5wcmV2IHx8IGZhckF3YXkodG91Y2gsIHRvdWNoLnBy
ZXYucHJldikpIC8vIERvdWJsZSB0YXAKKyAgICAgICAgICByYW5nZSA9IGNtLmZpbmRXb3JkQXQo
cG9zKTsKKyAgICAgICAgZWxzZSAvLyBUcmlwbGUgdGFwCisgICAgICAgICAgcmFuZ2UgPSBuZXcg
UmFuZ2UoUG9zKHBvcy5saW5lLCAwKSwgY2xpcFBvcyhjbS5kb2MsIFBvcyhwb3MubGluZSArIDEs
IDApKSk7CisgICAgICAgIGNtLnNldFNlbGVjdGlvbihyYW5nZS5hbmNob3IsIHJhbmdlLmhlYWQp
OworICAgICAgICBjbS5mb2N1cygpOworICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOworICAg
ICAgfQorICAgICAgZmluaXNoVG91Y2goKTsKKyAgICB9KTsKKyAgICBvbihkLnNjcm9sbGVyLCAi
dG91Y2hjYW5jZWwiLCBmaW5pc2hUb3VjaCk7CiAKICAgICAvLyBTeW5jIHNjcm9sbGluZyBiZXR3
ZWVuIGZha2Ugc2Nyb2xsYmFycyBhbmQgcmVhbCBzY3JvbGxhYmxlCiAgICAgLy8gYXJlYSwgZW5z
dXJlIHZpZXdwb3J0IGlzIHVwZGF0ZWQgd2hlbiBzY3JvbGxpbmcuCkBAIC0yMzgzLDEwNSArMzQz
NCw0OCBAQAogICAgICAgICBzaWduYWwoY20sICJzY3JvbGwiLCBjbSk7CiAgICAgICB9CiAgICAg
fSk7Ci0gICAgb24oZC5zY3JvbGxiYXJWLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7Ci0gICAgICBp
ZiAoZC5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHNldFNjcm9sbFRvcChjbSwgZC5zY3JvbGxiYXJW
LnNjcm9sbFRvcCk7Ci0gICAgfSk7Ci0gICAgb24oZC5zY3JvbGxiYXJILCAic2Nyb2xsIiwgZnVu
Y3Rpb24oKSB7Ci0gICAgICBpZiAoZC5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHNldFNjcm9sbExl
ZnQoY20sIGQuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KTsKLSAgICB9KTsKIAogICAgIC8vIExpc3Rl
biB0byB3aGVlbCBldmVudHMgaW4gb3JkZXIgdG8gdHJ5IGFuZCB1cGRhdGUgdGhlIHZpZXdwb3J0
IG9uIHRpbWUuCiAgICAgb24oZC5zY3JvbGxlciwgIm1vdXNld2hlZWwiLCBmdW5jdGlvbihlKXtv
blNjcm9sbFdoZWVsKGNtLCBlKTt9KTsKICAgICBvbihkLnNjcm9sbGVyLCAiRE9NTW91c2VTY3Jv
bGwiLCBmdW5jdGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBlKTt9KTsKIAotICAgIC8vIFByZXZl
bnQgY2xpY2tzIGluIHRoZSBzY3JvbGxiYXJzIGZyb20ga2lsbGluZyBmb2N1cwotICAgIGZ1bmN0
aW9uIHJlRm9jdXMoKSB7IGlmIChjbS5zdGF0ZS5mb2N1c2VkKSBzZXRUaW1lb3V0KGJpbmQoZm9j
dXNJbnB1dCwgY20pLCAwKTsgfQotICAgIG9uKGQuc2Nyb2xsYmFySCwgIm1vdXNlZG93biIsIHJl
Rm9jdXMpOwotICAgIG9uKGQuc2Nyb2xsYmFyViwgIm1vdXNlZG93biIsIHJlRm9jdXMpOwogICAg
IC8vIFByZXZlbnQgd3JhcHBlciBmcm9tIGV2ZXIgc2Nyb2xsaW5nCiAgICAgb24oZC53cmFwcGVy
LCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7IGQud3JhcHBlci5zY3JvbGxUb3AgPSBkLndyYXBwZXIu
c2Nyb2xsTGVmdCA9IDA7IH0pOwogCi0gICAgb24oZC5pbnB1dCwgImtleXVwIiwgb3BlcmF0aW9u
KGNtLCBvbktleVVwKSk7Ci0gICAgb24oZC5pbnB1dCwgImlucHV0IiwgZnVuY3Rpb24oKSB7Ci0g
ICAgICBpZiAoaWUgJiYgIWllX3VwdG84ICYmIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24p
IGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxsOwotICAgICAgZmFzdFBvbGwoY20p
OwotICAgIH0pOwotICAgIG9uKGQuaW5wdXQsICJrZXlkb3duIiwgb3BlcmF0aW9uKGNtLCBvbktl
eURvd24pKTsKLSAgICBvbihkLmlucHV0LCAia2V5cHJlc3MiLCBvcGVyYXRpb24oY20sIG9uS2V5
UHJlc3MpKTsKLSAgICBvbihkLmlucHV0LCAiZm9jdXMiLCBiaW5kKG9uRm9jdXMsIGNtKSk7Ci0g
ICAgb24oZC5pbnB1dCwgImJsdXIiLCBiaW5kKG9uQmx1ciwgY20pKTsKLQotICAgIGZ1bmN0aW9u
IGRyYWdfKGUpIHsKLSAgICAgIGlmICghc2lnbmFsRE9NRXZlbnQoY20sIGUpKSBlX3N0b3AoZSk7
Ci0gICAgfQotICAgIGlmIChjbS5vcHRpb25zLmRyYWdEcm9wKSB7Ci0gICAgICBvbihkLnNjcm9s
bGVyLCAiZHJhZ3N0YXJ0IiwgZnVuY3Rpb24oZSl7b25EcmFnU3RhcnQoY20sIGUpO30pOwotICAg
ICAgb24oZC5zY3JvbGxlciwgImRyYWdlbnRlciIsIGRyYWdfKTsKLSAgICAgIG9uKGQuc2Nyb2xs
ZXIsICJkcmFnb3ZlciIsIGRyYWdfKTsKLSAgICAgIG9uKGQuc2Nyb2xsZXIsICJkcm9wIiwgb3Bl
cmF0aW9uKGNtLCBvbkRyb3ApKTsKLSAgICB9Ci0gICAgb24oZC5zY3JvbGxlciwgInBhc3RlIiwg
ZnVuY3Rpb24oZSkgewotICAgICAgaWYgKGV2ZW50SW5XaWRnZXQoZCwgZSkpIHJldHVybjsKLSAg
ICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlOwotICAgICAgZm9jdXNJbnB1dChjbSk7
Ci0gICAgICBmYXN0UG9sbChjbSk7Ci0gICAgfSk7Ci0gICAgb24oZC5pbnB1dCwgInBhc3RlIiwg
ZnVuY3Rpb24oKSB7Ci0gICAgICAvLyBXb3JrYXJvdW5kIGZvciB3ZWJraXQgYnVnIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDIwNgotICAgICAgLy8gQWRkIGEgY2hh
ciB0byB0aGUgZW5kIG9mIHRleHRhcmVhIGJlZm9yZSBwYXN0ZSBvY2N1ciBzbyB0aGF0Ci0gICAg
ICAvLyBzZWxlY3Rpb24gZG9lc24ndCBzcGFuIHRvIHRoZSBlbmQgb2YgdGV4dGFyZWEuCi0gICAg
ICBpZiAod2Via2l0ICYmICFjbS5zdGF0ZS5mYWtlZExhc3RDaGFyICYmICEobmV3IERhdGUgLSBj
bS5zdGF0ZS5sYXN0TWlkZGxlRG93biA8IDIwMCkpIHsKLSAgICAgICAgdmFyIHN0YXJ0ID0gZC5p
bnB1dC5zZWxlY3Rpb25TdGFydCwgZW5kID0gZC5pbnB1dC5zZWxlY3Rpb25FbmQ7Ci0gICAgICAg
IGQuaW5wdXQudmFsdWUgKz0gIiQiOwotICAgICAgICBkLmlucHV0LnNlbGVjdGlvblN0YXJ0ID0g
c3RhcnQ7Ci0gICAgICAgIGQuaW5wdXQuc2VsZWN0aW9uRW5kID0gZW5kOwotICAgICAgICBjbS5z
dGF0ZS5mYWtlZExhc3RDaGFyID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGNtLnN0YXRlLnBhc3Rl
SW5jb21pbmcgPSB0cnVlOwotICAgICAgZmFzdFBvbGwoY20pOwotICAgIH0pOworICAgIGQuZHJh
Z0Z1bmN0aW9ucyA9IHsKKyAgICAgIHNpbXBsZTogZnVuY3Rpb24oZSkge2lmICghc2lnbmFsRE9N
RXZlbnQoY20sIGUpKSBlX3N0b3AoZSk7fSwKKyAgICAgIHN0YXJ0OiBmdW5jdGlvbihlKXtvbkRy
YWdTdGFydChjbSwgZSk7fSwKKyAgICAgIGRyb3A6IG9wZXJhdGlvbihjbSwgb25Ecm9wKQorICAg
IH07CiAKLSAgICBmdW5jdGlvbiBwcmVwYXJlQ29weUN1dChlKSB7Ci0gICAgICBpZiAoY20uc29t
ZXRoaW5nU2VsZWN0ZWQoKSkgewotICAgICAgICBpZiAoZC5pbmFjY3VyYXRlU2VsZWN0aW9uKSB7
Ci0gICAgICAgICAgZC5wcmV2SW5wdXQgPSAiIjsKLSAgICAgICAgICBkLmluYWNjdXJhdGVTZWxl
Y3Rpb24gPSBmYWxzZTsKLSAgICAgICAgICBkLmlucHV0LnZhbHVlID0gY20uZ2V0U2VsZWN0aW9u
KCk7Ci0gICAgICAgICAgc2VsZWN0SW5wdXQoZC5pbnB1dCk7Ci0gICAgICAgIH0KLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHZhciB0ZXh0ID0gIiIsIHJhbmdlcyA9IFtdOwotICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGNtLmRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgdmFyIGxpbmUgPSBjbS5kb2Muc2VsLnJhbmdlc1tpXS5oZWFkLmxpbmU7Ci0gICAgICAgICAg
dmFyIGxpbmVSYW5nZSA9IHthbmNob3I6IFBvcyhsaW5lLCAwKSwgaGVhZDogUG9zKGxpbmUgKyAx
LCAwKX07Ci0gICAgICAgICAgcmFuZ2VzLnB1c2gobGluZVJhbmdlKTsKLSAgICAgICAgICB0ZXh0
ICs9IGNtLmdldFJhbmdlKGxpbmVSYW5nZS5hbmNob3IsIGxpbmVSYW5nZS5oZWFkKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoZS50eXBlID09ICJjdXQiKSB7Ci0gICAgICAgICAgY20uc2V0U2Vs
ZWN0aW9ucyhyYW5nZXMsIG51bGwsIHNlbF9kb250U2Nyb2xsKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICBkLnByZXZJbnB1dCA9ICIiOwotICAgICAgICAgIGQuaW5wdXQudmFsdWUgPSB0
ZXh0OwotICAgICAgICAgIHNlbGVjdElucHV0KGQuaW5wdXQpOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICBpZiAoZS50eXBlID09ICJjdXQiKSBjbS5zdGF0ZS5jdXRJbmNvbWluZyA9IHRydWU7
Ci0gICAgfQotICAgIG9uKGQuaW5wdXQsICJjdXQiLCBwcmVwYXJlQ29weUN1dCk7Ci0gICAgb24o
ZC5pbnB1dCwgImNvcHkiLCBwcmVwYXJlQ29weUN1dCk7CisgICAgdmFyIGlucCA9IGQuaW5wdXQu
Z2V0RmllbGQoKTsKKyAgICBvbihpbnAsICJrZXl1cCIsIGZ1bmN0aW9uKGUpIHsgb25LZXlVcC5j
YWxsKGNtLCBlKTsgfSk7CisgICAgb24oaW5wLCAia2V5ZG93biIsIG9wZXJhdGlvbihjbSwgb25L
ZXlEb3duKSk7CisgICAgb24oaW5wLCAia2V5cHJlc3MiLCBvcGVyYXRpb24oY20sIG9uS2V5UHJl
c3MpKTsKKyAgICBvbihpbnAsICJmb2N1cyIsIGJpbmQob25Gb2N1cywgY20pKTsKKyAgICBvbihp
bnAsICJibHVyIiwgYmluZChvbkJsdXIsIGNtKSk7CisgIH0KIAotICAgIC8vIE5lZWRlZCB0byBo
YW5kbGUgVGFiIGtleSBpbiBLSFRNTAotICAgIGlmIChraHRtbCkgb24oZC5zaXplciwgIm1vdXNl
dXAiLCBmdW5jdGlvbigpIHsKLSAgICAgIGlmIChhY3RpdmVFbHQoKSA9PSBkLmlucHV0KSBkLmlu
cHV0LmJsdXIoKTsKLSAgICAgIGZvY3VzSW5wdXQoY20pOwotICAgIH0pOworICBmdW5jdGlvbiBk
cmFnRHJvcENoYW5nZWQoY20sIHZhbHVlLCBvbGQpIHsKKyAgICB2YXIgd2FzT24gPSBvbGQgJiYg
b2xkICE9IENvZGVNaXJyb3IuSW5pdDsKKyAgICBpZiAoIXZhbHVlICE9ICF3YXNPbikgeworICAg
ICAgdmFyIGZ1bmNzID0gY20uZGlzcGxheS5kcmFnRnVuY3Rpb25zOworICAgICAgdmFyIHRvZ2ds
ZSA9IHZhbHVlID8gb24gOiBvZmY7CisgICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwg
ImRyYWdzdGFydCIsIGZ1bmNzLnN0YXJ0KTsKKyAgICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9s
bGVyLCAiZHJhZ2VudGVyIiwgZnVuY3Muc2ltcGxlKTsKKyAgICAgIHRvZ2dsZShjbS5kaXNwbGF5
LnNjcm9sbGVyLCAiZHJhZ292ZXIiLCBmdW5jcy5zaW1wbGUpOworICAgICAgdG9nZ2xlKGNtLmRp
c3BsYXkuc2Nyb2xsZXIsICJkcm9wIiwgZnVuY3MuZHJvcCk7CisgICAgfQogICB9CiAKICAgLy8g
Q2FsbGVkIHdoZW4gdGhlIHdpbmRvdyByZXNpemVzCiAgIGZ1bmN0aW9uIG9uUmVzaXplKGNtKSB7
Ci0gICAgLy8gTWlnaHQgYmUgYSB0ZXh0IHNjYWxpbmcgb3BlcmF0aW9uLCBjbGVhciBzaXplIGNh
Y2hlcy4KICAgICB2YXIgZCA9IGNtLmRpc3BsYXk7CisgICAgaWYgKGQubGFzdFdyYXBIZWlnaHQg
PT0gZC53cmFwcGVyLmNsaWVudEhlaWdodCAmJiBkLmxhc3RXcmFwV2lkdGggPT0gZC53cmFwcGVy
LmNsaWVudFdpZHRoKQorICAgICAgcmV0dXJuOworICAgIC8vIE1pZ2h0IGJlIGEgdGV4dCBzY2Fs
aW5nIG9wZXJhdGlvbiwgY2xlYXIgc2l6ZSBjYWNoZXMuCiAgICAgZC5jYWNoZWRDaGFyV2lkdGgg
PSBkLmNhY2hlZFRleHRIZWlnaHQgPSBkLmNhY2hlZFBhZGRpbmdIID0gbnVsbDsKKyAgICBkLnNj
cm9sbGJhcnNDbGlwcGVkID0gZmFsc2U7CiAgICAgY20uc2V0U2l6ZSgpOwogICB9CiAKQEAgLTI0
OTAsNyArMzQ4NCw5IEBACiAgIC8vIFJldHVybiB0cnVlIHdoZW4gdGhlIGdpdmVuIG1vdXNlIGV2
ZW50IGhhcHBlbmVkIGluIGEgd2lkZ2V0CiAgIGZ1bmN0aW9uIGV2ZW50SW5XaWRnZXQoZGlzcGxh
eSwgZSkgewogICAgIGZvciAodmFyIG4gPSBlX3RhcmdldChlKTsgbiAhPSBkaXNwbGF5LndyYXBw
ZXI7IG4gPSBuLnBhcmVudE5vZGUpIHsKLSAgICAgIGlmICghbiB8fCBuLmlnbm9yZUV2ZW50cyB8
fCBuLnBhcmVudE5vZGUgPT0gZGlzcGxheS5zaXplciAmJiBuICE9IGRpc3BsYXkubW92ZXIpIHJl
dHVybiB0cnVlOworICAgICAgaWYgKCFuIHx8IChuLm5vZGVUeXBlID09IDEgJiYgbi5nZXRBdHRy
aWJ1dGUoImNtLWlnbm9yZS1ldmVudHMiKSA9PSAidHJ1ZSIpIHx8CisgICAgICAgICAgKG4ucGFy
ZW50Tm9kZSA9PSBkaXNwbGF5LnNpemVyICYmIG4gIT0gZGlzcGxheS5tb3ZlcikpCisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgfQogCkBAIC0yNTAxLDExICszNDk3LDggQEAKICAgLy8g
Y29vcmRpbmF0ZXMgYmV5b25kIHRoZSByaWdodCBvZiB0aGUgdGV4dC4KICAgZnVuY3Rpb24gcG9z
RnJvbU1vdXNlKGNtLCBlLCBsaWJlcmFsLCBmb3JSZWN0KSB7CiAgICAgdmFyIGRpc3BsYXkgPSBj
bS5kaXNwbGF5OwotICAgIGlmICghbGliZXJhbCkgewotICAgICAgdmFyIHRhcmdldCA9IGVfdGFy
Z2V0KGUpOwotICAgICAgaWYgKHRhcmdldCA9PSBkaXNwbGF5LnNjcm9sbGJhckggfHwgdGFyZ2V0
ID09IGRpc3BsYXkuc2Nyb2xsYmFyViB8fAotICAgICAgICAgIHRhcmdldCA9PSBkaXNwbGF5LnNj
cm9sbGJhckZpbGxlciB8fCB0YXJnZXQgPT0gZGlzcGxheS5ndXR0ZXJGaWxsZXIpIHJldHVybiBu
dWxsOwotICAgIH0KKyAgICBpZiAoIWxpYmVyYWwgJiYgZV90YXJnZXQoZSkuZ2V0QXR0cmlidXRl
KCJjbS1ub3QtY29udGVudCIpID09ICJ0cnVlIikgcmV0dXJuIG51bGw7CisKICAgICB2YXIgeCwg
eSwgc3BhY2UgPSBkaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAg
ICAvLyBGYWlscyB1bnByZWRpY3RhYmx5IG9uIElFWzY3XSB3aGVuIG1vdXNlIGlzIGRyYWdnZWQg
YXJvdW5kIHF1aWNrbHkuCiAgICAgdHJ5IHsgeCA9IGUuY2xpZW50WCAtIHNwYWNlLmxlZnQ7IHkg
PSBlLmNsaWVudFkgLSBzcGFjZS50b3A7IH0KQEAgLTI1MjQsOCArMzUxNyw4IEBACiAgIC8vIG1p
ZGRsZS1jbGljay1wYXN0ZS4gT3IgaXQgbWlnaHQgYmUgYSBjbGljayBvbiBzb21ldGhpbmcgd2Ug
c2hvdWxkCiAgIC8vIG5vdCBpbnRlcmZlcmUgd2l0aCwgc3VjaCBhcyBhIHNjcm9sbGJhciBvciB3
aWRnZXQuCiAgIGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHsKLSAgICBpZiAoc2lnbmFsRE9NRXZl
bnQodGhpcywgZSkpIHJldHVybjsKICAgICB2YXIgY20gPSB0aGlzLCBkaXNwbGF5ID0gY20uZGlz
cGxheTsKKyAgICBpZiAoZGlzcGxheS5hY3RpdmVUb3VjaCAmJiBkaXNwbGF5LmlucHV0LnN1cHBv
cnRzVG91Y2goKSB8fCBzaWduYWxET01FdmVudChjbSwgZSkpIHJldHVybjsKICAgICBkaXNwbGF5
LnNoaWZ0ID0gZS5zaGlmdEtleTsKIAogICAgIGlmIChldmVudEluV2lkZ2V0KGRpc3BsYXksIGUp
KSB7CkBAIC0yNTUxLDE4ICszNTQ0LDIwIEBACiAgICAgY2FzZSAyOgogICAgICAgaWYgKHdlYmtp
dCkgY20uc3RhdGUubGFzdE1pZGRsZURvd24gPSArbmV3IERhdGU7CiAgICAgICBpZiAoc3RhcnQp
IGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHN0YXJ0KTsKLSAgICAgIHNldFRpbWVvdXQoYmluZChm
b2N1c0lucHV0LCBjbSksIDIwKTsKKyAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7ZGlzcGxh
eS5pbnB1dC5mb2N1cygpO30sIDIwKTsKICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICAg
ICBicmVhazsKICAgICBjYXNlIDM6CiAgICAgICBpZiAoY2FwdHVyZVJpZ2h0Q2xpY2spIG9uQ29u
dGV4dE1lbnUoY20sIGUpOworICAgICAgZWxzZSBkZWxheUJsdXJFdmVudChjbSk7CiAgICAgICBi
cmVhazsKICAgICB9CiAgIH0KIAogICB2YXIgbGFzdENsaWNrLCBsYXN0RG91YmxlQ2xpY2s7CiAg
IGZ1bmN0aW9uIGxlZnRCdXR0b25Eb3duKGNtLCBlLCBzdGFydCkgewotICAgIHNldFRpbWVvdXQo
YmluZChlbnN1cmVGb2N1cywgY20pLCAwKTsKKyAgICBpZiAoaWUpIHNldFRpbWVvdXQoYmluZChl
bnN1cmVGb2N1cywgY20pLCAwKTsKKyAgICBlbHNlIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0
KCk7CiAKICAgICB2YXIgbm93ID0gK25ldyBEYXRlLCB0eXBlOwogICAgIGlmIChsYXN0RG91Ymxl
Q2xpY2sgJiYgbGFzdERvdWJsZUNsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgY21wKGxhc3REb3Vi
bGVDbGljay5wb3MsIHN0YXJ0KSA9PSAwKSB7CkBAIC0yNTc1LDkgKzM1NzAsMTEgQEAKICAgICAg
IGxhc3RDbGljayA9IHt0aW1lOiBub3csIHBvczogc3RhcnR9OwogICAgIH0KIAotICAgIHZhciBz
ZWwgPSBjbS5kb2Muc2VsLCBtb2RpZmllciA9IG1hYyA/IGUubWV0YUtleSA6IGUuY3RybEtleTsK
KyAgICB2YXIgc2VsID0gY20uZG9jLnNlbCwgbW9kaWZpZXIgPSBtYWMgPyBlLm1ldGFLZXkgOiBl
LmN0cmxLZXksIGNvbnRhaW5lZDsKICAgICBpZiAoY20ub3B0aW9ucy5kcmFnRHJvcCAmJiBkcmFn
QW5kRHJvcCAmJiAhaXNSZWFkT25seShjbSkgJiYKLSAgICAgICAgdHlwZSA9PSAic2luZ2xlIiAm
JiBzZWwuY29udGFpbnMoc3RhcnQpID4gLTEgJiYgc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCkpCisg
ICAgICAgIHR5cGUgPT0gInNpbmdsZSIgJiYgKGNvbnRhaW5lZCA9IHNlbC5jb250YWlucyhzdGFy
dCkpID4gLTEgJiYKKyAgICAgICAgKGNtcCgoY29udGFpbmVkID0gc2VsLnJhbmdlc1tjb250YWlu
ZWRdKS5mcm9tKCksIHN0YXJ0KSA8IDAgfHwgc3RhcnQueFJlbCA+IDApICYmCisgICAgICAgIChj
bXAoY29udGFpbmVkLnRvKCksIHN0YXJ0KSA+IDAgfHwgc3RhcnQueFJlbCA8IDApKQogICAgICAg
bGVmdEJ1dHRvblN0YXJ0RHJhZyhjbSwgZSwgc3RhcnQsIG1vZGlmaWVyKTsKICAgICBlbHNlCiAg
ICAgICBsZWZ0QnV0dG9uU2VsZWN0KGNtLCBlLCBzdGFydCwgdHlwZSwgbW9kaWZpZXIpOwpAQCAt
MjU4Niw3ICszNTgzLDcgQEAKICAgLy8gU3RhcnQgYSB0ZXh0IGRyYWcuIFdoZW4gaXQgZW5kcywg
c2VlIGlmIGFueSBkcmFnZ2luZyBhY3R1YWxseQogICAvLyBoYXBwZW4sIGFuZCB0cmVhdCBhcyBh
IGNsaWNrIGlmIGl0IGRpZG4ndC4KICAgZnVuY3Rpb24gbGVmdEJ1dHRvblN0YXJ0RHJhZyhjbSwg
ZSwgc3RhcnQsIG1vZGlmaWVyKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OworICAg
IHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgc3RhcnRUaW1lID0gK25ldyBEYXRlOwogICAgIHZh
ciBkcmFnRW5kID0gb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlMikgewogICAgICAgaWYgKHdlYmtp
dCkgZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSBmYWxzZTsKICAgICAgIGNtLnN0YXRlLmRy
YWdnaW5nVGV4dCA9IGZhbHNlOwpAQCAtMjU5NCwxMiArMzU5MSwxMyBAQAogICAgICAgb2ZmKGRp
c3BsYXkuc2Nyb2xsZXIsICJkcm9wIiwgZHJhZ0VuZCk7CiAgICAgICBpZiAoTWF0aC5hYnMoZS5j
bGllbnRYIC0gZTIuY2xpZW50WCkgKyBNYXRoLmFicyhlLmNsaWVudFkgLSBlMi5jbGllbnRZKSA8
IDEwKSB7CiAgICAgICAgIGVfcHJldmVudERlZmF1bHQoZTIpOwotICAgICAgICBpZiAoIW1vZGlm
aWVyKQorICAgICAgICBpZiAoIW1vZGlmaWVyICYmICtuZXcgRGF0ZSAtIDIwMCA8IHN0YXJ0VGlt
ZSkKICAgICAgICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBzdGFydCk7Ci0gICAgICAgIGZv
Y3VzSW5wdXQoY20pOwotICAgICAgICAvLyBXb3JrIGFyb3VuZCB1bmV4cGxhaW5hYmxlIGZvY3Vz
IHByb2JsZW0gaW4gSUU5ICgjMjEyNykKLSAgICAgICAgaWYgKGllX3VwdG8xMCAmJiAhaWVfdXB0
bzgpCi0gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtkb2N1bWVudC5ib2R5LmZvY3Vz
KCk7IGZvY3VzSW5wdXQoY20pO30sIDIwKTsKKyAgICAgICAgLy8gV29yayBhcm91bmQgdW5leHBs
YWluYWJsZSBmb2N1cyBwcm9ibGVtIGluIElFOSAoIzIxMjcpIGFuZCBDaHJvbWUgKCMzMDgxKQor
ICAgICAgICBpZiAod2Via2l0IHx8IGllICYmIGllX3ZlcnNpb24gPT0gOSkKKyAgICAgICAgICBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2RvY3VtZW50LmJvZHkuZm9jdXMoKTsgZGlzcGxheS5pbnB1
dC5mb2N1cygpO30sIDIwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRpc3BsYXkuaW5wdXQu
Zm9jdXMoKTsKICAgICAgIH0KICAgICB9KTsKICAgICAvLyBMZXQgdGhlIGRyYWcgaGFuZGxlciBo
YW5kbGUgdGhpcy4KQEAgLTI2MTYsMTUgKzM2MTQsMTYgQEAKICAgICB2YXIgZGlzcGxheSA9IGNt
LmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogCi0gICAg
dmFyIG91clJhbmdlLCBvdXJJbmRleCwgc3RhcnRTZWwgPSBkb2Muc2VsOworICAgIHZhciBvdXJS
YW5nZSwgb3VySW5kZXgsIHN0YXJ0U2VsID0gZG9jLnNlbCwgcmFuZ2VzID0gc3RhcnRTZWwucmFu
Z2VzOwogICAgIGlmIChhZGROZXcgJiYgIWUuc2hpZnRLZXkpIHsKICAgICAgIG91ckluZGV4ID0g
ZG9jLnNlbC5jb250YWlucyhzdGFydCk7CiAgICAgICBpZiAob3VySW5kZXggPiAtMSkKLSAgICAg
ICAgb3VyUmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tvdXJJbmRleF07CisgICAgICAgIG91clJhbmdl
ID0gcmFuZ2VzW291ckluZGV4XTsKICAgICAgIGVsc2UKICAgICAgICAgb3VyUmFuZ2UgPSBuZXcg
UmFuZ2Uoc3RhcnQsIHN0YXJ0KTsKICAgICB9IGVsc2UgewogICAgICAgb3VyUmFuZ2UgPSBkb2Mu
c2VsLnByaW1hcnkoKTsKKyAgICAgIG91ckluZGV4ID0gZG9jLnNlbC5wcmltSW5kZXg7CiAgICAg
fQogCiAgICAgaWYgKGUuYWx0S2V5KSB7CkBAIC0yNjMzLDcgKzM2MzIsNyBAQAogICAgICAgc3Rh
cnQgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUsIHRydWUpOwogICAgICAgb3VySW5kZXggPSAt
MTsKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImRvdWJsZSIpIHsKLSAgICAgIHZhciB3b3JkID0g
ZmluZFdvcmRBdChjbSwgc3RhcnQpOworICAgICAgdmFyIHdvcmQgPSBjbS5maW5kV29yZEF0KHN0
YXJ0KTsKICAgICAgIGlmIChjbS5kaXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRlbmQpCiAgICAgICAg
IG91clJhbmdlID0gZXh0ZW5kUmFuZ2UoZG9jLCBvdXJSYW5nZSwgd29yZC5hbmNob3IsIHdvcmQu
aGVhZCk7CiAgICAgICBlbHNlCkBAIC0yNjUyLDEyICszNjUxLDE1IEBACiAgICAgICBvdXJJbmRl
eCA9IDA7CiAgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBuZXcgU2VsZWN0aW9uKFtvdXJSYW5nZV0s
IDApLCBzZWxfbW91c2UpOwogICAgICAgc3RhcnRTZWwgPSBkb2Muc2VsOwotICAgIH0gZWxzZSBp
ZiAob3VySW5kZXggPiAtMSkgewotICAgICAgcmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIG91cklu
ZGV4LCBvdXJSYW5nZSwgc2VsX21vdXNlKTsKLSAgICB9IGVsc2UgewotICAgICAgb3VySW5kZXgg
PSBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7Ci0gICAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxp
emVTZWxlY3Rpb24oZG9jLnNlbC5yYW5nZXMuY29uY2F0KFtvdXJSYW5nZV0pLCBvdXJJbmRleCks
CisgICAgfSBlbHNlIGlmIChvdXJJbmRleCA9PSAtMSkgeworICAgICAgb3VySW5kZXggPSByYW5n
ZXMubGVuZ3RoOworICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKHJh
bmdlcy5jb25jYXQoW291clJhbmdlXSksIG91ckluZGV4KSwKICAgICAgICAgICAgICAgICAgICB7
c2Nyb2xsOiBmYWxzZSwgb3JpZ2luOiAiKm1vdXNlIn0pOworICAgIH0gZWxzZSBpZiAocmFuZ2Vz
Lmxlbmd0aCA+IDEgJiYgcmFuZ2VzW291ckluZGV4XS5lbXB0eSgpICYmIHR5cGUgPT0gInNpbmds
ZSIgJiYgIWUuc2hpZnRLZXkpIHsKKyAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNl
bGVjdGlvbihyYW5nZXMuc2xpY2UoMCwgb3VySW5kZXgpLmNvbmNhdChyYW5nZXMuc2xpY2Uob3Vy
SW5kZXggKyAxKSksIDApKTsKKyAgICAgIHN0YXJ0U2VsID0gZG9jLnNlbDsKKyAgICB9IGVsc2Ug
eworICAgICAgcmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIG91ckluZGV4LCBvdXJSYW5nZSwgc2Vs
X21vdXNlKTsKICAgICB9CiAKICAgICB2YXIgbGFzdFBvcyA9IHN0YXJ0OwpAQCAtMjY4Nyw3ICsz
Njg5LDcgQEAKICAgICAgICAgdmFyIGFuY2hvciA9IG9sZFJhbmdlLmFuY2hvciwgaGVhZCA9IHBv
czsKICAgICAgICAgaWYgKHR5cGUgIT0gInNpbmdsZSIpIHsKICAgICAgICAgICBpZiAodHlwZSA9
PSAiZG91YmxlIikKLSAgICAgICAgICAgIHZhciByYW5nZSA9IGZpbmRXb3JkQXQoY20sIHBvcyk7
CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBjbS5maW5kV29yZEF0KHBvcyk7CiAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgMCks
IGNsaXBQb3MoZG9jLCBQb3MocG9zLmxpbmUgKyAxLCAwKSkpOwogICAgICAgICAgIGlmIChjbXAo
cmFuZ2UuYW5jaG9yLCBhbmNob3IpID4gMCkgewpAQCAtMjcxNiw3ICszNzE4LDcgQEAKICAgICAg
IHZhciBjdXIgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUsIHR5cGUgPT0gInJlY3QiKTsKICAg
ICAgIGlmICghY3VyKSByZXR1cm47CiAgICAgICBpZiAoY21wKGN1ciwgbGFzdFBvcykgIT0gMCkg
ewotICAgICAgICBlbnN1cmVGb2N1cyhjbSk7CisgICAgICAgIGNtLmN1ck9wLmZvY3VzID0gYWN0
aXZlRWx0KCk7CiAgICAgICAgIGV4dGVuZFRvKGN1cik7CiAgICAgICAgIHZhciB2aXNpYmxlID0g
dmlzaWJsZUxpbmVzKGRpc3BsYXksIGRvYyk7CiAgICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNp
YmxlLnRvIHx8IGN1ci5saW5lIDwgdmlzaWJsZS5mcm9tKQpAQCAtMjczNCwxNCArMzczNiwxNCBA
QAogICAgIGZ1bmN0aW9uIGRvbmUoZSkgewogICAgICAgY291bnRlciA9IEluZmluaXR5OwogICAg
ICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICAgIGZvY3VzSW5wdXQoY20pOworICAgICAgZGlz
cGxheS5pbnB1dC5mb2N1cygpOwogICAgICAgb2ZmKGRvY3VtZW50LCAibW91c2Vtb3ZlIiwgbW92
ZSk7CiAgICAgICBvZmYoZG9jdW1lbnQsICJtb3VzZXVwIiwgdXApOwogICAgICAgZG9jLmhpc3Rv
cnkubGFzdFNlbE9yaWdpbiA9IG51bGw7CiAgICAgfQogCiAgICAgdmFyIG1vdmUgPSBvcGVyYXRp
b24oY20sIGZ1bmN0aW9uKGUpIHsKLSAgICAgIGlmICgoaWUgJiYgIWllX3VwdG85KSA/ICAhZS5i
dXR0b25zIDogIWVfYnV0dG9uKGUpKSBkb25lKGUpOworICAgICAgaWYgKCFlX2J1dHRvbihlKSkg
ZG9uZShlKTsKICAgICAgIGVsc2UgZXh0ZW5kKGUpOwogICAgIH0pOwogICAgIHZhciB1cCA9IG9w
ZXJhdGlvbihjbSwgZG9uZSk7CkBAIC0yODAwLDcgKzM4MDIsOSBAQAogICAgICAgICAgIHRleHRb
aV0gPSByZWFkZXIucmVzdWx0OwogICAgICAgICAgIGlmICgrK3JlYWQgPT0gbikgewogICAgICAg
ICAgICAgcG9zID0gY2xpcFBvcyhjbS5kb2MsIHBvcyk7Ci0gICAgICAgICAgICB2YXIgY2hhbmdl
ID0ge2Zyb206IHBvcywgdG86IHBvcywgdGV4dDogc3BsaXRMaW5lcyh0ZXh0LmpvaW4oIlxuIikp
LCBvcmlnaW46ICJwYXN0ZSJ9OworICAgICAgICAgICAgdmFyIGNoYW5nZSA9IHtmcm9tOiBwb3Ms
IHRvOiBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGNtLmRvYy5zcGxpdExp
bmVzKHRleHQuam9pbihjbS5kb2MubGluZVNlcGFyYXRvcigpKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9yaWdpbjogInBhc3RlIn07CiAgICAgICAgICAgICBtYWtlQ2hhbmdlKGNtLmRv
YywgY2hhbmdlKTsKICAgICAgICAgICAgIHNldFNlbGVjdGlvblJlcGxhY2VIaXN0b3J5KGNtLmRv
Yywgc2ltcGxlU2VsZWN0aW9uKHBvcywgY2hhbmdlRW5kKGNoYW5nZSkpKTsKICAgICAgICAgICB9
CkBAIC0yODEzLDE5ICszODE3LDE5IEBACiAgICAgICBpZiAoY20uc3RhdGUuZHJhZ2dpbmdUZXh0
ICYmIGNtLmRvYy5zZWwuY29udGFpbnMocG9zKSA+IC0xKSB7CiAgICAgICAgIGNtLnN0YXRlLmRy
YWdnaW5nVGV4dChlKTsKICAgICAgICAgLy8gRW5zdXJlIHRoZSBlZGl0b3IgaXMgcmUtZm9jdXNl
ZAotICAgICAgICBzZXRUaW1lb3V0KGJpbmQoZm9jdXNJbnB1dCwgY20pLCAyMCk7CisgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Y20uZGlzcGxheS5pbnB1dC5mb2N1cygpO30sIDIwKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgfQogICAgICAgdHJ5IHsKICAgICAgICAgdmFyIHRleHQg
PSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCJUZXh0Iik7CiAgICAgICAgIGlmICh0ZXh0KSB7Ci0g
ICAgICAgICAgaWYgKGNtLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiAhKG1hYyA/IGUubWV0YUtleSA6
IGUuY3RybEtleSkpCisgICAgICAgICAgaWYgKGNtLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiAhKG1h
YyA/IGUuYWx0S2V5IDogZS5jdHJsS2V5KSkKICAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IGNt
Lmxpc3RTZWxlY3Rpb25zKCk7CiAgICAgICAgICAgc2V0U2VsZWN0aW9uTm9VbmRvKGNtLmRvYywg
c2ltcGxlU2VsZWN0aW9uKHBvcywgcG9zKSk7CiAgICAgICAgICAgaWYgKHNlbGVjdGVkKSBmb3Ig
KHZhciBpID0gMDsgaSA8IHNlbGVjdGVkLmxlbmd0aDsgKytpKQogICAgICAgICAgICAgcmVwbGFj
ZVJhbmdlKGNtLmRvYywgIiIsIHNlbGVjdGVkW2ldLmFuY2hvciwgc2VsZWN0ZWRbaV0uaGVhZCwg
ImRyYWciKTsKICAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKHRleHQsICJhcm91bmQiLCAi
cGFzdGUiKTsKLSAgICAgICAgICBmb2N1c0lucHV0KGNtKTsKKyAgICAgICAgICBjbS5kaXNwbGF5
LmlucHV0LmZvY3VzKCk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGNhdGNoKGUpe30KQEAg
LTI4NjEsMTAgKzM4NjUsMTAgQEAKICAgZnVuY3Rpb24gc2V0U2Nyb2xsVG9wKGNtLCB2YWwpIHsK
ICAgICBpZiAoTWF0aC5hYnMoY20uZG9jLnNjcm9sbFRvcCAtIHZhbCkgPCAyKSByZXR1cm47CiAg
ICAgY20uZG9jLnNjcm9sbFRvcCA9IHZhbDsKLSAgICBpZiAoIWdlY2tvKSB1cGRhdGVEaXNwbGF5
KGNtLCB7dG9wOiB2YWx9KTsKKyAgICBpZiAoIWdlY2tvKSB1cGRhdGVEaXNwbGF5U2ltcGxlKGNt
LCB7dG9wOiB2YWx9KTsKICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgIT0g
dmFsKSBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHZhbDsKLSAgICBpZiAoY20uZGlz
cGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCAhPSB2YWwpIGNtLmRpc3BsYXkuc2Nyb2xsYmFyVi5z
Y3JvbGxUb3AgPSB2YWw7Ci0gICAgaWYgKGdlY2tvKSB1cGRhdGVEaXNwbGF5KGNtKTsKKyAgICBj
bS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKHZhbCk7CisgICAgaWYgKGdlY2tvKSB1
cGRhdGVEaXNwbGF5U2ltcGxlKGNtKTsKICAgICBzdGFydFdvcmtlcihjbSwgMTAwKTsKICAgfQog
ICAvLyBTeW5jIHNjcm9sbGVyIGFuZCBzY3JvbGxiYXIsIGVuc3VyZSB0aGUgZ3V0dGVyIGVsZW1l
bnRzIGFyZQpAQCAtMjg3NSw3ICszODc5LDcgQEAKICAgICBjbS5kb2Muc2Nyb2xsTGVmdCA9IHZh
bDsKICAgICBhbGlnbkhvcml6b250YWxseShjbSk7CiAgICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xs
ZXIuc2Nyb2xsTGVmdCAhPSB2YWwpIGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IHZh
bDsKLSAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJILnNjcm9sbExlZnQgIT0gdmFsKSBjbS5k
aXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdCA9IHZhbDsKKyAgICBjbS5kaXNwbGF5LnNjcm9s
bGJhcnMuc2V0U2Nyb2xsTGVmdCh2YWwpOwogICB9CiAKICAgLy8gU2luY2UgdGhlIGRlbHRhIHZh
bHVlcyByZXBvcnRlZCBvbiBtb3VzZSB3aGVlbCBldmVudHMgYXJlCkBAIC0yODk5LDExICszOTAz
LDIyIEBACiAgIGVsc2UgaWYgKGNocm9tZSkgd2hlZWxQaXhlbHNQZXJVbml0ID0gLS43OwogICBl
bHNlIGlmIChzYWZhcmkpIHdoZWVsUGl4ZWxzUGVyVW5pdCA9IC0xLzM7CiAKLSAgZnVuY3Rpb24g
b25TY3JvbGxXaGVlbChjbSwgZSkgeworICB2YXIgd2hlZWxFdmVudERlbHRhID0gZnVuY3Rpb24o
ZSkgewogICAgIHZhciBkeCA9IGUud2hlZWxEZWx0YVgsIGR5ID0gZS53aGVlbERlbHRhWTsKICAg
ICBpZiAoZHggPT0gbnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMgPT0gZS5IT1JJWk9OVEFMX0FY
SVMpIGR4ID0gZS5kZXRhaWw7CiAgICAgaWYgKGR5ID09IG51bGwgJiYgZS5kZXRhaWwgJiYgZS5h
eGlzID09IGUuVkVSVElDQUxfQVhJUykgZHkgPSBlLmRldGFpbDsKICAgICBlbHNlIGlmIChkeSA9
PSBudWxsKSBkeSA9IGUud2hlZWxEZWx0YTsKKyAgICByZXR1cm4ge3g6IGR4LCB5OiBkeX07Cisg
IH07CisgIENvZGVNaXJyb3Iud2hlZWxFdmVudFBpeGVscyA9IGZ1bmN0aW9uKGUpIHsKKyAgICB2
YXIgZGVsdGEgPSB3aGVlbEV2ZW50RGVsdGEoZSk7CisgICAgZGVsdGEueCAqPSB3aGVlbFBpeGVs
c1BlclVuaXQ7CisgICAgZGVsdGEueSAqPSB3aGVlbFBpeGVsc1BlclVuaXQ7CisgICAgcmV0dXJu
IGRlbHRhOworICB9OworCisgIGZ1bmN0aW9uIG9uU2Nyb2xsV2hlZWwoY20sIGUpIHsKKyAgICB2
YXIgZGVsdGEgPSB3aGVlbEV2ZW50RGVsdGEoZSksIGR4ID0gZGVsdGEueCwgZHkgPSBkZWx0YS55
OwogCiAgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzY3JvbGwgPSBkaXNwbGF5LnNjcm9s
bGVyOwogICAgIC8vIFF1aXQgaWYgdGhlcmUncyBub3RoaW5nIHRvIHNjcm9sbCBoZXJlCkBAIC0y
OTQ3LDcgKzM5NjIsNyBAQAogICAgICAgdmFyIHRvcCA9IGNtLmRvYy5zY3JvbGxUb3AsIGJvdCA9
IHRvcCArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CiAgICAgICBpZiAocGl4ZWxzIDwg
MCkgdG9wID0gTWF0aC5tYXgoMCwgdG9wICsgcGl4ZWxzIC0gNTApOwogICAgICAgZWxzZSBib3Qg
PSBNYXRoLm1pbihjbS5kb2MuaGVpZ2h0LCBib3QgKyBwaXhlbHMgKyA1MCk7Ci0gICAgICB1cGRh
dGVEaXNwbGF5KGNtLCB7dG9wOiB0b3AsIGJvdHRvbTogYm90fSk7CisgICAgICB1cGRhdGVEaXNw
bGF5U2ltcGxlKGNtLCB7dG9wOiB0b3AsIGJvdHRvbTogYm90fSk7CiAgICAgfQogCiAgICAgaWYg
KHdoZWVsU2FtcGxlcyA8IDIwKSB7CkBAIC0yOTgxLDcgKzM5OTYsNyBAQAogICAgIH0KICAgICAv
LyBFbnN1cmUgcHJldmlvdXMgaW5wdXQgaGFzIGJlZW4gcmVhZCwgc28gdGhhdCB0aGUgaGFuZGxl
ciBzZWVzIGEKICAgICAvLyBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIGRvY3VtZW50Ci0gICAgaWYg
KGNtLmRpc3BsYXkucG9sbGluZ0Zhc3QgJiYgcmVhZElucHV0KGNtKSkgY20uZGlzcGxheS5wb2xs
aW5nRmFzdCA9IGZhbHNlOworICAgIGNtLmRpc3BsYXkuaW5wdXQuZW5zdXJlUG9sbGVkKCk7CiAg
ICAgdmFyIHByZXZTaGlmdCA9IGNtLmRpc3BsYXkuc2hpZnQsIGRvbmUgPSBmYWxzZTsKICAgICB0
cnkgewogICAgICAgaWYgKGlzUmVhZE9ubHkoY20pKSBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0g
dHJ1ZTsKQEAgLTI5OTQsNzEgKzQwMDksNzkgQEAKICAgICByZXR1cm4gZG9uZTsKICAgfQogCi0g
IC8vIENvbGxlY3QgdGhlIGN1cnJlbnRseSBhY3RpdmUga2V5bWFwcy4KLSAgZnVuY3Rpb24gYWxs
S2V5TWFwcyhjbSkgewotICAgIHZhciBtYXBzID0gY20uc3RhdGUua2V5TWFwcy5zbGljZSgwKTsK
LSAgICBpZiAoY20ub3B0aW9ucy5leHRyYUtleXMpIG1hcHMucHVzaChjbS5vcHRpb25zLmV4dHJh
S2V5cyk7Ci0gICAgbWFwcy5wdXNoKGNtLm9wdGlvbnMua2V5TWFwKTsKLSAgICByZXR1cm4gbWFw
czsKKyAgZnVuY3Rpb24gbG9va3VwS2V5Rm9yRWRpdG9yKGNtLCBuYW1lLCBoYW5kbGUpIHsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLnN0YXRlLmtleU1hcHMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgIHZhciByZXN1bHQgPSBsb29rdXBLZXkobmFtZSwgY20uc3RhdGUua2V5TWFwc1tpXSwgaGFu
ZGxlLCBjbSk7CisgICAgICBpZiAocmVzdWx0KSByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBy
ZXR1cm4gKGNtLm9wdGlvbnMuZXh0cmFLZXlzICYmIGxvb2t1cEtleShuYW1lLCBjbS5vcHRpb25z
LmV4dHJhS2V5cywgaGFuZGxlLCBjbSkpCisgICAgICB8fCBsb29rdXBLZXkobmFtZSwgY20ub3B0
aW9ucy5rZXlNYXAsIGhhbmRsZSwgY20pOworICB9CisKKyAgdmFyIHN0b3BTZXEgPSBuZXcgRGVs
YXllZDsKKyAgZnVuY3Rpb24gZGlzcGF0Y2hLZXkoY20sIG5hbWUsIGUsIGhhbmRsZSkgeworICAg
IHZhciBzZXEgPSBjbS5zdGF0ZS5rZXlTZXE7CisgICAgaWYgKHNlcSkgeworICAgICAgaWYgKGlz
TW9kaWZpZXJLZXkobmFtZSkpIHJldHVybiAiaGFuZGxlZCI7CisgICAgICBzdG9wU2VxLnNldCg1
MCwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmIChjbS5zdGF0ZS5rZXlTZXEgPT0gc2VxKSB7Cisg
ICAgICAgICAgY20uc3RhdGUua2V5U2VxID0gbnVsbDsKKyAgICAgICAgICBjbS5kaXNwbGF5Lmlu
cHV0LnJlc2V0KCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgbmFtZSA9IHNlcSArICIg
IiArIG5hbWU7CisgICAgfQorICAgIHZhciByZXN1bHQgPSBsb29rdXBLZXlGb3JFZGl0b3IoY20s
IG5hbWUsIGhhbmRsZSk7CisKKyAgICBpZiAocmVzdWx0ID09ICJtdWx0aSIpCisgICAgICBjbS5z
dGF0ZS5rZXlTZXEgPSBuYW1lOworICAgIGlmIChyZXN1bHQgPT0gImhhbmRsZWQiKQorICAgICAg
c2lnbmFsTGF0ZXIoY20sICJrZXlIYW5kbGVkIiwgY20sIG5hbWUsIGUpOworCisgICAgaWYgKHJl
c3VsdCA9PSAiaGFuZGxlZCIgfHwgcmVzdWx0ID09ICJtdWx0aSIpIHsKKyAgICAgIGVfcHJldmVu
dERlZmF1bHQoZSk7CisgICAgICByZXN0YXJ0QmxpbmsoY20pOworICAgIH0KKworICAgIGlmIChz
ZXEgJiYgIXJlc3VsdCAmJiAvXCckLy50ZXN0KG5hbWUpKSB7CisgICAgICBlX3ByZXZlbnREZWZh
dWx0KGUpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiAhIXJlc3VsdDsK
ICAgfQogCi0gIHZhciBtYXliZVRyYW5zaXRpb247CiAgIC8vIEhhbmRsZSBhIGtleSBmcm9tIHRo
ZSBrZXlkb3duIGV2ZW50LgogICBmdW5jdGlvbiBoYW5kbGVLZXlCaW5kaW5nKGNtLCBlKSB7Ci0g
ICAgLy8gSGFuZGxlIGF1dG9tYXRpYyBrZXltYXAgdHJhbnNpdGlvbnMKLSAgICB2YXIgc3RhcnRN
YXAgPSBnZXRLZXlNYXAoY20ub3B0aW9ucy5rZXlNYXApLCBuZXh0ID0gc3RhcnRNYXAuYXV0bzsK
LSAgICBjbGVhclRpbWVvdXQobWF5YmVUcmFuc2l0aW9uKTsKLSAgICBpZiAobmV4dCAmJiAhaXNN
b2RpZmllcktleShlKSkgbWF5YmVUcmFuc2l0aW9uID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsK
LSAgICAgIGlmIChnZXRLZXlNYXAoY20ub3B0aW9ucy5rZXlNYXApID09IHN0YXJ0TWFwKSB7Ci0g
ICAgICAgIGNtLm9wdGlvbnMua2V5TWFwID0gKG5leHQuY2FsbCA/IG5leHQuY2FsbChudWxsLCBj
bSkgOiBuZXh0KTsKLSAgICAgICAga2V5TWFwQ2hhbmdlZChjbSk7Ci0gICAgICB9Ci0gICAgfSwg
NTApOwotCi0gICAgdmFyIG5hbWUgPSBrZXlOYW1lKGUsIHRydWUpLCBoYW5kbGVkID0gZmFsc2U7
CisgICAgdmFyIG5hbWUgPSBrZXlOYW1lKGUsIHRydWUpOwogICAgIGlmICghbmFtZSkgcmV0dXJu
IGZhbHNlOwotICAgIHZhciBrZXltYXBzID0gYWxsS2V5TWFwcyhjbSk7CiAKLSAgICBpZiAoZS5z
aGlmdEtleSkgeworICAgIGlmIChlLnNoaWZ0S2V5ICYmICFjbS5zdGF0ZS5rZXlTZXEpIHsKICAg
ICAgIC8vIEZpcnN0IHRyeSB0byByZXNvbHZlIGZ1bGwgbmFtZSAoaW5jbHVkaW5nICdTaGlmdC0n
KS4gRmFpbGluZwogICAgICAgLy8gdGhhdCwgc2VlIGlmIHRoZXJlIGlzIGEgY3Vyc29yLW1vdGlv
biBjb21tYW5kIChzdGFydGluZyB3aXRoCiAgICAgICAvLyAnZ28nKSBib3VuZCB0byB0aGUga2V5
bmFtZSB3aXRob3V0ICdTaGlmdC0nLgotICAgICAgaGFuZGxlZCA9IGxvb2t1cEtleSgiU2hpZnQt
IiArIG5hbWUsIGtleW1hcHMsIGZ1bmN0aW9uKGIpIHtyZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNt
LCBiLCB0cnVlKTt9KQotICAgICAgICAgICAgIHx8IGxvb2t1cEtleShuYW1lLCBrZXltYXBzLCBm
dW5jdGlvbihiKSB7Ci0gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGIgPT0gInN0cmluZyIg
PyAvXmdvW0EtWl0vLnRlc3QoYikgOiBiLm1vdGlvbikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYik7Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICBy
ZXR1cm4gZGlzcGF0Y2hLZXkoY20sICJTaGlmdC0iICsgbmFtZSwgZSwgZnVuY3Rpb24oYikge3Jl
dHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUpO30pCisgICAgICAgICAgfHwgZGlzcGF0
Y2hLZXkoY20sIG5hbWUsIGUsIGZ1bmN0aW9uKGIpIHsKKyAgICAgICAgICAgICAgIGlmICh0eXBl
b2YgYiA9PSAic3RyaW5nIiA/IC9eZ29bQS1aXS8udGVzdChiKSA6IGIubW90aW9uKQorICAgICAg
ICAgICAgICAgICByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiKTsKKyAgICAgICAgICAgICB9
KTsKICAgICB9IGVsc2UgewotICAgICAgaGFuZGxlZCA9IGxvb2t1cEtleShuYW1lLCBrZXltYXBz
LCBmdW5jdGlvbihiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIpOyB9KTsKLSAgICB9
Ci0KLSAgICBpZiAoaGFuZGxlZCkgewotICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICAg
IHJlc3RhcnRCbGluayhjbSk7Ci0gICAgICBzaWduYWxMYXRlcihjbSwgImtleUhhbmRsZWQiLCBj
bSwgbmFtZSwgZSk7CisgICAgICByZXR1cm4gZGlzcGF0Y2hLZXkoY20sIG5hbWUsIGUsIGZ1bmN0
aW9uKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYik7IH0pOwogICAgIH0KLSAgICBy
ZXR1cm4gaGFuZGxlZDsKICAgfQogCiAgIC8vIEhhbmRsZSBhIGtleSBmcm9tIHRoZSBrZXlwcmVz
cyBldmVudAogICBmdW5jdGlvbiBoYW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpIHsKLSAgICB2
YXIgaGFuZGxlZCA9IGxvb2t1cEtleSgiJyIgKyBjaCArICInIiwgYWxsS2V5TWFwcyhjbSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oYikgeyByZXR1cm4gZG9IYW5kbGVC
aW5kaW5nKGNtLCBiLCB0cnVlKTsgfSk7Ci0gICAgaWYgKGhhbmRsZWQpIHsKLSAgICAgIGVfcHJl
dmVudERlZmF1bHQoZSk7Ci0gICAgICByZXN0YXJ0QmxpbmsoY20pOwotICAgICAgc2lnbmFsTGF0
ZXIoY20sICJrZXlIYW5kbGVkIiwgY20sICInIiArIGNoICsgIiciLCBlKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGhhbmRsZWQ7CisgICAgcmV0dXJuIGRpc3BhdGNoS2V5KGNtLCAiJyIgKyBjaCArICIn
IiwgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oYikgeyByZXR1cm4gZG9IYW5k
bGVCaW5kaW5nKGNtLCBiLCB0cnVlKTsgfSk7CiAgIH0KIAogICB2YXIgbGFzdFN0b3BwZWRLZXkg
PSBudWxsOwogICBmdW5jdGlvbiBvbktleURvd24oZSkgewogICAgIHZhciBjbSA9IHRoaXM7Ci0g
ICAgZW5zdXJlRm9jdXMoY20pOworICAgIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0KCk7CiAg
ICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgcmV0dXJuOwogICAgIC8vIElFIGRvZXMgc3Ry
YW5nZSB0aGluZ3Mgd2l0aCBlc2NhcGUuCi0gICAgaWYgKGllX3VwdG8xMCAmJiBlLmtleUNvZGUg
PT0gMjcpIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsKKyAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8
IDExICYmIGUua2V5Q29kZSA9PSAyNykgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwogICAgIHZhciBj
b2RlID0gZS5rZXlDb2RlOwogICAgIGNtLmRpc3BsYXkuc2hpZnQgPSBjb2RlID09IDE2IHx8IGUu
c2hpZnRLZXk7CiAgICAgdmFyIGhhbmRsZWQgPSBoYW5kbGVLZXlCaW5kaW5nKGNtLCBlKTsKQEAg
LTMwOTAsNDIgKzQxMTMsNTUgQEAKICAgfQogCiAgIGZ1bmN0aW9uIG9uS2V5VXAoZSkgewotICAg
IGlmIChzaWduYWxET01FdmVudCh0aGlzLCBlKSkgcmV0dXJuOwogICAgIGlmIChlLmtleUNvZGUg
PT0gMTYpIHRoaXMuZG9jLnNlbC5zaGlmdCA9IGZhbHNlOworICAgIHNpZ25hbERPTUV2ZW50KHRo
aXMsIGUpOwogICB9CiAKICAgZnVuY3Rpb24gb25LZXlQcmVzcyhlKSB7CiAgICAgdmFyIGNtID0g
dGhpczsKLSAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpKSByZXR1cm47CisgICAgaWYgKGV2
ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkgfHwgc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGUu
Y3RybEtleSAmJiAhZS5hbHRLZXkgfHwgbWFjICYmIGUubWV0YUtleSkgcmV0dXJuOwogICAgIHZh
ciBrZXlDb2RlID0gZS5rZXlDb2RlLCBjaGFyQ29kZSA9IGUuY2hhckNvZGU7CiAgICAgaWYgKHBy
ZXN0byAmJiBrZXlDb2RlID09IGxhc3RTdG9wcGVkS2V5KSB7bGFzdFN0b3BwZWRLZXkgPSBudWxs
OyBlX3ByZXZlbnREZWZhdWx0KGUpOyByZXR1cm47fQotICAgIGlmICgoKHByZXN0byAmJiAoIWUu
d2hpY2ggfHwgZS53aGljaCA8IDEwKSkgfHwga2h0bWwpICYmIGhhbmRsZUtleUJpbmRpbmcoY20s
IGUpKSByZXR1cm47CisgICAgaWYgKChwcmVzdG8gJiYgKCFlLndoaWNoIHx8IGUud2hpY2ggPCAx
MCkpICYmIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpKSByZXR1cm47CiAgICAgdmFyIGNoID0gU3Ry
aW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSA9PSBudWxsID8ga2V5Q29kZSA6IGNoYXJDb2RlKTsK
ICAgICBpZiAoaGFuZGxlQ2hhckJpbmRpbmcoY20sIGUsIGNoKSkgcmV0dXJuOwotICAgIGlmIChp
ZSAmJiAhaWVfdXB0bzgpIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxsOwotICAg
IGZhc3RQb2xsKGNtKTsKKyAgICBjbS5kaXNwbGF5LmlucHV0Lm9uS2V5UHJlc3MoZSk7CiAgIH0K
IAogICAvLyBGT0NVUy9CTFVSIEVWRU5UUwogCisgIGZ1bmN0aW9uIGRlbGF5Qmx1ckV2ZW50KGNt
KSB7CisgICAgY20uc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQgPSB0cnVlOworICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CisgICAgICBpZiAoY20uc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQpIHsK
KyAgICAgICAgY20uc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQgPSBmYWxzZTsKKyAgICAgICAgb25C
bHVyKGNtKTsKKyAgICAgIH0KKyAgICB9LCAxMDApOworICB9CisKICAgZnVuY3Rpb24gb25Gb2N1
cyhjbSkgeworICAgIGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkgY20uc3RhdGUuZGVs
YXlpbmdCbHVyRXZlbnQgPSBmYWxzZTsKKwogICAgIGlmIChjbS5vcHRpb25zLnJlYWRPbmx5ID09
ICJub2N1cnNvciIpIHJldHVybjsKICAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsKICAgICAg
IHNpZ25hbChjbSwgImZvY3VzIiwgY20pOwogICAgICAgY20uc3RhdGUuZm9jdXNlZCA9IHRydWU7
CiAgICAgICBhZGRDbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsICJDb2RlTWlycm9yLWZvY3VzZWQi
KTsKLSAgICAgIC8vIFRoZSBwcmV2SW5wdXQgdGVzdCBwcmV2ZW50cyB0aGlzIGZyb20gZmlyaW5n
IHdoZW4gYSBjb250ZXh0Ci0gICAgICAvLyBtZW51IGlzIGNsb3NlZCAoc2luY2UgdGhlIHJlc2V0
SW5wdXQgd291bGQga2lsbCB0aGUKKyAgICAgIC8vIFRoaXMgdGVzdCBwcmV2ZW50cyB0aGlzIGZy
b20gZmlyaW5nIHdoZW4gYSBjb250ZXh0CisgICAgICAvLyBtZW51IGlzIGNsb3NlZCAoc2luY2Ug
dGhlIGlucHV0IHJlc2V0IHdvdWxkIGtpbGwgdGhlCiAgICAgICAvLyBzZWxlY3QtYWxsIGRldGVj
dGlvbiBoYWNrKQogICAgICAgaWYgKCFjbS5jdXJPcCAmJiBjbS5kaXNwbGF5LnNlbEZvckNvbnRl
eHRNZW51ICE9IGNtLmRvYy5zZWwpIHsKLSAgICAgICAgcmVzZXRJbnB1dChjbSk7Ci0gICAgICAg
IGlmICh3ZWJraXQpIHNldFRpbWVvdXQoYmluZChyZXNldElucHV0LCBjbSwgdHJ1ZSksIDApOyAv
LyBJc3N1ZSAjMTczMAorICAgICAgICBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KCk7CisgICAgICAg
IGlmICh3ZWJraXQpIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNtLmRpc3BsYXkuaW5wdXQucmVz
ZXQodHJ1ZSk7IH0sIDIwKTsgLy8gSXNzdWUgIzE3MzAKICAgICAgIH0KKyAgICAgIGNtLmRpc3Bs
YXkuaW5wdXQucmVjZWl2ZWRGb2N1cygpOwogICAgIH0KLSAgICBzbG93UG9sbChjbSk7CiAgICAg
cmVzdGFydEJsaW5rKGNtKTsKICAgfQogICBmdW5jdGlvbiBvbkJsdXIoY20pIHsKKyAgICBpZiAo
Y20uc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQpIHJldHVybjsKKwogICAgIGlmIChjbS5zdGF0ZS5m
b2N1c2VkKSB7CiAgICAgICBzaWduYWwoY20sICJibHVyIiwgY20pOwogICAgICAgY20uc3RhdGUu
Zm9jdXNlZCA9IGZhbHNlOwpAQCAtMzE0MSw3NiArNDE3Nyw4IEBACiAgIC8vIHRleHRhcmVhICht
YWtpbmcgaXQgYXMgdW5vYnRydXNpdmUgYXMgcG9zc2libGUpIHRvIGxldCB0aGUKICAgLy8gcmln
aHQtY2xpY2sgdGFrZSBlZmZlY3Qgb24gaXQuCiAgIGZ1bmN0aW9uIG9uQ29udGV4dE1lbnUoY20s
IGUpIHsKLSAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUsICJjb250ZXh0bWVudSIpKSByZXR1
cm47Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAgIGlmIChldmVudEluV2lkZ2V0
KGRpc3BsYXksIGUpIHx8IGNvbnRleHRNZW51SW5HdXR0ZXIoY20sIGUpKSByZXR1cm47Ci0KLSAg
ICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKSwgc2Nyb2xsUG9zID0gZGlzcGxheS5zY3Jv
bGxlci5zY3JvbGxUb3A7Ci0gICAgaWYgKCFwb3MgfHwgcHJlc3RvKSByZXR1cm47IC8vIE9wZXJh
IGlzIGRpZmZpY3VsdC4KLQotICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50IHRleHQgc2VsZWN0aW9u
IG9ubHkgaWYgdGhlIGNsaWNrIGlzIGRvbmUgb3V0c2lkZSBvZiB0aGUgc2VsZWN0aW9uCi0gICAg
Ly8gYW5kICdyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUnIG9wdGlvbiBpcyB0cnVlLgotICAg
IHZhciByZXNldCA9IGNtLm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51OwotICAg
IGlmIChyZXNldCAmJiBjbS5kb2Muc2VsLmNvbnRhaW5zKHBvcykgPT0gLTEpCi0gICAgICBvcGVy
YXRpb24oY20sIHNldFNlbGVjdGlvbikoY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24ocG9zKSwgc2Vs
X2RvbnRTY3JvbGwpOwotCi0gICAgdmFyIG9sZENTUyA9IGRpc3BsYXkuaW5wdXQuc3R5bGUuY3Nz
VGV4dDsKLSAgICBkaXNwbGF5LmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsK
LSAgICBkaXNwbGF5LmlucHV0LnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGZpeGVkOyB3aWR0
aDogMzBweDsgaGVpZ2h0OiAzMHB4OyB0b3A6ICIgKyAoZS5jbGllbnRZIC0gNSkgKwotICAgICAg
InB4OyBsZWZ0OiAiICsgKGUuY2xpZW50WCAtIDUpICsgInB4OyB6LWluZGV4OiAxMDAwOyBiYWNr
Z3JvdW5kOiAiICsKLSAgICAgIChpZSA/ICJyZ2JhKDI1NSwgMjU1LCAyNTUsIC4wNSkiIDogInRy
YW5zcGFyZW50IikgKwotICAgICAgIjsgb3V0bGluZTogbm9uZTsgYm9yZGVyLXdpZHRoOiAwOyBv
dXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxw
aGEob3BhY2l0eT01KTsiOwotICAgIGZvY3VzSW5wdXQoY20pOwotICAgIHJlc2V0SW5wdXQoY20p
OwotICAgIC8vIEFkZHMgIlNlbGVjdCBhbGwiIHRvIGNvbnRleHQgbWVudSBpbiBGRgotICAgIGlm
ICghY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgZGlzcGxheS5pbnB1dC52YWx1ZSA9IGRpc3BsYXku
cHJldklucHV0ID0gIiAiOwotICAgIGRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBjbS5kb2Mu
c2VsOwotICAgIGNsZWFyVGltZW91dChkaXNwbGF5LmRldGVjdGluZ1NlbGVjdEFsbCk7Ci0KLSAg
ICAvLyBTZWxlY3QtYWxsIHdpbGwgYmUgZ3JleWVkIG91dCBpZiB0aGVyZSdzIG5vdGhpbmcgdG8g
c2VsZWN0LCBzbwotICAgIC8vIHRoaXMgYWRkcyBhIHplcm8td2lkdGggc3BhY2Ugc28gdGhhdCB3
ZSBjYW4gbGF0ZXIgY2hlY2sgd2hldGhlcgotICAgIC8vIGl0IGdvdCBzZWxlY3RlZC4KLSAgICBm
dW5jdGlvbiBwcmVwYXJlU2VsZWN0QWxsSGFjaygpIHsKLSAgICAgIGlmIChkaXNwbGF5LmlucHV0
LnNlbGVjdGlvblN0YXJ0ICE9IG51bGwpIHsKLSAgICAgICAgdmFyIHNlbGVjdGVkID0gY20uc29t
ZXRoaW5nU2VsZWN0ZWQoKTsKLSAgICAgICAgdmFyIGV4dHZhbCA9IGRpc3BsYXkuaW5wdXQudmFs
dWUgPSAiXHUyMDBiIiArIChzZWxlY3RlZCA/IGRpc3BsYXkuaW5wdXQudmFsdWUgOiAiIik7Ci0g
ICAgICAgIGRpc3BsYXkucHJldklucHV0ID0gc2VsZWN0ZWQgPyAiIiA6ICJcdTIwMGIiOwotICAg
ICAgICBkaXNwbGF5LmlucHV0LnNlbGVjdGlvblN0YXJ0ID0gMTsgZGlzcGxheS5pbnB1dC5zZWxl
Y3Rpb25FbmQgPSBleHR2YWwubGVuZ3RoOwotICAgICAgICAvLyBSZS1zZXQgdGhpcywgaW4gY2Fz
ZSBzb21lIG90aGVyIGhhbmRsZXIgdG91Y2hlZCB0aGUKLSAgICAgICAgLy8gc2VsZWN0aW9uIGlu
IHRoZSBtZWFudGltZS4KLSAgICAgICAgZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9IGNtLmRv
Yy5zZWw7Ci0gICAgICB9Ci0gICAgfQotICAgIGZ1bmN0aW9uIHJlaGlkZSgpIHsKLSAgICAgIGRp
c3BsYXkuaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwotICAgICAgZGlzcGxh
eS5pbnB1dC5zdHlsZS5jc3NUZXh0ID0gb2xkQ1NTOwotICAgICAgaWYgKGllX3VwdG84KSBkaXNw
bGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSBz
Y3JvbGxQb3M7Ci0gICAgICBzbG93UG9sbChjbSk7Ci0KLSAgICAgIC8vIFRyeSB0byBkZXRlY3Qg
dGhlIHVzZXIgY2hvb3Npbmcgc2VsZWN0LWFsbAotICAgICAgaWYgKGRpc3BsYXkuaW5wdXQuc2Vs
ZWN0aW9uU3RhcnQgIT0gbnVsbCkgewotICAgICAgICBpZiAoIWllIHx8IGllX3VwdG84KSBwcmVw
YXJlU2VsZWN0QWxsSGFjaygpOwotICAgICAgICB2YXIgaSA9IDAsIHBvbGwgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgICBpZiAoZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9PSBjbS5kb2Muc2Vs
ICYmIGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uU3RhcnQgPT0gMCkKLSAgICAgICAgICAgIG9wZXJh
dGlvbihjbSwgY29tbWFuZHMuc2VsZWN0QWxsKShjbSk7Ci0gICAgICAgICAgZWxzZSBpZiAoaSsr
IDwgMTApIGRpc3BsYXkuZGV0ZWN0aW5nU2VsZWN0QWxsID0gc2V0VGltZW91dChwb2xsLCA1MDAp
OwotICAgICAgICAgIGVsc2UgcmVzZXRJbnB1dChjbSk7Ci0gICAgICAgIH07Ci0gICAgICAgIGRp
c3BsYXkuZGV0ZWN0aW5nU2VsZWN0QWxsID0gc2V0VGltZW91dChwb2xsLCAyMDApOwotICAgICAg
fQotICAgIH0KLQotICAgIGlmIChpZSAmJiAhaWVfdXB0bzgpIHByZXBhcmVTZWxlY3RBbGxIYWNr
KCk7Ci0gICAgaWYgKGNhcHR1cmVSaWdodENsaWNrKSB7Ci0gICAgICBlX3N0b3AoZSk7Ci0gICAg
ICB2YXIgbW91c2V1cCA9IGZ1bmN0aW9uKCkgewotICAgICAgICBvZmYod2luZG93LCAibW91c2V1
cCIsIG1vdXNldXApOwotICAgICAgICBzZXRUaW1lb3V0KHJlaGlkZSwgMjApOwotICAgICAgfTsK
LSAgICAgIG9uKHdpbmRvdywgIm1vdXNldXAiLCBtb3VzZXVwKTsKLSAgICB9IGVsc2UgewotICAg
ICAgc2V0VGltZW91dChyZWhpZGUsIDUwKTsKLSAgICB9CisgICAgaWYgKGV2ZW50SW5XaWRnZXQo
Y20uZGlzcGxheSwgZSkgfHwgY29udGV4dE1lbnVJbkd1dHRlcihjbSwgZSkpIHJldHVybjsKKyAg
ICBjbS5kaXNwbGF5LmlucHV0Lm9uQ29udGV4dE1lbnUoZSk7CiAgIH0KIAogICBmdW5jdGlvbiBj
b250ZXh0TWVudUluR3V0dGVyKGNtLCBlKSB7CkBAIC0zMzkwLDkgKzQzNTgsOSBAQAogCiAgICAg
ICBhbnRpQ2hhbmdlcy5wdXNoKGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSk7
CiAKLSAgICAgIHZhciBhZnRlciA9IGkgPyBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFu
Z2UsIG51bGwpIDogbHN0KHNvdXJjZSk7CisgICAgICB2YXIgYWZ0ZXIgPSBpID8gY29tcHV0ZVNl
bEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlKSA6IGxzdChzb3VyY2UpOwogICAgICAgbWFrZUNoYW5n
ZVNpbmdsZURvYyhkb2MsIGNoYW5nZSwgYWZ0ZXIsIG1lcmdlT2xkU3BhbnMoZG9jLCBjaGFuZ2Up
KTsKLSAgICAgIGlmICghaSAmJiBkb2MuY20pIGRvYy5jbS5zY3JvbGxJbnRvVmlldyhjaGFuZ2Up
OworICAgICAgaWYgKCFpICYmIGRvYy5jbSkgZG9jLmNtLnNjcm9sbEludG9WaWV3KHtmcm9tOiBj
aGFuZ2UuZnJvbSwgdG86IGNoYW5nZUVuZChjaGFuZ2UpfSk7CiAgICAgICB2YXIgcmViYXNlZCA9
IFtdOwogCiAgICAgICAvLyBQcm9wYWdhdGUgdG8gdGhlIGxpbmtlZCBkb2N1bWVudHMKQEAgLTM0
NDksNyArNDQxNyw3IEBACiAKICAgICBjaGFuZ2UucmVtb3ZlZCA9IGdldEJldHdlZW4oZG9jLCBj
aGFuZ2UuZnJvbSwgY2hhbmdlLnRvKTsKIAotICAgIGlmICghc2VsQWZ0ZXIpIHNlbEFmdGVyID0g
Y29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCBudWxsKTsKKyAgICBpZiAoIXNlbEFm
dGVyKSBzZWxBZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSk7CiAgICAg
aWYgKGRvYy5jbSkgbWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9yKGRvYy5jbSwgY2hhbmdlLCBz
cGFucyk7CiAgICAgZWxzZSB1cGRhdGVEb2MoZG9jLCBjaGFuZ2UsIHNwYW5zKTsKICAgICBzZXRT
ZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWxBZnRlciwgc2VsX2RvbnRTY3JvbGwpOwpAQCAtMzQ5NSw3
ICs0NDYzLDkgQEAKIAogICAgIHZhciBsZW5kaWZmID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gKHRv
LmxpbmUgLSBmcm9tLmxpbmUpIC0gMTsKICAgICAvLyBSZW1lbWJlciB0aGF0IHRoZXNlIGxpbmVz
IGNoYW5nZWQsIGZvciB1cGRhdGluZyB0aGUgZGlzcGxheQotICAgIGlmIChmcm9tLmxpbmUgPT0g
dG8ubGluZSAmJiBjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSAmJiAhaXNXaG9sZUxpbmVVcGRhdGUo
Y20uZG9jLCBjaGFuZ2UpKQorICAgIGlmIChjaGFuZ2UuZnVsbCkKKyAgICAgIHJlZ0NoYW5nZShj
bSk7CisgICAgZWxzZSBpZiAoZnJvbS5saW5lID09IHRvLmxpbmUgJiYgY2hhbmdlLnRleHQubGVu
Z3RoID09IDEgJiYgIWlzV2hvbGVMaW5lVXBkYXRlKGNtLmRvYywgY2hhbmdlKSkKICAgICAgIHJl
Z0xpbmVDaGFuZ2UoY20sIGZyb20ubGluZSwgInRleHQiKTsKICAgICBlbHNlCiAgICAgICByZWdD
aGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEsIGxlbmRpZmYpOwpAQCAtMzUxNyw3ICs0
NDg3LDcgQEAKICAgZnVuY3Rpb24gcmVwbGFjZVJhbmdlKGRvYywgY29kZSwgZnJvbSwgdG8sIG9y
aWdpbikgewogICAgIGlmICghdG8pIHRvID0gZnJvbTsKICAgICBpZiAoY21wKHRvLCBmcm9tKSA8
IDApIHsgdmFyIHRtcCA9IHRvOyB0byA9IGZyb207IGZyb20gPSB0bXA7IH0KLSAgICBpZiAodHlw
ZW9mIGNvZGUgPT0gInN0cmluZyIpIGNvZGUgPSBzcGxpdExpbmVzKGNvZGUpOworICAgIGlmICh0
eXBlb2YgY29kZSA9PSAic3RyaW5nIikgY29kZSA9IGRvYy5zcGxpdExpbmVzKGNvZGUpOwogICAg
IG1ha2VDaGFuZ2UoZG9jLCB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBjb2RlLCBvcmlnaW46
IG9yaWdpbn0pOwogICB9CiAKQEAgLTM1MzQsNyArNDUwNCw3IEBACiAgICAgaWYgKGRvU2Nyb2xs
ICE9IG51bGwgJiYgIXBoYW50b20pIHsKICAgICAgIHZhciBzY3JvbGxOb2RlID0gZWx0KCJkaXYi
LCAiXHUyMDBiIiwgbnVsbCwgInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAiICsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjb29yZHMudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0IC0gcGFk
ZGluZ1RvcChjbS5kaXNwbGF5KSkgKyAicHg7IGhlaWdodDogIiArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY29vcmRzLmJvdHRvbSAtIGNvb3Jkcy50b3AgKyBzY3JvbGxlckN1dE9mZikg
KyAicHg7IGxlZnQ6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvb3Jkcy5ib3R0
b20gLSBjb29yZHMudG9wICsgc2Nyb2xsR2FwKGNtKSArIGRpc3BsYXkuYmFySGVpZ2h0KSArICJw
eDsgbGVmdDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHMubGVmdCArICJw
eDsgd2lkdGg6IDJweDsiKTsKICAgICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLmFwcGVuZENoaWxk
KHNjcm9sbE5vZGUpOwogICAgICAgc2Nyb2xsTm9kZS5zY3JvbGxJbnRvVmlldyhkb1Njcm9sbCk7
CkBAIC0zNTQ3LDcgKzQ1MTcsNyBAQAogICAvLyBtZWFzdXJlZCwgdGhlIHBvc2l0aW9uIG9mIHNv
bWV0aGluZyBtYXkgJ2RyaWZ0JyBkdXJpbmcgZHJhd2luZykuCiAgIGZ1bmN0aW9uIHNjcm9sbFBv
c0ludG9WaWV3KGNtLCBwb3MsIGVuZCwgbWFyZ2luKSB7CiAgICAgaWYgKG1hcmdpbiA9PSBudWxs
KSBtYXJnaW4gPSAwOwotICAgIGZvciAoOzspIHsKKyAgICBmb3IgKHZhciBsaW1pdCA9IDA7IGxp
bWl0IDwgNTsgbGltaXQrKykgewogICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZSwgY29vcmRzID0g
Y3Vyc29yQ29vcmRzKGNtLCBwb3MpOwogICAgICAgdmFyIGVuZENvb3JkcyA9ICFlbmQgfHwgZW5k
ID09IHBvcyA/IGNvb3JkcyA6IGN1cnNvckNvb3JkcyhjbSwgZW5kKTsKICAgICAgIHZhciBzY3Jv
bGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIE1hdGgubWluKGNvb3Jkcy5sZWZ0LCBlbmRD
b29yZHMubGVmdCksCkBAIC0zNTYzLDggKzQ1MzMsOSBAQAogICAgICAgICBzZXRTY3JvbGxMZWZ0
KGNtLCBzY3JvbGxQb3Muc2Nyb2xsTGVmdCk7CiAgICAgICAgIGlmIChNYXRoLmFicyhjbS5kb2Mu
c2Nyb2xsTGVmdCAtIHN0YXJ0TGVmdCkgPiAxKSBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgIH0KLSAg
ICAgIGlmICghY2hhbmdlZCkgcmV0dXJuIGNvb3JkczsKKyAgICAgIGlmICghY2hhbmdlZCkgYnJl
YWs7CiAgICAgfQorICAgIHJldHVybiBjb29yZHM7CiAgIH0KIAogICAvLyBTY3JvbGwgYSBnaXZl
biBzZXQgb2YgY29vcmRpbmF0ZXMgaW50byB2aWV3IChpbW1lZGlhdGVseSkuCkBAIC0zNTgyLDcg
KzQ1NTMsOCBAQAogICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgc25hcE1hcmdpbiA9IHRl
eHRIZWlnaHQoY20uZGlzcGxheSk7CiAgICAgaWYgKHkxIDwgMCkgeTEgPSAwOwogICAgIHZhciBz
Y3JlZW50b3AgPSBjbS5jdXJPcCAmJiBjbS5jdXJPcC5zY3JvbGxUb3AgIT0gbnVsbCA/IGNtLmN1
ck9wLnNjcm9sbFRvcCA6IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wOwotICAgIHZhciBzY3Jl
ZW4gPSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCAtIHNjcm9sbGVyQ3V0T2ZmLCByZXN1
bHQgPSB7fTsKKyAgICB2YXIgc2NyZWVuID0gZGlzcGxheUhlaWdodChjbSksIHJlc3VsdCA9IHt9
OworICAgIGlmICh5MiAtIHkxID4gc2NyZWVuKSB5MiA9IHkxICsgc2NyZWVuOwogICAgIHZhciBk
b2NCb3R0b20gPSBjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoZGlzcGxheSk7CiAgICAgdmFy
IGF0VG9wID0geTEgPCBzbmFwTWFyZ2luLCBhdEJvdHRvbSA9IHkyID4gZG9jQm90dG9tIC0gc25h
cE1hcmdpbjsKICAgICBpZiAoeTEgPCBzY3JlZW50b3ApIHsKQEAgLTM1OTMsMTYgKzQ1NjUsMTUg
QEAKICAgICB9CiAKICAgICB2YXIgc2NyZWVubGVmdCA9IGNtLmN1ck9wICYmIGNtLmN1ck9wLnNj
cm9sbExlZnQgIT0gbnVsbCA/IGNtLmN1ck9wLnNjcm9sbExlZnQgOiBkaXNwbGF5LnNjcm9sbGVy
LnNjcm9sbExlZnQ7Ci0gICAgdmFyIHNjcmVlbncgPSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdp
ZHRoIC0gc2Nyb2xsZXJDdXRPZmY7Ci0gICAgeDEgKz0gZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdp
ZHRoOyB4MiArPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7Ci0gICAgdmFyIGd1dHRlcncg
PSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7Ci0gICAgdmFyIGF0TGVmdCA9IHgxIDwgZ3V0
dGVydyArIDEwOwotICAgIGlmICh4MSA8IHNjcmVlbmxlZnQgKyBndXR0ZXJ3IHx8IGF0TGVmdCkg
ewotICAgICAgaWYgKGF0TGVmdCkgeDEgPSAwOwotICAgICAgcmVzdWx0LnNjcm9sbExlZnQgPSBN
YXRoLm1heCgwLCB4MSAtIDEwIC0gZ3V0dGVydyk7Ci0gICAgfSBlbHNlIGlmICh4MiA+IHNjcmVl
bncgKyBzY3JlZW5sZWZ0IC0gMykgewotICAgICAgcmVzdWx0LnNjcm9sbExlZnQgPSB4MiArIDEw
IC0gc2NyZWVudzsKLSAgICB9CisgICAgdmFyIHNjcmVlbncgPSBkaXNwbGF5V2lkdGgoY20pIC0g
KGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGggOiAw
KTsKKyAgICB2YXIgdG9vV2lkZSA9IHgyIC0geDEgPiBzY3JlZW53OworICAgIGlmICh0b29XaWRl
KSB4MiA9IHgxICsgc2NyZWVudzsKKyAgICBpZiAoeDEgPCAxMCkKKyAgICAgIHJlc3VsdC5zY3Jv
bGxMZWZ0ID0gMDsKKyAgICBlbHNlIGlmICh4MSA8IHNjcmVlbmxlZnQpCisgICAgICByZXN1bHQu
c2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHgxIC0gKHRvb1dpZGUgPyAwIDogMTApKTsKKyAgICBl
bHNlIGlmICh4MiA+IHNjcmVlbncgKyBzY3JlZW5sZWZ0IC0gMykKKyAgICAgIHJlc3VsdC5zY3Jv
bGxMZWZ0ID0geDIgKyAodG9vV2lkZSA/IDAgOiAxMCkgLSBzY3JlZW53OwogICAgIHJldHVybiBy
ZXN1bHQ7CiAgIH0KIApAQCAtMzY1OCw3ICs0NjI5LDcgQEAKICAgICBpZiAoaG93ID09ICJzbWFy
dCIpIHsKICAgICAgIC8vIEZhbGwgYmFjayB0byAicHJldiIgd2hlbiB0aGUgbW9kZSBkb2Vzbid0
IGhhdmUgYW4gaW5kZW50YXRpb24KICAgICAgIC8vIG1ldGhvZC4KLSAgICAgIGlmICghY20uZG9j
Lm1vZGUuaW5kZW50KSBob3cgPSAicHJldiI7CisgICAgICBpZiAoIWRvYy5tb2RlLmluZGVudCkg
aG93ID0gInByZXYiOwogICAgICAgZWxzZSBzdGF0ZSA9IGdldFN0YXRlQmVmb3JlKGNtLCBuKTsK
ICAgICB9CiAKQEAgLTM2NzAsOCArNDY0MSw4IEBACiAgICAgICBpbmRlbnRhdGlvbiA9IDA7CiAg
ICAgICBob3cgPSAibm90IjsKICAgICB9IGVsc2UgaWYgKGhvdyA9PSAic21hcnQiKSB7Ci0gICAg
ICBpbmRlbnRhdGlvbiA9IGNtLmRvYy5tb2RlLmluZGVudChzdGF0ZSwgbGluZS50ZXh0LnNsaWNl
KGN1clNwYWNlU3RyaW5nLmxlbmd0aCksIGxpbmUudGV4dCk7Ci0gICAgICBpZiAoaW5kZW50YXRp
b24gPT0gUGFzcykgeworICAgICAgaW5kZW50YXRpb24gPSBkb2MubW9kZS5pbmRlbnQoc3RhdGUs
IGxpbmUudGV4dC5zbGljZShjdXJTcGFjZVN0cmluZy5sZW5ndGgpLCBsaW5lLnRleHQpOworICAg
ICAgaWYgKGluZGVudGF0aW9uID09IFBhc3MgfHwgaW5kZW50YXRpb24gPiAxNTApIHsKICAgICAg
ICAgaWYgKCFhZ2dyZXNzaXZlKSByZXR1cm47CiAgICAgICAgIGhvdyA9ICJwcmV2IjsKICAgICAg
IH0KQEAgLTM2OTQsNyArNDY2NSw5IEBACiAgICAgaWYgKHBvcyA8IGluZGVudGF0aW9uKSBpbmRl
bnRTdHJpbmcgKz0gc3BhY2VTdHIoaW5kZW50YXRpb24gLSBwb3MpOwogCiAgICAgaWYgKGluZGVu
dFN0cmluZyAhPSBjdXJTcGFjZVN0cmluZykgewotICAgICAgcmVwbGFjZVJhbmdlKGNtLmRvYywg
aW5kZW50U3RyaW5nLCBQb3MobiwgMCksIFBvcyhuLCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpLCAi
K2lucHV0Iik7CisgICAgICByZXBsYWNlUmFuZ2UoZG9jLCBpbmRlbnRTdHJpbmcsIFBvcyhuLCAw
KSwgUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCksICIraW5wdXQiKTsKKyAgICAgIGxpbmUu
c3RhdGVBZnRlciA9IG51bGw7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgewogICAg
ICAgLy8gRW5zdXJlIHRoYXQsIGlmIHRoZSBjdXJzb3Igd2FzIGluIHRoZSB3aGl0ZXNwYWNlIGF0
IHRoZSBzdGFydAogICAgICAgLy8gb2YgdGhlIGxpbmUsIGl0IGlzIG1vdmVkIHRvIHRoZSBlbmQg
b2YgdGhhdCBzcGFjZS4KQEAgLTM3MDcsMTggKzQ2ODAsMTcgQEAKICAgICAgICAgfQogICAgICAg
fQogICAgIH0KLSAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxsOwogICB9CiAKICAgLy8gVXRpbGl0
eSBmb3IgYXBwbHlpbmcgYSBjaGFuZ2UgdG8gYSBsaW5lIGJ5IGhhbmRsZSBvciBudW1iZXIsCiAg
IC8vIHJldHVybmluZyB0aGUgbnVtYmVyIGFuZCBvcHRpb25hbGx5IHJlZ2lzdGVyaW5nIHRoZSBs
aW5lIGFzCiAgIC8vIGNoYW5nZWQuCi0gIGZ1bmN0aW9uIGNoYW5nZUxpbmUoY20sIGhhbmRsZSwg
Y2hhbmdlVHlwZSwgb3ApIHsKLSAgICB2YXIgbm8gPSBoYW5kbGUsIGxpbmUgPSBoYW5kbGUsIGRv
YyA9IGNtLmRvYzsKKyAgZnVuY3Rpb24gY2hhbmdlTGluZShkb2MsIGhhbmRsZSwgY2hhbmdlVHlw
ZSwgb3ApIHsKKyAgICB2YXIgbm8gPSBoYW5kbGUsIGxpbmUgPSBoYW5kbGU7CiAgICAgaWYgKHR5
cGVvZiBoYW5kbGUgPT0gIm51bWJlciIpIGxpbmUgPSBnZXRMaW5lKGRvYywgY2xpcExpbmUoZG9j
LCBoYW5kbGUpKTsKICAgICBlbHNlIG5vID0gbGluZU5vKGhhbmRsZSk7CiAgICAgaWYgKG5vID09
IG51bGwpIHJldHVybiBudWxsOwotICAgIGlmIChvcChsaW5lLCBubykpIHJlZ0xpbmVDaGFuZ2Uo
Y20sIG5vLCBjaGFuZ2VUeXBlKTsKKyAgICBpZiAob3AobGluZSwgbm8pICYmIGRvYy5jbSkgcmVn
TGluZUNoYW5nZShkb2MuY20sIG5vLCBjaGFuZ2VUeXBlKTsKICAgICByZXR1cm4gbGluZTsKICAg
fQogCkBAIC0zODI0LDI0ICs0Nzk2LDYgQEAKICAgICByZXR1cm4gdGFyZ2V0OwogICB9CiAKLSAg
Ly8gRmluZCB0aGUgd29yZCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gKGFzIHJldHVybmVkIGJ5IGNv
b3Jkc0NoYXIpLgotICBmdW5jdGlvbiBmaW5kV29yZEF0KGNtLCBwb3MpIHsKLSAgICB2YXIgZG9j
ID0gY20uZG9jLCBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKS50ZXh0OwotICAgIHZhciBz
dGFydCA9IHBvcy5jaCwgZW5kID0gcG9zLmNoOwotICAgIGlmIChsaW5lKSB7Ci0gICAgICB2YXIg
aGVscGVyID0gY20uZ2V0SGVscGVyKHBvcywgIndvcmRDaGFycyIpOwotICAgICAgaWYgKChwb3Mu
eFJlbCA8IDAgfHwgZW5kID09IGxpbmUubGVuZ3RoKSAmJiBzdGFydCkgLS1zdGFydDsgZWxzZSAr
K2VuZDsKLSAgICAgIHZhciBzdGFydENoYXIgPSBsaW5lLmNoYXJBdChzdGFydCk7Ci0gICAgICB2
YXIgY2hlY2sgPSBpc1dvcmRDaGFyKHN0YXJ0Q2hhciwgaGVscGVyKQotICAgICAgICA/IGZ1bmN0
aW9uKGNoKSB7IHJldHVybiBpc1dvcmRDaGFyKGNoLCBoZWxwZXIpOyB9Ci0gICAgICAgIDogL1xz
Ly50ZXN0KHN0YXJ0Q2hhcikgPyBmdW5jdGlvbihjaCkge3JldHVybiAvXHMvLnRlc3QoY2gpO30K
LSAgICAgICAgOiBmdW5jdGlvbihjaCkge3JldHVybiAhL1xzLy50ZXN0KGNoKSAmJiAhaXNXb3Jk
Q2hhcihjaCk7fTsKLSAgICAgIHdoaWxlIChzdGFydCA+IDAgJiYgY2hlY2sobGluZS5jaGFyQXQo
c3RhcnQgLSAxKSkpIC0tc3RhcnQ7Ci0gICAgICB3aGlsZSAoZW5kIDwgbGluZS5sZW5ndGggJiYg
Y2hlY2sobGluZS5jaGFyQXQoZW5kKSkpICsrZW5kOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFJh
bmdlKFBvcyhwb3MubGluZSwgc3RhcnQpLCBQb3MocG9zLmxpbmUsIGVuZCkpOwotICB9Ci0KICAg
Ly8gRURJVE9SIE1FVEhPRFMKIAogICAvLyBUaGUgcHVibGljbHkgdmlzaWJsZSBBUEkuIE5vdGUg
dGhhdCBtZXRob2RPcChmKSBtZWFucwpAQCAtMzg1NCw3ICs0ODA4LDcgQEAKIAogICBDb2RlTWly
cm9yLnByb3RvdHlwZSA9IHsKICAgICBjb25zdHJ1Y3RvcjogQ29kZU1pcnJvciwKLSAgICBmb2N1
czogZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKTsgZm9jdXNJbnB1dCh0aGlzKTsgZmFzdFBvbGwo
dGhpcyk7fSwKKyAgICBmb2N1czogZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKTsgdGhpcy5kaXNw
bGF5LmlucHV0LmZvY3VzKCk7fSwKIAogICAgIHNldE9wdGlvbjogZnVuY3Rpb24ob3B0aW9uLCB2
YWx1ZSkgewogICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsIG9sZCA9IG9wdGlvbnNb
b3B0aW9uXTsKQEAgLTM4NjgsMTIgKzQ4MjIsMTIgQEAKICAgICBnZXREb2M6IGZ1bmN0aW9uKCkg
e3JldHVybiB0aGlzLmRvYzt9LAogCiAgICAgYWRkS2V5TWFwOiBmdW5jdGlvbihtYXAsIGJvdHRv
bSkgewotICAgICAgdGhpcy5zdGF0ZS5rZXlNYXBzW2JvdHRvbSA/ICJwdXNoIiA6ICJ1bnNoaWZ0
Il0obWFwKTsKKyAgICAgIHRoaXMuc3RhdGUua2V5TWFwc1tib3R0b20gPyAicHVzaCIgOiAidW5z
aGlmdCJdKGdldEtleU1hcChtYXApKTsKICAgICB9LAogICAgIHJlbW92ZUtleU1hcDogZnVuY3Rp
b24obWFwKSB7CiAgICAgICB2YXIgbWFwcyA9IHRoaXMuc3RhdGUua2V5TWFwczsKICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7ICsraSkKLSAgICAgICAgaWYgKG1hcHNbaV0g
PT0gbWFwIHx8ICh0eXBlb2YgbWFwc1tpXSAhPSAic3RyaW5nIiAmJiBtYXBzW2ldLm5hbWUgPT0g
bWFwKSkgeworICAgICAgICBpZiAobWFwc1tpXSA9PSBtYXAgfHwgbWFwc1tpXS5uYW1lID09IG1h
cCkgewogICAgICAgICAgIG1hcHMuc3BsaWNlKGksIDEpOwogICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CkBAIC0zOTExLDExICs0ODY1LDE0IEBACiAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewogICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNb
aV07CiAgICAgICAgIGlmICghcmFuZ2UuZW1wdHkoKSkgewotICAgICAgICAgIHZhciBzdGFydCA9
IE1hdGgubWF4KGVuZCwgcmFuZ2UuZnJvbSgpLmxpbmUpOwotICAgICAgICAgIHZhciB0byA9IHJh
bmdlLnRvKCk7CisgICAgICAgICAgdmFyIGZyb20gPSByYW5nZS5mcm9tKCksIHRvID0gcmFuZ2Uu
dG8oKTsKKyAgICAgICAgICB2YXIgc3RhcnQgPSBNYXRoLm1heChlbmQsIGZyb20ubGluZSk7CiAg
ICAgICAgICAgZW5kID0gTWF0aC5taW4odGhpcy5sYXN0TGluZSgpLCB0by5saW5lIC0gKHRvLmNo
ID8gMCA6IDEpKSArIDE7CiAgICAgICAgICAgZm9yICh2YXIgaiA9IHN0YXJ0OyBqIDwgZW5kOyAr
K2opCiAgICAgICAgICAgICBpbmRlbnRMaW5lKHRoaXMsIGosIGhvdyk7CisgICAgICAgICAgdmFy
IG5ld1JhbmdlcyA9IHRoaXMuZG9jLnNlbC5yYW5nZXM7CisgICAgICAgICAgaWYgKGZyb20uY2gg
PT0gMCAmJiByYW5nZXMubGVuZ3RoID09IG5ld1Jhbmdlcy5sZW5ndGggJiYgbmV3UmFuZ2VzW2ld
LmZyb20oKS5jaCA+IDApCisgICAgICAgICAgICByZXBsYWNlT25lU2VsZWN0aW9uKHRoaXMuZG9j
LCBpLCBuZXcgUmFuZ2UoZnJvbSwgbmV3UmFuZ2VzW2ldLnRvKCkpLCBzZWxfZG9udFNjcm9sbCk7
CiAgICAgICAgIH0gZWxzZSBpZiAocmFuZ2UuaGVhZC5saW5lID4gZW5kKSB7CiAgICAgICAgICAg
aW5kZW50TGluZSh0aGlzLCByYW5nZS5oZWFkLmxpbmUsIGhvdywgdHJ1ZSk7CiAgICAgICAgICAg
ZW5kID0gcmFuZ2UuaGVhZC5saW5lOwpAQCAtMzkyNywyMCArNDg4NCwxMSBAQAogICAgIC8vIEZl
dGNoIHRoZSBwYXJzZXIgdG9rZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2VmdWwgZm9yIGhh
Y2tzCiAgICAgLy8gdGhhdCB3YW50IHRvIGluc3BlY3QgdGhlIG1vZGUgc3RhdGUgKHNheSwgZm9y
IGNvbXBsZXRpb24pLgogICAgIGdldFRva2VuQXQ6IGZ1bmN0aW9uKHBvcywgcHJlY2lzZSkgewot
ICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jOwotICAgICAgcG9zID0gY2xpcFBvcyhkb2MsIHBvcyk7
Ci0gICAgICB2YXIgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZSh0aGlzLCBwb3MubGluZSwgcHJlY2lz
ZSksIG1vZGUgPSB0aGlzLmRvYy5tb2RlOwotICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywg
cG9zLmxpbmUpOwotICAgICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0obGluZS50ZXh0
LCB0aGlzLm9wdGlvbnMudGFiU2l6ZSk7Ci0gICAgICB3aGlsZSAoc3RyZWFtLnBvcyA8IHBvcy5j
aCAmJiAhc3RyZWFtLmVvbCgpKSB7Ci0gICAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7
Ci0gICAgICAgIHZhciBzdHlsZSA9IHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlKTsKLSAg
ICAgIH0KLSAgICAgIHJldHVybiB7c3RhcnQ6IHN0cmVhbS5zdGFydCwKLSAgICAgICAgICAgICAg
ZW5kOiBzdHJlYW0ucG9zLAotICAgICAgICAgICAgICBzdHJpbmc6IHN0cmVhbS5jdXJyZW50KCks
Ci0gICAgICAgICAgICAgIHR5cGU6IHN0eWxlIHx8IG51bGwsCi0gICAgICAgICAgICAgIHN0YXRl
OiBzdGF0ZX07CisgICAgICByZXR1cm4gdGFrZVRva2VuKHRoaXMsIHBvcywgcHJlY2lzZSk7Cisg
ICAgfSwKKworICAgIGdldExpbmVUb2tlbnM6IGZ1bmN0aW9uKGxpbmUsIHByZWNpc2UpIHsKKyAg
ICAgIHJldHVybiB0YWtlVG9rZW4odGhpcywgUG9zKGxpbmUpLCBwcmVjaXNlLCB0cnVlKTsKICAg
ICB9LAogCiAgICAgZ2V0VG9rZW5UeXBlQXQ6IGZ1bmN0aW9uKHBvcykgewpAQCAtMzk3MSw3ICs0
OTE5LDcgQEAKIAogICAgIGdldEhlbHBlcnM6IGZ1bmN0aW9uKHBvcywgdHlwZSkgewogICAgICAg
dmFyIGZvdW5kID0gW107Ci0gICAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkp
IHJldHVybiBoZWxwZXJzOworICAgICAgaWYgKCFoZWxwZXJzLmhhc093blByb3BlcnR5KHR5cGUp
KSByZXR1cm4gZm91bmQ7CiAgICAgICB2YXIgaGVscCA9IGhlbHBlcnNbdHlwZV0sIG1vZGUgPSB0
aGlzLmdldE1vZGVBdChwb3MpOwogICAgICAgaWYgKHR5cGVvZiBtb2RlW3R5cGVdID09ICJzdHJp
bmciKSB7CiAgICAgICAgIGlmIChoZWxwW21vZGVbdHlwZV1dKSBmb3VuZC5wdXNoKGhlbHBbbW9k
ZVt0eXBlXV0pOwpAQCAtNDAyMSwxMCArNDk2OSwxNSBAQAogICAgICAgcmV0dXJuIGxpbmVBdEhl
aWdodCh0aGlzLmRvYywgaGVpZ2h0ICsgdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpOwogICAgIH0s
CiAgICAgaGVpZ2h0QXRMaW5lOiBmdW5jdGlvbihsaW5lLCBtb2RlKSB7Ci0gICAgICB2YXIgZW5k
ID0gZmFsc2UsIGxhc3QgPSB0aGlzLmRvYy5maXJzdCArIHRoaXMuZG9jLnNpemUgLSAxOwotICAg
ICAgaWYgKGxpbmUgPCB0aGlzLmRvYy5maXJzdCkgbGluZSA9IHRoaXMuZG9jLmZpcnN0OwotICAg
ICAgZWxzZSBpZiAobGluZSA+IGxhc3QpIHsgbGluZSA9IGxhc3Q7IGVuZCA9IHRydWU7IH0KLSAg
ICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZSh0aGlzLmRvYywgbGluZSk7CisgICAgICB2YXIgZW5k
ID0gZmFsc2UsIGxpbmVPYmo7CisgICAgICBpZiAodHlwZW9mIGxpbmUgPT0gIm51bWJlciIpIHsK
KyAgICAgICAgdmFyIGxhc3QgPSB0aGlzLmRvYy5maXJzdCArIHRoaXMuZG9jLnNpemUgLSAxOwor
ICAgICAgICBpZiAobGluZSA8IHRoaXMuZG9jLmZpcnN0KSBsaW5lID0gdGhpcy5kb2MuZmlyc3Q7
CisgICAgICAgIGVsc2UgaWYgKGxpbmUgPiBsYXN0KSB7IGxpbmUgPSBsYXN0OyBlbmQgPSB0cnVl
OyB9CisgICAgICAgIGxpbmVPYmogPSBnZXRMaW5lKHRoaXMuZG9jLCBsaW5lKTsKKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIGxpbmVPYmogPSBsaW5lOworICAgICAgfQogICAgICAgcmV0dXJuIGlu
dG9Db29yZFN5c3RlbSh0aGlzLCBsaW5lT2JqLCB7dG9wOiAwLCBsZWZ0OiAwfSwgbW9kZSB8fCAi
cGFnZSIpLnRvcCArCiAgICAgICAgIChlbmQgPyB0aGlzLmRvYy5oZWlnaHQgLSBoZWlnaHRBdExp
bmUobGluZU9iaikgOiAwKTsKICAgICB9LApAQCAtNDAzMyw3ICs0OTg2LDcgQEAKICAgICBkZWZh
dWx0Q2hhcldpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNoYXJXaWR0aCh0aGlzLmRpc3BsYXkp
OyB9LAogCiAgICAgc2V0R3V0dGVyTWFya2VyOiBtZXRob2RPcChmdW5jdGlvbihsaW5lLCBndXR0
ZXJJRCwgdmFsdWUpIHsKLSAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGxpbmUsICJndXR0
ZXIiLCBmdW5jdGlvbihsaW5lKSB7CisgICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLmRvYywg
bGluZSwgImd1dHRlciIsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgdmFyIG1hcmtlcnMgPSBs
aW5lLmd1dHRlck1hcmtlcnMgfHwgKGxpbmUuZ3V0dGVyTWFya2VycyA9IHt9KTsKICAgICAgICAg
bWFya2Vyc1tndXR0ZXJJRF0gPSB2YWx1ZTsKICAgICAgICAgaWYgKCF2YWx1ZSAmJiBpc0VtcHR5
KG1hcmtlcnMpKSBsaW5lLmd1dHRlck1hcmtlcnMgPSBudWxsOwpAQCAtNDA1MywzOCArNTAwNiw2
IEBACiAgICAgICB9KTsKICAgICB9KSwKIAotICAgIGFkZExpbmVDbGFzczogbWV0aG9kT3AoZnVu
Y3Rpb24oaGFuZGxlLCB3aGVyZSwgY2xzKSB7Ci0gICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlz
LCBoYW5kbGUsICJjbGFzcyIsIGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgICAgdmFyIHByb3AgPSB3
aGVyZSA9PSAidGV4dCIgPyAidGV4dENsYXNzIiA6IHdoZXJlID09ICJiYWNrZ3JvdW5kIiA/ICJi
Z0NsYXNzIiA6ICJ3cmFwQ2xhc3MiOwotICAgICAgICBpZiAoIWxpbmVbcHJvcF0pIGxpbmVbcHJv
cF0gPSBjbHM7Ci0gICAgICAgIGVsc2UgaWYgKG5ldyBSZWdFeHAoIig/Ol58XFxzKSIgKyBjbHMg
KyAiKD86JHxcXHMpIikudGVzdChsaW5lW3Byb3BdKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICBl
bHNlIGxpbmVbcHJvcF0gKz0gIiAiICsgY2xzOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
IH0pOwotICAgIH0pLAotCi0gICAgcmVtb3ZlTGluZUNsYXNzOiBtZXRob2RPcChmdW5jdGlvbiho
YW5kbGUsIHdoZXJlLCBjbHMpIHsKLSAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRs
ZSwgImNsYXNzIiwgZnVuY3Rpb24obGluZSkgewotICAgICAgICB2YXIgcHJvcCA9IHdoZXJlID09
ICJ0ZXh0IiA/ICJ0ZXh0Q2xhc3MiIDogd2hlcmUgPT0gImJhY2tncm91bmQiID8gImJnQ2xhc3Mi
IDogIndyYXBDbGFzcyI7Ci0gICAgICAgIHZhciBjdXIgPSBsaW5lW3Byb3BdOwotICAgICAgICBp
ZiAoIWN1cikgcmV0dXJuIGZhbHNlOwotICAgICAgICBlbHNlIGlmIChjbHMgPT0gbnVsbCkgbGlu
ZVtwcm9wXSA9IG51bGw7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIHZhciBmb3VuZCA9IGN1
ci5tYXRjaChuZXcgUmVnRXhwKCIoPzpefFxccyspIiArIGNscyArICIoPzokfFxccyspIikpOwot
ICAgICAgICAgIGlmICghZm91bmQpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB2YXIgZW5kID0g
Zm91bmQuaW5kZXggKyBmb3VuZFswXS5sZW5ndGg7Ci0gICAgICAgICAgbGluZVtwcm9wXSA9IGN1
ci5zbGljZSgwLCBmb3VuZC5pbmRleCkgKyAoIWZvdW5kLmluZGV4IHx8IGVuZCA9PSBjdXIubGVu
Z3RoID8gIiIgOiAiICIpICsgY3VyLnNsaWNlKGVuZCkgfHwgbnVsbDsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0pOwotICAgIH0pLAotCi0gICAgYWRkTGluZVdpZGdl
dDogbWV0aG9kT3AoZnVuY3Rpb24oaGFuZGxlLCBub2RlLCBvcHRpb25zKSB7Ci0gICAgICByZXR1
cm4gYWRkTGluZVdpZGdldCh0aGlzLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpOwotICAgIH0pLAot
Ci0gICAgcmVtb3ZlTGluZVdpZGdldDogZnVuY3Rpb24od2lkZ2V0KSB7IHdpZGdldC5jbGVhcigp
OyB9LAotCiAgICAgbGluZUluZm86IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgIGlmICh0eXBlb2Yg
bGluZSA9PSAibnVtYmVyIikgewogICAgICAgICBpZiAoIWlzTGluZSh0aGlzLmRvYywgbGluZSkp
IHJldHVybiBudWxsOwpAQCAtNDEwNyw2ICs1MDI4LDggQEAKICAgICAgIHBvcyA9IGN1cnNvckNv
b3Jkcyh0aGlzLCBjbGlwUG9zKHRoaXMuZG9jLCBwb3MpKTsKICAgICAgIHZhciB0b3AgPSBwb3Mu
Ym90dG9tLCBsZWZ0ID0gcG9zLmxlZnQ7CiAgICAgICBub2RlLnN0eWxlLnBvc2l0aW9uID0gImFi
c29sdXRlIjsKKyAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCJjbS1pZ25vcmUtZXZlbnRzIiwgInRy
dWUiKTsKKyAgICAgIHRoaXMuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKG5vZGUpOwogICAg
ICAgZGlzcGxheS5zaXplci5hcHBlbmRDaGlsZChub2RlKTsKICAgICAgIGlmICh2ZXJ0ID09ICJv
dmVyIikgewogICAgICAgICB0b3AgPSBwb3MudG9wOwpAQCAtNDEzNywxMyArNTA2MCwxNSBAQAog
CiAgICAgdHJpZ2dlck9uS2V5RG93bjogbWV0aG9kT3Aob25LZXlEb3duKSwKICAgICB0cmlnZ2Vy
T25LZXlQcmVzczogbWV0aG9kT3Aob25LZXlQcmVzcyksCi0gICAgdHJpZ2dlck9uS2V5VXA6IG1l
dGhvZE9wKG9uS2V5VXApLAorICAgIHRyaWdnZXJPbktleVVwOiBvbktleVVwLAogCiAgICAgZXhl
Y0NvbW1hbmQ6IGZ1bmN0aW9uKGNtZCkgewogICAgICAgaWYgKGNvbW1hbmRzLmhhc093blByb3Bl
cnR5KGNtZCkpCiAgICAgICAgIHJldHVybiBjb21tYW5kc1tjbWRdKHRoaXMpOwogICAgIH0sCiAK
KyAgICB0cmlnZ2VyRWxlY3RyaWM6IG1ldGhvZE9wKGZ1bmN0aW9uKHRleHQpIHsgdHJpZ2dlckVs
ZWN0cmljKHRoaXMsIHRleHQpOyB9KSwKKwogICAgIGZpbmRQb3NIOiBmdW5jdGlvbihmcm9tLCBh
bW91bnQsIHVuaXQsIHZpc3VhbGx5KSB7CiAgICAgICB2YXIgZGlyID0gMTsKICAgICAgIGlmIChh
bW91bnQgPCAwKSB7IGRpciA9IC0xOyBhbW91bnQgPSAtYW1vdW50OyB9CkBAIC00MjA2LDYgKzUx
MzEsMjQgQEAKICAgICAgICAgZG9jLnNlbC5yYW5nZXNbaV0uZ29hbENvbHVtbiA9IGdvYWxzW2ld
OwogICAgIH0pLAogCisgICAgLy8gRmluZCB0aGUgd29yZCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24g
KGFzIHJldHVybmVkIGJ5IGNvb3Jkc0NoYXIpLgorICAgIGZpbmRXb3JkQXQ6IGZ1bmN0aW9uKHBv
cykgeworICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jLCBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5s
aW5lKS50ZXh0OworICAgICAgdmFyIHN0YXJ0ID0gcG9zLmNoLCBlbmQgPSBwb3MuY2g7CisgICAg
ICBpZiAobGluZSkgeworICAgICAgICB2YXIgaGVscGVyID0gdGhpcy5nZXRIZWxwZXIocG9zLCAi
d29yZENoYXJzIik7CisgICAgICAgIGlmICgocG9zLnhSZWwgPCAwIHx8IGVuZCA9PSBsaW5lLmxl
bmd0aCkgJiYgc3RhcnQpIC0tc3RhcnQ7IGVsc2UgKytlbmQ7CisgICAgICAgIHZhciBzdGFydENo
YXIgPSBsaW5lLmNoYXJBdChzdGFydCk7CisgICAgICAgIHZhciBjaGVjayA9IGlzV29yZENoYXIo
c3RhcnRDaGFyLCBoZWxwZXIpCisgICAgICAgICAgPyBmdW5jdGlvbihjaCkgeyByZXR1cm4gaXNX
b3JkQ2hhcihjaCwgaGVscGVyKTsgfQorICAgICAgICAgIDogL1xzLy50ZXN0KHN0YXJ0Q2hhcikg
PyBmdW5jdGlvbihjaCkge3JldHVybiAvXHMvLnRlc3QoY2gpO30KKyAgICAgICAgICA6IGZ1bmN0
aW9uKGNoKSB7cmV0dXJuICEvXHMvLnRlc3QoY2gpICYmICFpc1dvcmRDaGFyKGNoKTt9OworICAg
ICAgICB3aGlsZSAoc3RhcnQgPiAwICYmIGNoZWNrKGxpbmUuY2hhckF0KHN0YXJ0IC0gMSkpKSAt
LXN0YXJ0OworICAgICAgICB3aGlsZSAoZW5kIDwgbGluZS5sZW5ndGggJiYgY2hlY2sobGluZS5j
aGFyQXQoZW5kKSkpICsrZW5kOworICAgICAgfQorICAgICAgcmV0dXJuIG5ldyBSYW5nZShQb3Mo
cG9zLmxpbmUsIHN0YXJ0KSwgUG9zKHBvcy5saW5lLCBlbmQpKTsKKyAgICB9LAorCiAgICAgdG9n
Z2xlT3ZlcndyaXRlOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgaWYgKHZhbHVlICE9IG51bGwg
JiYgdmFsdWUgPT0gdGhpcy5zdGF0ZS5vdmVyd3JpdGUpIHJldHVybjsKICAgICAgIGlmICh0aGlz
LnN0YXRlLm92ZXJ3cml0ZSA9ICF0aGlzLnN0YXRlLm92ZXJ3cml0ZSkKQEAgLTQyMTUsNyArNTE1
OCw3IEBACiAKICAgICAgIHNpZ25hbCh0aGlzLCAib3ZlcndyaXRlVG9nZ2xlIiwgdGhpcywgdGhp
cy5zdGF0ZS5vdmVyd3JpdGUpOwogICAgIH0sCi0gICAgaGFzRm9jdXM6IGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gYWN0aXZlRWx0KCkgPT0gdGhpcy5kaXNwbGF5LmlucHV0OyB9LAorICAgIGhhc0ZvY3Vz
OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpID09IGFj
dGl2ZUVsdCgpOyB9LAogCiAgICAgc2Nyb2xsVG86IG1ldGhvZE9wKGZ1bmN0aW9uKHgsIHkpIHsK
ICAgICAgIGlmICh4ICE9IG51bGwgfHwgeSAhPSBudWxsKSByZXNvbHZlU2Nyb2xsVG9Qb3ModGhp
cyk7CkBAIC00MjIzLDEwICs1MTY2LDExIEBACiAgICAgICBpZiAoeSAhPSBudWxsKSB0aGlzLmN1
ck9wLnNjcm9sbFRvcCA9IHk7CiAgICAgfSksCiAgICAgZ2V0U2Nyb2xsSW5mbzogZnVuY3Rpb24o
KSB7Ci0gICAgICB2YXIgc2Nyb2xsZXIgPSB0aGlzLmRpc3BsYXkuc2Nyb2xsZXIsIGNvID0gc2Ny
b2xsZXJDdXRPZmY7CisgICAgICB2YXIgc2Nyb2xsZXIgPSB0aGlzLmRpc3BsYXkuc2Nyb2xsZXI7
CiAgICAgICByZXR1cm4ge2xlZnQ6IHNjcm9sbGVyLnNjcm9sbExlZnQsIHRvcDogc2Nyb2xsZXIu
c2Nyb2xsVG9wLAotICAgICAgICAgICAgICBoZWlnaHQ6IHNjcm9sbGVyLnNjcm9sbEhlaWdodCAt
IGNvLCB3aWR0aDogc2Nyb2xsZXIuc2Nyb2xsV2lkdGggLSBjbywKLSAgICAgICAgICAgICAgY2xp
ZW50SGVpZ2h0OiBzY3JvbGxlci5jbGllbnRIZWlnaHQgLSBjbywgY2xpZW50V2lkdGg6IHNjcm9s
bGVyLmNsaWVudFdpZHRoIC0gY299OworICAgICAgICAgICAgICBoZWlnaHQ6IHNjcm9sbGVyLnNj
cm9sbEhlaWdodCAtIHNjcm9sbEdhcCh0aGlzKSAtIHRoaXMuZGlzcGxheS5iYXJIZWlnaHQsCisg
ICAgICAgICAgICAgIHdpZHRoOiBzY3JvbGxlci5zY3JvbGxXaWR0aCAtIHNjcm9sbEdhcCh0aGlz
KSAtIHRoaXMuZGlzcGxheS5iYXJXaWR0aCwKKyAgICAgICAgICAgICAgY2xpZW50SGVpZ2h0OiBk
aXNwbGF5SGVpZ2h0KHRoaXMpLCBjbGllbnRXaWR0aDogZGlzcGxheVdpZHRoKHRoaXMpfTsKICAg
ICB9LAogCiAgICAgc2Nyb2xsSW50b1ZpZXc6IG1ldGhvZE9wKGZ1bmN0aW9uKHJhbmdlLCBtYXJn
aW4pIHsKQEAgLTQyNTQsMTQgKzUxOTgsMjEgQEAKICAgICB9KSwKIAogICAgIHNldFNpemU6IG1l
dGhvZE9wKGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHsKKyAgICAgIHZhciBjbSA9IHRoaXM7CiAg
ICAgICBmdW5jdGlvbiBpbnRlcnByZXQodmFsKSB7CiAgICAgICAgIHJldHVybiB0eXBlb2YgdmFs
ID09ICJudW1iZXIiIHx8IC9eXGQrJC8udGVzdChTdHJpbmcodmFsKSkgPyB2YWwgKyAicHgiIDog
dmFsOwogICAgICAgfQotICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHRoaXMuZGlzcGxheS53cmFw
cGVyLnN0eWxlLndpZHRoID0gaW50ZXJwcmV0KHdpZHRoKTsKLSAgICAgIGlmIChoZWlnaHQgIT0g
bnVsbCkgdGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gaW50ZXJwcmV0KGhlaWdo
dCk7Ci0gICAgICBpZiAodGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZykgY2xlYXJMaW5lTWVhc3Vy
ZW1lbnRDYWNoZSh0aGlzKTsKLSAgICAgIHRoaXMuY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlOwot
ICAgICAgc2lnbmFsKHRoaXMsICJyZWZyZXNoIiwgdGhpcyk7CisgICAgICBpZiAod2lkdGggIT0g
bnVsbCkgY20uZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoID0gaW50ZXJwcmV0KHdpZHRoKTsK
KyAgICAgIGlmIChoZWlnaHQgIT0gbnVsbCkgY20uZGlzcGxheS53cmFwcGVyLnN0eWxlLmhlaWdo
dCA9IGludGVycHJldChoZWlnaHQpOworICAgICAgaWYgKGNtLm9wdGlvbnMubGluZVdyYXBwaW5n
KSBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlKHRoaXMpOworICAgICAgdmFyIGxpbmVObyA9IGNt
LmRpc3BsYXkudmlld0Zyb207CisgICAgICBjbS5kb2MuaXRlcihsaW5lTm8sIGNtLmRpc3BsYXku
dmlld1RvLCBmdW5jdGlvbihsaW5lKSB7CisgICAgICAgIGlmIChsaW5lLndpZGdldHMpIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsgaSsrKQorICAgICAgICAgIGlmIChs
aW5lLndpZGdldHNbaV0ubm9IU2Nyb2xsKSB7IHJlZ0xpbmVDaGFuZ2UoY20sIGxpbmVObywgIndp
ZGdldCIpOyBicmVhazsgfQorICAgICAgICArK2xpbmVObzsKKyAgICAgIH0pOworICAgICAgY20u
Y3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlOworICAgICAgc2lnbmFsKGNtLCAicmVmcmVzaCIsIHRo
aXMpOwogICAgIH0pLAogCiAgICAgb3BlcmF0aW9uOiBmdW5jdGlvbihmKXtyZXR1cm4gcnVuSW5P
cCh0aGlzLCBmKTt9LApAQCAtNDI4MywxMyArNTIzNCwxNCBAQAogICAgICAgb2xkLmNtID0gbnVs
bDsKICAgICAgIGF0dGFjaERvYyh0aGlzLCBkb2MpOwogICAgICAgY2xlYXJDYWNoZXModGhpcyk7
Ci0gICAgICByZXNldElucHV0KHRoaXMpOworICAgICAgdGhpcy5kaXNwbGF5LmlucHV0LnJlc2V0
KCk7CiAgICAgICB0aGlzLnNjcm9sbFRvKGRvYy5zY3JvbGxMZWZ0LCBkb2Muc2Nyb2xsVG9wKTsK
KyAgICAgIHRoaXMuY3VyT3AuZm9yY2VTY3JvbGwgPSB0cnVlOwogICAgICAgc2lnbmFsTGF0ZXIo
dGhpcywgInN3YXBEb2MiLCB0aGlzLCBvbGQpOwogICAgICAgcmV0dXJuIG9sZDsKICAgICB9KSwK
IAotICAgIGdldElucHV0RmllbGQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1
dDt9LAorICAgIGdldElucHV0RmllbGQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5p
bnB1dC5nZXRGaWVsZCgpO30sCiAgICAgZ2V0V3JhcHBlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMuZGlzcGxheS53cmFwcGVyO30sCiAgICAgZ2V0U2Nyb2xsZXJFbGVtZW50OiBmdW5j
dGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuc2Nyb2xsZXI7fSwKICAgICBnZXRHdXR0ZXJFbGVt
ZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyczt9CkBAIC00MzMwLDEy
ICs1MjgyLDMxIEBACiAgICAgY2xlYXJDYWNoZXMoY20pOwogICAgIHJlZ0NoYW5nZShjbSk7CiAg
IH0sIHRydWUpOwotICBvcHRpb24oInNwZWNpYWxDaGFycyIsIC9bXHRcdTAwMDAtXHUwMDE5XHUw
MGFkXHUyMDBiXHUyMDI4XHUyMDI5XHVmZWZmXS9nLCBmdW5jdGlvbihjbSwgdmFsKSB7Ci0gICAg
Y20ub3B0aW9ucy5zcGVjaWFsQ2hhcnMgPSBuZXcgUmVnRXhwKHZhbC5zb3VyY2UgKyAodmFsLnRl
c3QoIlx0IikgPyAiIiA6ICJ8XHQiKSwgImciKTsKLSAgICBjbS5yZWZyZXNoKCk7Ci0gIH0sIHRy
dWUpOworICBvcHRpb24oImxpbmVTZXBhcmF0b3IiLCBudWxsLCBmdW5jdGlvbihjbSwgdmFsKSB7
CisgICAgY20uZG9jLmxpbmVTZXAgPSB2YWw7CisgICAgaWYgKCF2YWwpIHJldHVybjsKKyAgICB2
YXIgbmV3QnJlYWtzID0gW10sIGxpbmVObyA9IGNtLmRvYy5maXJzdDsKKyAgICBjbS5kb2MuaXRl
cihmdW5jdGlvbihsaW5lKSB7CisgICAgICBmb3IgKHZhciBwb3MgPSAwOzspIHsKKyAgICAgICAg
dmFyIGZvdW5kID0gbGluZS50ZXh0LmluZGV4T2YodmFsLCBwb3MpOworICAgICAgICBpZiAoZm91
bmQgPT0gLTEpIGJyZWFrOworICAgICAgICBwb3MgPSBmb3VuZCArIHZhbC5sZW5ndGg7CisgICAg
ICAgIG5ld0JyZWFrcy5wdXNoKFBvcyhsaW5lTm8sIGZvdW5kKSk7CisgICAgICB9CisgICAgICBs
aW5lTm8rKzsKKyAgICB9KTsKKyAgICBmb3IgKHZhciBpID0gbmV3QnJlYWtzLmxlbmd0aCAtIDE7
IGkgPj0gMDsgaS0tKQorICAgICAgcmVwbGFjZVJhbmdlKGNtLmRvYywgdmFsLCBuZXdCcmVha3Nb
aV0sIFBvcyhuZXdCcmVha3NbaV0ubGluZSwgbmV3QnJlYWtzW2ldLmNoICsgdmFsLmxlbmd0aCkp
CisgIH0pOworICBvcHRpb24oInNwZWNpYWxDaGFycyIsIC9bXHRcdTAwMDAtXHUwMDE5XHUwMGFk
XHUyMDBiLVx1MjAwZlx1MjAyOFx1MjAyOVx1ZmVmZl0vZywgZnVuY3Rpb24oY20sIHZhbCwgb2xk
KSB7CisgICAgY20uc3RhdGUuc3BlY2lhbENoYXJzID0gbmV3IFJlZ0V4cCh2YWwuc291cmNlICsg
KHZhbC50ZXN0KCJcdCIpID8gIiIgOiAifFx0IiksICJnIik7CisgICAgaWYgKG9sZCAhPSBDb2Rl
TWlycm9yLkluaXQpIGNtLnJlZnJlc2goKTsKKyAgfSk7CiAgIG9wdGlvbigic3BlY2lhbENoYXJQ
bGFjZWhvbGRlciIsIGRlZmF1bHRTcGVjaWFsQ2hhclBsYWNlaG9sZGVyLCBmdW5jdGlvbihjbSkg
e2NtLnJlZnJlc2goKTt9LCB0cnVlKTsKICAgb3B0aW9uKCJlbGVjdHJpY0NoYXJzIiwgdHJ1ZSk7
CisgIG9wdGlvbigiaW5wdXRTdHlsZSIsIG1vYmlsZSA/ICJjb250ZW50ZWRpdGFibGUiIDogInRl
eHRhcmVhIiwgZnVuY3Rpb24oKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJpbnB1dFN0eWxlIGNh
biBub3QgKHlldCkgYmUgY2hhbmdlZCBpbiBhIHJ1bm5pbmcgZWRpdG9yIik7IC8vIEZJWE1FCisg
IH0sIHRydWUpOwogICBvcHRpb24oInJ0bE1vdmVWaXN1YWxseSIsICF3aW5kb3dzKTsKICAgb3B0
aW9uKCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmUiLCB0cnVlKTsKIApAQCAtNDM0Myw3ICs1MzE0LDEy
IEBACiAgICAgdGhlbWVDaGFuZ2VkKGNtKTsKICAgICBndXR0ZXJzQ2hhbmdlZChjbSk7CiAgIH0s
IHRydWUpOwotICBvcHRpb24oImtleU1hcCIsICJkZWZhdWx0Iiwga2V5TWFwQ2hhbmdlZCk7Cisg
IG9wdGlvbigia2V5TWFwIiwgImRlZmF1bHQiLCBmdW5jdGlvbihjbSwgdmFsLCBvbGQpIHsKKyAg
ICB2YXIgbmV4dCA9IGdldEtleU1hcCh2YWwpOworICAgIHZhciBwcmV2ID0gb2xkICE9IENvZGVN
aXJyb3IuSW5pdCAmJiBnZXRLZXlNYXAob2xkKTsKKyAgICBpZiAocHJldiAmJiBwcmV2LmRldGFj
aCkgcHJldi5kZXRhY2goY20sIG5leHQpOworICAgIGlmIChuZXh0LmF0dGFjaCkgbmV4dC5hdHRh
Y2goY20sIHByZXYgfHwgbnVsbCk7CisgIH0pOwogICBvcHRpb24oImV4dHJhS2V5cyIsIG51bGwp
OwogCiAgIG9wdGlvbigibGluZVdyYXBwaW5nIiwgZmFsc2UsIHdyYXBwaW5nQ2hhbmdlZCwgdHJ1
ZSk7CkBAIC00MzU1LDcgKzUzMzEsMTMgQEAKICAgICBjbS5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUu
bGVmdCA9IHZhbCA/IGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGNtLmRpc3BsYXkpICsgInB4IiA6ICIw
IjsKICAgICBjbS5yZWZyZXNoKCk7CiAgIH0sIHRydWUpOwotICBvcHRpb24oImNvdmVyR3V0dGVy
TmV4dFRvU2Nyb2xsYmFyIiwgZmFsc2UsIHVwZGF0ZVNjcm9sbGJhcnMsIHRydWUpOworICBvcHRp
b24oImNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyIiwgZmFsc2UsIGZ1bmN0aW9uKGNtKSB7dXBk
YXRlU2Nyb2xsYmFycyhjbSk7fSwgdHJ1ZSk7CisgIG9wdGlvbigic2Nyb2xsYmFyU3R5bGUiLCAi
bmF0aXZlIiwgZnVuY3Rpb24oY20pIHsKKyAgICBpbml0U2Nyb2xsYmFycyhjbSk7CisgICAgdXBk
YXRlU2Nyb2xsYmFycyhjbSk7CisgICAgY20uZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbFRv
cChjbS5kb2Muc2Nyb2xsVG9wKTsKKyAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xs
TGVmdChjbS5kb2Muc2Nyb2xsTGVmdCk7CisgIH0sIHRydWUpOwogICBvcHRpb24oImxpbmVOdW1i
ZXJzIiwgZmFsc2UsIGZ1bmN0aW9uKGNtKSB7CiAgICAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJz
KGNtLm9wdGlvbnMpOwogICAgIGd1dHRlcnNDaGFuZ2VkKGNtKTsKQEAgLTQzNjUsNiArNTM0Nyw3
IEBACiAgIG9wdGlvbigic2hvd0N1cnNvcldoZW5TZWxlY3RpbmciLCBmYWxzZSwgdXBkYXRlU2Vs
ZWN0aW9uLCB0cnVlKTsKIAogICBvcHRpb24oInJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudSIs
IHRydWUpOworICBvcHRpb24oImxpbmVXaXNlQ29weUN1dCIsIHRydWUpOwogCiAgIG9wdGlvbigi
cmVhZE9ubHkiLCBmYWxzZSwgZnVuY3Rpb24oY20sIHZhbCkgewogICAgIGlmICh2YWwgPT0gIm5v
Y3Vyc29yIikgewpAQCAtNDM3MywxNSArNTM1NiwxNiBAQAogICAgICAgY20uZGlzcGxheS5kaXNh
YmxlZCA9IHRydWU7CiAgICAgfSBlbHNlIHsKICAgICAgIGNtLmRpc3BsYXkuZGlzYWJsZWQgPSBm
YWxzZTsKLSAgICAgIGlmICghdmFsKSByZXNldElucHV0KGNtKTsKKyAgICAgIGlmICghdmFsKSBj
bS5kaXNwbGF5LmlucHV0LnJlc2V0KCk7CiAgICAgfQogICB9KTsKLSAgb3B0aW9uKCJkaXNhYmxl
SW5wdXQiLCBmYWxzZSwgZnVuY3Rpb24oY20sIHZhbCkge2lmICghdmFsKSByZXNldElucHV0KGNt
KTt9LCB0cnVlKTsKLSAgb3B0aW9uKCJkcmFnRHJvcCIsIHRydWUpOworICBvcHRpb24oImRpc2Fi
bGVJbnB1dCIsIGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsKSB7aWYgKCF2YWwpIGNtLmRpc3BsYXku
aW5wdXQucmVzZXQoKTt9LCB0cnVlKTsKKyAgb3B0aW9uKCJkcmFnRHJvcCIsIHRydWUsIGRyYWdE
cm9wQ2hhbmdlZCk7CiAKICAgb3B0aW9uKCJjdXJzb3JCbGlua1JhdGUiLCA1MzApOwogICBvcHRp
b24oImN1cnNvclNjcm9sbE1hcmdpbiIsIDApOwotICBvcHRpb24oImN1cnNvckhlaWdodCIsIDEp
OworICBvcHRpb24oImN1cnNvckhlaWdodCIsIDEsIHVwZGF0ZVNlbGVjdGlvbiwgdHJ1ZSk7Cisg
IG9wdGlvbigic2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSIsIHRydWUsIHVwZGF0ZVNlbGVjdGlv
biwgdHJ1ZSk7CiAgIG9wdGlvbigid29ya1RpbWUiLCAxMDApOwogICBvcHRpb24oIndvcmtEZWxh
eSIsIDEwMCk7CiAgIG9wdGlvbigiZmxhdHRlblNwYW5zIiwgdHJ1ZSwgcmVzZXRNb2RlU3RhdGUs
IHRydWUpOwpAQCAtNDM5MiwxMSArNTM3NiwxMSBAQAogICBvcHRpb24oInZpZXdwb3J0TWFyZ2lu
IiwgMTAsIGZ1bmN0aW9uKGNtKXtjbS5yZWZyZXNoKCk7fSwgdHJ1ZSk7CiAgIG9wdGlvbigibWF4
SGlnaGxpZ2h0TGVuZ3RoIiwgMTAwMDAsIHJlc2V0TW9kZVN0YXRlLCB0cnVlKTsKICAgb3B0aW9u
KCJtb3ZlSW5wdXRXaXRoQ3Vyc29yIiwgdHJ1ZSwgZnVuY3Rpb24oY20sIHZhbCkgewotICAgIGlm
ICghdmFsKSBjbS5kaXNwbGF5LmlucHV0RGl2LnN0eWxlLnRvcCA9IGNtLmRpc3BsYXkuaW5wdXRE
aXYuc3R5bGUubGVmdCA9IDA7CisgICAgaWYgKCF2YWwpIGNtLmRpc3BsYXkuaW5wdXQucmVzZXRQ
b3NpdGlvbigpOwogICB9KTsKIAogICBvcHRpb24oInRhYmluZGV4IiwgbnVsbCwgZnVuY3Rpb24o
Y20sIHZhbCkgewotICAgIGNtLmRpc3BsYXkuaW5wdXQudGFiSW5kZXggPSB2YWwgfHwgIiI7Cisg
ICAgY20uZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpLnRhYkluZGV4ID0gdmFsIHx8ICIiOwogICB9
KTsKICAgb3B0aW9uKCJhdXRvZm9jdXMiLCBudWxsKTsKIApAQCAtNDQxMCwxMCArNTM5NCw4IEBA
CiAgIC8vIGxvYWQgYSBtb2RlLiAoUHJlZmVycmVkIG1lY2hhbmlzbSBpcyB0aGUgcmVxdWlyZS9k
ZWZpbmUgY2FsbHMuKQogICBDb2RlTWlycm9yLmRlZmluZU1vZGUgPSBmdW5jdGlvbihuYW1lLCBt
b2RlKSB7CiAgICAgaWYgKCFDb2RlTWlycm9yLmRlZmF1bHRzLm1vZGUgJiYgbmFtZSAhPSAibnVs
bCIpIENvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSA9IG5hbWU7Ci0gICAgaWYgKGFyZ3VtZW50cy5s
ZW5ndGggPiAyKSB7Ci0gICAgICBtb2RlLmRlcGVuZGVuY2llcyA9IFtdOwotICAgICAgZm9yICh2
YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIG1vZGUuZGVwZW5kZW5jaWVzLnB1
c2goYXJndW1lbnRzW2ldKTsKLSAgICB9CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKQor
ICAgICAgbW9kZS5kZXBlbmRlbmNpZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1
bWVudHMsIDIpOwogICAgIG1vZGVzW25hbWVdID0gbW9kZTsKICAgfTsKIApAQCAtNDU2NCw2ICs1
NTQ2LDIwIEBACiAgICAgICAgIHJldHVybiB7ZnJvbTogUG9zKHJhbmdlLmZyb20oKS5saW5lLCAw
KSwgdG86IHJhbmdlLmZyb20oKX07CiAgICAgICB9KTsKICAgICB9LAorICAgIGRlbFdyYXBwZWRM
aW5lTGVmdDogZnVuY3Rpb24oY20pIHsKKyAgICAgIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1
bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHZhciB0b3AgPSBjbS5jaGFyQ29vcmRzKHJhbmdlLmhl
YWQsICJkaXYiKS50b3AgKyA1OworICAgICAgICB2YXIgbGVmdFBvcyA9IGNtLmNvb3Jkc0NoYXIo
e2xlZnQ6IDAsIHRvcDogdG9wfSwgImRpdiIpOworICAgICAgICByZXR1cm4ge2Zyb206IGxlZnRQ
b3MsIHRvOiByYW5nZS5mcm9tKCl9OworICAgICAgfSk7CisgICAgfSwKKyAgICBkZWxXcmFwcGVk
TGluZVJpZ2h0OiBmdW5jdGlvbihjbSkgeworICAgICAgZGVsZXRlTmVhclNlbGVjdGlvbihjbSwg
ZnVuY3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2Uu
aGVhZCwgImRpdiIpLnRvcCArIDU7CisgICAgICAgIHZhciByaWdodFBvcyA9IGNtLmNvb3Jkc0No
YXIoe2xlZnQ6IGNtLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCArIDEwMCwgdG9wOiB0b3B9
LCAiZGl2Iik7CisgICAgICAgIHJldHVybiB7ZnJvbTogcmFuZ2UuZnJvbSgpLCB0bzogcmlnaHRQ
b3MgfTsKKyAgICAgIH0pOworICAgIH0sCiAgICAgdW5kbzogZnVuY3Rpb24oY20pIHtjbS51bmRv
KCk7fSwKICAgICByZWRvOiBmdW5jdGlvbihjbSkge2NtLnJlZG8oKTt9LAogICAgIHVuZG9TZWxl
Y3Rpb246IGZ1bmN0aW9uKGNtKSB7Y20udW5kb1NlbGVjdGlvbigpO30sCkBAIC00NTcxLDIzICs1
NTY3LDE3IEBACiAgICAgZ29Eb2NTdGFydDogZnVuY3Rpb24oY20pIHtjbS5leHRlbmRTZWxlY3Rp
b24oUG9zKGNtLmZpcnN0TGluZSgpLCAwKSk7fSwKICAgICBnb0RvY0VuZDogZnVuY3Rpb24oY20p
IHtjbS5leHRlbmRTZWxlY3Rpb24oUG9zKGNtLmxhc3RMaW5lKCkpKTt9LAogICAgIGdvTGluZVN0
YXJ0OiBmdW5jdGlvbihjbSkgewotICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9u
KHJhbmdlKSB7IHJldHVybiBsaW5lU3RhcnQoY20sIHJhbmdlLmhlYWQubGluZSk7IH0sIHNlbF9t
b3ZlKTsKKyAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgeyByZXR1
cm4gbGluZVN0YXJ0KGNtLCByYW5nZS5oZWFkLmxpbmUpOyB9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHtvcmlnaW46ICIrbW92ZSIsIGJpYXM6IDF9KTsKICAgICB9LAogICAgIGdvTGlu
ZVN0YXJ0U21hcnQ6IGZ1bmN0aW9uKGNtKSB7CiAgICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnko
ZnVuY3Rpb24ocmFuZ2UpIHsKLSAgICAgICAgdmFyIHN0YXJ0ID0gbGluZVN0YXJ0KGNtLCByYW5n
ZS5oZWFkLmxpbmUpOwotICAgICAgICB2YXIgbGluZSA9IGNtLmdldExpbmVIYW5kbGUoc3RhcnQu
bGluZSk7Ci0gICAgICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUpOwotICAgICAgICBpZiAo
IW9yZGVyIHx8IG9yZGVyWzBdLmxldmVsID09IDApIHsKLSAgICAgICAgICB2YXIgZmlyc3ROb25X
UyA9IE1hdGgubWF4KDAsIGxpbmUudGV4dC5zZWFyY2goL1xTLykpOwotICAgICAgICAgIHZhciBp
bldTID0gcmFuZ2UuaGVhZC5saW5lID09IHN0YXJ0LmxpbmUgJiYgcmFuZ2UuaGVhZC5jaCA8PSBm
aXJzdE5vbldTICYmIHJhbmdlLmhlYWQuY2g7Ci0gICAgICAgICAgcmV0dXJuIFBvcyhzdGFydC5s
aW5lLCBpbldTID8gMCA6IGZpcnN0Tm9uV1MpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBz
dGFydDsKLSAgICAgIH0sIHNlbF9tb3ZlKTsKKyAgICAgICAgcmV0dXJuIGxpbmVTdGFydFNtYXJ0
KGNtLCByYW5nZS5oZWFkKTsKKyAgICAgIH0sIHtvcmlnaW46ICIrbW92ZSIsIGJpYXM6IDF9KTsK
ICAgICB9LAogICAgIGdvTGluZUVuZDogZnVuY3Rpb24oY20pIHsKLSAgICAgIGNtLmV4dGVuZFNl
bGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgeyByZXR1cm4gbGluZUVuZChjbSwgcmFuZ2UuaGVh
ZC5saW5lKTsgfSwgc2VsX21vdmUpOworICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0
aW9uKHJhbmdlKSB7IHJldHVybiBsaW5lRW5kKGNtLCByYW5nZS5oZWFkLmxpbmUpOyB9LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHtvcmlnaW46ICIrbW92ZSIsIGJpYXM6IC0xfSk7CiAg
ICAgfSwKICAgICBnb0xpbmVSaWdodDogZnVuY3Rpb24oY20pIHsKICAgICAgIGNtLmV4dGVuZFNl
bGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgewpAQCAtNDYwMSw2ICs1NTkxLDE0IEBACiAgICAg
ICAgIHJldHVybiBjbS5jb29yZHNDaGFyKHtsZWZ0OiAwLCB0b3A6IHRvcH0sICJkaXYiKTsKICAg
ICAgIH0sIHNlbF9tb3ZlKTsKICAgICB9LAorICAgIGdvTGluZUxlZnRTbWFydDogZnVuY3Rpb24o
Y20pIHsKKyAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgeworICAg
ICAgICB2YXIgdG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5oZWFkLCAiZGl2IikudG9wICsgNTsK
KyAgICAgICAgdmFyIHBvcyA9IGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IDAsIHRvcDogdG9wfSwgImRp
diIpOworICAgICAgICBpZiAocG9zLmNoIDwgY20uZ2V0TGluZShwb3MubGluZSkuc2VhcmNoKC9c
Uy8pKSByZXR1cm4gbGluZVN0YXJ0U21hcnQoY20sIHJhbmdlLmhlYWQpOworICAgICAgICByZXR1
cm4gcG9zOworICAgICAgfSwgc2VsX21vdmUpOworICAgIH0sCiAgICAgZ29MaW5lVXA6IGZ1bmN0
aW9uKGNtKSB7Y20ubW92ZVYoLTEsICJsaW5lIik7fSwKICAgICBnb0xpbmVEb3duOiBmdW5jdGlv
bihjbSkge2NtLm1vdmVWKDEsICJsaW5lIik7fSwKICAgICBnb1BhZ2VVcDogZnVuY3Rpb24oY20p
IHtjbS5tb3ZlVigtMSwgInBhZ2UiKTt9LApAQCAtNDY1MCw3ICs1NjQ4LDggQEAKICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY3VyLmxpbmUgPiBjbS5kb2MuZmlyc3QpIHsKICAgICAgICAgICAgICAg
dmFyIHByZXYgPSBnZXRMaW5lKGNtLmRvYywgY3VyLmxpbmUgLSAxKS50ZXh0OwogICAgICAgICAg
ICAgICBpZiAocHJldikKLSAgICAgICAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFy
QXQoMCkgKyAiXG4iICsgcHJldi5jaGFyQXQocHJldi5sZW5ndGggLSAxKSwKKyAgICAgICAgICAg
ICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQoMCkgKyBjbS5kb2MubGluZVNlcGFyYXRv
cigpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5jaGFyQXQocHJldi5s
ZW5ndGggLSAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zKGN1ci5saW5l
IC0gMSwgcHJldi5sZW5ndGggLSAxKSwgUG9zKGN1ci5saW5lLCAxKSwgIit0cmFuc3Bvc2UiKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICB9CkBAIC00NjY0LDcgKzU2NjMsNyBAQAogICAgICAg
ICB2YXIgbGVuID0gY20ubGlzdFNlbGVjdGlvbnMoKS5sZW5ndGg7CiAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICB2YXIgcmFuZ2UgPSBjbS5saXN0U2Vs
ZWN0aW9ucygpW2ldOwotICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZSgiXG4iLCByYW5nZS5hbmNo
b3IsIHJhbmdlLmhlYWQsICIraW5wdXQiKTsKKyAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UoY20u
ZG9jLmxpbmVTZXBhcmF0b3IoKSwgcmFuZ2UuYW5jaG9yLCByYW5nZS5oZWFkLCAiK2lucHV0Iik7
CiAgICAgICAgICAgY20uaW5kZW50TGluZShyYW5nZS5mcm9tKCkubGluZSArIDEsIG51bGwsIHRy
dWUpOwogICAgICAgICAgIGVuc3VyZUN1cnNvclZpc2libGUoY20pOwogICAgICAgICB9CkBAIC00
NjczLDkgKzU2NzIsMTEgQEAKICAgICB0b2dnbGVPdmVyd3JpdGU6IGZ1bmN0aW9uKGNtKSB7Y20u
dG9nZ2xlT3ZlcndyaXRlKCk7fQogICB9OwogCisKICAgLy8gU1RBTkRBUkQgS0VZTUFQUwogCiAg
IHZhciBrZXlNYXAgPSBDb2RlTWlycm9yLmtleU1hcCA9IHt9OworCiAgIGtleU1hcC5iYXNpYyA9
IHsKICAgICAiTGVmdCI6ICJnb0NoYXJMZWZ0IiwgIlJpZ2h0IjogImdvQ2hhclJpZ2h0IiwgIlVw
IjogImdvTGluZVVwIiwgIkRvd24iOiAiZ29MaW5lRG93biIsCiAgICAgIkVuZCI6ICJnb0xpbmVF
bmQiLCAiSG9tZSI6ICJnb0xpbmVTdGFydFNtYXJ0IiwgIlBhZ2VVcCI6ICJnb1BhZ2VVcCIsICJQ
YWdlRG93biI6ICJnb1BhZ2VEb3duIiwKQEAgLTQ2ODksNyArNTY5MCw3IEBACiAgIC8vIGFyZSBz
aW1wbHkgaWdub3JlZC4KICAga2V5TWFwLnBjRGVmYXVsdCA9IHsKICAgICAiQ3RybC1BIjogInNl
bGVjdEFsbCIsICJDdHJsLUQiOiAiZGVsZXRlTGluZSIsICJDdHJsLVoiOiAidW5kbyIsICJTaGlm
dC1DdHJsLVoiOiAicmVkbyIsICJDdHJsLVkiOiAicmVkbyIsCi0gICAgIkN0cmwtSG9tZSI6ICJn
b0RvY1N0YXJ0IiwgIkN0cmwtVXAiOiAiZ29Eb2NTdGFydCIsICJDdHJsLUVuZCI6ICJnb0RvY0Vu
ZCIsICJDdHJsLURvd24iOiAiZ29Eb2NFbmQiLAorICAgICJDdHJsLUhvbWUiOiAiZ29Eb2NTdGFy
dCIsICJDdHJsLUVuZCI6ICJnb0RvY0VuZCIsICJDdHJsLVVwIjogImdvTGluZVVwIiwgIkN0cmwt
RG93biI6ICJnb0xpbmVEb3duIiwKICAgICAiQ3RybC1MZWZ0IjogImdvR3JvdXBMZWZ0IiwgIkN0
cmwtUmlnaHQiOiAiZ29Hcm91cFJpZ2h0IiwgIkFsdC1MZWZ0IjogImdvTGluZVN0YXJ0IiwgIkFs
dC1SaWdodCI6ICJnb0xpbmVFbmQiLAogICAgICJDdHJsLUJhY2tzcGFjZSI6ICJkZWxHcm91cEJl
Zm9yZSIsICJDdHJsLURlbGV0ZSI6ICJkZWxHcm91cEFmdGVyIiwgIkN0cmwtUyI6ICJzYXZlIiwg
IkN0cmwtRiI6ICJmaW5kIiwKICAgICAiQ3RybC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUN0cmwt
RyI6ICJmaW5kUHJldiIsICJTaGlmdC1DdHJsLUYiOiAicmVwbGFjZSIsICJTaGlmdC1DdHJsLVIi
OiAicmVwbGFjZUFsbCIsCkBAIC00Njk3LDE2ICs1Njk4LDYgQEAKICAgICAiQ3RybC1VIjogInVu
ZG9TZWxlY3Rpb24iLCAiU2hpZnQtQ3RybC1VIjogInJlZG9TZWxlY3Rpb24iLCAiQWx0LVUiOiAi
cmVkb1NlbGVjdGlvbiIsCiAgICAgZmFsbHRocm91Z2g6ICJiYXNpYyIKICAgfTsKLSAga2V5TWFw
Lm1hY0RlZmF1bHQgPSB7Ci0gICAgIkNtZC1BIjogInNlbGVjdEFsbCIsICJDbWQtRCI6ICJkZWxl
dGVMaW5lIiwgIkNtZC1aIjogInVuZG8iLCAiU2hpZnQtQ21kLVoiOiAicmVkbyIsICJDbWQtWSI6
ICJyZWRvIiwKLSAgICAiQ21kLVVwIjogImdvRG9jU3RhcnQiLCAiQ21kLUVuZCI6ICJnb0RvY0Vu
ZCIsICJDbWQtRG93biI6ICJnb0RvY0VuZCIsICJBbHQtTGVmdCI6ICJnb0dyb3VwTGVmdCIsCi0g
ICAgIkFsdC1SaWdodCI6ICJnb0dyb3VwUmlnaHQiLCAiQ21kLUxlZnQiOiAiZ29MaW5lU3RhcnQi
LCAiQ21kLVJpZ2h0IjogImdvTGluZUVuZCIsICJBbHQtQmFja3NwYWNlIjogImRlbEdyb3VwQmVm
b3JlIiwKLSAgICAiQ3RybC1BbHQtQmFja3NwYWNlIjogImRlbEdyb3VwQWZ0ZXIiLCAiQWx0LURl
bGV0ZSI6ICJkZWxHcm91cEFmdGVyIiwgIkNtZC1TIjogInNhdmUiLCAiQ21kLUYiOiAiZmluZCIs
Ci0gICAgIkNtZC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUNtZC1HIjogImZpbmRQcmV2IiwgIkNt
ZC1BbHQtRiI6ICJyZXBsYWNlIiwgIlNoaWZ0LUNtZC1BbHQtRiI6ICJyZXBsYWNlQWxsIiwKLSAg
ICAiQ21kLVsiOiAiaW5kZW50TGVzcyIsICJDbWQtXSI6ICJpbmRlbnRNb3JlIiwgIkNtZC1CYWNr
c3BhY2UiOiAiZGVsTGluZUxlZnQiLAotICAgICJDbWQtVSI6ICJ1bmRvU2VsZWN0aW9uIiwgIlNo
aWZ0LUNtZC1VIjogInJlZG9TZWxlY3Rpb24iLAotICAgIGZhbGx0aHJvdWdoOiBbImJhc2ljIiwg
ImVtYWNzeSJdCi0gIH07CiAgIC8vIFZlcnkgYmFzaWMgcmVhZGxpbmUvZW1hY3Mtc3R5bGUgYmlu
ZGluZ3MsIHdoaWNoIGFyZSBzdGFuZGFyZCBvbiBNYWMuCiAgIGtleU1hcC5lbWFjc3kgPSB7CiAg
ICAgIkN0cmwtRiI6ICJnb0NoYXJSaWdodCIsICJDdHJsLUIiOiAiZ29DaGFyTGVmdCIsICJDdHJs
LVAiOiAiZ29MaW5lVXAiLCAiQ3RybC1OIjogImdvTGluZURvd24iLApAQCAtNDcxNCw3MCArNTcw
NSwxMTcgQEAKICAgICAiQ3RybC1WIjogImdvUGFnZURvd24iLCAiU2hpZnQtQ3RybC1WIjogImdv
UGFnZVVwIiwgIkN0cmwtRCI6ICJkZWxDaGFyQWZ0ZXIiLCAiQ3RybC1IIjogImRlbENoYXJCZWZv
cmUiLAogICAgICJBbHQtRCI6ICJkZWxXb3JkQWZ0ZXIiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxX
b3JkQmVmb3JlIiwgIkN0cmwtSyI6ICJraWxsTGluZSIsICJDdHJsLVQiOiAidHJhbnNwb3NlQ2hh
cnMiCiAgIH07CisgIGtleU1hcC5tYWNEZWZhdWx0ID0geworICAgICJDbWQtQSI6ICJzZWxlY3RB
bGwiLCAiQ21kLUQiOiAiZGVsZXRlTGluZSIsICJDbWQtWiI6ICJ1bmRvIiwgIlNoaWZ0LUNtZC1a
IjogInJlZG8iLCAiQ21kLVkiOiAicmVkbyIsCisgICAgIkNtZC1Ib21lIjogImdvRG9jU3RhcnQi
LCAiQ21kLVVwIjogImdvRG9jU3RhcnQiLCAiQ21kLUVuZCI6ICJnb0RvY0VuZCIsICJDbWQtRG93
biI6ICJnb0RvY0VuZCIsICJBbHQtTGVmdCI6ICJnb0dyb3VwTGVmdCIsCisgICAgIkFsdC1SaWdo
dCI6ICJnb0dyb3VwUmlnaHQiLCAiQ21kLUxlZnQiOiAiZ29MaW5lTGVmdCIsICJDbWQtUmlnaHQi
OiAiZ29MaW5lUmlnaHQiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxHcm91cEJlZm9yZSIsCisgICAg
IkN0cmwtQWx0LUJhY2tzcGFjZSI6ICJkZWxHcm91cEFmdGVyIiwgIkFsdC1EZWxldGUiOiAiZGVs
R3JvdXBBZnRlciIsICJDbWQtUyI6ICJzYXZlIiwgIkNtZC1GIjogImZpbmQiLAorICAgICJDbWQt
RyI6ICJmaW5kTmV4dCIsICJTaGlmdC1DbWQtRyI6ICJmaW5kUHJldiIsICJDbWQtQWx0LUYiOiAi
cmVwbGFjZSIsICJTaGlmdC1DbWQtQWx0LUYiOiAicmVwbGFjZUFsbCIsCisgICAgIkNtZC1bIjog
ImluZGVudExlc3MiLCAiQ21kLV0iOiAiaW5kZW50TW9yZSIsICJDbWQtQmFja3NwYWNlIjogImRl
bFdyYXBwZWRMaW5lTGVmdCIsICJDbWQtRGVsZXRlIjogImRlbFdyYXBwZWRMaW5lUmlnaHQiLAor
ICAgICJDbWQtVSI6ICJ1bmRvU2VsZWN0aW9uIiwgIlNoaWZ0LUNtZC1VIjogInJlZG9TZWxlY3Rp
b24iLCAiQ3RybC1VcCI6ICJnb0RvY1N0YXJ0IiwgIkN0cmwtRG93biI6ICJnb0RvY0VuZCIsCisg
ICAgZmFsbHRocm91Z2g6IFsiYmFzaWMiLCAiZW1hY3N5Il0KKyAgfTsKICAga2V5TWFwWyJkZWZh
dWx0Il0gPSBtYWMgPyBrZXlNYXAubWFjRGVmYXVsdCA6IGtleU1hcC5wY0RlZmF1bHQ7CiAKICAg
Ly8gS0VZTUFQIERJU1BBVENICiAKLSAgZnVuY3Rpb24gZ2V0S2V5TWFwKHZhbCkgewotICAgIGlm
ICh0eXBlb2YgdmFsID09ICJzdHJpbmciKSByZXR1cm4ga2V5TWFwW3ZhbF07Ci0gICAgZWxzZSBy
ZXR1cm4gdmFsOwotICB9Ci0KLSAgLy8gR2l2ZW4gYW4gYXJyYXkgb2Yga2V5bWFwcyBhbmQgYSBr
ZXkgbmFtZSwgY2FsbCBoYW5kbGUgb24gYW55Ci0gIC8vIGJpbmRpbmdzIGZvdW5kLCB1bnRpbCB0
aGF0IHJldHVybnMgYSB0cnV0aHkgdmFsdWUsIGF0IHdoaWNoIHBvaW50Ci0gIC8vIHdlIGNvbnNp
ZGVyIHRoZSBrZXkgaGFuZGxlZC4gSW1wbGVtZW50cyB0aGluZ3MgbGlrZSBiaW5kaW5nIGEga2V5
Ci0gIC8vIHRvIGZhbHNlIHN0b3BwaW5nIGZ1cnRoZXIgaGFuZGxpbmcgYW5kIGtleW1hcCBmYWxs
dGhyb3VnaC4KLSAgdmFyIGxvb2t1cEtleSA9IENvZGVNaXJyb3IubG9va3VwS2V5ID0gZnVuY3Rp
b24obmFtZSwgbWFwcywgaGFuZGxlKSB7Ci0gICAgZnVuY3Rpb24gbG9va3VwKG1hcCkgewotICAg
ICAgbWFwID0gZ2V0S2V5TWFwKG1hcCk7Ci0gICAgICB2YXIgZm91bmQgPSBtYXBbbmFtZV07Ci0g
ICAgICBpZiAoZm91bmQgPT09IGZhbHNlKSByZXR1cm4gInN0b3AiOwotICAgICAgaWYgKGZvdW5k
ICE9IG51bGwgJiYgaGFuZGxlKGZvdW5kKSkgcmV0dXJuIHRydWU7Ci0gICAgICBpZiAobWFwLm5v
ZmFsbHRocm91Z2gpIHJldHVybiAic3RvcCI7Ci0KLSAgICAgIHZhciBmYWxsdGhyb3VnaCA9IG1h
cC5mYWxsdGhyb3VnaDsKLSAgICAgIGlmIChmYWxsdGhyb3VnaCA9PSBudWxsKSByZXR1cm4gZmFs
c2U7Ci0gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGZhbGx0aHJvdWdo
KSAhPSAiW29iamVjdCBBcnJheV0iKQotICAgICAgICByZXR1cm4gbG9va3VwKGZhbGx0aHJvdWdo
KTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmFsbHRocm91Z2gubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgdmFyIGRvbmUgPSBsb29rdXAoZmFsbHRocm91Z2hbaV0pOwotICAgICAgICBpZiAo
ZG9uZSkgcmV0dXJuIGRvbmU7CisgIGZ1bmN0aW9uIG5vcm1hbGl6ZUtleU5hbWUobmFtZSkgewor
ICAgIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoLy0oPyEkKS8pLCBuYW1lID0gcGFydHNbcGFydHMu
bGVuZ3RoIC0gMV07CisgICAgdmFyIGFsdCwgY3RybCwgc2hpZnQsIGNtZDsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykgeworICAgICAgdmFyIG1vZCA9IHBh
cnRzW2ldOworICAgICAgaWYgKC9eKGNtZHxtZXRhfG0pJC9pLnRlc3QobW9kKSkgY21kID0gdHJ1
ZTsKKyAgICAgIGVsc2UgaWYgKC9eYShsdCk/JC9pLnRlc3QobW9kKSkgYWx0ID0gdHJ1ZTsKKyAg
ICAgIGVsc2UgaWYgKC9eKGN8Y3RybHxjb250cm9sKSQvaS50ZXN0KG1vZCkpIGN0cmwgPSB0cnVl
OworICAgICAgZWxzZSBpZiAoL15zKGhpZnQpJC9pLnRlc3QobW9kKSkgc2hpZnQgPSB0cnVlOwor
ICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBtb2RpZmllciBuYW1lOiAi
ICsgbW9kKTsKKyAgICB9CisgICAgaWYgKGFsdCkgbmFtZSA9ICJBbHQtIiArIG5hbWU7CisgICAg
aWYgKGN0cmwpIG5hbWUgPSAiQ3RybC0iICsgbmFtZTsKKyAgICBpZiAoY21kKSBuYW1lID0gIkNt
ZC0iICsgbmFtZTsKKyAgICBpZiAoc2hpZnQpIG5hbWUgPSAiU2hpZnQtIiArIG5hbWU7CisgICAg
cmV0dXJuIG5hbWU7CisgIH0KKworICAvLyBUaGlzIGlzIGEga2x1ZGdlIHRvIGtlZXAga2V5bWFw
cyBtb3N0bHkgd29ya2luZyBhcyByYXcgb2JqZWN0cworICAvLyAoYmFja3dhcmRzIGNvbXBhdGli
aWxpdHkpIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgc3VwcG9ydCBmZWF0dXJlcworICAvLyBsaWtl
IG5vcm1hbGl6YXRpb24gYW5kIG11bHRpLXN0cm9rZSBrZXkgYmluZGluZ3MuIEl0IGNvbXBpbGVz
IGEKKyAgLy8gbmV3IG5vcm1hbGl6ZWQga2V5bWFwLCBhbmQgdGhlbiB1cGRhdGVzIHRoZSBvbGQg
b2JqZWN0IHRvIHJlZmxlY3QKKyAgLy8gdGhpcy4KKyAgQ29kZU1pcnJvci5ub3JtYWxpemVLZXlN
YXAgPSBmdW5jdGlvbihrZXltYXApIHsKKyAgICB2YXIgY29weSA9IHt9OworICAgIGZvciAodmFy
IGtleW5hbWUgaW4ga2V5bWFwKSBpZiAoa2V5bWFwLmhhc093blByb3BlcnR5KGtleW5hbWUpKSB7
CisgICAgICB2YXIgdmFsdWUgPSBrZXltYXBba2V5bmFtZV07CisgICAgICBpZiAoL14obmFtZXxm
YWxsdGhyb3VnaHwoZGV8YXQpdGFjaCkkLy50ZXN0KGtleW5hbWUpKSBjb250aW51ZTsKKyAgICAg
IGlmICh2YWx1ZSA9PSAiLi4uIikgeyBkZWxldGUga2V5bWFwW2tleW5hbWVdOyBjb250aW51ZTsg
fQorCisgICAgICB2YXIga2V5cyA9IG1hcChrZXluYW1lLnNwbGl0KCIgIiksIG5vcm1hbGl6ZUtl
eU5hbWUpOworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgIHZhciB2YWwsIG5hbWU7CisgICAgICAgIGlmIChpID09IGtleXMubGVuZ3RoIC0gMSkg
eworICAgICAgICAgIG5hbWUgPSBrZXlzLmpvaW4oIiAiKTsKKyAgICAgICAgICB2YWwgPSB2YWx1
ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBuYW1lID0ga2V5cy5zbGljZSgwLCBpICsg
MSkuam9pbigiICIpOworICAgICAgICAgIHZhbCA9ICIuLi4iOworICAgICAgICB9CisgICAgICAg
IHZhciBwcmV2ID0gY29weVtuYW1lXTsKKyAgICAgICAgaWYgKCFwcmV2KSBjb3B5W25hbWVdID0g
dmFsOworICAgICAgICBlbHNlIGlmIChwcmV2ICE9IHZhbCkgdGhyb3cgbmV3IEVycm9yKCJJbmNv
bnNpc3RlbnQgYmluZGluZ3MgZm9yICIgKyBuYW1lKTsKICAgICAgIH0KLSAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgIGRlbGV0ZSBrZXltYXBba2V5bmFtZV07CiAgICAgfQorICAgIGZvciAodmFy
IHByb3AgaW4gY29weSkga2V5bWFwW3Byb3BdID0gY29weVtwcm9wXTsKKyAgICByZXR1cm4ga2V5
bWFwOworICB9OwogCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBzLmxlbmd0aDsgKytpKSB7
Ci0gICAgICB2YXIgZG9uZSA9IGxvb2t1cChtYXBzW2ldKTsKLSAgICAgIGlmIChkb25lKSByZXR1
cm4gZG9uZSAhPSAic3RvcCI7CisgIHZhciBsb29rdXBLZXkgPSBDb2RlTWlycm9yLmxvb2t1cEtl
eSA9IGZ1bmN0aW9uKGtleSwgbWFwLCBoYW5kbGUsIGNvbnRleHQpIHsKKyAgICBtYXAgPSBnZXRL
ZXlNYXAobWFwKTsKKyAgICB2YXIgZm91bmQgPSBtYXAuY2FsbCA/IG1hcC5jYWxsKGtleSwgY29u
dGV4dCkgOiBtYXBba2V5XTsKKyAgICBpZiAoZm91bmQgPT09IGZhbHNlKSByZXR1cm4gIm5vdGhp
bmciOworICAgIGlmIChmb3VuZCA9PT0gIi4uLiIpIHJldHVybiAibXVsdGkiOworICAgIGlmIChm
b3VuZCAhPSBudWxsICYmIGhhbmRsZShmb3VuZCkpIHJldHVybiAiaGFuZGxlZCI7CisKKyAgICBp
ZiAobWFwLmZhbGx0aHJvdWdoKSB7CisgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmlu
Zy5jYWxsKG1hcC5mYWxsdGhyb3VnaCkgIT0gIltvYmplY3QgQXJyYXldIikKKyAgICAgICAgcmV0
dXJuIGxvb2t1cEtleShrZXksIG1hcC5mYWxsdGhyb3VnaCwgaGFuZGxlLCBjb250ZXh0KTsKKyAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwLmZhbGx0aHJvdWdoLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgIHZhciByZXN1bHQgPSBsb29rdXBLZXkoa2V5LCBtYXAuZmFsbHRocm91Z2hbaV0sIGhh
bmRsZSwgY29udGV4dCk7CisgICAgICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7CisgICAg
ICB9CiAgICAgfQogICB9OwogCiAgIC8vIE1vZGlmaWVyIGtleSBwcmVzc2VzIGRvbid0IGNvdW50
IGFzICdyZWFsJyBrZXkgcHJlc3NlcyBmb3IgdGhlCiAgIC8vIHB1cnBvc2Ugb2Yga2V5bWFwIGZh
bGx0aHJvdWdoLgotICB2YXIgaXNNb2RpZmllcktleSA9IENvZGVNaXJyb3IuaXNNb2RpZmllcktl
eSA9IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgdmFyIG5hbWUgPSBrZXlOYW1lc1tldmVudC5rZXlD
b2RlXTsKKyAgdmFyIGlzTW9kaWZpZXJLZXkgPSBDb2RlTWlycm9yLmlzTW9kaWZpZXJLZXkgPSBm
dW5jdGlvbih2YWx1ZSkgeworICAgIHZhciBuYW1lID0gdHlwZW9mIHZhbHVlID09ICJzdHJpbmci
ID8gdmFsdWUgOiBrZXlOYW1lc1t2YWx1ZS5rZXlDb2RlXTsKICAgICByZXR1cm4gbmFtZSA9PSAi
Q3RybCIgfHwgbmFtZSA9PSAiQWx0IiB8fCBuYW1lID09ICJTaGlmdCIgfHwgbmFtZSA9PSAiTW9k
IjsKICAgfTsKIAogICAvLyBMb29rIHVwIHRoZSBuYW1lIG9mIGEga2V5IGFzIGluZGljYXRlZCBi
eSBhbiBldmVudCBvYmplY3QuCiAgIHZhciBrZXlOYW1lID0gQ29kZU1pcnJvci5rZXlOYW1lID0g
ZnVuY3Rpb24oZXZlbnQsIG5vU2hpZnQpIHsKICAgICBpZiAocHJlc3RvICYmIGV2ZW50LmtleUNv
ZGUgPT0gMzQgJiYgZXZlbnRbImNoYXIiXSkgcmV0dXJuIGZhbHNlOwotICAgIHZhciBuYW1lID0g
a2V5TmFtZXNbZXZlbnQua2V5Q29kZV07CisgICAgdmFyIGJhc2UgPSBrZXlOYW1lc1tldmVudC5r
ZXlDb2RlXSwgbmFtZSA9IGJhc2U7CiAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBldmVudC5hbHRH
cmFwaEtleSkgcmV0dXJuIGZhbHNlOwotICAgIGlmIChldmVudC5hbHRLZXkpIG5hbWUgPSAiQWx0
LSIgKyBuYW1lOwotICAgIGlmIChmbGlwQ3RybENtZCA/IGV2ZW50Lm1ldGFLZXkgOiBldmVudC5j
dHJsS2V5KSBuYW1lID0gIkN0cmwtIiArIG5hbWU7Ci0gICAgaWYgKGZsaXBDdHJsQ21kID8gZXZl
bnQuY3RybEtleSA6IGV2ZW50Lm1ldGFLZXkpIG5hbWUgPSAiQ21kLSIgKyBuYW1lOwotICAgIGlm
ICghbm9TaGlmdCAmJiBldmVudC5zaGlmdEtleSkgbmFtZSA9ICJTaGlmdC0iICsgbmFtZTsKKyAg
ICBpZiAoZXZlbnQuYWx0S2V5ICYmIGJhc2UgIT0gIkFsdCIpIG5hbWUgPSAiQWx0LSIgKyBuYW1l
OworICAgIGlmICgoZmxpcEN0cmxDbWQgPyBldmVudC5tZXRhS2V5IDogZXZlbnQuY3RybEtleSkg
JiYgYmFzZSAhPSAiQ3RybCIpIG5hbWUgPSAiQ3RybC0iICsgbmFtZTsKKyAgICBpZiAoKGZsaXBD
dHJsQ21kID8gZXZlbnQuY3RybEtleSA6IGV2ZW50Lm1ldGFLZXkpICYmIGJhc2UgIT0gIkNtZCIp
IG5hbWUgPSAiQ21kLSIgKyBuYW1lOworICAgIGlmICghbm9TaGlmdCAmJiBldmVudC5zaGlmdEtl
eSAmJiBiYXNlICE9ICJTaGlmdCIpIG5hbWUgPSAiU2hpZnQtIiArIG5hbWU7CiAgICAgcmV0dXJu
IG5hbWU7CiAgIH07CiAKKyAgZnVuY3Rpb24gZ2V0S2V5TWFwKHZhbCkgeworICAgIHJldHVybiB0
eXBlb2YgdmFsID09ICJzdHJpbmciID8ga2V5TWFwW3ZhbF0gOiB2YWw7CisgIH0KKwogICAvLyBG
Uk9NVEVYVEFSRUEKIAogICBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSA9IGZ1bmN0aW9uKHRleHRh
cmVhLCBvcHRpb25zKSB7Ci0gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307CisgICAgb3B0
aW9ucyA9IG9wdGlvbnMgPyBjb3B5T2JqKG9wdGlvbnMpIDoge307CiAgICAgb3B0aW9ucy52YWx1
ZSA9IHRleHRhcmVhLnZhbHVlOwotICAgIGlmICghb3B0aW9ucy50YWJpbmRleCAmJiB0ZXh0YXJl
YS50YWJpbmRleCkKLSAgICAgIG9wdGlvbnMudGFiaW5kZXggPSB0ZXh0YXJlYS50YWJpbmRleDsK
KyAgICBpZiAoIW9wdGlvbnMudGFiaW5kZXggJiYgdGV4dGFyZWEudGFiSW5kZXgpCisgICAgICBv
cHRpb25zLnRhYmluZGV4ID0gdGV4dGFyZWEudGFiSW5kZXg7CiAgICAgaWYgKCFvcHRpb25zLnBs
YWNlaG9sZGVyICYmIHRleHRhcmVhLnBsYWNlaG9sZGVyKQogICAgICAgb3B0aW9ucy5wbGFjZWhv
bGRlciA9IHRleHRhcmVhLnBsYWNlaG9sZGVyOwogICAgIC8vIFNldCBhdXRvZm9jdXMgdG8gdHJ1
ZSBpZiB0aGlzIHRleHRhcmVhIGlzIGZvY3VzZWQsIG9yIGlmIGl0IGhhcwpAQCAtNDgwNSwyMiAr
NTg0MywyNiBAQAogICAgICAgfQogICAgIH0KIAorICAgIG9wdGlvbnMuZmluaXNoSW5pdCA9IGZ1
bmN0aW9uKGNtKSB7CisgICAgICBjbS5zYXZlID0gc2F2ZTsKKyAgICAgIGNtLmdldFRleHRBcmVh
ID0gZnVuY3Rpb24oKSB7IHJldHVybiB0ZXh0YXJlYTsgfTsKKyAgICAgIGNtLnRvVGV4dEFyZWEg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgY20udG9UZXh0QXJlYSA9IGlzTmFOOyAvLyBQcmV2ZW50
IHRoaXMgZnJvbSBiZWluZyByYW4gdHdpY2UKKyAgICAgICAgc2F2ZSgpOworICAgICAgICB0ZXh0
YXJlYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNtLmdldFdyYXBwZXJFbGVtZW50KCkpOworICAg
ICAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gIiI7CisgICAgICAgIGlmICh0ZXh0YXJlYS5m
b3JtKSB7CisgICAgICAgICAgb2ZmKHRleHRhcmVhLmZvcm0sICJzdWJtaXQiLCBzYXZlKTsKKyAg
ICAgICAgICBpZiAodHlwZW9mIHRleHRhcmVhLmZvcm0uc3VibWl0ID09ICJmdW5jdGlvbiIpCisg
ICAgICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQ7CisgICAgICAgIH0K
KyAgICAgIH07CisgICAgfTsKKwogICAgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7
CiAgICAgdmFyIGNtID0gQ29kZU1pcnJvcihmdW5jdGlvbihub2RlKSB7CiAgICAgICB0ZXh0YXJl
YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCB0ZXh0YXJlYS5uZXh0U2libGluZyk7CiAg
ICAgfSwgb3B0aW9ucyk7Ci0gICAgY20uc2F2ZSA9IHNhdmU7Ci0gICAgY20uZ2V0VGV4dEFyZWEg
PSBmdW5jdGlvbigpIHsgcmV0dXJuIHRleHRhcmVhOyB9OwotICAgIGNtLnRvVGV4dEFyZWEgPSBm
dW5jdGlvbigpIHsKLSAgICAgIHNhdmUoKTsKLSAgICAgIHRleHRhcmVhLnBhcmVudE5vZGUucmVt
b3ZlQ2hpbGQoY20uZ2V0V3JhcHBlckVsZW1lbnQoKSk7Ci0gICAgICB0ZXh0YXJlYS5zdHlsZS5k
aXNwbGF5ID0gIiI7Ci0gICAgICBpZiAodGV4dGFyZWEuZm9ybSkgewotICAgICAgICBvZmYodGV4
dGFyZWEuZm9ybSwgInN1Ym1pdCIsIHNhdmUpOwotICAgICAgICBpZiAodHlwZW9mIHRleHRhcmVh
LmZvcm0uc3VibWl0ID09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgdGV4dGFyZWEuZm9ybS5zdWJt
aXQgPSByZWFsU3VibWl0OwotICAgICAgfQotICAgIH07CiAgICAgcmV0dXJuIGNtOwogICB9Owog
CkBAIC00OTEzLDEwICs1OTU1LDEzIEBACiAgIC8vIG1hcmtlciBjb250aW51ZXMgYmV5b25kIHRo
ZSBzdGFydC9lbmQgb2YgdGhlIGxpbmUuIE1hcmtlcnMgaGF2ZQogICAvLyBsaW5rcyBiYWNrIHRv
IHRoZSBsaW5lcyB0aGV5IGN1cnJlbnRseSB0b3VjaC4KIAorICB2YXIgbmV4dE1hcmtlcklkID0g
MDsKKwogICB2YXIgVGV4dE1hcmtlciA9IENvZGVNaXJyb3IuVGV4dE1hcmtlciA9IGZ1bmN0aW9u
KGRvYywgdHlwZSkgewogICAgIHRoaXMubGluZXMgPSBbXTsKICAgICB0aGlzLnR5cGUgPSB0eXBl
OwogICAgIHRoaXMuZG9jID0gZG9jOworICAgIHRoaXMuaWQgPSArK25leHRNYXJrZXJJZDsKICAg
fTsKICAgZXZlbnRNaXhpbihUZXh0TWFya2VyKTsKIApAQCAtNTA0OCw3ICs2MDkzLDcgQEAKICAg
ICAgIC8vIFNob3dpbmcgdXAgYXMgYSB3aWRnZXQgaW1wbGllcyBjb2xsYXBzZWQgKHdpZGdldCBy
ZXBsYWNlcyB0ZXh0KQogICAgICAgbWFya2VyLmNvbGxhcHNlZCA9IHRydWU7CiAgICAgICBtYXJr
ZXIud2lkZ2V0Tm9kZSA9IGVsdCgic3BhbiIsIFttYXJrZXIucmVwbGFjZWRXaXRoXSwgIkNvZGVN
aXJyb3Itd2lkZ2V0Iik7Ci0gICAgICBpZiAoIW9wdGlvbnMuaGFuZGxlTW91c2VFdmVudHMpIG1h
cmtlci53aWRnZXROb2RlLmlnbm9yZUV2ZW50cyA9IHRydWU7CisgICAgICBpZiAoIW9wdGlvbnMu
aGFuZGxlTW91c2VFdmVudHMpIG1hcmtlci53aWRnZXROb2RlLnNldEF0dHJpYnV0ZSgiY20taWdu
b3JlLWV2ZW50cyIsICJ0cnVlIik7CiAgICAgICBpZiAob3B0aW9ucy5pbnNlcnRMZWZ0KSBtYXJr
ZXIud2lkZ2V0Tm9kZS5pbnNlcnRMZWZ0ID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG1hcmtlci5j
b2xsYXBzZWQpIHsKQEAgLTUwOTIsNyArNjEzNyw3IEBACiAgICAgICBpZiAodXBkYXRlTWF4TGlu
ZSkgY20uY3VyT3AudXBkYXRlTWF4TGluZSA9IHRydWU7CiAgICAgICBpZiAobWFya2VyLmNvbGxh
cHNlZCkKICAgICAgICAgcmVnQ2hhbmdlKGNtLCBmcm9tLmxpbmUsIHRvLmxpbmUgKyAxKTsKLSAg
ICAgIGVsc2UgaWYgKG1hcmtlci5jbGFzc05hbWUgfHwgbWFya2VyLnRpdGxlIHx8IG1hcmtlci5z
dGFydFN0eWxlIHx8IG1hcmtlci5lbmRTdHlsZSkKKyAgICAgIGVsc2UgaWYgKG1hcmtlci5jbGFz
c05hbWUgfHwgbWFya2VyLnRpdGxlIHx8IG1hcmtlci5zdGFydFN0eWxlIHx8IG1hcmtlci5lbmRT
dHlsZSB8fCBtYXJrZXIuY3NzKQogICAgICAgICBmb3IgKHZhciBpID0gZnJvbS5saW5lOyBpIDw9
IHRvLmxpbmU7IGkrKykgcmVnTGluZUNoYW5nZShjbSwgaSwgInRleHQiKTsKICAgICAgIGlmICht
YXJrZXIuYXRvbWljKSByZUNoZWNrU2VsZWN0aW9uKGNtLmRvYyk7CiAgICAgICBzaWduYWxMYXRl
cihjbSwgIm1hcmtlckFkZGVkIiwgY20sIG1hcmtlcik7CkBAIC01MjMyLDYgKzYyNzcsNyBAQAog
ICAvLyBzcGFucyBwYXJ0aWFsbHkgd2l0aGluIHRoZSBjaGFuZ2UuIFJldHVybnMgYW4gYXJyYXkg
b2Ygc3BhbgogICAvLyBhcnJheXMgd2l0aCBvbmUgZWxlbWVudCBmb3IgZWFjaCBsaW5lIGluIChh
ZnRlcikgdGhlIGNoYW5nZS4KICAgZnVuY3Rpb24gc3RyZXRjaFNwYW5zT3ZlckNoYW5nZShkb2Ms
IGNoYW5nZSkgeworICAgIGlmIChjaGFuZ2UuZnVsbCkgcmV0dXJuIG51bGw7CiAgICAgdmFyIG9s
ZEZpcnN0ID0gaXNMaW5lKGRvYywgY2hhbmdlLmZyb20ubGluZSkgJiYgZ2V0TGluZShkb2MsIGNo
YW5nZS5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zOwogICAgIHZhciBvbGRMYXN0ID0gaXNMaW5lKGRv
YywgY2hhbmdlLnRvLmxpbmUpICYmIGdldExpbmUoZG9jLCBjaGFuZ2UudG8ubGluZSkubWFya2Vk
U3BhbnM7CiAgICAgaWYgKCFvbGRGaXJzdCAmJiAhb2xkTGFzdCkgcmV0dXJuIG51bGw7CkBAIC01
NDE5LDggKzY0NjUsOCBAQAogICAgICAgdmFyIGZyb21DbXAgPSBjbXAoZm91bmQuZnJvbSwgZnJv
bSkgfHwgZXh0cmFMZWZ0KHNwLm1hcmtlcikgLSBleHRyYUxlZnQobWFya2VyKTsKICAgICAgIHZh
ciB0b0NtcCA9IGNtcChmb3VuZC50bywgdG8pIHx8IGV4dHJhUmlnaHQoc3AubWFya2VyKSAtIGV4
dHJhUmlnaHQobWFya2VyKTsKICAgICAgIGlmIChmcm9tQ21wID49IDAgJiYgdG9DbXAgPD0gMCB8
fCBmcm9tQ21wIDw9IDAgJiYgdG9DbXAgPj0gMCkgY29udGludWU7Ci0gICAgICBpZiAoZnJvbUNt
cCA8PSAwICYmIChjbXAoZm91bmQudG8sIGZyb20pIHx8IGV4dHJhUmlnaHQoc3AubWFya2VyKSAt
IGV4dHJhTGVmdChtYXJrZXIpKSA+IDAgfHwKLSAgICAgICAgICBmcm9tQ21wID49IDAgJiYgKGNt
cChmb3VuZC5mcm9tLCB0bykgfHwgZXh0cmFMZWZ0KHNwLm1hcmtlcikgLSBleHRyYVJpZ2h0KG1h
cmtlcikpIDwgMCkKKyAgICAgIGlmIChmcm9tQ21wIDw9IDAgJiYgKGNtcChmb3VuZC50bywgZnJv
bSkgPiAwIHx8IChzcC5tYXJrZXIuaW5jbHVzaXZlUmlnaHQgJiYgbWFya2VyLmluY2x1c2l2ZUxl
ZnQpKSB8fAorICAgICAgICAgIGZyb21DbXAgPj0gMCAmJiAoY21wKGZvdW5kLmZyb20sIHRvKSA8
IDAgfHwgKHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0ICYmIG1hcmtlci5pbmNsdXNpdmVSaWdodCkp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0KQEAgLTU0OTksMTAgKzY1NDUsMTAg
QEAKIAogICAvLyBMaW5lIHdpZGdldHMgYXJlIGJsb2NrIGVsZW1lbnRzIGRpc3BsYXllZCBhYm92
ZSBvciBiZWxvdyBhIGxpbmUuCiAKLSAgdmFyIExpbmVXaWRnZXQgPSBDb2RlTWlycm9yLkxpbmVX
aWRnZXQgPSBmdW5jdGlvbihjbSwgbm9kZSwgb3B0aW9ucykgeworICB2YXIgTGluZVdpZGdldCA9
IENvZGVNaXJyb3IuTGluZVdpZGdldCA9IGZ1bmN0aW9uKGRvYywgbm9kZSwgb3B0aW9ucykgewog
ICAgIGlmIChvcHRpb25zKSBmb3IgKHZhciBvcHQgaW4gb3B0aW9ucykgaWYgKG9wdGlvbnMuaGFz
T3duUHJvcGVydHkob3B0KSkKICAgICAgIHRoaXNbb3B0XSA9IG9wdGlvbnNbb3B0XTsKLSAgICB0
aGlzLmNtID0gY207CisgICAgdGhpcy5kb2MgPSBkb2M7CiAgICAgdGhpcy5ub2RlID0gbm9kZTsK
ICAgfTsKICAgZXZlbnRNaXhpbihMaW5lV2lkZ2V0KTsKQEAgLTU1MTMsNDYgKzY1NTksNTUgQEAK
ICAgfQogCiAgIExpbmVXaWRnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7Ci0gICAg
dmFyIGNtID0gdGhpcy5jbSwgd3MgPSB0aGlzLmxpbmUud2lkZ2V0cywgbGluZSA9IHRoaXMubGlu
ZSwgbm8gPSBsaW5lTm8obGluZSk7CisgICAgdmFyIGNtID0gdGhpcy5kb2MuY20sIHdzID0gdGhp
cy5saW5lLndpZGdldHMsIGxpbmUgPSB0aGlzLmxpbmUsIG5vID0gbGluZU5vKGxpbmUpOwogICAg
IGlmIChubyA9PSBudWxsIHx8ICF3cykgcmV0dXJuOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
d3MubGVuZ3RoOyArK2kpIGlmICh3c1tpXSA9PSB0aGlzKSB3cy5zcGxpY2UoaS0tLCAxKTsKICAg
ICBpZiAoIXdzLmxlbmd0aCkgbGluZS53aWRnZXRzID0gbnVsbDsKICAgICB2YXIgaGVpZ2h0ID0g
d2lkZ2V0SGVpZ2h0KHRoaXMpOwotICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgeworICAgIHVw
ZGF0ZUxpbmVIZWlnaHQobGluZSwgTWF0aC5tYXgoMCwgbGluZS5oZWlnaHQgLSBoZWlnaHQpKTsK
KyAgICBpZiAoY20pIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgewogICAgICAgYWRqdXN0U2Nyb2xs
V2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgLWhlaWdodCk7CiAgICAgICByZWdMaW5lQ2hhbmdl
KGNtLCBubywgIndpZGdldCIpOwotICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBNYXRoLm1h
eCgwLCBsaW5lLmhlaWdodCAtIGhlaWdodCkpOwogICAgIH0pOwogICB9OwogICBMaW5lV2lkZ2V0
LnByb3RvdHlwZS5jaGFuZ2VkID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG9sZEggPSB0aGlzLmhl
aWdodCwgY20gPSB0aGlzLmNtLCBsaW5lID0gdGhpcy5saW5lOworICAgIHZhciBvbGRIID0gdGhp
cy5oZWlnaHQsIGNtID0gdGhpcy5kb2MuY20sIGxpbmUgPSB0aGlzLmxpbmU7CiAgICAgdGhpcy5o
ZWlnaHQgPSBudWxsOwogICAgIHZhciBkaWZmID0gd2lkZ2V0SGVpZ2h0KHRoaXMpIC0gb2xkSDsK
ICAgICBpZiAoIWRpZmYpIHJldHVybjsKLSAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKKyAg
ICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgZGlmZik7CisgICAgaWYgKGNt
KSBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsKICAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0g
dHJ1ZTsKICAgICAgIGFkanVzdFNjcm9sbFdoZW5BYm92ZVZpc2libGUoY20sIGxpbmUsIGRpZmYp
OwotICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBsaW5lLmhlaWdodCArIGRpZmYpOwogICAg
IH0pOwogICB9OwogCiAgIGZ1bmN0aW9uIHdpZGdldEhlaWdodCh3aWRnZXQpIHsKICAgICBpZiAo
d2lkZ2V0LmhlaWdodCAhPSBudWxsKSByZXR1cm4gd2lkZ2V0LmhlaWdodDsKLSAgICBpZiAoIWNv
bnRhaW5zKGRvY3VtZW50LmJvZHksIHdpZGdldC5ub2RlKSkKLSAgICAgIHJlbW92ZUNoaWxkcmVu
QW5kQWRkKHdpZGdldC5jbS5kaXNwbGF5Lm1lYXN1cmUsIGVsdCgiZGl2IiwgW3dpZGdldC5ub2Rl
XSwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpKTsKKyAgICB2YXIgY20gPSB3aWRnZXQuZG9j
LmNtOworICAgIGlmICghY20pIHJldHVybiAwOworICAgIGlmICghY29udGFpbnMoZG9jdW1lbnQu
Ym9keSwgd2lkZ2V0Lm5vZGUpKSB7CisgICAgICB2YXIgcGFyZW50U3R5bGUgPSAicG9zaXRpb246
IHJlbGF0aXZlOyI7CisgICAgICBpZiAod2lkZ2V0LmNvdmVyR3V0dGVyKQorICAgICAgICBwYXJl
bnRTdHlsZSArPSAibWFyZ2luLWxlZnQ6IC0iICsgY20uZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdp
ZHRoICsgInB4OyI7CisgICAgICBpZiAod2lkZ2V0Lm5vSFNjcm9sbCkKKyAgICAgICAgcGFyZW50
U3R5bGUgKz0gIndpZHRoOiAiICsgY20uZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoICsgInB4
OyI7CisgICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5Lm1lYXN1cmUsIGVsdCgi
ZGl2IiwgW3dpZGdldC5ub2RlXSwgbnVsbCwgcGFyZW50U3R5bGUpKTsKKyAgICB9CiAgICAgcmV0
dXJuIHdpZGdldC5oZWlnaHQgPSB3aWRnZXQubm9kZS5vZmZzZXRIZWlnaHQ7CiAgIH0KIAotICBm
dW5jdGlvbiBhZGRMaW5lV2lkZ2V0KGNtLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHsKLSAgICB2
YXIgd2lkZ2V0ID0gbmV3IExpbmVXaWRnZXQoY20sIG5vZGUsIG9wdGlvbnMpOwotICAgIGlmICh3
aWRnZXQubm9IU2Nyb2xsKSBjbS5kaXNwbGF5LmFsaWduV2lkZ2V0cyA9IHRydWU7Ci0gICAgY2hh
bmdlTGluZShjbSwgaGFuZGxlLCAid2lkZ2V0IiwgZnVuY3Rpb24obGluZSkgeworICBmdW5jdGlv
biBhZGRMaW5lV2lkZ2V0KGRvYywgaGFuZGxlLCBub2RlLCBvcHRpb25zKSB7CisgICAgdmFyIHdp
ZGdldCA9IG5ldyBMaW5lV2lkZ2V0KGRvYywgbm9kZSwgb3B0aW9ucyk7CisgICAgdmFyIGNtID0g
ZG9jLmNtOworICAgIGlmIChjbSAmJiB3aWRnZXQubm9IU2Nyb2xsKSBjbS5kaXNwbGF5LmFsaWdu
V2lkZ2V0cyA9IHRydWU7CisgICAgY2hhbmdlTGluZShkb2MsIGhhbmRsZSwgIndpZGdldCIsIGZ1
bmN0aW9uKGxpbmUpIHsKICAgICAgIHZhciB3aWRnZXRzID0gbGluZS53aWRnZXRzIHx8IChsaW5l
LndpZGdldHMgPSBbXSk7CiAgICAgICBpZiAod2lkZ2V0Lmluc2VydEF0ID09IG51bGwpIHdpZGdl
dHMucHVzaCh3aWRnZXQpOwogICAgICAgZWxzZSB3aWRnZXRzLnNwbGljZShNYXRoLm1pbih3aWRn
ZXRzLmxlbmd0aCAtIDEsIE1hdGgubWF4KDAsIHdpZGdldC5pbnNlcnRBdCkpLCAwLCB3aWRnZXQp
OwogICAgICAgd2lkZ2V0LmxpbmUgPSBsaW5lOwotICAgICAgaWYgKCFsaW5lSXNIaWRkZW4oY20u
ZG9jLCBsaW5lKSkgewotICAgICAgICB2YXIgYWJvdmVWaXNpYmxlID0gaGVpZ2h0QXRMaW5lKGxp
bmUpIDwgY20uZG9jLnNjcm9sbFRvcDsKKyAgICAgIGlmIChjbSAmJiAhbGluZUlzSGlkZGVuKGRv
YywgbGluZSkpIHsKKyAgICAgICAgdmFyIGFib3ZlVmlzaWJsZSA9IGhlaWdodEF0TGluZShsaW5l
KSA8IGRvYy5zY3JvbGxUb3A7CiAgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5o
ZWlnaHQgKyB3aWRnZXRIZWlnaHQod2lkZ2V0KSk7CiAgICAgICAgIGlmIChhYm92ZVZpc2libGUp
IGFkZFRvU2Nyb2xsUG9zKGNtLCBudWxsLCB3aWRnZXQuaGVpZ2h0KTsKICAgICAgICAgY20uY3Vy
T3AuZm9yY2VVcGRhdGUgPSB0cnVlOwpAQCAtNTYxNSwyMCArNjY3MCw0NCBAQAogICAgIGlmIChp
bm5lci5tb2RlLmJsYW5rTGluZSkgcmV0dXJuIGlubmVyLm1vZGUuYmxhbmtMaW5lKGlubmVyLnN0
YXRlKTsKICAgfQogCi0gIGZ1bmN0aW9uIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlKSB7
CisgIGZ1bmN0aW9uIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlLCBpbm5lcikgewogICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgaWYgKGlubmVyKSBpbm5lclsw
XSA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKG1vZGUsIHN0YXRlKS5tb2RlOwogICAgICAgdmFyIHN0
eWxlID0gbW9kZS50b2tlbihzdHJlYW0sIHN0YXRlKTsKICAgICAgIGlmIChzdHJlYW0ucG9zID4g
c3RyZWFtLnN0YXJ0KSByZXR1cm4gc3R5bGU7CiAgICAgfQogICAgIHRocm93IG5ldyBFcnJvcigi
TW9kZSAiICsgbW9kZS5uYW1lICsgIiBmYWlsZWQgdG8gYWR2YW5jZSBzdHJlYW0uIik7CiAgIH0K
IAorICAvLyBVdGlsaXR5IGZvciBnZXRUb2tlbkF0IGFuZCBnZXRMaW5lVG9rZW5zCisgIGZ1bmN0
aW9uIHRha2VUb2tlbihjbSwgcG9zLCBwcmVjaXNlLCBhc0FycmF5KSB7CisgICAgZnVuY3Rpb24g
Z2V0T2JqKGNvcHkpIHsKKyAgICAgIHJldHVybiB7c3RhcnQ6IHN0cmVhbS5zdGFydCwgZW5kOiBz
dHJlYW0ucG9zLAorICAgICAgICAgICAgICBzdHJpbmc6IHN0cmVhbS5jdXJyZW50KCksCisgICAg
ICAgICAgICAgIHR5cGU6IHN0eWxlIHx8IG51bGwsCisgICAgICAgICAgICAgIHN0YXRlOiBjb3B5
ID8gY29weVN0YXRlKGRvYy5tb2RlLCBzdGF0ZSkgOiBzdGF0ZX07CisgICAgfQorCisgICAgdmFy
IGRvYyA9IGNtLmRvYywgbW9kZSA9IGRvYy5tb2RlLCBzdHlsZTsKKyAgICBwb3MgPSBjbGlwUG9z
KGRvYywgcG9zKTsKKyAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBwb3MubGluZSksIHN0YXRl
ID0gZ2V0U3RhdGVCZWZvcmUoY20sIHBvcy5saW5lLCBwcmVjaXNlKTsKKyAgICB2YXIgc3RyZWFt
ID0gbmV3IFN0cmluZ1N0cmVhbShsaW5lLnRleHQsIGNtLm9wdGlvbnMudGFiU2l6ZSksIHRva2Vu
czsKKyAgICBpZiAoYXNBcnJheSkgdG9rZW5zID0gW107CisgICAgd2hpbGUgKChhc0FycmF5IHx8
IHN0cmVhbS5wb3MgPCBwb3MuY2gpICYmICFzdHJlYW0uZW9sKCkpIHsKKyAgICAgIHN0cmVhbS5z
dGFydCA9IHN0cmVhbS5wb3M7CisgICAgICBzdHlsZSA9IHJlYWRUb2tlbihtb2RlLCBzdHJlYW0s
IHN0YXRlKTsKKyAgICAgIGlmIChhc0FycmF5KSB0b2tlbnMucHVzaChnZXRPYmoodHJ1ZSkpOwor
ICAgIH0KKyAgICByZXR1cm4gYXNBcnJheSA/IHRva2VucyA6IGdldE9iaigpOworICB9CisKICAg
Ly8gUnVuIHRoZSBnaXZlbiBtb2RlJ3MgcGFyc2VyIG92ZXIgYSBsaW5lLCBjYWxsaW5nIGYgZm9y
IGVhY2ggdG9rZW4uCiAgIGZ1bmN0aW9uIHJ1bk1vZGUoY20sIHRleHQsIG1vZGUsIHN0YXRlLCBm
LCBsaW5lQ2xhc3NlcywgZm9yY2VUb0VuZCkgewogICAgIHZhciBmbGF0dGVuU3BhbnMgPSBtb2Rl
LmZsYXR0ZW5TcGFuczsKICAgICBpZiAoZmxhdHRlblNwYW5zID09IG51bGwpIGZsYXR0ZW5TcGFu
cyA9IGNtLm9wdGlvbnMuZmxhdHRlblNwYW5zOwogICAgIHZhciBjdXJTdGFydCA9IDAsIGN1clN0
eWxlID0gbnVsbDsKICAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5v
cHRpb25zLnRhYlNpemUpLCBzdHlsZTsKKyAgICB2YXIgaW5uZXIgPSBjbS5vcHRpb25zLmFkZE1v
ZGVDbGFzcyAmJiBbbnVsbF07CiAgICAgaWYgKHRleHQgPT0gIiIpIGV4dHJhY3RMaW5lQ2xhc3Nl
cyhjYWxsQmxhbmtMaW5lKG1vZGUsIHN0YXRlKSwgbGluZUNsYXNzZXMpOwogICAgIHdoaWxlICgh
c3RyZWFtLmVvbCgpKSB7CiAgICAgICBpZiAoc3RyZWFtLnBvcyA+IGNtLm9wdGlvbnMubWF4SGln
aGxpZ2h0TGVuZ3RoKSB7CkBAIC01NjM3LDE1ICs2NzE2LDE4IEBACiAgICAgICAgIHN0cmVhbS5w
b3MgPSB0ZXh0Lmxlbmd0aDsKICAgICAgICAgc3R5bGUgPSBudWxsOwogICAgICAgfSBlbHNlIHsK
LSAgICAgICAgc3R5bGUgPSBleHRyYWN0TGluZUNsYXNzZXMocmVhZFRva2VuKG1vZGUsIHN0cmVh
bSwgc3RhdGUpLCBsaW5lQ2xhc3Nlcyk7CisgICAgICAgIHN0eWxlID0gZXh0cmFjdExpbmVDbGFz
c2VzKHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlLCBpbm5lciksIGxpbmVDbGFzc2VzKTsK
ICAgICAgIH0KLSAgICAgIGlmIChjbS5vcHRpb25zLmFkZE1vZGVDbGFzcykgewotICAgICAgICB2
YXIgbU5hbWUgPSBDb2RlTWlycm9yLmlubmVyTW9kZShtb2RlLCBzdGF0ZSkubW9kZS5uYW1lOwor
ICAgICAgaWYgKGlubmVyKSB7CisgICAgICAgIHZhciBtTmFtZSA9IGlubmVyWzBdLm5hbWU7CiAg
ICAgICAgIGlmIChtTmFtZSkgc3R5bGUgPSAibS0iICsgKHN0eWxlID8gbU5hbWUgKyAiICIgKyBz
dHlsZSA6IG1OYW1lKTsKICAgICAgIH0KICAgICAgIGlmICghZmxhdHRlblNwYW5zIHx8IGN1clN0
eWxlICE9IHN0eWxlKSB7Ci0gICAgICAgIGlmIChjdXJTdGFydCA8IHN0cmVhbS5zdGFydCkgZihz
dHJlYW0uc3RhcnQsIGN1clN0eWxlKTsKLSAgICAgICAgY3VyU3RhcnQgPSBzdHJlYW0uc3RhcnQ7
IGN1clN0eWxlID0gc3R5bGU7CisgICAgICAgIHdoaWxlIChjdXJTdGFydCA8IHN0cmVhbS5zdGFy
dCkgeworICAgICAgICAgIGN1clN0YXJ0ID0gTWF0aC5taW4oc3RyZWFtLnN0YXJ0LCBjdXJTdGFy
dCArIDUwMDAwKTsKKyAgICAgICAgICBmKGN1clN0YXJ0LCBjdXJTdHlsZSk7CisgICAgICAgIH0K
KyAgICAgICAgY3VyU3R5bGUgPSBzdHlsZTsKICAgICAgIH0KICAgICAgIHN0cmVhbS5zdGFydCA9
IHN0cmVhbS5wb3M7CiAgICAgfQpAQCAtNTY5OSwxMiArNjc4MSwxMyBAQAogICAgIHJldHVybiB7
c3R5bGVzOiBzdCwgY2xhc3NlczogbGluZUNsYXNzZXMuYmdDbGFzcyB8fCBsaW5lQ2xhc3Nlcy50
ZXh0Q2xhc3MgPyBsaW5lQ2xhc3NlcyA6IG51bGx9OwogICB9CiAKLSAgZnVuY3Rpb24gZ2V0TGlu
ZVN0eWxlcyhjbSwgbGluZSkgeworICBmdW5jdGlvbiBnZXRMaW5lU3R5bGVzKGNtLCBsaW5lLCB1
cGRhdGVGcm9udGllcikgewogICAgIGlmICghbGluZS5zdHlsZXMgfHwgbGluZS5zdHlsZXNbMF0g
IT0gY20uc3RhdGUubW9kZUdlbikgewogICAgICAgdmFyIHJlc3VsdCA9IGhpZ2hsaWdodExpbmUo
Y20sIGxpbmUsIGxpbmUuc3RhdGVBZnRlciA9IGdldFN0YXRlQmVmb3JlKGNtLCBsaW5lTm8obGlu
ZSkpKTsKICAgICAgIGxpbmUuc3R5bGVzID0gcmVzdWx0LnN0eWxlczsKICAgICAgIGlmIChyZXN1
bHQuY2xhc3NlcykgbGluZS5zdHlsZUNsYXNzZXMgPSByZXN1bHQuY2xhc3NlczsKICAgICAgIGVs
c2UgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSBsaW5lLnN0eWxlQ2xhc3NlcyA9IG51bGw7CisgICAg
ICBpZiAodXBkYXRlRnJvbnRpZXIgPT09IGNtLmRvYy5mcm9udGllcikgY20uZG9jLmZyb250aWVy
Kys7CiAgICAgfQogICAgIHJldHVybiBsaW5lLnN0eWxlczsKICAgfQpAQCAtNTc0NCw3ICs2ODI3
LDkgQEAKICAgICAvLyBpcyBuZWVkZWQgb24gV2Via2l0IHRvIGJlIGFibGUgdG8gZ2V0IGxpbmUt
bGV2ZWwgYm91bmRpbmcKICAgICAvLyByZWN0YW5nbGVzIGZvciBpdCAoaW4gbWVhc3VyZUNoYXIp
LgogICAgIHZhciBjb250ZW50ID0gZWx0KCJzcGFuIiwgbnVsbCwgbnVsbCwgd2Via2l0ID8gInBh
ZGRpbmctcmlnaHQ6IC4xcHgiIDogbnVsbCk7Ci0gICAgdmFyIGJ1aWxkZXIgPSB7cHJlOiBlbHQo
InByZSIsIFtjb250ZW50XSksIGNvbnRlbnQ6IGNvbnRlbnQsIGNvbDogMCwgcG9zOiAwLCBjbTog
Y219OworICAgIHZhciBidWlsZGVyID0ge3ByZTogZWx0KCJwcmUiLCBbY29udGVudF0sICJDb2Rl
TWlycm9yLWxpbmUiKSwgY29udGVudDogY29udGVudCwKKyAgICAgICAgICAgICAgICAgICBjb2w6
IDAsIHBvczogMCwgY206IGNtLAorICAgICAgICAgICAgICAgICAgIHNwbGl0U3BhY2VzOiAoaWUg
fHwgd2Via2l0KSAmJiBjbS5nZXRPcHRpb24oImxpbmVXcmFwcGluZyIpfTsKICAgICBsaW5lVmll
dy5tZWFzdXJlID0ge307CiAKICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGxvZ2ljYWwgbGluZXMg
dGhhdCBtYWtlIHVwIHRoaXMgdmlzdWFsIGxpbmUuCkBAIC01NzU0LDEyICs2ODM5LDExIEBACiAg
ICAgICBidWlsZGVyLmFkZFRva2VuID0gYnVpbGRUb2tlbjsKICAgICAgIC8vIE9wdGlvbmFsbHkg
d2lyZSBpbiBzb21lIGhhY2tzIGludG8gdGhlIHRva2VuLXJlbmRlcmluZwogICAgICAgLy8gYWxn
b3JpdGhtLCB0byBkZWFsIHdpdGggYnJvd3NlciBxdWlya3MuCi0gICAgICBpZiAoKGllIHx8IHdl
YmtpdCkgJiYgY20uZ2V0T3B0aW9uKCJsaW5lV3JhcHBpbmciKSkKLSAgICAgICAgYnVpbGRlci5h
ZGRUb2tlbiA9IGJ1aWxkVG9rZW5TcGxpdFNwYWNlcyhidWlsZGVyLmFkZFRva2VuKTsKICAgICAg
IGlmIChoYXNCYWRCaWRpUmVjdHMoY20uZGlzcGxheS5tZWFzdXJlKSAmJiAob3JkZXIgPSBnZXRP
cmRlcihsaW5lKSkpCiAgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWlsZFRva2VuQmFkQmlk
aShidWlsZGVyLmFkZFRva2VuLCBvcmRlcik7CiAgICAgICBidWlsZGVyLm1hcCA9IFtdOwotICAg
ICAgaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwgZ2V0TGluZVN0eWxlcyhjbSwgbGlu
ZSkpOworICAgICAgdmFyIGFsbG93RnJvbnRpZXJVcGRhdGUgPSBsaW5lVmlldyAhPSBjbS5kaXNw
bGF5LmV4dGVybmFsTWVhc3VyZWQgJiYgbGluZU5vKGxpbmUpOworICAgICAgaW5zZXJ0TGluZUNv
bnRlbnQobGluZSwgYnVpbGRlciwgZ2V0TGluZVN0eWxlcyhjbSwgbGluZSwgYWxsb3dGcm9udGll
clVwZGF0ZSkpOwogICAgICAgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSB7CiAgICAgICAgIGlmIChs
aW5lLnN0eWxlQ2xhc3Nlcy5iZ0NsYXNzKQogICAgICAgICAgIGJ1aWxkZXIuYmdDbGFzcyA9IGpv
aW5DbGFzc2VzKGxpbmUuc3R5bGVDbGFzc2VzLmJnQ2xhc3MsIGJ1aWxkZXIuYmdDbGFzcyB8fCAi
Iik7CkBAIC01NzgxLDI4ICs2ODY1LDM1IEBACiAgICAgICB9CiAgICAgfQogCisgICAgLy8gU2Vl
IGlzc3VlICMyOTAxCisgICAgaWYgKHdlYmtpdCAmJiAvXGJjbS10YWJcYi8udGVzdChidWlsZGVy
LmNvbnRlbnQubGFzdENoaWxkLmNsYXNzTmFtZSkpCisgICAgICBidWlsZGVyLmNvbnRlbnQuY2xh
c3NOYW1lID0gImNtLXRhYi13cmFwLWhhY2siOworCiAgICAgc2lnbmFsKGNtLCAicmVuZGVyTGlu
ZSIsIGNtLCBsaW5lVmlldy5saW5lLCBidWlsZGVyLnByZSk7CiAgICAgaWYgKGJ1aWxkZXIucHJl
LmNsYXNzTmFtZSkKICAgICAgIGJ1aWxkZXIudGV4dENsYXNzID0gam9pbkNsYXNzZXMoYnVpbGRl
ci5wcmUuY2xhc3NOYW1lLCBidWlsZGVyLnRleHRDbGFzcyB8fCAiIik7CisKICAgICByZXR1cm4g
YnVpbGRlcjsKICAgfQogCiAgIGZ1bmN0aW9uIGRlZmF1bHRTcGVjaWFsQ2hhclBsYWNlaG9sZGVy
KGNoKSB7CiAgICAgdmFyIHRva2VuID0gZWx0KCJzcGFuIiwgIlx1MjAyMiIsICJjbS1pbnZhbGlk
Y2hhciIpOwogICAgIHRva2VuLnRpdGxlID0gIlxcdSIgKyBjaC5jaGFyQ29kZUF0KDApLnRvU3Ry
aW5nKDE2KTsKKyAgICB0b2tlbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCB0b2tlbi50aXRs
ZSk7CiAgICAgcmV0dXJuIHRva2VuOwogICB9CiAKICAgLy8gQnVpbGQgdXAgdGhlIERPTSByZXBy
ZXNlbnRhdGlvbiBmb3IgYSBzaW5nbGUgdG9rZW4sIGFuZCBhZGQgaXQgdG8KICAgLy8gdGhlIGxp
bmUgbWFwLiBUYWtlcyBjYXJlIHRvIHJlbmRlciBzcGVjaWFsIGNoYXJhY3RlcnMgc2VwYXJhdGVs
eS4KLSAgZnVuY3Rpb24gYnVpbGRUb2tlbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHls
ZSwgZW5kU3R5bGUsIHRpdGxlKSB7CisgIGZ1bmN0aW9uIGJ1aWxkVG9rZW4oYnVpbGRlciwgdGV4
dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSwgY3NzKSB7CiAgICAgaWYgKCF0
ZXh0KSByZXR1cm47Ci0gICAgdmFyIHNwZWNpYWwgPSBidWlsZGVyLmNtLm9wdGlvbnMuc3BlY2lh
bENoYXJzLCBtdXN0V3JhcCA9IGZhbHNlOworICAgIHZhciBkaXNwbGF5VGV4dCA9IGJ1aWxkZXIu
c3BsaXRTcGFjZXMgPyB0ZXh0LnJlcGxhY2UoLyB7Myx9L2csIHNwbGl0U3BhY2VzKSA6IHRleHQ7
CisgICAgdmFyIHNwZWNpYWwgPSBidWlsZGVyLmNtLnN0YXRlLnNwZWNpYWxDaGFycywgbXVzdFdy
YXAgPSBmYWxzZTsKICAgICBpZiAoIXNwZWNpYWwudGVzdCh0ZXh0KSkgewogICAgICAgYnVpbGRl
ci5jb2wgKz0gdGV4dC5sZW5ndGg7Ci0gICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKHRleHQpOworICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShkaXNwbGF5VGV4dCk7CiAgICAgICBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBi
dWlsZGVyLnBvcyArIHRleHQubGVuZ3RoLCBjb250ZW50KTsKLSAgICAgIGlmIChpZV91cHRvOCkg
bXVzdFdyYXAgPSB0cnVlOworICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSBtdXN0V3Jh
cCA9IHRydWU7CiAgICAgICBidWlsZGVyLnBvcyArPSB0ZXh0Lmxlbmd0aDsKICAgICB9IGVsc2Ug
ewogICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCks
IHBvcyA9IDA7CkBAIC01ODExLDggKzY5MDIsOCBAQAogICAgICAgICB2YXIgbSA9IHNwZWNpYWwu
ZXhlYyh0ZXh0KTsKICAgICAgICAgdmFyIHNraXBwZWQgPSBtID8gbS5pbmRleCAtIHBvcyA6IHRl
eHQubGVuZ3RoIC0gcG9zOwogICAgICAgICBpZiAoc2tpcHBlZCkgewotICAgICAgICAgIHZhciB0
eHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0LnNsaWNlKHBvcywgcG9zICsgc2tpcHBl
ZCkpOwotICAgICAgICAgIGlmIChpZV91cHRvOCkgY29udGVudC5hcHBlbmRDaGlsZChlbHQoInNw
YW4iLCBbdHh0XSkpOworICAgICAgICAgIHZhciB0eHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZShkaXNwbGF5VGV4dC5zbGljZShwb3MsIHBvcyArIHNraXBwZWQpKTsKKyAgICAgICAgICBpZiAo
aWUgJiYgaWVfdmVyc2lvbiA8IDkpIGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgW3R4
dF0pKTsKICAgICAgICAgICBlbHNlIGNvbnRlbnQuYXBwZW5kQ2hpbGQodHh0KTsKICAgICAgICAg
ICBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyArIHNraXBwZWQsIHR4
dCk7CiAgICAgICAgICAgYnVpbGRlci5jb2wgKz0gc2tpcHBlZDsKQEAgLTU4MjMsMTAgKzY5MTQs
MTcgQEAKICAgICAgICAgaWYgKG1bMF0gPT0gIlx0IikgewogICAgICAgICAgIHZhciB0YWJTaXpl
ID0gYnVpbGRlci5jbS5vcHRpb25zLnRhYlNpemUsIHRhYldpZHRoID0gdGFiU2l6ZSAtIGJ1aWxk
ZXIuY29sICUgdGFiU2l6ZTsKICAgICAgICAgICB2YXIgdHh0ID0gY29udGVudC5hcHBlbmRDaGls
ZChlbHQoInNwYW4iLCBzcGFjZVN0cih0YWJXaWR0aCksICJjbS10YWIiKSk7CisgICAgICAgICAg
dHh0LnNldEF0dHJpYnV0ZSgicm9sZSIsICJwcmVzZW50YXRpb24iKTsKKyAgICAgICAgICB0eHQu
c2V0QXR0cmlidXRlKCJjbS10ZXh0IiwgIlx0Iik7CiAgICAgICAgICAgYnVpbGRlci5jb2wgKz0g
dGFiV2lkdGg7CisgICAgICAgIH0gZWxzZSBpZiAobVswXSA9PSAiXHIiIHx8IG1bMF0gPT0gIlxu
IikgeworICAgICAgICAgIHZhciB0eHQgPSBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIs
IG1bMF0gPT0gIlxyIiA/ICLikI0iIDogIuKQpCIsICJjbS1pbnZhbGlkY2hhciIpKTsKKyAgICAg
ICAgICB0eHQuc2V0QXR0cmlidXRlKCJjbS10ZXh0IiwgbVswXSk7CisgICAgICAgICAgYnVpbGRl
ci5jb2wgKz0gMTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICB2YXIgdHh0ID0gYnVpbGRl
ci5jbS5vcHRpb25zLnNwZWNpYWxDaGFyUGxhY2Vob2xkZXIobVswXSk7Ci0gICAgICAgICAgaWYg
KGllX3VwdG84KSBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIFt0eHRdKSk7CisgICAg
ICAgICAgdHh0LnNldEF0dHJpYnV0ZSgiY20tdGV4dCIsIG1bMF0pOworICAgICAgICAgIGlmIChp
ZSAmJiBpZV92ZXJzaW9uIDwgOSkgY29udGVudC5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBbdHh0
XSkpOwogICAgICAgICAgIGVsc2UgY29udGVudC5hcHBlbmRDaGlsZCh0eHQpOwogICAgICAgICAg
IGJ1aWxkZXIuY29sICs9IDE7CiAgICAgICAgIH0KQEAgLTU4MzQsMzMgKzY5MzIsMjggQEAKICAg
ICAgICAgYnVpbGRlci5wb3MrKzsKICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHN0eWxlIHx8IHN0
YXJ0U3R5bGUgfHwgZW5kU3R5bGUgfHwgbXVzdFdyYXApIHsKKyAgICBpZiAoc3R5bGUgfHwgc3Rh
cnRTdHlsZSB8fCBlbmRTdHlsZSB8fCBtdXN0V3JhcCB8fCBjc3MpIHsKICAgICAgIHZhciBmdWxs
U3R5bGUgPSBzdHlsZSB8fCAiIjsKICAgICAgIGlmIChzdGFydFN0eWxlKSBmdWxsU3R5bGUgKz0g
c3RhcnRTdHlsZTsKICAgICAgIGlmIChlbmRTdHlsZSkgZnVsbFN0eWxlICs9IGVuZFN0eWxlOwot
ICAgICAgdmFyIHRva2VuID0gZWx0KCJzcGFuIiwgW2NvbnRlbnRdLCBmdWxsU3R5bGUpOworICAg
ICAgdmFyIHRva2VuID0gZWx0KCJzcGFuIiwgW2NvbnRlbnRdLCBmdWxsU3R5bGUsIGNzcyk7CiAg
ICAgICBpZiAodGl0bGUpIHRva2VuLnRpdGxlID0gdGl0bGU7CiAgICAgICByZXR1cm4gYnVpbGRl
ci5jb250ZW50LmFwcGVuZENoaWxkKHRva2VuKTsKICAgICB9CiAgICAgYnVpbGRlci5jb250ZW50
LmFwcGVuZENoaWxkKGNvbnRlbnQpOwogICB9CiAKLSAgZnVuY3Rpb24gYnVpbGRUb2tlblNwbGl0
U3BhY2VzKGlubmVyKSB7Ci0gICAgZnVuY3Rpb24gc3BsaXQob2xkKSB7Ci0gICAgICB2YXIgb3V0
ID0gIiAiOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoIC0gMjsgKytpKSBv
dXQgKz0gaSAlIDIgPyAiICIgOiAiXHUwMGEwIjsKLSAgICAgIG91dCArPSAiICI7Ci0gICAgICBy
ZXR1cm4gb3V0OwotICAgIH0KLSAgICByZXR1cm4gZnVuY3Rpb24oYnVpbGRlciwgdGV4dCwgc3R5
bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSkgewotICAgICAgaW5uZXIoYnVpbGRlciwg
dGV4dC5yZXBsYWNlKC8gezMsfS9nLCBzcGxpdCksIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHls
ZSwgdGl0bGUpOwotICAgIH07CisgIGZ1bmN0aW9uIHNwbGl0U3BhY2VzKG9sZCkgeworICAgIHZh
ciBvdXQgPSAiICI7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoIC0gMjsgKytp
KSBvdXQgKz0gaSAlIDIgPyAiICIgOiAiXHUwMGEwIjsKKyAgICBvdXQgKz0gIiAiOworICAgIHJl
dHVybiBvdXQ7CiAgIH0KIAogICAvLyBXb3JrIGFyb3VuZCBub25zZW5zZSBkaW1lbnNpb25zIGJl
aW5nIHJlcG9ydGVkIGZvciBzdHJldGNoZXMgb2YKICAgLy8gcmlnaHQtdG8tbGVmdCB0ZXh0Lgog
ICBmdW5jdGlvbiBidWlsZFRva2VuQmFkQmlkaShpbm5lciwgb3JkZXIpIHsKLSAgICByZXR1cm4g
ZnVuY3Rpb24oYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRs
ZSkgeworICAgIHJldHVybiBmdW5jdGlvbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHls
ZSwgZW5kU3R5bGUsIHRpdGxlLCBjc3MpIHsKICAgICAgIHN0eWxlID0gc3R5bGUgPyBzdHlsZSAr
ICIgY20tZm9yY2UtYm9yZGVyIiA6ICJjbS1mb3JjZS1ib3JkZXIiOwogICAgICAgdmFyIHN0YXJ0
ID0gYnVpbGRlci5wb3MsIGVuZCA9IHN0YXJ0ICsgdGV4dC5sZW5ndGg7CiAgICAgICBmb3IgKDs7
KSB7CkBAIC01ODY5LDggKzY5NjIsOCBAQAogICAgICAgICAgIHZhciBwYXJ0ID0gb3JkZXJbaV07
CiAgICAgICAgICAgaWYgKHBhcnQudG8gPiBzdGFydCAmJiBwYXJ0LmZyb20gPD0gc3RhcnQpIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChwYXJ0LnRvID49IGVuZCkgcmV0dXJuIGlubmVy
KGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUpOwotICAg
ICAgICBpbm5lcihidWlsZGVyLCB0ZXh0LnNsaWNlKDAsIHBhcnQudG8gLSBzdGFydCksIHN0eWxl
LCBzdGFydFN0eWxlLCBudWxsLCB0aXRsZSk7CisgICAgICAgIGlmIChwYXJ0LnRvID49IGVuZCkg
cmV0dXJuIGlubmVyKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwg
dGl0bGUsIGNzcyk7CisgICAgICAgIGlubmVyKGJ1aWxkZXIsIHRleHQuc2xpY2UoMCwgcGFydC50
byAtIHN0YXJ0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIG51bGwsIHRpdGxlLCBjc3MpOwogICAgICAg
ICBzdGFydFN0eWxlID0gbnVsbDsKICAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UocGFydC50byAt
IHN0YXJ0KTsKICAgICAgICAgc3RhcnQgPSBwYXJ0LnRvOwpAQCAtNTg4MCw4ICs2OTczLDE0IEBA
CiAKICAgZnVuY3Rpb24gYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIHNpemUsIG1hcmtlciwg
aWdub3JlV2lkZ2V0KSB7CiAgICAgdmFyIHdpZGdldCA9ICFpZ25vcmVXaWRnZXQgJiYgbWFya2Vy
LndpZGdldE5vZGU7CisgICAgaWYgKHdpZGdldCkgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBv
cywgYnVpbGRlci5wb3MgKyBzaXplLCB3aWRnZXQpOworICAgIGlmICghaWdub3JlV2lkZ2V0ICYm
IGJ1aWxkZXIuY20uZGlzcGxheS5pbnB1dC5uZWVkc0NvbnRlbnRBdHRyaWJ1dGUpIHsKKyAgICAg
IGlmICghd2lkZ2V0KQorICAgICAgICB3aWRnZXQgPSBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpKTsKKyAgICAgIHdpZGdldC5zZXRBdHRy
aWJ1dGUoImNtLW1hcmtlciIsIG1hcmtlci5pZCk7CisgICAgfQogICAgIGlmICh3aWRnZXQpIHsK
LSAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgc2l6ZSwg
d2lkZ2V0KTsKKyAgICAgIGJ1aWxkZXIuY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKHdp
ZGdldCk7CiAgICAgICBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQod2lkZ2V0KTsKICAgICB9
CiAgICAgYnVpbGRlci5wb3MgKz0gc2l6ZTsKQEAgLTU4OTcsMTggKzY5OTYsMjQgQEAKICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICB2YXIgbGVuID0gYWxsVGV4dC5sZW5ndGgsIHBvcyA9IDAs
IGkgPSAxLCB0ZXh0ID0gIiIsIHN0eWxlOworICAgIHZhciBsZW4gPSBhbGxUZXh0Lmxlbmd0aCwg
cG9zID0gMCwgaSA9IDEsIHRleHQgPSAiIiwgc3R5bGUsIGNzczsKICAgICB2YXIgbmV4dENoYW5n
ZSA9IDAsIHNwYW5TdHlsZSwgc3BhbkVuZFN0eWxlLCBzcGFuU3RhcnRTdHlsZSwgdGl0bGUsIGNv
bGxhcHNlZDsKICAgICBmb3IgKDs7KSB7CiAgICAgICBpZiAobmV4dENoYW5nZSA9PSBwb3MpIHsg
Ly8gVXBkYXRlIGN1cnJlbnQgbWFya2VyIHNldAotICAgICAgICBzcGFuU3R5bGUgPSBzcGFuRW5k
U3R5bGUgPSBzcGFuU3RhcnRTdHlsZSA9IHRpdGxlID0gIiI7CisgICAgICAgIHNwYW5TdHlsZSA9
IHNwYW5FbmRTdHlsZSA9IHNwYW5TdGFydFN0eWxlID0gdGl0bGUgPSBjc3MgPSAiIjsKICAgICAg
ICAgY29sbGFwc2VkID0gbnVsbDsgbmV4dENoYW5nZSA9IEluZmluaXR5OwogICAgICAgICB2YXIg
Zm91bmRCb29rbWFya3MgPSBbXTsKICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzcGFucy5s
ZW5ndGg7ICsraikgewogICAgICAgICAgIHZhciBzcCA9IHNwYW5zW2pdLCBtID0gc3AubWFya2Vy
OwotICAgICAgICAgIGlmIChzcC5mcm9tIDw9IHBvcyAmJiAoc3AudG8gPT0gbnVsbCB8fCBzcC50
byA+IHBvcykpIHsKLSAgICAgICAgICAgIGlmIChzcC50byAhPSBudWxsICYmIG5leHRDaGFuZ2Ug
PiBzcC50bykgeyBuZXh0Q2hhbmdlID0gc3AudG87IHNwYW5FbmRTdHlsZSA9ICIiOyB9CisgICAg
ICAgICAgaWYgKG0udHlwZSA9PSAiYm9va21hcmsiICYmIHNwLmZyb20gPT0gcG9zICYmIG0ud2lk
Z2V0Tm9kZSkgeworICAgICAgICAgICAgZm91bmRCb29rbWFya3MucHVzaChtKTsKKyAgICAgICAg
ICB9IGVsc2UgaWYgKHNwLmZyb20gPD0gcG9zICYmIChzcC50byA9PSBudWxsIHx8IHNwLnRvID4g
cG9zIHx8IG0uY29sbGFwc2VkICYmIHNwLnRvID09IHBvcyAmJiBzcC5mcm9tID09IHBvcykpIHsK
KyAgICAgICAgICAgIGlmIChzcC50byAhPSBudWxsICYmIHNwLnRvICE9IHBvcyAmJiBuZXh0Q2hh
bmdlID4gc3AudG8pIHsKKyAgICAgICAgICAgICAgbmV4dENoYW5nZSA9IHNwLnRvOworICAgICAg
ICAgICAgICBzcGFuRW5kU3R5bGUgPSAiIjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChtLmNsYXNzTmFtZSkgc3BhblN0eWxlICs9ICIgIiArIG0uY2xhc3NOYW1lOworICAgICAgICAg
ICAgaWYgKG0uY3NzKSBjc3MgPSBtLmNzczsKICAgICAgICAgICAgIGlmIChtLnN0YXJ0U3R5bGUg
JiYgc3AuZnJvbSA9PSBwb3MpIHNwYW5TdGFydFN0eWxlICs9ICIgIiArIG0uc3RhcnRTdHlsZTsK
ICAgICAgICAgICAgIGlmIChtLmVuZFN0eWxlICYmIHNwLnRvID09IG5leHRDaGFuZ2UpIHNwYW5F
bmRTdHlsZSArPSAiICIgKyBtLmVuZFN0eWxlOwogICAgICAgICAgICAgaWYgKG0udGl0bGUgJiYg
IXRpdGxlKSB0aXRsZSA9IG0udGl0bGU7CkBAIC01OTE3LDEyICs3MDIyLDEyIEBACiAgICAgICAg
ICAgfSBlbHNlIGlmIChzcC5mcm9tID4gcG9zICYmIG5leHRDaGFuZ2UgPiBzcC5mcm9tKSB7CiAg
ICAgICAgICAgICBuZXh0Q2hhbmdlID0gc3AuZnJvbTsKICAgICAgICAgICB9Ci0gICAgICAgICAg
aWYgKG0udHlwZSA9PSAiYm9va21hcmsiICYmIHNwLmZyb20gPT0gcG9zICYmIG0ud2lkZ2V0Tm9k
ZSkgZm91bmRCb29rbWFya3MucHVzaChtKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY29sbGFw
c2VkICYmIChjb2xsYXBzZWQuZnJvbSB8fCAwKSA9PSBwb3MpIHsKICAgICAgICAgICBidWlsZENv
bGxhcHNlZFNwYW4oYnVpbGRlciwgKGNvbGxhcHNlZC50byA9PSBudWxsID8gbGVuICsgMSA6IGNv
bGxhcHNlZC50bykgLSBwb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNl
ZC5tYXJrZXIsIGNvbGxhcHNlZC5mcm9tID09IG51bGwpOwogICAgICAgICAgIGlmIChjb2xsYXBz
ZWQudG8gPT0gbnVsbCkgcmV0dXJuOworICAgICAgICAgIGlmIChjb2xsYXBzZWQudG8gPT0gcG9z
KSBjb2xsYXBzZWQgPSBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWNvbGxhcHNlZCAm
JiBmb3VuZEJvb2ttYXJrcy5sZW5ndGgpIGZvciAodmFyIGogPSAwOyBqIDwgZm91bmRCb29rbWFy
a3MubGVuZ3RoOyArK2opCiAgICAgICAgICAgYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIDAs
IGZvdW5kQm9va21hcmtzW2pdKTsKQEAgLTU5MzYsNyArNzA0MSw3IEBACiAgICAgICAgICAgaWYg
KCFjb2xsYXBzZWQpIHsKICAgICAgICAgICAgIHZhciB0b2tlblRleHQgPSBlbmQgPiB1cHRvID8g
dGV4dC5zbGljZSgwLCB1cHRvIC0gcG9zKSA6IHRleHQ7CiAgICAgICAgICAgICBidWlsZGVyLmFk
ZFRva2VuKGJ1aWxkZXIsIHRva2VuVGV4dCwgc3R5bGUgPyBzdHlsZSArIHNwYW5TdHlsZSA6IHNw
YW5TdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhblN0YXJ0U3R5bGUsIHBv
cyArIHRva2VuVGV4dC5sZW5ndGggPT0gbmV4dENoYW5nZSA/IHNwYW5FbmRTdHlsZSA6ICIiLCB0
aXRsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5TdGFydFN0eWxlLCBwb3Mg
KyB0b2tlblRleHQubGVuZ3RoID09IG5leHRDaGFuZ2UgPyBzcGFuRW5kU3R5bGUgOiAiIiwgdGl0
bGUsIGNzcyk7CiAgICAgICAgICAgfQogICAgICAgICAgIGlmIChlbmQgPj0gdXB0bykge3RleHQg
PSB0ZXh0LnNsaWNlKHVwdG8gLSBwb3MpOyBwb3MgPSB1cHRvOyBicmVhazt9CiAgICAgICAgICAg
cG9zID0gZW5kOwpAQCAtNTk2NSwxNyArNzA3MCwyNCBAQAogICAgICAgdXBkYXRlTGluZShsaW5l
LCB0ZXh0LCBzcGFucywgZXN0aW1hdGVIZWlnaHQpOwogICAgICAgc2lnbmFsTGF0ZXIobGluZSwg
ImNoYW5nZSIsIGxpbmUsIGNoYW5nZSk7CiAgICAgfQorICAgIGZ1bmN0aW9uIGxpbmVzRm9yKHN0
YXJ0LCBlbmQpIHsKKyAgICAgIGZvciAodmFyIGkgPSBzdGFydCwgcmVzdWx0ID0gW107IGkgPCBl
bmQ7ICsraSkKKyAgICAgICAgcmVzdWx0LnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3Io
aSksIGVzdGltYXRlSGVpZ2h0KSk7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAogICAg
IHZhciBmcm9tID0gY2hhbmdlLmZyb20sIHRvID0gY2hhbmdlLnRvLCB0ZXh0ID0gY2hhbmdlLnRl
eHQ7CiAgICAgdmFyIGZpcnN0TGluZSA9IGdldExpbmUoZG9jLCBmcm9tLmxpbmUpLCBsYXN0TGlu
ZSA9IGdldExpbmUoZG9jLCB0by5saW5lKTsKICAgICB2YXIgbGFzdFRleHQgPSBsc3QodGV4dCks
IGxhc3RTcGFucyA9IHNwYW5zRm9yKHRleHQubGVuZ3RoIC0gMSksIG5saW5lcyA9IHRvLmxpbmUg
LSBmcm9tLmxpbmU7CiAKICAgICAvLyBBZGp1c3QgdGhlIGxpbmUgc3RydWN0dXJlCi0gICAgaWYg
KGlzV2hvbGVMaW5lVXBkYXRlKGRvYywgY2hhbmdlKSkgeworICAgIGlmIChjaGFuZ2UuZnVsbCkg
eworICAgICAgZG9jLmluc2VydCgwLCBsaW5lc0ZvcigwLCB0ZXh0Lmxlbmd0aCkpOworICAgICAg
ZG9jLnJlbW92ZSh0ZXh0Lmxlbmd0aCwgZG9jLnNpemUgLSB0ZXh0Lmxlbmd0aCk7CisgICAgfSBl
bHNlIGlmIChpc1dob2xlTGluZVVwZGF0ZShkb2MsIGNoYW5nZSkpIHsKICAgICAgIC8vIFRoaXMg
aXMgYSB3aG9sZS1saW5lIHJlcGxhY2UuIFRyZWF0ZWQgc3BlY2lhbGx5IHRvIG1ha2UKICAgICAg
IC8vIHN1cmUgbGluZSBvYmplY3RzIG1vdmUgdGhlIHdheSB0aGV5IGFyZSBzdXBwb3NlZCB0by4K
LSAgICAgIGZvciAodmFyIGkgPSAwLCBhZGRlZCA9IFtdOyBpIDwgdGV4dC5sZW5ndGggLSAxOyAr
K2kpCi0gICAgICAgIGFkZGVkLnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVz
dGltYXRlSGVpZ2h0KSk7CisgICAgICB2YXIgYWRkZWQgPSBsaW5lc0ZvcigwLCB0ZXh0Lmxlbmd0
aCAtIDEpOwogICAgICAgdXBkYXRlKGxhc3RMaW5lLCBsYXN0TGluZS50ZXh0LCBsYXN0U3BhbnMp
OwogICAgICAgaWYgKG5saW5lcykgZG9jLnJlbW92ZShmcm9tLmxpbmUsIG5saW5lcyk7CiAgICAg
ICBpZiAoYWRkZWQubGVuZ3RoKSBkb2MuaW5zZXJ0KGZyb20ubGluZSwgYWRkZWQpOwpAQCAtNTk4
Myw4ICs3MDk1LDcgQEAKICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAxKSB7CiAgICAgICAgIHVw
ZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgbGFzdFRl
eHQgKyBmaXJzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucyk7CiAgICAgICB9IGVs
c2UgewotICAgICAgICBmb3IgKHZhciBhZGRlZCA9IFtdLCBpID0gMTsgaSA8IHRleHQubGVuZ3Ro
IC0gMTsgKytpKQotICAgICAgICAgIGFkZGVkLnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNG
b3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7CisgICAgICAgIHZhciBhZGRlZCA9IGxpbmVzRm9yKDEs
IHRleHQubGVuZ3RoIC0gMSk7CiAgICAgICAgIGFkZGVkLnB1c2gobmV3IExpbmUobGFzdFRleHQg
KyBmaXJzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucywgZXN0aW1hdGVIZWlnaHQp
KTsKICAgICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJv
bS5jaCkgKyB0ZXh0WzBdLCBzcGFuc0ZvcigwKSk7CiAgICAgICAgIGRvYy5pbnNlcnQoZnJvbS5s
aW5lICsgMSwgYWRkZWQpOwpAQCAtNTk5NSw4ICs3MTA2LDcgQEAKICAgICB9IGVsc2UgewogICAg
ICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0
ZXh0WzBdLCBzcGFuc0ZvcigwKSk7CiAgICAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RUZXh0ICsg
bGFzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucyk7Ci0gICAgICBmb3IgKHZhciBp
ID0gMSwgYWRkZWQgPSBbXTsgaSA8IHRleHQubGVuZ3RoIC0gMTsgKytpKQotICAgICAgICBhZGRl
ZC5wdXNoKG5ldyBMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOwor
ICAgICAgdmFyIGFkZGVkID0gbGluZXNGb3IoMSwgdGV4dC5sZW5ndGggLSAxKTsKICAgICAgIGlm
IChubGluZXMgPiAxKSBkb2MucmVtb3ZlKGZyb20ubGluZSArIDEsIG5saW5lcyAtIDEpOwogICAg
ICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCk7CiAgICAgfQpAQCAtNjE1Niw4ICs3
MjY2LDggQEAKICAgfTsKIAogICB2YXIgbmV4dERvY0lkID0gMDsKLSAgdmFyIERvYyA9IENvZGVN
aXJyb3IuRG9jID0gZnVuY3Rpb24odGV4dCwgbW9kZSwgZmlyc3RMaW5lKSB7Ci0gICAgaWYgKCEo
dGhpcyBpbnN0YW5jZW9mIERvYykpIHJldHVybiBuZXcgRG9jKHRleHQsIG1vZGUsIGZpcnN0TGlu
ZSk7CisgIHZhciBEb2MgPSBDb2RlTWlycm9yLkRvYyA9IGZ1bmN0aW9uKHRleHQsIG1vZGUsIGZp
cnN0TGluZSwgbGluZVNlcCkgeworICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEb2MpKSByZXR1
cm4gbmV3IERvYyh0ZXh0LCBtb2RlLCBmaXJzdExpbmUsIGxpbmVTZXApOwogICAgIGlmIChmaXJz
dExpbmUgPT0gbnVsbCkgZmlyc3RMaW5lID0gMDsKIAogICAgIEJyYW5jaENodW5rLmNhbGwodGhp
cywgW25ldyBMZWFmQ2h1bmsoW25ldyBMaW5lKCIiLCBudWxsKV0pXSk7CkBAIC02MTcxLDggKzcy
ODEsOSBAQAogICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBIaXN0b3J5KG51bGwpOwogICAgIHRoaXMu
aWQgPSArK25leHREb2NJZDsKICAgICB0aGlzLm1vZGVPcHRpb24gPSBtb2RlOworICAgIHRoaXMu
bGluZVNlcCA9IGxpbmVTZXA7CiAKLSAgICBpZiAodHlwZW9mIHRleHQgPT0gInN0cmluZyIpIHRl
eHQgPSBzcGxpdExpbmVzKHRleHQpOworICAgIGlmICh0eXBlb2YgdGV4dCA9PSAic3RyaW5nIikg
dGV4dCA9IHRoaXMuc3BsaXRMaW5lcyh0ZXh0KTsKICAgICB1cGRhdGVEb2ModGhpcywge2Zyb206
IHN0YXJ0LCB0bzogc3RhcnQsIHRleHQ6IHRleHR9KTsKICAgICBzZXRTZWxlY3Rpb24odGhpcywg
c2ltcGxlU2VsZWN0aW9uKHN0YXJ0KSwgc2VsX2RvbnRTY3JvbGwpOwogICB9OwpAQCAtNjIwMiwx
MiArNzMxMywxMiBAQAogICAgIGdldFZhbHVlOiBmdW5jdGlvbihsaW5lU2VwKSB7CiAgICAgICB2
YXIgbGluZXMgPSBnZXRMaW5lcyh0aGlzLCB0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5z
aXplKTsKICAgICAgIGlmIChsaW5lU2VwID09PSBmYWxzZSkgcmV0dXJuIGxpbmVzOwotICAgICAg
cmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCAiXG4iKTsKKyAgICAgIHJldHVybiBsaW5lcy5q
b2luKGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpOwogICAgIH0sCiAgICAgc2V0VmFs
dWU6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGNvZGUpIHsKICAgICAgIHZhciB0b3AgPSBQb3ModGhp
cy5maXJzdCwgMCksIGxhc3QgPSB0aGlzLmZpcnN0ICsgdGhpcy5zaXplIC0gMTsKICAgICAgIG1h
a2VDaGFuZ2UodGhpcywge2Zyb206IHRvcCwgdG86IFBvcyhsYXN0LCBnZXRMaW5lKHRoaXMsIGxh
c3QpLnRleHQubGVuZ3RoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHNwbGl0TGlu
ZXMoY29kZSksIG9yaWdpbjogInNldFZhbHVlIn0sIHRydWUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dDogdGhpcy5zcGxpdExpbmVzKGNvZGUpLCBvcmlnaW46ICJzZXRWYWx1ZSIsIGZ1
bGw6IHRydWV9LCB0cnVlKTsKICAgICAgIHNldFNlbGVjdGlvbih0aGlzLCBzaW1wbGVTZWxlY3Rp
b24odG9wKSk7CiAgICAgfSksCiAgICAgcmVwbGFjZVJhbmdlOiBmdW5jdGlvbihjb2RlLCBmcm9t
LCB0bywgb3JpZ2luKSB7CkBAIC02MjE4LDcgKzczMjksNyBAQAogICAgIGdldFJhbmdlOiBmdW5j
dGlvbihmcm9tLCB0bywgbGluZVNlcCkgewogICAgICAgdmFyIGxpbmVzID0gZ2V0QmV0d2Vlbih0
aGlzLCBjbGlwUG9zKHRoaXMsIGZyb20pLCBjbGlwUG9zKHRoaXMsIHRvKSk7CiAgICAgICBpZiAo
bGluZVNlcCA9PT0gZmFsc2UpIHJldHVybiBsaW5lczsKLSAgICAgIHJldHVybiBsaW5lcy5qb2lu
KGxpbmVTZXAgfHwgIlxuIik7CisgICAgICByZXR1cm4gbGluZXMuam9pbihsaW5lU2VwIHx8IHRo
aXMubGluZVNlcGFyYXRvcigpKTsKICAgICB9LAogCiAgICAgZ2V0TGluZTogZnVuY3Rpb24obGlu
ZSkge3ZhciBsID0gdGhpcy5nZXRMaW5lSGFuZGxlKGxpbmUpOyByZXR1cm4gbCAmJiBsLnRleHQ7
fSwKQEAgLTYyODQsMTMgKzczOTUsMTMgQEAKICAgICAgICAgbGluZXMgPSBsaW5lcyA/IGxpbmVz
LmNvbmNhdChzZWwpIDogc2VsOwogICAgICAgfQogICAgICAgaWYgKGxpbmVTZXAgPT09IGZhbHNl
KSByZXR1cm4gbGluZXM7Ci0gICAgICBlbHNlIHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwg
IlxuIik7CisgICAgICBlbHNlIHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgdGhpcy5saW5l
U2VwYXJhdG9yKCkpOwogICAgIH0sCiAgICAgZ2V0U2VsZWN0aW9uczogZnVuY3Rpb24obGluZVNl
cCkgewogICAgICAgdmFyIHBhcnRzID0gW10sIHJhbmdlcyA9IHRoaXMuc2VsLnJhbmdlczsKICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgIHZh
ciBzZWwgPSBnZXRCZXR3ZWVuKHRoaXMsIHJhbmdlc1tpXS5mcm9tKCksIHJhbmdlc1tpXS50bygp
KTsKLSAgICAgICAgaWYgKGxpbmVTZXAgIT09IGZhbHNlKSBzZWwgPSBzZWwuam9pbihsaW5lU2Vw
IHx8ICJcbiIpOworICAgICAgICBpZiAobGluZVNlcCAhPT0gZmFsc2UpIHNlbCA9IHNlbC5qb2lu
KGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpOwogICAgICAgICBwYXJ0c1tpXSA9IHNl
bDsKICAgICAgIH0KICAgICAgIHJldHVybiBwYXJ0czsKQEAgLTYzMDUsNyArNzQxNiw3IEBACiAg
ICAgICB2YXIgY2hhbmdlcyA9IFtdLCBzZWwgPSB0aGlzLnNlbDsKICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykgewogICAgICAgICB2YXIgcmFuZ2UgPSBz
ZWwucmFuZ2VzW2ldOwotICAgICAgICBjaGFuZ2VzW2ldID0ge2Zyb206IHJhbmdlLmZyb20oKSwg
dG86IHJhbmdlLnRvKCksIHRleHQ6IHNwbGl0TGluZXMoY29kZVtpXSksIG9yaWdpbjogb3JpZ2lu
fTsKKyAgICAgICAgY2hhbmdlc1tpXSA9IHtmcm9tOiByYW5nZS5mcm9tKCksIHRvOiByYW5nZS50
bygpLCB0ZXh0OiB0aGlzLnNwbGl0TGluZXMoY29kZVtpXSksIG9yaWdpbjogb3JpZ2lufTsKICAg
ICAgIH0KICAgICAgIHZhciBuZXdTZWwgPSBjb2xsYXBzZSAmJiBjb2xsYXBzZSAhPSAiZW5kIiAm
JiBjb21wdXRlUmVwbGFjZWRTZWwodGhpcywgY2hhbmdlcywgY29sbGFwc2UpOwogICAgICAgZm9y
ICh2YXIgaSA9IGNoYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pCkBAIC02MzM0LDcgKzc0
NDUsNyBAQAogICAgIH0sCiAgICAgY2hhbmdlR2VuZXJhdGlvbjogZnVuY3Rpb24oZm9yY2VTcGxp
dCkgewogICAgICAgaWYgKGZvcmNlU3BsaXQpCi0gICAgICAgIHRoaXMuaGlzdG9yeS5sYXN0T3Ag
PSB0aGlzLmhpc3RvcnkubGFzdE9yaWdpbiA9IG51bGw7CisgICAgICAgIHRoaXMuaGlzdG9yeS5s
YXN0T3AgPSB0aGlzLmhpc3RvcnkubGFzdFNlbE9wID0gdGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW4g
PSBudWxsOwogICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uOwogICAgIH0sCiAg
ICAgaXNDbGVhbjogZnVuY3Rpb24gKGdlbikgewpAQCAtNjM1MSwxMyArNzQ2Miw0OCBAQAogICAg
ICAgaGlzdC51bmRvbmUgPSBjb3B5SGlzdG9yeUFycmF5KGhpc3REYXRhLnVuZG9uZS5zbGljZSgw
KSwgbnVsbCwgdHJ1ZSk7CiAgICAgfSwKIAorICAgIGFkZExpbmVDbGFzczogZG9jTWV0aG9kT3Ao
ZnVuY3Rpb24oaGFuZGxlLCB3aGVyZSwgY2xzKSB7CisgICAgICByZXR1cm4gY2hhbmdlTGluZSh0
aGlzLCBoYW5kbGUsIHdoZXJlID09ICJndXR0ZXIiID8gImd1dHRlciIgOiAiY2xhc3MiLCBmdW5j
dGlvbihsaW5lKSB7CisgICAgICAgIHZhciBwcm9wID0gd2hlcmUgPT0gInRleHQiID8gInRleHRD
bGFzcyIKKyAgICAgICAgICAgICAgICAgOiB3aGVyZSA9PSAiYmFja2dyb3VuZCIgPyAiYmdDbGFz
cyIKKyAgICAgICAgICAgICAgICAgOiB3aGVyZSA9PSAiZ3V0dGVyIiA/ICJndXR0ZXJDbGFzcyIg
OiAid3JhcENsYXNzIjsKKyAgICAgICAgaWYgKCFsaW5lW3Byb3BdKSBsaW5lW3Byb3BdID0gY2xz
OworICAgICAgICBlbHNlIGlmIChjbGFzc1Rlc3QoY2xzKS50ZXN0KGxpbmVbcHJvcF0pKSByZXR1
cm4gZmFsc2U7CisgICAgICAgIGVsc2UgbGluZVtwcm9wXSArPSAiICIgKyBjbHM7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgfSk7CisgICAgfSksCisgICAgcmVtb3ZlTGluZUNsYXNzOiBk
b2NNZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIHdoZXJlLCBjbHMpIHsKKyAgICAgIHJldHVybiBj
aGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwgd2hlcmUgPT0gImd1dHRlciIgPyAiZ3V0dGVyIiA6ICJj
bGFzcyIsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgdmFyIHByb3AgPSB3aGVyZSA9PSAidGV4
dCIgPyAidGV4dENsYXNzIgorICAgICAgICAgICAgICAgICA6IHdoZXJlID09ICJiYWNrZ3JvdW5k
IiA/ICJiZ0NsYXNzIgorICAgICAgICAgICAgICAgICA6IHdoZXJlID09ICJndXR0ZXIiID8gImd1
dHRlckNsYXNzIiA6ICJ3cmFwQ2xhc3MiOworICAgICAgICB2YXIgY3VyID0gbGluZVtwcm9wXTsK
KyAgICAgICAgaWYgKCFjdXIpIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWxzZSBpZiAoY2xzID09
IG51bGwpIGxpbmVbcHJvcF0gPSBudWxsOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICB2YXIg
Zm91bmQgPSBjdXIubWF0Y2goY2xhc3NUZXN0KGNscykpOworICAgICAgICAgIGlmICghZm91bmQp
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICB2YXIgZW5kID0gZm91bmQuaW5kZXggKyBmb3VuZFsw
XS5sZW5ndGg7CisgICAgICAgICAgbGluZVtwcm9wXSA9IGN1ci5zbGljZSgwLCBmb3VuZC5pbmRl
eCkgKyAoIWZvdW5kLmluZGV4IHx8IGVuZCA9PSBjdXIubGVuZ3RoID8gIiIgOiAiICIpICsgY3Vy
LnNsaWNlKGVuZCkgfHwgbnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgIH0pOworICAgIH0pLAorCisgICAgYWRkTGluZVdpZGdldDogZG9jTWV0aG9kT3AoZnVuY3Rp
b24oaGFuZGxlLCBub2RlLCBvcHRpb25zKSB7CisgICAgICByZXR1cm4gYWRkTGluZVdpZGdldCh0
aGlzLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpOworICAgIH0pLAorICAgIHJlbW92ZUxpbmVXaWRn
ZXQ6IGZ1bmN0aW9uKHdpZGdldCkgeyB3aWRnZXQuY2xlYXIoKTsgfSwKKwogICAgIG1hcmtUZXh0
OiBmdW5jdGlvbihmcm9tLCB0bywgb3B0aW9ucykgewogICAgICAgcmV0dXJuIG1hcmtUZXh0KHRo
aXMsIGNsaXBQb3ModGhpcywgZnJvbSksIGNsaXBQb3ModGhpcywgdG8pLCBvcHRpb25zLCAicmFu
Z2UiKTsKICAgICB9LAogICAgIHNldEJvb2ttYXJrOiBmdW5jdGlvbihwb3MsIG9wdGlvbnMpIHsK
ICAgICAgIHZhciByZWFsT3B0cyA9IHtyZXBsYWNlZFdpdGg6IG9wdGlvbnMgJiYgKG9wdGlvbnMu
bm9kZVR5cGUgPT0gbnVsbCA/IG9wdGlvbnMud2lkZ2V0IDogb3B0aW9ucyksCiAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0TGVmdDogb3B0aW9ucyAmJiBvcHRpb25zLmluc2VydExlZnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgY2xlYXJXaGVuRW1wdHk6IGZhbHNlLCBzaGFyZWQ6IG9wdGlv
bnMgJiYgb3B0aW9ucy5zaGFyZWR9OworICAgICAgICAgICAgICAgICAgICAgIGNsZWFyV2hlbkVt
cHR5OiBmYWxzZSwgc2hhcmVkOiBvcHRpb25zICYmIG9wdGlvbnMuc2hhcmVkLAorICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZU1vdXNlRXZlbnRzOiBvcHRpb25zICYmIG9wdGlvbnMuaGFuZGxl
TW91c2VFdmVudHN9OwogICAgICAgcG9zID0gY2xpcFBvcyh0aGlzLCBwb3MpOwogICAgICAgcmV0
dXJuIG1hcmtUZXh0KHRoaXMsIHBvcywgcG9zLCByZWFsT3B0cywgImJvb2ttYXJrIik7CiAgICAg
fSwKQEAgLTY0MjAsNyArNzU2Niw4IEBACiAgICAgfSwKIAogICAgIGNvcHk6IGZ1bmN0aW9uKGNv
cHlIaXN0b3J5KSB7Ci0gICAgICB2YXIgZG9jID0gbmV3IERvYyhnZXRMaW5lcyh0aGlzLCB0aGlz
LmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5zaXplKSwgdGhpcy5tb2RlT3B0aW9uLCB0aGlzLmZp
cnN0KTsKKyAgICAgIHZhciBkb2MgPSBuZXcgRG9jKGdldExpbmVzKHRoaXMsIHRoaXMuZmlyc3Qs
IHRoaXMuZmlyc3QgKyB0aGlzLnNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5t
b2RlT3B0aW9uLCB0aGlzLmZpcnN0LCB0aGlzLmxpbmVTZXApOwogICAgICAgZG9jLnNjcm9sbFRv
cCA9IHRoaXMuc2Nyb2xsVG9wOyBkb2Muc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdDsKICAg
ICAgIGRvYy5zZWwgPSB0aGlzLnNlbDsKICAgICAgIGRvYy5leHRlbmQgPSBmYWxzZTsKQEAgLTY0
MzYsNyArNzU4Myw3IEBACiAgICAgICB2YXIgZnJvbSA9IHRoaXMuZmlyc3QsIHRvID0gdGhpcy5m
aXJzdCArIHRoaXMuc2l6ZTsKICAgICAgIGlmIChvcHRpb25zLmZyb20gIT0gbnVsbCAmJiBvcHRp
b25zLmZyb20gPiBmcm9tKSBmcm9tID0gb3B0aW9ucy5mcm9tOwogICAgICAgaWYgKG9wdGlvbnMu
dG8gIT0gbnVsbCAmJiBvcHRpb25zLnRvIDwgdG8pIHRvID0gb3B0aW9ucy50bzsKLSAgICAgIHZh
ciBjb3B5ID0gbmV3IERvYyhnZXRMaW5lcyh0aGlzLCBmcm9tLCB0byksIG9wdGlvbnMubW9kZSB8
fCB0aGlzLm1vZGVPcHRpb24sIGZyb20pOworICAgICAgdmFyIGNvcHkgPSBuZXcgRG9jKGdldExp
bmVzKHRoaXMsIGZyb20sIHRvKSwgb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZU9wdGlvbiwgZnJv
bSwgdGhpcy5saW5lU2VwKTsKICAgICAgIGlmIChvcHRpb25zLnNoYXJlZEhpc3QpIGNvcHkuaGlz
dG9yeSA9IHRoaXMuaGlzdG9yeTsKICAgICAgICh0aGlzLmxpbmtlZCB8fCAodGhpcy5saW5rZWQg
PSBbXSkpLnB1c2goe2RvYzogY29weSwgc2hhcmVkSGlzdDogb3B0aW9ucy5zaGFyZWRIaXN0fSk7
CiAgICAgICBjb3B5LmxpbmtlZCA9IFt7ZG9jOiB0aGlzLCBpc1BhcmVudDogdHJ1ZSwgc2hhcmVk
SGlzdDogb3B0aW9ucy5zaGFyZWRIaXN0fV07CkBAIC02NDY1LDE0ICs3NjEyLDIwIEBACiAgICAg
aXRlckxpbmtlZERvY3M6IGZ1bmN0aW9uKGYpIHtsaW5rZWREb2NzKHRoaXMsIGYpO30sCiAKICAg
ICBnZXRNb2RlOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5tb2RlO30sCi0gICAgZ2V0RWRpdG9y
OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5jbTt9CisgICAgZ2V0RWRpdG9yOiBmdW5jdGlvbigp
IHtyZXR1cm4gdGhpcy5jbTt9LAorCisgICAgc3BsaXRMaW5lczogZnVuY3Rpb24oc3RyKSB7Cisg
ICAgICBpZiAodGhpcy5saW5lU2VwKSByZXR1cm4gc3RyLnNwbGl0KHRoaXMubGluZVNlcCk7Cisg
ICAgICByZXR1cm4gc3BsaXRMaW5lc0F1dG8oc3RyKTsKKyAgICB9LAorICAgIGxpbmVTZXBhcmF0
b3I6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5saW5lU2VwIHx8ICJcbiI7IH0KICAgfSk7CiAK
ICAgLy8gUHVibGljIGFsaWFzLgogICBEb2MucHJvdG90eXBlLmVhY2hMaW5lID0gRG9jLnByb3Rv
dHlwZS5pdGVyOwogCiAgIC8vIFNldCB1cCBtZXRob2RzIG9uIENvZGVNaXJyb3IncyBwcm90b3R5
cGUgdG8gcmVkaXJlY3QgdG8gdGhlIGVkaXRvcidzIGRvY3VtZW50LgotICB2YXIgZG9udERlbGVn
YXRlID0gIml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciIuc3BsaXQoIiAiKTsKKyAg
dmFyIGRvbnREZWxlZ2F0ZSA9ICJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IgY29u
c3RydWN0b3IiLnNwbGl0KCIgIik7CiAgIGZvciAodmFyIHByb3AgaW4gRG9jLnByb3RvdHlwZSkg
aWYgKERvYy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgaW5kZXhPZihkb250RGVs
ZWdhdGUsIHByb3ApIDwgMCkKICAgICBDb2RlTWlycm9yLnByb3RvdHlwZVtwcm9wXSA9IChmdW5j
dGlvbihtZXRob2QpIHsKICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtyZXR1cm4gbWV0aG9kLmFw
cGx5KHRoaXMuZG9jLCBhcmd1bWVudHMpO307CkBAIC02NjI2LDcgKzc3NzksNyBAQAogICAgIC8v
IFVzZWQgdG8gdHJhY2sgd2hlbiBjaGFuZ2VzIGNhbiBiZSBtZXJnZWQgaW50byBhIHNpbmdsZSB1
bmRvCiAgICAgLy8gZXZlbnQKICAgICB0aGlzLmxhc3RNb2RUaW1lID0gdGhpcy5sYXN0U2VsVGlt
ZSA9IDA7Ci0gICAgdGhpcy5sYXN0T3AgPSBudWxsOworICAgIHRoaXMubGFzdE9wID0gdGhpcy5s
YXN0U2VsT3AgPSBudWxsOwogICAgIHRoaXMubGFzdE9yaWdpbiA9IHRoaXMubGFzdFNlbE9yaWdp
biA9IG51bGw7CiAgICAgLy8gVXNlZCBieSB0aGUgaXNDbGVhbigpIG1ldGhvZAogICAgIHRoaXMu
Z2VuZXJhdGlvbiA9IHRoaXMubWF4R2VuZXJhdGlvbiA9IHN0YXJ0R2VuIHx8IDE7CkBAIC02NzA0
LDcgKzc4NTcsNyBAQAogICAgIGhpc3QuZG9uZS5wdXNoKHNlbEFmdGVyKTsKICAgICBoaXN0Lmdl
bmVyYXRpb24gPSArK2hpc3QubWF4R2VuZXJhdGlvbjsKICAgICBoaXN0Lmxhc3RNb2RUaW1lID0g
aGlzdC5sYXN0U2VsVGltZSA9IHRpbWU7Ci0gICAgaGlzdC5sYXN0T3AgPSBvcElkOworICAgIGhp
c3QubGFzdE9wID0gaGlzdC5sYXN0U2VsT3AgPSBvcElkOwogICAgIGhpc3QubGFzdE9yaWdpbiA9
IGhpc3QubGFzdFNlbE9yaWdpbiA9IGNoYW5nZS5vcmlnaW47CiAKICAgICBpZiAoIWxhc3QpIHNp
Z25hbChkb2MsICJoaXN0b3J5QWRkZWQiKTsKQEAgLTY3MzAsNyArNzg4Myw3IEBACiAgICAgLy8g
dGhlIGN1cnJlbnQsIG9yIHRoZSBvcmlnaW5zIGRvbid0IGFsbG93IG1hdGNoaW5nLiBPcmlnaW5z
CiAgICAgLy8gc3RhcnRpbmcgd2l0aCAqIGFyZSBhbHdheXMgbWVyZ2VkLCB0aG9zZSBzdGFydGlu
ZyB3aXRoICsgYXJlCiAgICAgLy8gbWVyZ2VkIHdoZW4gc2ltaWxhciBhbmQgY2xvc2UgdG9nZXRo
ZXIgaW4gdGltZS4KLSAgICBpZiAob3BJZCA9PSBoaXN0Lmxhc3RPcCB8fAorICAgIGlmIChvcElk
ID09IGhpc3QubGFzdFNlbE9wIHx8CiAgICAgICAgIChvcmlnaW4gJiYgaGlzdC5sYXN0U2VsT3Jp
Z2luID09IG9yaWdpbiAmJgogICAgICAgICAgKGhpc3QubGFzdE1vZFRpbWUgPT0gaGlzdC5sYXN0
U2VsVGltZSAmJiBoaXN0Lmxhc3RPcmlnaW4gPT0gb3JpZ2luIHx8CiAgICAgICAgICAgc2VsZWN0
aW9uRXZlbnRDYW5CZU1lcmdlZChkb2MsIG9yaWdpbiwgbHN0KGhpc3QuZG9uZSksIHNlbCkpKSkK
QEAgLTY3NDAsNyArNzg5Myw3IEBACiAKICAgICBoaXN0Lmxhc3RTZWxUaW1lID0gK25ldyBEYXRl
OwogICAgIGhpc3QubGFzdFNlbE9yaWdpbiA9IG9yaWdpbjsKLSAgICBoaXN0Lmxhc3RPcCA9IG9w
SWQ7CisgICAgaGlzdC5sYXN0U2VsT3AgPSBvcElkOwogICAgIGlmIChvcHRpb25zICYmIG9wdGlv
bnMuY2xlYXJSZWRvICE9PSBmYWxzZSkKICAgICAgIGNsZWFyU2VsZWN0aW9uRXZlbnRzKGhpc3Qu
dW5kb25lKTsKICAgfQpAQCAtNjkyNSw2ICs4MDc4LDggQEAKICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGFyci5sZW5ndGg7ICsraSkgYXJyW2ldLmFwcGx5KG51bGwsIGFyZ3MpOwogICB9OwogCisg
IHZhciBvcnBoYW5EZWxheWVkQ2FsbGJhY2tzID0gbnVsbDsKKwogICAvLyBPZnRlbiwgd2Ugd2Fu
dCB0byBzaWduYWwgZXZlbnRzIGF0IGEgcG9pbnQgd2hlcmUgd2UgYXJlIGluIHRoZQogICAvLyBt
aWRkbGUgb2Ygc29tZSB3b3JrLCBidXQgZG9uJ3Qgd2FudCB0aGUgaGFuZGxlciB0byBzdGFydCBj
YWxsaW5nCiAgIC8vIG90aGVyIG1ldGhvZHMgb24gdGhlIGVkaXRvciwgd2hpY2ggbWlnaHQgYmUg
aW4gYW4gaW5jb25zaXN0ZW50CkBAIC02OTMyLDI1ICs4MDg3LDI2IEBACiAgIC8vIHNpZ25hbExh
dGVyIGxvb2tzIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBoYW5kbGVycywgYW5kIHNjaGVkdWxlcwog
ICAvLyB0aGVtIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGxhc3Qgb3BlcmF0aW9uIGVuZHMsIG9y
LCBpZiBubwogICAvLyBvcGVyYXRpb24gaXMgYWN0aXZlLCB3aGVuIGEgdGltZW91dCBmaXJlcy4K
LSAgdmFyIGRlbGF5ZWRDYWxsYmFja3MsIGRlbGF5ZWRDYWxsYmFja0RlcHRoID0gMDsKICAgZnVu
Y3Rpb24gc2lnbmFsTGF0ZXIoZW1pdHRlciwgdHlwZSAvKiwgdmFsdWVzLi4uKi8pIHsKICAgICB2
YXIgYXJyID0gZW1pdHRlci5faGFuZGxlcnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV07CiAg
ICAgaWYgKCFhcnIpIHJldHVybjsKLSAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGlj
ZS5jYWxsKGFyZ3VtZW50cywgMik7Ci0gICAgaWYgKCFkZWxheWVkQ2FsbGJhY2tzKSB7Ci0gICAg
ICArK2RlbGF5ZWRDYWxsYmFja0RlcHRoOwotICAgICAgZGVsYXllZENhbGxiYWNrcyA9IFtdOwot
ICAgICAgc2V0VGltZW91dChmaXJlRGVsYXllZCwgMCk7CisgICAgdmFyIGFyZ3MgPSBBcnJheS5w
cm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLCBsaXN0OworICAgIGlmIChvcGVyYXRp
b25Hcm91cCkgeworICAgICAgbGlzdCA9IG9wZXJhdGlvbkdyb3VwLmRlbGF5ZWRDYWxsYmFja3M7
CisgICAgfSBlbHNlIGlmIChvcnBoYW5EZWxheWVkQ2FsbGJhY2tzKSB7CisgICAgICBsaXN0ID0g
b3JwaGFuRGVsYXllZENhbGxiYWNrczsKKyAgICB9IGVsc2UgeworICAgICAgbGlzdCA9IG9ycGhh
bkRlbGF5ZWRDYWxsYmFja3MgPSBbXTsKKyAgICAgIHNldFRpbWVvdXQoZmlyZU9ycGhhbkRlbGF5
ZWQsIDApOwogICAgIH0KICAgICBmdW5jdGlvbiBibmQoZikge3JldHVybiBmdW5jdGlvbigpe2Yu
YXBwbHkobnVsbCwgYXJncyk7fTt9OwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0
aDsgKytpKQotICAgICAgZGVsYXllZENhbGxiYWNrcy5wdXNoKGJuZChhcnJbaV0pKTsKKyAgICAg
IGxpc3QucHVzaChibmQoYXJyW2ldKSk7CiAgIH0KIAotICBmdW5jdGlvbiBmaXJlRGVsYXllZCgp
IHsKLSAgICAtLWRlbGF5ZWRDYWxsYmFja0RlcHRoOwotICAgIHZhciBkZWxheWVkID0gZGVsYXll
ZENhbGxiYWNrczsKLSAgICBkZWxheWVkQ2FsbGJhY2tzID0gbnVsbDsKKyAgZnVuY3Rpb24gZmly
ZU9ycGhhbkRlbGF5ZWQoKSB7CisgICAgdmFyIGRlbGF5ZWQgPSBvcnBoYW5EZWxheWVkQ2FsbGJh
Y2tzOworICAgIG9ycGhhbkRlbGF5ZWRDYWxsYmFja3MgPSBudWxsOwogICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZGVsYXllZC5sZW5ndGg7ICsraSkgZGVsYXllZFtpXSgpOwogICB9CiAKQEAgLTY5
ODcsNyArODE0Myw3IEBACiAgIC8vIE1JU0MgVVRJTElUSUVTCiAKICAgLy8gTnVtYmVyIG9mIHBp
eGVscyBhZGRlZCB0byBzY3JvbGxlciBhbmQgc2l6ZXIgdG8gaGlkZSBzY3JvbGxiYXIKLSAgdmFy
IHNjcm9sbGVyQ3V0T2ZmID0gMzA7CisgIHZhciBzY3JvbGxlckdhcCA9IDMwOwogCiAgIC8vIFJl
dHVybmVkIG9yIHRocm93biBieSB2YXJpb3VzIHByb3RvY29scyB0byBzaWduYWwgJ0knbSBub3QK
ICAgLy8gaGFuZGxpbmcgdGhpcycuCkBAIC03MDU1LDIyICs4MjExLDIxIEBACiAgICAgICBpZiAo
YXJyYXlbaV0gPT0gZWx0KSByZXR1cm4gaTsKICAgICByZXR1cm4gLTE7CiAgIH0KLSAgaWYgKFtd
LmluZGV4T2YpIGluZGV4T2YgPSBmdW5jdGlvbihhcnJheSwgZWx0KSB7IHJldHVybiBhcnJheS5p
bmRleE9mKGVsdCk7IH07CiAgIGZ1bmN0aW9uIG1hcChhcnJheSwgZikgewogICAgIHZhciBvdXQg
PSBbXTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSBvdXRbaV0g
PSBmKGFycmF5W2ldLCBpKTsKICAgICByZXR1cm4gb3V0OwogICB9Ci0gIGlmIChbXS5tYXApIG1h
cCA9IGZ1bmN0aW9uKGFycmF5LCBmKSB7IHJldHVybiBhcnJheS5tYXAoZik7IH07CisKKyAgZnVu
Y3Rpb24gbm90aGluZygpIHt9CiAKICAgZnVuY3Rpb24gY3JlYXRlT2JqKGJhc2UsIHByb3BzKSB7
CiAgICAgdmFyIGluc3Q7CiAgICAgaWYgKE9iamVjdC5jcmVhdGUpIHsKICAgICAgIGluc3QgPSBP
YmplY3QuY3JlYXRlKGJhc2UpOwogICAgIH0gZWxzZSB7Ci0gICAgICB2YXIgY3RvciA9IGZ1bmN0
aW9uKCkge307Ci0gICAgICBjdG9yLnByb3RvdHlwZSA9IGJhc2U7Ci0gICAgICBpbnN0ID0gbmV3
IGN0b3IoKTsKKyAgICAgIG5vdGhpbmcucHJvdG90eXBlID0gYmFzZTsKKyAgICAgIGluc3QgPSBu
ZXcgbm90aGluZygpOwogICAgIH0KICAgICBpZiAocHJvcHMpIGNvcHlPYmoocHJvcHMsIGluc3Qp
OwogICAgIHJldHVybiBpbnN0OwpAQCAtNzA4OSw3ICs4MjQ0LDcgQEAKICAgICByZXR1cm4gZnVu
Y3Rpb24oKXtyZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTt9OwogICB9CiAKLSAgdmFyIG5vbkFT
Q0lJU2luZ2xlQ2FzZVdvcmRDaGFyID0gL1tcdTAwZGZcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBm
Zlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhYzAwLVx1ZDdhZl0vOworICB2YXIgbm9uQVND
SUlTaW5nbGVDYXNlV29yZENoYXIgPSAvW1x1MDBkZlx1MDU4N1x1MDU5MC1cdTA1ZjRcdTA2MDAt
XHUwNmZmXHUzMDQwLVx1MzA5Zlx1MzBhMC1cdTMwZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZj
Y1x1YWMwMC1cdWQ3YWZdLzsKICAgdmFyIGlzV29yZENoYXJCYXNpYyA9IENvZGVNaXJyb3IuaXNX
b3JkQ2hhciA9IGZ1bmN0aW9uKGNoKSB7CiAgICAgcmV0dXJuIC9cdy8udGVzdChjaCkgfHwgY2gg
PiAiXHg4MCIgJiYKICAgICAgIChjaC50b1VwcGVyQ2FzZSgpICE9IGNoLnRvTG93ZXJDYXNlKCkg
fHwgbm9uQVNDSUlTaW5nbGVDYXNlV29yZENoYXIudGVzdChjaCkpOwpAQCAtNzEyNSwxNSArODI4
MCwxNiBAQAogICB9CiAKICAgdmFyIHJhbmdlOwotICBpZiAoZG9jdW1lbnQuY3JlYXRlUmFuZ2Up
IHJhbmdlID0gZnVuY3Rpb24obm9kZSwgc3RhcnQsIGVuZCkgeworICBpZiAoZG9jdW1lbnQuY3Jl
YXRlUmFuZ2UpIHJhbmdlID0gZnVuY3Rpb24obm9kZSwgc3RhcnQsIGVuZCwgZW5kTm9kZSkgewog
ICAgIHZhciByID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICByLnNldEVuZChub2RlLCBl
bmQpOworICAgIHIuc2V0RW5kKGVuZE5vZGUgfHwgbm9kZSwgZW5kKTsKICAgICByLnNldFN0YXJ0
KG5vZGUsIHN0YXJ0KTsKICAgICByZXR1cm4gcjsKICAgfTsKICAgZWxzZSByYW5nZSA9IGZ1bmN0
aW9uKG5vZGUsIHN0YXJ0LCBlbmQpIHsKICAgICB2YXIgciA9IGRvY3VtZW50LmJvZHkuY3JlYXRl
VGV4dFJhbmdlKCk7Ci0gICAgci5tb3ZlVG9FbGVtZW50VGV4dChub2RlLnBhcmVudE5vZGUpOwor
ICAgIHRyeSB7IHIubW92ZVRvRWxlbWVudFRleHQobm9kZS5wYXJlbnROb2RlKTsgfQorICAgIGNh
dGNoKGUpIHsgcmV0dXJuIHI7IH0KICAgICByLmNvbGxhcHNlKHRydWUpOwogICAgIHIubW92ZUVu
ZCgiY2hhcmFjdGVyIiwgZW5kKTsKICAgICByLm1vdmVTdGFydCgiY2hhcmFjdGVyIiwgc3RhcnQp
OwpAQCAtNzE1MCwyOSArODMwNiw0MyBAQAogICAgIHJldHVybiByZW1vdmVDaGlsZHJlbihwYXJl
bnQpLmFwcGVuZENoaWxkKGUpOwogICB9CiAKLSAgZnVuY3Rpb24gY29udGFpbnMocGFyZW50LCBj
aGlsZCkgeworICB2YXIgY29udGFpbnMgPSBDb2RlTWlycm9yLmNvbnRhaW5zID0gZnVuY3Rpb24o
cGFyZW50LCBjaGlsZCkgeworICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PSAzKSAvLyBBbmRyb2lk
IGJyb3dzZXIgYWx3YXlzIHJldHVybnMgZmFsc2Ugd2hlbiBjaGlsZCBpcyBhIHRleHRub2RlCisg
ICAgICBjaGlsZCA9IGNoaWxkLnBhcmVudE5vZGU7CiAgICAgaWYgKHBhcmVudC5jb250YWlucykK
ICAgICAgIHJldHVybiBwYXJlbnQuY29udGFpbnMoY2hpbGQpOwotICAgIHdoaWxlIChjaGlsZCA9
IGNoaWxkLnBhcmVudE5vZGUpCisgICAgZG8geworICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09
IDExKSBjaGlsZCA9IGNoaWxkLmhvc3Q7CiAgICAgICBpZiAoY2hpbGQgPT0gcGFyZW50KSByZXR1
cm4gdHJ1ZTsKLSAgfQorICAgIH0gd2hpbGUgKGNoaWxkID0gY2hpbGQucGFyZW50Tm9kZSk7Cisg
IH07CiAKLSAgZnVuY3Rpb24gYWN0aXZlRWx0KCkgeyByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxl
bWVudDsgfQorICBmdW5jdGlvbiBhY3RpdmVFbHQoKSB7CisgICAgdmFyIGFjdGl2ZUVsZW1lbnQg
PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50OworICAgIHdoaWxlIChhY3RpdmVFbGVtZW50ICYmIGFj
dGl2ZUVsZW1lbnQucm9vdCAmJiBhY3RpdmVFbGVtZW50LnJvb3QuYWN0aXZlRWxlbWVudCkKKyAg
ICAgIGFjdGl2ZUVsZW1lbnQgPSBhY3RpdmVFbGVtZW50LnJvb3QuYWN0aXZlRWxlbWVudDsKKyAg
ICByZXR1cm4gYWN0aXZlRWxlbWVudDsKKyAgfQogICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBJRSB0
aHJvd3MgdW5zcGVjaWZpZWQgZXJyb3Igd2hlbiB0b3VjaGluZwogICAvLyBkb2N1bWVudC5hY3Rp
dmVFbGVtZW50IGluIHNvbWUgY2FzZXMgKGR1cmluZyBsb2FkaW5nLCBpbiBpZnJhbWUpCi0gIGlm
IChpZV91cHRvMTApIGFjdGl2ZUVsdCA9IGZ1bmN0aW9uKCkgeworICBpZiAoaWUgJiYgaWVfdmVy
c2lvbiA8IDExKSBhY3RpdmVFbHQgPSBmdW5jdGlvbigpIHsKICAgICB0cnkgeyByZXR1cm4gZG9j
dW1lbnQuYWN0aXZlRWxlbWVudDsgfQogICAgIGNhdGNoKGUpIHsgcmV0dXJuIGRvY3VtZW50LmJv
ZHk7IH0KICAgfTsKIAotICBmdW5jdGlvbiBjbGFzc1Rlc3QoY2xzKSB7IHJldHVybiBuZXcgUmVn
RXhwKCJcXGIiICsgY2xzICsgIlxcYlxccyoiKTsgfQotICBmdW5jdGlvbiBybUNsYXNzKG5vZGUs
IGNscykgewotICAgIHZhciB0ZXN0ID0gY2xhc3NUZXN0KGNscyk7Ci0gICAgaWYgKHRlc3QudGVz
dChub2RlLmNsYXNzTmFtZSkpIG5vZGUuY2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWUucmVwbGFj
ZSh0ZXN0LCAiIik7Ci0gIH0KLSAgZnVuY3Rpb24gYWRkQ2xhc3Mobm9kZSwgY2xzKSB7Ci0gICAg
aWYgKCFjbGFzc1Rlc3QoY2xzKS50ZXN0KG5vZGUuY2xhc3NOYW1lKSkgbm9kZS5jbGFzc05hbWUg
Kz0gIiAiICsgY2xzOwotICB9CisgIGZ1bmN0aW9uIGNsYXNzVGVzdChjbHMpIHsgcmV0dXJuIG5l
dyBSZWdFeHAoIihefFxccykiICsgY2xzICsgIig/OiR8XFxzKVxccyoiKTsgfQorICB2YXIgcm1D
bGFzcyA9IENvZGVNaXJyb3Iucm1DbGFzcyA9IGZ1bmN0aW9uKG5vZGUsIGNscykgeworICAgIHZh
ciBjdXJyZW50ID0gbm9kZS5jbGFzc05hbWU7CisgICAgdmFyIG1hdGNoID0gY2xhc3NUZXN0KGNs
cykuZXhlYyhjdXJyZW50KTsKKyAgICBpZiAobWF0Y2gpIHsKKyAgICAgIHZhciBhZnRlciA9IGN1
cnJlbnQuc2xpY2UobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpOworICAgICAgbm9kZS5j
bGFzc05hbWUgPSBjdXJyZW50LnNsaWNlKDAsIG1hdGNoLmluZGV4KSArIChhZnRlciA/IG1hdGNo
WzFdICsgYWZ0ZXIgOiAiIik7CisgICAgfQorICB9OworICB2YXIgYWRkQ2xhc3MgPSBDb2RlTWly
cm9yLmFkZENsYXNzID0gZnVuY3Rpb24obm9kZSwgY2xzKSB7CisgICAgdmFyIGN1cnJlbnQgPSBu
b2RlLmNsYXNzTmFtZTsKKyAgICBpZiAoIWNsYXNzVGVzdChjbHMpLnRlc3QoY3VycmVudCkpIG5v
ZGUuY2xhc3NOYW1lICs9IChjdXJyZW50ID8gIiAiIDogIiIpICsgY2xzOworICB9OwogICBmdW5j
dGlvbiBqb2luQ2xhc3NlcyhhLCBiKSB7CiAgICAgdmFyIGFzID0gYS5zcGxpdCgiICIpOwogICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgYXMubGVuZ3RoOyBpKyspCkBAIC03MjA3LDcgKzgzNzcsNiBA
QAogICAgIG9uKHdpbmRvdywgInJlc2l6ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgaWYgKHJlc2l6
ZVRpbWVyID09IG51bGwpIHJlc2l6ZVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAg
ICAgICAgcmVzaXplVGltZXIgPSBudWxsOwotICAgICAgICBrbm93blNjcm9sbGJhcldpZHRoID0g
bnVsbDsKICAgICAgICAgZm9yRWFjaENvZGVNaXJyb3Iob25SZXNpemUpOwogICAgICAgfSwgMTAw
KTsKICAgICB9KTsKQEAgLTcyMjMsMzEgKzgzOTIsMjMgQEAKICAgdmFyIGRyYWdBbmREcm9wID0g
ZnVuY3Rpb24oKSB7CiAgICAgLy8gVGhlcmUgaXMgKnNvbWUqIGtpbmQgb2YgZHJhZy1hbmQtZHJv
cCBzdXBwb3J0IGluIElFNi04LCBidXQgSQogICAgIC8vIGNvdWxkbid0IGdldCBpdCB0byB3b3Jr
IHlldC4KLSAgICBpZiAoaWVfdXB0bzgpIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaWUgJiYgaWVf
dmVyc2lvbiA8IDkpIHJldHVybiBmYWxzZTsKICAgICB2YXIgZGl2ID0gZWx0KCdkaXYnKTsKICAg
ICByZXR1cm4gImRyYWdnYWJsZSIgaW4gZGl2IHx8ICJkcmFnRHJvcCIgaW4gZGl2OwogICB9KCk7
CiAKLSAgdmFyIGtub3duU2Nyb2xsYmFyV2lkdGg7Ci0gIGZ1bmN0aW9uIHNjcm9sbGJhcldpZHRo
KG1lYXN1cmUpIHsKLSAgICBpZiAoa25vd25TY3JvbGxiYXJXaWR0aCAhPSBudWxsKSByZXR1cm4g
a25vd25TY3JvbGxiYXJXaWR0aDsKLSAgICB2YXIgdGVzdCA9IGVsdCgiZGl2IiwgbnVsbCwgbnVs
bCwgIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDUwcHg7IG92ZXJmbG93LXg6IHNjcm9sbCIpOwotICAg
IHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1cmUsIHRlc3QpOwotICAgIGlmICh0ZXN0Lm9mZnNl
dFdpZHRoKQotICAgICAga25vd25TY3JvbGxiYXJXaWR0aCA9IHRlc3Qub2Zmc2V0SGVpZ2h0IC0g
dGVzdC5jbGllbnRIZWlnaHQ7Ci0gICAgcmV0dXJuIGtub3duU2Nyb2xsYmFyV2lkdGggfHwgMDsK
LSAgfQotCiAgIHZhciB6d3NwU3VwcG9ydGVkOwogICBmdW5jdGlvbiB6ZXJvV2lkdGhFbGVtZW50
KG1lYXN1cmUpIHsKICAgICBpZiAoendzcFN1cHBvcnRlZCA9PSBudWxsKSB7CiAgICAgICB2YXIg
dGVzdCA9IGVsdCgic3BhbiIsICJcdTIwMGIiKTsKICAgICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRk
KG1lYXN1cmUsIGVsdCgic3BhbiIsIFt0ZXN0LCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieCIp
XSkpOwogICAgICAgaWYgKG1lYXN1cmUuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQgIT0gMCkKLSAg
ICAgICAgendzcFN1cHBvcnRlZCA9IHRlc3Qub2Zmc2V0V2lkdGggPD0gMSAmJiB0ZXN0Lm9mZnNl
dEhlaWdodCA+IDIgJiYgIWllX3VwdG83OworICAgICAgICB6d3NwU3VwcG9ydGVkID0gdGVzdC5v
ZmZzZXRXaWR0aCA8PSAxICYmIHRlc3Qub2Zmc2V0SGVpZ2h0ID4gMiAmJiAhKGllICYmIGllX3Zl
cnNpb24gPCA4KTsKICAgICB9Ci0gICAgaWYgKHp3c3BTdXBwb3J0ZWQpIHJldHVybiBlbHQoInNw
YW4iLCAiXHUyMDBiIik7Ci0gICAgZWxzZSByZXR1cm4gZWx0KCJzcGFuIiwgIlx1MDBhMCIsIG51
bGwsICJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFw
eCIpOworICAgIHZhciBub2RlID0gendzcFN1cHBvcnRlZCA/IGVsdCgic3BhbiIsICJcdTIwMGIi
KSA6CisgICAgICBlbHQoInNwYW4iLCAiXHUwMGEwIiwgbnVsbCwgImRpc3BsYXk6IGlubGluZS1i
bG9jazsgd2lkdGg6IDFweDsgbWFyZ2luLXJpZ2h0OiAtMXB4Iik7CisgICAgbm9kZS5zZXRBdHRy
aWJ1dGUoImNtLXRleHQiLCAiIik7CisgICAgcmV0dXJuIG5vZGU7CiAgIH0KIAogICAvLyBGZWF0
dXJlLWRldGVjdCBJRSdzIGNydW1teSBjbGllbnQgcmVjdCByZXBvcnRpbmcgZm9yIGJpZGkgdGV4
dApAQCAtNzI1NiwxNCArODQxNywxNCBAQAogICAgIGlmIChiYWRCaWRpUmVjdHMgIT0gbnVsbCkg
cmV0dXJuIGJhZEJpZGlSZWN0czsKICAgICB2YXIgdHh0ID0gcmVtb3ZlQ2hpbGRyZW5BbmRBZGQo
bWVhc3VyZSwgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIkFcdTA2MmVBIikpOwogICAgIHZhciBy
MCA9IHJhbmdlKHR4dCwgMCwgMSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgaWYgKHIw
LmxlZnQgPT0gcjAucmlnaHQpIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXIwIHx8IHIwLmxlZnQg
PT0gcjAucmlnaHQpIHJldHVybiBmYWxzZTsgLy8gU2FmYXJpIHJldHVybnMgbnVsbCBpbiBzb21l
IGNhc2VzICgjMjc4MCkKICAgICB2YXIgcjEgPSByYW5nZSh0eHQsIDEsIDIpLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpOwogICAgIHJldHVybiBiYWRCaWRpUmVjdHMgPSAocjEucmlnaHQgLSByMC5y
aWdodCA8IDMpOwogICB9CiAKICAgLy8gU2VlIGlmICIiLnNwbGl0IGlzIHRoZSBicm9rZW4gSUUg
dmVyc2lvbiwgaWYgc28sIHByb3ZpZGUgYW4KICAgLy8gYWx0ZXJuYXRpdmUgd2F5IHRvIHNwbGl0
IGxpbmVzLgotICB2YXIgc3BsaXRMaW5lcyA9IENvZGVNaXJyb3Iuc3BsaXRMaW5lcyA9ICJcblxu
YiIuc3BsaXQoL1xuLykubGVuZ3RoICE9IDMgPyBmdW5jdGlvbihzdHJpbmcpIHsKKyAgdmFyIHNw
bGl0TGluZXNBdXRvID0gQ29kZU1pcnJvci5zcGxpdExpbmVzID0gIlxuXG5iIi5zcGxpdCgvXG4v
KS5sZW5ndGggIT0gMyA/IGZ1bmN0aW9uKHN0cmluZykgewogICAgIHZhciBwb3MgPSAwLCByZXN1
bHQgPSBbXSwgbCA9IHN0cmluZy5sZW5ndGg7CiAgICAgd2hpbGUgKHBvcyA8PSBsKSB7CiAgICAg
ICB2YXIgbmwgPSBzdHJpbmcuaW5kZXhPZigiXG4iLCBwb3MpOwpAQCAtNzI5OCw2ICs4NDU5LDE1
IEBACiAgICAgcmV0dXJuIHR5cGVvZiBlLm9uY29weSA9PSAiZnVuY3Rpb24iOwogICB9KSgpOwog
CisgIHZhciBiYWRab29tZWRSZWN0cyA9IG51bGw7CisgIGZ1bmN0aW9uIGhhc0JhZFpvb21lZFJl
Y3RzKG1lYXN1cmUpIHsKKyAgICBpZiAoYmFkWm9vbWVkUmVjdHMgIT0gbnVsbCkgcmV0dXJuIGJh
ZFpvb21lZFJlY3RzOworICAgIHZhciBub2RlID0gcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3Vy
ZSwgZWx0KCJzcGFuIiwgIngiKSk7CisgICAgdmFyIG5vcm1hbCA9IG5vZGUuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCk7CisgICAgdmFyIGZyb21SYW5nZSA9IHJhbmdlKG5vZGUsIDAsIDEpLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpOworICAgIHJldHVybiBiYWRab29tZWRSZWN0cyA9IE1hdGguYWJz
KG5vcm1hbC5sZWZ0IC0gZnJvbVJhbmdlLmxlZnQpID4gMTsKKyAgfQorCiAgIC8vIEtFWSBOQU1F
UwogCiAgIHZhciBrZXlOYW1lcyA9IHszOiAiRW50ZXIiLCA4OiAiQmFja3NwYWNlIiwgOTogIlRh
YiIsIDEzOiAiRW50ZXIiLCAxNjogIlNoaWZ0IiwgMTc6ICJDdHJsIiwgMTg6ICJBbHQiLApAQCAt
NzM2MCw2ICs4NTMwLDE3IEBACiAgICAgdmFyIGNoID0gIW9yZGVyID8gbGluZS50ZXh0Lmxlbmd0
aCA6IG9yZGVyWzBdLmxldmVsICUgMiA/IGxpbmVMZWZ0KGxpbmUpIDogbGluZVJpZ2h0KGxpbmUp
OwogICAgIHJldHVybiBQb3MobGluZU4gPT0gbnVsbCA/IGxpbmVObyhsaW5lKSA6IGxpbmVOLCBj
aCk7CiAgIH0KKyAgZnVuY3Rpb24gbGluZVN0YXJ0U21hcnQoY20sIHBvcykgeworICAgIHZhciBz
dGFydCA9IGxpbmVTdGFydChjbSwgcG9zLmxpbmUpOworICAgIHZhciBsaW5lID0gZ2V0TGluZShj
bS5kb2MsIHN0YXJ0LmxpbmUpOworICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUpOworICAg
IGlmICghb3JkZXIgfHwgb3JkZXJbMF0ubGV2ZWwgPT0gMCkgeworICAgICAgdmFyIGZpcnN0Tm9u
V1MgPSBNYXRoLm1heCgwLCBsaW5lLnRleHQuc2VhcmNoKC9cUy8pKTsKKyAgICAgIHZhciBpbldT
ID0gcG9zLmxpbmUgPT0gc3RhcnQubGluZSAmJiBwb3MuY2ggPD0gZmlyc3ROb25XUyAmJiBwb3Mu
Y2g7CisgICAgICByZXR1cm4gUG9zKHN0YXJ0LmxpbmUsIGluV1MgPyAwIDogZmlyc3ROb25XUyk7
CisgICAgfQorICAgIHJldHVybiBzdGFydDsKKyAgfQogCiAgIGZ1bmN0aW9uIGNvbXBhcmVCaWRp
TGV2ZWwob3JkZXIsIGEsIGIpIHsKICAgICB2YXIgbGluZWRpciA9IG9yZGVyWzBdLmxldmVsOwpA
QCAtNzU5MCw2ICs4NzcxLDggQEAKICAgICAgICAgbHN0KG9yZGVyKS50byAtPSBtWzBdLmxlbmd0
aDsKICAgICAgICAgb3JkZXIucHVzaChuZXcgQmlkaVNwYW4oMCwgbGVuIC0gbVswXS5sZW5ndGgs
IGxlbikpOwogICAgICAgfQorICAgICAgaWYgKG9yZGVyWzBdLmxldmVsID09IDIpCisgICAgICAg
IG9yZGVyLnVuc2hpZnQobmV3IEJpZGlTcGFuKDEsIG9yZGVyWzBdLnRvLCBvcmRlclswXS50bykp
OwogICAgICAgaWYgKG9yZGVyWzBdLmxldmVsICE9IGxzdChvcmRlcikubGV2ZWwpCiAgICAgICAg
IG9yZGVyLnB1c2gobmV3IEJpZGlTcGFuKG9yZGVyWzBdLmxldmVsLCBsZW4sIGxlbikpOwogCkBA
IC03NTk5LDcgKzg3ODIsNyBAQAogCiAgIC8vIFRIRSBFTkQKIAotICBDb2RlTWlycm9yLnZlcnNp
b24gPSAiNC4yLjAiOworICBDb2RlTWlycm9yLnZlcnNpb24gPSAiNS41LjAiOwogCiAgIHJldHVy
biBDb2RlTWlycm9yOwogfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZmZlZXNjcmlwdC5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2Ny
aXB0LmpzCmluZGV4IDE2OTU2NTAxMjYyODM5ZGFmOWJkZmM1N2YzMmRjYmJkYTY0YzYwZjAuLmRh
MGViMmQ1MTgwYTJjODk2NWExZTEwYjE5ODBjNjE1M2U4YTlmZmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVl
c2NyaXB0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzCkBAIC0xNSwxNCArMTUsMTQgQEAKIH0pKGZ1
bmN0aW9uKENvZGVNaXJyb3IpIHsKICJ1c2Ugc3RyaWN0IjsKIAotQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJjb2ZmZWVzY3JpcHQiLCBmdW5jdGlvbihjb25mKSB7CitDb2RlTWlycm9yLmRlZmluZU1v
ZGUoImNvZmZlZXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmYsIHBhcnNlckNvbmYpIHsKICAgdmFyIEVS
Uk9SQ0xBU1MgPSAiZXJyb3IiOwogCiAgIGZ1bmN0aW9uIHdvcmRSZWdleHAod29yZHMpIHsKICAg
ICByZXR1cm4gbmV3IFJlZ0V4cCgiXigoIiArIHdvcmRzLmpvaW4oIil8KCIpICsgIikpXFxiIik7
CiAgIH0KIAotICB2YXIgb3BlcmF0b3JzID0gL14oPzotPnw9PnxcK1srPV0/fC1bXC09XT98XCpb
XCo9XT98XC9bXC89XT98Wz0hXT18PFs+PF0/PT98Pj4/PT98JT0/fCY9P3xcfD0/fFxePT98XH58
IXxcPykvOworICB2YXIgb3BlcmF0b3JzID0gL14oPzotPnw9PnxcK1srPV0/fC1bXC09XT98XCpb
XCo9XT98XC9bXC89XT98Wz0hXT18PFs+PF0/PT98Pj4/PT98JT0/fCY9P3xcfD0/fFxePT98XH58
IXxcP3wob3J8YW5kfFx8XHx8JiZ8XD8pPSkvOwogICB2YXIgZGVsaW1pdGVycyA9IC9eKD86Wygp
XFtcXXt9LDpgPTtdfFwuXC4/XC4/KS87CiAgIHZhciBpZGVudGlmaWVycyA9IC9eW19BLVphLXok
XVtfQS1aYS16JDAtOV0qLzsKICAgdmFyIHByb3BlcnRpZXMgPSAvXihAfHRoaXNcLilbX0EtWmEt
eiRdW19BLVphLXokMC05XSovOwpAQCAtMzQsNyArMzQsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1v
ZGUoImNvZmZlZXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmYpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICJzd2l0Y2giLCAidHJ5IiwgImNhdGNoIiwgImZpbmFsbHkiLCAiY2xhc3MiXTsKICAgdmFy
IGNvbW1vbktleXdvcmRzID0gWyJicmVhayIsICJieSIsICJjb250aW51ZSIsICJkZWJ1Z2dlciIs
ICJkZWxldGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgImRvIiwgImluIiwgIm9mIiwgIm5l
dyIsICJyZXR1cm4iLCAidGhlbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAidGhpcyIsICJ0
aHJvdyIsICJ3aGVuIiwgInVudGlsIl07CisgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyIs
ICJAIiwgInRocm93IiwgIndoZW4iLCAidW50aWwiLCAiZXh0ZW5kcyJdOwogCiAgIHZhciBrZXl3
b3JkcyA9IHdvcmRSZWdleHAoaW5kZW50S2V5d29yZHMuY29uY2F0KGNvbW1vbktleXdvcmRzKSk7
CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNvZmZlZXNjcmlw
dCIsIGZ1bmN0aW9uKGNvbmYpIHsKICAgICAgICAgfQogICAgICAgfQogICAgICAgaWYgKHNpbmds
ZWxpbmUpIHsKLSAgICAgICAgaWYgKGNvbmYubW9kZS5zaW5nbGVMaW5lU3RyaW5nRXJyb3JzKSB7
CisgICAgICAgIGlmIChwYXJzZXJDb25mLnNpbmdsZUxpbmVTdHJpbmdFcnJvcnMpIHsKICAgICAg
ICAgICBvdXRjbGFzcyA9IEVSUk9SQ0xBU1M7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
c3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CkBAIC0yMTcsNyArMjE3LDcgQEAgQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJjb2ZmZWVzY3JpcHQiLCBmdW5jdGlvbihjb25mKSB7CiAgICAgdHlwZSA9
IHR5cGUgfHwgImNvZmZlZSI7CiAgICAgdmFyIG9mZnNldCA9IDAsIGFsaWduID0gZmFsc2UsIGFs
aWduT2Zmc2V0ID0gbnVsbDsKICAgICBmb3IgKHZhciBzY29wZSA9IHN0YXRlLnNjb3BlOyBzY29w
ZTsgc2NvcGUgPSBzY29wZS5wcmV2KSB7Ci0gICAgICBpZiAoc2NvcGUudHlwZSA9PT0gImNvZmZl
ZSIpIHsKKyAgICAgIGlmIChzY29wZS50eXBlID09PSAiY29mZmVlIiB8fCBzY29wZS50eXBlID09
ICJ9IikgewogICAgICAgICBvZmZzZXQgPSBzY29wZS5vZmZzZXQgKyBjb25mLmluZGVudFVuaXQ7
CiAgICAgICAgIGJyZWFrOwogICAgICAgfQpAQCAtMjc4LDcgKzI3OCw3IEBAIENvZGVNaXJyb3Iu
ZGVmaW5lTW9kZSgiY29mZmVlc2NyaXB0IiwgZnVuY3Rpb24oY29uZikgewogCiAgICAgLy8gSGFu
ZGxlIHNjb3BlIGNoYW5nZXMuCiAgICAgaWYgKGN1cnJlbnQgPT09ICJyZXR1cm4iKSB7Ci0gICAg
ICBzdGF0ZS5kZWRlbnQgKz0gMTsKKyAgICAgIHN0YXRlLmRlZGVudCA9IHRydWU7CiAgICAgfQog
ICAgIGlmICgoKGN1cnJlbnQgPT09ICItPiIgfHwgY3VycmVudCA9PT0gIj0+IikgJiYKICAgICAg
ICAgICFzdGF0ZS5sYW1iZGEgJiYKQEAgLTMxMCw5ICszMTAsMTAgQEAgQ29kZU1pcnJvci5kZWZp
bmVNb2RlKCJjb2ZmZWVzY3JpcHQiLCBmdW5jdGlvbihjb25mKSB7CiAgICAgICBpZiAoc3RhdGUu
c2NvcGUudHlwZSA9PSBjdXJyZW50KQogICAgICAgICBzdGF0ZS5zY29wZSA9IHN0YXRlLnNjb3Bl
LnByZXY7CiAgICAgfQotICAgIGlmIChzdGF0ZS5kZWRlbnQgPiAwICYmIHN0cmVhbS5lb2woKSAm
JiBzdGF0ZS5zY29wZS50eXBlID09ICJjb2ZmZWUiKSB7Ci0gICAgICBpZiAoc3RhdGUuc2NvcGUu
cHJldikgc3RhdGUuc2NvcGUgPSBzdGF0ZS5zY29wZS5wcmV2OwotICAgICAgc3RhdGUuZGVkZW50
IC09IDE7CisgICAgaWYgKHN0YXRlLmRlZGVudCAmJiBzdHJlYW0uZW9sKCkpIHsKKyAgICAgIGlm
IChzdGF0ZS5zY29wZS50eXBlID09ICJjb2ZmZWUiICYmIHN0YXRlLnNjb3BlLnByZXYpCisgICAg
ICAgIHN0YXRlLnNjb3BlID0gc3RhdGUuc2NvcGUucHJldjsKKyAgICAgIHN0YXRlLmRlZGVudCA9
IGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiBzdHlsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29tbWVudC5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJy
b3IvY29tbWVudC5qcwppbmRleCAzYWM0NzY0NTJkZDg2NzdlOTIwMWE3ZmVhOTYxYTc4MTQzYmI0
OTU3Li4yZGQxMTRkMzMyZGM5YjFlMGIxOWNmZmYzZmM2MDA2MWM3Y2I5ZmJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9y
L2NvbW1lbnQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0
ZXJuYWwvQ29kZU1pcnJvci9jb21tZW50LmpzCkBAIC0xMDksNyArMTA5LDcgQEAKICAgQ29kZU1p
cnJvci5kZWZpbmVFeHRlbnNpb24oInVuY29tbWVudCIsIGZ1bmN0aW9uKGZyb20sIHRvLCBvcHRp
b25zKSB7CiAgICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0gbm9PcHRpb25zOwogICAgIHZhciBz
ZWxmID0gdGhpcywgbW9kZSA9IHNlbGYuZ2V0TW9kZUF0KGZyb20pOwotICAgIHZhciBlbmQgPSBN
YXRoLm1pbih0by5saW5lLCBzZWxmLmxhc3RMaW5lKCkpLCBzdGFydCA9IE1hdGgubWluKGZyb20u
bGluZSwgZW5kKTsKKyAgICB2YXIgZW5kID0gTWF0aC5taW4odG8uY2ggIT0gMCB8fCB0by5saW5l
ID09IGZyb20ubGluZSA/IHRvLmxpbmUgOiB0by5saW5lIC0gMSwgc2VsZi5sYXN0TGluZSgpKSwg
c3RhcnQgPSBNYXRoLm1pbihmcm9tLmxpbmUsIGVuZCk7CiAKICAgICAvLyBUcnkgZmluZGluZyBs
aW5lIGNvbW1lbnRzCiAgICAgdmFyIGxpbmVTdHJpbmcgPSBvcHRpb25zLmxpbmVDb21tZW50IHx8
IG1vZGUubGluZUNvbW1lbnQsIGxpbmVzID0gW107CkBAIC0xNTMsNiArMTUzLDE3IEBACiAgICAg
ICAgICEvY29tbWVudC8udGVzdChzZWxmLmdldFRva2VuVHlwZUF0KFBvcyhlbmQsIGNsb3NlICsg
MSkpKSkKICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIC8vIEF2b2lkIGtpbGxpbmcgYmxvY2sg
Y29tbWVudHMgY29tcGxldGVseSBvdXRzaWRlIHRoZSBzZWxlY3Rpb24uCisgICAgLy8gUG9zaXRp
b25zIG9mIHRoZSBsYXN0IHN0YXJ0U3RyaW5nIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIHNlbGVj
dGlvbiwgYW5kIHRoZSBmaXJzdCBlbmRTdHJpbmcgYWZ0ZXIgaXQuCisgICAgdmFyIGxhc3RTdGFy
dCA9IHN0YXJ0TGluZS5sYXN0SW5kZXhPZihzdGFydFN0cmluZywgZnJvbS5jaCk7CisgICAgdmFy
IGZpcnN0RW5kID0gbGFzdFN0YXJ0ID09IC0xID8gLTEgOiBzdGFydExpbmUuc2xpY2UoMCwgZnJv
bS5jaCkuaW5kZXhPZihlbmRTdHJpbmcsIGxhc3RTdGFydCArIHN0YXJ0U3RyaW5nLmxlbmd0aCk7
CisgICAgaWYgKGxhc3RTdGFydCAhPSAtMSAmJiBmaXJzdEVuZCAhPSAtMSAmJiBmaXJzdEVuZCAr
IGVuZFN0cmluZy5sZW5ndGggIT0gZnJvbS5jaCkgcmV0dXJuIGZhbHNlOworICAgIC8vIFBvc2l0
aW9ucyBvZiB0aGUgZmlyc3QgZW5kU3RyaW5nIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlv
biwgYW5kIHRoZSBsYXN0IHN0YXJ0U3RyaW5nIGJlZm9yZSBpdC4KKyAgICBmaXJzdEVuZCA9IGVu
ZExpbmUuaW5kZXhPZihlbmRTdHJpbmcsIHRvLmNoKTsKKyAgICB2YXIgYWxtb3N0TGFzdFN0YXJ0
ID0gZW5kTGluZS5zbGljZSh0by5jaCkubGFzdEluZGV4T2Yoc3RhcnRTdHJpbmcsIGZpcnN0RW5k
IC0gdG8uY2gpOworICAgIGxhc3RTdGFydCA9IChmaXJzdEVuZCA9PSAtMSB8fCBhbG1vc3RMYXN0
U3RhcnQgPT0gLTEpID8gLTEgOiB0by5jaCArIGFsbW9zdExhc3RTdGFydDsKKyAgICBpZiAoZmly
c3RFbmQgIT0gLTEgJiYgbGFzdFN0YXJ0ICE9IC0xICYmIGxhc3RTdGFydCAhPSB0by5jaCkgcmV0
dXJuIGZhbHNlOworCiAgICAgc2VsZi5vcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgICBzZWxm
LnJlcGxhY2VSYW5nZSgiIiwgUG9zKGVuZCwgY2xvc2UgLSAocGFkICYmIGVuZExpbmUuc2xpY2Uo
Y2xvc2UgLSBwYWQubGVuZ3RoLCBjbG9zZSkgPT0gcGFkID8gcGFkLmxlbmd0aCA6IDApKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIFBvcyhlbmQsIGNsb3NlICsgZW5kU3RyaW5nLmxlbmd0aCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJu
YWwvQ29kZU1pcnJvci9jc3MuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nzcy5qcwppbmRleCBhYWZkZGI2YzY3NjM4Y2Y2ZTc0Mzc0
NWUxMWM5MjMzYjIzZWE4YmU5Li42MzY5OGMxNWM5N2Y4OGJiOWY1M2QzN2U5NDE5MWM0ZjBmM2Fk
YzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Db2RlTWlycm9yL2Nzcy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nzcy5qcwpAQCAtMTYsMTMgKzE2LDE1IEBAIENv
ZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcp
IHsKIAogICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0LAogICAgICAgdG9rZW5I
b29rcyA9IHBhcnNlckNvbmZpZy50b2tlbkhvb2tzLAorICAgICAgZG9jdW1lbnRUeXBlcyA9IHBh
cnNlckNvbmZpZy5kb2N1bWVudFR5cGVzIHx8IHt9LAogICAgICAgbWVkaWFUeXBlcyA9IHBhcnNl
ckNvbmZpZy5tZWRpYVR5cGVzIHx8IHt9LAogICAgICAgbWVkaWFGZWF0dXJlcyA9IHBhcnNlckNv
bmZpZy5tZWRpYUZlYXR1cmVzIHx8IHt9LAogICAgICAgcHJvcGVydHlLZXl3b3JkcyA9IHBhcnNl
ckNvbmZpZy5wcm9wZXJ0eUtleXdvcmRzIHx8IHt9LAogICAgICAgbm9uU3RhbmRhcmRQcm9wZXJ0
eUtleXdvcmRzID0gcGFyc2VyQ29uZmlnLm5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcyB8fCB7
fSwKKyAgICAgIGZvbnRQcm9wZXJ0aWVzID0gcGFyc2VyQ29uZmlnLmZvbnRQcm9wZXJ0aWVzIHx8
IHt9LAorICAgICAgY291bnRlckRlc2NyaXB0b3JzID0gcGFyc2VyQ29uZmlnLmNvdW50ZXJEZXNj
cmlwdG9ycyB8fCB7fSwKICAgICAgIGNvbG9yS2V5d29yZHMgPSBwYXJzZXJDb25maWcuY29sb3JL
ZXl3b3JkcyB8fCB7fSwKICAgICAgIHZhbHVlS2V5d29yZHMgPSBwYXJzZXJDb25maWcudmFsdWVL
ZXl3b3JkcyB8fCB7fSwKLSAgICAgIGZvbnRQcm9wZXJ0aWVzID0gcGFyc2VyQ29uZmlnLmZvbnRQ
cm9wZXJ0aWVzIHx8IHt9LAogICAgICAgYWxsb3dOZXN0ZWQgPSBwYXJzZXJDb25maWcuYWxsb3dO
ZXN0ZWQ7CiAKICAgdmFyIHR5cGUsIG92ZXJyaWRlOwpAQCAtNTcsNiArNTksMTEgQEAgQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewog
ICAgICAgaWYgKC9bXGQuXS8udGVzdChzdHJlYW0ucGVlaygpKSkgewogICAgICAgICBzdHJlYW0u
ZWF0V2hpbGUoL1tcdy4lXS8pOwogICAgICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAidW5pdCIp
OworICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL14tW1x3XFxcLV0rLykpIHsKKyAgICAg
ICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOworICAgICAgICBpZiAoc3RyZWFtLm1hdGNo
KC9eXHMqOi8sIGZhbHNlKSkKKyAgICAgICAgICByZXR1cm4gcmV0KCJ2YXJpYWJsZS0yIiwgInZh
cmlhYmxlLWRlZmluaXRpb24iKTsKKyAgICAgICAgcmV0dXJuIHJldCgidmFyaWFibGUtMiIsICJ2
YXJpYWJsZSIpOwogICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goL15cdystLykpIHsKICAg
ICAgICAgcmV0dXJuIHJldCgibWV0YSIsICJtZXRhIik7CiAgICAgICB9CkBAIC02Niw3ICs3Myw5
IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJD
b25maWcpIHsKICAgICAgIHJldHVybiByZXQoInF1YWxpZmllciIsICJxdWFsaWZpZXIiKTsKICAg
ICB9IGVsc2UgaWYgKC9bOjt7fVxbXF1cKFwpXS8udGVzdChjaCkpIHsKICAgICAgIHJldHVybiBy
ZXQobnVsbCwgY2gpOwotICAgIH0gZWxzZSBpZiAoY2ggPT0gInUiICYmIHN0cmVhbS5tYXRjaCgi
cmwoIikpIHsKKyAgICB9IGVsc2UgaWYgKChjaCA9PSAidSIgJiYgc3RyZWFtLm1hdGNoKC9ybCgt
cHJlZml4KT9cKC8pKSB8fAorICAgICAgICAgICAgICAgKGNoID09ICJkIiAmJiBzdHJlYW0ubWF0
Y2goIm9tYWluKCIpKSB8fAorICAgICAgICAgICAgICAgKGNoID09ICJyIiAmJiBzdHJlYW0ubWF0
Y2goImVnZXhwKCIpKSkgewogICAgICAgc3RyZWFtLmJhY2tVcCgxKTsKICAgICAgIHN0YXRlLnRv
a2VuaXplID0gdG9rZW5QYXJlbnRoZXNpemVkOwogICAgICAgcmV0dXJuIHJldCgicHJvcGVydHki
LCAid29yZCIpOwpAQCAtMTQ4LDEwICsxNTcsMTEgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJj
c3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgcmV0dXJuIHB1c2hD
b250ZXh0KHN0YXRlLCBzdHJlYW0sICJibG9jayIpOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSAi
fSIgJiYgc3RhdGUuY29udGV4dC5wcmV2KSB7CiAgICAgICByZXR1cm4gcG9wQ29udGV4dChzdGF0
ZSk7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09ICJAbWVkaWEiKSB7Ci0gICAgICByZXR1cm4gcHVz
aENvbnRleHQoc3RhdGUsIHN0cmVhbSwgIm1lZGlhIik7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09
ICJAZm9udC1mYWNlIikgewotICAgICAgcmV0dXJuICJmb250X2ZhY2VfYmVmb3JlIjsKKyAgICB9
IGVsc2UgaWYgKC9AKG1lZGlhfHN1cHBvcnRzfCgtbW96LSk/ZG9jdW1lbnQpLy50ZXN0KHR5cGUp
KSB7CisgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgImF0QmxvY2siKTsK
KyAgICB9IGVsc2UgaWYgKC9AKGZvbnQtZmFjZXxjb3VudGVyLXN0eWxlKS8udGVzdCh0eXBlKSkg
eworICAgICAgc3RhdGUuc3RhdGVBcmcgPSB0eXBlOworICAgICAgcmV0dXJuICJyZXN0cmljdGVk
X2F0QmxvY2tfYmVmb3JlIjsKICAgICB9IGVsc2UgaWYgKC9eQCgtKG1venxtc3xvfHdlYmtpdCkt
KT9rZXlmcmFtZXMkLy50ZXN0KHR5cGUpKSB7CiAgICAgICByZXR1cm4gImtleWZyYW1lcyI7CiAg
ICAgfSBlbHNlIGlmICh0eXBlICYmIHR5cGUuY2hhckF0KDApID09ICJAIikgewpAQCAtMTgyLDcg
KzE5Miw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBw
YXJzZXJDb25maWcpIHsKICAgICAgICAgb3ZlcnJpZGUgPSAic3RyaW5nLTIiOwogICAgICAgICBy
ZXR1cm4gIm1heWJlcHJvcCI7CiAgICAgICB9IGVsc2UgaWYgKGFsbG93TmVzdGVkKSB7Ci0gICAg
ICAgIG92ZXJyaWRlID0gc3RyZWFtLm1hdGNoKC9eXHMqOi8sIGZhbHNlKSA/ICJwcm9wZXJ0eSIg
OiAidGFnIjsKKyAgICAgICAgb3ZlcnJpZGUgPSBzdHJlYW0ubWF0Y2goL15ccyo6KD86XHN8JCkv
LCBmYWxzZSkgPyAicHJvcGVydHkiIDogInRhZyI7CiAgICAgICAgIHJldHVybiAiYmxvY2siOwog
ICAgICAgfSBlbHNlIHsKICAgICAgICAgb3ZlcnJpZGUgKz0gIiBlcnJvciI7CkBAIC0yMjksNiAr
MjM5LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBh
cnNlckNvbmZpZykgewogICAgIGlmICh0eXBlID09ICJ7IiB8fCB0eXBlID09ICJ9IikgcmV0dXJu
IHBvcEFuZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgaWYgKHR5cGUgPT0gIikiKSBy
ZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gcHVz
aENvbnRleHQoc3RhdGUsIHN0cmVhbSwgInBhcmVucyIpOworICAgIGlmICh0eXBlID09ICJpbnRl
cnBvbGF0aW9uIikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJpbnRlcnBvbGF0
aW9uIik7CiAgICAgaWYgKHR5cGUgPT0gIndvcmQiKSB3b3JkQXNWYWx1ZShzdHJlYW0pOwogICAg
IHJldHVybiAicGFyZW5zIjsKICAgfTsKQEAgLTI0MSw0NyArMjUyLDY1IEBAIENvZGVNaXJyb3Iu
ZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICBy
ZXR1cm4gcGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKICAgfTsKIAotICBzdGF0ZXMubWVkaWEg
PSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7Ci0gICAgaWYgKHR5cGUgPT0gIigiKSBy
ZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgIm1lZGlhX3BhcmVucyIpOworICBzdGF0
ZXMuYXRCbG9jayA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgICBpZiAodHlw
ZSA9PSAiKCIpIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAiYXRCbG9ja19wYXJl
bnMiKTsKICAgICBpZiAodHlwZSA9PSAifSIpIHJldHVybiBwb3BBbmRQYXNzKHR5cGUsIHN0cmVh
bSwgc3RhdGUpOwogICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIHBvcENvbnRleHQoc3RhdGUp
ICYmIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sIGFsbG93TmVzdGVkID8gImJsb2NrIiA6ICJ0
b3AiKTsKIAogICAgIGlmICh0eXBlID09ICJ3b3JkIikgewogICAgICAgdmFyIHdvcmQgPSBzdHJl
YW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICBpZiAod29yZCA9PSAib25seSIgfHwg
d29yZCA9PSAibm90IiB8fCB3b3JkID09ICJhbmQiKQorICAgICAgaWYgKHdvcmQgPT0gIm9ubHki
IHx8IHdvcmQgPT0gIm5vdCIgfHwgd29yZCA9PSAiYW5kIiB8fCB3b3JkID09ICJvciIpCiAgICAg
ICAgIG92ZXJyaWRlID0gImtleXdvcmQiOworICAgICAgZWxzZSBpZiAoZG9jdW1lbnRUeXBlcy5o
YXNPd25Qcm9wZXJ0eSh3b3JkKSkKKyAgICAgICAgb3ZlcnJpZGUgPSAidGFnIjsKICAgICAgIGVs
c2UgaWYgKG1lZGlhVHlwZXMuaGFzT3duUHJvcGVydHkod29yZCkpCiAgICAgICAgIG92ZXJyaWRl
ID0gImF0dHJpYnV0ZSI7CiAgICAgICBlbHNlIGlmIChtZWRpYUZlYXR1cmVzLmhhc093blByb3Bl
cnR5KHdvcmQpKQogICAgICAgICBvdmVycmlkZSA9ICJwcm9wZXJ0eSI7CisgICAgICBlbHNlIGlm
IChwcm9wZXJ0eUtleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKQorICAgICAgICBvdmVycmlk
ZSA9ICJwcm9wZXJ0eSI7CisgICAgICBlbHNlIGlmIChub25TdGFuZGFyZFByb3BlcnR5S2V5d29y
ZHMuaGFzT3duUHJvcGVydHkod29yZCkpCisgICAgICAgIG92ZXJyaWRlID0gInN0cmluZy0yIjsK
KyAgICAgIGVsc2UgaWYgKHZhbHVlS2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpCisgICAg
ICAgIG92ZXJyaWRlID0gImF0b20iOworICAgICAgZWxzZSBpZiAoY29sb3JLZXl3b3Jkcy5oYXNP
d25Qcm9wZXJ0eSh3b3JkKSkKKyAgICAgICAgb3ZlcnJpZGUgPSAia2V5d29yZCI7CiAgICAgICBl
bHNlCiAgICAgICAgIG92ZXJyaWRlID0gImVycm9yIjsKICAgICB9CiAgICAgcmV0dXJuIHN0YXRl
LmNvbnRleHQudHlwZTsKICAgfTsKIAotICBzdGF0ZXMubWVkaWFfcGFyZW5zID0gZnVuY3Rpb24o
dHlwZSwgc3RyZWFtLCBzdGF0ZSkgeworICBzdGF0ZXMuYXRCbG9ja19wYXJlbnMgPSBmdW5jdGlv
bih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CiAgICAgaWYgKHR5cGUgPT0gIikiKSByZXR1cm4gcG9w
Q29udGV4dChzdGF0ZSk7CiAgICAgaWYgKHR5cGUgPT0gInsiIHx8IHR5cGUgPT0gIn0iKSByZXR1
cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlLCAyKTsKLSAgICByZXR1cm4gc3RhdGVz
Lm1lZGlhKHR5cGUsIHN0cmVhbSwgc3RhdGUpOworICAgIHJldHVybiBzdGF0ZXMuYXRCbG9jayh0
eXBlLCBzdHJlYW0sIHN0YXRlKTsKICAgfTsKIAotICBzdGF0ZXMuZm9udF9mYWNlX2JlZm9yZSA9
IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgc3RhdGVzLnJlc3RyaWN0ZWRfYXRC
bG9ja19iZWZvcmUgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CiAgICAgaWYgKHR5
cGUgPT0gInsiKQotICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJmb250
X2ZhY2UiKTsKKyAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAicmVzdHJp
Y3RlZF9hdEJsb2NrIik7CisgICAgaWYgKHR5cGUgPT0gIndvcmQiICYmIHN0YXRlLnN0YXRlQXJn
ID09ICJAY291bnRlci1zdHlsZSIpIHsKKyAgICAgIG92ZXJyaWRlID0gInZhcmlhYmxlIjsKKyAg
ICAgIHJldHVybiAicmVzdHJpY3RlZF9hdEJsb2NrX2JlZm9yZSI7CisgICAgfQogICAgIHJldHVy
biBwYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwogICB9OwogCi0gIHN0YXRlcy5mb250X2ZhY2Ug
PSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7Ci0gICAgaWYgKHR5cGUgPT0gIn0iKSBy
ZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7CisgIHN0YXRlcy5yZXN0cmljdGVkX2F0QmxvY2sgPSBm
dW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIn0iKSB7Cisg
ICAgICBzdGF0ZS5zdGF0ZUFyZyA9IG51bGw7CisgICAgICByZXR1cm4gcG9wQ29udGV4dChzdGF0
ZSk7CisgICAgfQogICAgIGlmICh0eXBlID09ICJ3b3JkIikgewotICAgICAgaWYgKCFmb250UHJv
cGVydGllcy5oYXNPd25Qcm9wZXJ0eShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKQor
ICAgICAgaWYgKChzdGF0ZS5zdGF0ZUFyZyA9PSAiQGZvbnQtZmFjZSIgJiYgIWZvbnRQcm9wZXJ0
aWVzLmhhc093blByb3BlcnR5KHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKSkpIHx8Cisg
ICAgICAgICAgKHN0YXRlLnN0YXRlQXJnID09ICJAY291bnRlci1zdHlsZSIgJiYgIWNvdW50ZXJE
ZXNjcmlwdG9ycy5oYXNPd25Qcm9wZXJ0eShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkp
KSkKICAgICAgICAgb3ZlcnJpZGUgPSAiZXJyb3IiOwogICAgICAgZWxzZQogICAgICAgICBvdmVy
cmlkZSA9ICJwcm9wZXJ0eSI7CiAgICAgICByZXR1cm4gIm1heWJlcHJvcCI7CiAgICAgfQotICAg
IHJldHVybiAiZm9udF9mYWNlIjsKKyAgICByZXR1cm4gInJlc3RyaWN0ZWRfYXRCbG9jayI7CiAg
IH07CiAKICAgc3RhdGVzLmtleWZyYW1lcyA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUp
IHsKQEAgLTMwMSw3ICszMzAsOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0
aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIHN0YXRlcy5pbnRlcnBvbGF0aW9uID0gZnVu
Y3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgewogICAgIGlmICh0eXBlID09ICJ9IikgcmV0dXJu
IHBvcENvbnRleHQoc3RhdGUpOwogICAgIGlmICh0eXBlID09ICJ7IiB8fCB0eXBlID09ICI7Iikg
cmV0dXJuIHBvcEFuZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7Ci0gICAgaWYgKHR5cGUgIT0g
InZhcmlhYmxlIikgb3ZlcnJpZGUgPSAiZXJyb3IiOworICAgIGlmICh0eXBlID09ICJ3b3JkIikg
b3ZlcnJpZGUgPSAidmFyaWFibGUiOworICAgIGVsc2UgaWYgKHR5cGUgIT0gInZhcmlhYmxlIiAm
JiB0eXBlICE9ICIoIiAmJiB0eXBlICE9ICIpIikgb3ZlcnJpZGUgPSAiZXJyb3IiOwogICAgIHJl
dHVybiAiaW50ZXJwb2xhdGlvbiI7CiAgIH07CiAKQEAgLTMwOSw2ICszMzksNyBAQCBDb2RlTWly
cm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAg
ICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkgewogICAgICAgcmV0dXJuIHt0b2tlbml6ZTog
bnVsbCwKICAgICAgICAgICAgICAgc3RhdGU6ICJ0b3AiLAorICAgICAgICAgICAgICBzdGF0ZUFy
ZzogbnVsbCwKICAgICAgICAgICAgICAgY29udGV4dDogbmV3IENvbnRleHQoInRvcCIsIGJhc2Ug
fHwgMCwgbnVsbCl9OwogICAgIH0sCiAKQEAgLTMyOSw5ICszNjAsOSBAQCBDb2RlTWlycm9yLmRl
ZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICB2
YXIgaW5kZW50ID0gY3guaW5kZW50OwogICAgICAgaWYgKGN4LnR5cGUgPT0gInByb3AiICYmIChj
aCA9PSAifSIgfHwgY2ggPT0gIikiKSkgY3ggPSBjeC5wcmV2OwogICAgICAgaWYgKGN4LnByZXYg
JiYKLSAgICAgICAgICAoY2ggPT0gIn0iICYmIChjeC50eXBlID09ICJibG9jayIgfHwgY3gudHlw
ZSA9PSAidG9wIiB8fCBjeC50eXBlID09ICJpbnRlcnBvbGF0aW9uIiB8fCBjeC50eXBlID09ICJm
b250X2ZhY2UiKSB8fAotICAgICAgICAgICBjaCA9PSAiKSIgJiYgKGN4LnR5cGUgPT0gInBhcmVu
cyIgfHwgY3gudHlwZSA9PSAibWVkaWFfcGFyZW5zIikgfHwKLSAgICAgICAgICAgY2ggPT0gInsi
ICYmIChjeC50eXBlID09ICJhdCIgfHwgY3gudHlwZSA9PSAibWVkaWEiKSkpIHsKKyAgICAgICAg
ICAoY2ggPT0gIn0iICYmIChjeC50eXBlID09ICJibG9jayIgfHwgY3gudHlwZSA9PSAidG9wIiB8
fCBjeC50eXBlID09ICJpbnRlcnBvbGF0aW9uIiB8fCBjeC50eXBlID09ICJyZXN0cmljdGVkX2F0
QmxvY2siKSB8fAorICAgICAgICAgICBjaCA9PSAiKSIgJiYgKGN4LnR5cGUgPT0gInBhcmVucyIg
fHwgY3gudHlwZSA9PSAiYXRCbG9ja19wYXJlbnMiKSB8fAorICAgICAgICAgICBjaCA9PSAieyIg
JiYgKGN4LnR5cGUgPT0gImF0IiB8fCBjeC50eXBlID09ICJhdEJsb2NrIikpKSB7CiAgICAgICAg
IGluZGVudCA9IGN4LmluZGVudCAtIGluZGVudFVuaXQ7CiAgICAgICAgIGN4ID0gY3gucHJldjsK
ICAgICAgIH0KQEAgLTM1Myw2ICszODQsMTAgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3Mi
LCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIHJldHVybiBrZXlzOwogICB9
CiAKKyAgdmFyIGRvY3VtZW50VHlwZXNfID0gWworICAgICJkb21haW4iLCAicmVnZXhwIiwgInVy
bCIsICJ1cmwtcHJlZml4IgorICBdLCBkb2N1bWVudFR5cGVzID0ga2V5U2V0KGRvY3VtZW50VHlw
ZXNfKTsKKwogICB2YXIgbWVkaWFUeXBlc18gPSBbCiAgICAgImFsbCIsICJhdXJhbCIsICJicmFp
bGxlIiwgImhhbmRoZWxkIiwgInByaW50IiwgInByb2plY3Rpb24iLCAic2NyZWVuIiwKICAgICAi
dHR5IiwgInR2IiwgImVtYm9zc2VkIgpAQCAtNDYxLDEzICs0OTYsMjMgQEAgQ29kZU1pcnJvci5k
ZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICJn
bHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCIsICJ0ZXh0LWFuY2hvciIsICJ3cml0aW5nLW1vZGUi
CiAgIF0sIHByb3BlcnR5S2V5d29yZHMgPSBrZXlTZXQocHJvcGVydHlLZXl3b3Jkc18pOwogCi0g
IHZhciBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMgPSBbCisgIHZhciBub25TdGFuZGFyZFBy
b3BlcnR5S2V5d29yZHNfID0gWwogICAgICJzY3JvbGxiYXItYXJyb3ctY29sb3IiLCAic2Nyb2xs
YmFyLWJhc2UtY29sb3IiLCAic2Nyb2xsYmFyLWRhcmstc2hhZG93LWNvbG9yIiwKICAgICAic2Ny
b2xsYmFyLWZhY2UtY29sb3IiLCAic2Nyb2xsYmFyLWhpZ2hsaWdodC1jb2xvciIsICJzY3JvbGxi
YXItc2hhZG93LWNvbG9yIiwKICAgICAic2Nyb2xsYmFyLTNkLWxpZ2h0LWNvbG9yIiwgInNjcm9s
bGJhci10cmFjay1jb2xvciIsICJzaGFwZS1pbnNpZGUiLAogICAgICJzZWFyY2hmaWVsZC1jYW5j
ZWwtYnV0dG9uIiwgInNlYXJjaGZpZWxkLWRlY29yYXRpb24iLCAic2VhcmNoZmllbGQtcmVzdWx0
cy1idXR0b24iLAogICAgICJzZWFyY2hmaWVsZC1yZXN1bHRzLWRlY29yYXRpb24iLCAiem9vbSIK
LSAgXSwgbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzID0ga2V5U2V0KG5vblN0YW5kYXJkUHJv
cGVydHlLZXl3b3Jkcyk7CisgIF0sIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcyA9IGtleVNl
dChub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHNfKTsKKworICB2YXIgZm9udFByb3BlcnRpZXNf
ID0gWworICAgICJmb250LWZhbWlseSIsICJzcmMiLCAidW5pY29kZS1yYW5nZSIsICJmb250LXZh
cmlhbnQiLCAiZm9udC1mZWF0dXJlLXNldHRpbmdzIiwKKyAgICAiZm9udC1zdHJldGNoIiwgImZv
bnQtd2VpZ2h0IiwgImZvbnQtc3R5bGUiCisgIF0sIGZvbnRQcm9wZXJ0aWVzID0ga2V5U2V0KGZv
bnRQcm9wZXJ0aWVzXyk7CisKKyAgdmFyIGNvdW50ZXJEZXNjcmlwdG9yc18gPSBbCisgICAgImFk
ZGl0aXZlLXN5bWJvbHMiLCAiZmFsbGJhY2siLCAibmVnYXRpdmUiLCAicGFkIiwgInByZWZpeCIs
ICJyYW5nZSIsCisgICAgInNwZWFrLWFzIiwgInN1ZmZpeCIsICJzeW1ib2xzIiwgInN5c3RlbSIK
KyAgXSwgY291bnRlckRlc2NyaXB0b3JzID0ga2V5U2V0KGNvdW50ZXJEZXNjcmlwdG9yc18pOwog
CiAgIHZhciBjb2xvcktleXdvcmRzXyA9IFsKICAgICAiYWxpY2VibHVlIiwgImFudGlxdWV3aGl0
ZSIsICJhcXVhIiwgImFxdWFtYXJpbmUiLCAiYXp1cmUiLCAiYmVpZ2UiLApAQCAtNDkxLDU0ICs1
MzYsNTcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBh
cnNlckNvbmZpZykgewogICAgICJuYXZham93aGl0ZSIsICJuYXZ5IiwgIm9sZGxhY2UiLCAib2xp
dmUiLCAib2xpdmVkcmFiIiwgIm9yYW5nZSIsICJvcmFuZ2VyZWQiLAogICAgICJvcmNoaWQiLCAi
cGFsZWdvbGRlbnJvZCIsICJwYWxlZ3JlZW4iLCAicGFsZXR1cnF1b2lzZSIsICJwYWxldmlvbGV0
cmVkIiwKICAgICAicGFwYXlhd2hpcCIsICJwZWFjaHB1ZmYiLCAicGVydSIsICJwaW5rIiwgInBs
dW0iLCAicG93ZGVyYmx1ZSIsCi0gICAgInB1cnBsZSIsICJyZWJlY2NhcHVycGxlIiwgInJlZCIs
ICJyb3N5YnJvd24iLCAicm95YWxibHVlIiwgInNhZGRsZWJyb3duIiwgInNhbG1vbiIsCi0gICAg
InNhbmR5YnJvd24iLCAic2VhZ3JlZW4iLCAic2Vhc2hlbGwiLCAic2llbm5hIiwgInNpbHZlciIs
ICJza3libHVlIiwKKyAgICAicHVycGxlIiwgInJlYmVjY2FwdXJwbGUiLCAicmVkIiwgInJvc3li
cm93biIsICJyb3lhbGJsdWUiLCAic2FkZGxlYnJvd24iLAorICAgICJzYWxtb24iLCAic2FuZHli
cm93biIsICJzZWFncmVlbiIsICJzZWFzaGVsbCIsICJzaWVubmEiLCAic2lsdmVyIiwgInNreWJs
dWUiLAogICAgICJzbGF0ZWJsdWUiLCAic2xhdGVncmF5IiwgInNub3ciLCAic3ByaW5nZ3JlZW4i
LCAic3RlZWxibHVlIiwgInRhbiIsCiAgICAgInRlYWwiLCAidGhpc3RsZSIsICJ0b21hdG8iLCAi
dHVycXVvaXNlIiwgInZpb2xldCIsICJ3aGVhdCIsICJ3aGl0ZSIsCiAgICAgIndoaXRlc21va2Ui
LCAieWVsbG93IiwgInllbGxvd2dyZWVuIgogICBdLCBjb2xvcktleXdvcmRzID0ga2V5U2V0KGNv
bG9yS2V5d29yZHNfKTsKIAogICB2YXIgdmFsdWVLZXl3b3Jkc18gPSBbCi0gICAgImFib3ZlIiwg
ImFic29sdXRlIiwgImFjdGl2ZWJvcmRlciIsICJhY3RpdmVjYXB0aW9uIiwgImFmYXIiLAotICAg
ICJhZnRlci13aGl0ZS1zcGFjZSIsICJhaGVhZCIsICJhbGlhcyIsICJhbGwiLCAiYWxsLXNjcm9s
bCIsICJhbHRlcm5hdGUiLAorICAgICJhYm92ZSIsICJhYnNvbHV0ZSIsICJhY3RpdmVib3JkZXIi
LCAiYWRkaXRpdmUiLCAiYWN0aXZlY2FwdGlvbiIsICJhZmFyIiwKKyAgICAiYWZ0ZXItd2hpdGUt
c3BhY2UiLCAiYWhlYWQiLCAiYWxpYXMiLCAiYWxsIiwgImFsbC1zY3JvbGwiLCAiYWxwaGFiZXRp
YyIsICJhbHRlcm5hdGUiLAogICAgICJhbHdheXMiLCAiYW1oYXJpYyIsICJhbWhhcmljLWFiZWdl
ZGUiLCAiYW50aWFsaWFzZWQiLCAiYXBwd29ya3NwYWNlIiwKLSAgICAiYXJhYmljLWluZGljIiwg
ImFybWVuaWFuIiwgImFzdGVyaXNrcyIsICJhdXRvIiwgImF2b2lkIiwgImF2b2lkLWNvbHVtbiIs
ICJhdm9pZC1wYWdlIiwKKyAgICAiYXJhYmljLWluZGljIiwgImFybWVuaWFuIiwgImFzdGVyaXNr
cyIsICJhdHRyIiwgImF1dG8iLCAiYXZvaWQiLCAiYXZvaWQtY29sdW1uIiwgImF2b2lkLXBhZ2Ui
LAogICAgICJhdm9pZC1yZWdpb24iLCAiYmFja2dyb3VuZCIsICJiYWNrd2FyZHMiLCAiYmFzZWxp
bmUiLCAiYmVsb3ciLCAiYmlkaS1vdmVycmlkZSIsICJiaW5hcnkiLAogICAgICJiZW5nYWxpIiwg
ImJsaW5rIiwgImJsb2NrIiwgImJsb2NrLWF4aXMiLCAiYm9sZCIsICJib2xkZXIiLCAiYm9yZGVy
IiwgImJvcmRlci1ib3giLAotICAgICJib3RoIiwgImJvdHRvbSIsICJicmVhayIsICJicmVhay1h
bGwiLCAiYnJlYWstd29yZCIsICJidXR0b24iLCAiYnV0dG9uLWJldmVsIiwKLSAgICAiYnV0dG9u
ZmFjZSIsICJidXR0b25oaWdobGlnaHQiLCAiYnV0dG9uc2hhZG93IiwgImJ1dHRvbnRleHQiLCAi
Y2FtYm9kaWFuIiwKKyAgICAiYm90aCIsICJib3R0b20iLCAiYnJlYWsiLCAiYnJlYWstYWxsIiwg
ImJyZWFrLXdvcmQiLCAiYnVsbGV0cyIsICJidXR0b24iLCAiYnV0dG9uLWJldmVsIiwKKyAgICAi
YnV0dG9uZmFjZSIsICJidXR0b25oaWdobGlnaHQiLCAiYnV0dG9uc2hhZG93IiwgImJ1dHRvbnRl
eHQiLCAiY2FsYyIsICJjYW1ib2RpYW4iLAogICAgICJjYXBpdGFsaXplIiwgImNhcHMtbG9jay1p
bmRpY2F0b3IiLCAiY2FwdGlvbiIsICJjYXB0aW9udGV4dCIsICJjYXJldCIsCi0gICAgImNlbGwi
LCAiY2VudGVyIiwgImNoZWNrYm94IiwgImNpcmNsZSIsICJjamstZWFydGhseS1icmFuY2giLAor
ICAgICJjZWxsIiwgImNlbnRlciIsICJjaGVja2JveCIsICJjaXJjbGUiLCAiY2prLWRlY2ltYWwi
LCAiY2prLWVhcnRobHktYnJhbmNoIiwKICAgICAiY2prLWhlYXZlbmx5LXN0ZW0iLCAiY2prLWlk
ZW9ncmFwaGljIiwgImNsZWFyIiwgImNsaXAiLCAiY2xvc2UtcXVvdGUiLAogICAgICJjb2wtcmVz
aXplIiwgImNvbGxhcHNlIiwgImNvbHVtbiIsICJjb21wYWN0IiwgImNvbmRlbnNlZCIsICJjb250
YWluIiwgImNvbnRlbnQiLAotICAgICJjb250ZW50LWJveCIsICJjb250ZXh0LW1lbnUiLCAiY29u
dGludW91cyIsICJjb3B5IiwgImNvdmVyIiwgImNyb3AiLAotICAgICJjcm9zcyIsICJjcm9zc2hh
aXIiLCAiY3VycmVudGNvbG9yIiwgImN1cnNpdmUiLCAiZGFzaGVkIiwgImRlY2ltYWwiLAorICAg
ICJjb250ZW50LWJveCIsICJjb250ZXh0LW1lbnUiLCAiY29udGludW91cyIsICJjb3B5IiwgImNv
dW50ZXIiLCAiY291bnRlcnMiLCAiY292ZXIiLCAiY3JvcCIsCisgICAgImNyb3NzIiwgImNyb3Nz
aGFpciIsICJjdXJyZW50Y29sb3IiLCAiY3Vyc2l2ZSIsICJjeWNsaWMiLCAiZGFzaGVkIiwgImRl
Y2ltYWwiLAogICAgICJkZWNpbWFsLWxlYWRpbmctemVybyIsICJkZWZhdWx0IiwgImRlZmF1bHQt
YnV0dG9uIiwgImRlc3RpbmF0aW9uLWF0b3AiLAogICAgICJkZXN0aW5hdGlvbi1pbiIsICJkZXN0
aW5hdGlvbi1vdXQiLCAiZGVzdGluYXRpb24tb3ZlciIsICJkZXZhbmFnYXJpIiwKLSAgICAiZGlz
YyIsICJkaXNjYXJkIiwgImRvY3VtZW50IiwgImRvdC1kYXNoIiwgImRvdC1kb3QtZGFzaCIsICJk
b3R0ZWQiLAotICAgICJkb3VibGUiLCAiZG93biIsICJlLXJlc2l6ZSIsICJlYXNlIiwgImVhc2Ut
aW4iLCAiZWFzZS1pbi1vdXQiLCAiZWFzZS1vdXQiLAorICAgICJkaXNjIiwgImRpc2NhcmQiLCAi
ZGlzY2xvc3VyZS1jbG9zZWQiLCAiZGlzY2xvc3VyZS1vcGVuIiwgImRvY3VtZW50IiwKKyAgICAi
ZG90LWRhc2giLCAiZG90LWRvdC1kYXNoIiwKKyAgICAiZG90dGVkIiwgImRvdWJsZSIsICJkb3du
IiwgImUtcmVzaXplIiwgImVhc2UiLCAiZWFzZS1pbiIsICJlYXNlLWluLW91dCIsICJlYXNlLW91
dCIsCiAgICAgImVsZW1lbnQiLCAiZWxsaXBzZSIsICJlbGxpcHNpcyIsICJlbWJlZCIsICJlbmQi
LCAiZXRoaW9waWMiLCAiZXRoaW9waWMtYWJlZ2VkZSIsCiAgICAgImV0aGlvcGljLWFiZWdlZGUt
YW0tZXQiLCAiZXRoaW9waWMtYWJlZ2VkZS1nZXoiLCAiZXRoaW9waWMtYWJlZ2VkZS10aS1lciIs
CiAgICAgImV0aGlvcGljLWFiZWdlZGUtdGktZXQiLCAiZXRoaW9waWMtaGFsZWhhbWUtYWEtZXIi
LAogICAgICJldGhpb3BpYy1oYWxlaGFtZS1hYS1ldCIsICJldGhpb3BpYy1oYWxlaGFtZS1hbS1l
dCIsCiAgICAgImV0aGlvcGljLWhhbGVoYW1lLWdleiIsICJldGhpb3BpYy1oYWxlaGFtZS1vbS1l
dCIsCiAgICAgImV0aGlvcGljLWhhbGVoYW1lLXNpZC1ldCIsICJldGhpb3BpYy1oYWxlaGFtZS1z
by1ldCIsCi0gICAgImV0aGlvcGljLWhhbGVoYW1lLXRpLWVyIiwgImV0aGlvcGljLWhhbGVoYW1l
LXRpLWV0IiwKLSAgICAiZXRoaW9waWMtaGFsZWhhbWUtdGlnIiwgImV3LXJlc2l6ZSIsICJleHBh
bmRlZCIsICJleHRyYS1jb25kZW5zZWQiLAotICAgICJleHRyYS1leHBhbmRlZCIsICJmYW50YXN5
IiwgImZhc3QiLCAiZmlsbCIsICJmaXhlZCIsICJmbGF0IiwgImZvb3Rub3RlcyIsCisgICAgImV0
aGlvcGljLWhhbGVoYW1lLXRpLWVyIiwgImV0aGlvcGljLWhhbGVoYW1lLXRpLWV0IiwgImV0aGlv
cGljLWhhbGVoYW1lLXRpZyIsCisgICAgImV0aGlvcGljLW51bWVyaWMiLCAiZXctcmVzaXplIiwg
ImV4cGFuZGVkIiwgImV4dGVuZHMiLCAiZXh0cmEtY29uZGVuc2VkIiwKKyAgICAiZXh0cmEtZXhw
YW5kZWQiLCAiZmFudGFzeSIsICJmYXN0IiwgImZpbGwiLCAiZml4ZWQiLCAiZmxhdCIsICJmbGV4
IiwgImZvb3Rub3RlcyIsCiAgICAgImZvcndhcmRzIiwgImZyb20iLCAiZ2VvbWV0cmljUHJlY2lz
aW9uIiwgImdlb3JnaWFuIiwgImdyYXl0ZXh0IiwgImdyb292ZSIsCiAgICAgImd1amFyYXRpIiwg
Imd1cm11a2hpIiwgImhhbmQiLCAiaGFuZ3VsIiwgImhhbmd1bC1jb25zb25hbnQiLCAiaGVicmV3
IiwKICAgICAiaGVscCIsICJoaWRkZW4iLCAiaGlkZSIsICJoaWdoZXIiLCAiaGlnaGxpZ2h0Iiwg
ImhpZ2hsaWdodHRleHQiLAogICAgICJoaXJhZ2FuYSIsICJoaXJhZ2FuYS1pcm9oYSIsICJob3Jp
em9udGFsIiwgImhzbCIsICJoc2xhIiwgImljb24iLCAiaWdub3JlIiwKICAgICAiaW5hY3RpdmVi
b3JkZXIiLCAiaW5hY3RpdmVjYXB0aW9uIiwgImluYWN0aXZlY2FwdGlvbnRleHQiLCAiaW5maW5p
dGUiLAogICAgICJpbmZvYmFja2dyb3VuZCIsICJpbmZvdGV4dCIsICJpbmhlcml0IiwgImluaXRp
YWwiLCAiaW5saW5lIiwgImlubGluZS1heGlzIiwKLSAgICAiaW5saW5lLWJsb2NrIiwgImlubGlu
ZS10YWJsZSIsICJpbnNldCIsICJpbnNpZGUiLCAiaW50cmluc2ljIiwgImludmVydCIsCi0gICAg
Iml0YWxpYyIsICJqdXN0aWZ5IiwgImthbm5hZGEiLCAia2F0YWthbmEiLCAia2F0YWthbmEtaXJv
aGEiLCAia2VlcC1hbGwiLCAia2htZXIiLAorICAgICJpbmxpbmUtYmxvY2siLCAiaW5saW5lLWZs
ZXgiLCAiaW5saW5lLXRhYmxlIiwgImluc2V0IiwgImluc2lkZSIsICJpbnRyaW5zaWMiLCAiaW52
ZXJ0IiwKKyAgICAiaXRhbGljIiwgImphcGFuZXNlLWZvcm1hbCIsICJqYXBhbmVzZS1pbmZvcm1h
bCIsICJqdXN0aWZ5IiwgImthbm5hZGEiLAorICAgICJrYXRha2FuYSIsICJrYXRha2FuYS1pcm9o
YSIsICJrZWVwLWFsbCIsICJraG1lciIsCisgICAgImtvcmVhbi1oYW5ndWwtZm9ybWFsIiwgImtv
cmVhbi1oYW5qYS1mb3JtYWwiLCAia29yZWFuLWhhbmphLWluZm9ybWFsIiwKICAgICAibGFuZHNj
YXBlIiwgImxhbyIsICJsYXJnZSIsICJsYXJnZXIiLCAibGVmdCIsICJsZXZlbCIsICJsaWdodGVy
IiwKLSAgICAibGluZS10aHJvdWdoIiwgImxpbmVhciIsICJsaW5lcyIsICJsaXN0LWl0ZW0iLCAi
bGlzdGJveCIsICJsaXN0aXRlbSIsCisgICAgImxpbmUtdGhyb3VnaCIsICJsaW5lYXIiLCAibGlu
ZWFyLWdyYWRpZW50IiwgImxpbmVzIiwgImxpc3QtaXRlbSIsICJsaXN0Ym94IiwgImxpc3RpdGVt
IiwKICAgICAibG9jYWwiLCAibG9naWNhbCIsICJsb3VkIiwgImxvd2VyIiwgImxvd2VyLWFscGhh
IiwgImxvd2VyLWFybWVuaWFuIiwKICAgICAibG93ZXItZ3JlZWsiLCAibG93ZXItaGV4YWRlY2lt
YWwiLCAibG93ZXItbGF0aW4iLCAibG93ZXItbm9yd2VnaWFuIiwKLSAgICAibG93ZXItcm9tYW4i
LCAibG93ZXJjYXNlIiwgImx0ciIsICJtYWxheWFsYW0iLCAibWF0Y2giLAorICAgICJsb3dlci1y
b21hbiIsICJsb3dlcmNhc2UiLCAibHRyIiwgIm1hbGF5YWxhbSIsICJtYXRjaCIsICJtYXRyaXgi
LCAibWF0cml4M2QiLAogICAgICJtZWRpYS1jb250cm9scy1iYWNrZ3JvdW5kIiwgIm1lZGlhLWN1
cnJlbnQtdGltZS1kaXNwbGF5IiwKICAgICAibWVkaWEtZnVsbHNjcmVlbi1idXR0b24iLCAibWVk
aWEtbXV0ZS1idXR0b24iLCAibWVkaWEtcGxheS1idXR0b24iLAogICAgICJtZWRpYS1yZXR1cm4t
dG8tcmVhbHRpbWUtYnV0dG9uIiwgIm1lZGlhLXJld2luZC1idXR0b24iLApAQCAtNTUwLDQ2ICs1
OTgsNDkgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBh
cnNlckNvbmZpZykgewogICAgICJtaXgiLCAibW9uZ29saWFuIiwgIm1vbm9zcGFjZSIsICJtb3Zl
IiwgIm11bHRpcGxlIiwgIm15YW5tYXIiLCAibi1yZXNpemUiLAogICAgICJuYXJyb3dlciIsICJu
ZS1yZXNpemUiLCAibmVzdy1yZXNpemUiLCAibm8tY2xvc2UtcXVvdGUiLCAibm8tZHJvcCIsCiAg
ICAgIm5vLW9wZW4tcXVvdGUiLCAibm8tcmVwZWF0IiwgIm5vbmUiLCAibm9ybWFsIiwgIm5vdC1h
bGxvd2VkIiwgIm5vd3JhcCIsCi0gICAgIm5zLXJlc2l6ZSIsICJudy1yZXNpemUiLCAibndzZS1y
ZXNpemUiLCAib2JsaXF1ZSIsICJvY3RhbCIsICJvcGVuLXF1b3RlIiwKKyAgICAibnMtcmVzaXpl
IiwgIm51bWJlcnMiLCAibnVtZXJpYyIsICJudy1yZXNpemUiLCAibndzZS1yZXNpemUiLCAib2Js
aXF1ZSIsICJvY3RhbCIsICJvcGVuLXF1b3RlIiwKICAgICAib3B0aW1pemVMZWdpYmlsaXR5Iiwg
Im9wdGltaXplU3BlZWQiLCAib3JpeWEiLCAib3JvbW8iLCAib3V0c2V0IiwKICAgICAib3V0c2lk
ZSIsICJvdXRzaWRlLXNoYXBlIiwgIm92ZXJsYXkiLCAib3ZlcmxpbmUiLCAicGFkZGluZyIsICJw
YWRkaW5nLWJveCIsCi0gICAgInBhaW50ZWQiLCAicGFnZSIsICJwYXVzZWQiLCAicGVyc2lhbiIs
ICJwbHVzLWRhcmtlciIsICJwbHVzLWxpZ2h0ZXIiLCAicG9pbnRlciIsCi0gICAgInBvbHlnb24i
LCAicG9ydHJhaXQiLCAicHJlIiwgInByZS1saW5lIiwgInByZS13cmFwIiwgInByZXNlcnZlLTNk
IiwgInByb2dyZXNzIiwgInB1c2gtYnV0dG9uIiwKLSAgICAicmFkaW8iLCAicmVhZC1vbmx5Iiwg
InJlYWQtd3JpdGUiLCAicmVhZC13cml0ZS1wbGFpbnRleHQtb25seSIsICJyZWN0YW5nbGUiLCAi
cmVnaW9uIiwKLSAgICAicmVsYXRpdmUiLCAicmVwZWF0IiwgInJlcGVhdC14IiwgInJlcGVhdC15
IiwgInJlc2V0IiwgInJldmVyc2UiLCAicmdiIiwgInJnYmEiLAotICAgICJyaWRnZSIsICJyaWdo
dCIsICJyb3VuZCIsICJyb3ctcmVzaXplIiwgInJ0bCIsICJydW4taW4iLCAicnVubmluZyIsCi0g
ICAgInMtcmVzaXplIiwgInNhbnMtc2VyaWYiLCAic2Nyb2xsIiwgInNjcm9sbGJhciIsICJzZS1y
ZXNpemUiLCAic2VhcmNoZmllbGQiLAorICAgICJwYWludGVkIiwgInBhZ2UiLCAicGF1c2VkIiwg
InBlcnNpYW4iLCAicGVyc3BlY3RpdmUiLCAicGx1cy1kYXJrZXIiLCAicGx1cy1saWdodGVyIiwK
KyAgICAicG9pbnRlciIsICJwb2x5Z29uIiwgInBvcnRyYWl0IiwgInByZSIsICJwcmUtbGluZSIs
ICJwcmUtd3JhcCIsICJwcmVzZXJ2ZS0zZCIsCisgICAgInByb2dyZXNzIiwgInB1c2gtYnV0dG9u
IiwgInJhZGlhbC1ncmFkaWVudCIsICJyYWRpbyIsICJyZWFkLW9ubHkiLAorICAgICJyZWFkLXdy
aXRlIiwgInJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHkiLCAicmVjdGFuZ2xlIiwgInJlZ2lvbiIs
CisgICAgInJlbGF0aXZlIiwgInJlcGVhdCIsICJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50IiwK
KyAgICAicmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudCIsICJyZXBlYXQteCIsICJyZXBlYXQteSIs
ICJyZXNldCIsICJyZXZlcnNlIiwKKyAgICAicmdiIiwgInJnYmEiLCAicmlkZ2UiLCAicmlnaHQi
LCAicm90YXRlIiwgInJvdGF0ZTNkIiwgInJvdGF0ZVgiLCAicm90YXRlWSIsCisgICAgInJvdGF0
ZVoiLCAicm91bmQiLCAicm93LXJlc2l6ZSIsICJydGwiLCAicnVuLWluIiwgInJ1bm5pbmciLAor
ICAgICJzLXJlc2l6ZSIsICJzYW5zLXNlcmlmIiwgInNjYWxlIiwgInNjYWxlM2QiLCAic2NhbGVY
IiwgInNjYWxlWSIsICJzY2FsZVoiLAorICAgICJzY3JvbGwiLCAic2Nyb2xsYmFyIiwgInNlLXJl
c2l6ZSIsICJzZWFyY2hmaWVsZCIsCiAgICAgInNlYXJjaGZpZWxkLWNhbmNlbC1idXR0b24iLCAi
c2VhcmNoZmllbGQtZGVjb3JhdGlvbiIsCiAgICAgInNlYXJjaGZpZWxkLXJlc3VsdHMtYnV0dG9u
IiwgInNlYXJjaGZpZWxkLXJlc3VsdHMtZGVjb3JhdGlvbiIsCiAgICAgInNlbWktY29uZGVuc2Vk
IiwgInNlbWktZXhwYW5kZWQiLCAic2VwYXJhdGUiLCAic2VyaWYiLCAic2hvdyIsICJzaWRhbWEi
LAotICAgICJzaW5nbGUiLCAic2tpcC13aGl0ZS1zcGFjZSIsICJzbGlkZSIsICJzbGlkZXItaG9y
aXpvbnRhbCIsCisgICAgInNpbXAtY2hpbmVzZS1mb3JtYWwiLCAic2ltcC1jaGluZXNlLWluZm9y
bWFsIiwgInNpbmdsZSIsCisgICAgInNrZXciLCAic2tld1giLCAic2tld1kiLCAic2tpcC13aGl0
ZS1zcGFjZSIsICJzbGlkZSIsICJzbGlkZXItaG9yaXpvbnRhbCIsCiAgICAgInNsaWRlci12ZXJ0
aWNhbCIsICJzbGlkZXJ0aHVtYi1ob3Jpem9udGFsIiwgInNsaWRlcnRodW1iLXZlcnRpY2FsIiwg
InNsb3ciLAogICAgICJzbWFsbCIsICJzbWFsbC1jYXBzIiwgInNtYWxsLWNhcHRpb24iLCAic21h
bGxlciIsICJzb2xpZCIsICJzb21hbGkiLAotICAgICJzb3VyY2UtYXRvcCIsICJzb3VyY2UtaW4i
LCAic291cmNlLW91dCIsICJzb3VyY2Utb3ZlciIsICJzcGFjZSIsICJzcXVhcmUiLAotICAgICJz
cXVhcmUtYnV0dG9uIiwgInN0YXJ0IiwgInN0YXRpYyIsICJzdGF0dXMtYmFyIiwgInN0cmV0Y2gi
LCAic3Ryb2tlIiwKLSAgICAic3ViIiwgInN1YnBpeGVsLWFudGlhbGlhc2VkIiwgInN1cGVyIiwg
InN3LXJlc2l6ZSIsICJ0YWJsZSIsCisgICAgInNvdXJjZS1hdG9wIiwgInNvdXJjZS1pbiIsICJz
b3VyY2Utb3V0IiwgInNvdXJjZS1vdmVyIiwgInNwYWNlIiwgInNwZWxsLW91dCIsICJzcXVhcmUi
LAorICAgICJzcXVhcmUtYnV0dG9uIiwgInN0YXJ0IiwgInN0YXRpYyIsICJzdGF0dXMtYmFyIiwg
InN0cmV0Y2giLCAic3Ryb2tlIiwgInN1YiIsCisgICAgInN1YnBpeGVsLWFudGlhbGlhc2VkIiwg
InN1cGVyIiwgInN3LXJlc2l6ZSIsICJzeW1ib2xpYyIsICJzeW1ib2xzIiwgInRhYmxlIiwKICAg
ICAidGFibGUtY2FwdGlvbiIsICJ0YWJsZS1jZWxsIiwgInRhYmxlLWNvbHVtbiIsICJ0YWJsZS1j
b2x1bW4tZ3JvdXAiLAogICAgICJ0YWJsZS1mb290ZXItZ3JvdXAiLCAidGFibGUtaGVhZGVyLWdy
b3VwIiwgInRhYmxlLXJvdyIsICJ0YWJsZS1yb3ctZ3JvdXAiLAorICAgICJ0YW1pbCIsCiAgICAg
InRlbHVndSIsICJ0ZXh0IiwgInRleHQtYm90dG9tIiwgInRleHQtdG9wIiwgInRleHRhcmVhIiwg
InRleHRmaWVsZCIsICJ0aGFpIiwKICAgICAidGhpY2siLCAidGhpbiIsICJ0aHJlZWRkYXJrc2hh
ZG93IiwgInRocmVlZGZhY2UiLCAidGhyZWVkaGlnaGxpZ2h0IiwKICAgICAidGhyZWVkbGlnaHRz
aGFkb3ciLCAidGhyZWVkc2hhZG93IiwgInRpYmV0YW4iLCAidGlncmUiLCAidGlncmlueWEtZXIi
LAogICAgICJ0aWdyaW55YS1lci1hYmVnZWRlIiwgInRpZ3JpbnlhLWV0IiwgInRpZ3JpbnlhLWV0
LWFiZWdlZGUiLCAidG8iLCAidG9wIiwKKyAgICAidHJhZC1jaGluZXNlLWZvcm1hbCIsICJ0cmFk
LWNoaW5lc2UtaW5mb3JtYWwiLAorICAgICJ0cmFuc2xhdGUiLCAidHJhbnNsYXRlM2QiLCAidHJh
bnNsYXRlWCIsICJ0cmFuc2xhdGVZIiwgInRyYW5zbGF0ZVoiLAogICAgICJ0cmFuc3BhcmVudCIs
ICJ1bHRyYS1jb25kZW5zZWQiLCAidWx0cmEtZXhwYW5kZWQiLCAidW5kZXJsaW5lIiwgInVwIiwK
ICAgICAidXBwZXItYWxwaGEiLCAidXBwZXItYXJtZW5pYW4iLCAidXBwZXItZ3JlZWsiLCAidXBw
ZXItaGV4YWRlY2ltYWwiLAogICAgICJ1cHBlci1sYXRpbiIsICJ1cHBlci1ub3J3ZWdpYW4iLCAi
dXBwZXItcm9tYW4iLCAidXBwZXJjYXNlIiwgInVyZHUiLCAidXJsIiwKLSAgICAidmVydGljYWwi
LCAidmVydGljYWwtdGV4dCIsICJ2aXNpYmxlIiwgInZpc2libGVGaWxsIiwgInZpc2libGVQYWlu
dGVkIiwKKyAgICAidmFyIiwgInZlcnRpY2FsIiwgInZlcnRpY2FsLXRleHQiLCAidmlzaWJsZSIs
ICJ2aXNpYmxlRmlsbCIsICJ2aXNpYmxlUGFpbnRlZCIsCiAgICAgInZpc2libGVTdHJva2UiLCAi
dmlzdWFsIiwgInctcmVzaXplIiwgIndhaXQiLCAid2F2ZSIsICJ3aWRlciIsCi0gICAgIndpbmRv
dyIsICJ3aW5kb3dmcmFtZSIsICJ3aW5kb3d0ZXh0IiwgIngtbGFyZ2UiLCAieC1zbWFsbCIsICJ4
b3IiLAorICAgICJ3aW5kb3ciLCAid2luZG93ZnJhbWUiLCAid2luZG93dGV4dCIsICJ3b3JkcyIs
ICJ4LWxhcmdlIiwgIngtc21hbGwiLCAieG9yIiwKICAgICAieHgtbGFyZ2UiLCAieHgtc21hbGwi
CiAgIF0sIHZhbHVlS2V5d29yZHMgPSBrZXlTZXQodmFsdWVLZXl3b3Jkc18pOwogCi0gIHZhciBm
b250UHJvcGVydGllc18gPSBbCi0gICAgImZvbnQtZmFtaWx5IiwgInNyYyIsICJ1bmljb2RlLXJh
bmdlIiwgImZvbnQtdmFyaWFudCIsICJmb250LWZlYXR1cmUtc2V0dGluZ3MiLAotICAgICJmb250
LXN0cmV0Y2giLCAiZm9udC13ZWlnaHQiLCAiZm9udC1zdHlsZSIKLSAgXSwgZm9udFByb3BlcnRp
ZXMgPSBrZXlTZXQoZm9udFByb3BlcnRpZXNfKTsKLQotICB2YXIgYWxsV29yZHMgPSBtZWRpYVR5
cGVzXy5jb25jYXQobWVkaWFGZWF0dXJlc18pLmNvbmNhdChwcm9wZXJ0eUtleXdvcmRzXykKLSAg
ICAuY29uY2F0KG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcykuY29uY2F0KGNvbG9yS2V5d29y
ZHNfKS5jb25jYXQodmFsdWVLZXl3b3Jkc18pOworICB2YXIgYWxsV29yZHMgPSBkb2N1bWVudFR5
cGVzXy5jb25jYXQobWVkaWFUeXBlc18pLmNvbmNhdChtZWRpYUZlYXR1cmVzXykuY29uY2F0KHBy
b3BlcnR5S2V5d29yZHNfKQorICAgIC5jb25jYXQobm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRz
XykuY29uY2F0KGNvbG9yS2V5d29yZHNfKS5jb25jYXQodmFsdWVLZXl3b3Jkc18pOwogICBDb2Rl
TWlycm9yLnJlZ2lzdGVySGVscGVyKCJoaW50V29yZHMiLCAiY3NzIiwgYWxsV29yZHMpOwogCiAg
IGZ1bmN0aW9uIHRva2VuQ0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewpAQCAtNjA0LDMwICs2NTUs
MTcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICAgIHJldHVybiBbImNvbW1lbnQiLCAiY29tbWVudCJdOwogICB9CiAKLSAg
ZnVuY3Rpb24gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7Ci0gICAgaWYgKHN0cmVh
bS5za2lwVG8oIi0tPiIpKSB7Ci0gICAgICBzdHJlYW0ubWF0Y2goIi0tPiIpOwotICAgICAgc3Rh
dGUudG9rZW5pemUgPSBudWxsOwotICAgIH0gZWxzZSB7Ci0gICAgICBzdHJlYW0uc2tpcFRvRW5k
KCk7Ci0gICAgfQotICAgIHJldHVybiBbImNvbW1lbnQiLCAiY29tbWVudCJdOwotICB9Ci0KICAg
Q29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2NzcyIsIHsKKyAgICBkb2N1bWVudFR5cGVzOiBk
b2N1bWVudFR5cGVzLAogICAgIG1lZGlhVHlwZXM6IG1lZGlhVHlwZXMsCiAgICAgbWVkaWFGZWF0
dXJlczogbWVkaWFGZWF0dXJlcywKICAgICBwcm9wZXJ0eUtleXdvcmRzOiBwcm9wZXJ0eUtleXdv
cmRzLAogICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkczogbm9uU3RhbmRhcmRQcm9wZXJ0
eUtleXdvcmRzLAorICAgIGZvbnRQcm9wZXJ0aWVzOiBmb250UHJvcGVydGllcywKKyAgICBjb3Vu
dGVyRGVzY3JpcHRvcnM6IGNvdW50ZXJEZXNjcmlwdG9ycywKICAgICBjb2xvcktleXdvcmRzOiBj
b2xvcktleXdvcmRzLAogICAgIHZhbHVlS2V5d29yZHM6IHZhbHVlS2V5d29yZHMsCi0gICAgZm9u
dFByb3BlcnRpZXM6IGZvbnRQcm9wZXJ0aWVzLAogICAgIHRva2VuSG9va3M6IHsKLSAgICAgICI8
IjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgICAgICBpZiAoIXN0cmVhbS5tYXRjaCgi
IS0tIikpIHJldHVybiBmYWxzZTsKLSAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblNHTUxD
b21tZW50OwotICAgICAgICByZXR1cm4gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKTsK
LSAgICAgIH0sCiAgICAgICAiLyI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAg
aWYgKCFzdHJlYW0uZWF0KCIqIikpIHJldHVybiBmYWxzZTsKICAgICAgICAgc3RhdGUudG9rZW5p
emUgPSB0b2tlbkNDb21tZW50OwpAQCAtNjU5LDcgKzY5Nyw3IEBAIENvZGVNaXJyb3IuZGVmaW5l
TW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgICAgfQog
ICAgICAgfSwKICAgICAgICI6IjogZnVuY3Rpb24oc3RyZWFtKSB7Ci0gICAgICAgIGlmIChzdHJl
YW0ubWF0Y2goL1xzKnsvKSkKKyAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXHMqXHsvKSkKICAg
ICAgICAgICByZXR1cm4gW251bGwsICJ7Il07CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
IH0sCkBAIC03MDAsNiArNzM4LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgICB9CiAgICAgICB9LAogICAgICAg
IkAiOiBmdW5jdGlvbihzdHJlYW0pIHsKKyAgICAgICAgaWYgKHN0cmVhbS5lYXQoInsiKSkgcmV0
dXJuIFtudWxsLCAiaW50ZXJwb2xhdGlvbiJdOwogICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9e
KGNoYXJzZXR8ZG9jdW1lbnR8Zm9udC1mYWNlfGltcG9ydHwoLShtb3p8bXN8b3x3ZWJraXQpLSk/
a2V5ZnJhbWVzfG1lZGlhfG5hbWVzcGFjZXxwYWdlfHN1cHBvcnRzKVxiLywgZmFsc2UpKSByZXR1
cm4gZmFsc2U7CiAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsKICAgICAgICAg
aWYgKHN0cmVhbS5tYXRjaCgvXlxzKjovLCBmYWxzZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2h0bWxtaXhlZC5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJy
b3IvaHRtbG1peGVkLmpzCmluZGV4IGRjNDg5NzhlYjJlODliZmY5YmVkMDBkYWMyMDdhNDAzMWI4
MTNmNGIuLjI0NTUyZTJkODA2MTY3ZGJlZDU4MWE1NWE0YmQ0Mzg4MDVlMjkzZDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJy
b3IvaHRtbG1peGVkLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IvaHRtbG1peGVkLmpzCkBAIC0zMCw2ICszMCw3IEBAIENvZGVN
aXJyb3IuZGVmaW5lTW9kZSgiaHRtbG1peGVkIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25m
aWcpIHsKIAogICBmdW5jdGlvbiBodG1sKHN0cmVhbSwgc3RhdGUpIHsKICAgICB2YXIgdGFnTmFt
ZSA9IHN0YXRlLmh0bWxTdGF0ZS50YWdOYW1lOworICAgIGlmICh0YWdOYW1lKSB0YWdOYW1lID0g
dGFnTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgIHZhciBzdHlsZSA9IGh0bWxNb2RlLnRva2VuKHN0
cmVhbSwgc3RhdGUuaHRtbFN0YXRlKTsKICAgICBpZiAodGFnTmFtZSA9PSAic2NyaXB0IiAmJiAv
XGJ0YWdcYi8udGVzdChzdHlsZSkgJiYgc3RyZWFtLmN1cnJlbnQoKSA9PSAiPiIpIHsKICAgICAg
IC8vIFNjcmlwdCBibG9jazogbW9kZSB0byBjaGFuZ2UgdG8gZGVwZW5kcyBvbiB0eXBlIGF0dHJp
YnV0ZQpAQCAtNTYsOSArNTcsOSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImh0bWxtaXhlZCIs
IGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIH0KICAgZnVuY3Rpb24gbWF5YmVC
YWNrdXAoc3RyZWFtLCBwYXQsIHN0eWxlKSB7CiAgICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50
KCk7Ci0gICAgdmFyIGNsb3NlID0gY3VyLnNlYXJjaChwYXQpLCBtOworICAgIHZhciBjbG9zZSA9
IGN1ci5zZWFyY2gocGF0KTsKICAgICBpZiAoY2xvc2UgPiAtMSkgc3RyZWFtLmJhY2tVcChjdXIu
bGVuZ3RoIC0gY2xvc2UpOwotICAgIGVsc2UgaWYgKG0gPSBjdXIubWF0Y2goLzxcLz8kLykpIHsK
KyAgICBlbHNlIGlmIChjdXIubWF0Y2goLzxcLz8kLykpIHsKICAgICAgIHN0cmVhbS5iYWNrVXAo
Y3VyLmxlbmd0aCk7CiAgICAgICBpZiAoIXN0cmVhbS5tYXRjaChwYXQsIGZhbHNlKSkgc3RyZWFt
Lm1hdGNoKGN1cik7CiAgICAgfQpAQCAtNjgsNyArNjksNyBAQCBDb2RlTWlycm9yLmRlZmluZU1v
ZGUoImh0bWxtaXhlZCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgaWYg
KHN0cmVhbS5tYXRjaCgvXjxcL1xzKnNjcmlwdFxzKj4vaSwgZmFsc2UpKSB7CiAgICAgICBzdGF0
ZS50b2tlbiA9IGh0bWw7CiAgICAgICBzdGF0ZS5sb2NhbFN0YXRlID0gc3RhdGUubG9jYWxNb2Rl
ID0gbnVsbDsKLSAgICAgIHJldHVybiBodG1sKHN0cmVhbSwgc3RhdGUpOworICAgICAgcmV0dXJu
IG51bGw7CiAgICAgfQogICAgIHJldHVybiBtYXliZUJhY2t1cChzdHJlYW0sIC88XC9ccypzY3Jp
cHRccyo+LywKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubG9jYWxNb2RlLnRva2VuKHN0
cmVhbSwgc3RhdGUubG9jYWxTdGF0ZSkpOwpAQCAtNzcsNyArNzgsNyBAQCBDb2RlTWlycm9yLmRl
ZmluZU1vZGUoImh0bWxtaXhlZCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAg
ICAgaWYgKHN0cmVhbS5tYXRjaCgvXjxcL1xzKnN0eWxlXHMqPi9pLCBmYWxzZSkpIHsKICAgICAg
IHN0YXRlLnRva2VuID0gaHRtbDsKICAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBzdGF0ZS5sb2Nh
bE1vZGUgPSBudWxsOwotICAgICAgcmV0dXJuIGh0bWwoc3RyZWFtLCBzdGF0ZSk7CisgICAgICBy
ZXR1cm4gbnVsbDsKICAgICB9CiAgICAgcmV0dXJuIG1heWJlQmFja3VwKHN0cmVhbSwgLzxcL1xz
KnN0eWxlXHMqPi8sCiAgICAgICAgICAgICAgICAgICAgICAgIGNzc01vZGUudG9rZW4oc3RyZWFt
LCBzdGF0ZS5sb2NhbFN0YXRlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3Jp
cHQuanMKaW5kZXggYjUyMmVjNDgzMWY4ODM4ZjQ4MmU1ZGVkMmRiZTJjZDFlNjk1NDAxZC4uYzg2
ZjQ5ZTFmNjBhOWQ4NTU5YmFlNDI2Mzk1MzRiMWYyM2VkZGJlMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9qYXZhc2Ny
aXB0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFs
L0NvZGVNaXJyb3IvamF2YXNjcmlwdC5qcwpAQCAtMTksNiArMTksNyBAQCBDb2RlTWlycm9yLmRl
ZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewog
ICB2YXIganNvbmxkTW9kZSA9IHBhcnNlckNvbmZpZy5qc29ubGQ7CiAgIHZhciBqc29uTW9kZSA9
IHBhcnNlckNvbmZpZy5qc29uIHx8IGpzb25sZE1vZGU7CiAgIHZhciBpc1RTID0gcGFyc2VyQ29u
ZmlnLnR5cGVzY3JpcHQ7CisgIHZhciB3b3JkUkUgPSBwYXJzZXJDb25maWcud29yZENoYXJhY3Rl
cnMgfHwgL1tcdyRceGExLVx1ZmZmZl0vOwogCiAgIC8vIFRva2VuaXplcgogCkBAIC0xMTcsNyAr
MTE4LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29u
ZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGFzdFR5cGUgPT0g
Im9wZXJhdG9yIiB8fCBzdGF0ZS5sYXN0VHlwZSA9PSAia2V5d29yZCBjIiB8fAogICAgICAgICAg
ICAgICAgc3RhdGUubGFzdFR5cGUgPT0gInNvZiIgfHwgL15bXFt7fVwoLDs6XSQvLnRlc3Qoc3Rh
dGUubGFzdFR5cGUpKSB7CiAgICAgICAgIHJlYWRSZWdleHAoc3RyZWFtKTsKLSAgICAgICAgc3Ry
ZWFtLmVhdFdoaWxlKC9bZ2lteV0vKTsgLy8gJ3knIGlzICJzdGlja3kiIG9wdGlvbiBpbiBNb3pp
bGxhCisgICAgICAgIHN0cmVhbS5tYXRjaCgvXlxiKChbZ2lteXVdKSg/IVtnaW15dV0qXDIpKStc
Yi8pOwogICAgICAgICByZXR1cm4gcmV0KCJyZWdleHAiLCAic3RyaW5nLTIiKTsKICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CkBAIC0xMzIs
OCArMTMzLDggQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRl
c3QoY2gpKSB7CiAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICAg
cmV0dXJuIHJldCgib3BlcmF0b3IiLCAib3BlcmF0b3IiLCBzdHJlYW0uY3VycmVudCgpKTsKLSAg
ICB9IGVsc2UgewotICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CisgICAgfSBlbHNl
IGlmICh3b3JkUkUudGVzdChjaCkpIHsKKyAgICAgIHN0cmVhbS5lYXRXaGlsZSh3b3JkUkUpOwog
ICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpLCBrbm93biA9IGtleXdvcmRzLnByb3Bl
cnR5SXNFbnVtZXJhYmxlKHdvcmQpICYmIGtleXdvcmRzW3dvcmRdOwogICAgICAgcmV0dXJuIChr
bm93biAmJiBzdGF0ZS5sYXN0VHlwZSAhPSAiLiIpID8gcmV0KGtub3duLnR5cGUsIGtub3duLnN0
eWxlLCB3b3JkKSA6CiAgICAgICAgICAgICAgICAgICAgICByZXQoInZhcmlhYmxlIiwgInZhcmlh
YmxlIiwgd29yZCk7CkBAIC0yMDIsOCArMjAzLDEwIEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgi
amF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICAgIGlm
ICgtLWRlcHRoID09IDApIGJyZWFrOwogICAgICAgfSBlbHNlIGlmIChicmFja2V0ID49IDMgJiYg
YnJhY2tldCA8IDYpIHsKICAgICAgICAgKytkZXB0aDsKLSAgICAgIH0gZWxzZSBpZiAoL1skXHdd
Ly50ZXN0KGNoKSkgeworICAgICAgfSBlbHNlIGlmICh3b3JkUkUudGVzdChjaCkpIHsKICAgICAg
ICAgc2F3U29tZXRoaW5nID0gdHJ1ZTsKKyAgICAgIH0gZWxzZSBpZiAoL1siJ1wvXS8udGVzdChj
aCkpIHsKKyAgICAgICAgcmV0dXJuOwogICAgICAgfSBlbHNlIGlmIChzYXdTb21ldGhpbmcgJiYg
IWRlcHRoKSB7CiAgICAgICAgICsrcG9zOwogICAgICAgICBicmVhazsKQEAgLTIzOCw3ICsyNDEs
NyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcs
IHBhcnNlckNvbmZpZykgewogICAgIHZhciBjYyA9IHN0YXRlLmNjOwogICAgIC8vIENvbW11bmlj
YXRlIG91ciBjb250ZXh0IHRvIHRoZSBjb21iaW5hdG9ycy4KICAgICAvLyAoTGVzcyB3YXN0ZWZ1
bCB0aGFuIGNvbnNpbmcgdXAgYSBodW5kcmVkIGNsb3N1cmVzIG9uIGV2ZXJ5IGNhbGwuKQotICAg
IGN4LnN0YXRlID0gc3RhdGU7IGN4LnN0cmVhbSA9IHN0cmVhbTsgY3gubWFya2VkID0gbnVsbCwg
Y3guY2MgPSBjYzsKKyAgICBjeC5zdGF0ZSA9IHN0YXRlOyBjeC5zdHJlYW0gPSBzdHJlYW07IGN4
Lm1hcmtlZCA9IG51bGwsIGN4LmNjID0gY2M7IGN4LnN0eWxlID0gc3R5bGU7CiAKICAgICBpZiAo
IXN0YXRlLmxleGljYWwuaGFzT3duUHJvcGVydHkoImFsaWduIikpCiAgICAgICBzdGF0ZS5sZXhp
Y2FsLmFsaWduID0gdHJ1ZTsKQEAgLTI5OCw2ICszMDEsOCBAQCBDb2RlTWlycm9yLmRlZmluZU1v
ZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIHZh
ciByZXN1bHQgPSBmdW5jdGlvbigpIHsKICAgICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlLCBpbmRl
bnQgPSBzdGF0ZS5pbmRlbnRlZDsKICAgICAgIGlmIChzdGF0ZS5sZXhpY2FsLnR5cGUgPT0gInN0
YXQiKSBpbmRlbnQgPSBzdGF0ZS5sZXhpY2FsLmluZGVudGVkOworICAgICAgZWxzZSBmb3IgKHZh
ciBvdXRlciA9IHN0YXRlLmxleGljYWw7IG91dGVyICYmIG91dGVyLnR5cGUgPT0gIikiICYmIG91
dGVyLmFsaWduOyBvdXRlciA9IG91dGVyLnByZXYpCisgICAgICAgIGluZGVudCA9IG91dGVyLmlu
ZGVudGVkOwogICAgICAgc3RhdGUubGV4aWNhbCA9IG5ldyBKU0xleGljYWwoaW5kZW50LCBjeC5z
dHJlYW0uY29sdW1uKCksIHR5cGUsIG51bGwsIHN0YXRlLmxleGljYWwsIGluZm8pOwogICAgIH07
CiAgICAgcmVzdWx0LmxleCA9IHRydWU7CkBAIC0zNDMsNyArMzQ4LDcgQEAgQ29kZU1pcnJvci5k
ZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsK
ICAgICBpZiAodHlwZSA9PSAiY2F0Y2giKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHB1
c2hjb250ZXh0LCBleHBlY3QoIigiKSwgZnVuYXJnLCBleHBlY3QoIikiKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQsIHBvcGxleCwgcG9wY29udGV4dCk7
CiAgICAgaWYgKHR5cGUgPT0gIm1vZHVsZSIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwg
cHVzaGNvbnRleHQsIGFmdGVyTW9kdWxlLCBwb3Bjb250ZXh0LCBwb3BsZXgpOwotICAgIGlmICh0
eXBlID09ICJjbGFzcyIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgY2xhc3NOYW1lLCBv
YmpsaXQsIHBvcGxleCk7CisgICAgaWYgKHR5cGUgPT0gImNsYXNzIikgcmV0dXJuIGNvbnQocHVz
aGxleCgiZm9ybSIpLCBjbGFzc05hbWUsIHBvcGxleCk7CiAgICAgaWYgKHR5cGUgPT0gImV4cG9y
dCIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgYWZ0ZXJFeHBvcnQsIHBvcGxleCk7CiAg
ICAgaWYgKHR5cGUgPT0gImltcG9ydCIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgYWZ0
ZXJJbXBvcnQsIHBvcGxleCk7CiAgICAgcmV0dXJuIHBhc3MocHVzaGxleCgic3RhdCIpLCBleHBy
ZXNzaW9uLCBleHBlY3QoIjsiKSwgcG9wbGV4KTsKQEAgLTM4OCw3ICszOTMsNyBAQCBDb2RlTWly
cm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZp
ZykgewogICBmdW5jdGlvbiBtYXliZW9wZXJhdG9yTm9Db21tYSh0eXBlLCB2YWx1ZSwgbm9Db21t
YSkgewogICAgIHZhciBtZSA9IG5vQ29tbWEgPT0gZmFsc2UgPyBtYXliZW9wZXJhdG9yQ29tbWEg
OiBtYXliZW9wZXJhdG9yTm9Db21tYTsKICAgICB2YXIgZXhwciA9IG5vQ29tbWEgPT0gZmFsc2Ug
PyBleHByZXNzaW9uIDogZXhwcmVzc2lvbk5vQ29tbWE7Ci0gICAgaWYgKHZhbHVlID09ICI9PiIp
IHJldHVybiBjb250KHB1c2hjb250ZXh0LCBub0NvbW1hID8gYXJyb3dCb2R5Tm9Db21tYSA6IGFy
cm93Qm9keSwgcG9wY29udGV4dCk7CisgICAgaWYgKHR5cGUgPT0gIj0+IikgcmV0dXJuIGNvbnQo
cHVzaGNvbnRleHQsIG5vQ29tbWEgPyBhcnJvd0JvZHlOb0NvbW1hIDogYXJyb3dCb2R5LCBwb3Bj
b250ZXh0KTsKICAgICBpZiAodHlwZSA9PSAib3BlcmF0b3IiKSB7CiAgICAgICBpZiAoL1wrXCt8
LS0vLnRlc3QodmFsdWUpKSByZXR1cm4gY29udChtZSk7CiAgICAgICBpZiAodmFsdWUgPT0gIj8i
KSByZXR1cm4gY29udChleHByZXNzaW9uLCBleHBlY3QoIjoiKSwgZXhwcik7CkBAIC00MTQsMTMg
KzQxOSwxMSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihj
b25maWcsIHBhcnNlckNvbmZpZykgewogICB9CiAgIGZ1bmN0aW9uIGFycm93Qm9keSh0eXBlKSB7
CiAgICAgZmluZEZhdEFycm93KGN4LnN0cmVhbSwgY3guc3RhdGUpOwotICAgIGlmICh0eXBlID09
ICJ7IikgcmV0dXJuIHBhc3Moc3RhdGVtZW50KTsKLSAgICByZXR1cm4gcGFzcyhleHByZXNzaW9u
KTsKKyAgICByZXR1cm4gcGFzcyh0eXBlID09ICJ7IiA/IHN0YXRlbWVudCA6IGV4cHJlc3Npb24p
OwogICB9CiAgIGZ1bmN0aW9uIGFycm93Qm9keU5vQ29tbWEodHlwZSkgewogICAgIGZpbmRGYXRB
cnJvdyhjeC5zdHJlYW0sIGN4LnN0YXRlKTsKLSAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBw
YXNzKHN0YXRlbWVudCk7Ci0gICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbk5vQ29tbWEpOworICAg
IHJldHVybiBwYXNzKHR5cGUgPT0gInsiID8gc3RhdGVtZW50IDogZXhwcmVzc2lvbk5vQ29tbWEp
OwogICB9CiAgIGZ1bmN0aW9uIG1heWJlbGFiZWwodHlwZSkgewogICAgIGlmICh0eXBlID09ICI6
IikgcmV0dXJuIGNvbnQocG9wbGV4LCBzdGF0ZW1lbnQpOwpAQCAtNDMwLDE1ICs0MzMsMTggQEAg
Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJz
ZXJDb25maWcpIHsKICAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7Y3gubWFya2VkID0gInBy
b3BlcnR5IjsgcmV0dXJuIGNvbnQoKTt9CiAgIH0KICAgZnVuY3Rpb24gb2JqcHJvcCh0eXBlLCB2
YWx1ZSkgewotICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHsKKyAgICBpZiAodHlwZSA9PSAi
dmFyaWFibGUiIHx8IGN4LnN0eWxlID09ICJrZXl3b3JkIikgewogICAgICAgY3gubWFya2VkID0g
InByb3BlcnR5IjsKICAgICAgIGlmICh2YWx1ZSA9PSAiZ2V0IiB8fCB2YWx1ZSA9PSAic2V0Iikg
cmV0dXJuIGNvbnQoZ2V0dGVyU2V0dGVyKTsKKyAgICAgIHJldHVybiBjb250KGFmdGVycHJvcCk7
CiAgICAgfSBlbHNlIGlmICh0eXBlID09ICJudW1iZXIiIHx8IHR5cGUgPT0gInN0cmluZyIpIHsK
LSAgICAgIGN4Lm1hcmtlZCA9IGpzb25sZE1vZGUgPyAicHJvcGVydHkiIDogKHR5cGUgKyAiIHBy
b3BlcnR5Iik7CisgICAgICBjeC5tYXJrZWQgPSBqc29ubGRNb2RlID8gInByb3BlcnR5IiA6IChj
eC5zdHlsZSArICIgcHJvcGVydHkiKTsKKyAgICAgIHJldHVybiBjb250KGFmdGVycHJvcCk7Cisg
ICAgfSBlbHNlIGlmICh0eXBlID09ICJqc29ubGQta2V5d29yZCIpIHsKKyAgICAgIHJldHVybiBj
b250KGFmdGVycHJvcCk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09ICJbIikgewogICAgICAgcmV0
dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KCJdIiksIGFmdGVycHJvcCk7CiAgICAgfQotICAg
IGlmIChhdG9taWNUeXBlcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgcmV0dXJuIGNvbnQoYWZ0ZXJw
cm9wKTsKICAgfQogICBmdW5jdGlvbiBnZXR0ZXJTZXR0ZXIodHlwZSkgewogICAgIGlmICh0eXBl
ICE9ICJ2YXJpYWJsZSIpIHJldHVybiBwYXNzKGFmdGVycHJvcCk7CkBAIC00NzYsOCArNDgyLDEx
IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywg
cGFyc2VyQ29uZmlnKSB7CiAgIGZ1bmN0aW9uIG1heWJldHlwZSh0eXBlKSB7CiAgICAgaWYgKGlz
VFMgJiYgdHlwZSA9PSAiOiIpIHJldHVybiBjb250KHR5cGVkZWYpOwogICB9CisgIGZ1bmN0aW9u
IG1heWJlZGVmYXVsdChfLCB2YWx1ZSkgeworICAgIGlmICh2YWx1ZSA9PSAiPSIpIHJldHVybiBj
b250KGV4cHJlc3Npb25Ob0NvbW1hKTsKKyAgfQogICBmdW5jdGlvbiB0eXBlZGVmKHR5cGUpIHsK
LSAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKXtjeC5tYXJrZWQgPSAidmFyaWFibGUtMyI7IHJl
dHVybiBjb250KCk7fQorICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHtjeC5tYXJrZWQgPSAi
dmFyaWFibGUtMyI7IHJldHVybiBjb250KCk7fQogICB9CiAgIGZ1bmN0aW9uIHZhcmRlZigpIHsK
ICAgICByZXR1cm4gcGFzcyhwYXR0ZXJuLCBtYXliZXR5cGUsIG1heWJlQXNzaWduLCB2YXJkZWZD
b250KTsKQEAgLTUzMiwxNiArNTQxLDM2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNj
cmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIH0KICAgZnVuY3Rpb24g
ZnVuYXJnKHR5cGUpIHsKICAgICBpZiAodHlwZSA9PSAic3ByZWFkIikgcmV0dXJuIGNvbnQoZnVu
YXJnKTsKLSAgICByZXR1cm4gcGFzcyhwYXR0ZXJuLCBtYXliZXR5cGUpOworICAgIHJldHVybiBw
YXNzKHBhdHRlcm4sIG1heWJldHlwZSwgbWF5YmVkZWZhdWx0KTsKICAgfQogICBmdW5jdGlvbiBj
bGFzc05hbWUodHlwZSwgdmFsdWUpIHsKICAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7cmVn
aXN0ZXIodmFsdWUpOyByZXR1cm4gY29udChjbGFzc05hbWVBZnRlcik7fQogICB9Ci0gIGZ1bmN0
aW9uIGNsYXNzTmFtZUFmdGVyKF90eXBlLCB2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA9PSAiZXh0
ZW5kcyIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOworICBmdW5jdGlvbiBjbGFzc05hbWVBZnRl
cih0eXBlLCB2YWx1ZSkgeworICAgIGlmICh2YWx1ZSA9PSAiZXh0ZW5kcyIpIHJldHVybiBjb250
KGV4cHJlc3Npb24sIGNsYXNzTmFtZUFmdGVyKTsKKyAgICBpZiAodHlwZSA9PSAieyIpIHJldHVy
biBjb250KHB1c2hsZXgoIn0iKSwgY2xhc3NCb2R5LCBwb3BsZXgpOwogICB9Ci0gIGZ1bmN0aW9u
IG9iamxpdCh0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udENvbW1hc2Vw
KG9ianByb3AsICJ9Iik7CisgIGZ1bmN0aW9uIGNsYXNzQm9keSh0eXBlLCB2YWx1ZSkgeworICAg
IGlmICh0eXBlID09ICJ2YXJpYWJsZSIgfHwgY3guc3R5bGUgPT0gImtleXdvcmQiKSB7CisgICAg
ICBpZiAodmFsdWUgPT0gInN0YXRpYyIpIHsKKyAgICAgICAgY3gubWFya2VkID0gImtleXdvcmQi
OworICAgICAgICByZXR1cm4gY29udChjbGFzc0JvZHkpOworICAgICAgfQorICAgICAgY3gubWFy
a2VkID0gInByb3BlcnR5IjsKKyAgICAgIGlmICh2YWx1ZSA9PSAiZ2V0IiB8fCB2YWx1ZSA9PSAi
c2V0IikgcmV0dXJuIGNvbnQoY2xhc3NHZXR0ZXJTZXR0ZXIsIGZ1bmN0aW9uZGVmLCBjbGFzc0Jv
ZHkpOworICAgICAgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYsIGNsYXNzQm9keSk7CisgICAgfQor
ICAgIGlmICh2YWx1ZSA9PSAiKiIpIHsKKyAgICAgIGN4Lm1hcmtlZCA9ICJrZXl3b3JkIjsKKyAg
ICAgIHJldHVybiBjb250KGNsYXNzQm9keSk7CisgICAgfQorICAgIGlmICh0eXBlID09ICI7Iikg
cmV0dXJuIGNvbnQoY2xhc3NCb2R5KTsKKyAgICBpZiAodHlwZSA9PSAifSIpIHJldHVybiBjb250
KCk7CisgIH0KKyAgZnVuY3Rpb24gY2xhc3NHZXR0ZXJTZXR0ZXIodHlwZSkgeworICAgIGlmICh0
eXBlICE9ICJ2YXJpYWJsZSIpIHJldHVybiBwYXNzKCk7CisgICAgY3gubWFya2VkID0gInByb3Bl
cnR5IjsKKyAgICByZXR1cm4gY29udCgpOwogICB9CiAgIGZ1bmN0aW9uIGFmdGVyTW9kdWxlKHR5
cGUsIHZhbHVlKSB7CiAgICAgaWYgKHR5cGUgPT0gInN0cmluZyIpIHJldHVybiBjb250KHN0YXRl
bWVudCk7CkBAIC01NTksNyArNTg4LDExIEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNj
cmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIGZ1bmN0aW9uIGltcG9y
dFNwZWModHlwZSwgdmFsdWUpIHsKICAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250Q29t
bWFzZXAoaW1wb3J0U3BlYywgIn0iKTsKICAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSByZWdp
c3Rlcih2YWx1ZSk7Ci0gICAgcmV0dXJuIGNvbnQoKTsKKyAgICBpZiAodmFsdWUgPT0gIioiKSBj
eC5tYXJrZWQgPSAia2V5d29yZCI7CisgICAgcmV0dXJuIGNvbnQobWF5YmVBcyk7CisgIH0KKyAg
ZnVuY3Rpb24gbWF5YmVBcyhfdHlwZSwgdmFsdWUpIHsKKyAgICBpZiAodmFsdWUgPT0gImFzIikg
eyBjeC5tYXJrZWQgPSAia2V5d29yZCI7IHJldHVybiBjb250KGltcG9ydFNwZWMpOyB9CiAgIH0K
ICAgZnVuY3Rpb24gbWF5YmVGcm9tKF90eXBlLCB2YWx1ZSkgewogICAgIGlmICh2YWx1ZSA9PSAi
ZnJvbSIpIHsgY3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChleHByZXNzaW9uKTsg
fQpAQCAtNTcwLDcgKzYwMyw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIs
IGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIH0KICAgZnVuY3Rpb24gbWF5YmVB
cnJheUNvbXByZWhlbnNpb24odHlwZSkgewogICAgIGlmICh0eXBlID09ICJmb3IiKSByZXR1cm4g
cGFzcyhjb21wcmVoZW5zaW9uLCBleHBlY3QoIl0iKSk7Ci0gICAgaWYgKHR5cGUgPT0gIiwiKSBy
ZXR1cm4gY29udChjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgIl0iKSk7CisgICAgaWYgKHR5
cGUgPT0gIiwiKSByZXR1cm4gY29udChjb21tYXNlcChtYXliZWV4cHJlc3Npb25Ob0NvbW1hLCAi
XSIpKTsKICAgICByZXR1cm4gcGFzcyhjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgIl0iKSk7
CiAgIH0KICAgZnVuY3Rpb24gY29tcHJlaGVuc2lvbih0eXBlKSB7CkBAIC01NzgsNiArNjExLDEy
IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywg
cGFyc2VyQ29uZmlnKSB7CiAgICAgaWYgKHR5cGUgPT0gImlmIikgcmV0dXJuIGNvbnQoZXhwcmVz
c2lvbiwgY29tcHJlaGVuc2lvbik7CiAgIH0KIAorICBmdW5jdGlvbiBpc0NvbnRpbnVlZFN0YXRl
bWVudChzdGF0ZSwgdGV4dEFmdGVyKSB7CisgICAgcmV0dXJuIHN0YXRlLmxhc3RUeXBlID09ICJv
cGVyYXRvciIgfHwgc3RhdGUubGFzdFR5cGUgPT0gIiwiIHx8CisgICAgICBpc09wZXJhdG9yQ2hh
ci50ZXN0KHRleHRBZnRlci5jaGFyQXQoMCkpIHx8CisgICAgICAvWywuXS8udGVzdCh0ZXh0QWZ0
ZXIuY2hhckF0KDApKTsKKyAgfQorCiAgIC8vIEludGVyZmFjZQogCiAgIHJldHVybiB7CkBAIC02
MjksMTggKzY2OCwxOSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgZWxzZSBpZiAodHlwZSA9PSAiZm9y
bSIgJiYgZmlyc3RDaGFyID09ICJ7IikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQ7CiAgICAgICBl
bHNlIGlmICh0eXBlID09ICJmb3JtIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyBpbmRlbnRV
bml0OwogICAgICAgZWxzZSBpZiAodHlwZSA9PSAic3RhdCIpCi0gICAgICAgIHJldHVybiBsZXhp
Y2FsLmluZGVudGVkICsgKHN0YXRlLmxhc3RUeXBlID09ICJvcGVyYXRvciIgfHwgc3RhdGUubGFz
dFR5cGUgPT0gIiwiID8gc3RhdGVtZW50SW5kZW50IHx8IGluZGVudFVuaXQgOiAwKTsKKyAgICAg
ICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoaXNDb250aW51ZWRTdGF0ZW1lbnQoc3RhdGUs
IHRleHRBZnRlcikgPyBzdGF0ZW1lbnRJbmRlbnQgfHwgaW5kZW50VW5pdCA6IDApOwogICAgICAg
ZWxzZSBpZiAobGV4aWNhbC5pbmZvID09ICJzd2l0Y2giICYmICFjbG9zaW5nICYmIHBhcnNlckNv
bmZpZy5kb3VibGVJbmRlbnRTd2l0Y2ggIT0gZmFsc2UpCiAgICAgICAgIHJldHVybiBsZXhpY2Fs
LmluZGVudGVkICsgKC9eKD86Y2FzZXxkZWZhdWx0KVxiLy50ZXN0KHRleHRBZnRlcikgPyBpbmRl
bnRVbml0IDogMiAqIGluZGVudFVuaXQpOwogICAgICAgZWxzZSBpZiAobGV4aWNhbC5hbGlnbikg
cmV0dXJuIGxleGljYWwuY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7CiAgICAgICBlbHNlIHJl
dHVybiBsZXhpY2FsLmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CiAgICAg
fSwKIAotICAgIGVsZWN0cmljQ2hhcnM6ICI6e30iLAorICAgIGVsZWN0cmljSW5wdXQ6IC9eXHMq
KD86Y2FzZSAuKj86fGRlZmF1bHQ6fFx7fFx9KSQvLAogICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBq
c29uTW9kZSA/IG51bGwgOiAiLyoiLAogICAgIGJsb2NrQ29tbWVudEVuZDoganNvbk1vZGUgPyBu
dWxsIDogIiovIiwKICAgICBsaW5lQ29tbWVudDoganNvbk1vZGUgPyBudWxsIDogIi8vIiwKICAg
ICBmb2xkOiAiYnJhY2UiLAorICAgIGNsb3NlQnJhY2tldHM6ICIoKVtde30nJ1wiXCJgYCIsCiAK
ICAgICBoZWxwZXJUeXBlOiBqc29uTW9kZSA/ICJqc29uIiA6ICJqYXZhc2NyaXB0IiwKICAgICBq
c29ubGRNb2RlOiBqc29ubGRNb2RlLApAQCAtNjQ4LDExICs2ODgsMTIgQEAgQ29kZU1pcnJvci5k
ZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsK
ICAgfTsKIH0pOwogCi1Db2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKCJ3b3JkQ2hhcnMiLCAiamF2
YXNjcmlwdCIsIC9bXFx3JF0vKTsKK0NvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoIndvcmRDaGFy
cyIsICJqYXZhc2NyaXB0IiwgL1tcdyRdLyk7CiAKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4
dC9qYXZhc2NyaXB0IiwgImphdmFzY3JpcHQiKTsKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4
dC9lY21hc2NyaXB0IiwgImphdmFzY3JpcHQiKTsKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBw
bGljYXRpb24vamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CitDb2RlTWlycm9yLmRlZmluZU1J
TUUoImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CiBDb2RlTWlycm9y
LmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQiLCAiamF2YXNjcmlwdCIpOwogQ29k
ZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi9qc29uIiwge25hbWU6ICJqYXZhc2NyaXB0
IiwganNvbjogdHJ1ZX0pOwogQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LWpz
b24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29uOiB0cnVlfSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2xpdmVz
Y3JpcHQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9D
b2RlTWlycm9yL2xpdmVzY3JpcHQuanMKaW5kZXggNTU4ODJlZmMzYmM0ZjczYmY5NjA5NTUwOTJh
MWQxODA4Y2Q5YzI3My4uNGIyNmUwNDYxOWNkNjM5NjYwMWQyMjQ3MjRlYzI5Y2QzYTU3ZDljZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
Q29kZU1pcnJvci9saXZlc2NyaXB0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbGl2ZXNjcmlwdC5qcwpAQCAtMjQsOCArMjQs
OCBAQAogICAgICAgICB2YXIgbnIgPSBSdWxlc1tuZXh0X3J1bGVdOwogICAgICAgICBpZiAobnIu
c3BsaWNlKSB7CiAgICAgICAgICAgZm9yICh2YXIgaSQgPSAwOyBpJCA8IG5yLmxlbmd0aDsgKytp
JCkgewotICAgICAgICAgICAgdmFyIHIgPSBucltpJF0sIG07Ci0gICAgICAgICAgICBpZiAoci5y
ZWdleCAmJiAobSA9IHN0cmVhbS5tYXRjaChyLnJlZ2V4KSkpIHsKKyAgICAgICAgICAgIHZhciBy
ID0gbnJbaSRdOworICAgICAgICAgICAgaWYgKHIucmVnZXggJiYgc3RyZWFtLm1hdGNoKHIucmVn
ZXgpKSB7CiAgICAgICAgICAgICAgIHN0YXRlLm5leHQgPSByLm5leHQgfHwgc3RhdGUubmV4dDsK
ICAgICAgICAgICAgICAgcmV0dXJuIHIudG9rZW47CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9y
L21hdGNoYnJhY2tldHMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Db2RlTWlycm9yL21hdGNoYnJhY2tldHMuanMKaW5kZXggZmExYWUwMzBhNTQ0MmM3
YWI4NWNhOGNmMzAxY2E3NmU2Y2YxODEzMi4uNzBlMWFlMThjNzQ4MTc0MjU5OGM4YjIwNjliOGE2
YzcxN2Y0NzI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9tYXRjaGJyYWNrZXRzLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hicmFja2V0
cy5qcwpAQCAtODEsNyArODEsNyBAQAogICAgIGlmIChtYXJrcy5sZW5ndGgpIHsKICAgICAgIC8v
IEtsdWRnZSB0byB3b3JrIGFyb3VuZCB0aGUgSUUgYnVnIGZyb20gaXNzdWUgIzExOTMsIHdoZXJl
IHRleHQKICAgICAgIC8vIGlucHV0IHN0b3BzIGdvaW5nIHRvIHRoZSB0ZXh0YXJlIHdoZXZlciB0
aGlzIGZpcmVzLgotICAgICAgaWYgKGllX2x0OCAmJiBjbS5zdGF0ZS5mb2N1c2VkKSBjbS5kaXNw
bGF5LmlucHV0LmZvY3VzKCk7CisgICAgICBpZiAoaWVfbHQ4ICYmIGNtLnN0YXRlLmZvY3VzZWQp
IGNtLmZvY3VzKCk7CiAKICAgICAgIHZhciBjbGVhciA9IGZ1bmN0aW9uKCkgewogICAgICAgICBj
bS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL292ZXJsYXkuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL292ZXJsYXku
anMKaW5kZXggMzkzMDU0ZGZhNDQxNzc4ZmU4NTAxZDk2YmJlN2NiOGNmMDE2NzMyNy4uZTFiOWVk
Mzc1MzBhZDgyNGUyM2Q1MGEwYzRjOTEwNTdjOGU5ZmI0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9vdmVybGF5Lmpz
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVN
aXJyb3Ivb3ZlcmxheS5qcwpAQCAtMjgsNyArMjgsNyBAQCBDb2RlTWlycm9yLm92ZXJsYXlNb2Rl
ID0gZnVuY3Rpb24oYmFzZSwgb3ZlcmxheSwgY29tYmluZSkgewogICAgICAgICBvdmVybGF5OiBD
b2RlTWlycm9yLnN0YXJ0U3RhdGUob3ZlcmxheSksCiAgICAgICAgIGJhc2VQb3M6IDAsIGJhc2VD
dXI6IG51bGwsCiAgICAgICAgIG92ZXJsYXlQb3M6IDAsIG92ZXJsYXlDdXI6IG51bGwsCi0gICAg
ICAgIGxpbmVTZWVuOiBudWxsCisgICAgICAgIHN0cmVhbVNlZW46IG51bGwKICAgICAgIH07CiAg
ICAgfSwKICAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7CkBAIC00MSw5ICs0MSw5IEBA
IENvZGVNaXJyb3Iub3ZlcmxheU1vZGUgPSBmdW5jdGlvbihiYXNlLCBvdmVybGF5LCBjb21iaW5l
KSB7CiAgICAgfSwKIAogICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7Ci0gICAg
ICBpZiAoc3RyZWFtLnNvbCgpIHx8IHN0cmVhbS5zdHJpbmcgIT0gc3RhdGUubGluZVNlZW4gfHwK
KyAgICAgIGlmIChzdHJlYW0gIT0gc3RhdGUuc3RyZWFtU2VlbiB8fAogICAgICAgICAgIE1hdGgu
bWluKHN0YXRlLmJhc2VQb3MsIHN0YXRlLm92ZXJsYXlQb3MpIDwgc3RyZWFtLnN0YXJ0KSB7Ci0g
ICAgICAgIHN0YXRlLmxpbmVTZWVuID0gc3RyZWFtLnN0cmluZzsKKyAgICAgICAgc3RhdGUuc3Ry
ZWFtU2VlbiA9IHN0cmVhbTsKICAgICAgICAgc3RhdGUuYmFzZVBvcyA9IHN0YXRlLm92ZXJsYXlQ
b3MgPSBzdHJlYW0uc3RhcnQ7CiAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivc2Fzcy5qcyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivc2Fzcy5q
cwppbmRleCAyZmY1MDAzYzBhZDc5OWFlNzhjYmJlYmVjOWQzNWU2MGM5YjJmY2MwLi42OTczZWNl
MjkyYjA5MDE2YTQyMTk3YTgxZTNlMDk1OGVjZDdkZTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3Nhc3MuanMKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJv
ci9zYXNzLmpzCkBAIC0xMiwzMDIgKzEyLDM2OCBAQAogInVzZSBzdHJpY3QiOwogCiBDb2RlTWly
cm9yLmRlZmluZU1vZGUoInNhc3MiLCBmdW5jdGlvbihjb25maWcpIHsKLSAgdmFyIHRva2VuUmVn
ZXhwID0gZnVuY3Rpb24od29yZHMpeworICBmdW5jdGlvbiB0b2tlblJlZ2V4cCh3b3Jkcykgewog
ICAgIHJldHVybiBuZXcgUmVnRXhwKCJeIiArIHdvcmRzLmpvaW4oInwiKSk7Ci0gIH07CisgIH0K
IAogICB2YXIga2V5d29yZHMgPSBbInRydWUiLCAiZmFsc2UiLCAibnVsbCIsICJhdXRvIl07CiAg
IHZhciBrZXl3b3Jkc1JlZ2V4cCA9IG5ldyBSZWdFeHAoIl4iICsga2V5d29yZHMuam9pbigifCIp
KTsKIAotICB2YXIgb3BlcmF0b3JzID0gWyJcXCgiLCAiXFwpIiwgIj0iLCAiPiIsICI8IiwgIj09
IiwgIj49IiwgIjw9IiwgIlxcKyIsICItIiwgIlxcIT0iLCAiLyIsICJcXCoiLCAiJSIsICJhbmQi
LCAib3IiLCAibm90Il07CisgIHZhciBvcGVyYXRvcnMgPSBbIlxcKCIsICJcXCkiLCAiPSIsICI+
IiwgIjwiLCAiPT0iLCAiPj0iLCAiPD0iLCAiXFwrIiwgIi0iLAorICAgICAgICAgICAgICAgICAg
ICJcXCE9IiwgIi8iLCAiXFwqIiwgIiUiLCAiYW5kIiwgIm9yIiwgIm5vdCIsICI7IiwiXFx7Iiwi
XFx9IiwiOiJdOwogICB2YXIgb3BSZWdleHAgPSB0b2tlblJlZ2V4cChvcGVyYXRvcnMpOwogCi0g
IHZhciBwc2V1ZG9FbGVtZW50c1JlZ2V4cCA9IC9eOjo/W1x3XC1dKy87CisgIHZhciBwc2V1ZG9F
bGVtZW50c1JlZ2V4cCA9IC9eOjo/W2EtekEtWl9dW1x3XC1dKi87CiAKLSAgdmFyIHVybFRva2Vu
cyA9IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpeworICBmdW5jdGlvbiB1cmxUb2tlbnMoc3RyZWFt
LCBzdGF0ZSkgewogICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7CiAKLSAgICBpZiAoY2ggPT09
ICIpIil7CisgICAgaWYgKGNoID09PSAiKSIpIHsKICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAg
ICBzdGF0ZS50b2tlbml6ZXIgPSB0b2tlbkJhc2U7CiAgICAgICByZXR1cm4gIm9wZXJhdG9yIjsK
LSAgICB9ZWxzZSBpZiAoY2ggPT09ICIoIil7CisgICAgfSBlbHNlIGlmIChjaCA9PT0gIigiKSB7
CiAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAKICAgICAg
IHJldHVybiAib3BlcmF0b3IiOwotICAgIH1lbHNlIGlmIChjaCA9PT0gIiciIHx8IGNoID09PSAn
IicpeworICAgIH0gZWxzZSBpZiAoY2ggPT09ICInIiB8fCBjaCA9PT0gJyInKSB7CiAgICAgICBz
dGF0ZS50b2tlbml6ZXIgPSBidWlsZFN0cmluZ1Rva2VuaXplcihzdHJlYW0ubmV4dCgpKTsKICAg
ICAgIHJldHVybiAic3RyaW5nIjsKLSAgICB9ZWxzZXsKKyAgICB9IGVsc2UgewogICAgICAgc3Rh
dGUudG9rZW5pemVyID0gYnVpbGRTdHJpbmdUb2tlbml6ZXIoIikiLCBmYWxzZSk7CiAgICAgICBy
ZXR1cm4gInN0cmluZyI7CiAgICAgfQotICB9OwotICB2YXIgbXVsdGlsaW5lQ29tbWVudCA9IGZ1
bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAoc3RyZWFtLnNraXBUbygiKi8iKSl7Ci0g
ICAgICBzdHJlYW0ubmV4dCgpOwotICAgICAgc3RyZWFtLm5leHQoKTsKLSAgICAgIHN0YXRlLnRv
a2VuaXplciA9IHRva2VuQmFzZTsKLSAgICB9ZWxzZSB7Ci0gICAgICBzdHJlYW0ubmV4dCgpOwot
ICAgIH0KKyAgfQorICBmdW5jdGlvbiBjb21tZW50KGluZGVudGF0aW9uLCBtdWx0aUxpbmUpIHsK
KyAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgeworICAgICAgaWYgKHN0cmVhbS5z
b2woKSAmJiBzdHJlYW0uaW5kZW50YXRpb24oKSA8PSBpbmRlbnRhdGlvbikgeworICAgICAgICBz
dGF0ZS50b2tlbml6ZXIgPSB0b2tlbkJhc2U7CisgICAgICAgIHJldHVybiB0b2tlbkJhc2Uoc3Ry
ZWFtLCBzdGF0ZSk7CisgICAgICB9CiAKLSAgICByZXR1cm4gImNvbW1lbnQiOwotICB9OworICAg
ICAgaWYgKG11bHRpTGluZSAmJiBzdHJlYW0uc2tpcFRvKCIqLyIpKSB7CisgICAgICAgIHN0cmVh
bS5uZXh0KCk7CisgICAgICAgIHN0cmVhbS5uZXh0KCk7CisgICAgICAgIHN0YXRlLnRva2VuaXpl
ciA9IHRva2VuQmFzZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN0cmVhbS5za2lwVG9FbmQo
KTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuICJjb21tZW50IjsKKyAgICB9OworICB9CiAKLSAg
dmFyIGJ1aWxkU3RyaW5nVG9rZW5pemVyID0gZnVuY3Rpb24ocXVvdGUsIGdyZWVkeSl7Ci0gICAg
aWYoZ3JlZWR5ID09IG51bGwpeyBncmVlZHkgPSB0cnVlOyB9CisgIGZ1bmN0aW9uIGJ1aWxkU3Ry
aW5nVG9rZW5pemVyKHF1b3RlLCBncmVlZHkpIHsKKyAgICBpZiAoZ3JlZWR5ID09IG51bGwpIHsg
Z3JlZWR5ID0gdHJ1ZTsgfQogCi0gICAgZnVuY3Rpb24gc3RyaW5nVG9rZW5pemVyKHN0cmVhbSwg
c3RhdGUpeworICAgIGZ1bmN0aW9uIHN0cmluZ1Rva2VuaXplcihzdHJlYW0sIHN0YXRlKSB7CiAg
ICAgICB2YXIgbmV4dENoYXIgPSBzdHJlYW0ubmV4dCgpOwogICAgICAgdmFyIHBlZWtDaGFyID0g
c3RyZWFtLnBlZWsoKTsKICAgICAgIHZhciBwcmV2aW91c0NoYXIgPSBzdHJlYW0uc3RyaW5nLmNo
YXJBdChzdHJlYW0ucG9zLTIpOwogCiAgICAgICB2YXIgZW5kaW5nU3RyaW5nID0gKChuZXh0Q2hh
ciAhPT0gIlxcIiAmJiBwZWVrQ2hhciA9PT0gcXVvdGUpIHx8IChuZXh0Q2hhciA9PT0gcXVvdGUg
JiYgcHJldmlvdXNDaGFyICE9PSAiXFwiKSk7CiAKLSAgICAgIC8qCi0gICAgICBjb25zb2xlLmxv
ZygicHJldmlvdXNDaGFyOiAiICsgcHJldmlvdXNDaGFyKTsKLSAgICAgIGNvbnNvbGUubG9nKCJu
ZXh0Q2hhcjogIiArIG5leHRDaGFyKTsKLSAgICAgIGNvbnNvbGUubG9nKCJwZWVrQ2hhcjogIiAr
IHBlZWtDaGFyKTsKLSAgICAgIGNvbnNvbGUubG9nKCJlbmRpbmc6ICIgKyBlbmRpbmdTdHJpbmcp
OwotICAgICAgKi8KLQotICAgICAgaWYgKGVuZGluZ1N0cmluZyl7CisgICAgICBpZiAoZW5kaW5n
U3RyaW5nKSB7CiAgICAgICAgIGlmIChuZXh0Q2hhciAhPT0gcXVvdGUgJiYgZ3JlZWR5KSB7IHN0
cmVhbS5uZXh0KCk7IH0KICAgICAgICAgc3RhdGUudG9rZW5pemVyID0gdG9rZW5CYXNlOwogICAg
ICAgICByZXR1cm4gInN0cmluZyI7Ci0gICAgICB9ZWxzZSBpZiAobmV4dENoYXIgPT09ICIjIiAm
JiBwZWVrQ2hhciA9PT0gInsiKXsKKyAgICAgIH0gZWxzZSBpZiAobmV4dENoYXIgPT09ICIjIiAm
JiBwZWVrQ2hhciA9PT0gInsiKSB7CiAgICAgICAgIHN0YXRlLnRva2VuaXplciA9IGJ1aWxkSW50
ZXJwb2xhdGlvblRva2VuaXplcihzdHJpbmdUb2tlbml6ZXIpOwogICAgICAgICBzdHJlYW0ubmV4
dCgpOwogICAgICAgICByZXR1cm4gIm9wZXJhdG9yIjsKLSAgICAgIH1lbHNlIHsKKyAgICAgIH0g
ZWxzZSB7CiAgICAgICAgIHJldHVybiAic3RyaW5nIjsKICAgICAgIH0KICAgICB9CiAKICAgICBy
ZXR1cm4gc3RyaW5nVG9rZW5pemVyOwotICB9OworICB9CiAKLSAgdmFyIGJ1aWxkSW50ZXJwb2xh
dGlvblRva2VuaXplciA9IGZ1bmN0aW9uKGN1cnJlbnRUb2tlbml6ZXIpewotICAgIHJldHVybiBm
dW5jdGlvbihzdHJlYW0sIHN0YXRlKXsKLSAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSAifSIp
eworICBmdW5jdGlvbiBidWlsZEludGVycG9sYXRpb25Ub2tlbml6ZXIoY3VycmVudFRva2VuaXpl
cikgeworICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CisgICAgICBpZiAoc3Ry
ZWFtLnBlZWsoKSA9PT0gIn0iKSB7CiAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgIHN0
YXRlLnRva2VuaXplciA9IGN1cnJlbnRUb2tlbml6ZXI7CiAgICAgICAgIHJldHVybiAib3BlcmF0
b3IiOwotICAgICAgfWVsc2V7CisgICAgICB9IGVsc2UgewogICAgICAgICByZXR1cm4gdG9rZW5C
YXNlKHN0cmVhbSwgc3RhdGUpOwogICAgICAgfQogICAgIH07Ci0gIH07CisgIH0KIAotICB2YXIg
aW5kZW50ID0gZnVuY3Rpb24oc3RhdGUpewotICAgIGlmIChzdGF0ZS5pbmRlbnRDb3VudCA9PSAw
KXsKKyAgZnVuY3Rpb24gaW5kZW50KHN0YXRlKSB7CisgICAgaWYgKHN0YXRlLmluZGVudENvdW50
ID09IDApIHsKICAgICAgIHN0YXRlLmluZGVudENvdW50Kys7CiAgICAgICB2YXIgbGFzdFNjb3Bl
T2Zmc2V0ID0gc3RhdGUuc2NvcGVzWzBdLm9mZnNldDsKICAgICAgIHZhciBjdXJyZW50T2Zmc2V0
ID0gbGFzdFNjb3BlT2Zmc2V0ICsgY29uZmlnLmluZGVudFVuaXQ7CiAgICAgICBzdGF0ZS5zY29w
ZXMudW5zaGlmdCh7IG9mZnNldDpjdXJyZW50T2Zmc2V0IH0pOwogICAgIH0KLSAgfTsKKyAgfQog
Ci0gIHZhciBkZWRlbnQgPSBmdW5jdGlvbihzdGF0ZSl7Ci0gICAgaWYgKHN0YXRlLnNjb3Blcy5s
ZW5ndGggPT0gMSkgeyByZXR1cm47IH0KKyAgZnVuY3Rpb24gZGVkZW50KHN0YXRlKSB7CisgICAg
aWYgKHN0YXRlLnNjb3Blcy5sZW5ndGggPT0gMSkgcmV0dXJuOwogCiAgICAgc3RhdGUuc2NvcGVz
LnNoaWZ0KCk7Ci0gIH07CisgIH0KIAotICB2YXIgdG9rZW5CYXNlID0gZnVuY3Rpb24oc3RyZWFt
LCBzdGF0ZSkgeworICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgIHZh
ciBjaCA9IHN0cmVhbS5wZWVrKCk7CiAKLSAgICAvLyBTaW5nbGUgbGluZSBDb21tZW50Ci0gICAg
aWYgKHN0cmVhbS5tYXRjaCgnLy8nKSkgewotICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwotICAg
ICAgcmV0dXJuICJjb21tZW50IjsKKyAgICAvLyBDb21tZW50CisgICAgaWYgKHN0cmVhbS5tYXRj
aCgiLyoiKSkgeworICAgICAgc3RhdGUudG9rZW5pemVyID0gY29tbWVudChzdHJlYW0uaW5kZW50
YXRpb24oKSwgdHJ1ZSk7CisgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemVyKHN0cmVhbSwgc3Rh
dGUpOwogICAgIH0KLQotICAgIC8vIE11bHRpbGluZSBDb21tZW50Ci0gICAgaWYgKHN0cmVhbS5t
YXRjaCgnLyonKSl7Ci0gICAgICBzdGF0ZS50b2tlbml6ZXIgPSBtdWx0aWxpbmVDb21tZW50Owor
ICAgIGlmIChzdHJlYW0ubWF0Y2goIi8vIikpIHsKKyAgICAgIHN0YXRlLnRva2VuaXplciA9IGNv
bW1lbnQoc3RyZWFtLmluZGVudGF0aW9uKCksIGZhbHNlKTsKICAgICAgIHJldHVybiBzdGF0ZS50
b2tlbml6ZXIoc3RyZWFtLCBzdGF0ZSk7CiAgICAgfQogCiAgICAgLy8gSW50ZXJwb2xhdGlvbgot
ICAgIGlmIChzdHJlYW0ubWF0Y2goJyN7JykpewotICAgIHN0YXRlLnRva2VuaXplciA9IGJ1aWxk
SW50ZXJwb2xhdGlvblRva2VuaXplcih0b2tlbkJhc2UpOworICAgIGlmIChzdHJlYW0ubWF0Y2go
IiN7IikpIHsKKyAgICAgIHN0YXRlLnRva2VuaXplciA9IGJ1aWxkSW50ZXJwb2xhdGlvblRva2Vu
aXplcih0b2tlbkJhc2UpOwogICAgICAgcmV0dXJuICJvcGVyYXRvciI7CiAgICAgfQogCi0gICAg
aWYgKGNoID09PSAiLiIpeworICAgIC8vIFN0cmluZ3MKKyAgICBpZiAoY2ggPT09ICciJyB8fCBj
aCA9PT0gIiciKSB7CiAgICAgICBzdHJlYW0ubmV4dCgpOworICAgICAgc3RhdGUudG9rZW5pemVy
ID0gYnVpbGRTdHJpbmdUb2tlbml6ZXIoY2gpOworICAgICAgcmV0dXJuICJzdHJpbmciOworICAg
IH0KIAotICAgICAgLy8gTWF0Y2ggY2xhc3Mgc2VsZWN0b3JzCi0gICAgICBpZiAoc3RyZWFtLm1h
dGNoKC9eW1x3LV0rLykpewotICAgICAgICBpbmRlbnQoc3RhdGUpOwotICAgICAgICByZXR1cm4g
ImF0b20iOwotICAgICAgfWVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICIjIil7Ci0gICAgICAg
IGluZGVudChzdGF0ZSk7Ci0gICAgICAgIHJldHVybiAiYXRvbSI7Ci0gICAgICB9ZWxzZXsKLSAg
ICAgICAgcmV0dXJuICJvcGVyYXRvciI7CisgICAgaWYoIXN0YXRlLmN1cnNvckhhbGYpey8vIHN0
YXRlLmN1cnNvckhhbGYgPT09IDAKKyAgICAvLyBmaXJzdCBoYWxmIGkuZS4gYmVmb3JlIDogZm9y
IGtleS12YWx1ZSBwYWlycworICAgIC8vIGluY2x1ZGluZyBzZWxlY3RvcnMKKworICAgICAgaWYg
KGNoID09PSAiLiIpIHsKKyAgICAgICAgc3RyZWFtLm5leHQoKTsKKyAgICAgICAgaWYgKHN0cmVh
bS5tYXRjaCgvXltcdy1dKy8pKSB7CisgICAgICAgICAgaW5kZW50KHN0YXRlKTsKKyAgICAgICAg
ICByZXR1cm4gImF0b20iOworICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICIj
IikgeworICAgICAgICAgIGluZGVudChzdGF0ZSk7CisgICAgICAgICAgcmV0dXJuICJhdG9tIjsK
KyAgICAgICAgfQogICAgICAgfQotICAgIH0KIAotICAgIGlmIChjaCA9PT0gIiMiKXsKLSAgICAg
IHN0cmVhbS5uZXh0KCk7CisgICAgICBpZiAoY2ggPT09ICIjIikgeworICAgICAgICBzdHJlYW0u
bmV4dCgpOworICAgICAgICAvLyBJRCBzZWxlY3RvcnMKKyAgICAgICAgaWYgKHN0cmVhbS5tYXRj
aCgvXltcdy1dKy8pKSB7CisgICAgICAgICAgaW5kZW50KHN0YXRlKTsKKyAgICAgICAgICByZXR1
cm4gImF0b20iOworICAgICAgICB9CisgICAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSAiIyIp
IHsKKyAgICAgICAgICBpbmRlbnQoc3RhdGUpOworICAgICAgICAgIHJldHVybiAiYXRvbSI7Cisg
ICAgICAgIH0KKyAgICAgIH0KIAotICAgICAgLy8gSGV4IG51bWJlcnMKLSAgICAgIGlmIChzdHJl
YW0ubWF0Y2goL1swLTlhLWZBLUZdezZ9fFswLTlhLWZBLUZdezN9LykpewotICAgICAgICByZXR1
cm4gIm51bWJlciI7CisgICAgICAvLyBWYXJpYWJsZXMKKyAgICAgIGlmIChjaCA9PT0gIiQiKSB7
CisgICAgICAgIHN0cmVhbS5uZXh0KCk7CisgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LV0v
KTsKKyAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgICAgIH0KIAotICAgICAgLy8gSUQg
c2VsZWN0b3JzCi0gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW1x3LV0rLykpewotICAgICAgICBp
bmRlbnQoc3RhdGUpOworICAgICAgLy8gTnVtYmVycworICAgICAgaWYgKHN0cmVhbS5tYXRjaCgv
Xi0/WzAtOVwuXSsvKSkKKyAgICAgICAgcmV0dXJuICJudW1iZXIiOworCisgICAgICAvLyBVbml0
cworICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXihweHxlbXxpbilcYi8pKQorICAgICAgICByZXR1
cm4gInVuaXQiOworCisgICAgICBpZiAoc3RyZWFtLm1hdGNoKGtleXdvcmRzUmVnZXhwKSkKKyAg
ICAgICAgcmV0dXJuICJrZXl3b3JkIjsKKworICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXnVybC8p
ICYmIHN0cmVhbS5wZWVrKCkgPT09ICIoIikgeworICAgICAgICBzdGF0ZS50b2tlbml6ZXIgPSB1
cmxUb2tlbnM7CiAgICAgICAgIHJldHVybiAiYXRvbSI7CiAgICAgICB9CiAKLSAgICAgIGlmIChz
dHJlYW0ucGVlaygpID09PSAiIyIpewotICAgICAgICBpbmRlbnQoc3RhdGUpOwotICAgICAgICBy
ZXR1cm4gImF0b20iOworICAgICAgaWYgKGNoID09PSAiPSIpIHsKKyAgICAgICAgLy8gTWF0Y2gg
c2hvcnRjdXQgbWl4aW4gZGVmaW5pdGlvbgorICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9ePVtc
dy1dKy8pKSB7CisgICAgICAgICAgaW5kZW50KHN0YXRlKTsKKyAgICAgICAgICByZXR1cm4gIm1l
dGEiOworICAgICAgICB9CiAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gTnVtYmVycwotICAgIGlm
IChzdHJlYW0ubWF0Y2goL14tP1swLTlcLl0rLykpewotICAgICAgcmV0dXJuICJudW1iZXIiOwot
ICAgIH0KKyAgICAgIGlmIChjaCA9PT0gIisiKSB7CisgICAgICAgIC8vIE1hdGNoIHNob3J0Y3V0
IG1peGluIGRlZmluaXRpb24KKyAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlwrW1x3LV0rLykp
eworICAgICAgICAgIHJldHVybiAidmFyaWFibGUtMyI7CisgICAgICAgIH0KKyAgICAgIH0KIAot
ICAgIC8vIFVuaXRzCi0gICAgaWYgKHN0cmVhbS5tYXRjaCgvXihweHxlbXxpbilcYi8pKXsKLSAg
ICAgIHJldHVybiAidW5pdCI7Ci0gICAgfQorICAgICAgaWYoY2ggPT09ICJAIil7CisgICAgICAg
IGlmKHN0cmVhbS5tYXRjaCgvQGV4dGVuZC8pKXsKKyAgICAgICAgICBpZighc3RyZWFtLm1hdGNo
KC9ccypbXHddLykpCisgICAgICAgICAgICBkZWRlbnQoc3RhdGUpOworICAgICAgICB9CisgICAg
ICB9CiAKLSAgICBpZiAoc3RyZWFtLm1hdGNoKGtleXdvcmRzUmVnZXhwKSl7Ci0gICAgICByZXR1
cm4gImtleXdvcmQiOwotICAgIH0KIAotICAgIGlmIChzdHJlYW0ubWF0Y2goL151cmwvKSAmJiBz
dHJlYW0ucGVlaygpID09PSAiKCIpewotICAgICAgc3RhdGUudG9rZW5pemVyID0gdXJsVG9rZW5z
OwotICAgICAgcmV0dXJuICJhdG9tIjsKLSAgICB9CisgICAgICAvLyBJbmRlbnQgRGlyZWN0aXZl
cworICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXkAoZWxzZSBpZnxpZnxtZWRpYXxlbHNlfGZvcnxl
YWNofHdoaWxlfG1peGlufGZ1bmN0aW9uKS8pKSB7CisgICAgICAgIGluZGVudChzdGF0ZSk7Cisg
ICAgICAgIHJldHVybiAibWV0YSI7CisgICAgICB9CiAKLSAgICAvLyBWYXJpYWJsZXMKLSAgICBp
ZiAoY2ggPT09ICIkIil7Ci0gICAgICBzdHJlYW0ubmV4dCgpOwotICAgICAgc3RyZWFtLmVhdFdo
aWxlKC9bXHctXS8pOworICAgICAgLy8gT3RoZXIgRGlyZWN0aXZlcworICAgICAgaWYgKGNoID09
PSAiQCIpIHsKKyAgICAgICAgc3RyZWFtLm5leHQoKTsKKyAgICAgICAgc3RyZWFtLmVhdFdoaWxl
KC9bXHctXS8pOworICAgICAgICByZXR1cm4gIm1ldGEiOworICAgICAgfQorCisgICAgICBpZiAo
c3RyZWFtLmVhdFdoaWxlKC9bXHctXS8pKXsKKyAgICAgICAgaWYoc3RyZWFtLm1hdGNoKC8gKjog
Kltcdy1cK1wkIyFcKCInXS8sZmFsc2UpKXsKKyAgICAgICAgICByZXR1cm4gInByb3BlcnR5IjsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHN0cmVhbS5tYXRjaCgvICo6LyxmYWxzZSkpewor
ICAgICAgICAgIGluZGVudChzdGF0ZSk7CisgICAgICAgICAgc3RhdGUuY3Vyc29ySGFsZiA9IDE7
CisgICAgICAgICAgcmV0dXJuICJhdG9tIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHN0
cmVhbS5tYXRjaCgvICosLyxmYWxzZSkpeworICAgICAgICAgIHJldHVybiAiYXRvbSI7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZXsKKyAgICAgICAgICBpbmRlbnQoc3RhdGUpOworICAgICAgICAg
IHJldHVybiAiYXRvbSI7CisgICAgICAgIH0KKyAgICAgIH0KIAotICAgICAgaWYgKHN0cmVhbS5w
ZWVrKCkgPT09ICI6Iil7CisgICAgICBpZihjaCA9PT0gIjoiKXsKKyAgICAgICAgaWYgKHN0cmVh
bS5tYXRjaChwc2V1ZG9FbGVtZW50c1JlZ2V4cCkpeyAvLyBjb3VsZCBiZSBhIHBzZXVkby1lbGVt
ZW50CisgICAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKKyAgICAgICAgfQogICAgICAgICBzdHJl
YW0ubmV4dCgpOwotICAgICAgICByZXR1cm4gInZhcmlhYmxlLTIiOwotICAgICAgfWVsc2V7Ci0g
ICAgICAgIHJldHVybiAidmFyaWFibGUtMyI7CisgICAgICAgIHN0YXRlLmN1cnNvckhhbGY9MTsK
KyAgICAgICAgcmV0dXJuICJvcGVyYXRvciI7CiAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKGNo
ID09PSAiISIpewotICAgICAgc3RyZWFtLm5leHQoKTsKKyAgICB9IC8vIGN1cnNvckhhbGY9PT0w
IGVuZHMgaGVyZQorICAgIGVsc2V7CiAKLSAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15bXHddKy8p
KXsKLSAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKKyAgICAgIGlmIChjaCA9PT0gIiMiKSB7Cisg
ICAgICAgIHN0cmVhbS5uZXh0KCk7CisgICAgICAgIC8vIEhleCBudW1iZXJzCisgICAgICAgIGlm
IChzdHJlYW0ubWF0Y2goL1swLTlhLWZBLUZdezZ9fFswLTlhLWZBLUZdezN9LykpeworICAgICAg
ICAgIGlmKCFzdHJlYW0ucGVlaygpKXsKKyAgICAgICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAw
OworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gIm51bWJlciI7CisgICAgICAgIH0KICAg
ICAgIH0KIAotICAgICAgcmV0dXJuICJvcGVyYXRvciI7Ci0gICAgfQorICAgICAgLy8gTnVtYmVy
cworICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/WzAtOVwuXSsvKSl7CisgICAgICAgIGlmKCFz
dHJlYW0ucGVlaygpKXsKKyAgICAgICAgICBzdGF0ZS5jdXJzb3JIYWxmID0gMDsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gIm51bWJlciI7CisgICAgICB9CiAKLSAgICBpZiAoY2ggPT09ICI9
Iil7Ci0gICAgICBzdHJlYW0ubmV4dCgpOworICAgICAgLy8gVW5pdHMKKyAgICAgIGlmIChzdHJl
YW0ubWF0Y2goL14ocHh8ZW18aW4pXGIvKSl7CisgICAgICAgIGlmKCFzdHJlYW0ucGVlaygpKXsK
KyAgICAgICAgICBzdGF0ZS5jdXJzb3JIYWxmID0gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gInVuaXQiOworICAgICAgfQogCi0gICAgICAvLyBNYXRjaCBzaG9ydGN1dCBtaXhpbiBkZWZp
bml0aW9uCi0gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW1x3LV0rLykpewotICAgICAgICBpbmRl
bnQoc3RhdGUpOwotICAgICAgICByZXR1cm4gIm1ldGEiOwotICAgICAgfWVsc2UgewotICAgICAg
ICByZXR1cm4gIm9wZXJhdG9yIjsKKyAgICAgIGlmIChzdHJlYW0ubWF0Y2goa2V5d29yZHNSZWdl
eHApKXsKKyAgICAgICAgaWYoIXN0cmVhbS5wZWVrKCkpeworICAgICAgICAgIHN0YXRlLmN1cnNv
ckhhbGYgPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgICB9
Ci0gICAgfQogCi0gICAgaWYgKGNoID09PSAiKyIpewotICAgICAgc3RyZWFtLm5leHQoKTsKKyAg
ICAgIGlmIChzdHJlYW0ubWF0Y2goL151cmwvKSAmJiBzdHJlYW0ucGVlaygpID09PSAiKCIpIHsK
KyAgICAgICAgc3RhdGUudG9rZW5pemVyID0gdXJsVG9rZW5zOworICAgICAgICBpZighc3RyZWFt
LnBlZWsoKSl7CisgICAgICAgICAgc3RhdGUuY3Vyc29ySGFsZiA9IDA7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuICJhdG9tIjsKKyAgICAgIH0KIAotICAgICAgLy8gTWF0Y2ggc2hvcnRjdXQg
bWl4aW4gZGVmaW5pdGlvbgotICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXltcdy1dKy8pKXsKKyAg
ICAgIC8vIFZhcmlhYmxlcworICAgICAgaWYgKGNoID09PSAiJCIpIHsKKyAgICAgICAgc3RyZWFt
Lm5leHQoKTsKKyAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHctXS8pOworICAgICAgICBpZigh
c3RyZWFtLnBlZWsoKSl7CisgICAgICAgICAgc3RhdGUuY3Vyc29ySGFsZiA9IDA7CisgICAgICAg
IH0KICAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS0zIjsKLSAgICAgIH1lbHNlIHsKLSAgICAgICAg
cmV0dXJuICJvcGVyYXRvciI7CiAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gSW5kZW50IERpcmVj
dGl2ZXMKLSAgICBpZiAoc3RyZWFtLm1hdGNoKC9eQChlbHNlIGlmfGlmfG1lZGlhfGVsc2V8Zm9y
fGVhY2h8d2hpbGV8bWl4aW58ZnVuY3Rpb24pLykpewotICAgICAgaW5kZW50KHN0YXRlKTsKLSAg
ICAgIHJldHVybiAibWV0YSI7Ci0gICAgfQorICAgICAgLy8gYmFuZyBjaGFyYWN0ZXIgZm9yICFp
bXBvcnRhbnQsICFkZWZhdWx0LCBldGMuCisgICAgICBpZiAoY2ggPT09ICIhIikgeworICAgICAg
ICBzdHJlYW0ubmV4dCgpOworICAgICAgICBpZighc3RyZWFtLnBlZWsoKSl7CisgICAgICAgICAg
c3RhdGUuY3Vyc29ySGFsZiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0cmVhbS5t
YXRjaCgvXltcd10rLykgPyAia2V5d29yZCI6ICJvcGVyYXRvciI7CisgICAgICB9CiAKLSAgICAv
LyBPdGhlciBEaXJlY3RpdmVzCi0gICAgaWYgKGNoID09PSAiQCIpewotICAgICAgc3RyZWFtLm5l
eHQoKTsKLSAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LV0vKTsKLSAgICAgIHJldHVybiAibWV0
YSI7Ci0gICAgfQorICAgICAgaWYgKHN0cmVhbS5tYXRjaChvcFJlZ2V4cCkpeworICAgICAgICBp
Zighc3RyZWFtLnBlZWsoKSl7CisgICAgICAgICAgc3RhdGUuY3Vyc29ySGFsZiA9IDA7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuICJvcGVyYXRvciI7CisgICAgICB9CiAKLSAgICAvLyBTdHJp
bmdzCi0gICAgaWYgKGNoID09PSAnIicgfHwgY2ggPT09ICInIil7Ci0gICAgICBzdHJlYW0ubmV4
dCgpOwotICAgICAgc3RhdGUudG9rZW5pemVyID0gYnVpbGRTdHJpbmdUb2tlbml6ZXIoY2gpOwot
ICAgICAgcmV0dXJuICJzdHJpbmciOwotICAgIH0KKyAgICAgIC8vIGF0dHJpYnV0ZXMKKyAgICAg
IGlmIChzdHJlYW0uZWF0V2hpbGUoL1tcdy1dLykpIHsKKyAgICAgICAgaWYoIXN0cmVhbS5wZWVr
KCkpeworICAgICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAwOworICAgICAgICB9CisgICAgICAg
IHJldHVybiAiYXR0cmlidXRlIjsKKyAgICAgIH0KIAotICAgIC8vIFBzZXVkbyBlbGVtZW50IHNl
bGVjdG9ycwotICAgIGlmIChjaCA9PSAnOicgJiYgc3RyZWFtLm1hdGNoKHBzZXVkb0VsZW1lbnRz
UmVnZXhwKSl7Ci0gICAgICByZXR1cm4gImtleXdvcmQiOwotICAgIH0KKyAgICAgIC8vc3RyZWFt
LmVhdFNwYWNlKCk7CisgICAgICBpZighc3RyZWFtLnBlZWsoKSl7CisgICAgICAgIHN0YXRlLmN1
cnNvckhhbGYgPSAwOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KIAotICAgIC8vIGF0
b21zCi0gICAgaWYgKHN0cmVhbS5lYXRXaGlsZSgvW1x3LSZdLykpewotICAgICAgLy8gbWF0Y2hl
cyBhIHByb3BlcnR5IGRlZmluaXRpb24KLSAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSAiOiIg
JiYgIXN0cmVhbS5tYXRjaChwc2V1ZG9FbGVtZW50c1JlZ2V4cCwgZmFsc2UpKQotICAgICAgICBy
ZXR1cm4gInByb3BlcnR5IjsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuICJhdG9tIjsKLSAg
ICB9CisgICAgfSAvLyBlbHNlIGVuZHMgaGVyZQogCi0gICAgaWYgKHN0cmVhbS5tYXRjaChvcFJl
Z2V4cCkpeworICAgIGlmIChzdHJlYW0ubWF0Y2gob3BSZWdleHApKQogICAgICAgcmV0dXJuICJv
cGVyYXRvciI7Ci0gICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZW4ndCByZXR1cm5lZCBieSBub3cs
IHdlIG1vdmUgMSBjaGFyYWN0ZXIKICAgICAvLyBhbmQgcmV0dXJuIGFuIGVycm9yCiAgICAgc3Ry
ZWFtLm5leHQoKTsKICAgICByZXR1cm4gbnVsbDsKLSAgfTsKKyAgfQogCi0gIHZhciB0b2tlbkxl
eGVyID0gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgIGlmIChzdHJlYW0uc29sKCkpewot
ICAgICAgc3RhdGUuaW5kZW50Q291bnQgPSAwOwotICAgIH0KKyAgZnVuY3Rpb24gdG9rZW5MZXhl
cihzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHN0cmVhbS5zb2woKSkgc3RhdGUuaW5kZW50Q291
bnQgPSAwOwogICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplcihzdHJlYW0sIHN0YXRlKTsK
ICAgICB2YXIgY3VycmVudCA9IHN0cmVhbS5jdXJyZW50KCk7CiAKLSAgICBpZiAoY3VycmVudCA9
PT0gIkByZXR1cm4iKXsKKyAgICBpZiAoY3VycmVudCA9PT0gIkByZXR1cm4iIHx8IGN1cnJlbnQg
PT09ICJ9Iil7CiAgICAgICBkZWRlbnQoc3RhdGUpOwogICAgIH0KIAotICAgIGlmIChzdHlsZSA9
PT0gImF0b20iKXsKLSAgICAgIGluZGVudChzdGF0ZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxl
ICE9PSBudWxsKXsKKyAgICBpZiAoc3R5bGUgIT09IG51bGwpIHsKICAgICAgIHZhciBzdGFydE9m
VG9rZW4gPSBzdHJlYW0ucG9zIC0gY3VycmVudC5sZW5ndGg7CisKICAgICAgIHZhciB3aXRoQ3Vy
cmVudEluZGVudCA9IHN0YXJ0T2ZUb2tlbiArIChjb25maWcuaW5kZW50VW5pdCAqIHN0YXRlLmlu
ZGVudENvdW50KTsKIAogICAgICAgdmFyIG5ld1Njb3BlcyA9IFtdOwogCi0gICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHN0YXRlLnNjb3Blcy5sZW5ndGg7IGkrKyl7CisgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN0YXRlLnNjb3Blcy5sZW5ndGg7IGkrKykgewogICAgICAgICB2YXIgc2NvcGUg
PSBzdGF0ZS5zY29wZXNbaV07CiAKLSAgICAgICAgaWYgKHNjb3BlLm9mZnNldCA8PSB3aXRoQ3Vy
cmVudEluZGVudCl7CisgICAgICAgIGlmIChzY29wZS5vZmZzZXQgPD0gd2l0aEN1cnJlbnRJbmRl
bnQpCiAgICAgICAgICAgbmV3U2NvcGVzLnB1c2goc2NvcGUpOwotICAgICAgICB9CiAgICAgICB9
CiAKICAgICAgIHN0YXRlLnNjb3BlcyA9IG5ld1Njb3BlczsKQEAgLTMxNSwxMyArMzgxLDE2IEBA
IENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic2FzcyIsIGZ1bmN0aW9uKGNvbmZpZykgewogCiAKICAg
ICByZXR1cm4gc3R5bGU7Ci0gIH07CisgIH0KIAogICByZXR1cm4gewogICAgIHN0YXJ0U3RhdGU6
IGZ1bmN0aW9uKCkgewogICAgICAgcmV0dXJuIHsKICAgICAgICAgdG9rZW5pemVyOiB0b2tlbkJh
c2UsCi0gICAgICAgIHNjb3BlczogW3tvZmZzZXQ6IDAsIHR5cGU6ICdzYXNzJ31dLAorICAgICAg
ICBzY29wZXM6IFt7b2Zmc2V0OiAwLCB0eXBlOiAic2FzcyJ9XSwKKyAgICAgICAgaW5kZW50Q291
bnQ6IDAsCisgICAgICAgIGN1cnNvckhhbGY6IDAsICAvLyBjdXJzb3IgaGFsZiB0ZWxscyB1cyBp
ZiBjdXJzb3IgbGllcyBhZnRlciAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIGJl
Zm9yZSAoMCkgY29sb24gKHdlbGwuLi4gbW9yZSBvciBsZXNzKQogICAgICAgICBkZWZpbmVkVmFy
czogW10sCiAgICAgICAgIGRlZmluZWRNaXhpbnM6IFtdCiAgICAgICB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9z
ZWFyY2hjdXJzb3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Db2RlTWlycm9yL3NlYXJjaGN1cnNvci5qcwppbmRleCAyNzgzMzA4ODU4Y2JiOGE4ZmRm
MzZjODUxMTRkY2Q1ODBiMGMyZTYzLi5iNzAyNDJlZTRiOGNmMWI2OThlNThiZTU5ZmQ0YTRjZDA1
MDY1MDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Db2RlTWlycm9yL3NlYXJjaGN1cnNvci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NlYXJjaGN1cnNvci5qcwpA
QCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgICAgICB2YXIgZnJvbSA9IFBvcyhwb3MubGluZSwg
Y3V0KTsKICAgICAgICAgICAgIGZvciAodmFyIGxuID0gcG9zLmxpbmUgKyAxLCBpID0gMTsgaSA8
IGxhc3Q7ICsraSwgKytsbikKICAgICAgICAgICAgICAgaWYgKHRhcmdldFtpXSAhPSBmb2xkKGRv
Yy5nZXRMaW5lKGxuKSkpIHJldHVybjsKLSAgICAgICAgICAgIGlmIChkb2MuZ2V0TGluZShsbiku
c2xpY2UoMCwgb3JpZ1RhcmdldFtsYXN0XS5sZW5ndGgpICE9IHRhcmdldFtsYXN0XSkgcmV0dXJu
OworICAgICAgICAgICAgaWYgKGZvbGQoZG9jLmdldExpbmUobG4pLnNsaWNlKDAsIG9yaWdUYXJn
ZXRbbGFzdF0ubGVuZ3RoKSkgIT0gdGFyZ2V0W2xhc3RdKSByZXR1cm47CiAgICAgICAgICAgICBy
ZXR1cm4ge2Zyb206IGZyb20sIHRvOiBQb3MobG4sIG9yaWdUYXJnZXRbbGFzdF0ubGVuZ3RoKX07
CiAgICAgICAgICAgfQogICAgICAgICB9OwpAQCAtMTQ4LDEwICsxNDgsMTAgQEAKICAgICBmcm9t
OiBmdW5jdGlvbigpIHtpZiAodGhpcy5hdE9jY3VycmVuY2UpIHJldHVybiB0aGlzLnBvcy5mcm9t
O30sCiAgICAgdG86IGZ1bmN0aW9uKCkge2lmICh0aGlzLmF0T2NjdXJyZW5jZSkgcmV0dXJuIHRo
aXMucG9zLnRvO30sCiAKLSAgICByZXBsYWNlOiBmdW5jdGlvbihuZXdUZXh0KSB7CisgICAgcmVw
bGFjZTogZnVuY3Rpb24obmV3VGV4dCwgb3JpZ2luKSB7CiAgICAgICBpZiAoIXRoaXMuYXRPY2N1
cnJlbmNlKSByZXR1cm47CiAgICAgICB2YXIgbGluZXMgPSBDb2RlTWlycm9yLnNwbGl0TGluZXMo
bmV3VGV4dCk7Ci0gICAgICB0aGlzLmRvYy5yZXBsYWNlUmFuZ2UobGluZXMsIHRoaXMucG9zLmZy
b20sIHRoaXMucG9zLnRvKTsKKyAgICAgIHRoaXMuZG9jLnJlcGxhY2VSYW5nZShsaW5lcywgdGhp
cy5wb3MuZnJvbSwgdGhpcy5wb3MudG8sIG9yaWdpbik7CiAgICAgICB0aGlzLnBvcy50byA9IFBv
cyh0aGlzLnBvcy5mcm9tLmxpbmUgKyBsaW5lcy5sZW5ndGggLSAxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoICsgKGxpbmVzLmxlbmd0aCA9
PSAxID8gdGhpcy5wb3MuZnJvbS5jaCA6IDApKTsKICAgICB9CkBAIC0xNzcsOSArMTc3LDkgQEAK
ICAgfSk7CiAKICAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oInNlbGVjdE1hdGNoZXMiLCBm
dW5jdGlvbihxdWVyeSwgY2FzZUZvbGQpIHsKLSAgICB2YXIgcmFuZ2VzID0gW10sIG5leHQ7Cisg
ICAgdmFyIHJhbmdlcyA9IFtdOwogICAgIHZhciBjdXIgPSB0aGlzLmdldFNlYXJjaEN1cnNvcihx
dWVyeSwgdGhpcy5nZXRDdXJzb3IoImZyb20iKSwgY2FzZUZvbGQpOwotICAgIHdoaWxlIChuZXh0
ID0gY3VyLmZpbmROZXh0KCkpIHsKKyAgICB3aGlsZSAoY3VyLmZpbmROZXh0KCkpIHsKICAgICAg
IGlmIChDb2RlTWlycm9yLmNtcFBvcyhjdXIudG8oKSwgdGhpcy5nZXRDdXJzb3IoInRvIikpID4g
MCkgYnJlYWs7CiAgICAgICByYW5nZXMucHVzaCh7YW5jaG9yOiBjdXIuZnJvbSgpLCBoZWFkOiBj
dXIudG8oKX0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivc3FsLmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zcWwuanMKaW5kZXggNmMwMmY0
ZTk0NzQxYmZiMDQ3NzA1OTYwMTEyN2FhZTQzOTcyMmVjMi4uYTkwODI3NzE1MWZlOWZkNTA4YTQx
MzcxNWY3YjMxMDljMzQ4Mjc3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zcWwuanMKKysrIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zcWwuanMKQEAgLTE5
MCw3ICsxOTAsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7CiAKICAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0
ZXIpIHsKICAgICAgIHZhciBjeCA9IHN0YXRlLmNvbnRleHQ7Ci0gICAgICBpZiAoIWN4KSByZXR1
cm4gMDsKKyAgICAgIGlmICghY3gpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CiAgICAgICB2YXIg
Y2xvc2luZyA9IHRleHRBZnRlci5jaGFyQXQoMCkgPT0gY3gudHlwZTsKICAgICAgIGlmIChjeC5h
bGlnbikgcmV0dXJuIGN4LmNvbCArIChjbG9zaW5nID8gMCA6IDEpOwogICAgICAgZWxzZSByZXR1
cm4gY3guaW5kZW50ICsgKGNsb3NpbmcgPyAwIDogY29uZmlnLmluZGVudFVuaXQpOwpAQCAtMjEz
LDcgKzIxMyw4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29uZmln
LCBwYXJzZXJDb25maWcpIHsKICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVs
bCkgewogICAgICAgaWYgKGNoID09ICJgIiAmJiAhc3RyZWFtLmVhdCgiYCIpKSByZXR1cm4gInZh
cmlhYmxlLTIiOwogICAgIH0KLSAgICByZXR1cm4gbnVsbDsKKyAgICBzdHJlYW0uYmFja1VwKHN0
cmVhbS5jdXJyZW50KCkubGVuZ3RoIC0gMSk7CisgICAgcmV0dXJuIHN0cmVhbS5lYXRXaGlsZSgv
XHcvKSA/ICJ2YXJpYWJsZS0yIiA6IG51bGw7CiAgIH0KIAogICAvLyB2YXJpYWJsZSB0b2tlbgpA
QCAtMjU2LDcgKzI1Nyw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgfQogCiAgIC8vIHRoZXNlIGtleXdvcmRzIGFyZSB1
c2VkIGJ5IGFsbCBTUUwgZGlhbGVjdHMgKGhvd2V2ZXIsIGEgbW9kZSBjYW4gc3RpbGwgb3Zlcndy
aXRlIGl0KQotICB2YXIgc3FsS2V5d29yZHMgPSAiYWx0ZXIgYW5kIGFzIGFzYyBiZXR3ZWVuIGJ5
IGNvdW50IGNyZWF0ZSBkZWxldGUgZGVzYyBkaXN0aW5jdCBkcm9wIGZyb20gaGF2aW5nIGluIGlu
c2VydCBpbnRvIGlzIGpvaW4gbGlrZSBub3Qgb24gb3Igb3JkZXIgc2VsZWN0IHNldCB0YWJsZSB1
bmlvbiB1cGRhdGUgdmFsdWVzIHdoZXJlICI7CisgIHZhciBzcWxLZXl3b3JkcyA9ICJhbHRlciBh
bmQgYXMgYXNjIGJldHdlZW4gYnkgY291bnQgY3JlYXRlIGRlbGV0ZSBkZXNjIGRpc3RpbmN0IGRy
b3AgZnJvbSBncm91cCBoYXZpbmcgaW4gaW5zZXJ0IGludG8gaXMgam9pbiBsaWtlIG5vdCBvbiBv
ciBvcmRlciBzZWxlY3Qgc2V0IHRhYmxlIHVuaW9uIHVwZGF0ZSB2YWx1ZXMgd2hlcmUgIjsKIAog
ICAvLyB0dXJuIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3QgaW50byBhbiBhcnJheQogICBmdW5jdGlv
biBzZXQoc3RyKSB7CkBAIC0yNzksNyArMjgwLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJz
cWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICBDb2RlTWlycm9yLmRlZmlu
ZU1JTUUoInRleHQveC1tc3NxbCIsIHsKICAgICBuYW1lOiAic3FsIiwKICAgICBjbGllbnQ6IHNl
dCgiY2hhcnNldCBjbGVhciBjb25uZWN0IGVkaXQgZWdvIGV4aXQgZ28gaGVscCBub3BhZ2VyIG5v
dGVlIG5vd2FybmluZyBwYWdlciBwcmludCBwcm9tcHQgcXVpdCByZWhhc2ggc291cmNlIHN0YXR1
cyBzeXN0ZW0gdGVlIiksCi0gICAga2V5d29yZHM6IHNldChzcWxLZXl3b3JkcyArICJiZWdpbiB0
cmlnZ2VyIHByb2MgdmlldyBpbmRleCBmb3IgYWRkIGNvbnN0cmFpbnQga2V5IHByaW1hcnkgZm9y
ZWlnbiBjb2xsYXRlIGNsdXN0ZXJlZCBub25jbHVzdGVyZWQiKSwKKyAgICBrZXl3b3Jkczogc2V0
KHNxbEtleXdvcmRzICsgImJlZ2luIHRyaWdnZXIgcHJvYyB2aWV3IGluZGV4IGZvciBhZGQgY29u
c3RyYWludCBrZXkgcHJpbWFyeSBmb3JlaWduIGNvbGxhdGUgY2x1c3RlcmVkIG5vbmNsdXN0ZXJl
ZCBkZWNsYXJlIiksCiAgICAgYnVpbHRpbjogc2V0KCJiaWdpbnQgbnVtZXJpYyBiaXQgc21hbGxp
bnQgZGVjaW1hbCBzbWFsbG1vbmV5IGludCB0aW55aW50IG1vbmV5IGZsb2F0IHJlYWwgY2hhciB2
YXJjaGFyIHRleHQgbmNoYXIgbnZhcmNoYXIgbnRleHQgYmluYXJ5IHZhcmJpbmFyeSBpbWFnZSBj
dXJzb3IgdGltZXN0YW1wIGhpZXJhcmNoeWlkIHVuaXF1ZWlkZW50aWZpZXIgc3FsX3ZhcmlhbnQg
eG1sIHRhYmxlICIpLAogICAgIGF0b21zOiBzZXQoImZhbHNlIHRydWUgbnVsbCB1bmtub3duIiks
CiAgICAgb3BlcmF0b3JDaGFyczogL15bKitcLSU8PiE9XS8sCkBAIC0yOTIsNyArMjkzLDcgQEAg
Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZp
ZykgewogICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1teXNxbCIsIHsKICAgICBuYW1l
OiAic3FsIiwKICAgICBjbGllbnQ6IHNldCgiY2hhcnNldCBjbGVhciBjb25uZWN0IGVkaXQgZWdv
IGV4aXQgZ28gaGVscCBub3BhZ2VyIG5vdGVlIG5vd2FybmluZyBwYWdlciBwcmludCBwcm9tcHQg
cXVpdCByZWhhc2ggc291cmNlIHN0YXR1cyBzeXN0ZW0gdGVlIiksCi0gICAga2V5d29yZHM6IHNl
dChzcWxLZXl3b3JkcyArICJhY2Nlc3NpYmxlIGFjdGlvbiBhZGQgYWZ0ZXIgYWxnb3JpdGhtIGFs
bCBhbmFseXplIGFzZW5zaXRpdmUgYXQgYXV0aG9ycyBhdXRvX2luY3JlbWVudCBhdXRvY29tbWl0
IGF2ZyBhdmdfcm93X2xlbmd0aCBiZWZvcmUgYmluYXJ5IGJpbmxvZyBib3RoIGJ0cmVlIGNhY2hl
IGNhbGwgY2FzY2FkZSBjYXNjYWRlZCBjYXNlIGNhdGFsb2dfbmFtZSBjaGFpbiBjaGFuZ2UgY2hh
bmdlZCBjaGFyYWN0ZXIgY2hlY2sgY2hlY2twb2ludCBjaGVja3N1bSBjbGFzc19vcmlnaW4gY2xp
ZW50X3N0YXRpc3RpY3MgY2xvc2UgY29hbGVzY2UgY29kZSBjb2xsYXRlIGNvbGxhdGlvbiBjb2xs
YXRpb25zIGNvbHVtbiBjb2x1bW5zIGNvbW1lbnQgY29tbWl0IGNvbW1pdHRlZCBjb21wbGV0aW9u
IGNvbmN1cnJlbnQgY29uZGl0aW9uIGNvbm5lY3Rpb24gY29uc2lzdGVudCBjb25zdHJhaW50IGNv
bnRhaW5zIGNvbnRpbnVlIGNvbnRyaWJ1dG9ycyBjb252ZXJ0IGNyb3NzIGN1cnJlbnQgY3VycmVu
dF9kYXRlIGN1cnJlbnRfdGltZSBjdXJyZW50X3RpbWVzdGFtcCBjdXJyZW50X3VzZXIgY3Vyc29y
IGRhdGEgZGF0YWJhc2UgZGF0YWJhc2VzIGRheV9ob3VyIGRheV9taWNyb3NlY29uZCBkYXlfbWlu
dXRlIGRheV9zZWNvbmQgZGVhbGxvY2F0ZSBkZWMgZGVjbGFyZSBkZWZhdWx0IGRlbGF5X2tleV93
cml0ZSBkZWxheWVkIGRlbGltaXRlciBkZXNfa2V5X2ZpbGUgZGVzY3JpYmUgZGV0ZXJtaW5pc3Rp
YyBkZXZfcG9wIGRldl9zYW1wIGRldmlhbmNlIGRpYWdub3N0aWNzIGRpcmVjdG9yeSBkaXNhYmxl
IGRpc2NhcmQgZGlzdGluY3Ryb3cgZGl2IGR1YWwgZHVtcGZpbGUgZWFjaCBlbHNlaWYgZW5hYmxl
IGVuY2xvc2VkIGVuZCBlbmRzIGVuZ2luZSBlbmdpbmVzIGVudW0gZXJyb3JzIGVzY2FwZSBlc2Nh
cGVkIGV2ZW4gZXZlbnQgZXZlbnRzIGV2ZXJ5IGV4ZWN1dGUgZXhpc3RzIGV4aXQgZXhwbGFpbiBl
eHRlbmRlZCBmYXN0IGZldGNoIGZpZWxkIGZpZWxkcyBmaXJzdCBmbHVzaCBmb3IgZm9yY2UgZm9y
ZWlnbiBmb3VuZF9yb3dzIGZ1bGwgZnVsbHRleHQgZnVuY3Rpb24gZ2VuZXJhbCBnZXQgZ2xvYmFs
IGdyYW50IGdyYW50cyBncm91cCBncm91cGJ5X2NvbmNhdCBoYW5kbGVyIGhhc2ggaGVscCBoaWdo
X3ByaW9yaXR5IGhvc3RzIGhvdXJfbWljcm9zZWNvbmQgaG91cl9taW51dGUgaG91cl9zZWNvbmQg
aWYgaWdub3JlIGlnbm9yZV9zZXJ2ZXJfaWRzIGltcG9ydCBpbmRleCBpbmRleF9zdGF0aXN0aWNz
IGluZmlsZSBpbm5lciBpbm5vZGIgaW5vdXQgaW5zZW5zaXRpdmUgaW5zZXJ0X21ldGhvZCBpbnN0
YWxsIGludGVydmFsIGludm9rZXIgaXNvbGF0aW9uIGl0ZXJhdGUga2V5IGtleXMga2lsbCBsYW5n
dWFnZSBsYXN0IGxlYWRpbmcgbGVhdmUgbGVmdCBsZXZlbCBsaW1pdCBsaW5lYXIgbGluZXMgbGlz
dCBsb2FkIGxvY2FsIGxvY2FsdGltZSBsb2NhbHRpbWVzdGFtcCBsb2NrIGxvZ3MgbG93X3ByaW9y
aXR5IG1hc3RlciBtYXN0ZXJfaGVhcnRiZWF0X3BlcmlvZCBtYXN0ZXJfc3NsX3ZlcmlmeV9zZXJ2
ZXJfY2VydCBtYXN0ZXJzIG1hdGNoIG1heCBtYXhfcm93cyBtYXh2YWx1ZSBtZXNzYWdlX3RleHQg
bWlkZGxlaW50IG1pZ3JhdGUgbWluIG1pbl9yb3dzIG1pbnV0ZV9taWNyb3NlY29uZCBtaW51dGVf
c2Vjb25kIG1vZCBtb2RlIG1vZGlmaWVzIG1vZGlmeSBtdXRleCBteXNxbF9lcnJubyBuYXR1cmFs
IG5leHQgbm8gbm9fd3JpdGVfdG9fYmlubG9nIG9mZmxpbmUgb2Zmc2V0IG9uZSBvbmxpbmUgb3Bl
biBvcHRpbWl6ZSBvcHRpb24gb3B0aW9uYWxseSBvdXQgb3V0ZXIgb3V0ZmlsZSBwYWNrX2tleXMg
cGFyc2VyIHBhcnRpdGlvbiBwYXJ0aXRpb25zIHBhc3N3b3JkIHBoYXNlIHBsdWdpbiBwbHVnaW5z
IHByZXBhcmUgcHJlc2VydmUgcHJldiBwcmltYXJ5IHByaXZpbGVnZXMgcHJvY2VkdXJlIHByb2Nl
c3NsaXN0IHByb2ZpbGUgcHJvZmlsZXMgcHVyZ2UgcXVlcnkgcXVpY2sgcmFuZ2UgcmVhZCByZWFk
X3dyaXRlIHJlYWRzIHJlYWwgcmVidWlsZCByZWNvdmVyIHJlZmVyZW5jZXMgcmVnZXhwIHJlbGF5
bG9nIHJlbGVhc2UgcmVtb3ZlIHJlbmFtZSByZW9yZ2FuaXplIHJlcGFpciByZXBlYXRhYmxlIHJl
cGxhY2UgcmVxdWlyZSByZXNpZ25hbCByZXN0cmljdCByZXN1bWUgcmV0dXJuIHJldHVybnMgcmV2
b2tlIHJpZ2h0IHJsaWtlIHJvbGxiYWNrIHJvbGx1cCByb3cgcm93X2Zvcm1hdCBydHJlZSBzYXZl
cG9pbnQgc2NoZWR1bGUgc2NoZW1hIHNjaGVtYV9uYW1lIHNjaGVtYXMgc2Vjb25kX21pY3Jvc2Vj
b25kIHNlY3VyaXR5IHNlbnNpdGl2ZSBzZXBhcmF0b3Igc2VyaWFsaXphYmxlIHNlcnZlciBzZXNz
aW9uIHNoYXJlIHNob3cgc2lnbmFsIHNsYXZlIHNsb3cgc21hbGxpbnQgc25hcHNob3Qgc29uYW1l
IHNwYXRpYWwgc3BlY2lmaWMgc3FsIHNxbF9iaWdfcmVzdWx0IHNxbF9idWZmZXJfcmVzdWx0IHNx
bF9jYWNoZSBzcWxfY2FsY19mb3VuZF9yb3dzIHNxbF9ub19jYWNoZSBzcWxfc21hbGxfcmVzdWx0
IHNxbGV4Y2VwdGlvbiBzcWxzdGF0ZSBzcWx3YXJuaW5nIHNzbCBzdGFydCBzdGFydGluZyBzdGFy
dHMgc3RhdHVzIHN0ZCBzdGRkZXYgc3RkZGV2X3BvcCBzdGRkZXZfc2FtcCBzdG9yYWdlIHN0cmFp
Z2h0X2pvaW4gc3ViY2xhc3Nfb3JpZ2luIHN1bSBzdXNwZW5kIHRhYmxlX25hbWUgdGFibGVfc3Rh
dGlzdGljcyB0YWJsZXMgdGFibGVzcGFjZSB0ZW1wb3JhcnkgdGVybWluYXRlZCB0byB0cmFpbGlu
ZyB0cmFuc2FjdGlvbiB0cmlnZ2VyIHRyaWdnZXJzIHRydW5jYXRlIHVuY29tbWl0dGVkIHVuZG8g
dW5pbnN0YWxsIHVuaXF1ZSB1bmxvY2sgdXBncmFkZSB1c2FnZSB1c2UgdXNlX2ZybSB1c2VyIHVz
ZXJfcmVzb3VyY2VzIHVzZXJfc3RhdGlzdGljcyB1c2luZyB1dGNfZGF0ZSB1dGNfdGltZSB1dGNf
dGltZXN0YW1wIHZhbHVlIHZhcmlhYmxlcyB2YXJ5aW5nIHZpZXcgdmlld3Mgd2FybmluZ3Mgd2hl
biB3aGlsZSB3aXRoIHdvcmsgd3JpdGUgeGEgeG9yIHllYXJfbW9udGggemVyb2ZpbGwgYmVnaW4g
ZG8gdGhlbiBlbHNlIGxvb3AgcmVwZWF0IiksCisgICAga2V5d29yZHM6IHNldChzcWxLZXl3b3Jk
cyArICJhY2Nlc3NpYmxlIGFjdGlvbiBhZGQgYWZ0ZXIgYWxnb3JpdGhtIGFsbCBhbmFseXplIGFz
ZW5zaXRpdmUgYXQgYXV0aG9ycyBhdXRvX2luY3JlbWVudCBhdXRvY29tbWl0IGF2ZyBhdmdfcm93
X2xlbmd0aCBiZWZvcmUgYmluYXJ5IGJpbmxvZyBib3RoIGJ0cmVlIGNhY2hlIGNhbGwgY2FzY2Fk
ZSBjYXNjYWRlZCBjYXNlIGNhdGFsb2dfbmFtZSBjaGFpbiBjaGFuZ2UgY2hhbmdlZCBjaGFyYWN0
ZXIgY2hlY2sgY2hlY2twb2ludCBjaGVja3N1bSBjbGFzc19vcmlnaW4gY2xpZW50X3N0YXRpc3Rp
Y3MgY2xvc2UgY29hbGVzY2UgY29kZSBjb2xsYXRlIGNvbGxhdGlvbiBjb2xsYXRpb25zIGNvbHVt
biBjb2x1bW5zIGNvbW1lbnQgY29tbWl0IGNvbW1pdHRlZCBjb21wbGV0aW9uIGNvbmN1cnJlbnQg
Y29uZGl0aW9uIGNvbm5lY3Rpb24gY29uc2lzdGVudCBjb25zdHJhaW50IGNvbnRhaW5zIGNvbnRp
bnVlIGNvbnRyaWJ1dG9ycyBjb252ZXJ0IGNyb3NzIGN1cnJlbnQgY3VycmVudF9kYXRlIGN1cnJl
bnRfdGltZSBjdXJyZW50X3RpbWVzdGFtcCBjdXJyZW50X3VzZXIgY3Vyc29yIGRhdGEgZGF0YWJh
c2UgZGF0YWJhc2VzIGRheV9ob3VyIGRheV9taWNyb3NlY29uZCBkYXlfbWludXRlIGRheV9zZWNv
bmQgZGVhbGxvY2F0ZSBkZWMgZGVjbGFyZSBkZWZhdWx0IGRlbGF5X2tleV93cml0ZSBkZWxheWVk
IGRlbGltaXRlciBkZXNfa2V5X2ZpbGUgZGVzY3JpYmUgZGV0ZXJtaW5pc3RpYyBkZXZfcG9wIGRl
dl9zYW1wIGRldmlhbmNlIGRpYWdub3N0aWNzIGRpcmVjdG9yeSBkaXNhYmxlIGRpc2NhcmQgZGlz
dGluY3Ryb3cgZGl2IGR1YWwgZHVtcGZpbGUgZWFjaCBlbHNlaWYgZW5hYmxlIGVuY2xvc2VkIGVu
ZCBlbmRzIGVuZ2luZSBlbmdpbmVzIGVudW0gZXJyb3JzIGVzY2FwZSBlc2NhcGVkIGV2ZW4gZXZl
bnQgZXZlbnRzIGV2ZXJ5IGV4ZWN1dGUgZXhpc3RzIGV4aXQgZXhwbGFpbiBleHRlbmRlZCBmYXN0
IGZldGNoIGZpZWxkIGZpZWxkcyBmaXJzdCBmbHVzaCBmb3IgZm9yY2UgZm9yZWlnbiBmb3VuZF9y
b3dzIGZ1bGwgZnVsbHRleHQgZnVuY3Rpb24gZ2VuZXJhbCBnZXQgZ2xvYmFsIGdyYW50IGdyYW50
cyBncm91cCBncm91cF9jb25jYXQgaGFuZGxlciBoYXNoIGhlbHAgaGlnaF9wcmlvcml0eSBob3N0
cyBob3VyX21pY3Jvc2Vjb25kIGhvdXJfbWludXRlIGhvdXJfc2Vjb25kIGlmIGlnbm9yZSBpZ25v
cmVfc2VydmVyX2lkcyBpbXBvcnQgaW5kZXggaW5kZXhfc3RhdGlzdGljcyBpbmZpbGUgaW5uZXIg
aW5ub2RiIGlub3V0IGluc2Vuc2l0aXZlIGluc2VydF9tZXRob2QgaW5zdGFsbCBpbnRlcnZhbCBp
bnZva2VyIGlzb2xhdGlvbiBpdGVyYXRlIGtleSBrZXlzIGtpbGwgbGFuZ3VhZ2UgbGFzdCBsZWFk
aW5nIGxlYXZlIGxlZnQgbGV2ZWwgbGltaXQgbGluZWFyIGxpbmVzIGxpc3QgbG9hZCBsb2NhbCBs
b2NhbHRpbWUgbG9jYWx0aW1lc3RhbXAgbG9jayBsb2dzIGxvd19wcmlvcml0eSBtYXN0ZXIgbWFz
dGVyX2hlYXJ0YmVhdF9wZXJpb2QgbWFzdGVyX3NzbF92ZXJpZnlfc2VydmVyX2NlcnQgbWFzdGVy
cyBtYXRjaCBtYXggbWF4X3Jvd3MgbWF4dmFsdWUgbWVzc2FnZV90ZXh0IG1pZGRsZWludCBtaWdy
YXRlIG1pbiBtaW5fcm93cyBtaW51dGVfbWljcm9zZWNvbmQgbWludXRlX3NlY29uZCBtb2QgbW9k
ZSBtb2RpZmllcyBtb2RpZnkgbXV0ZXggbXlzcWxfZXJybm8gbmF0dXJhbCBuZXh0IG5vIG5vX3dy
aXRlX3RvX2JpbmxvZyBvZmZsaW5lIG9mZnNldCBvbmUgb25saW5lIG9wZW4gb3B0aW1pemUgb3B0
aW9uIG9wdGlvbmFsbHkgb3V0IG91dGVyIG91dGZpbGUgcGFja19rZXlzIHBhcnNlciBwYXJ0aXRp
b24gcGFydGl0aW9ucyBwYXNzd29yZCBwaGFzZSBwbHVnaW4gcGx1Z2lucyBwcmVwYXJlIHByZXNl
cnZlIHByZXYgcHJpbWFyeSBwcml2aWxlZ2VzIHByb2NlZHVyZSBwcm9jZXNzbGlzdCBwcm9maWxl
IHByb2ZpbGVzIHB1cmdlIHF1ZXJ5IHF1aWNrIHJhbmdlIHJlYWQgcmVhZF93cml0ZSByZWFkcyBy
ZWFsIHJlYnVpbGQgcmVjb3ZlciByZWZlcmVuY2VzIHJlZ2V4cCByZWxheWxvZyByZWxlYXNlIHJl
bW92ZSByZW5hbWUgcmVvcmdhbml6ZSByZXBhaXIgcmVwZWF0YWJsZSByZXBsYWNlIHJlcXVpcmUg
cmVzaWduYWwgcmVzdHJpY3QgcmVzdW1lIHJldHVybiByZXR1cm5zIHJldm9rZSByaWdodCBybGlr
ZSByb2xsYmFjayByb2xsdXAgcm93IHJvd19mb3JtYXQgcnRyZWUgc2F2ZXBvaW50IHNjaGVkdWxl
IHNjaGVtYSBzY2hlbWFfbmFtZSBzY2hlbWFzIHNlY29uZF9taWNyb3NlY29uZCBzZWN1cml0eSBz
ZW5zaXRpdmUgc2VwYXJhdG9yIHNlcmlhbGl6YWJsZSBzZXJ2ZXIgc2Vzc2lvbiBzaGFyZSBzaG93
IHNpZ25hbCBzbGF2ZSBzbG93IHNtYWxsaW50IHNuYXBzaG90IHNvbmFtZSBzcGF0aWFsIHNwZWNp
ZmljIHNxbCBzcWxfYmlnX3Jlc3VsdCBzcWxfYnVmZmVyX3Jlc3VsdCBzcWxfY2FjaGUgc3FsX2Nh
bGNfZm91bmRfcm93cyBzcWxfbm9fY2FjaGUgc3FsX3NtYWxsX3Jlc3VsdCBzcWxleGNlcHRpb24g
c3Fsc3RhdGUgc3Fsd2FybmluZyBzc2wgc3RhcnQgc3RhcnRpbmcgc3RhcnRzIHN0YXR1cyBzdGQg
c3RkZGV2IHN0ZGRldl9wb3Agc3RkZGV2X3NhbXAgc3RvcmFnZSBzdHJhaWdodF9qb2luIHN1YmNs
YXNzX29yaWdpbiBzdW0gc3VzcGVuZCB0YWJsZV9uYW1lIHRhYmxlX3N0YXRpc3RpY3MgdGFibGVz
IHRhYmxlc3BhY2UgdGVtcG9yYXJ5IHRlcm1pbmF0ZWQgdG8gdHJhaWxpbmcgdHJhbnNhY3Rpb24g
dHJpZ2dlciB0cmlnZ2VycyB0cnVuY2F0ZSB1bmNvbW1pdHRlZCB1bmRvIHVuaW5zdGFsbCB1bmlx
dWUgdW5sb2NrIHVwZ3JhZGUgdXNhZ2UgdXNlIHVzZV9mcm0gdXNlciB1c2VyX3Jlc291cmNlcyB1
c2VyX3N0YXRpc3RpY3MgdXNpbmcgdXRjX2RhdGUgdXRjX3RpbWUgdXRjX3RpbWVzdGFtcCB2YWx1
ZSB2YXJpYWJsZXMgdmFyeWluZyB2aWV3IHZpZXdzIHdhcm5pbmdzIHdoZW4gd2hpbGUgd2l0aCB3
b3JrIHdyaXRlIHhhIHhvciB5ZWFyX21vbnRoIHplcm9maWxsIGJlZ2luIGRvIHRoZW4gZWxzZSBs
b29wIHJlcGVhdCIpLAogICAgIGJ1aWx0aW46IHNldCgiYm9vbCBib29sZWFuIGJpdCBibG9iIGRl
Y2ltYWwgZG91YmxlIGZsb2F0IGxvbmcgbG9uZ2Jsb2IgbG9uZ3RleHQgbWVkaXVtIG1lZGl1bWJs
b2IgbWVkaXVtaW50IG1lZGl1bXRleHQgdGltZSB0aW1lc3RhbXAgdGlueWJsb2IgdGlueWludCB0
aW55dGV4dCB0ZXh0IGJpZ2ludCBpbnQgaW50MSBpbnQyIGludDMgaW50NCBpbnQ4IGludGVnZXIg
ZmxvYXQgZmxvYXQ0IGZsb2F0OCBkb3VibGUgY2hhciB2YXJiaW5hcnkgdmFyY2hhciB2YXJjaGFy
YWN0ZXIgcHJlY2lzaW9uIGRhdGUgZGF0ZXRpbWUgeWVhciB1bnNpZ25lZCBzaWduZWQgbnVtZXJp
YyIpLAogICAgIGF0b21zOiBzZXQoImZhbHNlIHRydWUgbnVsbCB1bmtub3duIiksCiAgICAgb3Bl
cmF0b3JDaGFyczogL15bKitcLSU8PiE9JnxeXS8sCkBAIC0zMjYsOSArMzI3LDkgQEAgQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJzcWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewog
ICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jYXNzYW5kcmEiLCB7CiAgICAgbmFtZTog
InNxbCIsCiAgICAgY2xpZW50OiB7IH0sCi0gICAga2V5d29yZHM6IHNldCgidXNlIHNlbGVjdCBm
cm9tIHVzaW5nIGNvbnNpc3RlbmN5IHdoZXJlIGxpbWl0IGZpcnN0IHJldmVyc2VkIGZpcnN0IGFu
ZCBpbiBpbnNlcnQgaW50byB2YWx1ZXMgdXNpbmcgY29uc2lzdGVuY3kgdHRsIHVwZGF0ZSBzZXQg
ZGVsZXRlIHRydW5jYXRlIGJlZ2luIGJhdGNoIGFwcGx5IGNyZWF0ZSBrZXlzcGFjZSB3aXRoIGNv
bHVtbmZhbWlseSBwcmltYXJ5IGtleSBpbmRleCBvbiBkcm9wIGFsdGVyIHR5cGUgYWRkIGFueSBv
bmUgcXVvcnVtIGFsbCBsb2NhbF9xdW9ydW0gZWFjaF9xdW9ydW0iKSwKLSAgICBidWlsdGluOiBz
ZXQoImFzY2lpIGJpZ2ludCBibG9iIGJvb2xlYW4gY291bnRlciBkZWNpbWFsIGRvdWJsZSBmbG9h
dCBpbnQgdGV4dCB0aW1lc3RhbXAgdXVpZCB2YXJjaGFyIHZhcmludCIpLAotICAgIGF0b21zOiBz
ZXQoImZhbHNlIHRydWUiKSwKKyAgICBrZXl3b3Jkczogc2V0KCJhZGQgYWxsIGFsbG93IGFsdGVy
IGFuZCBhbnkgYXBwbHkgYXMgYXNjIGF1dGhvcml6ZSBiYXRjaCBiZWdpbiBieSBjbHVzdGVyaW5n
IGNvbHVtbmZhbWlseSBjb21wYWN0IGNvbnNpc3RlbmN5IGNvdW50IGNyZWF0ZSBjdXN0b20gZGVs
ZXRlIGRlc2MgZGlzdGluY3QgZHJvcCBlYWNoX3F1b3J1bSBleGlzdHMgZmlsdGVyaW5nIGZyb20g
Z3JhbnQgaWYgaW4gaW5kZXggaW5zZXJ0IGludG8ga2V5IGtleXNwYWNlIGtleXNwYWNlcyBsZXZl
bCBsaW1pdCBsb2NhbF9vbmUgbG9jYWxfcXVvcnVtIG1vZGlmeSBuYW4gbm9yZWN1cnNpdmUgbm9z
dXBlcnVzZXIgbm90IG9mIG9uIG9uZSBvcmRlciBwYXNzd29yZCBwZXJtaXNzaW9uIHBlcm1pc3Np
b25zIHByaW1hcnkgcXVvcnVtIHJlbmFtZSByZXZva2Ugc2NoZW1hIHNlbGVjdCBzZXQgc3RvcmFn
ZSBzdXBlcnVzZXIgdGFibGUgdGhyZWUgdG8gdG9rZW4gdHJ1bmNhdGUgdHRsIHR3byB0eXBlIHVu
bG9nZ2VkIHVwZGF0ZSB1c2UgdXNlciB1c2VycyB1c2luZyB2YWx1ZXMgd2hlcmUgd2l0aCB3cml0
ZXRpbWUiKSwKKyAgICBidWlsdGluOiBzZXQoImFzY2lpIGJpZ2ludCBibG9iIGJvb2xlYW4gY291
bnRlciBkZWNpbWFsIGRvdWJsZSBmbG9hdCBmcm96ZW4gaW5ldCBpbnQgbGlzdCBtYXAgc3RhdGlj
IHRleHQgdGltZXN0YW1wIHRpbWV1dWlkIHR1cGxlIHV1aWQgdmFyY2hhciB2YXJpbnQiKSwKKyAg
ICBhdG9tczogc2V0KCJmYWxzZSB0cnVlIGluZmluaXR5IE5hTiIpLAogICAgIG9wZXJhdG9yQ2hh
cnM6IC9eWzw+PV0vLAogICAgIGRhdGVTUUw6IHsgfSwKICAgICBzdXBwb3J0OiBzZXQoImNvbW1l
bnRTbGFzaFNsYXNoIGRlY2ltYWxsZXNzRmxvYXQiKSwKQEAgLTM2Niw4ICszNjcsNiBAQCBDb2Rl
TWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CiAKICAga2V5d29yZHM6CiAgICAgQSBsaXN0IG9mIGtleXdvcmRzIHlvdSB3YW50IHRvIGJlIGhp
Z2hsaWdodGVkLgotICBmdW5jdGlvbnM6Ci0gICAgQSBsaXN0IG9mIGZ1bmN0aW9uIG5hbWVzIHlv
dSB3YW50IHRvIGJlIGhpZ2hsaWdodGVkLgogICBidWlsdGluOgogICAgIEEgbGlzdCBvZiBidWls
dGluIHR5cGVzIHlvdSB3YW50IHRvIGJlIGhpZ2hsaWdodGVkIChpZiB5b3Ugd2FudCB0eXBlcyB0
byBiZSBvZiBjbGFzcyAiYnVpbHRpbiIgaW5zdGVhZCBvZiAia2V5d29yZCIpLgogICBvcGVyYXRv
ckNoYXJzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
RXh0ZXJuYWwvQ29kZU1pcnJvci94bWwuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qcwppbmRleCA3ODY1MDdkMmU0MzkyYTM1
MmRkYWU0YWMwMDM1ZjkyZWFlZjYwOWE0Li41YWQyMTcyMGZiY2EzODYwYTY3NThhZDc3ZmM4YjU3
MzkyNjkyNjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qcwpAQCAtMjEsNyArMjEsNyBA
QCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29u
ZmlnKSB7CiAgICAgYXV0b1NlbGZDbG9zZXJzOiB7J2FyZWEnOiB0cnVlLCAnYmFzZSc6IHRydWUs
ICdicic6IHRydWUsICdjb2wnOiB0cnVlLCAnY29tbWFuZCc6IHRydWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgJ2VtYmVkJzogdHJ1ZSwgJ2ZyYW1lJzogdHJ1ZSwgJ2hyJzogdHJ1ZSwgJ2ltZyc6
IHRydWUsICdpbnB1dCc6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgJ2tleWdlbic6IHRy
dWUsICdsaW5rJzogdHJ1ZSwgJ21ldGEnOiB0cnVlLCAncGFyYW0nOiB0cnVlLCAnc291cmNlJzog
dHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAndHJhY2snOiB0cnVlLCAnd2JyJzogdHJ1ZX0s
CisgICAgICAgICAgICAgICAgICAgICAgJ3RyYWNrJzogdHJ1ZSwgJ3dicic6IHRydWUsICdtZW51
aXRlbSc6IHRydWV9LAogICAgIGltcGxpY2l0bHlDbG9zZWQ6IHsnZGQnOiB0cnVlLCAnbGknOiB0
cnVlLCAnb3B0Z3JvdXAnOiB0cnVlLCAnb3B0aW9uJzogdHJ1ZSwgJ3AnOiB0cnVlLAogICAgICAg
ICAgICAgICAgICAgICAgICAncnAnOiB0cnVlLCAncnQnOiB0cnVlLCAndGJvZHknOiB0cnVlLCAn
dGQnOiB0cnVlLCAndGZvb3QnOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAndGgnOiB0
cnVlLCAndHInOiB0cnVlfSwKQEAgLTEwOSw2ICsxMDksNyBAQCBDb2RlTWlycm9yLmRlZmluZU1v
ZGUoInhtbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICByZXR1cm4g
bnVsbDsKICAgICB9CiAgIH0KKyAgaW5UZXh0LmlzSW5UZXh0ID0gdHJ1ZTsKIAogICBmdW5jdGlv
biBpblRhZyhzdHJlYW0sIHN0YXRlKSB7CiAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0
eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanMKaW5kZXggOWNl
OGE1MjQxMjE2NDk0MWZjNDM0NWVkYmY4YmI2ZjM2MDNjZDg0Yi4uNjY2NmFjNzQ5NzViZDQ4MTI3
NmFkOThkMmFkOTU2ODhhZWI2MTA0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanMKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ1NTU3R5bGVEZWNs
YXJhdGlvblRleHRFZGl0b3IuanMKQEAgLTQ0MSwxMyArNDQxLDEyIEBAIFdlYkluc3BlY3Rvci5D
U1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvciA9IGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb25U
ZXh0RWRpdG9yCiAKICAgICBfaGFuZGxlTW91c2VEb3duKGV2ZW50KQogICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX2NvZGVNaXJyb3Iub3B0aW9ucy5yZWFkT25seSB8fCB0aGlzLl9jb2RlTWlycm9y
LnN0YXRlLmZvY3VzZWQpCisgICAgICAgIGlmICh0aGlzLl9jb2RlTWlycm9yLm9wdGlvbnMucmVh
ZE9ubHkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMu
X2NvZGVNaXJyb3IuY29vcmRzQ2hhcih7bGVmdDogZXZlbnQueCwgdG9wOiBldmVudC55fSk7Ci0g
ICAgICAgIHZhciBsaW5lID0gdGhpcy5fY29kZU1pcnJvci5nZXRMaW5lKGN1cnNvci5saW5lKTsK
LSAgICAgICAgdmFyIHRyaW1tZWRMaW5lID0gbGluZS50cmltUmlnaHQoKTsKLQorICAgICAgICBs
ZXQgY3Vyc29yID0gdGhpcy5fY29kZU1pcnJvci5jb29yZHNDaGFyKHtsZWZ0OiBldmVudC54LCB0
b3A6IGV2ZW50Lnl9KTsKKyAgICAgICAgbGV0IGxpbmUgPSB0aGlzLl9jb2RlTWlycm9yLmdldExp
bmUoY3Vyc29yLmxpbmUpOworICAgICAgICBsZXQgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW1SaWdo
dCgpOwogICAgICAgICBpZiAoIXRyaW1tZWRMaW5lLnRyaW1MZWZ0KCkubGVuZ3RoIHx8IGN1cnNv
ci5jaCAhPT0gdHJpbW1lZExpbmUubGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC00
NTksMTYgKzQ1OCwxOSBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0
b3IgPSBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvcgogICAgICAgICBpZiAodGhp
cy5fY29kZU1pcnJvci5vcHRpb25zLnJlYWRPbmx5IHx8ICF0aGlzLl9tb3VzZURvd25DdXJzb3JQ
b3NpdGlvbikKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB2YXIgY3Vyc29yID0gdGhp
cy5fY29kZU1pcnJvci5jb29yZHNDaGFyKHtsZWZ0OiBldmVudC54LCB0b3A6IGV2ZW50Lnl9KTsK
LSAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl9jb2RlTWlycm9yLmdldExpbmUoY3Vyc29yLmxpbmUp
OwotCisgICAgICAgIGxldCBjdXJzb3IgPSB0aGlzLl9jb2RlTWlycm9yLmNvb3Jkc0NoYXIoe2xl
ZnQ6IGV2ZW50LngsIHRvcDogZXZlbnQueX0pOwogICAgICAgICBpZiAodGhpcy5fbW91c2VEb3du
Q3Vyc29yUG9zaXRpb24ubGluZSA9PT0gY3Vyc29yLmxpbmUgJiYgdGhpcy5fbW91c2VEb3duQ3Vy
c29yUG9zaXRpb24uY2ggPT09IGN1cnNvci5jaCkgewotICAgICAgICAgICAgdmFyIHJlcGxhY2Vt
ZW50ID0gIlxuIjsKLQotICAgICAgICAgICAgaWYgKCFsaW5lLnRyaW1SaWdodCgpLmVuZHNXaXRo
KCI7IikgJiYgIXRoaXMuX3RleHRBdEN1cnNvcklzQ29tbWVudCh0aGlzLl9jb2RlTWlycm9yLCBj
dXJzb3IpKQotICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gIjsiICsgcmVwbGFjZW1lbnQ7
CisgICAgICAgICAgICBsZXQgbmV4dExpbmUgPSB0aGlzLl9jb2RlTWlycm9yLmdldExpbmUoY3Vy
c29yLmxpbmUgKyAxKTsKKyAgICAgICAgICAgIGlmIChjdXJzb3IubGluZSA8IHRoaXMuX2NvZGVN
aXJyb3IubGluZUNvdW50KCkgLSAxICYmICghbmV4dExpbmUgfHwgIW5leHRMaW5lLnRyaW0oKS5s
ZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zZXRDdXJzb3Ioe2xp
bmU6IGN1cnNvci5saW5lICsgMSwgY2g6IDB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgbGV0IGxpbmUgPSB0aGlzLl9jb2RlTWlycm9yLmdldExpbmUoY3Vyc29yLmxp
bmUpOworICAgICAgICAgICAgICAgIGxldCByZXBsYWNlbWVudCA9ICJcbiI7CisgICAgICAgICAg
ICAgICAgaWYgKCFsaW5lLnRyaW1SaWdodCgpLmVuZHNXaXRoKCI7IikgJiYgIXRoaXMuX3RleHRB
dEN1cnNvcklzQ29tbWVudCh0aGlzLl9jb2RlTWlycm9yLCBjdXJzb3IpKQorICAgICAgICAgICAg
ICAgICAgICByZXBsYWNlbWVudCA9ICI7IiArIHJlcGxhY2VtZW50OwogCi0gICAgICAgICAgICB0
aGlzLl9jb2RlTWlycm9yLnJlcGxhY2VSYW5nZShyZXBsYWNlbWVudCwgY3Vyc29yKTsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnJlcGxhY2VSYW5nZShyZXBsYWNlbWVudCwgY3Vy
c29yKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHRoaXMuX21vdXNlRG93
bkN1cnNvclBvc2l0aW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0hvdmVyTWVudS5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9Ib3Zlck1lbnUuY3NzCmluZGV4IDFmMTQ2ZGJlMDcyYWEw
MjgzMmRlZGFmZDFkOTQ4ZDJiZDM3MGM4YzYuLmNkNTg5YjRhOTU0MmVkZTVkNzY3NDNlNDIwYzli
ZWI5NjUxZWUwYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL0hvdmVyTWVudS5jc3MKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvSG92ZXJNZW51LmNzcwpAQCAtNTksNiArNTksNyBAQAogICAgIGhlaWdo
dDogMTNweDsKIAogICAgIGNvbnRlbnQ6IC13ZWJraXQtaW1hZ2Utc2V0KHVybCguLi9JbWFnZXMv
SG92ZXJNZW51QnV0dG9uLnBuZykgMXgsIHVybCguLi9JbWFnZXMvSG92ZXJNZW51QnV0dG9uQDJ4
LnBuZykgMngpOworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogfQog
CiAuaG92ZXItbWVudS52aXNpYmxlID4gaW1nIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmNzcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRp
dG9yLmNzcwppbmRleCA2OGE5NTlmMGE0MDMxMzdjMWEyMzFkMGFjODI0MDUyM2EyYmMzMTg5Li4z
ZWZhNWZiNjZlYWJiZDkyZDVkZjhiYzJjNzk5NWY0YTYwMWNhMjQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5jc3MKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291
cmNlQ29kZVRleHRFZGl0b3IuY3NzCkBAIC0xODEsNyArMTgxLDcgQEAKICAgICBoZWlnaHQ6IDE2
cHg7CiAgICAgY29udGVudDogLXdlYmtpdC1pbWFnZS1zZXQodXJsKC4uL0ltYWdlcy9Db2xvcklj
b24ucG5nKSAxeCwgdXJsKC4uL0ltYWdlcy9Db2xvckljb25AMngucG5nKSAyeCk7CiAKLSAgICAt
d2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpOworICAgIC13ZWJraXQtdHJhbnNmb3Jt
OiB0cmFuc2xhdGVZKDAuNXB4KTsKIH0KIAogQG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4
ZWwtcmF0aW86IDIpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258779</attachid>
            <date>2015-08-11 16:34:37 -0700</date>
            <delta_ts>2015-08-11 21:45:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147109-20150811163422.patch</filename>
            <type>text/plain</type>
            <size>332867</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDEyMzkwYWJiODU0OTkzYmM5Y2Q5ZmM2ZDE5ZmRk
ZGFiYzhlNTNmZjkuLjc1M2JlM2M1YjY4NDI1NTAwZDU1MmE4N2NjYjc0Y2RlYzZhYWQ1ZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE1LTA4LTExICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBV
cGRhdGUgdG8gQ29kZU1pcnJvciA1LjUgb3IgbGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IFRp
bW90aHkgSGF0Y2hlci4KKworICAgICAgICBVcGRhdGVkIENvZGVNaXJyb3IgdG8gdmVyc2lvbiA1
LjUsIGFzIHdlbGwgYXMgdGhlIGV4dGVuc2lvbiBmaWxlcyBmb3IgQ29kZU1pcnJvcgorICAgICAg
ICB0aGF0IGFyZSBjdXJyZW50bHkgdXNlZCBpbiBXZWJJbnNwZWN0b3IuCisKKyAgICAgICAgKiBM
b2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CisgICAgICAgICogVG9v
bHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyRGVidWcuanM6CisgICAgICAgIEFkZGVkIFdlYklu
c3BlY3RvciBuYW1lc3BhY2UgZm9yIGZvcm1hdHRlcnMuCisKKyAgICAgICAgKiBUb29scy9QcmV0
dHlQcmludGluZy9pbmRleC5odG1sOgorICAgICAgICBBZGRlZCBXZWJJbnNwZWN0b3IgbmFtZXNw
YWNlIGZvciBmb3JtYXR0ZXJzLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9D
b2RlTWlycm9yL0xJQ0VOU0U6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2Rl
TWlycm9yL2Nsb2p1cmUuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2Rl
TWlycm9yL2Nsb3NlYnJhY2tldHMuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5h
bC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0
ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2Uv
RXh0ZXJuYWwvQ29kZU1pcnJvci9jb2ZmZWVzY3JpcHQuanM6CisgICAgICAgICogVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvbW1lbnQuanM6CisgICAgICAgICogVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nzcy5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IvaHRtbG1peGVkLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9qYXZhc2NyaXB0LmpzOgorICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9saXZlc2NyaXB0LmpzOgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9tYXRjaGJyYWNrZXRzLmpzOgorICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9vdmVybGF5LmpzOgorICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zYXNzLmpzOgorICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zZWFyY2hjdXJzb3IuanM6CisgICAgICAg
ICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qczoKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzOgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvVmlld3MvQ29kZU1pcnJvckZvcm1hdHRlcnMuanM6CisgICAgICAgIE5vdyB1c2Vz
IHRoZSBuZXcgdG9rZW4gaW4gQ29kZU1pcnJvciBmb3IgbWVkaWEgcXVlcnkgcGFyZW50aGVzaXMu
CisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0
RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0
RWRpdG9yLnByb3RvdHlwZS5faGFuZGxlTW91c2VEb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2hhbmRsZU1vdXNlVXAp
OgorICAgICAgICBDbGlja2luZyBvbiB0aGUgZW5kIG9mIGEgbGluZSBpbiBhIHN0eWxlIHdpbGwg
bm93IGNvcnJlY3RseSBpbnNlcnQgYSBuZXcgbGluZS4KKworICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvVmlld3MvSG92ZXJNZW51LmNzczoKKyAgICAgICAgKC5ob3Zlci1tZW51ID4gaW1nKToKKyAg
ICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmNzczoKKyAg
ICAgICAgKC5ob3Zlci1tZW51LmNvbG9yID4gaW1nKToKKwogMjAxNS0wOC0xMSAgQnJpYW4gQnVy
ZyAgPGJidXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZ2VudCBjb21t
YW5kcyBkbyBub3QgYWN0dWFsbHkgcmV0dXJuIGEgcHJvbWlzZSB3aGVuIGV4cGVjdGVkCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2Nh
bGl6ZWRTdHJpbmdzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4u
bHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwppbmRleCAwN2U5YWMxOTY4NWQyZTYxYWYzNzY5Y2Y2
ZDQ0ZTRkOTZkNWMwYjZmLi5jYTZkYmQxMzA3ZWFiMGIxODkyMzI1Yzc3YWU1ZDRlNzA5YzVhMDlh
IDEwMDY0NApHSVQgYmluYXJ5IHBhdGNoCmRlbHRhIDg5OQp6Y21iN0NPPXVIUTVUNHFXbTBjNkop
aXU8I1c/UDV7eVVDXiZeYzFLXyYjazNKUD12OzBITm92QmJadEJZcSFtMm4KelV8PilXZFo9UHM9
JkE2SXkjJUMoZkNtcEFNVDBqbm87Pk52WiNPP0NsP3Qqdl9QelAkYEBUMGJANzwkO2tDbFBGCnpz
bVhBUEdXY3sjVkw0PmMxTj5LTWpjbD93WmpBcEVTR1FzdW5TMnctUD54KEUtMWI+Nzdzak52TGMp
bXJqcklmTwp6X2h9UXtWYTA7JDV6TkNfSCYzJFI+Q2lvJWBLfkVOREE+NU9NSn5nITg8U2NYRktf
c01KWkdxVUdqXldNU1k+RjEKekA+QiMlMmZMe1RfTmk0dzRrMjg1O1otYCFgPzJrRG8kaUNEcWhp
YWVtKG47bGA8RilDcmFUdm5zTiRsTklVczR1CnpAfT8yKWJHPmVrezE9Q1JlMkJ3VTdPRDcrRH5i
YSMzIXtNKlM0JiE4N1Vsbm1kQDQ7UmRtX201OG9MNWNvRj9jTgp6JlBsOFpJd0ZnYFZKWmIjeXZA
c19lNyZyTz8hWVYkMGlCfCN3SWpqdjwmZjBFSUJ7LUQpWEkmcHY7O1NsJWxmN14Kej08bWgpJlha
JWpWVnZmYENIYlRgOX4oKyp0K2UyN3hRenZSRnN7NWRse3FTKXY+ZTxXVU48eVBWV14kZW5LZ0g1
CnpibzlIWEUmNncjb3pXfV5iKl8leDB7WT17e2c9c0t0MTNTfVEyQldeJGhDdEQ7Iz43JU1BNERw
emtNVnZlK35gJAp6WEhMfFVCMnNWa2lLa3hAR1FWMG50MU1DJF9qNkl2RVlEb0tFY1AxQFBlaWxt
dz9sV35rbT5SQ2BoalFBTHxNT1QKS2lzXyN0JEExR1otc1hAMQoKZGVsdGEgMjYxCnpjbWNhSmYj
cG1TJUxZVTMkO1kpUFAyVF5STV51MyFuSVdHYzJaKU9wM0sla2h5bGpUbCRwVkl8K3twfFg0MmNZ
Ugp6NEN6Mz1nUH1CfC1lZHR5JDt0NyRZXjNSJXtMbj5idmI/cXNOWX5fPmRSbWkoSE57fTIwUW5o
e2AzKkVDenRed1kKekpsUWJIYXI0ZSVBKF9wdDZKQUpmWmVBMGB3QXBxO20pUFhicj09I3BKPGM9
UHsqMkNLLXM2MG0zeS1WRlp+cCU1Cnk5VjUzZExuPWNGKEJWTDVQb0RRb2EmcWtwQXIhRiMmbnpk
YHpZeTVgXm8wU309SVlOU0pYPHsoZypnRUZ7IykxcAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXJEZWJ1Zy5qcyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXJEZWJ1Zy5qcwpp
bmRleCBhYWIzNWI5OTkyZDU5ZjA3YzA1ZWFjZGEyM2EzYjBhNDUzMjZlN2Q0Li42MmJmNmRhNmIz
MzI0NzZlYmM5MGQ5Yzk4ZjcxMzFhYTI5NzQ5MDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyRGVidWcuanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlckRlYnVnLmpz
CkBAIC0xLDQgKzEsNCBAQAotRm9ybWF0dGVyLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uKGZy
b20sIHRvKQorV2ViSW5zcGVjdG9yLkZvcm1hdHRlci5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlv
bihmcm9tLCB0bykKIHsKICAgICB2YXIgZGVidWcgPSAiIjsKICAgICB2YXIgb3V0ZXJNb2RlID0g
dGhpcy5fY29kZU1pcnJvci5nZXRNb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvaW5kZXguaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9pbmRleC5odG1sCmluZGV4IGQxYjYzMWM1MzlmMzIy
MmUyYTdkNGE0MmQ1ZjllMGMwNGFkNzA0YjMuLjUyYmIxZDM0ZGRmYWMxZjQxMjVlYWU2ZWIwMWRk
NGIzNzdkMGVmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0
dHlQcmludGluZy9pbmRleC5odG1sCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9Q
cmV0dHlQcmludGluZy9pbmRleC5odG1sCkBAIC0yMTAsOCArMjEwLDggQEAKICAgICAgICAgdmFy
IG9yaWdpbmFsTGluZUVuZGluZ3MgPSBbXTsKICAgICAgICAgdmFyIGZvcm1hdHRlZExpbmVFbmRp
bmdzID0gW107CiAgICAgICAgIHZhciBtYXBwaW5nID0ge29yaWdpbmFsOiBbMF0sIGZvcm1hdHRl
ZDogWzBdfTsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgRm9ybWF0dGVyQ29udGVudEJ1aWxk
ZXIobWFwcGluZywgb3JpZ2luYWxMaW5lRW5kaW5ncywgZm9ybWF0dGVkTGluZUVuZGluZ3MsIDAs
IDAsIGluZGVudFN0cmluZyk7Ci0gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVy
KGNtLCBidWlsZGVyKTsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkZv
cm1hdHRlckNvbnRlbnRCdWlsZGVyKG1hcHBpbmcsIG9yaWdpbmFsTGluZUVuZGluZ3MsIGZvcm1h
dHRlZExpbmVFbmRpbmdzLCAwLCAwLCBpbmRlbnRTdHJpbmcpOworICAgICAgICB2YXIgZm9ybWF0
dGVyID0gbmV3IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXIoY20sIGJ1aWxkZXIpOwogCiAgICAgICAg
IC8vIFRpbWUgdGhlIGZvcm1hdHRlci4KICAgICAgICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93
KCk7CkBAIC0zMzIsOCArMzMyLDggQEAKICAgICAgICAgICAgIHZhciBvcmlnaW5hbExpbmVFbmRp
bmdzID0gW107CiAgICAgICAgICAgICB2YXIgZm9ybWF0dGVkTGluZUVuZGluZ3MgPSBbXTsKICAg
ICAgICAgICAgIHZhciBtYXBwaW5nID0ge29yaWdpbmFsOiBbMF0sIGZvcm1hdHRlZDogWzBdfTsK
LSAgICAgICAgICAgIHZhciBidWlsZGVyID0gbmV3IEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyKG1h
cHBpbmcsIG9yaWdpbmFsTGluZUVuZGluZ3MsIGZvcm1hdHRlZExpbmVFbmRpbmdzLCAwLCAwLCBp
bmRlbnRTdHJpbmcpOwotICAgICAgICAgICAgdmFyIGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIo
ZWRpdG9yLCBidWlsZGVyKTsKKyAgICAgICAgICAgIHZhciBidWlsZGVyID0gbmV3IFdlYkluc3Bl
Y3Rvci5Gb3JtYXR0ZXJDb250ZW50QnVpbGRlcihtYXBwaW5nLCBvcmlnaW5hbExpbmVFbmRpbmdz
LCBmb3JtYXR0ZWRMaW5lRW5kaW5ncywgMCwgMCwgaW5kZW50U3RyaW5nKTsKKyAgICAgICAgICAg
IHZhciBmb3JtYXR0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkZvcm1hdHRlcihlZGl0b3IsIGJ1aWxk
ZXIpOwogICAgICAgICAgICAgZm9ybWF0dGVyLmZvcm1hdChzdGFydCwgZW5kKTsKIAogICAgICAg
ICAgICAgLy8gQ29tcGFyZSByZXN1bHRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9MSUNFTlNFIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9MSUNFTlNFCm9s
ZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNDgyZDU1ZWI3M2VjNDNmODdhYTQx
MDU4YzdlZTM5YmI4MzE4ZjM3Yi4uZjRhNWE0YTI1ZjBjOGNlYTAyYmY4MTQxMTg3ODM0MzkxMTNm
NDhkMgotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9D
b2RlTWlycm9yL0xJQ0VOU0UKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9MSUNFTlNFCkBAIC0xLDQgKzEsNCBAQAotQ29weXJpZ2h0
IChDKSAyMDEzIGJ5IE1hcmlqbiBIYXZlcmJla2UgPG1hcmlqbmhAZ21haWwuY29tPgorQ29weXJp
Z2h0IChDKSAyMDE1IGJ5IE1hcmlqbiBIYXZlcmJla2UgPG1hcmlqbmhAZ21haWwuY29tPiBhbmQg
b3RoZXJzCiAKIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0
byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j
aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCkBAIC0x
Nyw3ICsxNywzIEBAIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB
TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ
T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiBPVVQgT0Yg
T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF
QUxJTkdTIElOCiBUSEUgU09GVFdBUkUuCi0KLVBsZWFzZSBub3RlIHRoYXQgc29tZSBzdWJkaXJl
Y3RvcmllcyBvZiB0aGUgQ29kZU1pcnJvciBkaXN0cmlidXRpb24KLWluY2x1ZGUgdGhlaXIgb3du
IExJQ0VOU0UgZmlsZXMsIGFuZCBhcmUgcmVsZWFzZWQgdW5kZXIgZGlmZmVyZW50Ci1saWNlbmNl
cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3IvY2xvanVyZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvanVyZS5qcwpvbGQgbW9kZSAxMDA2NDQKbmV3
IG1vZGUgMTAwNzU1CmluZGV4IGY4MWJkMmMxNDAxY2M4N2YzODY3YWI5NTdlMWQ0NmQ2MzQxOTk0
MTAuLmQ1MzEwMjJhMmViZmVhMDdmNzVlYTg4MTk4OGZiZjVmNzY4YzMwY2IKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9qdXJl
LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0Nv
ZGVNaXJyb3IvY2xvanVyZS5qcwpAQCAtMTgsNyArMTgsNyBAQAogCiBDb2RlTWlycm9yLmRlZmlu
ZU1vZGUoImNsb2p1cmUiLCBmdW5jdGlvbiAob3B0aW9ucykgewogICAgIHZhciBCVUlMVElOID0g
ImJ1aWx0aW4iLCBDT01NRU5UID0gImNvbW1lbnQiLCBTVFJJTkcgPSAic3RyaW5nIiwgQ0hBUkFD
VEVSID0gInN0cmluZy0yIiwKLSAgICAgICAgQVRPTSA9ICJhdG9tIiwgTlVNQkVSID0gIm51bWJl
ciIsIEJSQUNLRVQgPSAiYnJhY2tldCIsIEtFWVdPUkQgPSAia2V5d29yZCI7CisgICAgICAgIEFU
T00gPSAiYXRvbSIsIE5VTUJFUiA9ICJudW1iZXIiLCBCUkFDS0VUID0gImJyYWNrZXQiLCBLRVlX
T1JEID0gImtleXdvcmQiLCBWQVIgPSAidmFyaWFibGUiOwogICAgIHZhciBJTkRFTlRfV09SRF9T
S0lQID0gb3B0aW9ucy5pbmRlbnRVbml0IHx8IDI7CiAgICAgdmFyIE5PUk1BTF9JTkRFTlRfVU5J
VCA9IG9wdGlvbnMuaW5kZW50VW5pdCB8fCAyOwogCkBAIC01OSw3ICs1OSw3IEBAIENvZGVNaXJy
b3IuZGVmaW5lTW9kZSgiY2xvanVyZSIsIGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgIHNp
Z246IC9bKy1dLywKICAgICAgICAgZXhwb25lbnQ6IC9lL2ksCiAgICAgICAgIGtleXdvcmRfY2hh
cjogL1teXHNcKFxbXDtcKVxdXS8sCi0gICAgICAgIHN5bWJvbDogL1tcdyorIVwtXC5fPzo8Plwv
XS8KKyAgICAgICAgc3ltYm9sOiAvW1x3KishXC1cLl8/Ojw+XC9ceGExLVx1ZmZmZl0vCiAgICAg
fTsKIAogICAgIGZ1bmN0aW9uIHN0YXRlU3RhY2soaW5kZW50LCB0eXBlLCBwcmV2KSB7IC8vIHJl
cHJlc2VudHMgYSBzdGF0ZSBzdGFjayBvYmplY3QKQEAgLTExNCw3ICsxMTQsNyBAQCBDb2RlTWly
cm9yLmRlZmluZU1vZGUoImNsb2p1cmUiLCBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgICB2
YXIgZmlyc3QgPSBzdHJlYW0ubmV4dCgpOwogICAgICAgICAvLyBSZWFkIHNwZWNpYWwgbGl0ZXJh
bHM6IGJhY2tzcGFjZSwgbmV3bGluZSwgc3BhY2UsIHJldHVybi4KICAgICAgICAgLy8gSnVzdCBy
ZWFkIGFsbCBsb3dlcmNhc2UgbGV0dGVycy4KLSAgICAgICAgaWYgKGZpcnN0Lm1hdGNoKC9bYS16
XS8pICYmIHN0cmVhbS5tYXRjaCgvW2Etel0rLywgdHJ1ZSkpIHsKKyAgICAgICAgaWYgKGZpcnN0
ICYmIGZpcnN0Lm1hdGNoKC9bYS16XS8pICYmIHN0cmVhbS5tYXRjaCgvW2Etel0rLywgdHJ1ZSkp
IHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBSZWFkIHVuaWNv
ZGUgY2hhcmFjdGVyOiBcdTEwMDAgXHVBMGExCkBAIC0yMjAsNyArMjIwLDkgQEAgQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJjbG9qdXJlIiwgZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQlVJTFRJTjsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoYXRvbXMgJiYgYXRvbXMucHJvcGVydHlJc0VudW1lcmFibGUoc3Ry
ZWFtLmN1cnJlbnQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBl
ID0gQVRPTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSByZXR1cm5UeXBlID0gbnVs
bDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVyblR5cGUgPSBWQVI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMjMyLDYgKzIzNCw3IEBAIENv
ZGVNaXJyb3IuZGVmaW5lTW9kZSgiY2xvanVyZSIsIGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAg
ICAgICAgICByZXR1cm4gc3RhdGUuaW5kZW50U3RhY2suaW5kZW50OwogICAgICAgICB9LAogCisg
ICAgICAgIGNsb3NlQnJhY2tldHM6IHtwYWlyczogIigpW117fVwiXCIifSwKICAgICAgICAgbGlu
ZUNvbW1lbnQ6ICI7OyIKICAgICB9OwogfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb3NlYnJhY2tldHMuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9y
L2Nsb3NlYnJhY2tldHMuanMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA4
M2Q0MjI5ZjQ3YjQ0NjgyNGEzOGIwZTljNjU4NzQ0YzVjZmFmN2QzLi43MDMwMjY4YjAzMmQ2MDQ0
MzY3NTRiMGNhNWI5MGQ0NTdmZjc3MmVkCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvc2VicmFja2V0cy5qcworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb3Nl
YnJhY2tldHMuanMKQEAgLTksMTM1ICs5LDE3NyBAQAogICBlbHNlIC8vIFBsYWluIGJyb3dzZXIg
ZW52CiAgICAgbW9kKENvZGVNaXJyb3IpOwogfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgewotICB2
YXIgREVGQVVMVF9CUkFDS0VUUyA9ICIoKVtde30nJ1wiXCIiOwotICB2YXIgREVGQVVMVF9FWFBM
T0RFX09OX0VOVEVSID0gIltde30iOwotICB2YXIgU1BBQ0VfQ0hBUl9SRUdFWCA9IC9ccy87Cisg
IHZhciBkZWZhdWx0cyA9IHsKKyAgICBwYWlyczogIigpW117fScnXCJcIiIsCisgICAgdHJpcGxl
czogIiIsCisgICAgZXhwbG9kZTogIltde30iCisgIH07CiAKICAgdmFyIFBvcyA9IENvZGVNaXJy
b3IuUG9zOwogCiAgIENvZGVNaXJyb3IuZGVmaW5lT3B0aW9uKCJhdXRvQ2xvc2VCcmFja2V0cyIs
IGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsLCBvbGQpIHsKLSAgICBpZiAob2xkICE9IENvZGVNaXJy
b3IuSW5pdCAmJiBvbGQpCi0gICAgICBjbS5yZW1vdmVLZXlNYXAoImF1dG9DbG9zZUJyYWNrZXRz
Iik7Ci0gICAgaWYgKCF2YWwpIHJldHVybjsKLSAgICB2YXIgcGFpcnMgPSBERUZBVUxUX0JSQUNL
RVRTLCBleHBsb2RlID0gREVGQVVMVF9FWFBMT0RFX09OX0VOVEVSOwotICAgIGlmICh0eXBlb2Yg
dmFsID09ICJzdHJpbmciKSBwYWlycyA9IHZhbDsKLSAgICBlbHNlIGlmICh0eXBlb2YgdmFsID09
ICJvYmplY3QiKSB7Ci0gICAgICBpZiAodmFsLnBhaXJzICE9IG51bGwpIHBhaXJzID0gdmFsLnBh
aXJzOwotICAgICAgaWYgKHZhbC5leHBsb2RlICE9IG51bGwpIGV4cGxvZGUgPSB2YWwuZXhwbG9k
ZTsKKyAgICBpZiAob2xkICYmIG9sZCAhPSBDb2RlTWlycm9yLkluaXQpIHsKKyAgICAgIGNtLnJl
bW92ZUtleU1hcChrZXlNYXApOworICAgICAgY20uc3RhdGUuY2xvc2VCcmFja2V0cyA9IG51bGw7
CisgICAgfQorICAgIGlmICh2YWwpIHsKKyAgICAgIGNtLnN0YXRlLmNsb3NlQnJhY2tldHMgPSB2
YWw7CisgICAgICBjbS5hZGRLZXlNYXAoa2V5TWFwKTsKICAgICB9Ci0gICAgdmFyIG1hcCA9IGJ1
aWxkS2V5bWFwKHBhaXJzKTsKLSAgICBpZiAoZXhwbG9kZSkgbWFwLkVudGVyID0gYnVpbGRFeHBs
b2RlSGFuZGxlcihleHBsb2RlKTsKLSAgICBjbS5hZGRLZXlNYXAobWFwKTsKICAgfSk7CiAKLSAg
ZnVuY3Rpb24gY2hhcnNBcm91bmQoY20sIHBvcykgewotICAgIHZhciBzdHIgPSBjbS5nZXRSYW5n
ZShQb3MocG9zLmxpbmUsIHBvcy5jaCAtIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQ
b3MocG9zLmxpbmUsIHBvcy5jaCArIDEpKTsKLSAgICByZXR1cm4gc3RyLmxlbmd0aCA9PSAyID8g
c3RyIDogbnVsbDsKKyAgZnVuY3Rpb24gZ2V0T3B0aW9uKGNvbmYsIG5hbWUpIHsKKyAgICBpZiAo
bmFtZSA9PSAicGFpcnMiICYmIHR5cGVvZiBjb25mID09ICJzdHJpbmciKSByZXR1cm4gY29uZjsK
KyAgICBpZiAodHlwZW9mIGNvbmYgPT0gIm9iamVjdCIgJiYgY29uZltuYW1lXSAhPSBudWxsKSBy
ZXR1cm4gY29uZltuYW1lXTsKKyAgICByZXR1cm4gZGVmYXVsdHNbbmFtZV07CiAgIH0KIAotICBm
dW5jdGlvbiBidWlsZEtleW1hcChwYWlycykgewotICAgIHZhciBtYXAgPSB7Ci0gICAgICBuYW1l
IDogImF1dG9DbG9zZUJyYWNrZXRzIiwKLSAgICAgIEJhY2tzcGFjZTogZnVuY3Rpb24oY20pIHsK
LSAgICAgICAgaWYgKGNtLmdldE9wdGlvbigiZGlzYWJsZUlucHV0IikpIHJldHVybiBDb2RlTWly
cm9yLlBhc3M7Ci0gICAgICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpOwotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAg
IGlmICghcmFuZ2VzW2ldLmVtcHR5KCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0gICAgICAg
ICAgdmFyIGFyb3VuZCA9IGNoYXJzQXJvdW5kKGNtLCByYW5nZXNbaV0uaGVhZCk7Ci0gICAgICAg
ICAgaWYgKCFhcm91bmQgfHwgcGFpcnMuaW5kZXhPZihhcm91bmQpICUgMiAhPSAwKSByZXR1cm4g
Q29kZU1pcnJvci5QYXNzOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodmFyIGkgPSByYW5nZXMu
bGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICB2YXIgY3VyID0gcmFuZ2VzW2ld
LmhlYWQ7Ci0gICAgICAgICAgY20ucmVwbGFjZVJhbmdlKCIiLCBQb3MoY3VyLmxpbmUsIGN1ci5j
aCAtIDEpLCBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpKTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgIH07Ci0gICAgdmFyIGNsb3NpbmdCcmFja2V0cyA9ICIiOwotICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcGFpcnMubGVuZ3RoOyBpICs9IDIpIChmdW5jdGlvbihsZWZ0LCByaWdodCkgewotICAg
ICAgaWYgKGxlZnQgIT0gcmlnaHQpIGNsb3NpbmdCcmFja2V0cyArPSByaWdodDsKLSAgICAgIG1h
cFsiJyIgKyBsZWZ0ICsgIiciXSA9IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICAgIGlmIChjbS5nZXRP
cHRpb24oImRpc2FibGVJbnB1dCIpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwotICAgICAgICB2
YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKSwgdHlwZSwgbmV4dDsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICB2YXIgcmFu
Z2UgPSByYW5nZXNbaV0sIGN1ciA9IHJhbmdlLmhlYWQsIGN1clR5cGU7Ci0gICAgICAgICAgaWYg
KGxlZnQgPT0gIiciICYmIGNtLmdldFRva2VuVHlwZUF0KGN1cikgPT0gImNvbW1lbnQiKQotICAg
ICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKLSAgICAgICAgICB2YXIgbmV4dCA9IGNt
LmdldFJhbmdlKGN1ciwgUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAxKSk7Ci0gICAgICAgICAgaWYg
KCFyYW5nZS5lbXB0eSgpKQotICAgICAgICAgICAgY3VyVHlwZSA9ICJzdXJyb3VuZCI7Ci0gICAg
ICAgICAgZWxzZSBpZiAobGVmdCA9PSByaWdodCAmJiBuZXh0ID09IHJpZ2h0KSB7Ci0gICAgICAg
ICAgICBpZiAoY20uZ2V0UmFuZ2UoY3VyLCBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDMpKSA9PSBs
ZWZ0ICsgbGVmdCArIGxlZnQpCi0gICAgICAgICAgICAgIGN1clR5cGUgPSAic2tpcFRocmVlIjsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgY3VyVHlwZSA9ICJza2lwIjsKLSAgICAg
ICAgICB9IGVsc2UgaWYgKGxlZnQgPT0gcmlnaHQgJiYgY3VyLmNoID4gMSAmJgotICAgICAgICAg
ICAgICAgICAgICAgY20uZ2V0UmFuZ2UoUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAyKSwgY3VyKSA9
PSBsZWZ0ICsgbGVmdCAmJgotICAgICAgICAgICAgICAgICAgICAgKGN1ci5jaCA8PSAyIHx8IGNt
LmdldFJhbmdlKFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMyksIFBvcyhjdXIubGluZSwgY3VyLmNo
IC0gMikpICE9IGxlZnQpKQotICAgICAgICAgICAgY3VyVHlwZSA9ICJhZGRGb3VyIjsKLSAgICAg
ICAgICBlbHNlIGlmIChsZWZ0ID09IHJpZ2h0ICYmIENvZGVNaXJyb3IuaXNXb3JkQ2hhcihuZXh0
KSkKLSAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0gICAgICAgICAgZWxzZSBp
ZiAoY20uZ2V0TGluZShjdXIubGluZSkubGVuZ3RoID09IGN1ci5jaCB8fCBjbG9zaW5nQnJhY2tl
dHMuaW5kZXhPZihuZXh0KSA+PSAwIHx8IFNQQUNFX0NIQVJfUkVHRVgudGVzdChuZXh0KSkKLSAg
ICAgICAgICAgIGN1clR5cGUgPSAiYm90aCI7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAg
cmV0dXJuIENvZGVNaXJyb3IuUGFzczsKLSAgICAgICAgICBpZiAoIXR5cGUpIHR5cGUgPSBjdXJU
eXBlOwotICAgICAgICAgIGVsc2UgaWYgKHR5cGUgIT0gY3VyVHlwZSkgcmV0dXJuIENvZGVNaXJy
b3IuUGFzczsKLSAgICAgICAgfQotCi0gICAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsK
LSAgICAgICAgICBpZiAodHlwZSA9PSAic2tpcCIpIHsKLSAgICAgICAgICAgIGNtLmV4ZWNDb21t
YW5kKCJnb0NoYXJSaWdodCIpOwotICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAic2tpcFRo
cmVlIikgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspCi0gICAgICAg
ICAgICAgIGNtLmV4ZWNDb21tYW5kKCJnb0NoYXJSaWdodCIpOwotICAgICAgICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSAic3Vycm91bmQiKSB7Ci0gICAgICAgICAgICB2YXIgc2VscyA9IGNtLmdldFNl
bGVjdGlvbnMoKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2Vscy5sZW5ndGg7
IGkrKykKLSAgICAgICAgICAgICAgc2Vsc1tpXSA9IGxlZnQgKyBzZWxzW2ldICsgcmlnaHQ7Ci0g
ICAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9ucyhzZWxzLCAiYXJvdW5kIik7Ci0gICAgICAg
ICAgfSBlbHNlIGlmICh0eXBlID09ICJib3RoIikgewotICAgICAgICAgICAgY20ucmVwbGFjZVNl
bGVjdGlvbihsZWZ0ICsgcmlnaHQsIG51bGwpOwotICAgICAgICAgICAgY20uZXhlY0NvbW1hbmQo
ImdvQ2hhckxlZnQiKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImFkZEZvdXIiKSB7
Ci0gICAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKGxlZnQgKyBsZWZ0ICsgbGVmdCArIGxl
ZnQsICJiZWZvcmUiKTsKLSAgICAgICAgICAgIGNtLmV4ZWNDb21tYW5kKCJnb0NoYXJSaWdodCIp
OwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICB9OwotICAgICAgaWYgKGxlZnQgIT0g
cmlnaHQpIG1hcFsiJyIgKyByaWdodCArICInIl0gPSBmdW5jdGlvbihjbSkgewotICAgICAgICB2
YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNb
aV07Ci0gICAgICAgICAgaWYgKCFyYW5nZS5lbXB0eSgpIHx8Ci0gICAgICAgICAgICAgIGNtLmdl
dFJhbmdlKHJhbmdlLmhlYWQsIFBvcyhyYW5nZS5oZWFkLmxpbmUsIHJhbmdlLmhlYWQuY2ggKyAx
KSkgIT0gcmlnaHQpCi0gICAgICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwotICAgICAg
ICB9Ci0gICAgICAgIGNtLmV4ZWNDb21tYW5kKCJnb0NoYXJSaWdodCIpOwotICAgICAgfTsKLSAg
ICB9KShwYWlycy5jaGFyQXQoaSksIHBhaXJzLmNoYXJBdChpICsgMSkpOwotICAgIHJldHVybiBt
YXA7CisgIHZhciBiaW5kID0gZGVmYXVsdHMucGFpcnMgKyAiYCI7CisgIHZhciBrZXlNYXAgPSB7
QmFja3NwYWNlOiBoYW5kbGVCYWNrc3BhY2UsIEVudGVyOiBoYW5kbGVFbnRlcn07CisgIGZvciAo
dmFyIGkgPSAwOyBpIDwgYmluZC5sZW5ndGg7IGkrKykKKyAgICBrZXlNYXBbIiciICsgYmluZC5j
aGFyQXQoaSkgKyAiJyJdID0gaGFuZGxlcihiaW5kLmNoYXJBdChpKSk7CisKKyAgZnVuY3Rpb24g
aGFuZGxlcihjaCkgeworICAgIHJldHVybiBmdW5jdGlvbihjbSkgeyByZXR1cm4gaGFuZGxlQ2hh
cihjbSwgY2gpOyB9OworICB9CisKKyAgZnVuY3Rpb24gZ2V0Q29uZmlnKGNtKSB7CisgICAgdmFy
IGRlZmx0ID0gY20uc3RhdGUuY2xvc2VCcmFja2V0czsKKyAgICBpZiAoIWRlZmx0KSByZXR1cm4g
bnVsbDsKKyAgICB2YXIgbW9kZSA9IGNtLmdldE1vZGVBdChjbS5nZXRDdXJzb3IoKSk7CisgICAg
cmV0dXJuIG1vZGUuY2xvc2VCcmFja2V0cyB8fCBkZWZsdDsKICAgfQogCi0gIGZ1bmN0aW9uIGJ1
aWxkRXhwbG9kZUhhbmRsZXIocGFpcnMpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oY20pIHsKLSAg
ICAgIGlmIChjbS5nZXRPcHRpb24oImRpc2FibGVJbnB1dCIpKSByZXR1cm4gQ29kZU1pcnJvci5Q
YXNzOwotICAgICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7CisgIGZ1bmN0aW9u
IGhhbmRsZUJhY2tzcGFjZShjbSkgeworICAgIHZhciBjb25mID0gZ2V0Q29uZmlnKGNtKTsKKyAg
ICBpZiAoIWNvbmYgfHwgY20uZ2V0T3B0aW9uKCJkaXNhYmxlSW5wdXQiKSkgcmV0dXJuIENvZGVN
aXJyb3IuUGFzczsKKworICAgIHZhciBwYWlycyA9IGdldE9wdGlvbihjb25mLCAicGFpcnMiKTsK
KyAgICB2YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKTsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKCFyYW5nZXNbaV0uZW1wdHko
KSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICAgIHZhciBhcm91bmQgPSBjaGFyc0Fyb3Vu
ZChjbSwgcmFuZ2VzW2ldLmhlYWQpOworICAgICAgaWYgKCFhcm91bmQgfHwgcGFpcnMuaW5kZXhP
Zihhcm91bmQpICUgMiAhPSAwKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOworICAgIH0KKyAgICBm
b3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICB2YXIg
Y3VyID0gcmFuZ2VzW2ldLmhlYWQ7CisgICAgICBjbS5yZXBsYWNlUmFuZ2UoIiIsIFBvcyhjdXIu
bGluZSwgY3VyLmNoIC0gMSksIFBvcyhjdXIubGluZSwgY3VyLmNoICsgMSkpOworICAgIH0KKyAg
fQorCisgIGZ1bmN0aW9uIGhhbmRsZUVudGVyKGNtKSB7CisgICAgdmFyIGNvbmYgPSBnZXRDb25m
aWcoY20pOworICAgIHZhciBleHBsb2RlID0gY29uZiAmJiBnZXRPcHRpb24oY29uZiwgImV4cGxv
ZGUiKTsKKyAgICBpZiAoIWV4cGxvZGUgfHwgY20uZ2V0T3B0aW9uKCJkaXNhYmxlSW5wdXQiKSkg
cmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKworICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0
aW9ucygpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICBpZiAoIXJhbmdlc1tpXS5lbXB0eSgpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOworICAg
ICAgdmFyIGFyb3VuZCA9IGNoYXJzQXJvdW5kKGNtLCByYW5nZXNbaV0uaGVhZCk7CisgICAgICBp
ZiAoIWFyb3VuZCB8fCBleHBsb2RlLmluZGV4T2YoYXJvdW5kKSAlIDIgIT0gMCkgcmV0dXJuIENv
ZGVNaXJyb3IuUGFzczsKKyAgICB9CisgICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgeworICAg
ICAgY20ucmVwbGFjZVNlbGVjdGlvbigiXG5cbiIsIG51bGwpOworICAgICAgY20uZXhlY0NvbW1h
bmQoImdvQ2hhckxlZnQiKTsKKyAgICAgIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7CiAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewotICAgICAgICBp
ZiAoIXJhbmdlc1tpXS5lbXB0eSgpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwotICAgICAgICB2
YXIgYXJvdW5kID0gY2hhcnNBcm91bmQoY20sIHJhbmdlc1tpXS5oZWFkKTsKLSAgICAgICAgaWYg
KCFhcm91bmQgfHwgcGFpcnMuaW5kZXhPZihhcm91bmQpICUgMiAhPSAwKSByZXR1cm4gQ29kZU1p
cnJvci5QYXNzOworICAgICAgICB2YXIgbGluZSA9IHJhbmdlc1tpXS5oZWFkLmxpbmU7CisgICAg
ICAgIGNtLmluZGVudExpbmUobGluZSwgbnVsbCwgdHJ1ZSk7CisgICAgICAgIGNtLmluZGVudExp
bmUobGluZSArIDEsIG51bGwsIHRydWUpOwogICAgICAgfQotICAgICAgY20ub3BlcmF0aW9uKGZ1
bmN0aW9uKCkgewotICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKCJcblxuIiwgbnVsbCk7Cisg
ICAgfSk7CisgIH0KKworICBmdW5jdGlvbiBoYW5kbGVDaGFyKGNtLCBjaCkgeworICAgIHZhciBj
b25mID0gZ2V0Q29uZmlnKGNtKTsKKyAgICBpZiAoIWNvbmYgfHwgY20uZ2V0T3B0aW9uKCJkaXNh
YmxlSW5wdXQiKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKworICAgIHZhciBwYWlycyA9IGdl
dE9wdGlvbihjb25mLCAicGFpcnMiKTsKKyAgICB2YXIgcG9zID0gcGFpcnMuaW5kZXhPZihjaCk7
CisgICAgaWYgKHBvcyA9PSAtMSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICB2YXIgdHJp
cGxlcyA9IGdldE9wdGlvbihjb25mLCAidHJpcGxlcyIpOworCisgICAgdmFyIGlkZW50aWNhbCA9
IHBhaXJzLmNoYXJBdChwb3MgKyAxKSA9PSBjaDsKKyAgICB2YXIgcmFuZ2VzID0gY20ubGlzdFNl
bGVjdGlvbnMoKTsKKyAgICB2YXIgb3BlbmluZyA9IHBvcyAlIDIgPT0gMDsKKworICAgIHZhciB0
eXBlLCBuZXh0OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7
CisgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV0sIGN1ciA9IHJhbmdlLmhlYWQsIGN1clR5cGU7
CisgICAgICB2YXIgbmV4dCA9IGNtLmdldFJhbmdlKGN1ciwgUG9zKGN1ci5saW5lLCBjdXIuY2gg
KyAxKSk7CisgICAgICBpZiAob3BlbmluZyAmJiAhcmFuZ2UuZW1wdHkoKSkgeworICAgICAgICBj
dXJUeXBlID0gInN1cnJvdW5kIjsKKyAgICAgIH0gZWxzZSBpZiAoKGlkZW50aWNhbCB8fCAhb3Bl
bmluZykgJiYgbmV4dCA9PSBjaCkgeworICAgICAgICBpZiAodHJpcGxlcy5pbmRleE9mKGNoKSA+
PSAwICYmIGNtLmdldFJhbmdlKGN1ciwgUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAzKSkgPT0gY2gg
KyBjaCArIGNoKQorICAgICAgICAgIGN1clR5cGUgPSAic2tpcFRocmVlIjsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgIGN1clR5cGUgPSAic2tpcCI7CisgICAgICB9IGVsc2UgaWYgKGlkZW50aWNh
bCAmJiBjdXIuY2ggPiAxICYmIHRyaXBsZXMuaW5kZXhPZihjaCkgPj0gMCAmJgorICAgICAgICAg
ICAgICAgICBjbS5nZXRSYW5nZShQb3MoY3VyLmxpbmUsIGN1ci5jaCAtIDIpLCBjdXIpID09IGNo
ICsgY2ggJiYKKyAgICAgICAgICAgICAgICAgKGN1ci5jaCA8PSAyIHx8IGNtLmdldFJhbmdlKFBv
cyhjdXIubGluZSwgY3VyLmNoIC0gMyksIFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMikpICE9IGNo
KSkgeworICAgICAgICBjdXJUeXBlID0gImFkZEZvdXIiOworICAgICAgfSBlbHNlIGlmIChpZGVu
dGljYWwpIHsKKyAgICAgICAgaWYgKCFDb2RlTWlycm9yLmlzV29yZENoYXIobmV4dCkgJiYgZW50
ZXJpbmdTdHJpbmcoY20sIGN1ciwgY2gpKSBjdXJUeXBlID0gImJvdGgiOworICAgICAgICBlbHNl
IHJldHVybiBDb2RlTWlycm9yLlBhc3M7CisgICAgICB9IGVsc2UgaWYgKG9wZW5pbmcgJiYgKGNt
LmdldExpbmUoY3VyLmxpbmUpLmxlbmd0aCA9PSBjdXIuY2ggfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXNDbG9zaW5nQnJhY2tldChuZXh0LCBwYWlycykgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgL1xzLy50ZXN0KG5leHQpKSkgeworICAgICAgICBjdXJUeXBlID0g
ImJvdGgiOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsK
KyAgICAgIH0KKyAgICAgIGlmICghdHlwZSkgdHlwZSA9IGN1clR5cGU7CisgICAgICBlbHNlIGlm
ICh0eXBlICE9IGN1clR5cGUpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CisgICAgfQorCisgICAg
dmFyIGxlZnQgPSBwb3MgJSAyID8gcGFpcnMuY2hhckF0KHBvcyAtIDEpIDogY2g7CisgICAgdmFy
IHJpZ2h0ID0gcG9zICUgMiA/IGNoIDogcGFpcnMuY2hhckF0KHBvcyArIDEpOworICAgIGNtLm9w
ZXJhdGlvbihmdW5jdGlvbigpIHsKKyAgICAgIGlmICh0eXBlID09ICJza2lwIikgeworICAgICAg
ICBjbS5leGVjQ29tbWFuZCgiZ29DaGFyUmlnaHQiKTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZSA9
PSAic2tpcFRocmVlIikgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykKKyAg
ICAgICAgICBjbS5leGVjQ29tbWFuZCgiZ29DaGFyUmlnaHQiKTsKKyAgICAgIH0gZWxzZSBpZiAo
dHlwZSA9PSAic3Vycm91bmQiKSB7CisgICAgICAgIHZhciBzZWxzID0gY20uZ2V0U2VsZWN0aW9u
cygpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbHMubGVuZ3RoOyBpKyspCisgICAg
ICAgICAgc2Vsc1tpXSA9IGxlZnQgKyBzZWxzW2ldICsgcmlnaHQ7CisgICAgICAgIGNtLnJlcGxh
Y2VTZWxlY3Rpb25zKHNlbHMsICJhcm91bmQiKTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAi
Ym90aCIpIHsKKyAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbihsZWZ0ICsgcmlnaHQsIG51bGwp
OworICAgICAgICBjbS50cmlnZ2VyRWxlY3RyaWMobGVmdCArIHJpZ2h0KTsKICAgICAgICAgY20u
ZXhlY0NvbW1hbmQoImdvQ2hhckxlZnQiKTsKLSAgICAgICAgcmFuZ2VzID0gY20ubGlzdFNlbGVj
dGlvbnMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICB2YXIgbGluZSA9IHJhbmdlc1tpXS5oZWFkLmxpbmU7Ci0gICAgICAgICAg
Y20uaW5kZW50TGluZShsaW5lLCBudWxsLCB0cnVlKTsKLSAgICAgICAgICBjbS5pbmRlbnRMaW5l
KGxpbmUgKyAxLCBudWxsLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfTsKKyAg
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiYWRkRm91ciIpIHsKKyAgICAgICAgY20ucmVwbGFjZVNl
bGVjdGlvbihsZWZ0ICsgbGVmdCArIGxlZnQgKyBsZWZ0LCAiYmVmb3JlIik7CisgICAgICAgIGNt
LmV4ZWNDb21tYW5kKCJnb0NoYXJSaWdodCIpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAg
ZnVuY3Rpb24gaXNDbG9zaW5nQnJhY2tldChjaCwgcGFpcnMpIHsKKyAgICB2YXIgcG9zID0gcGFp
cnMubGFzdEluZGV4T2YoY2gpOworICAgIHJldHVybiBwb3MgPiAtMSAmJiBwb3MgJSAyID09IDE7
CisgIH0KKworICBmdW5jdGlvbiBjaGFyc0Fyb3VuZChjbSwgcG9zKSB7CisgICAgdmFyIHN0ciA9
IGNtLmdldFJhbmdlKFBvcyhwb3MubGluZSwgcG9zLmNoIC0gMSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBvcyhwb3MubGluZSwgcG9zLmNoICsgMSkpOworICAgIHJldHVybiBzdHIubGVu
Z3RoID09IDIgPyBzdHIgOiBudWxsOworICB9CisKKyAgLy8gUHJvamVjdCB0aGUgdG9rZW4gdHlw
ZSB0aGF0IHdpbGwgZXhpc3RzIGFmdGVyIHRoZSBnaXZlbiBjaGFyIGlzCisgIC8vIHR5cGVkLCBh
bmQgdXNlIGl0IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IHdvdWxkIGNhdXNlIHRoZSBzdGFydAor
ICAvLyBvZiBhIHN0cmluZyB0b2tlbi4KKyAgZnVuY3Rpb24gZW50ZXJpbmdTdHJpbmcoY20sIHBv
cywgY2gpIHsKKyAgICB2YXIgbGluZSA9IGNtLmdldExpbmUocG9zLmxpbmUpOworICAgIHZhciB0
b2tlbiA9IGNtLmdldFRva2VuQXQocG9zKTsKKyAgICBpZiAoL1xic3RyaW5nMj9cYi8udGVzdCh0
b2tlbi50eXBlKSkgcmV0dXJuIGZhbHNlOworICAgIHZhciBzdHJlYW0gPSBuZXcgQ29kZU1pcnJv
ci5TdHJpbmdTdHJlYW0obGluZS5zbGljZSgwLCBwb3MuY2gpICsgY2ggKyBsaW5lLnNsaWNlKHBv
cy5jaCksIDQpOworICAgIHN0cmVhbS5wb3MgPSBzdHJlYW0uc3RhcnQgPSB0b2tlbi5zdGFydDsK
KyAgICBmb3IgKDs7KSB7CisgICAgICB2YXIgdHlwZTEgPSBjbS5nZXRNb2RlKCkudG9rZW4oc3Ry
ZWFtLCB0b2tlbi5zdGF0ZSk7CisgICAgICBpZiAoc3RyZWFtLnBvcyA+PSBwb3MuY2ggKyAxKSBy
ZXR1cm4gL1xic3RyaW5nMj9cYi8udGVzdCh0eXBlMSk7CisgICAgICBzdHJlYW0uc3RhcnQgPSBz
dHJlYW0ucG9zOworICAgIH0KICAgfQogfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9j
b2RlbWlycm9yLmNzcwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDA5OGEz
MTdhMjI5MDk4ZTJjMGRkOWI2ZWFmOThmNzIzYmZjODc2YzguLjM1NDM1MjNlNjQ1Y2U1YThhNjgx
OTg2ZDVmMjg5ZWVhNjU1MTRlMzkKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3Iu
Y3NzCkBAIC00LDEwICs0LDcgQEAKICAgLyogU2V0IGhlaWdodCwgd2lkdGgsIGJvcmRlcnMsIGFu
ZCBnbG9iYWwgZm9udCBwcm9wZXJ0aWVzIGhlcmUgKi8KICAgZm9udC1mYW1pbHk6IG1vbm9zcGFj
ZTsKICAgaGVpZ2h0OiAzMDBweDsKLX0KLS5Db2RlTWlycm9yLXNjcm9sbCB7Ci0gIC8qIFNldCBz
Y3JvbGxpbmcgYmVoYXZpb3VyIGhlcmUgKi8KLSAgb3ZlcmZsb3c6IGF1dG87CisgIGNvbG9yOiBi
bGFjazsKIH0KIAogLyogUEFERElORyAqLwpAQCAtMzYsMjggKzMzLDYwIEBACiAgIG1pbi13aWR0
aDogMjBweDsKICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgIGNvbG9yOiAjOTk5OwotICAtbW96LWJv
eC1zaXppbmc6IGNvbnRlbnQtYm94OwotICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKyAgd2hp
dGUtc3BhY2U6IG5vd3JhcDsKIH0KIAorLkNvZGVNaXJyb3ItZ3V0dGVybWFya2VyIHsgY29sb3I6
IGJsYWNrOyB9CisuQ29kZU1pcnJvci1ndXR0ZXJtYXJrZXItc3VidGxlIHsgY29sb3I6ICM5OTk7
IH0KKwogLyogQ1VSU09SICovCiAKLS5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7
CisuQ29kZU1pcnJvci1jdXJzb3IgewogICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwor
ICBib3JkZXItcmlnaHQ6IG5vbmU7CisgIHdpZHRoOiAwOwogfQogLyogU2hvd24gd2hlbiBtb3Zp
bmcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dCAqLwogLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3It
c2Vjb25kYXJ5Y3Vyc29yIHsKICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7CiB9Ci0u
Q29kZU1pcnJvci5jbS1rZXltYXAtZmF0LWN1cnNvciBkaXYuQ29kZU1pcnJvci1jdXJzb3Igewor
LmNtLWZhdC1jdXJzb3IgLkNvZGVNaXJyb3ItY3Vyc29yIHsKICAgd2lkdGg6IGF1dG87CiAgIGJv
cmRlcjogMDsKICAgYmFja2dyb3VuZDogIzdlNzsKIH0KKy5jbS1mYXQtY3Vyc29yIGRpdi5Db2Rl
TWlycm9yLWN1cnNvcnMgeworICB6LWluZGV4OiAxOworfQorCisuY20tYW5pbWF0ZS1mYXQtY3Vy
c29yIHsKKyAgd2lkdGg6IGF1dG87CisgIGJvcmRlcjogMDsKKyAgLXdlYmtpdC1hbmltYXRpb246
IGJsaW5rIDEuMDZzIHN0ZXBzKDEpIGluZmluaXRlOworICAtbW96LWFuaW1hdGlvbjogYmxpbmsg
MS4wNnMgc3RlcHMoMSkgaW5maW5pdGU7CisgIGFuaW1hdGlvbjogYmxpbmsgMS4wNnMgc3RlcHMo
MSkgaW5maW5pdGU7CisgIGJhY2tncm91bmQtY29sb3I6ICM3ZTc7Cit9CitALW1vei1rZXlmcmFt
ZXMgYmxpbmsgeworICAwJSB7fQorICA1MCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVu
dDsgfQorICAxMDAlIHt9Cit9CitALXdlYmtpdC1rZXlmcmFtZXMgYmxpbmsgeworICAwJSB7fQor
ICA1MCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfQorICAxMDAlIHt9Cit9CitA
a2V5ZnJhbWVzIGJsaW5rIHsKKyAgMCUge30KKyAgNTAlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJh
bnNwYXJlbnQ7IH0KKyAgMTAwJSB7fQorfQorCiAvKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVu
dCBpbiBvdmVyd3JpdGUgKG5vbi1pbnNlcnQpIG1vZGUgKi8KLWRpdi5Db2RlTWlycm9yLW92ZXJ3
cml0ZSBkaXYuQ29kZU1pcnJvci1jdXJzb3Ige30KKy5Db2RlTWlycm9yLW92ZXJ3cml0ZSAuQ29k
ZU1pcnJvci1jdXJzb3Ige30KIAotLmNtLXRhYiB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgfQor
LmNtLXRhYiB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0
OyB9CiAKIC5Db2RlTWlycm9yLXJ1bGVyIHsKICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2Nj
OwpAQCAtNjYsNiArOTUsMTUgQEAgZGl2LkNvZGVNaXJyb3Itb3ZlcndyaXRlIGRpdi5Db2RlTWly
cm9yLWN1cnNvciB7fQogCiAvKiBERUZBVUxUIFRIRU1FICovCiAKKy5jbS1zLWRlZmF1bHQgLmNt
LWhlYWRlciB7Y29sb3I6IGJsdWU7fQorLmNtLXMtZGVmYXVsdCAuY20tcXVvdGUge2NvbG9yOiAj
MDkwO30KKy5jbS1uZWdhdGl2ZSB7Y29sb3I6ICNkNDQ7fQorLmNtLXBvc2l0aXZlIHtjb2xvcjog
IzI5Mjt9CisuY20taGVhZGVyLCAuY20tc3Ryb25nIHtmb250LXdlaWdodDogYm9sZDt9CisuY20t
ZW0ge2ZvbnQtc3R5bGU6IGl0YWxpYzt9CisuY20tbGluayB7dGV4dC1kZWNvcmF0aW9uOiB1bmRl
cmxpbmU7fQorLmNtLXN0cmlrZXRocm91Z2gge3RleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdo
O30KKwogLmNtLXMtZGVmYXVsdCAuY20ta2V5d29yZCB7Y29sb3I6ICM3MDg7fQogLmNtLXMtZGVm
YXVsdCAuY20tYXRvbSB7Y29sb3I6ICMyMTk7fQogLmNtLXMtZGVmYXVsdCAuY20tbnVtYmVyIHtj
b2xvcjogIzE2NDt9CkBAIC04NSwyMiArMTIzLDE5IEBAIGRpdi5Db2RlTWlycm9yLW92ZXJ3cml0
ZSBkaXYuQ29kZU1pcnJvci1jdXJzb3Ige30KIC5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQge2Nv
bG9yOiAjOTk3O30KIC5jbS1zLWRlZmF1bHQgLmNtLXRhZyB7Y29sb3I6ICMxNzA7fQogLmNtLXMt
ZGVmYXVsdCAuY20tYXR0cmlidXRlIHtjb2xvcjogIzAwYzt9Ci0uY20tcy1kZWZhdWx0IC5jbS1o
ZWFkZXIge2NvbG9yOiBibHVlO30KLS5jbS1zLWRlZmF1bHQgLmNtLXF1b3RlIHtjb2xvcjogIzA5
MDt9CiAuY20tcy1kZWZhdWx0IC5jbS1ociB7Y29sb3I6ICM5OTk7fQogLmNtLXMtZGVmYXVsdCAu
Y20tbGluayB7Y29sb3I6ICMwMGM7fQogCi0uY20tbmVnYXRpdmUge2NvbG9yOiAjZDQ0O30KLS5j
bS1wb3NpdGl2ZSB7Y29sb3I6ICMyOTI7fQotLmNtLWhlYWRlciwgLmNtLXN0cm9uZyB7Zm9udC13
ZWlnaHQ6IGJvbGQ7fQotLmNtLWVtIHtmb250LXN0eWxlOiBpdGFsaWM7fQotLmNtLWxpbmsge3Rl
eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO30KLQogLmNtLXMtZGVmYXVsdCAuY20tZXJyb3Ige2Nv
bG9yOiAjZjAwO30KIC5jbS1pbnZhbGlkY2hhciB7Y29sb3I6ICNmMDA7fQogCisuQ29kZU1pcnJv
ci1jb21wb3NpbmcgeyBib3JkZXItYm90dG9tOiAycHggc29saWQ7IH0KKworLyogRGVmYXVsdCBz
dHlsZXMgZm9yIGNvbW1vbiBhZGRvbnMgKi8KKwogZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWly
cm9yLW1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICMwZjA7fQogZGl2LkNvZGVNaXJyb3Igc3Bhbi5D
b2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQorLkNvZGVNaXJyb3It
bWF0Y2hpbmd0YWcgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTUwLCAwLCAuMyk7IH0KIC5Db2Rl
TWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7YmFja2dyb3VuZDogI2U4ZjJmZjt9CiAKIC8q
IFNUT1AgKi8KQEAgLTEwOSwxNCArMTQ0LDEzIEBAIGRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1p
cnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30KICAgIHRoZSBlZGl0b3IuIFlv
dSBwcm9iYWJseSBzaG91bGRuJ3QgdG91Y2ggdGhlbS4gKi8KIAogLkNvZGVNaXJyb3IgewotICBs
aW5lLWhlaWdodDogMTsKICAgcG9zaXRpb246IHJlbGF0aXZlOwogICBvdmVyZmxvdzogaGlkZGVu
OwogICBiYWNrZ3JvdW5kOiB3aGl0ZTsKLSAgY29sb3I6IGJsYWNrOwogfQogCiAuQ29kZU1pcnJv
ci1zY3JvbGwgeworICBvdmVyZmxvdzogc2Nyb2xsICFpbXBvcnRhbnQ7IC8qIFRoaW5ncyB3aWxs
IGJyZWFrIGlmIHRoaXMgaXMgb3ZlcnJpZGRlbiAqLwogICAvKiAzMHB4IGlzIHRoZSBtYWdpYyBt
YXJnaW4gdXNlZCB0byBoaWRlIHRoZSBlbGVtZW50J3MgcmVhbCBzY3JvbGxiYXJzICovCiAgIC8q
IFNlZSBvdmVyZmxvdzogaGlkZGVuIGluIC5Db2RlTWlycm9yICovCiAgIG1hcmdpbi1ib3R0b206
IC0zMHB4OyBtYXJnaW4tcmlnaHQ6IC0zMHB4OwpAQCAtMTI0LDE0ICsxNTgsMTAgQEAgZGl2LkNv
ZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7
fQogICBoZWlnaHQ6IDEwMCU7CiAgIG91dGxpbmU6IG5vbmU7IC8qIFByZXZlbnQgZHJhZ2dpbmcg
ZnJvbSBoaWdobGlnaHRpbmcgdGhlIGVsZW1lbnQgKi8KICAgcG9zaXRpb246IHJlbGF0aXZlOwot
ICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwotICBib3gtc2l6aW5nOiBjb250ZW50LWJv
eDsKIH0KIC5Db2RlTWlycm9yLXNpemVyIHsKICAgcG9zaXRpb246IHJlbGF0aXZlOwogICBib3Jk
ZXItcmlnaHQ6IDMwcHggc29saWQgdHJhbnNwYXJlbnQ7Ci0gIC1tb3otYm94LXNpemluZzogY29u
dGVudC1ib3g7Ci0gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogfQogCiAvKiBUaGUgZmFrZSwg
dmlzaWJsZSBzY3JvbGxiYXJzLiBVc2VkIHRvIGZvcmNlIHJlZHJhdyBkdXJpbmcgc2Nyb2xsaW5n
CkBAIC0xNjEsMjkgKzE5MSw0MiBAQCBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9u
bWF0Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMjt9CiAKIC5Db2RlTWlycm9yLWd1dHRlcnMgewog
ICBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHRvcDogMDsKLSAgcGFkZGluZy1ib3R0b206
IDMwcHg7CiAgIHotaW5kZXg6IDM7CiB9CiAuQ29kZU1pcnJvci1ndXR0ZXIgewogICB3aGl0ZS1z
cGFjZTogbm9ybWFsOwogICBoZWlnaHQ6IDEwMCU7Ci0gIC1tb3otYm94LXNpemluZzogY29udGVu
dC1ib3g7Ci0gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwotICBwYWRkaW5nLWJvdHRvbTogMzBw
eDsKLSAgbWFyZ2luLWJvdHRvbTogLTMycHg7CiAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAg
bWFyZ2luLWJvdHRvbTogLTMwcHg7CiAgIC8qIEhhY2sgdG8gbWFrZSBJRTcgYmVoYXZlICovCiAg
ICp6b29tOjE7CiAgICpkaXNwbGF5OmlubGluZTsKIH0KKy5Db2RlTWlycm9yLWd1dHRlci13cmFw
cGVyIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB6LWluZGV4OiA0OworICBiYWNrZ3JvdW5k
OiBub25lICFpbXBvcnRhbnQ7CisgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OworfQorLkNvZGVN
aXJyb3ItZ3V0dGVyLWJhY2tncm91bmQgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDog
MDsgYm90dG9tOiAwOworICB6LWluZGV4OiA0OworfQogLkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCB7
CiAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgY3Vyc29yOiBkZWZhdWx0OwogICB6LWluZGV4OiA0
OwogfQorLkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIgeworICAtd2Via2l0LXVzZXItc2VsZWN0
OiBub25lOworICAtbW96LXVzZXItc2VsZWN0OiBub25lOworICB1c2VyLXNlbGVjdDogbm9uZTsK
K30KIAogLkNvZGVNaXJyb3ItbGluZXMgewogICBjdXJzb3I6IHRleHQ7CisgIG1pbi1oZWlnaHQ6
IDFweDsgLyogcHJldmVudHMgY29sbGFwc2luZyBiZWZvcmUgZmlyc3QgZHJhdyAqLwogfQogLkNv
ZGVNaXJyb3IgcHJlIHsKICAgLyogUmVzZXQgc29tZSBzdHlsZXMgdGhhdCB0aGUgcmVzdCBvZiB0
aGUgcGFnZSBtaWdodCBoYXZlIHNldCAqLwpAQCAtMjAwLDYgKzI0Myw3IEBAIGRpdi5Db2RlTWly
cm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30KICAg
ei1pbmRleDogMjsKICAgcG9zaXRpb246IHJlbGF0aXZlOwogICBvdmVyZmxvdzogdmlzaWJsZTsK
KyAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKIH0KIC5Db2RlTWly
cm9yLXdyYXAgcHJlIHsKICAgd29yZC13cmFwOiBicmVhay13b3JkOwpAQCAtMjIxLDggKzI2NSwx
OCBAQCBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtj
b2xvcjogI2YyMjt9CiAKIC5Db2RlTWlycm9yLXdpZGdldCB7fQogCi0uQ29kZU1pcnJvci13cmFw
IC5Db2RlTWlycm9yLXNjcm9sbCB7Ci0gIG92ZXJmbG93LXg6IGhpZGRlbjsKKy5Db2RlTWlycm9y
LWNvZGUgeworICBvdXRsaW5lOiBub25lOworfQorCisvKiBGb3JjZSBjb250ZW50LWJveCBzaXpp
bmcgZm9yIHRoZSBlbGVtZW50cyB3aGVyZSB3ZSBleHBlY3QgaXQgKi8KKy5Db2RlTWlycm9yLXNj
cm9sbCwKKy5Db2RlTWlycm9yLXNpemVyLAorLkNvZGVNaXJyb3ItZ3V0dGVyLAorLkNvZGVNaXJy
b3ItZ3V0dGVycywKKy5Db2RlTWlycm9yLWxpbmVudW1iZXIgeworICAtbW96LWJveC1zaXppbmc6
IGNvbnRlbnQtYm94OworICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKIH0KIAogLkNvZGVNaXJy
b3ItbWVhc3VyZSB7CkBAIC0yMzIsMTkgKzI4NiwxOSBAQCBkaXYuQ29kZU1pcnJvciBzcGFuLkNv
ZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMjt9CiAgIG92ZXJmbG93OiBo
aWRkZW47CiAgIHZpc2liaWxpdHk6IGhpZGRlbjsKIH0KLS5Db2RlTWlycm9yLW1lYXN1cmUgcHJl
IHsgcG9zaXRpb246IHN0YXRpYzsgfQogCi0uQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJz
b3IgewotICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gIGJvcmRlci1yaWdodDogbm9uZTsKLSAgd2lk
dGg6IDA7Ci19CisuQ29kZU1pcnJvci1jdXJzb3IgeyBwb3NpdGlvbjogYWJzb2x1dGU7IH0KKy5D
b2RlTWlycm9yLW1lYXN1cmUgcHJlIHsgcG9zaXRpb246IHN0YXRpYzsgfQogCiBkaXYuQ29kZU1p
cnJvci1jdXJzb3JzIHsKICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICBwb3NpdGlvbjogcmVsYXRp
dmU7Ci0gIHotaW5kZXg6IDE7CisgIHotaW5kZXg6IDM7CiB9CitkaXYuQ29kZU1pcnJvci1kcmFn
Y3Vyc29ycyB7CisgIHZpc2liaWxpdHk6IHZpc2libGU7Cit9CisKIC5Db2RlTWlycm9yLWZvY3Vz
ZWQgZGl2LkNvZGVNaXJyb3ItY3Vyc29ycyB7CiAgIHZpc2liaWxpdHk6IHZpc2libGU7CiB9CkBA
IC0yNTIsNiArMzA2LDggQEAgZGl2LkNvZGVNaXJyb3ItY3Vyc29ycyB7CiAuQ29kZU1pcnJvci1z
ZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNkOWQ5ZDk7IH0KIC5Db2RlTWlycm9yLWZvY3VzZWQgLkNv
ZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9CiAuQ29kZU1pcnJvci1j
cm9zc2hhaXIgeyBjdXJzb3I6IGNyb3NzaGFpcjsgfQorLkNvZGVNaXJyb3ItbGluZTo6c2VsZWN0
aW9uLCAuQ29kZU1pcnJvci1saW5lID4gc3Bhbjo6c2VsZWN0aW9uLCAuQ29kZU1pcnJvci1saW5l
ID4gc3BhbiA+IHNwYW46OnNlbGVjdGlvbiB7IGJhY2tncm91bmQ6ICNkN2Q0ZjA7IH0KKy5Db2Rl
TWlycm9yLWxpbmU6Oi1tb3otc2VsZWN0aW9uLCAuQ29kZU1pcnJvci1saW5lID4gc3Bhbjo6LW1v
ei1zZWxlY3Rpb24sIC5Db2RlTWlycm9yLWxpbmUgPiBzcGFuID4gc3Bhbjo6LW1vei1zZWxlY3Rp
b24geyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9CiAKIC5jbS1zZWFyY2hpbmcgewogICBiYWNrZ3Jv
dW5kOiAjZmZhOwpAQCAtMjcwLDMgKzMyNiw5IEBAIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMgewog
ICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgfQogfQorCisvKiBTZWUgaXNzdWUgIzI5MDEgKi8K
Ky5jbS10YWItd3JhcC1oYWNrOmFmdGVyIHsgY29udGVudDogJyc7IH0KKworLyogSGVscCB1c2Vy
cyB1c2UgbWFya3NlbGVjdGlvbiB0byBzYWZlbHkgc3R5bGUgdGV4dCBiYWNrZ3JvdW5kICovCitz
cGFuLkNvZGVNaXJyb3Itc2VsZWN0ZWR0ZXh0IHsgYmFja2dyb3VuZDogbm9uZTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1p
cnJvci9jb2RlbWlycm9yLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
RXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmpzCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9k
ZSAxMDA3NTUKaW5kZXggODYxMmVkODEzMTZhYzQ5NDZkNjhkNzE1OGJiMTk0MzNmZWQ0ZWJhZi4u
ODBhNzA5Njc1ZDU3MjNlNWRlNTM3YmYxNDViMWNlOTNhZmU0NzYyOAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3Iu
anMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29k
ZU1pcnJvci9jb2RlbWlycm9yLmpzCkBAIC0yMywxOSArMjMsMTUgQEAKICAgLy8gZGV0ZWN0ZWQg
YXJlIGVuYWJsZWQgYmFzZWQgb24gdXNlckFnZW50IGV0YyBzbmlmZmluZy4KIAogICB2YXIgZ2Vj
a28gPSAvZ2Vja29cL1xkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAgLy8gaWVfdXB0
b04gbWVhbnMgSW50ZXJuZXQgRXhwbG9yZXIgdmVyc2lvbiBOIG9yIGxvd2VyCiAgIHZhciBpZV91
cHRvMTAgPSAvTVNJRSBcZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAgdmFyIGllX3Vw
dG83ID0gaWVfdXB0bzEwICYmIChkb2N1bWVudC5kb2N1bWVudE1vZGUgPT0gbnVsbCB8fCBkb2N1
bWVudC5kb2N1bWVudE1vZGUgPCA4KTsKLSAgdmFyIGllX3VwdG84ID0gaWVfdXB0bzEwICYmIChk
b2N1bWVudC5kb2N1bWVudE1vZGUgPT0gbnVsbCB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPCA5
KTsKLSAgdmFyIGllX3VwdG85ID0gaWVfdXB0bzEwICYmIChkb2N1bWVudC5kb2N1bWVudE1vZGUg
PT0gbnVsbCB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPCAxMCk7Ci0gIHZhciBpZV8xMXVwID0g
L1RyaWRlbnRcLyhbNy05XXxcZHsyLH0pXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7Cisg
IHZhciBpZV8xMXVwID0gL1RyaWRlbnRcLyg/Ols3LTldfFxkezIsfSlcLi4qcnY6KFxkKykvLmV4
ZWMobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgIHZhciBpZSA9IGllX3VwdG8xMCB8fCBpZV8xMXVw
OworICB2YXIgaWVfdmVyc2lvbiA9IGllICYmIChpZV91cHRvMTAgPyBkb2N1bWVudC5kb2N1bWVu
dE1vZGUgfHwgNiA6IGllXzExdXBbMV0pOwogICB2YXIgd2Via2l0ID0gL1dlYktpdFwvLy50ZXN0
KG5hdmlnYXRvci51c2VyQWdlbnQpOwogICB2YXIgcXR3ZWJraXQgPSB3ZWJraXQgJiYgL1F0XC9c
ZCtcLlxkKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICAgdmFyIGNocm9tZSA9IC9DaHJv
bWVcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICAgdmFyIHByZXN0byA9IC9PcGVyYVwv
Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogICB2YXIgc2FmYXJpID0gL0FwcGxlIENvbXB1
dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpOwotICB2YXIga2h0bWwgPSAvS0hUTUxcLy8udGVz
dChuYXZpZ2F0b3IudXNlckFnZW50KTsKICAgdmFyIG1hY19nZU1vdW50YWluTGlvbiA9IC9NYWMg
T1MgWCAxXGRcRChbOC05XXxcZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogICB2
YXIgcGhhbnRvbSA9IC9QaGFudG9tSlMvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAKQEAg
LTUwLDcgKzQ2LDcgQEAKICAgaWYgKHByZXN0b192ZXJzaW9uICYmIHByZXN0b192ZXJzaW9uID49
IDE1KSB7IHByZXN0byA9IGZhbHNlOyB3ZWJraXQgPSB0cnVlOyB9CiAgIC8vIFNvbWUgYnJvd3Nl
cnMgdXNlIHRoZSB3cm9uZyBldmVudCBwcm9wZXJ0aWVzIHRvIHNpZ25hbCBjbWQvY3RybCBvbiBP
UyBYCiAgIHZhciBmbGlwQ3RybENtZCA9IG1hYyAmJiAocXR3ZWJraXQgfHwgcHJlc3RvICYmIChw
cmVzdG9fdmVyc2lvbiA9PSBudWxsIHx8IHByZXN0b192ZXJzaW9uIDwgMTIuMTEpKTsKLSAgdmFy
IGNhcHR1cmVSaWdodENsaWNrID0gZ2Vja28gfHwgKGllICYmICFpZV91cHRvOCk7CisgIHZhciBj
YXB0dXJlUmlnaHRDbGljayA9IGdlY2tvIHx8IChpZSAmJiBpZV92ZXJzaW9uID49IDkpOwogCiAg
IC8vIE9wdGltaXplIHNvbWUgY29kZSB3aGVuIHRoZXNlIGZlYXR1cmVzIGFyZSBub3QgdXNlZC4K
ICAgdmFyIHNhd1JlYWRPbmx5U3BhbnMgPSBmYWxzZSwgc2F3Q29sbGFwc2VkU3BhbnMgPSBmYWxz
ZTsKQEAgLTYzLDU1ICs1OSw3MCBAQAogICBmdW5jdGlvbiBDb2RlTWlycm9yKHBsYWNlLCBvcHRp
b25zKSB7CiAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENvZGVNaXJyb3IpKSByZXR1cm4gbmV3
IENvZGVNaXJyb3IocGxhY2UsIG9wdGlvbnMpOwogCi0gICAgdGhpcy5vcHRpb25zID0gb3B0aW9u
cyA9IG9wdGlvbnMgfHwge307CisgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IG9wdGlvbnMg
PyBjb3B5T2JqKG9wdGlvbnMpIDoge307CiAgICAgLy8gRGV0ZXJtaW5lIGVmZmVjdGl2ZSBvcHRp
b25zIGJhc2VkIG9uIGdpdmVuIHZhbHVlcyBhbmQgZGVmYXVsdHMuCiAgICAgY29weU9iaihkZWZh
dWx0cywgb3B0aW9ucywgZmFsc2UpOwogICAgIHNldEd1dHRlcnNGb3JMaW5lTnVtYmVycyhvcHRp
b25zKTsKIAogICAgIHZhciBkb2MgPSBvcHRpb25zLnZhbHVlOwotICAgIGlmICh0eXBlb2YgZG9j
ID09ICJzdHJpbmciKSBkb2MgPSBuZXcgRG9jKGRvYywgb3B0aW9ucy5tb2RlKTsKKyAgICBpZiAo
dHlwZW9mIGRvYyA9PSAic3RyaW5nIikgZG9jID0gbmV3IERvYyhkb2MsIG9wdGlvbnMubW9kZSwg
bnVsbCwgb3B0aW9ucy5saW5lU2VwYXJhdG9yKTsKICAgICB0aGlzLmRvYyA9IGRvYzsKIAotICAg
IHZhciBkaXNwbGF5ID0gdGhpcy5kaXNwbGF5ID0gbmV3IERpc3BsYXkocGxhY2UsIGRvYyk7Cisg
ICAgdmFyIGlucHV0ID0gbmV3IENvZGVNaXJyb3IuaW5wdXRTdHlsZXNbb3B0aW9ucy5pbnB1dFN0
eWxlXSh0aGlzKTsKKyAgICB2YXIgZGlzcGxheSA9IHRoaXMuZGlzcGxheSA9IG5ldyBEaXNwbGF5
KHBsYWNlLCBkb2MsIGlucHV0KTsKICAgICBkaXNwbGF5LndyYXBwZXIuQ29kZU1pcnJvciA9IHRo
aXM7CiAgICAgdXBkYXRlR3V0dGVycyh0aGlzKTsKICAgICB0aGVtZUNoYW5nZWQodGhpcyk7CiAg
ICAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKQogICAgICAgdGhpcy5kaXNwbGF5LndyYXBwZXIu
Y2xhc3NOYW1lICs9ICIgQ29kZU1pcnJvci13cmFwIjsKLSAgICBpZiAob3B0aW9ucy5hdXRvZm9j
dXMgJiYgIW1vYmlsZSkgZm9jdXNJbnB1dCh0aGlzKTsKKyAgICBpZiAob3B0aW9ucy5hdXRvZm9j
dXMgJiYgIW1vYmlsZSkgZGlzcGxheS5pbnB1dC5mb2N1cygpOworICAgIGluaXRTY3JvbGxiYXJz
KHRoaXMpOwogCiAgICAgdGhpcy5zdGF0ZSA9IHsKICAgICAgIGtleU1hcHM6IFtdLCAgLy8gc3Rv
cmVzIG1hcHMgYWRkZWQgYnkgYWRkS2V5TWFwCiAgICAgICBvdmVybGF5czogW10sIC8vIGhpZ2hs
aWdodGluZyBvdmVybGF5cywgYXMgYWRkZWQgYnkgYWRkT3ZlcmxheQogICAgICAgbW9kZUdlbjog
MCwgICAvLyBidW1wZWQgd2hlbiBtb2RlL292ZXJsYXkgY2hhbmdlcywgdXNlZCB0byBpbnZhbGlk
YXRlIGhpZ2hsaWdodGluZyBpbmZvCi0gICAgICBvdmVyd3JpdGU6IGZhbHNlLCBmb2N1c2VkOiBm
YWxzZSwKKyAgICAgIG92ZXJ3cml0ZTogZmFsc2UsCisgICAgICBkZWxheWluZ0JsdXJFdmVudDog
ZmFsc2UsCisgICAgICBmb2N1c2VkOiBmYWxzZSwKICAgICAgIHN1cHByZXNzRWRpdHM6IGZhbHNl
LCAvLyB1c2VkIHRvIGRpc2FibGUgZWRpdGluZyBkdXJpbmcga2V5IGhhbmRsZXJzIHdoZW4gaW4g
cmVhZE9ubHkgbW9kZQotICAgICAgcGFzdGVJbmNvbWluZzogZmFsc2UsIGN1dEluY29taW5nOiBm
YWxzZSwgLy8gaGVscCByZWNvZ25pemUgcGFzdGUvY3V0IGVkaXRzIGluIHJlYWRJbnB1dAorICAg
ICAgcGFzdGVJbmNvbWluZzogZmFsc2UsIGN1dEluY29taW5nOiBmYWxzZSwgLy8gaGVscCByZWNv
Z25pemUgcGFzdGUvY3V0IGVkaXRzIGluIGlucHV0LnBvbGwKKyAgICAgIHNlbGVjdGluZ1RleHQ6
IGZhbHNlLAogICAgICAgZHJhZ2dpbmdUZXh0OiBmYWxzZSwKLSAgICAgIGhpZ2hsaWdodDogbmV3
IERlbGF5ZWQoKSAvLyBzdG9yZXMgaGlnaGxpZ2h0IHdvcmtlciB0aW1lb3V0CisgICAgICBoaWdo
bGlnaHQ6IG5ldyBEZWxheWVkKCksIC8vIHN0b3JlcyBoaWdobGlnaHQgd29ya2VyIHRpbWVvdXQK
KyAgICAgIGtleVNlcTogbnVsbCwgIC8vIFVuZmluaXNoZWQga2V5IHNlcXVlbmNlCisgICAgICBz
cGVjaWFsQ2hhcnM6IG51bGwKICAgICB9OwogCisgICAgdmFyIGNtID0gdGhpczsKKwogICAgIC8v
IE92ZXJyaWRlIG1hZ2ljIHRleHRhcmVhIGNvbnRlbnQgcmVzdG9yZSB0aGF0IElFIHNvbWV0aW1l
cyBkb2VzCiAgICAgLy8gb24gb3VyIGhpZGRlbiB0ZXh0YXJlYSBvbiByZWxvYWQKLSAgICBpZiAo
aWVfdXB0bzEwKSBzZXRUaW1lb3V0KGJpbmQocmVzZXRJbnB1dCwgdGhpcywgdHJ1ZSksIDIwKTsK
KyAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDExKSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBj
bS5kaXNwbGF5LmlucHV0LnJlc2V0KHRydWUpOyB9LCAyMCk7CiAKICAgICByZWdpc3RlckV2ZW50
SGFuZGxlcnModGhpcyk7CiAgICAgZW5zdXJlR2xvYmFsSGFuZGxlcnMoKTsKIAotICAgIHZhciBj
bSA9IHRoaXM7Ci0gICAgcnVuSW5PcCh0aGlzLCBmdW5jdGlvbigpIHsKLSAgICAgIGNtLmN1ck9w
LmZvcmNlVXBkYXRlID0gdHJ1ZTsKLSAgICAgIGF0dGFjaERvYyhjbSwgZG9jKTsKKyAgICBzdGFy
dE9wZXJhdGlvbih0aGlzKTsKKyAgICB0aGlzLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTsKKyAg
ICBhdHRhY2hEb2ModGhpcywgZG9jKTsKIAotICAgICAgaWYgKChvcHRpb25zLmF1dG9mb2N1cyAm
JiAhbW9iaWxlKSB8fCBhY3RpdmVFbHQoKSA9PSBkaXNwbGF5LmlucHV0KQotICAgICAgICBzZXRU
aW1lb3V0KGJpbmQob25Gb2N1cywgY20pLCAyMCk7Ci0gICAgICBlbHNlCi0gICAgICAgIG9uQmx1
cihjbSk7CisgICAgaWYgKChvcHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxlKSB8fCBjbS5oYXNG
b2N1cygpKQorICAgICAgc2V0VGltZW91dChiaW5kKG9uRm9jdXMsIHRoaXMpLCAyMCk7CisgICAg
ZWxzZQorICAgICAgb25CbHVyKHRoaXMpOwogCi0gICAgICBmb3IgKHZhciBvcHQgaW4gb3B0aW9u
SGFuZGxlcnMpIGlmIChvcHRpb25IYW5kbGVycy5oYXNPd25Qcm9wZXJ0eShvcHQpKQotICAgICAg
ICBvcHRpb25IYW5kbGVyc1tvcHRdKGNtLCBvcHRpb25zW29wdF0sIEluaXQpOwotICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBpbml0SG9va3MubGVuZ3RoOyArK2kpIGluaXRIb29rc1tpXShjbSk7
Ci0gICAgfSk7CisgICAgZm9yICh2YXIgb3B0IGluIG9wdGlvbkhhbmRsZXJzKSBpZiAob3B0aW9u
SGFuZGxlcnMuaGFzT3duUHJvcGVydHkob3B0KSkKKyAgICAgIG9wdGlvbkhhbmRsZXJzW29wdF0o
dGhpcywgb3B0aW9uc1tvcHRdLCBJbml0KTsKKyAgICBtYXliZVVwZGF0ZUxpbmVOdW1iZXJXaWR0
aCh0aGlzKTsKKyAgICBpZiAob3B0aW9ucy5maW5pc2hJbml0KSBvcHRpb25zLmZpbmlzaEluaXQo
dGhpcyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0SG9va3MubGVuZ3RoOyArK2kpIGlu
aXRIb29rc1tpXSh0aGlzKTsKKyAgICBlbmRPcGVyYXRpb24odGhpcyk7CisgICAgLy8gU3VwcHJl
c3Mgb3B0aW1pemVsZWdpYmlsaXR5IGluIFdlYmtpdCwgc2luY2UgaXQgYnJlYWtzIHRleHQKKyAg
ICAvLyBtZWFzdXJpbmcgb24gbGluZSB3cmFwcGluZyBib3VuZGFyaWVzLgorICAgIGlmICh3ZWJr
aXQgJiYgb3B0aW9ucy5saW5lV3JhcHBpbmcgJiYKKyAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShk
aXNwbGF5LmxpbmVEaXYpLnRleHRSZW5kZXJpbmcgPT0gIm9wdGltaXplbGVnaWJpbGl0eSIpCisg
ICAgICBkaXNwbGF5LmxpbmVEaXYuc3R5bGUudGV4dFJlbmRlcmluZyA9ICJhdXRvIjsKICAgfQog
CiAgIC8vIERJU1BMQVkgQ09OU1RSVUNUT1IKQEAgLTEyMCwzMiArMTMxLDE3IEBACiAgIC8vIGFu
ZCBjb250ZW50IGRyYXdpbmcuIEl0IGhvbGRzIHJlZmVyZW5jZXMgdG8gRE9NIG5vZGVzIGFuZAog
ICAvLyBkaXNwbGF5LXJlbGF0ZWQgc3RhdGUuCiAKLSAgZnVuY3Rpb24gRGlzcGxheShwbGFjZSwg
ZG9jKSB7CisgIGZ1bmN0aW9uIERpc3BsYXkocGxhY2UsIGRvYywgaW5wdXQpIHsKICAgICB2YXIg
ZCA9IHRoaXM7CisgICAgdGhpcy5pbnB1dCA9IGlucHV0OwogCi0gICAgLy8gVGhlIHNlbWloaWRk
ZW4gdGV4dGFyZWEgdGhhdCBpcyBmb2N1c2VkIHdoZW4gdGhlIGVkaXRvciBpcwotICAgIC8vIGZv
Y3VzZWQsIGFuZCByZWNlaXZlcyBpbnB1dC4KLSAgICB2YXIgaW5wdXQgPSBkLmlucHV0ID0gZWx0
KCJ0ZXh0YXJlYSIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7
IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBvdXRsaW5lOiBub25lIik7Ci0gICAgLy8gVGhlIHRl
eHRhcmVhIGlzIGtlcHQgcG9zaXRpb25lZCBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCB0aGUK
LSAgICAvLyBmYWN0IHRoYXQgaXQnbGwgYmUgc2Nyb2xsZWQgaW50byB2aWV3IG9uIGlucHV0IGZy
b20gc2Nyb2xsaW5nCi0gICAgLy8gb3VyIGZha2UgY3Vyc29yIG91dCBvZiB2aWV3LiBPbiB3ZWJr
aXQsIHdoZW4gd3JhcD1vZmYsIHBhc3RlIGlzCi0gICAgLy8gdmVyeSBzbG93LiBTbyBtYWtlIHRo
ZSBhcmVhIHdpZGUgaW5zdGVhZC4KLSAgICBpZiAod2Via2l0KSBpbnB1dC5zdHlsZS53aWR0aCA9
ICIxMDAwcHgiOwotICAgIGVsc2UgaW5wdXQuc2V0QXR0cmlidXRlKCJ3cmFwIiwgIm9mZiIpOwot
ICAgIC8vIElmIGJvcmRlcjogMDsgLS0gaU9TIGZhaWxzIHRvIG9wZW4ga2V5Ym9hcmQgKGlzc3Vl
ICMxMjg3KQotICAgIGlmIChpb3MpIGlucHV0LnN0eWxlLmJvcmRlciA9ICIxcHggc29saWQgYmxh
Y2siOwotICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiYXV0b2NvcnJlY3QiLCAib2ZmIik7IGlucHV0
LnNldEF0dHJpYnV0ZSgiYXV0b2NhcGl0YWxpemUiLCAib2ZmIik7IGlucHV0LnNldEF0dHJpYnV0
ZSgic3BlbGxjaGVjayIsICJmYWxzZSIpOwotCi0gICAgLy8gV3JhcHMgYW5kIGhpZGVzIGlucHV0
IHRleHRhcmVhCi0gICAgZC5pbnB1dERpdiA9IGVsdCgiZGl2IiwgW2lucHV0XSwgbnVsbCwgIm92
ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAw
cHg7Iik7Ci0gICAgLy8gVGhlIGZha2Ugc2Nyb2xsYmFyIGVsZW1lbnRzLgotICAgIGQuc2Nyb2xs
YmFySCA9IGVsdCgiZGl2IiwgW2VsdCgiZGl2IiwgbnVsbCwgbnVsbCwgImhlaWdodDogMTAwJTsg
bWluLWhlaWdodDogMXB4IildLCAiQ29kZU1pcnJvci1oc2Nyb2xsYmFyIik7Ci0gICAgZC5zY3Jv
bGxiYXJWID0gZWx0KCJkaXYiLCBbZWx0KCJkaXYiLCBudWxsLCBudWxsLCAibWluLXdpZHRoOiAx
cHgiKV0sICJDb2RlTWlycm9yLXZzY3JvbGxiYXIiKTsKICAgICAvLyBDb3ZlcnMgYm90dG9tLXJp
Z2h0IHNxdWFyZSB3aGVuIGJvdGggc2Nyb2xsYmFycyBhcmUgcHJlc2VudC4KICAgICBkLnNjcm9s
bGJhckZpbGxlciA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxl
ciIpOworICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnNldEF0dHJpYnV0ZSgiY20tbm90LWNvbnRlbnQi
LCAidHJ1ZSIpOwogICAgIC8vIENvdmVycyBib3R0b20gb2YgZ3V0dGVyIHdoZW4gY292ZXJHdXR0
ZXJOZXh0VG9TY3JvbGxiYXIgaXMgb24KICAgICAvLyBhbmQgaCBzY3JvbGxiYXIgaXMgcHJlc2Vu
dC4KICAgICBkLmd1dHRlckZpbGxlciA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItZ3V0
dGVyLWZpbGxlciIpOworICAgIGQuZ3V0dGVyRmlsbGVyLnNldEF0dHJpYnV0ZSgiY20tbm90LWNv
bnRlbnQiLCAidHJ1ZSIpOwogICAgIC8vIFdpbGwgY29udGFpbiB0aGUgYWN0dWFsIGNvZGUsIHBv
c2l0aW9uZWQgdG8gY292ZXIgdGhlIHZpZXdwb3J0LgogICAgIGQubGluZURpdiA9IGVsdCgiZGl2
IiwgbnVsbCwgIkNvZGVNaXJyb3ItY29kZSIpOwogICAgIC8vIEVsZW1lbnRzIGFyZSBhZGRlZCB0
byB0aGVzZSB0byByZXByZXNlbnQgc2VsZWN0aW9uIGFuZCBjdXJzb3JzLgpAQCAtMTYyLDEwICsx
NTgsMTEgQEAKICAgICBkLm1vdmVyID0gZWx0KCJkaXYiLCBbZWx0KCJkaXYiLCBbZC5saW5lU3Bh
Y2VdLCAiQ29kZU1pcnJvci1saW5lcyIpXSwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpOwog
ICAgIC8vIFNldCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBkb2N1bWVudCwgYWxsb3dpbmcgc2Nyb2xs
aW5nLgogICAgIGQuc2l6ZXIgPSBlbHQoImRpdiIsIFtkLm1vdmVyXSwgIkNvZGVNaXJyb3Itc2l6
ZXIiKTsKKyAgICBkLnNpemVyV2lkdGggPSBudWxsOwogICAgIC8vIEJlaGF2aW9yIG9mIGVsdHMg
d2l0aCBvdmVyZmxvdzogYXV0byBhbmQgcGFkZGluZyBpcwogICAgIC8vIGluY29uc2lzdGVudCBh
Y3Jvc3MgYnJvd3NlcnMuIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhlCiAgICAgLy8gc2Nyb2xs
YWJsZSBhcmVhIGlzIGJpZyBlbm91Z2guCi0gICAgZC5oZWlnaHRGb3JjZXIgPSBlbHQoImRpdiIs
IG51bGwsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IGhlaWdodDogIiArIHNjcm9sbGVyQ3V0
T2ZmICsgInB4OyB3aWR0aDogMXB4OyIpOworICAgIGQuaGVpZ2h0Rm9yY2VyID0gZWx0KCJkaXYi
LCBudWxsLCBudWxsLCAicG9zaXRpb246IGFic29sdXRlOyBoZWlnaHQ6ICIgKyBzY3JvbGxlckdh
cCArICJweDsgd2lkdGg6IDFweDsiKTsKICAgICAvLyBXaWxsIGNvbnRhaW4gdGhlIGd1dHRlcnMs
IGlmIGFueS4KICAgICBkLmd1dHRlcnMgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1
dHRlcnMiKTsKICAgICBkLmxpbmVHdXR0ZXIgPSBudWxsOwpAQCAtMTczLDU2ICsxNzAsNDQgQEAK
ICAgICBkLnNjcm9sbGVyID0gZWx0KCJkaXYiLCBbZC5zaXplciwgZC5oZWlnaHRGb3JjZXIsIGQu
Z3V0dGVyc10sICJDb2RlTWlycm9yLXNjcm9sbCIpOwogICAgIGQuc2Nyb2xsZXIuc2V0QXR0cmli
dXRlKCJ0YWJJbmRleCIsICItMSIpOwogICAgIC8vIFRoZSBlbGVtZW50IGluIHdoaWNoIHRoZSBl
ZGl0b3IgbGl2ZXMuCi0gICAgZC53cmFwcGVyID0gZWx0KCJkaXYiLCBbZC5pbnB1dERpdiwgZC5z
Y3JvbGxiYXJILCBkLnNjcm9sbGJhclYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5z
Y3JvbGxiYXJGaWxsZXIsIGQuZ3V0dGVyRmlsbGVyLCBkLnNjcm9sbGVyXSwgIkNvZGVNaXJyb3Ii
KTsKKyAgICBkLndyYXBwZXIgPSBlbHQoImRpdiIsIFtkLnNjcm9sbGJhckZpbGxlciwgZC5ndXR0
ZXJGaWxsZXIsIGQuc2Nyb2xsZXJdLCAiQ29kZU1pcnJvciIpOwogCiAgICAgLy8gV29yayBhcm91
bmQgSUU3IHotaW5kZXggYnVnIChub3QgcGVyZmVjdCwgaGVuY2UgSUU3IG5vdCByZWFsbHkgYmVp
bmcgc3VwcG9ydGVkKQotICAgIGlmIChpZV91cHRvNykgeyBkLmd1dHRlcnMuc3R5bGUuekluZGV4
ID0gLTE7IGQuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0ID0gMDsgfQotICAgIC8vIE5lZWRl
ZCB0byBoaWRlIGJpZyBibHVlIGJsaW5raW5nIGN1cnNvciBvbiBNb2JpbGUgU2FmYXJpCi0gICAg
aWYgKGlvcykgaW5wdXQuc3R5bGUud2lkdGggPSAiMHB4IjsKLSAgICBpZiAoIXdlYmtpdCkgZC5z
Y3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlOwotICAgIC8vIE5lZWRlZCB0byBoYW5kbGUgVGFiIGtl
eSBpbiBLSFRNTAotICAgIGlmIChraHRtbCkgeyBkLmlucHV0RGl2LnN0eWxlLmhlaWdodCA9ICIx
cHgiOyBkLmlucHV0RGl2LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsgfQotICAgIC8vIE5l
ZWQgdG8gc2V0IGEgbWluaW11bSB3aWR0aCB0byBzZWUgdGhlIHNjcm9sbGJhciBvbiBJRTcgKGJ1
dCBtdXN0IG5vdCBzZXQgaXQgb24gSUU4KS4KLSAgICBpZiAoaWVfdXB0bzcpIGQuc2Nyb2xsYmFy
SC5zdHlsZS5taW5IZWlnaHQgPSBkLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGggPSAiMThweCI7
CisgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA4KSB7IGQuZ3V0dGVycy5zdHlsZS56SW5kZXgg
PSAtMTsgZC5zY3JvbGxlci5zdHlsZS5wYWRkaW5nUmlnaHQgPSAwOyB9CisgICAgaWYgKCF3ZWJr
aXQgJiYgIShnZWNrbyAmJiBtb2JpbGUpKSBkLnNjcm9sbGVyLmRyYWdnYWJsZSA9IHRydWU7CiAK
LSAgICBpZiAocGxhY2UuYXBwZW5kQ2hpbGQpIHBsYWNlLmFwcGVuZENoaWxkKGQud3JhcHBlcik7
Ci0gICAgZWxzZSBwbGFjZShkLndyYXBwZXIpOworICAgIGlmIChwbGFjZSkgeworICAgICAgaWYg
KHBsYWNlLmFwcGVuZENoaWxkKSBwbGFjZS5hcHBlbmRDaGlsZChkLndyYXBwZXIpOworICAgICAg
ZWxzZSBwbGFjZShkLndyYXBwZXIpOworICAgIH0KIAogICAgIC8vIEN1cnJlbnQgcmVuZGVyZWQg
cmFuZ2UgKG1heSBiZSBiaWdnZXIgdGhhbiB0aGUgdmlldyB3aW5kb3cpLgogICAgIGQudmlld0Zy
b20gPSBkLnZpZXdUbyA9IGRvYy5maXJzdDsKKyAgICBkLnJlcG9ydGVkVmlld0Zyb20gPSBkLnJl
cG9ydGVkVmlld1RvID0gZG9jLmZpcnN0OwogICAgIC8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSBy
ZW5kZXJlZCBsaW5lcy4KICAgICBkLnZpZXcgPSBbXTsKKyAgICBkLnJlbmRlcmVkVmlldyA9IG51
bGw7CiAgICAgLy8gSG9sZHMgaW5mbyBhYm91dCBhIHNpbmdsZSByZW5kZXJlZCBsaW5lIHdoZW4g
aXQgd2FzIHJlbmRlcmVkCiAgICAgLy8gZm9yIG1lYXN1cmVtZW50LCB3aGlsZSBub3QgaW4gdmll
dy4KICAgICBkLmV4dGVybmFsTWVhc3VyZWQgPSBudWxsOwogICAgIC8vIEVtcHR5IHNwYWNlIChp
biBwaXhlbHMpIGFib3ZlIHRoZSB2aWV3CiAgICAgZC52aWV3T2Zmc2V0ID0gMDsKLSAgICBkLmxh
c3RTaXplQyA9IDA7CisgICAgZC5sYXN0V3JhcEhlaWdodCA9IGQubGFzdFdyYXBXaWR0aCA9IDA7
CiAgICAgZC51cGRhdGVMaW5lTnVtYmVycyA9IG51bGw7CiAKKyAgICBkLm5hdGl2ZUJhcldpZHRo
ID0gZC5iYXJIZWlnaHQgPSBkLmJhcldpZHRoID0gMDsKKyAgICBkLnNjcm9sbGJhcnNDbGlwcGVk
ID0gZmFsc2U7CisKICAgICAvLyBVc2VkIHRvIG9ubHkgcmVzaXplIHRoZSBsaW5lIG51bWJlciBn
dXR0ZXIgd2hlbiBuZWNlc3NhcnkgKHdoZW4KICAgICAvLyB0aGUgYW1vdW50IG9mIGxpbmVzIGNy
b3NzZXMgYSBib3VuZGFyeSB0aGF0IG1ha2VzIGl0cyB3aWR0aCBjaGFuZ2UpCiAgICAgZC5saW5l
TnVtV2lkdGggPSBkLmxpbmVOdW1Jbm5lcldpZHRoID0gZC5saW5lTnVtQ2hhcnMgPSBudWxsOwot
ICAgIC8vIFNlZSByZWFkSW5wdXQgYW5kIHJlc2V0SW5wdXQKLSAgICBkLnByZXZJbnB1dCA9ICIi
OwogICAgIC8vIFNldCB0byB0cnVlIHdoZW4gYSBub24taG9yaXpvbnRhbC1zY3JvbGxpbmcgbGlu
ZSB3aWRnZXQgaXMKICAgICAvLyBhZGRlZC4gQXMgYW4gb3B0aW1pemF0aW9uLCBsaW5lIHdpZGdl
dCBhbGlnbmluZyBpcyBza2lwcGVkIHdoZW4KICAgICAvLyB0aGlzIGlzIGZhbHNlLgogICAgIGQu
YWxpZ25XaWRnZXRzID0gZmFsc2U7Ci0gICAgLy8gRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVy
IHdlIGV4cGVjdCBpbnB1dCB0byBhcHBlYXIgcmVhbCBzb29uCi0gICAgLy8gbm93IChhZnRlciBz
b21lIGV2ZW50IGxpa2UgJ2tleXByZXNzJyBvciAnaW5wdXQnKSBhbmQgYXJlCi0gICAgLy8gcG9s
bGluZyBpbnRlbnNpdmVseS4KLSAgICBkLnBvbGxpbmdGYXN0ID0gZmFsc2U7Ci0gICAgLy8gU2Vs
Zi1yZXNldHRpbmcgdGltZW91dCBmb3IgdGhlIHBvbGxlcgotICAgIGQucG9sbCA9IG5ldyBEZWxh
eWVkKCk7CiAKICAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IGQu
Y2FjaGVkUGFkZGluZ0ggPSBudWxsOwogCi0gICAgLy8gVHJhY2tzIHdoZW4gcmVzZXRJbnB1dCBo
YXMgcHVudGVkIHRvIGp1c3QgcHV0dGluZyBhIHNob3J0Ci0gICAgLy8gc3RyaW5nIGludG8gdGhl
IHRleHRhcmVhIGluc3RlYWQgb2YgdGhlIGZ1bGwgc2VsZWN0aW9uLgotICAgIGQuaW5hY2N1cmF0
ZVNlbGVjdGlvbiA9IGZhbHNlOwotCiAgICAgLy8gVHJhY2tzIHRoZSBtYXhpbXVtIGxpbmUgbGVu
Z3RoIHNvIHRoYXQgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyCiAgICAgLy8gY2FuIGJlIGtlcHQg
c3RhdGljIHdoZW4gc2Nyb2xsaW5nLgogICAgIGQubWF4TGluZSA9IG51bGw7CkBAIC0yMzgsNiAr
MjIzLDEwIEBACiAgICAgLy8gVXNlZCB0byB0cmFjayB3aGV0aGVyIGFueXRoaW5nIGhhcHBlbmVk
IHNpbmNlIHRoZSBjb250ZXh0IG1lbnUKICAgICAvLyB3YXMgb3BlbmVkLgogICAgIGQuc2VsRm9y
Q29udGV4dE1lbnUgPSBudWxsOworCisgICAgZC5hY3RpdmVUb3VjaCA9IG51bGw7CisKKyAgICBp
bnB1dC5pbml0KGQpOwogICB9CiAKICAgLy8gU1RBVEUgVVBEQVRFUwpAQCAtMjY0LDYgKzI1Myw3
IEBACiAgICAgaWYgKGNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7CiAgICAgICBhZGRDbGFzcyhj
bS5kaXNwbGF5LndyYXBwZXIsICJDb2RlTWlycm9yLXdyYXAiKTsKICAgICAgIGNtLmRpc3BsYXku
c2l6ZXIuc3R5bGUubWluV2lkdGggPSAiIjsKKyAgICAgIGNtLmRpc3BsYXkuc2l6ZXJXaWR0aCA9
IG51bGw7CiAgICAgfSBlbHNlIHsKICAgICAgIHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCAi
Q29kZU1pcnJvci13cmFwIik7CiAgICAgICBmaW5kTWF4TGluZShjbSk7CkBAIC0zMDMsMTIgKzI5
Myw2IEBACiAgICAgfSk7CiAgIH0KIAotICBmdW5jdGlvbiBrZXlNYXBDaGFuZ2VkKGNtKSB7Ci0g
ICAgdmFyIG1hcCA9IGtleU1hcFtjbS5vcHRpb25zLmtleU1hcF0sIHN0eWxlID0gbWFwLnN0eWxl
OwotICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgPSBjbS5kaXNwbGF5LndyYXBwZXIu
Y2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLWtleW1hcC1cUysvZywgIiIpICsKLSAgICAgIChzdHls
ZSA/ICIgY20ta2V5bWFwLSIgKyBzdHlsZSA6ICIiKTsKLSAgfQotCiAgIGZ1bmN0aW9uIHRoZW1l
Q2hhbmdlZChjbSkgewogICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgPSBjbS5kaXNw
bGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLXMtXFMrL2csICIiKSArCiAgICAg
ICBjbS5vcHRpb25zLnRoZW1lLnJlcGxhY2UoLyhefFxzKVxzKi9nLCAiIGNtLXMtIik7CkBAIC0z
NDEsNyArMzI1LDYgQEAKICAgZnVuY3Rpb24gdXBkYXRlR3V0dGVyU3BhY2UoY20pIHsKICAgICB2
YXIgd2lkdGggPSBjbS5kaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7CiAgICAgY20uZGlzcGxh
eS5zaXplci5zdHlsZS5tYXJnaW5MZWZ0ID0gd2lkdGggKyAicHgiOwotICAgIGNtLmRpc3BsYXku
c2Nyb2xsYmFySC5zdHlsZS5sZWZ0ID0gY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IHdpZHRoICsg
InB4IiA6IDA7CiAgIH0KIAogICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoIG9mIGEg
bGluZSwgdGFraW5nIGludG8gYWNjb3VudApAQCAtMzk3LDg3ICszODAsMTg2IEBACiAgIC8vIFBy
ZXBhcmUgRE9NIHJlYWRzIG5lZWRlZCB0byB1cGRhdGUgdGhlIHNjcm9sbGJhcnMuIERvbmUgaW4g
b25lCiAgIC8vIHNob3QgdG8gbWluaW1pemUgdXBkYXRlL21lYXN1cmUgcm91bmR0cmlwcy4KICAg
ZnVuY3Rpb24gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pIHsKLSAgICB2YXIgc2Nyb2xsID0gY20u
ZGlzcGxheS5zY3JvbGxlcjsKKyAgICB2YXIgZCA9IGNtLmRpc3BsYXksIGd1dHRlclcgPSBkLmd1
dHRlcnMub2Zmc2V0V2lkdGg7CisgICAgdmFyIGRvY0ggPSBNYXRoLnJvdW5kKGNtLmRvYy5oZWln
aHQgKyBwYWRkaW5nVmVydChjbS5kaXNwbGF5KSk7CiAgICAgcmV0dXJuIHsKLSAgICAgIGNsaWVu
dEhlaWdodDogc2Nyb2xsLmNsaWVudEhlaWdodCwKLSAgICAgIGJhckhlaWdodDogY20uZGlzcGxh
eS5zY3JvbGxiYXJWLmNsaWVudEhlaWdodCwKLSAgICAgIHNjcm9sbFdpZHRoOiBzY3JvbGwuc2Ny
b2xsV2lkdGgsIGNsaWVudFdpZHRoOiBzY3JvbGwuY2xpZW50V2lkdGgsCi0gICAgICBiYXJXaWR0
aDogY20uZGlzcGxheS5zY3JvbGxiYXJILmNsaWVudFdpZHRoLAotICAgICAgZG9jSGVpZ2h0OiBN
YXRoLnJvdW5kKGNtLmRvYy5oZWlnaHQgKyBwYWRkaW5nVmVydChjbS5kaXNwbGF5KSkKKyAgICAg
IGNsaWVudEhlaWdodDogZC5zY3JvbGxlci5jbGllbnRIZWlnaHQsCisgICAgICB2aWV3SGVpZ2h0
OiBkLndyYXBwZXIuY2xpZW50SGVpZ2h0LAorICAgICAgc2Nyb2xsV2lkdGg6IGQuc2Nyb2xsZXIu
c2Nyb2xsV2lkdGgsIGNsaWVudFdpZHRoOiBkLnNjcm9sbGVyLmNsaWVudFdpZHRoLAorICAgICAg
dmlld1dpZHRoOiBkLndyYXBwZXIuY2xpZW50V2lkdGgsCisgICAgICBiYXJMZWZ0OiBjbS5vcHRp
b25zLmZpeGVkR3V0dGVyID8gZ3V0dGVyVyA6IDAsCisgICAgICBkb2NIZWlnaHQ6IGRvY0gsCisg
ICAgICBzY3JvbGxIZWlnaHQ6IGRvY0ggKyBzY3JvbGxHYXAoY20pICsgZC5iYXJIZWlnaHQsCisg
ICAgICBuYXRpdmVCYXJXaWR0aDogZC5uYXRpdmVCYXJXaWR0aCwKKyAgICAgIGd1dHRlcldpZHRo
OiBndXR0ZXJXCiAgICAgfTsKICAgfQogCi0gIC8vIFJlLXN5bmNocm9uaXplIHRoZSBmYWtlIHNj
cm9sbGJhcnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlCi0gIC8vIGNvbnRlbnQuCisgIGZ1
bmN0aW9uIE5hdGl2ZVNjcm9sbGJhcnMocGxhY2UsIHNjcm9sbCwgY20pIHsKKyAgICB0aGlzLmNt
ID0gY207CisgICAgdmFyIHZlcnQgPSB0aGlzLnZlcnQgPSBlbHQoImRpdiIsIFtlbHQoImRpdiIs
IG51bGwsIG51bGwsICJtaW4td2lkdGg6IDFweCIpXSwgIkNvZGVNaXJyb3ItdnNjcm9sbGJhciIp
OworICAgIHZhciBob3JpeiA9IHRoaXMuaG9yaXogPSBlbHQoImRpdiIsIFtlbHQoImRpdiIsIG51
bGwsIG51bGwsICJoZWlnaHQ6IDEwMCU7IG1pbi1oZWlnaHQ6IDFweCIpXSwgIkNvZGVNaXJyb3It
aHNjcm9sbGJhciIpOworICAgIHBsYWNlKHZlcnQpOyBwbGFjZShob3Jpeik7CisKKyAgICBvbih2
ZXJ0LCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7CisgICAgICBpZiAodmVydC5jbGllbnRIZWlnaHQp
IHNjcm9sbCh2ZXJ0LnNjcm9sbFRvcCwgInZlcnRpY2FsIik7CisgICAgfSk7CisgICAgb24oaG9y
aXosICJzY3JvbGwiLCBmdW5jdGlvbigpIHsKKyAgICAgIGlmIChob3Jpei5jbGllbnRXaWR0aCkg
c2Nyb2xsKGhvcml6LnNjcm9sbExlZnQsICJob3Jpem9udGFsIik7CisgICAgfSk7CisKKyAgICB0
aGlzLmNoZWNrZWRPdmVybGF5ID0gZmFsc2U7CisgICAgLy8gTmVlZCB0byBzZXQgYSBtaW5pbXVt
IHdpZHRoIHRvIHNlZSB0aGUgc2Nyb2xsYmFyIG9uIElFNyAoYnV0IG11c3Qgbm90IHNldCBpdCBv
biBJRTgpLgorICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgdGhpcy5ob3Jpei5zdHlsZS5t
aW5IZWlnaHQgPSB0aGlzLnZlcnQuc3R5bGUubWluV2lkdGggPSAiMThweCI7CisgIH0KKworICBO
YXRpdmVTY3JvbGxiYXJzLnByb3RvdHlwZSA9IGNvcHlPYmooeworICAgIHVwZGF0ZTogZnVuY3Rp
b24obWVhc3VyZSkgeworICAgICAgdmFyIG5lZWRzSCA9IG1lYXN1cmUuc2Nyb2xsV2lkdGggPiBt
ZWFzdXJlLmNsaWVudFdpZHRoICsgMTsKKyAgICAgIHZhciBuZWVkc1YgPSBtZWFzdXJlLnNjcm9s
bEhlaWdodCA+IG1lYXN1cmUuY2xpZW50SGVpZ2h0ICsgMTsKKyAgICAgIHZhciBzV2lkdGggPSBt
ZWFzdXJlLm5hdGl2ZUJhcldpZHRoOworCisgICAgICBpZiAobmVlZHNWKSB7CisgICAgICAgIHRo
aXMudmVydC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICAgICAgdGhpcy52ZXJ0LnN0eWxl
LmJvdHRvbSA9IG5lZWRzSCA/IHNXaWR0aCArICJweCIgOiAiMCI7CisgICAgICAgIHZhciB0b3Rh
bEhlaWdodCA9IG1lYXN1cmUudmlld0hlaWdodCAtIChuZWVkc0ggPyBzV2lkdGggOiAwKTsKKyAg
ICAgICAgLy8gQSBidWcgaW4gSUU4IGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIG5lZ2F0aXZl
LCBzbyBndWFyZCBpdC4KKyAgICAgICAgdGhpcy52ZXJ0LmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0
ID0KKyAgICAgICAgICBNYXRoLm1heCgwLCBtZWFzdXJlLnNjcm9sbEhlaWdodCAtIG1lYXN1cmUu
Y2xpZW50SGVpZ2h0ICsgdG90YWxIZWlnaHQpICsgInB4IjsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIHRoaXMudmVydC5zdHlsZS5kaXNwbGF5ID0gIiI7CisgICAgICAgIHRoaXMudmVydC5maXJz
dENoaWxkLnN0eWxlLmhlaWdodCA9ICIwIjsKKyAgICAgIH0KKworICAgICAgaWYgKG5lZWRzSCkg
eworICAgICAgICB0aGlzLmhvcml6LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICAgICAgICB0
aGlzLmhvcml6LnN0eWxlLnJpZ2h0ID0gbmVlZHNWID8gc1dpZHRoICsgInB4IiA6ICIwIjsKKyAg
ICAgICAgdGhpcy5ob3Jpei5zdHlsZS5sZWZ0ID0gbWVhc3VyZS5iYXJMZWZ0ICsgInB4IjsKKyAg
ICAgICAgdmFyIHRvdGFsV2lkdGggPSBtZWFzdXJlLnZpZXdXaWR0aCAtIG1lYXN1cmUuYmFyTGVm
dCAtIChuZWVkc1YgPyBzV2lkdGggOiAwKTsKKyAgICAgICAgdGhpcy5ob3Jpei5maXJzdENoaWxk
LnN0eWxlLndpZHRoID0KKyAgICAgICAgICAobWVhc3VyZS5zY3JvbGxXaWR0aCAtIG1lYXN1cmUu
Y2xpZW50V2lkdGggKyB0b3RhbFdpZHRoKSArICJweCI7CisgICAgICB9IGVsc2UgeworICAgICAg
ICB0aGlzLmhvcml6LnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgICAgdGhpcy5ob3Jpei5maXJz
dENoaWxkLnN0eWxlLndpZHRoID0gIjAiOworICAgICAgfQorCisgICAgICBpZiAoIXRoaXMuY2hl
Y2tlZE92ZXJsYXkgJiYgbWVhc3VyZS5jbGllbnRIZWlnaHQgPiAwKSB7CisgICAgICAgIGlmIChz
V2lkdGggPT0gMCkgdGhpcy5vdmVybGF5SGFjaygpOworICAgICAgICB0aGlzLmNoZWNrZWRPdmVy
bGF5ID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHtyaWdodDogbmVlZHNWID8gc1dp
ZHRoIDogMCwgYm90dG9tOiBuZWVkc0ggPyBzV2lkdGggOiAwfTsKKyAgICB9LAorICAgIHNldFNj
cm9sbExlZnQ6IGZ1bmN0aW9uKHBvcykgeworICAgICAgaWYgKHRoaXMuaG9yaXouc2Nyb2xsTGVm
dCAhPSBwb3MpIHRoaXMuaG9yaXouc2Nyb2xsTGVmdCA9IHBvczsKKyAgICB9LAorICAgIHNldFNj
cm9sbFRvcDogZnVuY3Rpb24ocG9zKSB7CisgICAgICBpZiAodGhpcy52ZXJ0LnNjcm9sbFRvcCAh
PSBwb3MpIHRoaXMudmVydC5zY3JvbGxUb3AgPSBwb3M7CisgICAgfSwKKyAgICBvdmVybGF5SGFj
azogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgdyA9IG1hYyAmJiAhbWFjX2dlTW91bnRhaW5MaW9u
ID8gIjEycHgiIDogIjE4cHgiOworICAgICAgdGhpcy5ob3Jpei5zdHlsZS5taW5IZWlnaHQgPSB0
aGlzLnZlcnQuc3R5bGUubWluV2lkdGggPSB3OworICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAg
ICAgdmFyIGJhck1vdXNlRG93biA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKGVfdGFyZ2V0
KGUpICE9IHNlbGYudmVydCAmJiBlX3RhcmdldChlKSAhPSBzZWxmLmhvcml6KQorICAgICAgICAg
IG9wZXJhdGlvbihzZWxmLmNtLCBvbk1vdXNlRG93bikoZSk7CisgICAgICB9OworICAgICAgb24o
dGhpcy52ZXJ0LCAibW91c2Vkb3duIiwgYmFyTW91c2VEb3duKTsKKyAgICAgIG9uKHRoaXMuaG9y
aXosICJtb3VzZWRvd24iLCBiYXJNb3VzZURvd24pOworICAgIH0sCisgICAgY2xlYXI6IGZ1bmN0
aW9uKCkgeworICAgICAgdmFyIHBhcmVudCA9IHRoaXMuaG9yaXoucGFyZW50Tm9kZTsKKyAgICAg
IHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmhvcml6KTsKKyAgICAgIHBhcmVudC5yZW1vdmVDaGls
ZCh0aGlzLnZlcnQpOworICAgIH0KKyAgfSwgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUpOwor
CisgIGZ1bmN0aW9uIE51bGxTY3JvbGxiYXJzKCkge30KKworICBOdWxsU2Nyb2xsYmFycy5wcm90
b3R5cGUgPSBjb3B5T2JqKHsKKyAgICB1cGRhdGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4ge2JvdHRv
bTogMCwgcmlnaHQ6IDB9OyB9LAorICAgIHNldFNjcm9sbExlZnQ6IGZ1bmN0aW9uKCkge30sCisg
ICAgc2V0U2Nyb2xsVG9wOiBmdW5jdGlvbigpIHt9LAorICAgIGNsZWFyOiBmdW5jdGlvbigpIHt9
CisgIH0sIE51bGxTY3JvbGxiYXJzLnByb3RvdHlwZSk7CisKKyAgQ29kZU1pcnJvci5zY3JvbGxi
YXJNb2RlbCA9IHsibmF0aXZlIjogTmF0aXZlU2Nyb2xsYmFycywgIm51bGwiOiBOdWxsU2Nyb2xs
YmFyc307CisKKyAgZnVuY3Rpb24gaW5pdFNjcm9sbGJhcnMoY20pIHsKKyAgICBpZiAoY20uZGlz
cGxheS5zY3JvbGxiYXJzKSB7CisgICAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuY2xlYXIoKTsK
KyAgICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpCisgICAgICAgIHJtQ2xh
c3MoY20uZGlzcGxheS53cmFwcGVyLCBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpOwor
ICAgIH0KKworICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFycyA9IG5ldyBDb2RlTWlycm9yLnNjcm9s
bGJhck1vZGVsW2NtLm9wdGlvbnMuc2Nyb2xsYmFyU3R5bGVdKGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgIGNtLmRpc3BsYXkud3JhcHBlci5pbnNlcnRCZWZvcmUobm9kZSwgY20uZGlzcGxheS5zY3Jv
bGxiYXJGaWxsZXIpOworICAgICAgLy8gUHJldmVudCBjbGlja3MgaW4gdGhlIHNjcm9sbGJhcnMg
ZnJvbSBraWxsaW5nIGZvY3VzCisgICAgICBvbihub2RlLCAibW91c2Vkb3duIiwgZnVuY3Rpb24o
KSB7CisgICAgICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkKSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
eyBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7IH0sIDApOworICAgICAgfSk7CisgICAgICBub2Rl
LnNldEF0dHJpYnV0ZSgiY20tbm90LWNvbnRlbnQiLCAidHJ1ZSIpOworICAgIH0sIGZ1bmN0aW9u
KHBvcywgYXhpcykgeworICAgICAgaWYgKGF4aXMgPT0gImhvcml6b250YWwiKSBzZXRTY3JvbGxM
ZWZ0KGNtLCBwb3MpOworICAgICAgZWxzZSBzZXRTY3JvbGxUb3AoY20sIHBvcyk7CisgICAgfSwg
Y20pOworICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpCisgICAgICBhZGRD
bGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyk7
CisgIH0KKwogICBmdW5jdGlvbiB1cGRhdGVTY3JvbGxiYXJzKGNtLCBtZWFzdXJlKSB7CiAgICAg
aWYgKCFtZWFzdXJlKSBtZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pOwotICAgIHZh
ciBkID0gY20uZGlzcGxheTsKLSAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gbWVhc3VyZS5kb2NIZWln
aHQgKyBzY3JvbGxlckN1dE9mZjsKLSAgICB2YXIgbmVlZHNIID0gbWVhc3VyZS5zY3JvbGxXaWR0
aCA+IG1lYXN1cmUuY2xpZW50V2lkdGg7Ci0gICAgdmFyIG5lZWRzViA9IHNjcm9sbEhlaWdodCA+
IG1lYXN1cmUuY2xpZW50SGVpZ2h0OwotICAgIGlmIChuZWVkc1YpIHsKLSAgICAgIGQuc2Nyb2xs
YmFyVi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICAgIGQuc2Nyb2xsYmFyVi5zdHlsZS5i
b3R0b20gPSBuZWVkc0ggPyBzY3JvbGxiYXJXaWR0aChkLm1lYXN1cmUpICsgInB4IiA6ICIwIjsK
LSAgICAgIC8vIEEgYnVnIGluIElFOCBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBuZWdhdGl2
ZSwgc28gZ3VhcmQgaXQuCi0gICAgICBkLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWln
aHQgPQotICAgICAgICBNYXRoLm1heCgwLCBzY3JvbGxIZWlnaHQgLSBtZWFzdXJlLmNsaWVudEhl
aWdodCArIChtZWFzdXJlLmJhckhlaWdodCB8fCBkLnNjcm9sbGJhclYuY2xpZW50SGVpZ2h0KSkg
KyAicHgiOwotICAgIH0gZWxzZSB7Ci0gICAgICBkLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheSA9
ICIiOwotICAgICAgZC5zY3JvbGxiYXJWLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0ID0gIjAiOwot
ICAgIH0KLSAgICBpZiAobmVlZHNIKSB7Ci0gICAgICBkLnNjcm9sbGJhckguc3R5bGUuZGlzcGxh
eSA9ICJibG9jayI7Ci0gICAgICBkLnNjcm9sbGJhckguc3R5bGUucmlnaHQgPSBuZWVkc1YgPyBz
Y3JvbGxiYXJXaWR0aChkLm1lYXN1cmUpICsgInB4IiA6ICIwIjsKLSAgICAgIGQuc2Nyb2xsYmFy
SC5maXJzdENoaWxkLnN0eWxlLndpZHRoID0KLSAgICAgICAgKG1lYXN1cmUuc2Nyb2xsV2lkdGgg
LSBtZWFzdXJlLmNsaWVudFdpZHRoICsgKG1lYXN1cmUuYmFyV2lkdGggfHwgZC5zY3JvbGxiYXJI
LmNsaWVudFdpZHRoKSkgKyAicHgiOwotICAgIH0gZWxzZSB7Ci0gICAgICBkLnNjcm9sbGJhckgu
c3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgZC5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUu
d2lkdGggPSAiMCI7CisgICAgdmFyIHN0YXJ0V2lkdGggPSBjbS5kaXNwbGF5LmJhcldpZHRoLCBz
dGFydEhlaWdodCA9IGNtLmRpc3BsYXkuYmFySGVpZ2h0OworICAgIHVwZGF0ZVNjcm9sbGJhcnNJ
bm5lcihjbSwgbWVhc3VyZSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0ICYmIHN0YXJ0V2lk
dGggIT0gY20uZGlzcGxheS5iYXJXaWR0aCB8fCBzdGFydEhlaWdodCAhPSBjbS5kaXNwbGF5LmJh
ckhlaWdodDsgaSsrKSB7CisgICAgICBpZiAoc3RhcnRXaWR0aCAhPSBjbS5kaXNwbGF5LmJhcldp
ZHRoICYmIGNtLm9wdGlvbnMubGluZVdyYXBwaW5nKQorICAgICAgICB1cGRhdGVIZWlnaHRzSW5W
aWV3cG9ydChjbSk7CisgICAgICB1cGRhdGVTY3JvbGxiYXJzSW5uZXIoY20sIG1lYXN1cmVGb3JT
Y3JvbGxiYXJzKGNtKSk7CisgICAgICBzdGFydFdpZHRoID0gY20uZGlzcGxheS5iYXJXaWR0aDsg
c3RhcnRIZWlnaHQgPSBjbS5kaXNwbGF5LmJhckhlaWdodDsKICAgICB9Ci0gICAgaWYgKG5lZWRz
SCAmJiBuZWVkc1YpIHsKKyAgfQorCisgIC8vIFJlLXN5bmNocm9uaXplIHRoZSBmYWtlIHNjcm9s
bGJhcnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlCisgIC8vIGNvbnRlbnQuCisgIGZ1bmN0
aW9uIHVwZGF0ZVNjcm9sbGJhcnNJbm5lcihjbSwgbWVhc3VyZSkgeworICAgIHZhciBkID0gY20u
ZGlzcGxheTsKKyAgICB2YXIgc2l6ZXMgPSBkLnNjcm9sbGJhcnMudXBkYXRlKG1lYXN1cmUpOwor
CisgICAgZC5zaXplci5zdHlsZS5wYWRkaW5nUmlnaHQgPSAoZC5iYXJXaWR0aCA9IHNpemVzLnJp
Z2h0KSArICJweCI7CisgICAgZC5zaXplci5zdHlsZS5wYWRkaW5nQm90dG9tID0gKGQuYmFySGVp
Z2h0ID0gc2l6ZXMuYm90dG9tKSArICJweCI7CisKKyAgICBpZiAoc2l6ZXMucmlnaHQgJiYgc2l6
ZXMuYm90dG9tKSB7CiAgICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gImJs
b2NrIjsKLSAgICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmhlaWdodCA9IGQuc2Nyb2xsYmFy
RmlsbGVyLnN0eWxlLndpZHRoID0gc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJlKSArICJweCI7Cisg
ICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQgPSBzaXplcy5ib3R0b20gKyAicHgi
OworICAgICAgZC5zY3JvbGxiYXJGaWxsZXIuc3R5bGUud2lkdGggPSBzaXplcy5yaWdodCArICJw
eCI7CiAgICAgfSBlbHNlIGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAg
ICBpZiAobmVlZHNIICYmIGNtLm9wdGlvbnMuY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIgJiYg
Y20ub3B0aW9ucy5maXhlZEd1dHRlcikgeworICAgIGlmIChzaXplcy5ib3R0b20gJiYgY20ub3B0
aW9ucy5jb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciAmJiBjbS5vcHRpb25zLmZpeGVkR3V0dGVy
KSB7CiAgICAgICBkLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICAg
IGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmhlaWdodCA9IHNjcm9sbGJhcldpZHRoKGQubWVhc3VyZSkg
KyAicHgiOwotICAgICAgZC5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGggPSBkLmd1dHRlcnMub2Zm
c2V0V2lkdGggKyAicHgiOworICAgICAgZC5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0ID0gc2l6
ZXMuYm90dG9tICsgInB4IjsKKyAgICAgIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLndpZHRoID0gbWVh
c3VyZS5ndXR0ZXJXaWR0aCArICJweCI7CiAgICAgfSBlbHNlIGQuZ3V0dGVyRmlsbGVyLnN0eWxl
LmRpc3BsYXkgPSAiIjsKLQotICAgIGlmICghY20uc3RhdGUuY2hlY2tlZE92ZXJsYXlTY3JvbGxi
YXIgJiYgbWVhc3VyZS5jbGllbnRIZWlnaHQgPiAwKSB7Ci0gICAgICBpZiAoc2Nyb2xsYmFyV2lk
dGgoZC5tZWFzdXJlKSA9PT0gMCkgewotICAgICAgICB2YXIgdyA9IG1hYyAmJiAhbWFjX2dlTW91
bnRhaW5MaW9uID8gIjEycHgiIDogIjE4cHgiOwotICAgICAgICBkLnNjcm9sbGJhclYuc3R5bGUu
bWluV2lkdGggPSBkLnNjcm9sbGJhckguc3R5bGUubWluSGVpZ2h0ID0gdzsKLSAgICAgICAgdmFy
IGJhck1vdXNlRG93biA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICBpZiAoZV90YXJnZXQoZSkg
IT0gZC5zY3JvbGxiYXJWICYmIGVfdGFyZ2V0KGUpICE9IGQuc2Nyb2xsYmFySCkKLSAgICAgICAg
ICAgIG9wZXJhdGlvbihjbSwgb25Nb3VzZURvd24pKGUpOwotICAgICAgICB9OwotICAgICAgICBv
bihkLnNjcm9sbGJhclYsICJtb3VzZWRvd24iLCBiYXJNb3VzZURvd24pOwotICAgICAgICBvbihk
LnNjcm9sbGJhckgsICJtb3VzZWRvd24iLCBiYXJNb3VzZURvd24pOwotICAgICAgfQotICAgICAg
Y20uc3RhdGUuY2hlY2tlZE92ZXJsYXlTY3JvbGxiYXIgPSB0cnVlOwotICAgIH0KICAgfQogCiAg
IC8vIENvbXB1dGUgdGhlIGxpbmVzIHRoYXQgYXJlIHZpc2libGUgaW4gYSBnaXZlbiB2aWV3cG9y
dCAoZGVmYXVsdHMKLSAgLy8gdGhlIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbikuIHZpZXdQ
b3J0IG1heSBjb250YWluIHRvcCwKKyAgLy8gdGhlIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlv
bikuIHZpZXdwb3J0IG1heSBjb250YWluIHRvcCwKICAgLy8gaGVpZ2h0LCBhbmQgZW5zdXJlIChz
ZWUgb3Auc2Nyb2xsVG9Qb3MpIHByb3BlcnRpZXMuCi0gIGZ1bmN0aW9uIHZpc2libGVMaW5lcyhk
aXNwbGF5LCBkb2MsIHZpZXdQb3J0KSB7Ci0gICAgdmFyIHRvcCA9IHZpZXdQb3J0ICYmIHZpZXdQ
b3J0LnRvcCAhPSBudWxsID8gTWF0aC5tYXgoMCwgdmlld1BvcnQudG9wKSA6IGRpc3BsYXkuc2Ny
b2xsZXIuc2Nyb2xsVG9wOworICBmdW5jdGlvbiB2aXNpYmxlTGluZXMoZGlzcGxheSwgZG9jLCB2
aWV3cG9ydCkgeworICAgIHZhciB0b3AgPSB2aWV3cG9ydCAmJiB2aWV3cG9ydC50b3AgIT0gbnVs
bCA/IE1hdGgubWF4KDAsIHZpZXdwb3J0LnRvcCkgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRv
cDsKICAgICB0b3AgPSBNYXRoLmZsb29yKHRvcCAtIHBhZGRpbmdUb3AoZGlzcGxheSkpOwotICAg
IHZhciBib3R0b20gPSB2aWV3UG9ydCAmJiB2aWV3UG9ydC5ib3R0b20gIT0gbnVsbCA/IHZpZXdQ
b3J0LmJvdHRvbSA6IHRvcCArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CisgICAgdmFy
IGJvdHRvbSA9IHZpZXdwb3J0ICYmIHZpZXdwb3J0LmJvdHRvbSAhPSBudWxsID8gdmlld3BvcnQu
Ym90dG9tIDogdG9wICsgZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKIAogICAgIHZhciBm
cm9tID0gbGluZUF0SGVpZ2h0KGRvYywgdG9wKSwgdG8gPSBsaW5lQXRIZWlnaHQoZG9jLCBib3R0
b20pOwogICAgIC8vIEVuc3VyZSBpcyBhIHtmcm9tOiB7bGluZSwgY2h9LCB0bzoge2xpbmUsIGNo
fX0gb2JqZWN0LCBhbmQKICAgICAvLyBmb3JjZXMgdGhvc2UgbGluZXMgaW50byB0aGUgdmlld3Bv
cnQgKGlmIHBvc3NpYmxlKS4KLSAgICBpZiAodmlld1BvcnQgJiYgdmlld1BvcnQuZW5zdXJlKSB7
Ci0gICAgICB2YXIgZW5zdXJlRnJvbSA9IHZpZXdQb3J0LmVuc3VyZS5mcm9tLmxpbmUsIGVuc3Vy
ZVRvID0gdmlld1BvcnQuZW5zdXJlLnRvLmxpbmU7Ci0gICAgICBpZiAoZW5zdXJlRnJvbSA8IGZy
b20pCi0gICAgICAgIHJldHVybiB7ZnJvbTogZW5zdXJlRnJvbSwKLSAgICAgICAgICAgICAgICB0
bzogbGluZUF0SGVpZ2h0KGRvYywgaGVpZ2h0QXRMaW5lKGdldExpbmUoZG9jLCBlbnN1cmVGcm9t
KSkgKyBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0KX07Ci0gICAgICBpZiAoTWF0aC5taW4o
ZW5zdXJlVG8sIGRvYy5sYXN0TGluZSgpKSA+PSB0bykKLSAgICAgICAgcmV0dXJuIHtmcm9tOiBs
aW5lQXRIZWlnaHQoZG9jLCBoZWlnaHRBdExpbmUoZ2V0TGluZShkb2MsIGVuc3VyZVRvKSkgLSBk
aXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0KSwKLSAgICAgICAgICAgICAgICB0bzogZW5zdXJl
VG99OworICAgIGlmICh2aWV3cG9ydCAmJiB2aWV3cG9ydC5lbnN1cmUpIHsKKyAgICAgIHZhciBl
bnN1cmVGcm9tID0gdmlld3BvcnQuZW5zdXJlLmZyb20ubGluZSwgZW5zdXJlVG8gPSB2aWV3cG9y
dC5lbnN1cmUudG8ubGluZTsKKyAgICAgIGlmIChlbnN1cmVGcm9tIDwgZnJvbSkgeworICAgICAg
ICBmcm9tID0gZW5zdXJlRnJvbTsKKyAgICAgICAgdG8gPSBsaW5lQXRIZWlnaHQoZG9jLCBoZWln
aHRBdExpbmUoZ2V0TGluZShkb2MsIGVuc3VyZUZyb20pKSArIGRpc3BsYXkud3JhcHBlci5jbGll
bnRIZWlnaHQpOworICAgICAgfSBlbHNlIGlmIChNYXRoLm1pbihlbnN1cmVUbywgZG9jLmxhc3RM
aW5lKCkpID49IHRvKSB7CisgICAgICAgIGZyb20gPSBsaW5lQXRIZWlnaHQoZG9jLCBoZWlnaHRB
dExpbmUoZ2V0TGluZShkb2MsIGVuc3VyZVRvKSkgLSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVp
Z2h0KTsKKyAgICAgICAgdG8gPSBlbnN1cmVUbzsKKyAgICAgIH0KICAgICB9CiAgICAgcmV0dXJu
IHtmcm9tOiBmcm9tLCB0bzogTWF0aC5tYXgodG8sIGZyb20gKyAxKX07CiAgIH0KQEAgLTUxMyw3
ICs1OTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IikpOwogICAg
ICAgdmFyIGlubmVyVyA9IHRlc3QuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCwgcGFkZGluZyA9IHRl
c3Qub2Zmc2V0V2lkdGggLSBpbm5lclc7CiAgICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5bGUu
d2lkdGggPSAiIjsKLSAgICAgIGRpc3BsYXkubGluZU51bUlubmVyV2lkdGggPSBNYXRoLm1heChp
bm5lclcsIGRpc3BsYXkubGluZUd1dHRlci5vZmZzZXRXaWR0aCAtIHBhZGRpbmcpOworICAgICAg
ZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCA9IE1hdGgubWF4KGlubmVyVywgZGlzcGxheS5saW5l
R3V0dGVyLm9mZnNldFdpZHRoIC0gcGFkZGluZykgKyAxOwogICAgICAgZGlzcGxheS5saW5lTnVt
V2lkdGggPSBkaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoICsgcGFkZGluZzsKICAgICAgIGRpc3Bs
YXkubGluZU51bUNoYXJzID0gZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCA/IGxhc3QubGVuZ3Ro
IDogLTE7CiAgICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGggPSBkaXNwbGF5Lmxp
bmVOdW1XaWR0aCArICJweCI7CkBAIC01MzYsNzggKzYxOCw2OCBAQAogCiAgIC8vIERJU1BMQVkg
RFJBV0lORwogCi0gIC8vIFVwZGF0ZXMgdGhlIGRpc3BsYXksIHNlbGVjdGlvbiwgYW5kIHNjcm9s
bGJhcnMsIHVzaW5nIHRoZQotICAvLyBpbmZvcm1hdGlvbiBpbiBkaXNwbGF5LnZpZXcgdG8gZmlu
ZCBvdXQgd2hpY2ggbm9kZXMgYXJlIG5vIGxvbmdlcgotICAvLyB1cC10by1kYXRlLiBUcmllcyB0
byBiYWlsIG91dCBlYXJseSB3aGVuIG5vIGNoYW5nZXMgYXJlIG5lZWRlZCwKLSAgLy8gdW5sZXNz
IGZvcmNlZCBpcyB0cnVlLgotICAvLyBSZXR1cm5zIHRydWUgaWYgYW4gYWN0dWFsIHVwZGF0ZSBo
YXBwZW5lZCwgZmFsc2Ugb3RoZXJ3aXNlLgotICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5KGNtLCB2
aWV3UG9ydCwgZm9yY2VkKSB7Ci0gICAgdmFyIG9sZEZyb20gPSBjbS5kaXNwbGF5LnZpZXdGcm9t
LCBvbGRUbyA9IGNtLmRpc3BsYXkudmlld1RvLCB1cGRhdGVkOwotICAgIHZhciB2aXNpYmxlID0g
dmlzaWJsZUxpbmVzKGNtLmRpc3BsYXksIGNtLmRvYywgdmlld1BvcnQpOwotICAgIGZvciAodmFy
IGZpcnN0ID0gdHJ1ZTs7IGZpcnN0ID0gZmFsc2UpIHsKLSAgICAgIHZhciBvbGRXaWR0aCA9IGNt
LmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGg7Ci0gICAgICBpZiAoIXVwZGF0ZURpc3BsYXlJ
bm5lcihjbSwgdmlzaWJsZSwgZm9yY2VkKSkgYnJlYWs7Ci0gICAgICB1cGRhdGVkID0gdHJ1ZTsK
LQotICAgICAgLy8gSWYgdGhlIG1heCBsaW5lIGNoYW5nZWQgc2luY2UgaXQgd2FzIGxhc3QgbWVh
c3VyZWQsIG1lYXN1cmUgaXQsCi0gICAgICAvLyBhbmQgZW5zdXJlIHRoZSBkb2N1bWVudCdzIHdp
ZHRoIG1hdGNoZXMgaXQuCi0gICAgICBpZiAoY20uZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCAmJiAh
Y20ub3B0aW9ucy5saW5lV3JhcHBpbmcpCi0gICAgICAgIGFkanVzdENvbnRlbnRXaWR0aChjbSk7
Ci0KLSAgICAgIHZhciBiYXJNZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pOwotICAg
ICAgdXBkYXRlU2VsZWN0aW9uKGNtKTsKLSAgICAgIHNldERvY3VtZW50SGVpZ2h0KGNtLCBiYXJN
ZWFzdXJlKTsKLSAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoY20sIGJhck1lYXN1cmUpOwotICAgICAg
aWYgKHdlYmtpdCAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZykKLSAgICAgICAgY2hlY2tGb3JX
ZWJraXRXaWR0aEJ1ZyhjbSwgYmFyTWVhc3VyZSk7IC8vIChJc3N1ZSAjMjQyMCkKLSAgICAgIGlm
IChmaXJzdCAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAmJiBvbGRXaWR0aCAhPSBjbS5kaXNw
bGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKSB7Ci0gICAgICAgIGZvcmNlZCA9IHRydWU7Ci0gICAg
ICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgZm9yY2VkID0gZmFsc2U7CisgIGZ1bmN0aW9u
IERpc3BsYXlVcGRhdGUoY20sIHZpZXdwb3J0LCBmb3JjZSkgeworICAgIHZhciBkaXNwbGF5ID0g
Y20uZGlzcGxheTsKIAotICAgICAgLy8gQ2xpcCBmb3JjZWQgdmlld3BvcnQgdG8gYWN0dWFsIHNj
cm9sbGFibGUgYXJlYS4KLSAgICAgIGlmICh2aWV3UG9ydCAmJiB2aWV3UG9ydC50b3AgIT0gbnVs
bCkKLSAgICAgICAgdmlld1BvcnQgPSB7dG9wOiBNYXRoLm1pbihiYXJNZWFzdXJlLmRvY0hlaWdo
dCAtIHNjcm9sbGVyQ3V0T2ZmIC0gYmFyTWVhc3VyZS5jbGllbnRIZWlnaHQsIHZpZXdQb3J0LnRv
cCl9OwotICAgICAgLy8gVXBkYXRlZCBsaW5lIGhlaWdodHMgbWlnaHQgcmVzdWx0IGluIHRoZSBk
cmF3biBhcmVhIG5vdAotICAgICAgLy8gYWN0dWFsbHkgY292ZXJpbmcgdGhlIHZpZXdwb3J0LiBL
ZWVwIGxvb3BpbmcgdW50aWwgaXQgZG9lcy4KLSAgICAgIHZpc2libGUgPSB2aXNpYmxlTGluZXMo
Y20uZGlzcGxheSwgY20uZG9jLCB2aWV3UG9ydCk7Ci0gICAgICBpZiAodmlzaWJsZS5mcm9tID49
IGNtLmRpc3BsYXkudmlld0Zyb20gJiYgdmlzaWJsZS50byA8PSBjbS5kaXNwbGF5LnZpZXdUbykK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHRoaXMudmlld3BvcnQgPSB2aWV3cG9ydDsKKyAg
ICAvLyBTdG9yZSBzb21lIHZhbHVlcyB0aGF0IHdlJ2xsIG5lZWQgbGF0ZXIgKGJ1dCBkb24ndCB3
YW50IHRvIGZvcmNlIGEgcmVsYXlvdXQgZm9yKQorICAgIHRoaXMudmlzaWJsZSA9IHZpc2libGVM
aW5lcyhkaXNwbGF5LCBjbS5kb2MsIHZpZXdwb3J0KTsKKyAgICB0aGlzLmVkaXRvcklzSGlkZGVu
ID0gIWRpc3BsYXkud3JhcHBlci5vZmZzZXRXaWR0aDsKKyAgICB0aGlzLndyYXBwZXJIZWlnaHQg
PSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OworICAgIHRoaXMud3JhcHBlcldpZHRoID0g
ZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoOworICAgIHRoaXMub2xkRGlzcGxheVdpZHRoID0g
ZGlzcGxheVdpZHRoKGNtKTsKKyAgICB0aGlzLmZvcmNlID0gZm9yY2U7CisgICAgdGhpcy5kaW1z
ID0gZ2V0RGltZW5zaW9ucyhjbSk7CisgICAgdGhpcy5ldmVudHMgPSBbXTsKKyAgfQorCisgIERp
c3BsYXlVcGRhdGUucHJvdG90eXBlLnNpZ25hbCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHsK
KyAgICBpZiAoaGFzSGFuZGxlcihlbWl0dGVyLCB0eXBlKSkKKyAgICAgIHRoaXMuZXZlbnRzLnB1
c2goYXJndW1lbnRzKTsKKyAgfTsKKyAgRGlzcGxheVVwZGF0ZS5wcm90b3R5cGUuZmluaXNoID0g
ZnVuY3Rpb24oKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmV2ZW50cy5sZW5ndGg7
IGkrKykKKyAgICAgIHNpZ25hbC5hcHBseShudWxsLCB0aGlzLmV2ZW50c1tpXSk7CisgIH07CiAK
LSAgICBjbS5kaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDsKLSAgICBpZiAodXBkYXRl
ZCkgewotICAgICAgc2lnbmFsTGF0ZXIoY20sICJ1cGRhdGUiLCBjbSk7Ci0gICAgICBpZiAoY20u
ZGlzcGxheS52aWV3RnJvbSAhPSBvbGRGcm9tIHx8IGNtLmRpc3BsYXkudmlld1RvICE9IG9sZFRv
KQotICAgICAgICBzaWduYWxMYXRlcihjbSwgInZpZXdwb3J0Q2hhbmdlIiwgY20sIGNtLmRpc3Bs
YXkudmlld0Zyb20sIGNtLmRpc3BsYXkudmlld1RvKTsKKyAgZnVuY3Rpb24gbWF5YmVDbGlwU2Ny
b2xsYmFycyhjbSkgeworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICBpZiAoIWRp
c3BsYXkuc2Nyb2xsYmFyc0NsaXBwZWQgJiYgZGlzcGxheS5zY3JvbGxlci5vZmZzZXRXaWR0aCkg
eworICAgICAgZGlzcGxheS5uYXRpdmVCYXJXaWR0aCA9IGRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0
V2lkdGggLSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoOworICAgICAgZGlzcGxheS5oZWln
aHRGb3JjZXIuc3R5bGUuaGVpZ2h0ID0gc2Nyb2xsR2FwKGNtKSArICJweCI7CisgICAgICBkaXNw
bGF5LnNpemVyLnN0eWxlLm1hcmdpbkJvdHRvbSA9IC1kaXNwbGF5Lm5hdGl2ZUJhcldpZHRoICsg
InB4IjsKKyAgICAgIGRpc3BsYXkuc2l6ZXIuc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCA9IHNjcm9s
bEdhcChjbSkgKyAicHgiOworICAgICAgZGlzcGxheS5zY3JvbGxiYXJzQ2xpcHBlZCA9IHRydWU7
CiAgICAgfQotICAgIHJldHVybiB1cGRhdGVkOwogICB9CiAKICAgLy8gRG9lcyB0aGUgYWN0dWFs
IHVwZGF0aW5nIG9mIHRoZSBsaW5lIGRpc3BsYXkuIEJhaWxzIG91dAogICAvLyAocmV0dXJuaW5n
IGZhbHNlKSB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gYmUgZG9uZSBhbmQgZm9yY2VkIGlzCiAg
IC8vIGZhbHNlLgotICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5SW5uZXIoY20sIHZpc2libGUsIGZv
cmNlZCkgeworICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5SWZOZWVkZWQoY20sIHVwZGF0ZSkgewog
ICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jOwotICAgIGlmICghZGlz
cGxheS53cmFwcGVyLm9mZnNldFdpZHRoKSB7CisKKyAgICBpZiAodXBkYXRlLmVkaXRvcklzSGlk
ZGVuKSB7CiAgICAgICByZXNldFZpZXcoY20pOwotICAgICAgcmV0dXJuOworICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAogICAgIC8vIEJhaWwgb3V0IGlmIHRoZSB2aXNpYmxlIGFyZWEgaXMg
YWxyZWFkeSByZW5kZXJlZCBhbmQgbm90aGluZyBjaGFuZ2VkLgotICAgIGlmICghZm9yY2VkICYm
IHZpc2libGUuZnJvbSA+PSBkaXNwbGF5LnZpZXdGcm9tICYmIHZpc2libGUudG8gPD0gZGlzcGxh
eS52aWV3VG8gJiYKLSAgICAgICAgY291bnREaXJ0eVZpZXcoY20pID09IDApCi0gICAgICByZXR1
cm47CisgICAgaWYgKCF1cGRhdGUuZm9yY2UgJiYKKyAgICAgICAgdXBkYXRlLnZpc2libGUuZnJv
bSA+PSBkaXNwbGF5LnZpZXdGcm9tICYmIHVwZGF0ZS52aXNpYmxlLnRvIDw9IGRpc3BsYXkudmll
d1RvICYmCisgICAgICAgIChkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID09IG51bGwgfHwgZGlz
cGxheS51cGRhdGVMaW5lTnVtYmVycyA+PSBkaXNwbGF5LnZpZXdUbykgJiYKKyAgICAgICAgZGlz
cGxheS5yZW5kZXJlZFZpZXcgPT0gZGlzcGxheS52aWV3ICYmIGNvdW50RGlydHlWaWV3KGNtKSA9
PSAwKQorICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1heWJlVXBkYXRlTGluZU51bWJl
cldpZHRoKGNtKSkKKyAgICBpZiAobWF5YmVVcGRhdGVMaW5lTnVtYmVyV2lkdGgoY20pKSB7CiAg
ICAgICByZXNldFZpZXcoY20pOwotICAgIHZhciBkaW1zID0gZ2V0RGltZW5zaW9ucyhjbSk7Cisg
ICAgICB1cGRhdGUuZGltcyA9IGdldERpbWVuc2lvbnMoY20pOworICAgIH0KIAogICAgIC8vIENv
bXB1dGUgYSBzdWl0YWJsZSBuZXcgdmlld3BvcnQgKGZyb20gJiB0bykKICAgICB2YXIgZW5kID0g
ZG9jLmZpcnN0ICsgZG9jLnNpemU7Ci0gICAgdmFyIGZyb20gPSBNYXRoLm1heCh2aXNpYmxlLmZy
b20gLSBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luLCBkb2MuZmlyc3QpOwotICAgIHZhciB0byA9
IE1hdGgubWluKGVuZCwgdmlzaWJsZS50byArIGNtLm9wdGlvbnMudmlld3BvcnRNYXJnaW4pOwor
ICAgIHZhciBmcm9tID0gTWF0aC5tYXgodXBkYXRlLnZpc2libGUuZnJvbSAtIGNtLm9wdGlvbnMu
dmlld3BvcnRNYXJnaW4sIGRvYy5maXJzdCk7CisgICAgdmFyIHRvID0gTWF0aC5taW4oZW5kLCB1
cGRhdGUudmlzaWJsZS50byArIGNtLm9wdGlvbnMudmlld3BvcnRNYXJnaW4pOwogICAgIGlmIChk
aXNwbGF5LnZpZXdGcm9tIDwgZnJvbSAmJiBmcm9tIC0gZGlzcGxheS52aWV3RnJvbSA8IDIwKSBm
cm9tID0gTWF0aC5tYXgoZG9jLmZpcnN0LCBkaXNwbGF5LnZpZXdGcm9tKTsKICAgICBpZiAoZGlz
cGxheS52aWV3VG8gPiB0byAmJiBkaXNwbGF5LnZpZXdUbyAtIHRvIDwgMjApIHRvID0gTWF0aC5t
aW4oZW5kLCBkaXNwbGF5LnZpZXdUbyk7CiAgICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zKSB7CkBA
IC02MTYsNyArNjg4LDcgQEAKICAgICB9CiAKICAgICB2YXIgZGlmZmVyZW50ID0gZnJvbSAhPSBk
aXNwbGF5LnZpZXdGcm9tIHx8IHRvICE9IGRpc3BsYXkudmlld1RvIHx8Ci0gICAgICBkaXNwbGF5
Lmxhc3RTaXplQyAhPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OworICAgICAgZGlzcGxh
eS5sYXN0V3JhcEhlaWdodCAhPSB1cGRhdGUud3JhcHBlckhlaWdodCB8fCBkaXNwbGF5Lmxhc3RX
cmFwV2lkdGggIT0gdXBkYXRlLndyYXBwZXJXaWR0aDsKICAgICBhZGp1c3RWaWV3KGNtLCBmcm9t
LCB0byk7CiAKICAgICBkaXNwbGF5LnZpZXdPZmZzZXQgPSBoZWlnaHRBdExpbmUoZ2V0TGluZShj
bS5kb2MsIGRpc3BsYXkudmlld0Zyb20pKTsKQEAgLTYyNCw1OCArNjk2LDg2IEBACiAgICAgY20u
ZGlzcGxheS5tb3Zlci5zdHlsZS50b3AgPSBkaXNwbGF5LnZpZXdPZmZzZXQgKyAicHgiOwogCiAg
ICAgdmFyIHRvVXBkYXRlID0gY291bnREaXJ0eVZpZXcoY20pOwotICAgIGlmICghZGlmZmVyZW50
ICYmIHRvVXBkYXRlID09IDAgJiYgIWZvcmNlZCkgcmV0dXJuOworICAgIGlmICghZGlmZmVyZW50
ICYmIHRvVXBkYXRlID09IDAgJiYgIXVwZGF0ZS5mb3JjZSAmJiBkaXNwbGF5LnJlbmRlcmVkVmll
dyA9PSBkaXNwbGF5LnZpZXcgJiYKKyAgICAgICAgKGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMg
PT0gbnVsbCB8fCBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID49IGRpc3BsYXkudmlld1RvKSkK
KyAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZvciBiaWcgY2hhbmdlcywgd2UgaGlkZSB0
aGUgZW5jbG9zaW5nIGVsZW1lbnQgZHVyaW5nIHRoZQogICAgIC8vIHVwZGF0ZSwgc2luY2UgdGhh
dCBzcGVlZHMgdXAgdGhlIG9wZXJhdGlvbnMgb24gbW9zdCBicm93c2Vycy4KICAgICB2YXIgZm9j
dXNlZCA9IGFjdGl2ZUVsdCgpOwogICAgIGlmICh0b1VwZGF0ZSA+IDQpIGRpc3BsYXkubGluZURp
di5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIHBhdGNoRGlzcGxheShjbSwgZGlzcGxheS51
cGRhdGVMaW5lTnVtYmVycywgZGltcyk7CisgICAgcGF0Y2hEaXNwbGF5KGNtLCBkaXNwbGF5LnVw
ZGF0ZUxpbmVOdW1iZXJzLCB1cGRhdGUuZGltcyk7CiAgICAgaWYgKHRvVXBkYXRlID4gNCkgZGlz
cGxheS5saW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICBkaXNwbGF5LnJlbmRlcmVkVmll
dyA9IGRpc3BsYXkudmlldzsKICAgICAvLyBUaGVyZSBtaWdodCBoYXZlIGJlZW4gYSB3aWRnZXQg
d2l0aCBhIGZvY3VzZWQgZWxlbWVudCB0aGF0IGdvdAogICAgIC8vIGhpZGRlbiBvciB1cGRhdGVk
LCBpZiBzbyByZS1mb2N1cyBpdC4KICAgICBpZiAoZm9jdXNlZCAmJiBhY3RpdmVFbHQoKSAhPSBm
b2N1c2VkICYmIGZvY3VzZWQub2Zmc2V0SGVpZ2h0KSBmb2N1c2VkLmZvY3VzKCk7CiAKICAgICAv
LyBQcmV2ZW50IHNlbGVjdGlvbiBhbmQgY3Vyc29ycyBmcm9tIGludGVyZmVyaW5nIHdpdGggdGhl
IHNjcm9sbAotICAgIC8vIHdpZHRoLgorICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQuCiAgICAgcmVt
b3ZlQ2hpbGRyZW4oZGlzcGxheS5jdXJzb3JEaXYpOwogICAgIHJlbW92ZUNoaWxkcmVuKGRpc3Bs
YXkuc2VsZWN0aW9uRGl2KTsKKyAgICBkaXNwbGF5Lmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0gZGlz
cGxheS5zaXplci5zdHlsZS5taW5IZWlnaHQgPSAwOwogCiAgICAgaWYgKGRpZmZlcmVudCkgewot
ICAgICAgZGlzcGxheS5sYXN0U2l6ZUMgPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0Owor
ICAgICAgZGlzcGxheS5sYXN0V3JhcEhlaWdodCA9IHVwZGF0ZS53cmFwcGVySGVpZ2h0OworICAg
ICAgZGlzcGxheS5sYXN0V3JhcFdpZHRoID0gdXBkYXRlLndyYXBwZXJXaWR0aDsKICAgICAgIHN0
YXJ0V29ya2VyKGNtLCA0MDApOwogICAgIH0KIAotICAgIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0
KGNtKTsKKyAgICBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDsKIAogICAgIHJldHVy
biB0cnVlOwogICB9CiAKLSAgZnVuY3Rpb24gYWRqdXN0Q29udGVudFdpZHRoKGNtKSB7Ci0gICAg
dmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OwotICAgIHZhciB3aWR0aCA9IG1lYXN1cmVDaGFyKGNt
LCBkaXNwbGF5Lm1heExpbmUsIGRpc3BsYXkubWF4TGluZS50ZXh0Lmxlbmd0aCkubGVmdDsKLSAg
ICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gZmFsc2U7Ci0gICAgdmFyIG1pbldpZHRoID0gTWF0
aC5tYXgoMCwgd2lkdGggKyAzKTsKLSAgICB2YXIgbWF4U2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAs
IGRpc3BsYXkuc2l6ZXIub2Zmc2V0TGVmdCArIG1pbldpZHRoICsgc2Nyb2xsZXJDdXRPZmYgLSBk
aXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKTsKLSAgICBkaXNwbGF5LnNpemVyLnN0eWxlLm1p
bldpZHRoID0gbWluV2lkdGggKyAicHgiOwotICAgIGlmIChtYXhTY3JvbGxMZWZ0IDwgY20uZG9j
LnNjcm9sbExlZnQpCi0gICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBNYXRoLm1pbihkaXNwbGF5LnNj
cm9sbGVyLnNjcm9sbExlZnQsIG1heFNjcm9sbExlZnQpLCB0cnVlKTsKLSAgfQorICBmdW5jdGlv
biBwb3N0VXBkYXRlRGlzcGxheShjbSwgdXBkYXRlKSB7CisgICAgdmFyIHZpZXdwb3J0ID0gdXBk
YXRlLnZpZXdwb3J0OworICAgIGZvciAodmFyIGZpcnN0ID0gdHJ1ZTs7IGZpcnN0ID0gZmFsc2Up
IHsKKyAgICAgIGlmICghZmlyc3QgfHwgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nIHx8IHVwZGF0
ZS5vbGREaXNwbGF5V2lkdGggPT0gZGlzcGxheVdpZHRoKGNtKSkgeworICAgICAgICAvLyBDbGlw
IGZvcmNlZCB2aWV3cG9ydCB0byBhY3R1YWwgc2Nyb2xsYWJsZSBhcmVhLgorICAgICAgICBpZiAo
dmlld3BvcnQgJiYgdmlld3BvcnQudG9wICE9IG51bGwpCisgICAgICAgICAgdmlld3BvcnQgPSB7
dG9wOiBNYXRoLm1pbihjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoY20uZGlzcGxheSkgLSBk
aXNwbGF5SGVpZ2h0KGNtKSwgdmlld3BvcnQudG9wKX07CisgICAgICAgIC8vIFVwZGF0ZWQgbGlu
ZSBoZWlnaHRzIG1pZ2h0IHJlc3VsdCBpbiB0aGUgZHJhd24gYXJlYSBub3QKKyAgICAgICAgLy8g
YWN0dWFsbHkgY292ZXJpbmcgdGhlIHZpZXdwb3J0LiBLZWVwIGxvb3BpbmcgdW50aWwgaXQgZG9l
cy4KKyAgICAgICAgdXBkYXRlLnZpc2libGUgPSB2aXNpYmxlTGluZXMoY20uZGlzcGxheSwgY20u
ZG9jLCB2aWV3cG9ydCk7CisgICAgICAgIGlmICh1cGRhdGUudmlzaWJsZS5mcm9tID49IGNtLmRp
c3BsYXkudmlld0Zyb20gJiYgdXBkYXRlLnZpc2libGUudG8gPD0gY20uZGlzcGxheS52aWV3VG8p
CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoIXVwZGF0ZURpc3BsYXlJZk5l
ZWRlZChjbSwgdXBkYXRlKSkgYnJlYWs7CisgICAgICB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChj
bSk7CisgICAgICB2YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTsKKyAg
ICAgIHVwZGF0ZVNlbGVjdGlvbihjbSk7CisgICAgICBzZXREb2N1bWVudEhlaWdodChjbSwgYmFy
TWVhc3VyZSk7CisgICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtLCBiYXJNZWFzdXJlKTsKKyAgICB9
CiAKLSAgZnVuY3Rpb24gc2V0RG9jdW1lbnRIZWlnaHQoY20sIG1lYXN1cmUpIHsKLSAgICBjbS5k
aXNwbGF5LnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IGNtLmRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0
eWxlLnRvcCA9IG1lYXN1cmUuZG9jSGVpZ2h0ICsgInB4IjsKLSAgICBjbS5kaXNwbGF5Lmd1dHRl
cnMuc3R5bGUuaGVpZ2h0ID0gTWF0aC5tYXgobWVhc3VyZS5kb2NIZWlnaHQsIG1lYXN1cmUuY2xp
ZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYpICsgInB4IjsKKyAgICB1cGRhdGUuc2lnbmFsKGNt
LCAidXBkYXRlIiwgY20pOworICAgIGlmIChjbS5kaXNwbGF5LnZpZXdGcm9tICE9IGNtLmRpc3Bs
YXkucmVwb3J0ZWRWaWV3RnJvbSB8fCBjbS5kaXNwbGF5LnZpZXdUbyAhPSBjbS5kaXNwbGF5LnJl
cG9ydGVkVmlld1RvKSB7CisgICAgICB1cGRhdGUuc2lnbmFsKGNtLCAidmlld3BvcnRDaGFuZ2Ui
LCBjbSwgY20uZGlzcGxheS52aWV3RnJvbSwgY20uZGlzcGxheS52aWV3VG8pOworICAgICAgY20u
ZGlzcGxheS5yZXBvcnRlZFZpZXdGcm9tID0gY20uZGlzcGxheS52aWV3RnJvbTsgY20uZGlzcGxh
eS5yZXBvcnRlZFZpZXdUbyA9IGNtLmRpc3BsYXkudmlld1RvOworICAgIH0KICAgfQogCi0gIGZ1
bmN0aW9uIGNoZWNrRm9yV2Via2l0V2lkdGhCdWcoY20sIG1lYXN1cmUpIHsKLSAgICAvLyBXb3Jr
IGFyb3VuZCBXZWJraXQgYnVnIHdoZXJlIGl0IHNvbWV0aW1lcyByZXNlcnZlcyBzcGFjZSBmb3Ig
YQotICAgIC8vIG5vbi1leGlzdGluZyBwaGFudG9tIHNjcm9sbGJhciBpbiB0aGUgc2Nyb2xsZXIg
KElzc3VlICMyNDIwKQotICAgIGlmIChjbS5kaXNwbGF5LnNpemVyLm9mZnNldFdpZHRoICsgY20u
ZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoIDwgY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRX
aWR0aCAtIDEpIHsKLSAgICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gY20u
ZGlzcGxheS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wID0gIjBweCI7Ci0gICAgICBjbS5kaXNwbGF5
Lmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0gbWVhc3VyZS5kb2NIZWlnaHQgKyAicHgiOworICBmdW5j
dGlvbiB1cGRhdGVEaXNwbGF5U2ltcGxlKGNtLCB2aWV3cG9ydCkgeworICAgIHZhciB1cGRhdGUg
PSBuZXcgRGlzcGxheVVwZGF0ZShjbSwgdmlld3BvcnQpOworICAgIGlmICh1cGRhdGVEaXNwbGF5
SWZOZWVkZWQoY20sIHVwZGF0ZSkpIHsKKyAgICAgIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNt
KTsKKyAgICAgIHBvc3RVcGRhdGVEaXNwbGF5KGNtLCB1cGRhdGUpOworICAgICAgdmFyIGJhck1l
YXN1cmUgPSBtZWFzdXJlRm9yU2Nyb2xsYmFycyhjbSk7CisgICAgICB1cGRhdGVTZWxlY3Rpb24o
Y20pOworICAgICAgc2V0RG9jdW1lbnRIZWlnaHQoY20sIGJhck1lYXN1cmUpOworICAgICAgdXBk
YXRlU2Nyb2xsYmFycyhjbSwgYmFyTWVhc3VyZSk7CisgICAgICB1cGRhdGUuZmluaXNoKCk7CiAg
ICAgfQogICB9CiAKKyAgZnVuY3Rpb24gc2V0RG9jdW1lbnRIZWlnaHQoY20sIG1lYXN1cmUpIHsK
KyAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IG1lYXN1cmUuZG9jSGVpZ2h0
ICsgInB4IjsKKyAgICB2YXIgdG90YWwgPSBtZWFzdXJlLmRvY0hlaWdodCArIGNtLmRpc3BsYXku
YmFySGVpZ2h0OworICAgIGNtLmRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcCA9IHRvdGFs
ICsgInB4IjsKKyAgICBjbS5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0gTWF0aC5tYXgo
dG90YWwgKyBzY3JvbGxHYXAoY20pLCBtZWFzdXJlLmNsaWVudEhlaWdodCkgKyAicHgiOworICB9
CisKICAgLy8gUmVhZCB0aGUgYWN0dWFsIGhlaWdodHMgb2YgdGhlIHJlbmRlcmVkIGxpbmVzLCBh
bmQgdXBkYXRlIHRoZWlyCiAgIC8vIHN0b3JlZCBoZWlnaHRzIHRvIG1hdGNoLgogICBmdW5jdGlv
biB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSkgewpAQCAtNjg0LDcgKzc4NCw3IEBACiAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwbGF5LnZpZXcubGVuZ3RoOyBpKyspIHsKICAgICAgIHZh
ciBjdXIgPSBkaXNwbGF5LnZpZXdbaV0sIGhlaWdodDsKICAgICAgIGlmIChjdXIuaGlkZGVuKSBj
b250aW51ZTsKLSAgICAgIGlmIChpZV91cHRvNykgeworICAgICAgaWYgKGllICYmIGllX3ZlcnNp
b24gPCA4KSB7CiAgICAgICAgIHZhciBib3QgPSBjdXIubm9kZS5vZmZzZXRUb3AgKyBjdXIubm9k
ZS5vZmZzZXRIZWlnaHQ7CiAgICAgICAgIGhlaWdodCA9IGJvdCAtIHByZXZCb3R0b207CiAgICAg
ICAgIHByZXZCb3R0b20gPSBib3Q7CkBAIC03MTQsOSArODE0LDEwIEBACiAgIC8vIHZpZXcsIHNv
IHRoYXQgd2UgZG9uJ3QgaW50ZXJsZWF2ZSByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZSBET00u
CiAgIGZ1bmN0aW9uIGdldERpbWVuc2lvbnMoY20pIHsKICAgICB2YXIgZCA9IGNtLmRpc3BsYXks
IGxlZnQgPSB7fSwgd2lkdGggPSB7fTsKKyAgICB2YXIgZ3V0dGVyTGVmdCA9IGQuZ3V0dGVycy5j
bGllbnRMZWZ0OwogICAgIGZvciAodmFyIG4gPSBkLmd1dHRlcnMuZmlyc3RDaGlsZCwgaSA9IDA7
IG47IG4gPSBuLm5leHRTaWJsaW5nLCArK2kpIHsKLSAgICAgIGxlZnRbY20ub3B0aW9ucy5ndXR0
ZXJzW2ldXSA9IG4ub2Zmc2V0TGVmdDsKLSAgICAgIHdpZHRoW2NtLm9wdGlvbnMuZ3V0dGVyc1tp
XV0gPSBuLm9mZnNldFdpZHRoOworICAgICAgbGVmdFtjbS5vcHRpb25zLmd1dHRlcnNbaV1dID0g
bi5vZmZzZXRMZWZ0ICsgbi5jbGllbnRMZWZ0ICsgZ3V0dGVyTGVmdDsKKyAgICAgIHdpZHRoW2Nt
Lm9wdGlvbnMuZ3V0dGVyc1tpXV0gPSBuLmNsaWVudFdpZHRoOwogICAgIH0KICAgICByZXR1cm4g
e2ZpeGVkUG9zOiBjb21wZW5zYXRlRm9ySFNjcm9sbChkKSwKICAgICAgICAgICAgIGd1dHRlclRv
dGFsV2lkdGg6IGQuZ3V0dGVycy5vZmZzZXRXaWR0aCwKQEAgLTc0OSw3ICs4NTAsNyBAQAogICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykgewogICAgICAgdmFyIGxpbmVW
aWV3ID0gdmlld1tpXTsKICAgICAgIGlmIChsaW5lVmlldy5oaWRkZW4pIHsKLSAgICAgIH0gZWxz
ZSBpZiAoIWxpbmVWaWV3Lm5vZGUpIHsgLy8gTm90IGRyYXduIHlldAorICAgICAgfSBlbHNlIGlm
ICghbGluZVZpZXcubm9kZSB8fCBsaW5lVmlldy5ub2RlLnBhcmVudE5vZGUgIT0gY29udGFpbmVy
KSB7IC8vIE5vdCBkcmF3biB5ZXQKICAgICAgICAgdmFyIG5vZGUgPSBidWlsZExpbmVFbGVtZW50
KGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpOwogICAgICAgICBjb250YWluZXIuaW5zZXJ0QmVm
b3JlKG5vZGUsIGN1cik7CiAgICAgICB9IGVsc2UgeyAvLyBBbHJlYWR5IGRyYXduCkBAIC03ODAs
NyArODgxLDcgQEAKICAgICAgIGlmICh0eXBlID09ICJ0ZXh0IikgdXBkYXRlTGluZVRleHQoY20s
IGxpbmVWaWV3KTsKICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImd1dHRlciIpIHVwZGF0ZUxpbmVH
dXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7CiAgICAgICBlbHNlIGlmICh0eXBlID09
ICJjbGFzcyIpIHVwZGF0ZUxpbmVDbGFzc2VzKGxpbmVWaWV3KTsKLSAgICAgIGVsc2UgaWYgKHR5
cGUgPT0gIndpZGdldCIpIHVwZGF0ZUxpbmVXaWRnZXRzKGxpbmVWaWV3LCBkaW1zKTsKKyAgICAg
IGVsc2UgaWYgKHR5cGUgPT0gIndpZGdldCIpIHVwZGF0ZUxpbmVXaWRnZXRzKGNtLCBsaW5lVmll
dywgZGltcyk7CiAgICAgfQogICAgIGxpbmVWaWV3LmNoYW5nZXMgPSBudWxsOwogICB9CkBAIC03
OTMsNyArODk0LDcgQEAKICAgICAgIGlmIChsaW5lVmlldy50ZXh0LnBhcmVudE5vZGUpCiAgICAg
ICAgIGxpbmVWaWV3LnRleHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobGluZVZpZXcubm9kZSwg
bGluZVZpZXcudGV4dCk7CiAgICAgICBsaW5lVmlldy5ub2RlLmFwcGVuZENoaWxkKGxpbmVWaWV3
LnRleHQpOwotICAgICAgaWYgKGllX3VwdG83KSBsaW5lVmlldy5ub2RlLnN0eWxlLnpJbmRleCA9
IDI7CisgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDgpIGxpbmVWaWV3Lm5vZGUuc3R5bGUu
ekluZGV4ID0gMjsKICAgICB9CiAgICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGU7CiAgIH0KQEAgLTg1
NSwxMyArOTU2LDI2IEBACiAgICAgICBsaW5lVmlldy5ub2RlLnJlbW92ZUNoaWxkKGxpbmVWaWV3
Lmd1dHRlcik7CiAgICAgICBsaW5lVmlldy5ndXR0ZXIgPSBudWxsOwogICAgIH0KKyAgICBpZiAo
bGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCkgeworICAgICAgbGluZVZpZXcubm9kZS5yZW1vdmVD
aGlsZChsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kKTsKKyAgICAgIGxpbmVWaWV3Lmd1dHRlckJh
Y2tncm91bmQgPSBudWxsOworICAgIH0KKyAgICBpZiAobGluZVZpZXcubGluZS5ndXR0ZXJDbGFz
cykgeworICAgICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7CisgICAg
ICBsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJv
ci1ndXR0ZXItYmFja2dyb3VuZCAiICsgbGluZVZpZXcubGluZS5ndXR0ZXJDbGFzcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxlZnQ6ICIgKyAoY20ub3B0aW9ucy5m
aXhlZEd1dHRlciA/IGRpbXMuZml4ZWRQb3MgOiAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweDsgd2lkdGg6ICIgKyBkaW1z
Lmd1dHRlclRvdGFsV2lkdGggKyAicHgiKTsKKyAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKGxpbmVW
aWV3Lmd1dHRlckJhY2tncm91bmQsIGxpbmVWaWV3LnRleHQpOworICAgIH0KICAgICB2YXIgbWFy
a2VycyA9IGxpbmVWaWV3LmxpbmUuZ3V0dGVyTWFya2VyczsKICAgICBpZiAoY20ub3B0aW9ucy5s
aW5lTnVtYmVycyB8fCBtYXJrZXJzKSB7CiAgICAgICB2YXIgd3JhcCA9IGVuc3VyZUxpbmVXcmFw
cGVkKGxpbmVWaWV3KTsKLSAgICAgIHZhciBndXR0ZXJXcmFwID0gbGluZVZpZXcuZ3V0dGVyID0K
LSAgICAgICAgd3JhcC5pbnNlcnRCZWZvcmUoZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1n
dXR0ZXItd3JhcHBlciIsICJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIgKwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBkaW1zLmZpeGVk
UG9zIDogLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKyAicHgiKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGluZVZpZXcudGV4dCk7CisgICAgICB2YXIgZ3V0dGVyV3JhcCA9IGxpbmVWaWV3
Lmd1dHRlciA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIiLCAi
bGVmdDogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Y20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGRpbXMuZml4ZWRQb3MgOiAtZGltcy5ndXR0ZXJUb3Rh
bFdpZHRoKSArICJweCIpOworICAgICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGd1
dHRlcldyYXApOworICAgICAgd3JhcC5pbnNlcnRCZWZvcmUoZ3V0dGVyV3JhcCwgbGluZVZpZXcu
dGV4dCk7CisgICAgICBpZiAobGluZVZpZXcubGluZS5ndXR0ZXJDbGFzcykKKyAgICAgICAgZ3V0
dGVyV3JhcC5jbGFzc05hbWUgKz0gIiAiICsgbGluZVZpZXcubGluZS5ndXR0ZXJDbGFzczsKICAg
ICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzICYmICghbWFya2VycyB8fCAhbWFya2Vyc1si
Q29kZU1pcnJvci1saW5lbnVtYmVycyJdKSkKICAgICAgICAgbGluZVZpZXcubGluZU51bWJlciA9
IGd1dHRlcldyYXAuYXBwZW5kQ2hpbGQoCiAgICAgICAgICAgZWx0KCJkaXYiLCBsaW5lTnVtYmVy
Rm9yKGNtLm9wdGlvbnMsIGxpbmVOKSwKQEAgLTg3NywxNCArOTkxLDE0IEBACiAgICAgfQogICB9
CiAKLSAgZnVuY3Rpb24gdXBkYXRlTGluZVdpZGdldHMobGluZVZpZXcsIGRpbXMpIHsKKyAgZnVu
Y3Rpb24gdXBkYXRlTGluZVdpZGdldHMoY20sIGxpbmVWaWV3LCBkaW1zKSB7CiAgICAgaWYgKGxp
bmVWaWV3LmFsaWduYWJsZSkgbGluZVZpZXcuYWxpZ25hYmxlID0gbnVsbDsKICAgICBmb3IgKHZh
ciBub2RlID0gbGluZVZpZXcubm9kZS5maXJzdENoaWxkLCBuZXh0OyBub2RlOyBub2RlID0gbmV4
dCkgewogICAgICAgdmFyIG5leHQgPSBub2RlLm5leHRTaWJsaW5nOwogICAgICAgaWYgKG5vZGUu
Y2xhc3NOYW1lID09ICJDb2RlTWlycm9yLWxpbmV3aWRnZXQiKQogICAgICAgICBsaW5lVmlldy5u
b2RlLnJlbW92ZUNoaWxkKG5vZGUpOwogICAgIH0KLSAgICBpbnNlcnRMaW5lV2lkZ2V0cyhsaW5l
VmlldywgZGltcyk7CisgICAgaW5zZXJ0TGluZVdpZGdldHMoY20sIGxpbmVWaWV3LCBkaW1zKTsK
ICAgfQogCiAgIC8vIEJ1aWxkIGEgbGluZSdzIERPTSByZXByZXNlbnRhdGlvbiBmcm9tIHNjcmF0
Y2gKQEAgLTg5NiwyNSArMTAxMCwyNiBAQAogCiAgICAgdXBkYXRlTGluZUNsYXNzZXMobGluZVZp
ZXcpOwogICAgIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7Ci0g
ICAgaW5zZXJ0TGluZVdpZGdldHMobGluZVZpZXcsIGRpbXMpOworICAgIGluc2VydExpbmVXaWRn
ZXRzKGNtLCBsaW5lVmlldywgZGltcyk7CiAgICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGU7CiAgIH0K
IAogICAvLyBBIGxpbmVWaWV3IG1heSBjb250YWluIG11bHRpcGxlIGxvZ2ljYWwgbGluZXMgKHdo
ZW4gbWVyZ2VkIGJ5CiAgIC8vIGNvbGxhcHNlZCBzcGFucykuIFRoZSB3aWRnZXRzIGZvciBhbGwg
b2YgdGhlbSBuZWVkIHRvIGJlIGRyYXduLgotICBmdW5jdGlvbiBpbnNlcnRMaW5lV2lkZ2V0cyhs
aW5lVmlldywgZGltcykgewotICAgIGluc2VydExpbmVXaWRnZXRzRm9yKGxpbmVWaWV3LmxpbmUs
IGxpbmVWaWV3LCBkaW1zLCB0cnVlKTsKKyAgZnVuY3Rpb24gaW5zZXJ0TGluZVdpZGdldHMoY20s
IGxpbmVWaWV3LCBkaW1zKSB7CisgICAgaW5zZXJ0TGluZVdpZGdldHNGb3IoY20sIGxpbmVWaWV3
LmxpbmUsIGxpbmVWaWV3LCBkaW1zLCB0cnVlKTsKICAgICBpZiAobGluZVZpZXcucmVzdCkgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKQotICAgICAgaW5zZXJ0
TGluZVdpZGdldHNGb3IobGluZVZpZXcucmVzdFtpXSwgbGluZVZpZXcsIGRpbXMsIGZhbHNlKTsK
KyAgICAgIGluc2VydExpbmVXaWRnZXRzRm9yKGNtLCBsaW5lVmlldy5yZXN0W2ldLCBsaW5lVmll
dywgZGltcywgZmFsc2UpOwogICB9CiAKLSAgZnVuY3Rpb24gaW5zZXJ0TGluZVdpZGdldHNGb3Io
bGluZSwgbGluZVZpZXcsIGRpbXMsIGFsbG93QWJvdmUpIHsKKyAgZnVuY3Rpb24gaW5zZXJ0TGlu
ZVdpZGdldHNGb3IoY20sIGxpbmUsIGxpbmVWaWV3LCBkaW1zLCBhbGxvd0Fib3ZlKSB7CiAgICAg
aWYgKCFsaW5lLndpZGdldHMpIHJldHVybjsKICAgICB2YXIgd3JhcCA9IGVuc3VyZUxpbmVXcmFw
cGVkKGxpbmVWaWV3KTsKICAgICBmb3IgKHZhciBpID0gMCwgd3MgPSBsaW5lLndpZGdldHM7IGkg
PCB3cy5sZW5ndGg7ICsraSkgewogICAgICAgdmFyIHdpZGdldCA9IHdzW2ldLCBub2RlID0gZWx0
KCJkaXYiLCBbd2lkZ2V0Lm5vZGVdLCAiQ29kZU1pcnJvci1saW5ld2lkZ2V0Iik7Ci0gICAgICBp
ZiAoIXdpZGdldC5oYW5kbGVNb3VzZUV2ZW50cykgbm9kZS5pZ25vcmVFdmVudHMgPSB0cnVlOwor
ICAgICAgaWYgKCF3aWRnZXQuaGFuZGxlTW91c2VFdmVudHMpIG5vZGUuc2V0QXR0cmlidXRlKCJj
bS1pZ25vcmUtZXZlbnRzIiwgInRydWUiKTsKICAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3aWRn
ZXQsIG5vZGUsIGxpbmVWaWV3LCBkaW1zKTsKKyAgICAgIGNtLmRpc3BsYXkuaW5wdXQuc2V0VW5l
ZGl0YWJsZShub2RlKTsKICAgICAgIGlmIChhbGxvd0Fib3ZlICYmIHdpZGdldC5hYm92ZSkKICAg
ICAgICAgd3JhcC5pbnNlcnRCZWZvcmUobm9kZSwgbGluZVZpZXcuZ3V0dGVyIHx8IGxpbmVWaWV3
LnRleHQpOwogICAgICAgZWxzZQpAQCAtOTU3LDYgKzEwNzIsOTA1IEBACiAgIGZ1bmN0aW9uIG1h
eFBvcyhhLCBiKSB7IHJldHVybiBjbXAoYSwgYikgPCAwID8gYiA6IGE7IH0KICAgZnVuY3Rpb24g
bWluUG9zKGEsIGIpIHsgcmV0dXJuIGNtcChhLCBiKSA8IDAgPyBhIDogYjsgfQogCisgIC8vIElO
UFVUIEhBTkRMSU5HCisKKyAgZnVuY3Rpb24gZW5zdXJlRm9jdXMoY20pIHsKKyAgICBpZiAoIWNt
LnN0YXRlLmZvY3VzZWQpIHsgY20uZGlzcGxheS5pbnB1dC5mb2N1cygpOyBvbkZvY3VzKGNtKTsg
fQorICB9CisKKyAgZnVuY3Rpb24gaXNSZWFkT25seShjbSkgeworICAgIHJldHVybiBjbS5vcHRp
b25zLnJlYWRPbmx5IHx8IGNtLmRvYy5jYW50RWRpdDsKKyAgfQorCisgIC8vIFRoaXMgd2lsbCBi
ZSBzZXQgdG8gYW4gYXJyYXkgb2Ygc3RyaW5ncyB3aGVuIGNvcHlpbmcsIHNvIHRoYXQsCisgIC8v
IHdoZW4gcGFzdGluZywgd2Uga25vdyB3aGF0IGtpbmQgb2Ygc2VsZWN0aW9ucyB0aGUgY29waWVk
IHRleHQKKyAgLy8gd2FzIG1hZGUgb3V0IG9mLgorICB2YXIgbGFzdENvcGllZCA9IG51bGw7CisK
KyAgZnVuY3Rpb24gYXBwbHlUZXh0SW5wdXQoY20sIGluc2VydGVkLCBkZWxldGVkLCBzZWwsIG9y
aWdpbikgeworICAgIHZhciBkb2MgPSBjbS5kb2M7CisgICAgY20uZGlzcGxheS5zaGlmdCA9IGZh
bHNlOworICAgIGlmICghc2VsKSBzZWwgPSBkb2Muc2VsOworCisgICAgdmFyIHBhc3RlID0gY20u
c3RhdGUucGFzdGVJbmNvbWluZyB8fCBvcmlnaW4gPT0gInBhc3RlIjsKKyAgICB2YXIgdGV4dExp
bmVzID0gZG9jLnNwbGl0TGluZXMoaW5zZXJ0ZWQpLCBtdWx0aVBhc3RlID0gbnVsbDsKKyAgICAv
LyBXaGVuIHBhc2luZyBOIGxpbmVzIGludG8gTiBzZWxlY3Rpb25zLCBpbnNlcnQgb25lIGxpbmUg
cGVyIHNlbGVjdGlvbgorICAgIGlmIChwYXN0ZSAmJiBzZWwucmFuZ2VzLmxlbmd0aCA+IDEpIHsK
KyAgICAgIGlmIChsYXN0Q29waWVkICYmIGxhc3RDb3BpZWQuam9pbigiXG4iKSA9PSBpbnNlcnRl
ZCkgeworICAgICAgICBpZiAoc2VsLnJhbmdlcy5sZW5ndGggJSBsYXN0Q29waWVkLmxlbmd0aCA9
PSAwKSB7CisgICAgICAgICAgbXVsdGlQYXN0ZSA9IFtdOworICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGFzdENvcGllZC5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIG11bHRpUGFzdGUu
cHVzaChkb2Muc3BsaXRMaW5lcyhsYXN0Q29waWVkW2ldKSk7CisgICAgICAgIH0KKyAgICAgIH0g
ZWxzZSBpZiAodGV4dExpbmVzLmxlbmd0aCA9PSBzZWwucmFuZ2VzLmxlbmd0aCkgeworICAgICAg
ICBtdWx0aVBhc3RlID0gbWFwKHRleHRMaW5lcywgZnVuY3Rpb24obCkgeyByZXR1cm4gW2xdOyB9
KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3JtYWwgYmVoYXZpb3IgaXMgdG8gaW5zZXJ0
IHRoZSBuZXcgdGV4dCBpbnRvIGV2ZXJ5IHNlbGVjdGlvbgorICAgIGZvciAodmFyIGkgPSBzZWwu
cmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICB2YXIgcmFuZ2UgPSBzZWwu
cmFuZ2VzW2ldOworICAgICAgdmFyIGZyb20gPSByYW5nZS5mcm9tKCksIHRvID0gcmFuZ2UudG8o
KTsKKyAgICAgIGlmIChyYW5nZS5lbXB0eSgpKSB7CisgICAgICAgIGlmIChkZWxldGVkICYmIGRl
bGV0ZWQgPiAwKSAvLyBIYW5kbGUgZGVsZXRpb24KKyAgICAgICAgICBmcm9tID0gUG9zKGZyb20u
bGluZSwgZnJvbS5jaCAtIGRlbGV0ZWQpOworICAgICAgICBlbHNlIGlmIChjbS5zdGF0ZS5vdmVy
d3JpdGUgJiYgIXBhc3RlKSAvLyBIYW5kbGUgb3ZlcndyaXRlCisgICAgICAgICAgdG8gPSBQb3Mo
dG8ubGluZSwgTWF0aC5taW4oZ2V0TGluZShkb2MsIHRvLmxpbmUpLnRleHQubGVuZ3RoLCB0by5j
aCArIGxzdCh0ZXh0TGluZXMpLmxlbmd0aCkpOworICAgICAgfQorICAgICAgdmFyIHVwZGF0ZUlu
cHV0ID0gY20uY3VyT3AudXBkYXRlSW5wdXQ7CisgICAgICB2YXIgY2hhbmdlRXZlbnQgPSB7ZnJv
bTogZnJvbSwgdG86IHRvLCB0ZXh0OiBtdWx0aVBhc3RlID8gbXVsdGlQYXN0ZVtpICUgbXVsdGlQ
YXN0ZS5sZW5ndGhdIDogdGV4dExpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdp
bjogb3JpZ2luIHx8IChwYXN0ZSA/ICJwYXN0ZSIgOiBjbS5zdGF0ZS5jdXRJbmNvbWluZyA/ICJj
dXQiIDogIitpbnB1dCIpfTsKKyAgICAgIG1ha2VDaGFuZ2UoY20uZG9jLCBjaGFuZ2VFdmVudCk7
CisgICAgICBzaWduYWxMYXRlcihjbSwgImlucHV0UmVhZCIsIGNtLCBjaGFuZ2VFdmVudCk7Cisg
ICAgfQorICAgIGlmIChpbnNlcnRlZCAmJiAhcGFzdGUpCisgICAgICB0cmlnZ2VyRWxlY3RyaWMo
Y20sIGluc2VydGVkKTsKKworICAgIGVuc3VyZUN1cnNvclZpc2libGUoY20pOworICAgIGNtLmN1
ck9wLnVwZGF0ZUlucHV0ID0gdXBkYXRlSW5wdXQ7CisgICAgY20uY3VyT3AudHlwaW5nID0gdHJ1
ZTsKKyAgICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0gY20uc3RhdGUuY3V0SW5jb21pbmcgPSBm
YWxzZTsKKyAgfQorCisgIGZ1bmN0aW9uIGhhbmRsZVBhc3RlKGUsIGNtKSB7CisgICAgdmFyIHBh
c3RlZCA9IGUuY2xpcGJvYXJkRGF0YSAmJiBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9w
bGFpbiIpOworICAgIGlmIChwYXN0ZWQpIHsKKyAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAg
ICAgIGlmICghaXNSZWFkT25seShjbSkgJiYgIWNtLm9wdGlvbnMuZGlzYWJsZUlucHV0KQorICAg
ICAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbigpIHsgYXBwbHlUZXh0SW5wdXQoY20sIHBhc3RlZCwg
MCwgbnVsbCwgInBhc3RlIik7IH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisK
KyAgZnVuY3Rpb24gdHJpZ2dlckVsZWN0cmljKGNtLCBpbnNlcnRlZCkgeworICAgIC8vIFdoZW4g
YW4gJ2VsZWN0cmljJyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGltbWVkaWF0ZWx5IHRyaWdnZXIg
YSByZWluZGVudAorICAgIGlmICghY20ub3B0aW9ucy5lbGVjdHJpY0NoYXJzIHx8ICFjbS5vcHRp
b25zLnNtYXJ0SW5kZW50KSByZXR1cm47CisgICAgdmFyIHNlbCA9IGNtLmRvYy5zZWw7CisKKyAg
ICBmb3IgKHZhciBpID0gc2VsLnJhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAg
ICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXTsKKyAgICAgIGlmIChyYW5nZS5oZWFkLmNoID4g
MTAwIHx8IChpICYmIHNlbC5yYW5nZXNbaSAtIDFdLmhlYWQubGluZSA9PSByYW5nZS5oZWFkLmxp
bmUpKSBjb250aW51ZTsKKyAgICAgIHZhciBtb2RlID0gY20uZ2V0TW9kZUF0KHJhbmdlLmhlYWQp
OworICAgICAgdmFyIGluZGVudGVkID0gZmFsc2U7CisgICAgICBpZiAobW9kZS5lbGVjdHJpY0No
YXJzKSB7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbW9kZS5lbGVjdHJpY0NoYXJzLmxl
bmd0aDsgaisrKQorICAgICAgICAgIGlmIChpbnNlcnRlZC5pbmRleE9mKG1vZGUuZWxlY3RyaWND
aGFycy5jaGFyQXQoaikpID4gLTEpIHsKKyAgICAgICAgICAgIGluZGVudGVkID0gaW5kZW50TGlu
ZShjbSwgcmFuZ2UuaGVhZC5saW5lLCAic21hcnQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAobW9kZS5lbGVjdHJpY0lucHV0KSB7CisgICAgICAg
IGlmIChtb2RlLmVsZWN0cmljSW5wdXQudGVzdChnZXRMaW5lKGNtLmRvYywgcmFuZ2UuaGVhZC5s
aW5lKS50ZXh0LnNsaWNlKDAsIHJhbmdlLmhlYWQuY2gpKSkKKyAgICAgICAgICBpbmRlbnRlZCA9
IGluZGVudExpbmUoY20sIHJhbmdlLmhlYWQubGluZSwgInNtYXJ0Iik7CisgICAgICB9CisgICAg
ICBpZiAoaW5kZW50ZWQpIHNpZ25hbExhdGVyKGNtLCAiZWxlY3RyaWNJbnB1dCIsIGNtLCByYW5n
ZS5oZWFkLmxpbmUpOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGNvcHlhYmxlUmFuZ2VzKGNt
KSB7CisgICAgdmFyIHRleHQgPSBbXSwgcmFuZ2VzID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBjbS5kb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIGxpbmUgPSBj
bS5kb2Muc2VsLnJhbmdlc1tpXS5oZWFkLmxpbmU7CisgICAgICB2YXIgbGluZVJhbmdlID0ge2Fu
Y2hvcjogUG9zKGxpbmUsIDApLCBoZWFkOiBQb3MobGluZSArIDEsIDApfTsKKyAgICAgIHJhbmdl
cy5wdXNoKGxpbmVSYW5nZSk7CisgICAgICB0ZXh0LnB1c2goY20uZ2V0UmFuZ2UobGluZVJhbmdl
LmFuY2hvciwgbGluZVJhbmdlLmhlYWQpKTsKKyAgICB9CisgICAgcmV0dXJuIHt0ZXh0OiB0ZXh0
LCByYW5nZXM6IHJhbmdlc307CisgIH0KKworICBmdW5jdGlvbiBkaXNhYmxlQnJvd3Nlck1hZ2lj
KGZpZWxkKSB7CisgICAgZmllbGQuc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsICJvZmYiKTsK
KyAgICBmaWVsZC5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwgIm9mZiIpOworICAgIGZp
ZWxkLnNldEF0dHJpYnV0ZSgic3BlbGxjaGVjayIsICJmYWxzZSIpOworICB9CisKKyAgLy8gVEVY
VEFSRUEgSU5QVVQgU1RZTEUKKworICBmdW5jdGlvbiBUZXh0YXJlYUlucHV0KGNtKSB7CisgICAg
dGhpcy5jbSA9IGNtOworICAgIC8vIFNlZSBpbnB1dC5wb2xsIGFuZCBpbnB1dC5yZXNldAorICAg
IHRoaXMucHJldklucHV0ID0gIiI7CisKKyAgICAvLyBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRo
ZXIgd2UgZXhwZWN0IGlucHV0IHRvIGFwcGVhciByZWFsIHNvb24KKyAgICAvLyBub3cgKGFmdGVy
IHNvbWUgZXZlbnQgbGlrZSAna2V5cHJlc3MnIG9yICdpbnB1dCcpIGFuZCBhcmUKKyAgICAvLyBw
b2xsaW5nIGludGVuc2l2ZWx5LgorICAgIHRoaXMucG9sbGluZ0Zhc3QgPSBmYWxzZTsKKyAgICAv
LyBTZWxmLXJlc2V0dGluZyB0aW1lb3V0IGZvciB0aGUgcG9sbGVyCisgICAgdGhpcy5wb2xsaW5n
ID0gbmV3IERlbGF5ZWQoKTsKKyAgICAvLyBUcmFja3Mgd2hlbiBpbnB1dC5yZXNldCBoYXMgcHVu
dGVkIHRvIGp1c3QgcHV0dGluZyBhIHNob3J0CisgICAgLy8gc3RyaW5nIGludG8gdGhlIHRleHRh
cmVhIGluc3RlYWQgb2YgdGhlIGZ1bGwgc2VsZWN0aW9uLgorICAgIHRoaXMuaW5hY2N1cmF0ZVNl
bGVjdGlvbiA9IGZhbHNlOworICAgIC8vIFVzZWQgdG8gd29yayBhcm91bmQgSUUgaXNzdWUgd2l0
aCBzZWxlY3Rpb24gYmVpbmcgZm9yZ290dGVuIHdoZW4gZm9jdXMgbW92ZXMgYXdheSBmcm9tIHRl
eHRhcmVhCisgICAgdGhpcy5oYXNTZWxlY3Rpb24gPSBmYWxzZTsKKyAgICB0aGlzLmNvbXBvc2lu
ZyA9IG51bGw7CisgIH07CisKKyAgZnVuY3Rpb24gaGlkZGVuVGV4dGFyZWEoKSB7CisgICAgdmFy
IHRlID0gZWx0KCJ0ZXh0YXJlYSIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IHBh
ZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogMWVtOyBvdXRsaW5lOiBub25lIik7CisgICAg
dmFyIGRpdiA9IGVsdCgiZGl2IiwgW3RlXSwgbnVsbCwgIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0
aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iik7CisgICAgLy8gVGhlIHRl
eHRhcmVhIGlzIGtlcHQgcG9zaXRpb25lZCBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCB0aGUK
KyAgICAvLyBmYWN0IHRoYXQgaXQnbGwgYmUgc2Nyb2xsZWQgaW50byB2aWV3IG9uIGlucHV0IGZy
b20gc2Nyb2xsaW5nCisgICAgLy8gb3VyIGZha2UgY3Vyc29yIG91dCBvZiB2aWV3LiBPbiB3ZWJr
aXQsIHdoZW4gd3JhcD1vZmYsIHBhc3RlIGlzCisgICAgLy8gdmVyeSBzbG93LiBTbyBtYWtlIHRo
ZSBhcmVhIHdpZGUgaW5zdGVhZC4KKyAgICBpZiAod2Via2l0KSB0ZS5zdHlsZS53aWR0aCA9ICIx
MDAwcHgiOworICAgIGVsc2UgdGUuc2V0QXR0cmlidXRlKCJ3cmFwIiwgIm9mZiIpOworICAgIC8v
IElmIGJvcmRlcjogMDsgLS0gaU9TIGZhaWxzIHRvIG9wZW4ga2V5Ym9hcmQgKGlzc3VlICMxMjg3
KQorICAgIGlmIChpb3MpIHRlLnN0eWxlLmJvcmRlciA9ICIxcHggc29saWQgYmxhY2siOworICAg
IGRpc2FibGVCcm93c2VyTWFnaWModGUpOworICAgIHJldHVybiBkaXY7CisgIH0KKworICBUZXh0
YXJlYUlucHV0LnByb3RvdHlwZSA9IGNvcHlPYmooeworICAgIGluaXQ6IGZ1bmN0aW9uKGRpc3Bs
YXkpIHsKKyAgICAgIHZhciBpbnB1dCA9IHRoaXMsIGNtID0gdGhpcy5jbTsKKworICAgICAgLy8g
V3JhcHMgYW5kIGhpZGVzIGlucHV0IHRleHRhcmVhCisgICAgICB2YXIgZGl2ID0gdGhpcy53cmFw
cGVyID0gaGlkZGVuVGV4dGFyZWEoKTsKKyAgICAgIC8vIFRoZSBzZW1paGlkZGVuIHRleHRhcmVh
IHRoYXQgaXMgZm9jdXNlZCB3aGVuIHRoZSBlZGl0b3IgaXMKKyAgICAgIC8vIGZvY3VzZWQsIGFu
ZCByZWNlaXZlcyBpbnB1dC4KKyAgICAgIHZhciB0ZSA9IHRoaXMudGV4dGFyZWEgPSBkaXYuZmly
c3RDaGlsZDsKKyAgICAgIGRpc3BsYXkud3JhcHBlci5pbnNlcnRCZWZvcmUoZGl2LCBkaXNwbGF5
LndyYXBwZXIuZmlyc3RDaGlsZCk7CisKKyAgICAgIC8vIE5lZWRlZCB0byBoaWRlIGJpZyBibHVl
IGJsaW5raW5nIGN1cnNvciBvbiBNb2JpbGUgU2FmYXJpIChkb2Vzbid0IHNlZW0gdG8gd29yayBp
biBpT1MgOCBhbnltb3JlKQorICAgICAgaWYgKGlvcykgdGUuc3R5bGUud2lkdGggPSAiMHB4IjsK
KworICAgICAgb24odGUsICJpbnB1dCIsIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoaWUgJiYg
aWVfdmVyc2lvbiA+PSA5ICYmIGlucHV0Lmhhc1NlbGVjdGlvbikgaW5wdXQuaGFzU2VsZWN0aW9u
ID0gbnVsbDsKKyAgICAgICAgaW5wdXQucG9sbCgpOworICAgICAgfSk7CisKKyAgICAgIG9uKHRl
LCAicGFzdGUiLCBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmIChoYW5kbGVQYXN0ZShlLCBjbSkp
IHJldHVybiB0cnVlOworCisgICAgICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlOwor
ICAgICAgICBpbnB1dC5mYXN0UG9sbCgpOworICAgICAgfSk7CisKKyAgICAgIGZ1bmN0aW9uIHBy
ZXBhcmVDb3B5Q3V0KGUpIHsKKyAgICAgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsK
KyAgICAgICAgICBsYXN0Q29waWVkID0gY20uZ2V0U2VsZWN0aW9ucygpOworICAgICAgICAgIGlm
IChpbnB1dC5pbmFjY3VyYXRlU2VsZWN0aW9uKSB7CisgICAgICAgICAgICBpbnB1dC5wcmV2SW5w
dXQgPSAiIjsKKyAgICAgICAgICAgIGlucHV0LmluYWNjdXJhdGVTZWxlY3Rpb24gPSBmYWxzZTsK
KyAgICAgICAgICAgIHRlLnZhbHVlID0gbGFzdENvcGllZC5qb2luKCJcbiIpOworICAgICAgICAg
ICAgc2VsZWN0SW5wdXQodGUpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghY20u
b3B0aW9ucy5saW5lV2lzZUNvcHlDdXQpIHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgdmFyIHJhbmdlcyA9IGNvcHlhYmxlUmFuZ2VzKGNtKTsKKyAgICAg
ICAgICBsYXN0Q29waWVkID0gcmFuZ2VzLnRleHQ7CisgICAgICAgICAgaWYgKGUudHlwZSA9PSAi
Y3V0IikgeworICAgICAgICAgICAgY20uc2V0U2VsZWN0aW9ucyhyYW5nZXMucmFuZ2VzLCBudWxs
LCBzZWxfZG9udFNjcm9sbCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlucHV0
LnByZXZJbnB1dCA9ICIiOworICAgICAgICAgICAgdGUudmFsdWUgPSByYW5nZXMudGV4dC5qb2lu
KCJcbiIpOworICAgICAgICAgICAgc2VsZWN0SW5wdXQodGUpOworICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoZS50eXBlID09ICJjdXQiKSBjbS5zdGF0ZS5jdXRJbmNvbWluZyA9
IHRydWU7CisgICAgICB9CisgICAgICBvbih0ZSwgImN1dCIsIHByZXBhcmVDb3B5Q3V0KTsKKyAg
ICAgIG9uKHRlLCAiY29weSIsIHByZXBhcmVDb3B5Q3V0KTsKKworICAgICAgb24oZGlzcGxheS5z
Y3JvbGxlciwgInBhc3RlIiwgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZXZlbnRJbldpZGdl
dChkaXNwbGF5LCBlKSkgcmV0dXJuOworICAgICAgICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0g
dHJ1ZTsKKyAgICAgICAgaW5wdXQuZm9jdXMoKTsKKyAgICAgIH0pOworCisgICAgICAvLyBQcmV2
ZW50IG5vcm1hbCBzZWxlY3Rpb24gaW4gdGhlIGVkaXRvciAod2UgaGFuZGxlIG91ciBvd24pCisg
ICAgICBvbihkaXNwbGF5LmxpbmVTcGFjZSwgInNlbGVjdHN0YXJ0IiwgZnVuY3Rpb24oZSkgewor
ICAgICAgICBpZiAoIWV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIGVfcHJldmVudERlZmF1bHQo
ZSk7CisgICAgICB9KTsKKworICAgICAgb24odGUsICJjb21wb3NpdGlvbnN0YXJ0IiwgZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciBzdGFydCA9IGNtLmdldEN1cnNvcigiZnJvbSIpOworICAgICAg
ICBpbnB1dC5jb21wb3NpbmcgPSB7CisgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAg
IHJhbmdlOiBjbS5tYXJrVGV4dChzdGFydCwgY20uZ2V0Q3Vyc29yKCJ0byIpLCB7Y2xhc3NOYW1l
OiAiQ29kZU1pcnJvci1jb21wb3NpbmcifSkKKyAgICAgICAgfTsKKyAgICAgIH0pOworICAgICAg
b24odGUsICJjb21wb3NpdGlvbmVuZCIsIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoaW5wdXQu
Y29tcG9zaW5nKSB7CisgICAgICAgICAgaW5wdXQucG9sbCgpOworICAgICAgICAgIGlucHV0LmNv
bXBvc2luZy5yYW5nZS5jbGVhcigpOworICAgICAgICAgIGlucHV0LmNvbXBvc2luZyA9IG51bGw7
CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0sCisKKyAgICBwcmVwYXJlU2VsZWN0aW9uOiBm
dW5jdGlvbigpIHsKKyAgICAgIC8vIFJlZHJhdyB0aGUgc2VsZWN0aW9uIGFuZC9vciBjdXJzb3IK
KyAgICAgIHZhciBjbSA9IHRoaXMuY20sIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5k
b2M7CisgICAgICB2YXIgcmVzdWx0ID0gcHJlcGFyZVNlbGVjdGlvbihjbSk7CisKKyAgICAgIC8v
IE1vdmUgdGhlIGhpZGRlbiB0ZXh0YXJlYSBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCBzY3Jv
bGxpbmcgYXJ0aWZhY3RzCisgICAgICBpZiAoY20ub3B0aW9ucy5tb3ZlSW5wdXRXaXRoQ3Vyc29y
KSB7CisgICAgICAgIHZhciBoZWFkUG9zID0gY3Vyc29yQ29vcmRzKGNtLCBkb2Muc2VsLnByaW1h
cnkoKS5oZWFkLCAiZGl2Iik7CisgICAgICAgIHZhciB3cmFwT2ZmID0gZGlzcGxheS53cmFwcGVy
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBsaW5lT2ZmID0gZGlzcGxheS5saW5lRGl2LmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICByZXN1bHQudGVUb3AgPSBNYXRoLm1heCgwLCBN
YXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0IC0gMTAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRQb3MudG9wICsgbGluZU9mZi50b3Ag
LSB3cmFwT2ZmLnRvcCkpOworICAgICAgICByZXN1bHQudGVMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0
aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoIC0gMTAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9zLmxlZnQgKyBsaW5lT2ZmLmxlZnQg
LSB3cmFwT2ZmLmxlZnQpKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
LAorCisgICAgc2hvd1NlbGVjdGlvbjogZnVuY3Rpb24oZHJhd24pIHsKKyAgICAgIHZhciBjbSA9
IHRoaXMuY20sIGRpc3BsYXkgPSBjbS5kaXNwbGF5OworICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRB
ZGQoZGlzcGxheS5jdXJzb3JEaXYsIGRyYXduLmN1cnNvcnMpOworICAgICAgcmVtb3ZlQ2hpbGRy
ZW5BbmRBZGQoZGlzcGxheS5zZWxlY3Rpb25EaXYsIGRyYXduLnNlbGVjdGlvbik7CisgICAgICBp
ZiAoZHJhd24udGVUb3AgIT0gbnVsbCkgeworICAgICAgICB0aGlzLndyYXBwZXIuc3R5bGUudG9w
ID0gZHJhd24udGVUb3AgKyAicHgiOworICAgICAgICB0aGlzLndyYXBwZXIuc3R5bGUubGVmdCA9
IGRyYXduLnRlTGVmdCArICJweCI7CisgICAgICB9CisgICAgfSwKKworICAgIC8vIFJlc2V0IHRo
ZSBpbnB1dCB0byBjb3JyZXNwb25kIHRvIHRoZSBzZWxlY3Rpb24gKG9yIHRvIGJlIGVtcHR5LAor
ICAgIC8vIHdoZW4gbm90IHR5cGluZyBhbmQgbm90aGluZyBpcyBzZWxlY3RlZCkKKyAgICByZXNl
dDogZnVuY3Rpb24odHlwaW5nKSB7CisgICAgICBpZiAodGhpcy5jb250ZXh0TWVudVBlbmRpbmcp
IHJldHVybjsKKyAgICAgIHZhciBtaW5pbWFsLCBzZWxlY3RlZCwgY20gPSB0aGlzLmNtLCBkb2Mg
PSBjbS5kb2M7CisgICAgICBpZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgeworICAgICAgICB0
aGlzLnByZXZJbnB1dCA9ICIiOworICAgICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnByaW1hcnko
KTsKKyAgICAgICAgbWluaW1hbCA9IGhhc0NvcHlFdmVudCAmJgorICAgICAgICAgIChyYW5nZS50
bygpLmxpbmUgLSByYW5nZS5mcm9tKCkubGluZSA+IDEwMCB8fCAoc2VsZWN0ZWQgPSBjbS5nZXRT
ZWxlY3Rpb24oKSkubGVuZ3RoID4gMTAwMCk7CisgICAgICAgIHZhciBjb250ZW50ID0gbWluaW1h
bCA/ICItIiA6IHNlbGVjdGVkIHx8IGNtLmdldFNlbGVjdGlvbigpOworICAgICAgICB0aGlzLnRl
eHRhcmVhLnZhbHVlID0gY29udGVudDsKKyAgICAgICAgaWYgKGNtLnN0YXRlLmZvY3VzZWQpIHNl
bGVjdElucHV0KHRoaXMudGV4dGFyZWEpOworICAgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+
PSA5KSB0aGlzLmhhc1NlbGVjdGlvbiA9IGNvbnRlbnQ7CisgICAgICB9IGVsc2UgaWYgKCF0eXBp
bmcpIHsKKyAgICAgICAgdGhpcy5wcmV2SW5wdXQgPSB0aGlzLnRleHRhcmVhLnZhbHVlID0gIiI7
CisgICAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkpIHRoaXMuaGFzU2VsZWN0aW9uID0g
bnVsbDsKKyAgICAgIH0KKyAgICAgIHRoaXMuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IG1pbmltYWw7
CisgICAgfSwKKworICAgIGdldEZpZWxkOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMudGV4dGFy
ZWE7IH0sCisKKyAgICBzdXBwb3J0c1RvdWNoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9
LAorCisgICAgZm9jdXM6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuY20ub3B0aW9ucy5y
ZWFkT25seSAhPSAibm9jdXJzb3IiICYmICghbW9iaWxlIHx8IGFjdGl2ZUVsdCgpICE9IHRoaXMu
dGV4dGFyZWEpKSB7CisgICAgICAgIHRyeSB7IHRoaXMudGV4dGFyZWEuZm9jdXMoKTsgfQorICAg
ICAgICBjYXRjaCAoZSkge30gLy8gSUU4IHdpbGwgdGhyb3cgaWYgdGhlIHRleHRhcmVhIGlzIGRp
c3BsYXk6IG5vbmUgb3Igbm90IGluIERPTQorICAgICAgfQorICAgIH0sCisKKyAgICBibHVyOiBm
dW5jdGlvbigpIHsgdGhpcy50ZXh0YXJlYS5ibHVyKCk7IH0sCisKKyAgICByZXNldFBvc2l0aW9u
OiBmdW5jdGlvbigpIHsKKyAgICAgIHRoaXMud3JhcHBlci5zdHlsZS50b3AgPSB0aGlzLndyYXBw
ZXIuc3R5bGUubGVmdCA9IDA7CisgICAgfSwKKworICAgIHJlY2VpdmVkRm9jdXM6IGZ1bmN0aW9u
KCkgeyB0aGlzLnNsb3dQb2xsKCk7IH0sCisKKyAgICAvLyBQb2xsIGZvciBpbnB1dCBjaGFuZ2Vz
LCB1c2luZyB0aGUgbm9ybWFsIHJhdGUgb2YgcG9sbGluZy4gVGhpcworICAgIC8vIHJ1bnMgYXMg
bG9uZyBhcyB0aGUgZWRpdG9yIGlzIGZvY3VzZWQuCisgICAgc2xvd1BvbGw6IGZ1bmN0aW9uKCkg
eworICAgICAgdmFyIGlucHV0ID0gdGhpczsKKyAgICAgIGlmIChpbnB1dC5wb2xsaW5nRmFzdCkg
cmV0dXJuOworICAgICAgaW5wdXQucG9sbGluZy5zZXQodGhpcy5jbS5vcHRpb25zLnBvbGxJbnRl
cnZhbCwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlucHV0LnBvbGwoKTsKKyAgICAgICAgaWYgKGlu
cHV0LmNtLnN0YXRlLmZvY3VzZWQpIGlucHV0LnNsb3dQb2xsKCk7CisgICAgICB9KTsKKyAgICB9
LAorCisgICAgLy8gV2hlbiBhbiBldmVudCBoYXMganVzdCBjb21lIGluIHRoYXQgaXMgbGlrZWx5
IHRvIGFkZCBvciBjaGFuZ2UKKyAgICAvLyBzb21ldGhpbmcgaW4gdGhlIGlucHV0IHRleHRhcmVh
LCB3ZSBwb2xsIGZhc3RlciwgdG8gZW5zdXJlIHRoYXQKKyAgICAvLyB0aGUgY2hhbmdlIGFwcGVh
cnMgb24gdGhlIHNjcmVlbiBxdWlja2x5LgorICAgIGZhc3RQb2xsOiBmdW5jdGlvbigpIHsKKyAg
ICAgIHZhciBtaXNzZWQgPSBmYWxzZSwgaW5wdXQgPSB0aGlzOworICAgICAgaW5wdXQucG9sbGlu
Z0Zhc3QgPSB0cnVlOworICAgICAgZnVuY3Rpb24gcCgpIHsKKyAgICAgICAgdmFyIGNoYW5nZWQg
PSBpbnB1dC5wb2xsKCk7CisgICAgICAgIGlmICghY2hhbmdlZCAmJiAhbWlzc2VkKSB7bWlzc2Vk
ID0gdHJ1ZTsgaW5wdXQucG9sbGluZy5zZXQoNjAsIHApO30KKyAgICAgICAgZWxzZSB7aW5wdXQu
cG9sbGluZ0Zhc3QgPSBmYWxzZTsgaW5wdXQuc2xvd1BvbGwoKTt9CisgICAgICB9CisgICAgICBp
bnB1dC5wb2xsaW5nLnNldCgyMCwgcCk7CisgICAgfSwKKworICAgIC8vIFJlYWQgaW5wdXQgZnJv
bSB0aGUgdGV4dGFyZWEsIGFuZCB1cGRhdGUgdGhlIGRvY3VtZW50IHRvIG1hdGNoLgorICAgIC8v
IFdoZW4gc29tZXRoaW5nIGlzIHNlbGVjdGVkLCBpdCBpcyBwcmVzZW50IGluIHRoZSB0ZXh0YXJl
YSwgYW5kCisgICAgLy8gc2VsZWN0ZWQgKHVubGVzcyBpdCBpcyBodWdlLCBpbiB3aGljaCBjYXNl
IGEgcGxhY2Vob2xkZXIgaXMKKyAgICAvLyB1c2VkKS4gV2hlbiBub3RoaW5nIGlzIHNlbGVjdGVk
LCB0aGUgY3Vyc29yIHNpdHMgYWZ0ZXIgcHJldmlvdXNseQorICAgIC8vIHNlZW4gdGV4dCAoY2Fu
IGJlIGVtcHR5KSwgd2hpY2ggaXMgc3RvcmVkIGluIHByZXZJbnB1dCAod2UgbXVzdAorICAgIC8v
IG5vdCByZXNldCB0aGUgdGV4dGFyZWEgd2hlbiB0eXBpbmcsIGJlY2F1c2UgdGhhdCBicmVha3Mg
SU1FKS4KKyAgICBwb2xsOiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBjbSA9IHRoaXMuY20sIGlu
cHV0ID0gdGhpcy50ZXh0YXJlYSwgcHJldklucHV0ID0gdGhpcy5wcmV2SW5wdXQ7CisgICAgICAv
LyBTaW5jZSB0aGlzIGlzIGNhbGxlZCBhICpsb3QqLCB0cnkgdG8gYmFpbCBvdXQgYXMgY2hlYXBs
eSBhcworICAgICAgLy8gcG9zc2libGUgd2hlbiBpdCBpcyBjbGVhciB0aGF0IG5vdGhpbmcgaGFw
cGVuZWQuIGhhc1NlbGVjdGlvbgorICAgICAgLy8gd2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZXJl
IGlzIGEgbG90IG9mIHRleHQgaW4gdGhlIHRleHRhcmVhLAorICAgICAgLy8gaW4gd2hpY2ggY2Fz
ZSByZWFkaW5nIGl0cyB2YWx1ZSB3b3VsZCBiZSBleHBlbnNpdmUuCisgICAgICBpZiAodGhpcy5j
b250ZXh0TWVudVBlbmRpbmcgfHwgIWNtLnN0YXRlLmZvY3VzZWQgfHwKKyAgICAgICAgICAoaGFz
U2VsZWN0aW9uKGlucHV0KSAmJiAhcHJldklucHV0ICYmICF0aGlzLmNvbXBvc2luZykgfHwKKyAg
ICAgICAgICBpc1JlYWRPbmx5KGNtKSB8fCBjbS5vcHRpb25zLmRpc2FibGVJbnB1dCB8fCBjbS5z
dGF0ZS5rZXlTZXEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgdmFyIHRleHQgPSBp
bnB1dC52YWx1ZTsKKyAgICAgIC8vIElmIG5vdGhpbmcgY2hhbmdlZCwgYmFpbC4KKyAgICAgIGlm
ICh0ZXh0ID09IHByZXZJbnB1dCAmJiAhY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgcmV0dXJuIGZh
bHNlOworICAgICAgLy8gV29yayBhcm91bmQgbm9uc2Vuc2ljYWwgc2VsZWN0aW9uIHJlc2V0dGlu
ZyBpbiBJRTkvMTAsIGFuZAorICAgICAgLy8gaW5leHBsaWNhYmxlIGFwcGVhcmFuY2Ugb2YgcHJp
dmF0ZSBhcmVhIHVuaWNvZGUgY2hhcmFjdGVycyBvbgorICAgICAgLy8gc29tZSBrZXkgY29tYm9z
IGluIE1hYyAoIzI2ODkpLgorICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSAmJiB0aGlz
Lmhhc1NlbGVjdGlvbiA9PT0gdGV4dCB8fAorICAgICAgICAgIG1hYyAmJiAvW1x1ZjcwMC1cdWY3
ZmZdLy50ZXN0KHRleHQpKSB7CisgICAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICBpZiAoY20uZG9jLnNlbCA9PSBj
bS5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51KSB7CisgICAgICAgIHZhciBmaXJzdCA9IHRleHQu
Y2hhckNvZGVBdCgwKTsKKyAgICAgICAgaWYgKGZpcnN0ID09IDB4MjAwYiAmJiAhcHJldklucHV0
KSBwcmV2SW5wdXQgPSAiXHUyMDBiIjsKKyAgICAgICAgaWYgKGZpcnN0ID09IDB4MjFkYSkgeyB0
aGlzLnJlc2V0KCk7IHJldHVybiB0aGlzLmNtLmV4ZWNDb21tYW5kKCJ1bmRvIik7IH0KKyAgICAg
IH0KKyAgICAgIC8vIEZpbmQgdGhlIHBhcnQgb2YgdGhlIGlucHV0IHRoYXQgaXMgYWN0dWFsbHkg
bmV3CisgICAgICB2YXIgc2FtZSA9IDAsIGwgPSBNYXRoLm1pbihwcmV2SW5wdXQubGVuZ3RoLCB0
ZXh0Lmxlbmd0aCk7CisgICAgICB3aGlsZSAoc2FtZSA8IGwgJiYgcHJldklucHV0LmNoYXJDb2Rl
QXQoc2FtZSkgPT0gdGV4dC5jaGFyQ29kZUF0KHNhbWUpKSArK3NhbWU7CisKKyAgICAgIHZhciBz
ZWxmID0gdGhpczsKKyAgICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgeworICAgICAgICBhcHBs
eVRleHRJbnB1dChjbSwgdGV4dC5zbGljZShzYW1lKSwgcHJldklucHV0Lmxlbmd0aCAtIHNhbWUs
CisgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIHNlbGYuY29tcG9zaW5nID8gIipjb21wb3Nl
IiA6IG51bGwpOworCisgICAgICAgIC8vIERvbid0IGxlYXZlIGxvbmcgdGV4dCBpbiB0aGUgdGV4
dGFyZWEsIHNpbmNlIGl0IG1ha2VzIGZ1cnRoZXIgcG9sbGluZyBzbG93CisgICAgICAgIGlmICh0
ZXh0Lmxlbmd0aCA+IDEwMDAgfHwgdGV4dC5pbmRleE9mKCJcbiIpID4gLTEpIGlucHV0LnZhbHVl
ID0gc2VsZi5wcmV2SW5wdXQgPSAiIjsKKyAgICAgICAgZWxzZSBzZWxmLnByZXZJbnB1dCA9IHRl
eHQ7CisKKyAgICAgICAgaWYgKHNlbGYuY29tcG9zaW5nKSB7CisgICAgICAgICAgc2VsZi5jb21w
b3NpbmcucmFuZ2UuY2xlYXIoKTsKKyAgICAgICAgICBzZWxmLmNvbXBvc2luZy5yYW5nZSA9IGNt
Lm1hcmtUZXh0KHNlbGYuY29tcG9zaW5nLnN0YXJ0LCBjbS5nZXRDdXJzb3IoInRvIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiAiQ29k
ZU1pcnJvci1jb21wb3NpbmcifSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgcmV0dXJu
IHRydWU7CisgICAgfSwKKworICAgIGVuc3VyZVBvbGxlZDogZnVuY3Rpb24oKSB7CisgICAgICBp
ZiAodGhpcy5wb2xsaW5nRmFzdCAmJiB0aGlzLnBvbGwoKSkgdGhpcy5wb2xsaW5nRmFzdCA9IGZh
bHNlOworICAgIH0sCisKKyAgICBvbktleVByZXNzOiBmdW5jdGlvbigpIHsKKyAgICAgIGlmIChp
ZSAmJiBpZV92ZXJzaW9uID49IDkpIHRoaXMuaGFzU2VsZWN0aW9uID0gbnVsbDsKKyAgICAgIHRo
aXMuZmFzdFBvbGwoKTsKKyAgICB9LAorCisgICAgb25Db250ZXh0TWVudTogZnVuY3Rpb24oZSkg
eworICAgICAgdmFyIGlucHV0ID0gdGhpcywgY20gPSBpbnB1dC5jbSwgZGlzcGxheSA9IGNtLmRp
c3BsYXksIHRlID0gaW5wdXQudGV4dGFyZWE7CisgICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNl
KGNtLCBlKSwgc2Nyb2xsUG9zID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7CisgICAgICBp
ZiAoIXBvcyB8fCBwcmVzdG8pIHJldHVybjsgLy8gT3BlcmEgaXMgZGlmZmljdWx0LgorCisgICAg
ICAvLyBSZXNldCB0aGUgY3VycmVudCB0ZXh0IHNlbGVjdGlvbiBvbmx5IGlmIHRoZSBjbGljayBp
cyBkb25lIG91dHNpZGUgb2YgdGhlIHNlbGVjdGlvbgorICAgICAgLy8gYW5kICdyZXNldFNlbGVj
dGlvbk9uQ29udGV4dE1lbnUnIG9wdGlvbiBpcyB0cnVlLgorICAgICAgdmFyIHJlc2V0ID0gY20u
b3B0aW9ucy5yZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnU7CisgICAgICBpZiAocmVzZXQgJiYg
Y20uZG9jLnNlbC5jb250YWlucyhwb3MpID09IC0xKQorICAgICAgICBvcGVyYXRpb24oY20sIHNl
dFNlbGVjdGlvbikoY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24ocG9zKSwgc2VsX2RvbnRTY3JvbGwp
OworCisgICAgICB2YXIgb2xkQ1NTID0gdGUuc3R5bGUuY3NzVGV4dDsKKyAgICAgIGlucHV0Lndy
YXBwZXIuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOworICAgICAgdGUuc3R5bGUuY3NzVGV4
dCA9ICJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIiAr
IChlLmNsaWVudFkgLSA1KSArCisgICAgICAgICJweDsgbGVmdDogIiArIChlLmNsaWVudFggLSA1
KSArICJweDsgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogIiArCisgICAgICAgIChpZSA/ICJy
Z2JhKDI1NSwgMjU1LCAyNTUsIC4wNSkiIDogInRyYW5zcGFyZW50IikgKworICAgICAgICAiOyBv
dXRsaW5lOiBub25lOyBib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBo
aWRkZW47IG9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpOyI7CisgICAgICBp
ZiAod2Via2l0KSB2YXIgb2xkU2Nyb2xsWSA9IHdpbmRvdy5zY3JvbGxZOyAvLyBXb3JrIGFyb3Vu
ZCBDaHJvbWUgaXNzdWUgKCMyNzEyKQorICAgICAgZGlzcGxheS5pbnB1dC5mb2N1cygpOworICAg
ICAgaWYgKHdlYmtpdCkgd2luZG93LnNjcm9sbFRvKG51bGwsIG9sZFNjcm9sbFkpOworICAgICAg
ZGlzcGxheS5pbnB1dC5yZXNldCgpOworICAgICAgLy8gQWRkcyAiU2VsZWN0IGFsbCIgdG8gY29u
dGV4dCBtZW51IGluIEZGCisgICAgICBpZiAoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHRlLnZh
bHVlID0gaW5wdXQucHJldklucHV0ID0gIiAiOworICAgICAgaW5wdXQuY29udGV4dE1lbnVQZW5k
aW5nID0gdHJ1ZTsKKyAgICAgIGRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBjbS5kb2Muc2Vs
OworICAgICAgY2xlYXJUaW1lb3V0KGRpc3BsYXkuZGV0ZWN0aW5nU2VsZWN0QWxsKTsKKworICAg
ICAgLy8gU2VsZWN0LWFsbCB3aWxsIGJlIGdyZXllZCBvdXQgaWYgdGhlcmUncyBub3RoaW5nIHRv
IHNlbGVjdCwgc28KKyAgICAgIC8vIHRoaXMgYWRkcyBhIHplcm8td2lkdGggc3BhY2Ugc28gdGhh
dCB3ZSBjYW4gbGF0ZXIgY2hlY2sgd2hldGhlcgorICAgICAgLy8gaXQgZ290IHNlbGVjdGVkLgor
ICAgICAgZnVuY3Rpb24gcHJlcGFyZVNlbGVjdEFsbEhhY2soKSB7CisgICAgICAgIGlmICh0ZS5z
ZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7CisgICAgICAgICAgdmFyIHNlbGVjdGVkID0gY20uc29t
ZXRoaW5nU2VsZWN0ZWQoKTsKKyAgICAgICAgICB2YXIgZXh0dmFsID0gIlx1MjAwYiIgKyAoc2Vs
ZWN0ZWQgPyB0ZS52YWx1ZSA6ICIiKTsKKyAgICAgICAgICB0ZS52YWx1ZSA9ICJcdTIxZGEiOyAv
LyBVc2VkIHRvIGNhdGNoIGNvbnRleHQtbWVudSB1bmRvCisgICAgICAgICAgdGUudmFsdWUgPSBl
eHR2YWw7CisgICAgICAgICAgaW5wdXQucHJldklucHV0ID0gc2VsZWN0ZWQgPyAiIiA6ICJcdTIw
MGIiOworICAgICAgICAgIHRlLnNlbGVjdGlvblN0YXJ0ID0gMTsgdGUuc2VsZWN0aW9uRW5kID0g
ZXh0dmFsLmxlbmd0aDsKKyAgICAgICAgICAvLyBSZS1zZXQgdGhpcywgaW4gY2FzZSBzb21lIG90
aGVyIGhhbmRsZXIgdG91Y2hlZCB0aGUKKyAgICAgICAgICAvLyBzZWxlY3Rpb24gaW4gdGhlIG1l
YW50aW1lLgorICAgICAgICAgIGRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBjbS5kb2Muc2Vs
OworICAgICAgICB9CisgICAgICB9CisgICAgICBmdW5jdGlvbiByZWhpZGUoKSB7CisgICAgICAg
IGlucHV0LmNvbnRleHRNZW51UGVuZGluZyA9IGZhbHNlOworICAgICAgICBpbnB1dC53cmFwcGVy
LnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKKyAgICAgICAgdGUuc3R5bGUuY3NzVGV4dCA9
IG9sZENTUzsKKyAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSBkaXNwbGF5LnNjcm9s
bGJhcnMuc2V0U2Nyb2xsVG9wKGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Nyb2xsUG9z
KTsKKworICAgICAgICAvLyBUcnkgdG8gZGV0ZWN0IHRoZSB1c2VyIGNob29zaW5nIHNlbGVjdC1h
bGwKKyAgICAgICAgaWYgKHRlLnNlbGVjdGlvblN0YXJ0ICE9IG51bGwpIHsKKyAgICAgICAgICBp
ZiAoIWllIHx8IChpZSAmJiBpZV92ZXJzaW9uIDwgOSkpIHByZXBhcmVTZWxlY3RBbGxIYWNrKCk7
CisgICAgICAgICAgdmFyIGkgPSAwLCBwb2xsID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBp
ZiAoZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9PSBjbS5kb2Muc2VsICYmIHRlLnNlbGVjdGlv
blN0YXJ0ID09IDAgJiYKKyAgICAgICAgICAgICAgICB0ZS5zZWxlY3Rpb25FbmQgPiAwICYmIGlu
cHV0LnByZXZJbnB1dCA9PSAiXHUyMDBiIikKKyAgICAgICAgICAgICAgb3BlcmF0aW9uKGNtLCBj
b21tYW5kcy5zZWxlY3RBbGwpKGNtKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGkrKyA8IDEwKSBk
aXNwbGF5LmRldGVjdGluZ1NlbGVjdEFsbCA9IHNldFRpbWVvdXQocG9sbCwgNTAwKTsKKyAgICAg
ICAgICAgIGVsc2UgZGlzcGxheS5pbnB1dC5yZXNldCgpOworICAgICAgICAgIH07CisgICAgICAg
ICAgZGlzcGxheS5kZXRlY3RpbmdTZWxlY3RBbGwgPSBzZXRUaW1lb3V0KHBvbGwsIDIwMCk7Cisg
ICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSkgcHJl
cGFyZVNlbGVjdEFsbEhhY2soKTsKKyAgICAgIGlmIChjYXB0dXJlUmlnaHRDbGljaykgeworICAg
ICAgICBlX3N0b3AoZSk7CisgICAgICAgIHZhciBtb3VzZXVwID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgb2ZmKHdpbmRvdywgIm1vdXNldXAiLCBtb3VzZXVwKTsKKyAgICAgICAgICBzZXRUaW1l
b3V0KHJlaGlkZSwgMjApOworICAgICAgICB9OworICAgICAgICBvbih3aW5kb3csICJtb3VzZXVw
IiwgbW91c2V1cCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzZXRUaW1lb3V0KHJlaGlkZSwg
NTApOworICAgICAgfQorICAgIH0sCisKKyAgICBzZXRVbmVkaXRhYmxlOiBub3RoaW5nLAorCisg
ICAgbmVlZHNDb250ZW50QXR0cmlidXRlOiBmYWxzZQorICB9LCBUZXh0YXJlYUlucHV0LnByb3Rv
dHlwZSk7CisKKyAgLy8gQ09OVEVOVEVESVRBQkxFIElOUFVUIFNUWUxFCisKKyAgZnVuY3Rpb24g
Q29udGVudEVkaXRhYmxlSW5wdXQoY20pIHsKKyAgICB0aGlzLmNtID0gY207CisgICAgdGhpcy5s
YXN0QW5jaG9yTm9kZSA9IHRoaXMubGFzdEFuY2hvck9mZnNldCA9IHRoaXMubGFzdEZvY3VzTm9k
ZSA9IHRoaXMubGFzdEZvY3VzT2Zmc2V0ID0gbnVsbDsKKyAgICB0aGlzLnBvbGxpbmcgPSBuZXcg
RGVsYXllZCgpOworICAgIHRoaXMuZ3JhY2VQZXJpb2QgPSBmYWxzZTsKKyAgfQorCisgIENvbnRl
bnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZSA9IGNvcHlPYmooeworICAgIGluaXQ6IGZ1bmN0aW9u
KGRpc3BsYXkpIHsKKyAgICAgIHZhciBpbnB1dCA9IHRoaXMsIGNtID0gaW5wdXQuY207CisgICAg
ICB2YXIgZGl2ID0gaW5wdXQuZGl2ID0gZGlzcGxheS5saW5lRGl2OworICAgICAgZGl2LmNvbnRl
bnRFZGl0YWJsZSA9ICJ0cnVlIjsKKyAgICAgIGRpc2FibGVCcm93c2VyTWFnaWMoZGl2KTsKKwor
ICAgICAgb24oZGl2LCAicGFzdGUiLCBmdW5jdGlvbihlKSB7IGhhbmRsZVBhc3RlKGUsIGNtKTsg
fSkKKworICAgICAgb24oZGl2LCAiY29tcG9zaXRpb25zdGFydCIsIGZ1bmN0aW9uKGUpIHsKKyAg
ICAgICAgdmFyIGRhdGEgPSBlLmRhdGE7CisgICAgICAgIGlucHV0LmNvbXBvc2luZyA9IHtzZWw6
IGNtLmRvYy5zZWwsIGRhdGE6IGRhdGEsIHN0YXJ0RGF0YTogZGF0YX07CisgICAgICAgIGlmICgh
ZGF0YSkgcmV0dXJuOworICAgICAgICB2YXIgcHJpbSA9IGNtLmRvYy5zZWwucHJpbWFyeSgpOwor
ICAgICAgICB2YXIgbGluZSA9IGNtLmdldExpbmUocHJpbS5oZWFkLmxpbmUpOworICAgICAgICB2
YXIgZm91bmQgPSBsaW5lLmluZGV4T2YoZGF0YSwgTWF0aC5tYXgoMCwgcHJpbS5oZWFkLmNoIC0g
ZGF0YS5sZW5ndGgpKTsKKyAgICAgICAgaWYgKGZvdW5kID4gLTEgJiYgZm91bmQgPD0gcHJpbS5o
ZWFkLmNoKQorICAgICAgICAgIGlucHV0LmNvbXBvc2luZy5zZWwgPSBzaW1wbGVTZWxlY3Rpb24o
UG9zKHByaW0uaGVhZC5saW5lLCBmb3VuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQb3MocHJpbS5oZWFkLmxpbmUsIGZvdW5kICsgZGF0YS5sZW5n
dGgpKTsKKyAgICAgIH0pOworICAgICAgb24oZGl2LCAiY29tcG9zaXRpb251cGRhdGUiLCBmdW5j
dGlvbihlKSB7CisgICAgICAgIGlucHV0LmNvbXBvc2luZy5kYXRhID0gZS5kYXRhOworICAgICAg
fSk7CisgICAgICBvbihkaXYsICJjb21wb3NpdGlvbmVuZCIsIGZ1bmN0aW9uKGUpIHsKKyAgICAg
ICAgdmFyIG91cnMgPSBpbnB1dC5jb21wb3Npbmc7CisgICAgICAgIGlmICghb3VycykgcmV0dXJu
OworICAgICAgICBpZiAoZS5kYXRhICE9IG91cnMuc3RhcnREYXRhICYmICEvXHUyMDBiLy50ZXN0
KGUuZGF0YSkpCisgICAgICAgICAgb3Vycy5kYXRhID0gZS5kYXRhOworICAgICAgICAvLyBOZWVk
IGEgc21hbGwgZGVsYXkgdG8gcHJldmVudCBvdGhlciBjb2RlIChpbnB1dCBldmVudCwKKyAgICAg
ICAgLy8gc2VsZWN0aW9uIHBvbGxpbmcpIGZyb20gZG9pbmcgZGFtYWdlIHdoZW4gZmlyZWQgcmln
aHQgYWZ0ZXIKKyAgICAgICAgLy8gY29tcG9zaXRpb25lbmQuCisgICAgICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgaWYgKCFvdXJzLmhhbmRsZWQpCisgICAgICAgICAgICBp
bnB1dC5hcHBseUNvbXBvc2l0aW9uKG91cnMpOworICAgICAgICAgIGlmIChpbnB1dC5jb21wb3Np
bmcgPT0gb3VycykKKyAgICAgICAgICAgIGlucHV0LmNvbXBvc2luZyA9IG51bGw7CisgICAgICAg
IH0sIDUwKTsKKyAgICAgIH0pOworCisgICAgICBvbihkaXYsICJ0b3VjaHN0YXJ0IiwgZnVuY3Rp
b24oKSB7CisgICAgICAgIGlucHV0LmZvcmNlQ29tcG9zaXRpb25FbmQoKTsKKyAgICAgIH0pOwor
CisgICAgICBvbihkaXYsICJpbnB1dCIsIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoaW5wdXQu
Y29tcG9zaW5nKSByZXR1cm47CisgICAgICAgIGlmICghaW5wdXQucG9sbENvbnRlbnQoKSkKKyAg
ICAgICAgICBydW5Jbk9wKGlucHV0LmNtLCBmdW5jdGlvbigpIHtyZWdDaGFuZ2UoY20pO30pOwor
ICAgICAgfSk7CisKKyAgICAgIGZ1bmN0aW9uIG9uQ29weUN1dChlKSB7CisgICAgICAgIGlmIChj
bS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7CisgICAgICAgICAgbGFzdENvcGllZCA9IGNtLmdldFNl
bGVjdGlvbnMoKTsKKyAgICAgICAgICBpZiAoZS50eXBlID09ICJjdXQiKSBjbS5yZXBsYWNlU2Vs
ZWN0aW9uKCIiLCBudWxsLCAiY3V0Iik7CisgICAgICAgIH0gZWxzZSBpZiAoIWNtLm9wdGlvbnMu
bGluZVdpc2VDb3B5Q3V0KSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgIHZhciByYW5nZXMgPSBjb3B5YWJsZVJhbmdlcyhjbSk7CisgICAgICAgICAgbGFz
dENvcGllZCA9IHJhbmdlcy50ZXh0OworICAgICAgICAgIGlmIChlLnR5cGUgPT0gImN1dCIpIHsK
KyAgICAgICAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgY20u
c2V0U2VsZWN0aW9ucyhyYW5nZXMucmFuZ2VzLCAwLCBzZWxfZG9udFNjcm9sbCk7CisgICAgICAg
ICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24oIiIsIG51bGwsICJjdXQiKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBpT1MgZXhwb3NlcyB0aGUg
Y2xpcGJvYXJkIEFQSSwgYnV0IHNlZW1zIHRvIGRpc2NhcmQgY29udGVudCBpbnNlcnRlZCBpbnRv
IGl0CisgICAgICAgIGlmIChlLmNsaXBib2FyZERhdGEgJiYgIWlvcykgeworICAgICAgICAgIGUu
cHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICBlLmNsaXBib2FyZERhdGEuY2xlYXJEYXRhKCk7
CisgICAgICAgICAgZS5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLCBsYXN0Q29w
aWVkLmpvaW4oIlxuIikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIE9sZC1mYXNo
aW9uZWQgYnJpZWZseS1mb2N1cy1hLXRleHRhcmVhIGhhY2sKKyAgICAgICAgICB2YXIga2x1ZGdl
ID0gaGlkZGVuVGV4dGFyZWEoKSwgdGUgPSBrbHVkZ2UuZmlyc3RDaGlsZDsKKyAgICAgICAgICBj
bS5kaXNwbGF5LmxpbmVTcGFjZS5pbnNlcnRCZWZvcmUoa2x1ZGdlLCBjbS5kaXNwbGF5LmxpbmVT
cGFjZS5maXJzdENoaWxkKTsKKyAgICAgICAgICB0ZS52YWx1ZSA9IGxhc3RDb3BpZWQuam9pbigi
XG4iKTsKKyAgICAgICAgICB2YXIgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50Owor
ICAgICAgICAgIHNlbGVjdElucHV0KHRlKTsKKyAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoa2x1ZGdl
KTsKKyAgICAgICAgICAgIGhhZEZvY3VzLmZvY3VzKCk7CisgICAgICAgICAgfSwgNTApOworICAg
ICAgICB9CisgICAgICB9CisgICAgICBvbihkaXYsICJjb3B5Iiwgb25Db3B5Q3V0KTsKKyAgICAg
IG9uKGRpdiwgImN1dCIsIG9uQ29weUN1dCk7CisgICAgfSwKKworICAgIHByZXBhcmVTZWxlY3Rp
b246IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIHJlc3VsdCA9IHByZXBhcmVTZWxlY3Rpb24odGhp
cy5jbSwgZmFsc2UpOworICAgICAgcmVzdWx0LmZvY3VzID0gdGhpcy5jbS5zdGF0ZS5mb2N1c2Vk
OworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCisgICAgc2hvd1NlbGVjdGlvbjogZnVu
Y3Rpb24oaW5mbykgeworICAgICAgaWYgKCFpbmZvIHx8ICF0aGlzLmNtLmRpc3BsYXkudmlldy5s
ZW5ndGgpIHJldHVybjsKKyAgICAgIGlmIChpbmZvLmZvY3VzKSB0aGlzLnNob3dQcmltYXJ5U2Vs
ZWN0aW9uKCk7CisgICAgICB0aGlzLnNob3dNdWx0aXBsZVNlbGVjdGlvbnMoaW5mbyk7CisgICAg
fSwKKworICAgIHNob3dQcmltYXJ5U2VsZWN0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBz
ZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCksIHByaW0gPSB0aGlzLmNtLmRvYy5zZWwucHJpbWFy
eSgpOworICAgICAgdmFyIGN1ckFuY2hvciA9IGRvbVRvUG9zKHRoaXMuY20sIHNlbC5hbmNob3JO
b2RlLCBzZWwuYW5jaG9yT2Zmc2V0KTsKKyAgICAgIHZhciBjdXJGb2N1cyA9IGRvbVRvUG9zKHRo
aXMuY20sIHNlbC5mb2N1c05vZGUsIHNlbC5mb2N1c09mZnNldCk7CisgICAgICBpZiAoY3VyQW5j
aG9yICYmICFjdXJBbmNob3IuYmFkICYmIGN1ckZvY3VzICYmICFjdXJGb2N1cy5iYWQgJiYKKyAg
ICAgICAgICBjbXAobWluUG9zKGN1ckFuY2hvciwgY3VyRm9jdXMpLCBwcmltLmZyb20oKSkgPT0g
MCAmJgorICAgICAgICAgIGNtcChtYXhQb3MoY3VyQW5jaG9yLCBjdXJGb2N1cyksIHByaW0udG8o
KSkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgICB2YXIgc3RhcnQgPSBwb3NUb0RPTSh0
aGlzLmNtLCBwcmltLmZyb20oKSk7CisgICAgICB2YXIgZW5kID0gcG9zVG9ET00odGhpcy5jbSwg
cHJpbS50bygpKTsKKyAgICAgIGlmICghc3RhcnQgJiYgIWVuZCkgcmV0dXJuOworCisgICAgICB2
YXIgdmlldyA9IHRoaXMuY20uZGlzcGxheS52aWV3OworICAgICAgdmFyIG9sZCA9IHNlbC5yYW5n
ZUNvdW50ICYmIHNlbC5nZXRSYW5nZUF0KDApOworICAgICAgaWYgKCFzdGFydCkgeworICAgICAg
ICBzdGFydCA9IHtub2RlOiB2aWV3WzBdLm1lYXN1cmUubWFwWzJdLCBvZmZzZXQ6IDB9OworICAg
ICAgfSBlbHNlIGlmICghZW5kKSB7IC8vIEZJWE1FIGRhbmdlcm91c2x5IGhhY2t5CisgICAgICAg
IHZhciBtZWFzdXJlID0gdmlld1t2aWV3Lmxlbmd0aCAtIDFdLm1lYXN1cmU7CisgICAgICAgIHZh
ciBtYXAgPSBtZWFzdXJlLm1hcHMgPyBtZWFzdXJlLm1hcHNbbWVhc3VyZS5tYXBzLmxlbmd0aCAt
IDFdIDogbWVhc3VyZS5tYXA7CisgICAgICAgIGVuZCA9IHtub2RlOiBtYXBbbWFwLmxlbmd0aCAt
IDFdLCBvZmZzZXQ6IG1hcFttYXAubGVuZ3RoIC0gMl0gLSBtYXBbbWFwLmxlbmd0aCAtIDNdfTsK
KyAgICAgIH0KKworICAgICAgdHJ5IHsgdmFyIHJuZyA9IHJhbmdlKHN0YXJ0Lm5vZGUsIHN0YXJ0
Lm9mZnNldCwgZW5kLm9mZnNldCwgZW5kLm5vZGUpOyB9CisgICAgICBjYXRjaChlKSB7fSAvLyBP
dXIgbW9kZWwgb2YgdGhlIERPTSBtaWdodCBiZSBvdXRkYXRlZCwgaW4gd2hpY2ggY2FzZSB0aGUg
cmFuZ2Ugd2UgdHJ5IHRvIHNldCBjYW4gYmUgaW1wb3NzaWJsZQorICAgICAgaWYgKHJuZykgewor
ICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CisgICAgICAgIHNlbC5hZGRSYW5nZShybmcp
OworICAgICAgICBpZiAob2xkICYmIHNlbC5hbmNob3JOb2RlID09IG51bGwpIHNlbC5hZGRSYW5n
ZShvbGQpOworICAgICAgICBlbHNlIGlmIChnZWNrbykgdGhpcy5zdGFydEdyYWNlUGVyaW9kKCk7
CisgICAgICB9CisgICAgICB0aGlzLnJlbWVtYmVyU2VsZWN0aW9uKCk7CisgICAgfSwKKworICAg
IHN0YXJ0R3JhY2VQZXJpb2Q6IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGlucHV0ID0gdGhpczsK
KyAgICAgIGNsZWFyVGltZW91dCh0aGlzLmdyYWNlUGVyaW9kKTsKKyAgICAgIHRoaXMuZ3JhY2VQ
ZXJpb2QgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBpbnB1dC5ncmFjZVBlcmlv
ZCA9IGZhbHNlOworICAgICAgICBpZiAoaW5wdXQuc2VsZWN0aW9uQ2hhbmdlZCgpKQorICAgICAg
ICAgIGlucHV0LmNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsgaW5wdXQuY20uY3VyT3Auc2VsZWN0
aW9uQ2hhbmdlZCA9IHRydWU7IH0pOworICAgICAgfSwgMjApOworICAgIH0sCisKKyAgICBzaG93
TXVsdGlwbGVTZWxlY3Rpb25zOiBmdW5jdGlvbihpbmZvKSB7CisgICAgICByZW1vdmVDaGlsZHJl
bkFuZEFkZCh0aGlzLmNtLmRpc3BsYXkuY3Vyc29yRGl2LCBpbmZvLmN1cnNvcnMpOworICAgICAg
cmVtb3ZlQ2hpbGRyZW5BbmRBZGQodGhpcy5jbS5kaXNwbGF5LnNlbGVjdGlvbkRpdiwgaW5mby5z
ZWxlY3Rpb24pOworICAgIH0sCisKKyAgICByZW1lbWJlclNlbGVjdGlvbjogZnVuY3Rpb24oKSB7
CisgICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOworICAgICAgdGhpcy5sYXN0
QW5jaG9yTm9kZSA9IHNlbC5hbmNob3JOb2RlOyB0aGlzLmxhc3RBbmNob3JPZmZzZXQgPSBzZWwu
YW5jaG9yT2Zmc2V0OworICAgICAgdGhpcy5sYXN0Rm9jdXNOb2RlID0gc2VsLmZvY3VzTm9kZTsg
dGhpcy5sYXN0Rm9jdXNPZmZzZXQgPSBzZWwuZm9jdXNPZmZzZXQ7CisgICAgfSwKKworICAgIHNl
bGVjdGlvbkluRWRpdG9yOiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0
U2VsZWN0aW9uKCk7CisgICAgICBpZiAoIXNlbC5yYW5nZUNvdW50KSByZXR1cm4gZmFsc2U7Cisg
ICAgICB2YXIgbm9kZSA9IHNlbC5nZXRSYW5nZUF0KDApLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
OworICAgICAgcmV0dXJuIGNvbnRhaW5zKHRoaXMuZGl2LCBub2RlKTsKKyAgICB9LAorCisgICAg
Zm9jdXM6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuY20ub3B0aW9ucy5yZWFkT25seSAh
PSAibm9jdXJzb3IiKSB0aGlzLmRpdi5mb2N1cygpOworICAgIH0sCisgICAgYmx1cjogZnVuY3Rp
b24oKSB7IHRoaXMuZGl2LmJsdXIoKTsgfSwKKyAgICBnZXRGaWVsZDogZnVuY3Rpb24oKSB7IHJl
dHVybiB0aGlzLmRpdjsgfSwKKworICAgIHN1cHBvcnRzVG91Y2g6IGZ1bmN0aW9uKCkgeyByZXR1
cm4gdHJ1ZTsgfSwKKworICAgIHJlY2VpdmVkRm9jdXM6IGZ1bmN0aW9uKCkgeworICAgICAgdmFy
IGlucHV0ID0gdGhpczsKKyAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkluRWRpdG9yKCkpCisgICAg
ICAgIHRoaXMucG9sbFNlbGVjdGlvbigpOworICAgICAgZWxzZQorICAgICAgICBydW5Jbk9wKHRo
aXMuY20sIGZ1bmN0aW9uKCkgeyBpbnB1dC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1
ZTsgfSk7CisKKyAgICAgIGZ1bmN0aW9uIHBvbGwoKSB7CisgICAgICAgIGlmIChpbnB1dC5jbS5z
dGF0ZS5mb2N1c2VkKSB7CisgICAgICAgICAgaW5wdXQucG9sbFNlbGVjdGlvbigpOworICAgICAg
ICAgIGlucHV0LnBvbGxpbmcuc2V0KGlucHV0LmNtLm9wdGlvbnMucG9sbEludGVydmFsLCBwb2xs
KTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgdGhpcy5wb2xsaW5nLnNldCh0aGlzLmNtLm9w
dGlvbnMucG9sbEludGVydmFsLCBwb2xsKTsKKyAgICB9LAorCisgICAgc2VsZWN0aW9uQ2hhbmdl
ZDogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwor
ICAgICAgcmV0dXJuIHNlbC5hbmNob3JOb2RlICE9IHRoaXMubGFzdEFuY2hvck5vZGUgfHwgc2Vs
LmFuY2hvck9mZnNldCAhPSB0aGlzLmxhc3RBbmNob3JPZmZzZXQgfHwKKyAgICAgICAgc2VsLmZv
Y3VzTm9kZSAhPSB0aGlzLmxhc3RGb2N1c05vZGUgfHwgc2VsLmZvY3VzT2Zmc2V0ICE9IHRoaXMu
bGFzdEZvY3VzT2Zmc2V0OworICAgIH0sCisKKyAgICBwb2xsU2VsZWN0aW9uOiBmdW5jdGlvbigp
IHsKKyAgICAgIGlmICghdGhpcy5jb21wb3NpbmcgJiYgIXRoaXMuZ3JhY2VQZXJpb2QgJiYgdGhp
cy5zZWxlY3Rpb25DaGFuZ2VkKCkpIHsKKyAgICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxl
Y3Rpb24oKSwgY20gPSB0aGlzLmNtOworICAgICAgICB0aGlzLnJlbWVtYmVyU2VsZWN0aW9uKCk7
CisgICAgICAgIHZhciBhbmNob3IgPSBkb21Ub1BvcyhjbSwgc2VsLmFuY2hvck5vZGUsIHNlbC5h
bmNob3JPZmZzZXQpOworICAgICAgICB2YXIgaGVhZCA9IGRvbVRvUG9zKGNtLCBzZWwuZm9jdXNO
b2RlLCBzZWwuZm9jdXNPZmZzZXQpOworICAgICAgICBpZiAoYW5jaG9yICYmIGhlYWQpIHJ1bklu
T3AoY20sIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHNldFNlbGVjdGlvbihjbS5kb2MsIHNpbXBs
ZVNlbGVjdGlvbihhbmNob3IsIGhlYWQpLCBzZWxfZG9udFNjcm9sbCk7CisgICAgICAgICAgaWYg
KGFuY2hvci5iYWQgfHwgaGVhZC5iYWQpIGNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVl
OworICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgcG9sbENvbnRlbnQ6IGZ1bmN0
aW9uKCkgeworICAgICAgdmFyIGNtID0gdGhpcy5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNl
bCA9IGNtLmRvYy5zZWwucHJpbWFyeSgpOworICAgICAgdmFyIGZyb20gPSBzZWwuZnJvbSgpLCB0
byA9IHNlbC50bygpOworICAgICAgaWYgKGZyb20ubGluZSA8IGRpc3BsYXkudmlld0Zyb20gfHwg
dG8ubGluZSA+IGRpc3BsYXkudmlld1RvIC0gMSkgcmV0dXJuIGZhbHNlOworCisgICAgICB2YXIg
ZnJvbUluZGV4OworICAgICAgaWYgKGZyb20ubGluZSA9PSBkaXNwbGF5LnZpZXdGcm9tIHx8IChm
cm9tSW5kZXggPSBmaW5kVmlld0luZGV4KGNtLCBmcm9tLmxpbmUpKSA9PSAwKSB7CisgICAgICAg
IHZhciBmcm9tTGluZSA9IGxpbmVObyhkaXNwbGF5LnZpZXdbMF0ubGluZSk7CisgICAgICAgIHZh
ciBmcm9tTm9kZSA9IGRpc3BsYXkudmlld1swXS5ub2RlOworICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgdmFyIGZyb21MaW5lID0gbGluZU5vKGRpc3BsYXkudmlld1tmcm9tSW5kZXhdLmxpbmUpOwor
ICAgICAgICB2YXIgZnJvbU5vZGUgPSBkaXNwbGF5LnZpZXdbZnJvbUluZGV4IC0gMV0ubm9kZS5u
ZXh0U2libGluZzsKKyAgICAgIH0KKyAgICAgIHZhciB0b0luZGV4ID0gZmluZFZpZXdJbmRleChj
bSwgdG8ubGluZSk7CisgICAgICBpZiAodG9JbmRleCA9PSBkaXNwbGF5LnZpZXcubGVuZ3RoIC0g
MSkgeworICAgICAgICB2YXIgdG9MaW5lID0gZGlzcGxheS52aWV3VG8gLSAxOworICAgICAgICB2
YXIgdG9Ob2RlID0gZGlzcGxheS5saW5lRGl2Lmxhc3RDaGlsZDsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZhciB0b0xpbmUgPSBsaW5lTm8oZGlzcGxheS52aWV3W3RvSW5kZXggKyAxXS5saW5l
KSAtIDE7CisgICAgICAgIHZhciB0b05vZGUgPSBkaXNwbGF5LnZpZXdbdG9JbmRleCArIDFdLm5v
ZGUucHJldmlvdXNTaWJsaW5nOworICAgICAgfQorCisgICAgICB2YXIgbmV3VGV4dCA9IGNtLmRv
Yy5zcGxpdExpbmVzKGRvbVRleHRCZXR3ZWVuKGNtLCBmcm9tTm9kZSwgdG9Ob2RlLCBmcm9tTGlu
ZSwgdG9MaW5lKSk7CisgICAgICB2YXIgb2xkVGV4dCA9IGdldEJldHdlZW4oY20uZG9jLCBQb3Mo
ZnJvbUxpbmUsIDApLCBQb3ModG9MaW5lLCBnZXRMaW5lKGNtLmRvYywgdG9MaW5lKS50ZXh0Lmxl
bmd0aCkpOworICAgICAgd2hpbGUgKG5ld1RleHQubGVuZ3RoID4gMSAmJiBvbGRUZXh0Lmxlbmd0
aCA+IDEpIHsKKyAgICAgICAgaWYgKGxzdChuZXdUZXh0KSA9PSBsc3Qob2xkVGV4dCkpIHsgbmV3
VGV4dC5wb3AoKTsgb2xkVGV4dC5wb3AoKTsgdG9MaW5lLS07IH0KKyAgICAgICAgZWxzZSBpZiAo
bmV3VGV4dFswXSA9PSBvbGRUZXh0WzBdKSB7IG5ld1RleHQuc2hpZnQoKTsgb2xkVGV4dC5zaGlm
dCgpOyBmcm9tTGluZSsrOyB9CisgICAgICAgIGVsc2UgYnJlYWs7CisgICAgICB9CisKKyAgICAg
IHZhciBjdXRGcm9udCA9IDAsIGN1dEVuZCA9IDA7CisgICAgICB2YXIgbmV3VG9wID0gbmV3VGV4
dFswXSwgb2xkVG9wID0gb2xkVGV4dFswXSwgbWF4Q3V0RnJvbnQgPSBNYXRoLm1pbihuZXdUb3Au
bGVuZ3RoLCBvbGRUb3AubGVuZ3RoKTsKKyAgICAgIHdoaWxlIChjdXRGcm9udCA8IG1heEN1dEZy
b250ICYmIG5ld1RvcC5jaGFyQ29kZUF0KGN1dEZyb250KSA9PSBvbGRUb3AuY2hhckNvZGVBdChj
dXRGcm9udCkpCisgICAgICAgICsrY3V0RnJvbnQ7CisgICAgICB2YXIgbmV3Qm90ID0gbHN0KG5l
d1RleHQpLCBvbGRCb3QgPSBsc3Qob2xkVGV4dCk7CisgICAgICB2YXIgbWF4Q3V0RW5kID0gTWF0
aC5taW4obmV3Qm90Lmxlbmd0aCAtIChuZXdUZXh0Lmxlbmd0aCA9PSAxID8gY3V0RnJvbnQgOiAw
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRCb3QubGVuZ3RoIC0gKG9sZFRl
eHQubGVuZ3RoID09IDEgPyBjdXRGcm9udCA6IDApKTsKKyAgICAgIHdoaWxlIChjdXRFbmQgPCBt
YXhDdXRFbmQgJiYKKyAgICAgICAgICAgICBuZXdCb3QuY2hhckNvZGVBdChuZXdCb3QubGVuZ3Ro
IC0gY3V0RW5kIC0gMSkgPT0gb2xkQm90LmNoYXJDb2RlQXQob2xkQm90Lmxlbmd0aCAtIGN1dEVu
ZCAtIDEpKQorICAgICAgICArK2N1dEVuZDsKKworICAgICAgbmV3VGV4dFtuZXdUZXh0Lmxlbmd0
aCAtIDFdID0gbmV3Qm90LnNsaWNlKDAsIG5ld0JvdC5sZW5ndGggLSBjdXRFbmQpOworICAgICAg
bmV3VGV4dFswXSA9IG5ld1RleHRbMF0uc2xpY2UoY3V0RnJvbnQpOworCisgICAgICB2YXIgY2hG
cm9tID0gUG9zKGZyb21MaW5lLCBjdXRGcm9udCk7CisgICAgICB2YXIgY2hUbyA9IFBvcyh0b0xp
bmUsIG9sZFRleHQubGVuZ3RoID8gbHN0KG9sZFRleHQpLmxlbmd0aCAtIGN1dEVuZCA6IDApOwor
ICAgICAgaWYgKG5ld1RleHQubGVuZ3RoID4gMSB8fCBuZXdUZXh0WzBdIHx8IGNtcChjaEZyb20s
IGNoVG8pKSB7CisgICAgICAgIHJlcGxhY2VSYW5nZShjbS5kb2MsIG5ld1RleHQsIGNoRnJvbSwg
Y2hUbywgIitpbnB1dCIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9LAor
CisgICAgZW5zdXJlUG9sbGVkOiBmdW5jdGlvbigpIHsKKyAgICAgIHRoaXMuZm9yY2VDb21wb3Np
dGlvbkVuZCgpOworICAgIH0sCisgICAgcmVzZXQ6IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy5m
b3JjZUNvbXBvc2l0aW9uRW5kKCk7CisgICAgfSwKKyAgICBmb3JjZUNvbXBvc2l0aW9uRW5kOiBm
dW5jdGlvbigpIHsKKyAgICAgIGlmICghdGhpcy5jb21wb3NpbmcgfHwgdGhpcy5jb21wb3Npbmcu
aGFuZGxlZCkgcmV0dXJuOworICAgICAgdGhpcy5hcHBseUNvbXBvc2l0aW9uKHRoaXMuY29tcG9z
aW5nKTsKKyAgICAgIHRoaXMuY29tcG9zaW5nLmhhbmRsZWQgPSB0cnVlOworICAgICAgdGhpcy5k
aXYuYmx1cigpOworICAgICAgdGhpcy5kaXYuZm9jdXMoKTsKKyAgICB9LAorICAgIGFwcGx5Q29t
cG9zaXRpb246IGZ1bmN0aW9uKGNvbXBvc2luZykgeworICAgICAgaWYgKGNvbXBvc2luZy5kYXRh
ICYmIGNvbXBvc2luZy5kYXRhICE9IGNvbXBvc2luZy5zdGFydERhdGEpCisgICAgICAgIG9wZXJh
dGlvbih0aGlzLmNtLCBhcHBseVRleHRJbnB1dCkodGhpcy5jbSwgY29tcG9zaW5nLmRhdGEsIDAs
IGNvbXBvc2luZy5zZWwpOworICAgIH0sCisKKyAgICBzZXRVbmVkaXRhYmxlOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICBub2RlLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgImZhbHNl
Iik7CisgICAgfSwKKworICAgIG9uS2V5UHJlc3M6IGZ1bmN0aW9uKGUpIHsKKyAgICAgIGUucHJl
dmVudERlZmF1bHQoKTsKKyAgICAgIG9wZXJhdGlvbih0aGlzLmNtLCBhcHBseVRleHRJbnB1dCko
dGhpcy5jbSwgU3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlID09IG51bGwgPyBlLmtleUNv
ZGUgOiBlLmNoYXJDb2RlKSwgMCk7CisgICAgfSwKKworICAgIG9uQ29udGV4dE1lbnU6IG5vdGhp
bmcsCisgICAgcmVzZXRQb3NpdGlvbjogbm90aGluZywKKworICAgIG5lZWRzQ29udGVudEF0dHJp
YnV0ZTogdHJ1ZQorICB9LCBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUpOworCisgIGZ1
bmN0aW9uIHBvc1RvRE9NKGNtLCBwb3MpIHsKKyAgICB2YXIgdmlldyA9IGZpbmRWaWV3Rm9yTGlu
ZShjbSwgcG9zLmxpbmUpOworICAgIGlmICghdmlldyB8fCB2aWV3LmhpZGRlbikgcmV0dXJuIG51
bGw7CisgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOworICAgIHZhciBp
bmZvID0gbWFwRnJvbUxpbmVWaWV3KHZpZXcsIGxpbmUsIHBvcy5saW5lKTsKKworICAgIHZhciBv
cmRlciA9IGdldE9yZGVyKGxpbmUpLCBzaWRlID0gImxlZnQiOworICAgIGlmIChvcmRlcikgewor
ICAgICAgdmFyIHBhcnRQb3MgPSBnZXRCaWRpUGFydEF0KG9yZGVyLCBwb3MuY2gpOworICAgICAg
c2lkZSA9IHBhcnRQb3MgJSAyID8gInJpZ2h0IiA6ICJsZWZ0IjsKKyAgICB9CisgICAgdmFyIHJl
c3VsdCA9IG5vZGVBbmRPZmZzZXRJbkxpbmVNYXAoaW5mby5tYXAsIHBvcy5jaCwgc2lkZSk7Cisg
ICAgcmVzdWx0Lm9mZnNldCA9IHJlc3VsdC5jb2xsYXBzZSA9PSAicmlnaHQiID8gcmVzdWx0LmVu
ZCA6IHJlc3VsdC5zdGFydDsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgZnVuY3Rpb24g
YmFkUG9zKHBvcywgYmFkKSB7IGlmIChiYWQpIHBvcy5iYWQgPSB0cnVlOyByZXR1cm4gcG9zOyB9
CisKKyAgZnVuY3Rpb24gZG9tVG9Qb3MoY20sIG5vZGUsIG9mZnNldCkgeworICAgIHZhciBsaW5l
Tm9kZTsKKyAgICBpZiAobm9kZSA9PSBjbS5kaXNwbGF5LmxpbmVEaXYpIHsKKyAgICAgIGxpbmVO
b2RlID0gY20uZGlzcGxheS5saW5lRGl2LmNoaWxkTm9kZXNbb2Zmc2V0XTsKKyAgICAgIGlmICgh
bGluZU5vZGUpIHJldHVybiBiYWRQb3MoY20uY2xpcFBvcyhQb3MoY20uZGlzcGxheS52aWV3VG8g
LSAxKSksIHRydWUpOworICAgICAgbm9kZSA9IG51bGw7IG9mZnNldCA9IDA7CisgICAgfSBlbHNl
IHsKKyAgICAgIGZvciAobGluZU5vZGUgPSBub2RlOzsgbGluZU5vZGUgPSBsaW5lTm9kZS5wYXJl
bnROb2RlKSB7CisgICAgICAgIGlmICghbGluZU5vZGUgfHwgbGluZU5vZGUgPT0gY20uZGlzcGxh
eS5saW5lRGl2KSByZXR1cm4gbnVsbDsKKyAgICAgICAgaWYgKGxpbmVOb2RlLnBhcmVudE5vZGUg
JiYgbGluZU5vZGUucGFyZW50Tm9kZSA9PSBjbS5kaXNwbGF5LmxpbmVEaXYpIGJyZWFrOworICAg
ICAgfQorICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLmRpc3BsYXkudmlldy5sZW5n
dGg7IGkrKykgeworICAgICAgdmFyIGxpbmVWaWV3ID0gY20uZGlzcGxheS52aWV3W2ldOworICAg
ICAgaWYgKGxpbmVWaWV3Lm5vZGUgPT0gbGluZU5vZGUpCisgICAgICAgIHJldHVybiBsb2NhdGVO
b2RlSW5MaW5lVmlldyhsaW5lVmlldywgbm9kZSwgb2Zmc2V0KTsKKyAgICB9CisgIH0KKworICBm
dW5jdGlvbiBsb2NhdGVOb2RlSW5MaW5lVmlldyhsaW5lVmlldywgbm9kZSwgb2Zmc2V0KSB7Cisg
ICAgdmFyIHdyYXBwZXIgPSBsaW5lVmlldy50ZXh0LmZpcnN0Q2hpbGQsIGJhZCA9IGZhbHNlOwor
ICAgIGlmICghbm9kZSB8fCAhY29udGFpbnMod3JhcHBlciwgbm9kZSkpIHJldHVybiBiYWRQb3Mo
UG9zKGxpbmVObyhsaW5lVmlldy5saW5lKSwgMCksIHRydWUpOworICAgIGlmIChub2RlID09IHdy
YXBwZXIpIHsKKyAgICAgIGJhZCA9IHRydWU7CisgICAgICBub2RlID0gd3JhcHBlci5jaGlsZE5v
ZGVzW29mZnNldF07CisgICAgICBvZmZzZXQgPSAwOworICAgICAgaWYgKCFub2RlKSB7CisgICAg
ICAgIHZhciBsaW5lID0gbGluZVZpZXcucmVzdCA/IGxzdChsaW5lVmlldy5yZXN0KSA6IGxpbmVW
aWV3LmxpbmU7CisgICAgICAgIHJldHVybiBiYWRQb3MoUG9zKGxpbmVObyhsaW5lKSwgbGluZS50
ZXh0Lmxlbmd0aCksIGJhZCk7CisgICAgICB9CisgICAgfQorCisgICAgdmFyIHRleHROb2RlID0g
bm9kZS5ub2RlVHlwZSA9PSAzID8gbm9kZSA6IG51bGwsIHRvcE5vZGUgPSBub2RlOworICAgIGlm
ICghdGV4dE5vZGUgJiYgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxICYmIG5vZGUuZmlyc3RD
aGlsZC5ub2RlVHlwZSA9PSAzKSB7CisgICAgICB0ZXh0Tm9kZSA9IG5vZGUuZmlyc3RDaGlsZDsK
KyAgICAgIGlmIChvZmZzZXQpIG9mZnNldCA9IHRleHROb2RlLm5vZGVWYWx1ZS5sZW5ndGg7Cisg
ICAgfQorICAgIHdoaWxlICh0b3BOb2RlLnBhcmVudE5vZGUgIT0gd3JhcHBlcikgdG9wTm9kZSA9
IHRvcE5vZGUucGFyZW50Tm9kZTsKKyAgICB2YXIgbWVhc3VyZSA9IGxpbmVWaWV3Lm1lYXN1cmUs
IG1hcHMgPSBtZWFzdXJlLm1hcHM7CisKKyAgICBmdW5jdGlvbiBmaW5kKHRleHROb2RlLCB0b3BO
b2RlLCBvZmZzZXQpIHsKKyAgICAgIGZvciAodmFyIGkgPSAtMTsgaSA8IChtYXBzID8gbWFwcy5s
ZW5ndGggOiAwKTsgaSsrKSB7CisgICAgICAgIHZhciBtYXAgPSBpIDwgMCA/IG1lYXN1cmUubWFw
IDogbWFwc1tpXTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXAubGVuZ3RoOyBqICs9
IDMpIHsKKyAgICAgICAgICB2YXIgY3VyTm9kZSA9IG1hcFtqICsgMl07CisgICAgICAgICAgaWYg
KGN1ck5vZGUgPT0gdGV4dE5vZGUgfHwgY3VyTm9kZSA9PSB0b3BOb2RlKSB7CisgICAgICAgICAg
ICB2YXIgbGluZSA9IGxpbmVObyhpIDwgMCA/IGxpbmVWaWV3LmxpbmUgOiBsaW5lVmlldy5yZXN0
W2ldKTsKKyAgICAgICAgICAgIHZhciBjaCA9IG1hcFtqXSArIG9mZnNldDsKKyAgICAgICAgICAg
IGlmIChvZmZzZXQgPCAwIHx8IGN1ck5vZGUgIT0gdGV4dE5vZGUpIGNoID0gbWFwW2ogKyAob2Zm
c2V0ID8gMSA6IDApXTsKKyAgICAgICAgICAgIHJldHVybiBQb3MobGluZSwgY2gpOworICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICB2YXIgZm91bmQgPSBmaW5kKHRl
eHROb2RlLCB0b3BOb2RlLCBvZmZzZXQpOworICAgIGlmIChmb3VuZCkgcmV0dXJuIGJhZFBvcyhm
b3VuZCwgYmFkKTsKKworICAgIC8vIEZJWE1FIHRoaXMgaXMgYWxsIHJlYWxseSBzaGFreS4gbWln
aHQgaGFuZGxlIHRoZSBmZXcgY2FzZXMgaXQgbmVlZHMgdG8gaGFuZGxlLCBidXQgbGlrZWx5IHRv
IGNhdXNlIHByb2JsZW1zCisgICAgZm9yICh2YXIgYWZ0ZXIgPSB0b3BOb2RlLm5leHRTaWJsaW5n
LCBkaXN0ID0gdGV4dE5vZGUgPyB0ZXh0Tm9kZS5ub2RlVmFsdWUubGVuZ3RoIC0gb2Zmc2V0IDog
MDsgYWZ0ZXI7IGFmdGVyID0gYWZ0ZXIubmV4dFNpYmxpbmcpIHsKKyAgICAgIGZvdW5kID0gZmlu
ZChhZnRlciwgYWZ0ZXIuZmlyc3RDaGlsZCwgMCk7CisgICAgICBpZiAoZm91bmQpCisgICAgICAg
IHJldHVybiBiYWRQb3MoUG9zKGZvdW5kLmxpbmUsIGZvdW5kLmNoIC0gZGlzdCksIGJhZCk7Cisg
ICAgICBlbHNlCisgICAgICAgIGRpc3QgKz0gYWZ0ZXIudGV4dENvbnRlbnQubGVuZ3RoOworICAg
IH0KKyAgICBmb3IgKHZhciBiZWZvcmUgPSB0b3BOb2RlLnByZXZpb3VzU2libGluZywgZGlzdCA9
IG9mZnNldDsgYmVmb3JlOyBiZWZvcmUgPSBiZWZvcmUucHJldmlvdXNTaWJsaW5nKSB7CisgICAg
ICBmb3VuZCA9IGZpbmQoYmVmb3JlLCBiZWZvcmUuZmlyc3RDaGlsZCwgLTEpOworICAgICAgaWYg
KGZvdW5kKQorICAgICAgICByZXR1cm4gYmFkUG9zKFBvcyhmb3VuZC5saW5lLCBmb3VuZC5jaCAr
IGRpc3QpLCBiYWQpOworICAgICAgZWxzZQorICAgICAgICBkaXN0ICs9IGFmdGVyLnRleHRDb250
ZW50Lmxlbmd0aDsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBkb21UZXh0QmV0d2VlbihjbSwg
ZnJvbSwgdG8sIGZyb21MaW5lLCB0b0xpbmUpIHsKKyAgICB2YXIgdGV4dCA9ICIiLCBjbG9zaW5n
ID0gZmFsc2UsIGxpbmVTZXAgPSBjbS5kb2MubGluZVNlcGFyYXRvcigpOworICAgIGZ1bmN0aW9u
IHJlY29nbml6ZU1hcmtlcihpZCkgeyByZXR1cm4gZnVuY3Rpb24obWFya2VyKSB7IHJldHVybiBt
YXJrZXIuaWQgPT0gaWQ7IH07IH0KKyAgICBmdW5jdGlvbiB3YWxrKG5vZGUpIHsKKyAgICAgIGlm
IChub2RlLm5vZGVUeXBlID09IDEpIHsKKyAgICAgICAgdmFyIGNtVGV4dCA9IG5vZGUuZ2V0QXR0
cmlidXRlKCJjbS10ZXh0Iik7CisgICAgICAgIGlmIChjbVRleHQgIT0gbnVsbCkgeworICAgICAg
ICAgIGlmIChjbVRleHQgPT0gIiIpIGNtVGV4dCA9IG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSgv
XHUyMDBiL2csICIiKTsKKyAgICAgICAgICB0ZXh0ICs9IGNtVGV4dDsKKyAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIG1hcmtlcklEID0gbm9kZS5nZXRBdHRyaWJ1dGUo
ImNtLW1hcmtlciIpLCByYW5nZTsKKyAgICAgICAgaWYgKG1hcmtlcklEKSB7CisgICAgICAgICAg
dmFyIGZvdW5kID0gY20uZmluZE1hcmtzKFBvcyhmcm9tTGluZSwgMCksIFBvcyh0b0xpbmUgKyAx
LCAwKSwgcmVjb2duaXplTWFya2VyKCttYXJrZXJJRCkpOworICAgICAgICAgIGlmIChmb3VuZC5s
ZW5ndGggJiYgKHJhbmdlID0gZm91bmRbMF0uZmluZCgpKSkKKyAgICAgICAgICAgIHRleHQgKz0g
Z2V0QmV0d2VlbihjbS5kb2MsIHJhbmdlLmZyb20sIHJhbmdlLnRvKS5qb2luKGxpbmVTZXApOwor
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1
dGUoImNvbnRlbnRlZGl0YWJsZSIpID09ICJmYWxzZSIpIHJldHVybjsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgd2Fs
ayhub2RlLmNoaWxkTm9kZXNbaV0pOworICAgICAgICBpZiAoL14ocHJlfGRpdnxwKSQvaS50ZXN0
KG5vZGUubm9kZU5hbWUpKQorICAgICAgICAgIGNsb3NpbmcgPSB0cnVlOworICAgICAgfSBlbHNl
IGlmIChub2RlLm5vZGVUeXBlID09IDMpIHsKKyAgICAgICAgdmFyIHZhbCA9IG5vZGUubm9kZVZh
bHVlOworICAgICAgICBpZiAoIXZhbCkgcmV0dXJuOworICAgICAgICBpZiAoY2xvc2luZykgewor
ICAgICAgICAgIHRleHQgKz0gbGluZVNlcDsKKyAgICAgICAgICBjbG9zaW5nID0gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgdGV4dCArPSB2YWw7CisgICAgICB9CisgICAgfQorICAgIGZvciAo
OzspIHsKKyAgICAgIHdhbGsoZnJvbSk7CisgICAgICBpZiAoZnJvbSA9PSB0bykgYnJlYWs7Cisg
ICAgICBmcm9tID0gZnJvbS5uZXh0U2libGluZzsKKyAgICB9CisgICAgcmV0dXJuIHRleHQ7Cisg
IH0KKworICBDb2RlTWlycm9yLmlucHV0U3R5bGVzID0geyJ0ZXh0YXJlYSI6IFRleHRhcmVhSW5w
dXQsICJjb250ZW50ZWRpdGFibGUiOiBDb250ZW50RWRpdGFibGVJbnB1dH07CisKICAgLy8gU0VM
RUNUSU9OIC8gQ1VSU09SCiAKICAgLy8gU2VsZWN0aW9uIG9iamVjdHMgYXJlIGltbXV0YWJsZS4g
QSBuZXcgb25lIGlzIGNyZWF0ZWQgZXZlcnkgdGltZQpAQCAtMTI0NCw0MCArMjI1OCwzMCBAQAog
CiAgIC8vIFNFTEVDVElPTiBEUkFXSU5HCiAKLSAgLy8gUmVkcmF3IHRoZSBzZWxlY3Rpb24gYW5k
L29yIGN1cnNvcgogICBmdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb24oY20pIHsKLSAgICB2YXIgZGlz
cGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKLSAgICB2YXIgY3VyRnJhZ21lbnQgPSBk
b2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgdmFyIHNlbEZyYWdtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgIGNtLmRpc3BsYXkuaW5wdXQu
c2hvd1NlbGVjdGlvbihjbS5kaXNwbGF5LmlucHV0LnByZXBhcmVTZWxlY3Rpb24oKSk7CisgIH0K
KworICBmdW5jdGlvbiBwcmVwYXJlU2VsZWN0aW9uKGNtLCBwcmltYXJ5KSB7CisgICAgdmFyIGRv
YyA9IGNtLmRvYywgcmVzdWx0ID0ge307CisgICAgdmFyIGN1ckZyYWdtZW50ID0gcmVzdWx0LmN1
cnNvcnMgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgdmFyIHNlbEZy
YWdtZW50ID0gcmVzdWx0LnNlbGVjdGlvbiA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21l
bnQoKTsKIAogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBp
KyspIHsKKyAgICAgIGlmIChwcmltYXJ5ID09PSBmYWxzZSAmJiBpID09IGRvYy5zZWwucHJpbUlu
ZGV4KSBjb250aW51ZTsKICAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2ldOwogICAg
ICAgdmFyIGNvbGxhcHNlZCA9IHJhbmdlLmVtcHR5KCk7CiAgICAgICBpZiAoY29sbGFwc2VkIHx8
IGNtLm9wdGlvbnMuc2hvd0N1cnNvcldoZW5TZWxlY3RpbmcpCi0gICAgICAgIGRyYXdTZWxlY3Rp
b25DdXJzb3IoY20sIHJhbmdlLCBjdXJGcmFnbWVudCk7CisgICAgICAgIGRyYXdTZWxlY3Rpb25D
dXJzb3IoY20sIHJhbmdlLmhlYWQsIGN1ckZyYWdtZW50KTsKICAgICAgIGlmICghY29sbGFwc2Vk
KQogICAgICAgICBkcmF3U2VsZWN0aW9uUmFuZ2UoY20sIHJhbmdlLCBzZWxGcmFnbWVudCk7CiAg
ICAgfQotCi0gICAgLy8gTW92ZSB0aGUgaGlkZGVuIHRleHRhcmVhIG5lYXIgdGhlIGN1cnNvciB0
byBwcmV2ZW50IHNjcm9sbGluZyBhcnRpZmFjdHMKLSAgICBpZiAoY20ub3B0aW9ucy5tb3ZlSW5w
dXRXaXRoQ3Vyc29yKSB7Ci0gICAgICB2YXIgaGVhZFBvcyA9IGN1cnNvckNvb3JkcyhjbSwgZG9j
LnNlbC5wcmltYXJ5KCkuaGVhZCwgImRpdiIpOwotICAgICAgdmFyIHdyYXBPZmYgPSBkaXNwbGF5
LndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGxpbmVPZmYgPSBkaXNwbGF5LmxpbmVE
aXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgICB2YXIgdG9wID0gTWF0aC5tYXgoMCwg
TWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCAtIDEwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRQb3MudG9wICsgbGluZU9mZi50b3AgLSB3cmFw
T2ZmLnRvcCkpOwotICAgICAgdmFyIGxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5
LndyYXBwZXIuY2xpZW50V2lkdGggLSAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVhZFBvcy5sZWZ0ICsgbGluZU9mZi5sZWZ0IC0gd3JhcE9mZi5sZWZ0KSk7Ci0g
ICAgICBkaXNwbGF5LmlucHV0RGl2LnN0eWxlLnRvcCA9IHRvcCArICJweCI7Ci0gICAgICBkaXNw
bGF5LmlucHV0RGl2LnN0eWxlLmxlZnQgPSBsZWZ0ICsgInB4IjsKLSAgICB9Ci0KLSAgICByZW1v
dmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LmN1cnNvckRpdiwgY3VyRnJhZ21lbnQpOwotICAgIHJl
bW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkuc2VsZWN0aW9uRGl2LCBzZWxGcmFnbWVudCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCiAgIC8vIERyYXdzIGEgY3Vyc29yIGZvciB0aGUgZ2l2
ZW4gcmFuZ2UKLSAgZnVuY3Rpb24gZHJhd1NlbGVjdGlvbkN1cnNvcihjbSwgcmFuZ2UsIG91dHB1
dCkgewotICAgIHZhciBwb3MgPSBjdXJzb3JDb29yZHMoY20sIHJhbmdlLmhlYWQsICJkaXYiKTsK
KyAgZnVuY3Rpb24gZHJhd1NlbGVjdGlvbkN1cnNvcihjbSwgaGVhZCwgb3V0cHV0KSB7CisgICAg
dmFyIHBvcyA9IGN1cnNvckNvb3JkcyhjbSwgaGVhZCwgImRpdiIsIG51bGwsIG51bGwsICFjbS5v
cHRpb25zLnNpbmdsZUN1cnNvckhlaWdodFBlckxpbmUpOwogCiAgICAgdmFyIGN1cnNvciA9IG91
dHB1dC5hcHBlbmRDaGlsZChlbHQoImRpdiIsICJcdTAwYTAiLCAiQ29kZU1pcnJvci1jdXJzb3Ii
KSk7CiAgICAgY3Vyc29yLnN0eWxlLmxlZnQgPSBwb3MubGVmdCArICJweCI7CkBAIC0xMjk4LDcg
KzIzMDIsOCBAQAogICBmdW5jdGlvbiBkcmF3U2VsZWN0aW9uUmFuZ2UoY20sIHJhbmdlLCBvdXRw
dXQpIHsKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKICAgICB2
YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgdmFy
IHBhZGRpbmcgPSBwYWRkaW5nSChjbS5kaXNwbGF5KSwgbGVmdFNpZGUgPSBwYWRkaW5nLmxlZnQs
IHJpZ2h0U2lkZSA9IGRpc3BsYXkubGluZVNwYWNlLm9mZnNldFdpZHRoIC0gcGFkZGluZy5yaWdo
dDsKKyAgICB2YXIgcGFkZGluZyA9IHBhZGRpbmdIKGNtLmRpc3BsYXkpLCBsZWZ0U2lkZSA9IHBh
ZGRpbmcubGVmdDsKKyAgICB2YXIgcmlnaHRTaWRlID0gTWF0aC5tYXgoZGlzcGxheS5zaXplcldp
ZHRoLCBkaXNwbGF5V2lkdGgoY20pIC0gZGlzcGxheS5zaXplci5vZmZzZXRMZWZ0KSAtIHBhZGRp
bmcucmlnaHQ7CiAKICAgICBmdW5jdGlvbiBhZGQobGVmdCwgdG9wLCB3aWR0aCwgYm90dG9tKSB7
CiAgICAgICBpZiAodG9wIDwgMCkgdG9wID0gMDsKQEAgLTEzNzksNiArMjM4NCw4IEBACiAgICAg
ICBkaXNwbGF5LmJsaW5rZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICAgZGlz
cGxheS5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eSA9IChvbiA9ICFvbikgPyAiIiA6ICJoaWRk
ZW4iOwogICAgICAgfSwgY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpOworICAgIGVsc2UgaWYg
KGNtLm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlIDwgMCkKKyAgICAgIGRpc3BsYXkuY3Vyc29yRGl2
LnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgfQogCiAgIC8vIEhJR0hMSUdIVCBXT1JL
RVIKQEAgLTEzOTQsMTggKzI0MDEsMjAgQEAKICAgICBpZiAoZG9jLmZyb250aWVyID49IGNtLmRp
c3BsYXkudmlld1RvKSByZXR1cm47CiAgICAgdmFyIGVuZCA9ICtuZXcgRGF0ZSArIGNtLm9wdGlv
bnMud29ya1RpbWU7CiAgICAgdmFyIHN0YXRlID0gY29weVN0YXRlKGRvYy5tb2RlLCBnZXRTdGF0
ZUJlZm9yZShjbSwgZG9jLmZyb250aWVyKSk7CisgICAgdmFyIGNoYW5nZWRMaW5lcyA9IFtdOwog
Ci0gICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CiAgICAgZG9jLml0ZXIoZG9jLmZyb250aWVy
LCBNYXRoLm1pbihkb2MuZmlyc3QgKyBkb2Muc2l6ZSwgY20uZGlzcGxheS52aWV3VG8gKyA1MDAp
LCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICBpZiAoZG9jLmZyb250aWVyID49IGNtLmRpc3BsYXku
dmlld0Zyb20pIHsgLy8gVmlzaWJsZQogICAgICAgICB2YXIgb2xkU3R5bGVzID0gbGluZS5zdHls
ZXM7CiAgICAgICAgIHZhciBoaWdobGlnaHRlZCA9IGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHN0
YXRlLCB0cnVlKTsKICAgICAgICAgbGluZS5zdHlsZXMgPSBoaWdobGlnaHRlZC5zdHlsZXM7Ci0g
ICAgICAgIGlmIChoaWdobGlnaHRlZC5jbGFzc2VzKSBsaW5lLnN0eWxlQ2xhc3NlcyA9IGhpZ2hs
aWdodGVkLmNsYXNzZXM7Ci0gICAgICAgIGVsc2UgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSBsaW5l
LnN0eWxlQ2xhc3NlcyA9IG51bGw7Ci0gICAgICAgIHZhciBpc2NoYW5nZSA9ICFvbGRTdHlsZXMg
fHwgb2xkU3R5bGVzLmxlbmd0aCAhPSBsaW5lLnN0eWxlcy5sZW5ndGg7CisgICAgICAgIHZhciBv
bGRDbHMgPSBsaW5lLnN0eWxlQ2xhc3NlcywgbmV3Q2xzID0gaGlnaGxpZ2h0ZWQuY2xhc3NlczsK
KyAgICAgICAgaWYgKG5ld0NscykgbGluZS5zdHlsZUNsYXNzZXMgPSBuZXdDbHM7CisgICAgICAg
IGVsc2UgaWYgKG9sZENscykgbGluZS5zdHlsZUNsYXNzZXMgPSBudWxsOworICAgICAgICB2YXIg
aXNjaGFuZ2UgPSAhb2xkU3R5bGVzIHx8IG9sZFN0eWxlcy5sZW5ndGggIT0gbGluZS5zdHlsZXMu
bGVuZ3RoIHx8CisgICAgICAgICAgb2xkQ2xzICE9IG5ld0NscyAmJiAoIW9sZENscyB8fCAhbmV3
Q2xzIHx8IG9sZENscy5iZ0NsYXNzICE9IG5ld0Nscy5iZ0NsYXNzIHx8IG9sZENscy50ZXh0Q2xh
c3MgIT0gbmV3Q2xzLnRleHRDbGFzcyk7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyAhaXNjaGFu
Z2UgJiYgaSA8IG9sZFN0eWxlcy5sZW5ndGg7ICsraSkgaXNjaGFuZ2UgPSBvbGRTdHlsZXNbaV0g
IT0gbGluZS5zdHlsZXNbaV07Ci0gICAgICAgIGlmIChpc2NoYW5nZSkgcmVnTGluZUNoYW5nZShj
bSwgZG9jLmZyb250aWVyLCAidGV4dCIpOworICAgICAgICBpZiAoaXNjaGFuZ2UpIGNoYW5nZWRM
aW5lcy5wdXNoKGRvYy5mcm9udGllcik7CiAgICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGNvcHlT
dGF0ZShkb2MubW9kZSwgc3RhdGUpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgcHJvY2Vzc0xp
bmUoY20sIGxpbmUudGV4dCwgc3RhdGUpOwpAQCAtMTQxNyw2ICsyNDI2LDkgQEAKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICB9CiAgICAgfSk7CisgICAgaWYgKGNoYW5nZWRMaW5lcy5sZW5n
dGgpIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgeworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBj
aGFuZ2VkTGluZXMubGVuZ3RoOyBpKyspCisgICAgICAgIHJlZ0xpbmVDaGFuZ2UoY20sIGNoYW5n
ZWRMaW5lc1tpXSwgInRleHQiKTsKICAgICB9KTsKICAgfQogCkBAIC0xNDcwLDEzICsyNDgyLDIx
IEBACiAgICAgcmV0dXJuIGRhdGE7CiAgIH0KIAorICBmdW5jdGlvbiBzY3JvbGxHYXAoY20pIHsg
cmV0dXJuIHNjcm9sbGVyR2FwIC0gY20uZGlzcGxheS5uYXRpdmVCYXJXaWR0aDsgfQorICBmdW5j
dGlvbiBkaXNwbGF5V2lkdGgoY20pIHsKKyAgICByZXR1cm4gY20uZGlzcGxheS5zY3JvbGxlci5j
bGllbnRXaWR0aCAtIHNjcm9sbEdhcChjbSkgLSBjbS5kaXNwbGF5LmJhcldpZHRoOworICB9Cisg
IGZ1bmN0aW9uIGRpc3BsYXlIZWlnaHQoY20pIHsKKyAgICByZXR1cm4gY20uZGlzcGxheS5zY3Jv
bGxlci5jbGllbnRIZWlnaHQgLSBzY3JvbGxHYXAoY20pIC0gY20uZGlzcGxheS5iYXJIZWlnaHQ7
CisgIH0KKwogICAvLyBFbnN1cmUgdGhlIGxpbmVWaWV3LndyYXBwaW5nLmhlaWdodHMgYXJyYXkg
aXMgcG9wdWxhdGVkLiBUaGlzIGlzCiAgIC8vIGFuIGFycmF5IG9mIGJvdHRvbSBvZmZzZXRzIGZv
ciB0aGUgbGluZXMgdGhhdCBtYWtlIHVwIGEgZHJhd24KICAgLy8gbGluZS4gV2hlbiBsaW5lV3Jh
cHBpbmcgaXMgb24sIHRoZXJlIG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmUKICAgLy8gaGVpZ2h0Lgog
ICBmdW5jdGlvbiBlbnN1cmVMaW5lSGVpZ2h0cyhjbSwgbGluZVZpZXcsIHJlY3QpIHsKICAgICB2
YXIgd3JhcHBpbmcgPSBjbS5vcHRpb25zLmxpbmVXcmFwcGluZzsKLSAgICB2YXIgY3VyV2lkdGgg
PSB3cmFwcGluZyAmJiBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoOworICAgIHZhciBj
dXJXaWR0aCA9IHdyYXBwaW5nICYmIGRpc3BsYXlXaWR0aChjbSk7CiAgICAgaWYgKCFsaW5lVmll
dy5tZWFzdXJlLmhlaWdodHMgfHwgd3JhcHBpbmcgJiYgbGluZVZpZXcubWVhc3VyZS53aWR0aCAh
PSBjdXJXaWR0aCkgewogICAgICAgdmFyIGhlaWdodHMgPSBsaW5lVmlldy5tZWFzdXJlLmhlaWdo
dHMgPSBbXTsKICAgICAgIGlmICh3cmFwcGluZykgewpAQCAtMTU0MiwxMCArMjU2MiwxMiBAQAog
ICBmdW5jdGlvbiBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmUpIHsKICAgICB2YXIgbGlu
ZU4gPSBsaW5lTm8obGluZSk7CiAgICAgdmFyIHZpZXcgPSBmaW5kVmlld0ZvckxpbmUoY20sIGxp
bmVOKTsKLSAgICBpZiAodmlldyAmJiAhdmlldy50ZXh0KQorICAgIGlmICh2aWV3ICYmICF2aWV3
LnRleHQpIHsKICAgICAgIHZpZXcgPSBudWxsOwotICAgIGVsc2UgaWYgKHZpZXcgJiYgdmlldy5j
aGFuZ2VzKQorICAgIH0gZWxzZSBpZiAodmlldyAmJiB2aWV3LmNoYW5nZXMpIHsKICAgICAgIHVw
ZGF0ZUxpbmVGb3JDaGFuZ2VzKGNtLCB2aWV3LCBsaW5lTiwgZ2V0RGltZW5zaW9ucyhjbSkpOwor
ICAgICAgY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlOworICAgIH0KICAgICBpZiAoIXZpZXcp
CiAgICAgICB2aWV3ID0gdXBkYXRlRXh0ZXJuYWxNZWFzdXJlbWVudChjbSwgbGluZSk7CiAKQEAg
LTE1NTksNyArMjU4MSw3IEBACiAKICAgLy8gR2l2ZW4gYSBwcmVwYXJlZCBtZWFzdXJlbWVudCBv
YmplY3QsIG1lYXN1cmVzIHRoZSBwb3NpdGlvbiBvZiBhbgogICAvLyBhY3R1YWwgY2hhcmFjdGVy
IChvciBmZXRjaGVzIGl0IGZyb20gdGhlIGNhY2hlKS4KLSAgZnVuY3Rpb24gbWVhc3VyZUNoYXJQ
cmVwYXJlZChjbSwgcHJlcGFyZWQsIGNoLCBiaWFzKSB7CisgIGZ1bmN0aW9uIG1lYXN1cmVDaGFy
UHJlcGFyZWQoY20sIHByZXBhcmVkLCBjaCwgYmlhcywgdmFySGVpZ2h0KSB7CiAgICAgaWYgKHBy
ZXBhcmVkLmJlZm9yZSkgY2ggPSAtMTsKICAgICB2YXIga2V5ID0gY2ggKyAoYmlhcyB8fCAiIiks
IGZvdW5kOwogICAgIGlmIChwcmVwYXJlZC5jYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CkBA
IC0xNTc0LDE0ICsyNTk2LDE0IEBACiAgICAgICBmb3VuZCA9IG1lYXN1cmVDaGFySW5uZXIoY20s
IHByZXBhcmVkLCBjaCwgYmlhcyk7CiAgICAgICBpZiAoIWZvdW5kLmJvZ3VzKSBwcmVwYXJlZC5j
YWNoZVtrZXldID0gZm91bmQ7CiAgICAgfQotICAgIHJldHVybiB7bGVmdDogZm91bmQubGVmdCwg
cmlnaHQ6IGZvdW5kLnJpZ2h0LCB0b3A6IGZvdW5kLnRvcCwgYm90dG9tOiBmb3VuZC5ib3R0b219
OworICAgIHJldHVybiB7bGVmdDogZm91bmQubGVmdCwgcmlnaHQ6IGZvdW5kLnJpZ2h0LAorICAg
ICAgICAgICAgdG9wOiB2YXJIZWlnaHQgPyBmb3VuZC5ydG9wIDogZm91bmQudG9wLAorICAgICAg
ICAgICAgYm90dG9tOiB2YXJIZWlnaHQgPyBmb3VuZC5yYm90dG9tIDogZm91bmQuYm90dG9tfTsK
ICAgfQogCiAgIHZhciBudWxsUmVjdCA9IHtsZWZ0OiAwLCByaWdodDogMCwgdG9wOiAwLCBib3R0
b206IDB9OwogCi0gIGZ1bmN0aW9uIG1lYXN1cmVDaGFySW5uZXIoY20sIHByZXBhcmVkLCBjaCwg
YmlhcykgewotICAgIHZhciBtYXAgPSBwcmVwYXJlZC5tYXA7Ci0KKyAgZnVuY3Rpb24gbm9kZUFu
ZE9mZnNldEluTGluZU1hcChtYXAsIGNoLCBiaWFzKSB7CiAgICAgdmFyIG5vZGUsIHN0YXJ0LCBl
bmQsIGNvbGxhcHNlOwogICAgIC8vIEZpcnN0LCBzZWFyY2ggdGhlIGxpbmUgbWFwIGZvciB0aGUg
dGV4dCBub2RlIGNvcnJlc3BvbmRpbmcgdG8sCiAgICAgLy8gb3IgY2xvc2VzdCB0bywgdGhlIHRh
cmdldCBjaGFyYWN0ZXIuCkBAIC0xNjE1LDIyICsyNjM3LDM1IEBACiAgICAgICAgIGJyZWFrOwog
ICAgICAgfQogICAgIH0KKyAgICByZXR1cm4ge25vZGU6IG5vZGUsIHN0YXJ0OiBzdGFydCwgZW5k
OiBlbmQsIGNvbGxhcHNlOiBjb2xsYXBzZSwgY292ZXJTdGFydDogbVN0YXJ0LCBjb3ZlckVuZDog
bUVuZH07CisgIH0KKworICBmdW5jdGlvbiBtZWFzdXJlQ2hhcklubmVyKGNtLCBwcmVwYXJlZCwg
Y2gsIGJpYXMpIHsKKyAgICB2YXIgcGxhY2UgPSBub2RlQW5kT2Zmc2V0SW5MaW5lTWFwKHByZXBh
cmVkLm1hcCwgY2gsIGJpYXMpOworICAgIHZhciBub2RlID0gcGxhY2Uubm9kZSwgc3RhcnQgPSBw
bGFjZS5zdGFydCwgZW5kID0gcGxhY2UuZW5kLCBjb2xsYXBzZSA9IHBsYWNlLmNvbGxhcHNlOwog
CiAgICAgdmFyIHJlY3Q7CiAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMykgeyAvLyBJZiBpdCBp
cyBhIHRleHQgbm9kZSwgdXNlIGEgcmFuZ2UgdG8gcmV0cmlldmUgdGhlIGNvb3JkaW5hdGVzLgot
ICAgICAgd2hpbGUgKHN0YXJ0ICYmIGlzRXh0ZW5kaW5nQ2hhcihwcmVwYXJlZC5saW5lLnRleHQu
Y2hhckF0KG1TdGFydCArIHN0YXJ0KSkpIC0tc3RhcnQ7Ci0gICAgICB3aGlsZSAobVN0YXJ0ICsg
ZW5kIDwgbUVuZCAmJiBpc0V4dGVuZGluZ0NoYXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdCht
U3RhcnQgKyBlbmQpKSkgKytlbmQ7Ci0gICAgICBpZiAoaWVfdXB0bzggJiYgc3RhcnQgPT0gMCAm
JiBlbmQgPT0gbUVuZCAtIG1TdGFydCkgewotICAgICAgICByZWN0ID0gbm9kZS5wYXJlbnROb2Rl
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgICAgfSBlbHNlIGlmIChpZSAmJiBjbS5vcHRp
b25zLmxpbmVXcmFwcGluZykgewotICAgICAgICB2YXIgcmVjdHMgPSByYW5nZShub2RlLCBzdGFy
dCwgZW5kKS5nZXRDbGllbnRSZWN0cygpOwotICAgICAgICBpZiAocmVjdHMubGVuZ3RoKQotICAg
ICAgICAgIHJlY3QgPSByZWN0c1tiaWFzID09ICJyaWdodCIgPyByZWN0cy5sZW5ndGggLSAxIDog
MF07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZWN0ID0gbnVsbFJlY3Q7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICByZWN0ID0gcmFuZ2Uobm9kZSwgc3RhcnQsIGVuZCkuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCkgfHwgbnVsbFJlY3Q7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkr
KykgeyAvLyBSZXRyeSBhIG1heGltdW0gb2YgNCB0aW1lcyB3aGVuIG5vbnNlbnNlIHJlY3Rhbmds
ZXMgYXJlIHJldHVybmVkCisgICAgICAgIHdoaWxlIChzdGFydCAmJiBpc0V4dGVuZGluZ0NoYXIo
cHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChwbGFjZS5jb3ZlclN0YXJ0ICsgc3RhcnQpKSkgLS1z
dGFydDsKKyAgICAgICAgd2hpbGUgKHBsYWNlLmNvdmVyU3RhcnQgKyBlbmQgPCBwbGFjZS5jb3Zl
ckVuZCAmJiBpc0V4dGVuZGluZ0NoYXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChwbGFjZS5j
b3ZlclN0YXJ0ICsgZW5kKSkpICsrZW5kOworICAgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8
IDkgJiYgc3RhcnQgPT0gMCAmJiBlbmQgPT0gcGxhY2UuY292ZXJFbmQgLSBwbGFjZS5jb3ZlclN0
YXJ0KSB7CisgICAgICAgICAgcmVjdCA9IG5vZGUucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKKyAgICAgICAgfSBlbHNlIGlmIChpZSAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGlu
ZykgeworICAgICAgICAgIHZhciByZWN0cyA9IHJhbmdlKG5vZGUsIHN0YXJ0LCBlbmQpLmdldENs
aWVudFJlY3RzKCk7CisgICAgICAgICAgaWYgKHJlY3RzLmxlbmd0aCkKKyAgICAgICAgICAgIHJl
Y3QgPSByZWN0c1tiaWFzID09ICJyaWdodCIgPyByZWN0cy5sZW5ndGggLSAxIDogMF07CisgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmVjdCA9IG51bGxSZWN0OworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgIHJlY3QgPSByYW5nZShub2RlLCBzdGFydCwgZW5kKS5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKSB8fCBudWxsUmVjdDsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVjdC5sZWZ0
IHx8IHJlY3QucmlnaHQgfHwgc3RhcnQgPT0gMCkgYnJlYWs7CisgICAgICAgIGVuZCA9IHN0YXJ0
OworICAgICAgICBzdGFydCA9IHN0YXJ0IC0gMTsKKyAgICAgICAgY29sbGFwc2UgPSAicmlnaHQi
OwogICAgICAgfQorICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSkgcmVjdCA9IG1heWJl
VXBkYXRlUmVjdEZvclpvb21pbmcoY20uZGlzcGxheS5tZWFzdXJlLCByZWN0KTsKICAgICB9IGVs
c2UgeyAvLyBJZiBpdCBpcyBhIHdpZGdldCwgc2ltcGx5IGdldCB0aGUgYm94IGZvciB0aGUgd2hv
bGUgd2lkZ2V0LgogICAgICAgaWYgKHN0YXJ0ID4gMCkgY29sbGFwc2UgPSBiaWFzID0gInJpZ2h0
IjsKICAgICAgIHZhciByZWN0czsKQEAgLTE2MzksNyArMjY3NCw3IEBACiAgICAgICBlbHNlCiAg
ICAgICAgIHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgIH0KLSAgICBp
ZiAoaWVfdXB0bzggJiYgIXN0YXJ0ICYmICghcmVjdCB8fCAhcmVjdC5sZWZ0ICYmICFyZWN0LnJp
Z2h0KSkgeworICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSAmJiAhc3RhcnQgJiYgKCFyZWN0
IHx8ICFyZWN0LmxlZnQgJiYgIXJlY3QucmlnaHQpKSB7CiAgICAgICB2YXIgclNwYW4gPSBub2Rl
LnBhcmVudE5vZGUuZ2V0Q2xpZW50UmVjdHMoKVswXTsKICAgICAgIGlmIChyU3BhbikKICAgICAg
ICAgcmVjdCA9IHtsZWZ0OiByU3Bhbi5sZWZ0LCByaWdodDogclNwYW4ubGVmdCArIGNoYXJXaWR0
aChjbS5kaXNwbGF5KSwgdG9wOiByU3Bhbi50b3AsIGJvdHRvbTogclNwYW4uYm90dG9tfTsKQEAg
LTE2NDcsMTggKzI2ODIsMzMgQEAKICAgICAgICAgcmVjdCA9IG51bGxSZWN0OwogICAgIH0KIAot
ICAgIHZhciB0b3AsIGJvdCA9IChyZWN0LmJvdHRvbSArIHJlY3QudG9wKSAvIDIgLSBwcmVwYXJl
ZC5yZWN0LnRvcDsKKyAgICB2YXIgcnRvcCA9IHJlY3QudG9wIC0gcHJlcGFyZWQucmVjdC50b3As
IHJib3QgPSByZWN0LmJvdHRvbSAtIHByZXBhcmVkLnJlY3QudG9wOworICAgIHZhciBtaWQgPSAo
cnRvcCArIHJib3QpIC8gMjsKICAgICB2YXIgaGVpZ2h0cyA9IHByZXBhcmVkLnZpZXcubWVhc3Vy
ZS5oZWlnaHRzOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVpZ2h0cy5sZW5ndGggLSAxOyBp
KyspCi0gICAgICBpZiAoYm90IDwgaGVpZ2h0c1tpXSkgYnJlYWs7Ci0gICAgdG9wID0gaSA/IGhl
aWdodHNbaSAtIDFdIDogMDsgYm90ID0gaGVpZ2h0c1tpXTsKKyAgICAgIGlmIChtaWQgPCBoZWln
aHRzW2ldKSBicmVhazsKKyAgICB2YXIgdG9wID0gaSA/IGhlaWdodHNbaSAtIDFdIDogMCwgYm90
ID0gaGVpZ2h0c1tpXTsKICAgICB2YXIgcmVzdWx0ID0ge2xlZnQ6IChjb2xsYXBzZSA9PSAicmln
aHQiID8gcmVjdC5yaWdodCA6IHJlY3QubGVmdCkgLSBwcmVwYXJlZC5yZWN0LmxlZnQsCiAgICAg
ICAgICAgICAgICAgICByaWdodDogKGNvbGxhcHNlID09ICJsZWZ0IiA/IHJlY3QubGVmdCA6IHJl
Y3QucmlnaHQpIC0gcHJlcGFyZWQucmVjdC5sZWZ0LAogICAgICAgICAgICAgICAgICAgdG9wOiB0
b3AsIGJvdHRvbTogYm90fTsKICAgICBpZiAoIXJlY3QubGVmdCAmJiAhcmVjdC5yaWdodCkgcmVz
dWx0LmJvZ3VzID0gdHJ1ZTsKKyAgICBpZiAoIWNtLm9wdGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0
UGVyTGluZSkgeyByZXN1bHQucnRvcCA9IHJ0b3A7IHJlc3VsdC5yYm90dG9tID0gcmJvdDsgfQor
CiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQogCisgIC8vIFdvcmsgYXJvdW5kIHByb2JsZW0gd2l0
aCBib3VuZGluZyBjbGllbnQgcmVjdHMgb24gcmFuZ2VzIGJlaW5nCisgIC8vIHJldHVybmVkIGlu
Y29ycmVjdGx5IHdoZW4gem9vbWVkIG9uIElFMTAgYW5kIGJlbG93LgorICBmdW5jdGlvbiBtYXli
ZVVwZGF0ZVJlY3RGb3Jab29taW5nKG1lYXN1cmUsIHJlY3QpIHsKKyAgICBpZiAoIXdpbmRvdy5z
Y3JlZW4gfHwgc2NyZWVuLmxvZ2ljYWxYRFBJID09IG51bGwgfHwKKyAgICAgICAgc2NyZWVuLmxv
Z2ljYWxYRFBJID09IHNjcmVlbi5kZXZpY2VYRFBJIHx8ICFoYXNCYWRab29tZWRSZWN0cyhtZWFz
dXJlKSkKKyAgICAgIHJldHVybiByZWN0OworICAgIHZhciBzY2FsZVggPSBzY3JlZW4ubG9naWNh
bFhEUEkgLyBzY3JlZW4uZGV2aWNlWERQSTsKKyAgICB2YXIgc2NhbGVZID0gc2NyZWVuLmxvZ2lj
YWxZRFBJIC8gc2NyZWVuLmRldmljZVlEUEk7CisgICAgcmV0dXJuIHtsZWZ0OiByZWN0LmxlZnQg
KiBzY2FsZVgsIHJpZ2h0OiByZWN0LnJpZ2h0ICogc2NhbGVYLAorICAgICAgICAgICAgdG9wOiBy
ZWN0LnRvcCAqIHNjYWxlWSwgYm90dG9tOiByZWN0LmJvdHRvbSAqIHNjYWxlWX07CisgIH0KKwog
ICBmdW5jdGlvbiBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlRm9yKGxpbmVWaWV3KSB7CiAgICAg
aWYgKGxpbmVWaWV3Lm1lYXN1cmUpIHsKICAgICAgIGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGUgPSB7
fTsKQEAgLTE2ODcsNyArMjczNyw4IEBACiAKICAgLy8gQ29udmVydHMgYSB7dG9wLCBib3R0b20s
IGxlZnQsIHJpZ2h0fSBib3ggZnJvbSBsaW5lLWxvY2FsCiAgIC8vIGNvb3JkaW5hdGVzIGludG8g
YW5vdGhlciBjb29yZGluYXRlIHN5c3RlbS4gQ29udGV4dCBtYXkgYmUgb25lIG9mCi0gIC8vICJs
aW5lIiwgImRpdiIgKGRpc3BsYXkubGluZURpdiksICJsb2NhbCIvbnVsbCAoZWRpdG9yKSwgb3Ig
InBhZ2UiLgorICAvLyAibGluZSIsICJkaXYiIChkaXNwbGF5LmxpbmVEaXYpLCAibG9jYWwiL251
bGwgKGVkaXRvciksICJ3aW5kb3ciLAorICAvLyBvciAicGFnZSIuCiAgIGZ1bmN0aW9uIGludG9D
b29yZFN5c3RlbShjbSwgbGluZU9iaiwgcmVjdCwgY29udGV4dCkgewogICAgIGlmIChsaW5lT2Jq
LndpZGdldHMpIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZU9iai53aWRnZXRzLmxlbmd0aDsgKytp
KSBpZiAobGluZU9iai53aWRnZXRzW2ldLmFib3ZlKSB7CiAgICAgICB2YXIgc2l6ZSA9IHdpZGdl
dEhlaWdodChsaW5lT2JqLndpZGdldHNbaV0pOwpAQCAtMTczNSwxMSArMjc4NiwxMSBAQAogICAv
LyBSZXR1cm5zIGEgYm94IGZvciBhIGdpdmVuIGN1cnNvciBwb3NpdGlvbiwgd2hpY2ggbWF5IGhh
dmUgYW4KICAgLy8gJ290aGVyJyBwcm9wZXJ0eSBjb250YWluaW5nIHRoZSBwb3NpdGlvbiBvZiB0
aGUgc2Vjb25kYXJ5IGN1cnNvcgogICAvLyBvbiBhIGJpZGkgYm91bmRhcnkuCi0gIGZ1bmN0aW9u
IGN1cnNvckNvb3JkcyhjbSwgcG9zLCBjb250ZXh0LCBsaW5lT2JqLCBwcmVwYXJlZE1lYXN1cmUp
IHsKKyAgZnVuY3Rpb24gY3Vyc29yQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmosIHBy
ZXBhcmVkTWVhc3VyZSwgdmFySGVpZ2h0KSB7CiAgICAgbGluZU9iaiA9IGxpbmVPYmogfHwgZ2V0
TGluZShjbS5kb2MsIHBvcy5saW5lKTsKICAgICBpZiAoIXByZXBhcmVkTWVhc3VyZSkgcHJlcGFy
ZWRNZWFzdXJlID0gcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lT2JqKTsKICAgICBmdW5j
dGlvbiBnZXQoY2gsIHJpZ2h0KSB7Ci0gICAgICB2YXIgbSA9IG1lYXN1cmVDaGFyUHJlcGFyZWQo
Y20sIHByZXBhcmVkTWVhc3VyZSwgY2gsIHJpZ2h0ID8gInJpZ2h0IiA6ICJsZWZ0Iik7CisgICAg
ICB2YXIgbSA9IG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgY2gsIHJp
Z2h0ID8gInJpZ2h0IiA6ICJsZWZ0IiwgdmFySGVpZ2h0KTsKICAgICAgIGlmIChyaWdodCkgbS5s
ZWZ0ID0gbS5yaWdodDsgZWxzZSBtLnJpZ2h0ID0gbS5sZWZ0OwogICAgICAgcmV0dXJuIGludG9D
b29yZFN5c3RlbShjbSwgbGluZU9iaiwgbSwgY29udGV4dCk7CiAgICAgfQpAQCAtMTg5MSwxMCAr
Mjk0MiwxMyBAQAogICAvLyBlcnJvci1wcm9uZSkuIEluc3RlYWQsIGRpc3BsYXkgdXBkYXRlcyBh
cmUgYmF0Y2hlZCBhbmQgdGhlbiBhbGwKICAgLy8gY29tYmluZWQgYW5kIGV4ZWN1dGVkIGF0IG9u
Y2UuCiAKKyAgdmFyIG9wZXJhdGlvbkdyb3VwID0gbnVsbDsKKwogICB2YXIgbmV4dE9wSWQgPSAw
OwogICAvLyBTdGFydCBhIG5ldyBvcGVyYXRpb24uCiAgIGZ1bmN0aW9uIHN0YXJ0T3BlcmF0aW9u
KGNtKSB7CiAgICAgY20uY3VyT3AgPSB7CisgICAgICBjbTogY20sCiAgICAgICB2aWV3Q2hhbmdl
ZDogZmFsc2UsICAgICAgLy8gRmxhZyB0aGF0IGluZGljYXRlcyB0aGF0IGxpbmVzIG1pZ2h0IG5l
ZWQgdG8gYmUgcmVkcmF3bgogICAgICAgc3RhcnRIZWlnaHQ6IGNtLmRvYy5oZWlnaHQsIC8vIFVz
ZWQgdG8gZGV0ZWN0IG5lZWQgdG8gdXBkYXRlIHNjcm9sbGJhcgogICAgICAgZm9yY2VVcGRhdGU6
IGZhbHNlLCAgICAgIC8vIFVzZWQgdG8gZm9yY2UgYSByZWRyYXcKQEAgLTE5MDIsNjAgKzI5NTYs
MTYwIEBACiAgICAgICB0eXBpbmc6IGZhbHNlLCAgICAgICAgICAgLy8gV2hldGhlciB0aGlzIHJl
c2V0IHNob3VsZCBiZSBjYXJlZnVsIHRvIGxlYXZlIGV4aXN0aW5nIHRleHQgKGZvciBjb21wb3Np
dGluZykKICAgICAgIGNoYW5nZU9ianM6IG51bGwsICAgICAgICAvLyBBY2N1bXVsYXRlZCBjaGFu
Z2VzLCBmb3IgZmlyaW5nIGNoYW5nZSBldmVudHMKICAgICAgIGN1cnNvckFjdGl2aXR5SGFuZGxl
cnM6IG51bGwsIC8vIFNldCBvZiBoYW5kbGVycyB0byBmaXJlIGN1cnNvckFjdGl2aXR5IG9uCisg
ICAgICBjdXJzb3JBY3Rpdml0eUNhbGxlZDogMCwgLy8gVHJhY2tzIHdoaWNoIGN1cnNvckFjdGl2
aXR5IGhhbmRsZXJzIGhhdmUgYmVlbiBjYWxsZWQgYWxyZWFkeQogICAgICAgc2VsZWN0aW9uQ2hh
bmdlZDogZmFsc2UsIC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBuZWVkcyB0byBiZSByZWRyYXdu
CiAgICAgICB1cGRhdGVNYXhMaW5lOiBmYWxzZSwgICAgLy8gU2V0IHdoZW4gdGhlIHdpZGVzdCBs
aW5lIG5lZWRzIHRvIGJlIGRldGVybWluZWQgYW5ldwogICAgICAgc2Nyb2xsTGVmdDogbnVsbCwg
c2Nyb2xsVG9wOiBudWxsLCAvLyBJbnRlcm1lZGlhdGUgc2Nyb2xsIHBvc2l0aW9uLCBub3QgcHVz
aGVkIHRvIERPTSB5ZXQKICAgICAgIHNjcm9sbFRvUG9zOiBudWxsLCAgICAgICAvLyBVc2VkIHRv
IHNjcm9sbCB0byBhIHNwZWNpZmljIHBvc2l0aW9uCisgICAgICBmb2N1czogZmFsc2UsCiAgICAg
ICBpZDogKytuZXh0T3BJZCAgICAgICAgICAgLy8gVW5pcXVlIElECiAgICAgfTsKLSAgICBpZiAo
IWRlbGF5ZWRDYWxsYmFja0RlcHRoKyspIGRlbGF5ZWRDYWxsYmFja3MgPSBbXTsKKyAgICBpZiAo
b3BlcmF0aW9uR3JvdXApIHsKKyAgICAgIG9wZXJhdGlvbkdyb3VwLm9wcy5wdXNoKGNtLmN1ck9w
KTsKKyAgICB9IGVsc2UgeworICAgICAgY20uY3VyT3Aub3duc0dyb3VwID0gb3BlcmF0aW9uR3Jv
dXAgPSB7CisgICAgICAgIG9wczogW2NtLmN1ck9wXSwKKyAgICAgICAgZGVsYXllZENhbGxiYWNr
czogW10KKyAgICAgIH07CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gZmlyZUNhbGxiYWNrc0Zv
ck9wcyhncm91cCkgeworICAgIC8vIENhbGxzIGRlbGF5ZWQgY2FsbGJhY2tzIGFuZCBjdXJzb3JB
Y3Rpdml0eSBoYW5kbGVycyB1bnRpbCBubworICAgIC8vIG5ldyBvbmVzIGFwcGVhcgorICAgIHZh
ciBjYWxsYmFja3MgPSBncm91cC5kZWxheWVkQ2FsbGJhY2tzLCBpID0gMDsKKyAgICBkbyB7Cisg
ICAgICBmb3IgKDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykKKyAgICAgICAgY2FsbGJhY2tz
W2ldLmNhbGwobnVsbCk7CisgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLm9wcy5sZW5n
dGg7IGorKykgeworICAgICAgICB2YXIgb3AgPSBncm91cC5vcHNbal07CisgICAgICAgIGlmIChv
cC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzKQorICAgICAgICAgIHdoaWxlIChvcC5jdXJzb3JBY3Rp
dml0eUNhbGxlZCA8IG9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMubGVuZ3RoKQorICAgICAgICAg
ICAgb3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVyc1tvcC5jdXJzb3JBY3Rpdml0eUNhbGxlZCsrXS5j
YWxsKG51bGwsIG9wLmNtKTsKKyAgICAgIH0KKyAgICB9IHdoaWxlIChpIDwgY2FsbGJhY2tzLmxl
bmd0aCk7CiAgIH0KIAogICAvLyBGaW5pc2ggYW4gb3BlcmF0aW9uLCB1cGRhdGluZyB0aGUgZGlz
cGxheSBhbmQgc2lnbmFsbGluZyBkZWxheWVkIGV2ZW50cwogICBmdW5jdGlvbiBlbmRPcGVyYXRp
b24oY20pIHsKLSAgICB2YXIgb3AgPSBjbS5jdXJPcCwgZG9jID0gY20uZG9jLCBkaXNwbGF5ID0g
Y20uZGlzcGxheTsKLSAgICBjbS5jdXJPcCA9IG51bGw7Ci0KKyAgICB2YXIgb3AgPSBjbS5jdXJP
cCwgZ3JvdXAgPSBvcC5vd25zR3JvdXA7CisgICAgaWYgKCFncm91cCkgcmV0dXJuOworCisgICAg
dHJ5IHsgZmlyZUNhbGxiYWNrc0Zvck9wcyhncm91cCk7IH0KKyAgICBmaW5hbGx5IHsKKyAgICAg
IG9wZXJhdGlvbkdyb3VwID0gbnVsbDsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAu
b3BzLmxlbmd0aDsgaSsrKQorICAgICAgICBncm91cC5vcHNbaV0uY20uY3VyT3AgPSBudWxsOwor
ICAgICAgZW5kT3BlcmF0aW9ucyhncm91cCk7CisgICAgfQorICB9CisKKyAgLy8gVGhlIERPTSB1
cGRhdGVzIGRvbmUgd2hlbiBhbiBvcGVyYXRpb24gZmluaXNoZXMgYXJlIGJhdGNoZWQgc28KKyAg
Ly8gdGhhdCB0aGUgbWluaW11bSBudW1iZXIgb2YgcmVsYXlvdXRzIGFyZSByZXF1aXJlZC4KKyAg
ZnVuY3Rpb24gZW5kT3BlcmF0aW9ucyhncm91cCkgeworICAgIHZhciBvcHMgPSBncm91cC5vcHM7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIC8vIFJlYWQgRE9NCisg
ICAgICBlbmRPcGVyYXRpb25fUjEob3BzW2ldKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9w
cy5sZW5ndGg7IGkrKykgLy8gV3JpdGUgRE9NIChtYXliZSkKKyAgICAgIGVuZE9wZXJhdGlvbl9X
MShvcHNbaV0pOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSAvLyBS
ZWFkIERPTQorICAgICAgZW5kT3BlcmF0aW9uX1IyKG9wc1tpXSk7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIC8vIFdyaXRlIERPTSAobWF5YmUpCisgICAgICBlbmRP
cGVyYXRpb25fVzIob3BzW2ldKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7
IGkrKykgLy8gUmVhZCBET00KKyAgICAgIGVuZE9wZXJhdGlvbl9maW5pc2gob3BzW2ldKTsKKyAg
fQorCisgIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbl9SMShvcCkgeworICAgIHZhciBjbSA9IG9wLmNt
LCBkaXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICBtYXliZUNsaXBTY3JvbGxiYXJzKGNtKTsKICAg
ICBpZiAob3AudXBkYXRlTWF4TGluZSkgZmluZE1heExpbmUoY20pOwogCi0gICAgLy8gSWYgaXQg
bG9va3MgbGlrZSBhbiB1cGRhdGUgbWlnaHQgYmUgbmVlZGVkLCBjYWxsIHVwZGF0ZURpc3BsYXkK
LSAgICBpZiAob3Audmlld0NoYW5nZWQgfHwgb3AuZm9yY2VVcGRhdGUgfHwgb3Auc2Nyb2xsVG9w
ICE9IG51bGwgfHwKLSAgICAgICAgb3Auc2Nyb2xsVG9Qb3MgJiYgKG9wLnNjcm9sbFRvUG9zLmZy
b20ubGluZSA8IGRpc3BsYXkudmlld0Zyb20gfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wLnNjcm9sbFRvUG9zLnRvLmxpbmUgPj0gZGlzcGxheS52aWV3VG8pIHx8Ci0gICAgICAgIGRp
c3BsYXkubWF4TGluZUNoYW5nZWQgJiYgY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKLSAgICAg
IHZhciB1cGRhdGVkID0gdXBkYXRlRGlzcGxheShjbSwge3RvcDogb3Auc2Nyb2xsVG9wLCBlbnN1
cmU6IG9wLnNjcm9sbFRvUG9zfSwgb3AuZm9yY2VVcGRhdGUpOwotICAgICAgaWYgKGNtLmRpc3Bs
YXkuc2Nyb2xsZXIub2Zmc2V0SGVpZ2h0KSBjbS5kb2Muc2Nyb2xsVG9wID0gY20uZGlzcGxheS5z
Y3JvbGxlci5zY3JvbGxUb3A7CisgICAgb3AubXVzdFVwZGF0ZSA9IG9wLnZpZXdDaGFuZ2VkIHx8
IG9wLmZvcmNlVXBkYXRlIHx8IG9wLnNjcm9sbFRvcCAhPSBudWxsIHx8CisgICAgICBvcC5zY3Jv
bGxUb1BvcyAmJiAob3Auc2Nyb2xsVG9Qb3MuZnJvbS5saW5lIDwgZGlzcGxheS52aWV3RnJvbSB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgIG9wLnNjcm9sbFRvUG9zLnRvLmxpbmUgPj0gZGlz
cGxheS52aWV3VG8pIHx8CisgICAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkICYmIGNtLm9wdGlv
bnMubGluZVdyYXBwaW5nOworICAgIG9wLnVwZGF0ZSA9IG9wLm11c3RVcGRhdGUgJiYKKyAgICAg
IG5ldyBEaXNwbGF5VXBkYXRlKGNtLCBvcC5tdXN0VXBkYXRlICYmIHt0b3A6IG9wLnNjcm9sbFRv
cCwgZW5zdXJlOiBvcC5zY3JvbGxUb1Bvc30sIG9wLmZvcmNlVXBkYXRlKTsKKyAgfQorCisgIGZ1
bmN0aW9uIGVuZE9wZXJhdGlvbl9XMShvcCkgeworICAgIG9wLnVwZGF0ZWREaXNwbGF5ID0gb3Au
bXVzdFVwZGF0ZSAmJiB1cGRhdGVEaXNwbGF5SWZOZWVkZWQob3AuY20sIG9wLnVwZGF0ZSk7Cisg
IH0KKworICBmdW5jdGlvbiBlbmRPcGVyYXRpb25fUjIob3ApIHsKKyAgICB2YXIgY20gPSBvcC5j
bSwgZGlzcGxheSA9IGNtLmRpc3BsYXk7CisgICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KSB1cGRh
dGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7CisKKyAgICBvcC5iYXJNZWFzdXJlID0gbWVhc3VyZUZv
clNjcm9sbGJhcnMoY20pOworCisgICAgLy8gSWYgdGhlIG1heCBsaW5lIGNoYW5nZWQgc2luY2Ug
aXQgd2FzIGxhc3QgbWVhc3VyZWQsIG1lYXN1cmUgaXQsCisgICAgLy8gYW5kIGVuc3VyZSB0aGUg
ZG9jdW1lbnQncyB3aWR0aCBtYXRjaGVzIGl0LgorICAgIC8vIHVwZGF0ZURpc3BsYXlfVzIgd2ls
bCB1c2UgdGhlc2UgcHJvcGVydGllcyB0byBkbyB0aGUgYWN0dWFsIHJlc2l6aW5nCisgICAgaWYg
KGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7Cisg
ICAgICBvcC5hZGp1c3RXaWR0aFRvID0gbWVhc3VyZUNoYXIoY20sIGRpc3BsYXkubWF4TGluZSwg
ZGlzcGxheS5tYXhMaW5lLnRleHQubGVuZ3RoKS5sZWZ0ICsgMzsKKyAgICAgIGNtLmRpc3BsYXku
c2l6ZXJXaWR0aCA9IG9wLmFkanVzdFdpZHRoVG87CisgICAgICBvcC5iYXJNZWFzdXJlLnNjcm9s
bFdpZHRoID0KKyAgICAgICAgTWF0aC5tYXgoZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwg
ZGlzcGxheS5zaXplci5vZmZzZXRMZWZ0ICsgb3AuYWRqdXN0V2lkdGhUbyArIHNjcm9sbEdhcChj
bSkgKyBjbS5kaXNwbGF5LmJhcldpZHRoKTsKKyAgICAgIG9wLm1heFNjcm9sbExlZnQgPSBNYXRo
Lm1heCgwLCBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQgKyBvcC5hZGp1c3RXaWR0aFRvIC0gZGlz
cGxheVdpZHRoKGNtKSk7CisgICAgfQorCisgICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5IHx8IG9w
LnNlbGVjdGlvbkNoYW5nZWQpCisgICAgICBvcC5wcmVwYXJlZFNlbGVjdGlvbiA9IGRpc3BsYXku
aW5wdXQucHJlcGFyZVNlbGVjdGlvbigpOworICB9CisKKyAgZnVuY3Rpb24gZW5kT3BlcmF0aW9u
X1cyKG9wKSB7CisgICAgdmFyIGNtID0gb3AuY207CisKKyAgICBpZiAob3AuYWRqdXN0V2lkdGhU
byAhPSBudWxsKSB7CisgICAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gb3Au
YWRqdXN0V2lkdGhUbyArICJweCI7CisgICAgICBpZiAob3AubWF4U2Nyb2xsTGVmdCA8IGNtLmRv
Yy5zY3JvbGxMZWZ0KQorICAgICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBNYXRoLm1pbihjbS5kaXNw
bGF5LnNjcm9sbGVyLnNjcm9sbExlZnQsIG9wLm1heFNjcm9sbExlZnQpLCB0cnVlKTsKKyAgICAg
IGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSBmYWxzZTsKICAgICB9Ci0gICAgLy8gSWYgbm8g
dXBkYXRlIHdhcyBydW4sIGJ1dCB0aGUgc2VsZWN0aW9uIGNoYW5nZWQsIHJlZHJhdyB0aGF0Lgot
ICAgIGlmICghdXBkYXRlZCAmJiBvcC5zZWxlY3Rpb25DaGFuZ2VkKSB1cGRhdGVTZWxlY3Rpb24o
Y20pOwotICAgIGlmICghdXBkYXRlZCAmJiBvcC5zdGFydEhlaWdodCAhPSBjbS5kb2MuaGVpZ2h0
KSB1cGRhdGVTY3JvbGxiYXJzKGNtKTsKKworICAgIGlmIChvcC5wcmVwYXJlZFNlbGVjdGlvbikK
KyAgICAgIGNtLmRpc3BsYXkuaW5wdXQuc2hvd1NlbGVjdGlvbihvcC5wcmVwYXJlZFNlbGVjdGlv
bik7CisgICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KQorICAgICAgc2V0RG9jdW1lbnRIZWlnaHQo
Y20sIG9wLmJhck1lYXN1cmUpOworICAgIGlmIChvcC51cGRhdGVkRGlzcGxheSB8fCBvcC5zdGFy
dEhlaWdodCAhPSBjbS5kb2MuaGVpZ2h0KQorICAgICAgdXBkYXRlU2Nyb2xsYmFycyhjbSwgb3Au
YmFyTWVhc3VyZSk7CisKKyAgICBpZiAob3Auc2VsZWN0aW9uQ2hhbmdlZCkgcmVzdGFydEJsaW5r
KGNtKTsKKworICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkICYmIG9wLnVwZGF0ZUlucHV0KQorICAg
ICAgY20uZGlzcGxheS5pbnB1dC5yZXNldChvcC50eXBpbmcpOworICAgIGlmIChvcC5mb2N1cyAm
JiBvcC5mb2N1cyA9PSBhY3RpdmVFbHQoKSkgZW5zdXJlRm9jdXMob3AuY20pOworICB9CisKKyAg
ZnVuY3Rpb24gZW5kT3BlcmF0aW9uX2ZpbmlzaChvcCkgeworICAgIHZhciBjbSA9IG9wLmNtLCBk
aXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jOworCisgICAgaWYgKG9wLnVwZGF0ZWRE
aXNwbGF5KSBwb3N0VXBkYXRlRGlzcGxheShjbSwgb3AudXBkYXRlKTsKIAogICAgIC8vIEFib3J0
IG1vdXNlIHdoZWVsIGRlbHRhIG1lYXN1cmVtZW50LCB3aGVuIHNjcm9sbGluZyBleHBsaWNpdGx5
CiAgICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggIT0gbnVsbCAmJiAob3Auc2Nyb2xsVG9wICE9
IG51bGwgfHwgb3Auc2Nyb2xsTGVmdCAhPSBudWxsIHx8IG9wLnNjcm9sbFRvUG9zKSkKICAgICAg
IGRpc3BsYXkud2hlZWxTdGFydFggPSBkaXNwbGF5LndoZWVsU3RhcnRZID0gbnVsbDsKIAogICAg
IC8vIFByb3BhZ2F0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRvIHRoZSBhY3R1YWwgRE9NIHNjcm9s
bGVyCi0gICAgaWYgKG9wLnNjcm9sbFRvcCAhPSBudWxsICYmIGRpc3BsYXkuc2Nyb2xsZXIuc2Ny
b2xsVG9wICE9IG9wLnNjcm9sbFRvcCkgewotICAgICAgdmFyIHRvcCA9IE1hdGgubWF4KDAsIE1h
dGgubWluKGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gZGlzcGxheS5zY3JvbGxlci5j
bGllbnRIZWlnaHQsIG9wLnNjcm9sbFRvcCkpOwotICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3Jv
bGxUb3AgPSBkaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wID0gZG9jLnNjcm9sbFRvcCA9IHRv
cDsKLSAgICB9Ci0gICAgaWYgKG9wLnNjcm9sbExlZnQgIT0gbnVsbCAmJiBkaXNwbGF5LnNjcm9s
bGVyLnNjcm9sbExlZnQgIT0gb3Auc2Nyb2xsTGVmdCkgewotICAgICAgdmFyIGxlZnQgPSBNYXRo
Lm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoIC0gZGlzcGxheS5z
Y3JvbGxlci5jbGllbnRXaWR0aCwgb3Auc2Nyb2xsTGVmdCkpOwotICAgICAgZGlzcGxheS5zY3Jv
bGxlci5zY3JvbGxMZWZ0ID0gZGlzcGxheS5zY3JvbGxiYXJILnNjcm9sbExlZnQgPSBkb2Muc2Ny
b2xsTGVmdCA9IGxlZnQ7CisgICAgaWYgKG9wLnNjcm9sbFRvcCAhPSBudWxsICYmIChkaXNwbGF5
LnNjcm9sbGVyLnNjcm9sbFRvcCAhPSBvcC5zY3JvbGxUb3AgfHwgb3AuZm9yY2VTY3JvbGwpKSB7
CisgICAgICBkb2Muc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS5zY3Jv
bGxlci5zY3JvbGxIZWlnaHQgLSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCwgb3Auc2Ny
b2xsVG9wKSk7CisgICAgICBkaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKGRvYy5zY3Jv
bGxUb3ApOworICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSBkb2Muc2Nyb2xsVG9w
OworICAgIH0KKyAgICBpZiAob3Auc2Nyb2xsTGVmdCAhPSBudWxsICYmIChkaXNwbGF5LnNjcm9s
bGVyLnNjcm9sbExlZnQgIT0gb3Auc2Nyb2xsTGVmdCB8fCBvcC5mb3JjZVNjcm9sbCkpIHsKKyAg
ICAgIGRvYy5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS5zY3JvbGxl
ci5zY3JvbGxXaWR0aCAtIGRpc3BsYXlXaWR0aChjbSksIG9wLnNjcm9sbExlZnQpKTsKKyAgICAg
IGRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxMZWZ0KGRvYy5zY3JvbGxMZWZ0KTsKKyAgICAg
IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IGRvYy5zY3JvbGxMZWZ0OwogICAgICAgYWxp
Z25Ib3Jpem9udGFsbHkoY20pOwogICAgIH0KICAgICAvLyBJZiB3ZSBuZWVkIHRvIHNjcm9sbCBh
IHNwZWNpZmljIHBvc2l0aW9uIGludG8gdmlldywgZG8gc28uCiAgICAgaWYgKG9wLnNjcm9sbFRv
UG9zKSB7Ci0gICAgICB2YXIgY29vcmRzID0gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIGNsaXBQb3Mo
Y20uZG9jLCBvcC5zY3JvbGxUb1Bvcy5mcm9tKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGlwUG9zKGNtLmRvYywgb3Auc2Nyb2xsVG9Qb3MudG8pLCBvcC5zY3JvbGxU
b1Bvcy5tYXJnaW4pOworICAgICAgdmFyIGNvb3JkcyA9IHNjcm9sbFBvc0ludG9WaWV3KGNtLCBj
bGlwUG9zKGRvYywgb3Auc2Nyb2xsVG9Qb3MuZnJvbSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xpcFBvcyhkb2MsIG9wLnNjcm9sbFRvUG9zLnRvKSwgb3Auc2Nyb2xs
VG9Qb3MubWFyZ2luKTsKICAgICAgIGlmIChvcC5zY3JvbGxUb1Bvcy5pc0N1cnNvciAmJiBjbS5z
dGF0ZS5mb2N1c2VkKSBtYXliZVNjcm9sbFdpbmRvdyhjbSwgY29vcmRzKTsKICAgICB9CiAKLSAg
ICBpZiAob3Auc2VsZWN0aW9uQ2hhbmdlZCkgcmVzdGFydEJsaW5rKGNtKTsKLQotICAgIGlmIChj
bS5zdGF0ZS5mb2N1c2VkICYmIG9wLnVwZGF0ZUlucHV0KQotICAgICAgcmVzZXRJbnB1dChjbSwg
b3AudHlwaW5nKTsKLQogICAgIC8vIEZpcmUgZXZlbnRzIGZvciBtYXJrZXJzIHRoYXQgYXJlIGhp
ZGRlbi91bmlkZGVuIGJ5IGVkaXRpbmcgb3IKICAgICAvLyB1bmRvaW5nCiAgICAgdmFyIGhpZGRl
biA9IG9wLm1heWJlSGlkZGVuTWFya2VycywgdW5oaWRkZW4gPSBvcC5tYXliZVVuaGlkZGVuTWFy
a2VyczsKQEAgLTE5NjQsMTggKzMxMTgsMTQgQEAKICAgICBpZiAodW5oaWRkZW4pIGZvciAodmFy
IGkgPSAwOyBpIDwgdW5oaWRkZW4ubGVuZ3RoOyArK2kpCiAgICAgICBpZiAodW5oaWRkZW5baV0u
bGluZXMubGVuZ3RoKSBzaWduYWwodW5oaWRkZW5baV0sICJ1bmhpZGUiKTsKIAotICAgIHZhciBk
ZWxheWVkOwotICAgIGlmICghLS1kZWxheWVkQ2FsbGJhY2tEZXB0aCkgewotICAgICAgZGVsYXll
ZCA9IGRlbGF5ZWRDYWxsYmFja3M7Ci0gICAgICBkZWxheWVkQ2FsbGJhY2tzID0gbnVsbDsKLSAg
ICB9CisgICAgaWYgKGRpc3BsYXkud3JhcHBlci5vZmZzZXRIZWlnaHQpCisgICAgICBkb2Muc2Ny
b2xsVG9wID0gY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7CisKICAgICAvLyBGaXJlIGNo
YW5nZSBldmVudHMsIGFuZCBkZWxheWVkIGV2ZW50IGhhbmRsZXJzCiAgICAgaWYgKG9wLmNoYW5n
ZU9ianMpCiAgICAgICBzaWduYWwoY20sICJjaGFuZ2VzIiwgY20sIG9wLmNoYW5nZU9ianMpOwot
ICAgIGlmIChkZWxheWVkKSBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGF5ZWQubGVuZ3RoOyArK2kp
IGRlbGF5ZWRbaV0oKTsKLSAgICBpZiAob3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycykKLSAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgb3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycy5sZW5ndGg7IGkr
KykKLSAgICAgICAgb3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVyc1tpXShjbSk7CisgICAgaWYgKG9w
LnVwZGF0ZSkKKyAgICAgIG9wLnVwZGF0ZS5maW5pc2goKTsKICAgfQogCiAgIC8vIFJ1biB0aGUg
Z2l2ZW4gZnVuY3Rpb24gaW4gYW4gb3BlcmF0aW9uCkBAIC0yMjAxLDE1MiArMzM1MSw2IEBACiAg
ICAgcmV0dXJuIGRpcnR5OwogICB9CiAKLSAgLy8gSU5QVVQgSEFORExJTkcKLQotICAvLyBQb2xs
IGZvciBpbnB1dCBjaGFuZ2VzLCB1c2luZyB0aGUgbm9ybWFsIHJhdGUgb2YgcG9sbGluZy4gVGhp
cwotICAvLyBydW5zIGFzIGxvbmcgYXMgdGhlIGVkaXRvciBpcyBmb2N1c2VkLgotICBmdW5jdGlv
biBzbG93UG9sbChjbSkgewotICAgIGlmIChjbS5kaXNwbGF5LnBvbGxpbmdGYXN0KSByZXR1cm47
Ci0gICAgY20uZGlzcGxheS5wb2xsLnNldChjbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgZnVuY3Rp
b24oKSB7Ci0gICAgICByZWFkSW5wdXQoY20pOwotICAgICAgaWYgKGNtLnN0YXRlLmZvY3VzZWQp
IHNsb3dQb2xsKGNtKTsKLSAgICB9KTsKLSAgfQotCi0gIC8vIFdoZW4gYW4gZXZlbnQgaGFzIGp1
c3QgY29tZSBpbiB0aGF0IGlzIGxpa2VseSB0byBhZGQgb3IgY2hhbmdlCi0gIC8vIHNvbWV0aGlu
ZyBpbiB0aGUgaW5wdXQgdGV4dGFyZWEsIHdlIHBvbGwgZmFzdGVyLCB0byBlbnN1cmUgdGhhdAot
ICAvLyB0aGUgY2hhbmdlIGFwcGVhcnMgb24gdGhlIHNjcmVlbiBxdWlja2x5LgotICBmdW5jdGlv
biBmYXN0UG9sbChjbSkgewotICAgIHZhciBtaXNzZWQgPSBmYWxzZTsKLSAgICBjbS5kaXNwbGF5
LnBvbGxpbmdGYXN0ID0gdHJ1ZTsKLSAgICBmdW5jdGlvbiBwKCkgewotICAgICAgdmFyIGNoYW5n
ZWQgPSByZWFkSW5wdXQoY20pOwotICAgICAgaWYgKCFjaGFuZ2VkICYmICFtaXNzZWQpIHttaXNz
ZWQgPSB0cnVlOyBjbS5kaXNwbGF5LnBvbGwuc2V0KDYwLCBwKTt9Ci0gICAgICBlbHNlIHtjbS5k
aXNwbGF5LnBvbGxpbmdGYXN0ID0gZmFsc2U7IHNsb3dQb2xsKGNtKTt9Ci0gICAgfQotICAgIGNt
LmRpc3BsYXkucG9sbC5zZXQoMjAsIHApOwotICB9Ci0KLSAgLy8gUmVhZCBpbnB1dCBmcm9tIHRo
ZSB0ZXh0YXJlYSwgYW5kIHVwZGF0ZSB0aGUgZG9jdW1lbnQgdG8gbWF0Y2guCi0gIC8vIFdoZW4g
c29tZXRoaW5nIGlzIHNlbGVjdGVkLCBpdCBpcyBwcmVzZW50IGluIHRoZSB0ZXh0YXJlYSwgYW5k
Ci0gIC8vIHNlbGVjdGVkICh1bmxlc3MgaXQgaXMgaHVnZSwgaW4gd2hpY2ggY2FzZSBhIHBsYWNl
aG9sZGVyIGlzCi0gIC8vIHVzZWQpLiBXaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIHRoZSBjdXJz
b3Igc2l0cyBhZnRlciBwcmV2aW91c2x5Ci0gIC8vIHNlZW4gdGV4dCAoY2FuIGJlIGVtcHR5KSwg
d2hpY2ggaXMgc3RvcmVkIGluIHByZXZJbnB1dCAod2UgbXVzdAotICAvLyBub3QgcmVzZXQgdGhl
IHRleHRhcmVhIHdoZW4gdHlwaW5nLCBiZWNhdXNlIHRoYXQgYnJlYWtzIElNRSkuCi0gIGZ1bmN0
aW9uIHJlYWRJbnB1dChjbSkgewotICAgIHZhciBpbnB1dCA9IGNtLmRpc3BsYXkuaW5wdXQsIHBy
ZXZJbnB1dCA9IGNtLmRpc3BsYXkucHJldklucHV0LCBkb2MgPSBjbS5kb2M7Ci0gICAgLy8gU2lu
Y2UgdGhpcyBpcyBjYWxsZWQgYSAqbG90KiwgdHJ5IHRvIGJhaWwgb3V0IGFzIGNoZWFwbHkgYXMK
LSAgICAvLyBwb3NzaWJsZSB3aGVuIGl0IGlzIGNsZWFyIHRoYXQgbm90aGluZyBoYXBwZW5lZC4g
aGFzU2VsZWN0aW9uCi0gICAgLy8gd2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIGEgbG90
IG9mIHRleHQgaW4gdGhlIHRleHRhcmVhLAotICAgIC8vIGluIHdoaWNoIGNhc2UgcmVhZGluZyBp
dHMgdmFsdWUgd291bGQgYmUgZXhwZW5zaXZlLgotICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCB8
fCAoaGFzU2VsZWN0aW9uKGlucHV0KSAmJiAhcHJldklucHV0KSB8fCBpc1JlYWRPbmx5KGNtKSB8
fCBjbS5vcHRpb25zLmRpc2FibGVJbnB1dCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBT
ZWUgcGFzdGUgaGFuZGxlciBmb3IgbW9yZSBvbiB0aGUgZmFrZWRMYXN0Q2hhciBrbHVkZ2UKLSAg
ICBpZiAoY20uc3RhdGUucGFzdGVJbmNvbWluZyAmJiBjbS5zdGF0ZS5mYWtlZExhc3RDaGFyKSB7
Ci0gICAgICBpbnB1dC52YWx1ZSA9IGlucHV0LnZhbHVlLnN1YnN0cmluZygwLCBpbnB1dC52YWx1
ZS5sZW5ndGggLSAxKTsKLSAgICAgIGNtLnN0YXRlLmZha2VkTGFzdENoYXIgPSBmYWxzZTsKLSAg
ICB9Ci0gICAgdmFyIHRleHQgPSBpbnB1dC52YWx1ZTsKLSAgICAvLyBJZiBub3RoaW5nIGNoYW5n
ZWQsIGJhaWwuCi0gICAgaWYgKHRleHQgPT0gcHJldklucHV0ICYmICFjbS5zb21ldGhpbmdTZWxl
Y3RlZCgpKSByZXR1cm4gZmFsc2U7Ci0gICAgLy8gV29yayBhcm91bmQgbm9uc2Vuc2ljYWwgc2Vs
ZWN0aW9uIHJlc2V0dGluZyBpbiBJRTkvMTAKLSAgICBpZiAoaWUgJiYgIWllX3VwdG84ICYmIGNt
LmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPT09IHRleHQpIHsKLSAgICAgIHJlc2V0SW5wdXQo
Y20pOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHZhciB3aXRoT3AgPSAhY20u
Y3VyT3A7Ci0gICAgaWYgKHdpdGhPcCkgc3RhcnRPcGVyYXRpb24oY20pOwotICAgIGNtLmRpc3Bs
YXkuc2hpZnQgPSBmYWxzZTsKLQotICAgIGlmICh0ZXh0LmNoYXJDb2RlQXQoMCkgPT0gMHgyMDBi
ICYmIGRvYy5zZWwgPT0gY20uZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSAmJiAhcHJldklucHV0
KQotICAgICAgcHJldklucHV0ID0gIlx1MjAwYiI7Ci0gICAgLy8gRmluZCB0aGUgcGFydCBvZiB0
aGUgaW5wdXQgdGhhdCBpcyBhY3R1YWxseSBuZXcKLSAgICB2YXIgc2FtZSA9IDAsIGwgPSBNYXRo
Lm1pbihwcmV2SW5wdXQubGVuZ3RoLCB0ZXh0Lmxlbmd0aCk7Ci0gICAgd2hpbGUgKHNhbWUgPCBs
ICYmIHByZXZJbnB1dC5jaGFyQ29kZUF0KHNhbWUpID09IHRleHQuY2hhckNvZGVBdChzYW1lKSkg
KytzYW1lOwotICAgIHZhciBpbnNlcnRlZCA9IHRleHQuc2xpY2Uoc2FtZSksIHRleHRMaW5lcyA9
IHNwbGl0TGluZXMoaW5zZXJ0ZWQpOwotCi0gICAgLy8gV2hlbiBwYXNpbmcgTiBsaW5lcyBpbnRv
IE4gc2VsZWN0aW9ucywgaW5zZXJ0IG9uZSBsaW5lIHBlciBzZWxlY3Rpb24KLSAgICB2YXIgbXVs
dGlQYXN0ZSA9IGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgJiYgdGV4dExpbmVzLmxlbmd0aCA+IDEg
JiYgZG9jLnNlbC5yYW5nZXMubGVuZ3RoID09IHRleHRMaW5lcy5sZW5ndGg7Ci0KLSAgICAvLyBO
b3JtYWwgYmVoYXZpb3IgaXMgdG8gaW5zZXJ0IHRoZSBuZXcgdGV4dCBpbnRvIGV2ZXJ5IHNlbGVj
dGlvbgotICAgIGZvciAodmFyIGkgPSBkb2Muc2VsLnJhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7
IGktLSkgewotICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5yYW5nZXNbaV07Ci0gICAgICB2YXIg
ZnJvbSA9IHJhbmdlLmZyb20oKSwgdG8gPSByYW5nZS50bygpOwotICAgICAgLy8gSGFuZGxlIGRl
bGV0aW9uCi0gICAgICBpZiAoc2FtZSA8IHByZXZJbnB1dC5sZW5ndGgpCi0gICAgICAgIGZyb20g
PSBQb3MoZnJvbS5saW5lLCBmcm9tLmNoIC0gKHByZXZJbnB1dC5sZW5ndGggLSBzYW1lKSk7Ci0g
ICAgICAvLyBIYW5kbGUgb3ZlcndyaXRlCi0gICAgICBlbHNlIGlmIChjbS5zdGF0ZS5vdmVyd3Jp
dGUgJiYgcmFuZ2UuZW1wdHkoKSAmJiAhY20uc3RhdGUucGFzdGVJbmNvbWluZykKLSAgICAgICAg
dG8gPSBQb3ModG8ubGluZSwgTWF0aC5taW4oZ2V0TGluZShkb2MsIHRvLmxpbmUpLnRleHQubGVu
Z3RoLCB0by5jaCArIGxzdCh0ZXh0TGluZXMpLmxlbmd0aCkpOwotICAgICAgdmFyIHVwZGF0ZUlu
cHV0ID0gY20uY3VyT3AudXBkYXRlSW5wdXQ7Ci0gICAgICB2YXIgY2hhbmdlRXZlbnQgPSB7ZnJv
bTogZnJvbSwgdG86IHRvLCB0ZXh0OiBtdWx0aVBhc3RlID8gW3RleHRMaW5lc1tpXV0gOiB0ZXh0
TGluZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBjbS5zdGF0ZS5wYXN0ZUlu
Y29taW5nID8gInBhc3RlIiA6IGNtLnN0YXRlLmN1dEluY29taW5nID8gImN1dCIgOiAiK2lucHV0
In07Ci0gICAgICBtYWtlQ2hhbmdlKGNtLmRvYywgY2hhbmdlRXZlbnQpOwotICAgICAgc2lnbmFs
TGF0ZXIoY20sICJpbnB1dFJlYWQiLCBjbSwgY2hhbmdlRXZlbnQpOwotICAgICAgLy8gV2hlbiBh
biAnZWxlY3RyaWMnIGNoYXJhY3RlciBpcyBpbnNlcnRlZCwgaW1tZWRpYXRlbHkgdHJpZ2dlciBh
IHJlaW5kZW50Ci0gICAgICBpZiAoaW5zZXJ0ZWQgJiYgIWNtLnN0YXRlLnBhc3RlSW5jb21pbmcg
JiYgY20ub3B0aW9ucy5lbGVjdHJpY0NoYXJzICYmCi0gICAgICAgICAgY20ub3B0aW9ucy5zbWFy
dEluZGVudCAmJiByYW5nZS5oZWFkLmNoIDwgMTAwICYmCi0gICAgICAgICAgKCFpIHx8IGRvYy5z
ZWwucmFuZ2VzW2kgLSAxXS5oZWFkLmxpbmUgIT0gcmFuZ2UuaGVhZC5saW5lKSkgewotICAgICAg
ICB2YXIgbW9kZSA9IGNtLmdldE1vZGVBdChyYW5nZS5oZWFkKTsKLSAgICAgICAgaWYgKG1vZGUu
ZWxlY3RyaWNDaGFycykgewotICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbW9kZS5lbGVj
dHJpY0NoYXJzLmxlbmd0aDsgaisrKQotICAgICAgICAgICAgaWYgKGluc2VydGVkLmluZGV4T2Yo
bW9kZS5lbGVjdHJpY0NoYXJzLmNoYXJBdChqKSkgPiAtMSkgewotICAgICAgICAgICAgICBpbmRl
bnRMaW5lKGNtLCByYW5nZS5oZWFkLmxpbmUsICJzbWFydCIpOwotICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChtb2RlLmVsZWN0cmljSW5wdXQp
IHsKLSAgICAgICAgICB2YXIgZW5kID0gY2hhbmdlRW5kKGNoYW5nZUV2ZW50KTsKLSAgICAgICAg
ICBpZiAobW9kZS5lbGVjdHJpY0lucHV0LnRlc3QoZ2V0TGluZShkb2MsIGVuZC5saW5lKS50ZXh0
LnNsaWNlKDAsIGVuZC5jaCkpKQotICAgICAgICAgICAgaW5kZW50TGluZShjbSwgcmFuZ2UuaGVh
ZC5saW5lLCAic21hcnQiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbnN1cmVD
dXJzb3JWaXNpYmxlKGNtKTsKLSAgICBjbS5jdXJPcC51cGRhdGVJbnB1dCA9IHVwZGF0ZUlucHV0
OwotICAgIGNtLmN1ck9wLnR5cGluZyA9IHRydWU7Ci0KLSAgICAvLyBEb24ndCBsZWF2ZSBsb25n
IHRleHQgaW4gdGhlIHRleHRhcmVhLCBzaW5jZSBpdCBtYWtlcyBmdXJ0aGVyIHBvbGxpbmcgc2xv
dwotICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDEwMDAgfHwgdGV4dC5pbmRleE9mKCJcbiIpID4gLTEp
IGlucHV0LnZhbHVlID0gY20uZGlzcGxheS5wcmV2SW5wdXQgPSAiIjsKLSAgICBlbHNlIGNtLmRp
c3BsYXkucHJldklucHV0ID0gdGV4dDsKLSAgICBpZiAod2l0aE9wKSBlbmRPcGVyYXRpb24oY20p
OwotICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSBjbS5zdGF0ZS5jdXRJbmNvbWluZyA9IGZh
bHNlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gUmVzZXQgdGhlIGlucHV0IHRvIGNv
cnJlc3BvbmQgdG8gdGhlIHNlbGVjdGlvbiAob3IgdG8gYmUgZW1wdHksCi0gIC8vIHdoZW4gbm90
IHR5cGluZyBhbmQgbm90aGluZyBpcyBzZWxlY3RlZCkKLSAgZnVuY3Rpb24gcmVzZXRJbnB1dChj
bSwgdHlwaW5nKSB7Ci0gICAgdmFyIG1pbmltYWwsIHNlbGVjdGVkLCBkb2MgPSBjbS5kb2M7Ci0g
ICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsKLSAgICAgIGNtLmRpc3BsYXkucHJldklu
cHV0ID0gIiI7Ci0gICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnByaW1hcnkoKTsKLSAgICAgIG1p
bmltYWwgPSBoYXNDb3B5RXZlbnQgJiYKLSAgICAgICAgKHJhbmdlLnRvKCkubGluZSAtIHJhbmdl
LmZyb20oKS5saW5lID4gMTAwIHx8IChzZWxlY3RlZCA9IGNtLmdldFNlbGVjdGlvbigpKS5sZW5n
dGggPiAxMDAwKTsKLSAgICAgIHZhciBjb250ZW50ID0gbWluaW1hbCA/ICItIiA6IHNlbGVjdGVk
IHx8IGNtLmdldFNlbGVjdGlvbigpOwotICAgICAgY20uZGlzcGxheS5pbnB1dC52YWx1ZSA9IGNv
bnRlbnQ7Ci0gICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgc2VsZWN0SW5wdXQoY20uZGlzcGxh
eS5pbnB1dCk7Ci0gICAgICBpZiAoaWUgJiYgIWllX3VwdG84KSBjbS5kaXNwbGF5LmlucHV0SGFz
U2VsZWN0aW9uID0gY29udGVudDsKLSAgICB9IGVsc2UgaWYgKCF0eXBpbmcpIHsKLSAgICAgIGNt
LmRpc3BsYXkucHJldklucHV0ID0gY20uZGlzcGxheS5pbnB1dC52YWx1ZSA9ICIiOwotICAgICAg
aWYgKGllICYmICFpZV91cHRvOCkgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9IG51bGw7
Ci0gICAgfQotICAgIGNtLmRpc3BsYXkuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IG1pbmltYWw7Ci0g
IH0KLQotICBmdW5jdGlvbiBmb2N1c0lucHV0KGNtKSB7Ci0gICAgaWYgKGNtLm9wdGlvbnMucmVh
ZE9ubHkgIT0gIm5vY3Vyc29yIiAmJiAoIW1vYmlsZSB8fCBhY3RpdmVFbHQoKSAhPSBjbS5kaXNw
bGF5LmlucHV0KSkKLSAgICAgIGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTsKLSAgfQotCi0gIGZ1
bmN0aW9uIGVuc3VyZUZvY3VzKGNtKSB7Ci0gICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSB7IGZv
Y3VzSW5wdXQoY20pOyBvbkZvY3VzKGNtKTsgfQotICB9Ci0KLSAgZnVuY3Rpb24gaXNSZWFkT25s
eShjbSkgewotICAgIHJldHVybiBjbS5vcHRpb25zLnJlYWRPbmx5IHx8IGNtLmRvYy5jYW50RWRp
dDsKLSAgfQotCiAgIC8vIEVWRU5UIEhBTkRMRVJTCiAKICAgLy8gQXR0YWNoIHRoZSBuZWNlc3Nh
cnkgZXZlbnQgaGFuZGxlcnMgd2hlbiBpbml0aWFsaXppbmcgdGhlIGVkaXRvcgpAQCAtMjM1NCwy
NiArMzM1OCw3NSBAQAogICAgIHZhciBkID0gY20uZGlzcGxheTsKICAgICBvbihkLnNjcm9sbGVy
LCAibW91c2Vkb3duIiwgb3BlcmF0aW9uKGNtLCBvbk1vdXNlRG93bikpOwogICAgIC8vIE9sZGVy
IElFJ3Mgd2lsbCBub3QgZmlyZSBhIHNlY29uZCBtb3VzZWRvd24gZm9yIGEgZG91YmxlIGNsaWNr
Ci0gICAgaWYgKGllX3VwdG8xMCkKKyAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDExKQogICAg
ICAgb24oZC5zY3JvbGxlciwgImRibGNsaWNrIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7
CiAgICAgICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHJldHVybjsKICAgICAgICAgdmFy
IHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7CiAgICAgICAgIGlmICghcG9zIHx8IGNsaWNrSW5H
dXR0ZXIoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHJldHVybjsKICAg
ICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICAgICAgdmFyIHdvcmQgPSBmaW5kV29yZEF0
KGNtLCBwb3MpOworICAgICAgICB2YXIgd29yZCA9IGNtLmZpbmRXb3JkQXQocG9zKTsKICAgICAg
ICAgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgd29yZC5hbmNob3IsIHdvcmQuaGVhZCk7CiAgICAg
ICB9KSk7CiAgICAgZWxzZQogICAgICAgb24oZC5zY3JvbGxlciwgImRibGNsaWNrIiwgZnVuY3Rp
b24oZSkgeyBzaWduYWxET01FdmVudChjbSwgZSkgfHwgZV9wcmV2ZW50RGVmYXVsdChlKTsgfSk7
Ci0gICAgLy8gUHJldmVudCBub3JtYWwgc2VsZWN0aW9uIGluIHRoZSBlZGl0b3IgKHdlIGhhbmRs
ZSBvdXIgb3duKQotICAgIG9uKGQubGluZVNwYWNlLCAic2VsZWN0c3RhcnQiLCBmdW5jdGlvbihl
KSB7Ci0gICAgICBpZiAoIWV2ZW50SW5XaWRnZXQoZCwgZSkpIGVfcHJldmVudERlZmF1bHQoZSk7
Ci0gICAgfSk7CiAgICAgLy8gU29tZSBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICphZnRlciog
b3BlbmluZyB0aGUgbWVudSwgYXQKICAgICAvLyB3aGljaCBwb2ludCB3ZSBjYW4ndCBtZXNzIHdp
dGggaXQgYW55bW9yZS4gQ29udGV4dCBtZW51IGlzCiAgICAgLy8gaGFuZGxlZCBpbiBvbk1vdXNl
RG93biBmb3IgdGhlc2UgYnJvd3NlcnMuCiAgICAgaWYgKCFjYXB0dXJlUmlnaHRDbGljaykgb24o
ZC5zY3JvbGxlciwgImNvbnRleHRtZW51IiwgZnVuY3Rpb24oZSkge29uQ29udGV4dE1lbnUoY20s
IGUpO30pOwogCisgICAgLy8gVXNlZCB0byBzdXBwcmVzcyBtb3VzZSBldmVudCBoYW5kbGluZyB3
aGVuIGEgdG91Y2ggaGFwcGVucworICAgIHZhciB0b3VjaEZpbmlzaGVkLCBwcmV2VG91Y2ggPSB7
ZW5kOiAwfTsKKyAgICBmdW5jdGlvbiBmaW5pc2hUb3VjaCgpIHsKKyAgICAgIGlmIChkLmFjdGl2
ZVRvdWNoKSB7CisgICAgICAgIHRvdWNoRmluaXNoZWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
e2QuYWN0aXZlVG91Y2ggPSBudWxsO30sIDEwMDApOworICAgICAgICBwcmV2VG91Y2ggPSBkLmFj
dGl2ZVRvdWNoOworICAgICAgICBwcmV2VG91Y2guZW5kID0gK25ldyBEYXRlOworICAgICAgfQor
ICAgIH07CisgICAgZnVuY3Rpb24gaXNNb3VzZUxpa2VUb3VjaEV2ZW50KGUpIHsKKyAgICAgIGlm
IChlLnRvdWNoZXMubGVuZ3RoICE9IDEpIHJldHVybiBmYWxzZTsKKyAgICAgIHZhciB0b3VjaCA9
IGUudG91Y2hlc1swXTsKKyAgICAgIHJldHVybiB0b3VjaC5yYWRpdXNYIDw9IDEgJiYgdG91Y2gu
cmFkaXVzWSA8PSAxOworICAgIH0KKyAgICBmdW5jdGlvbiBmYXJBd2F5KHRvdWNoLCBvdGhlcikg
eworICAgICAgaWYgKG90aGVyLmxlZnQgPT0gbnVsbCkgcmV0dXJuIHRydWU7CisgICAgICB2YXIg
ZHggPSBvdGhlci5sZWZ0IC0gdG91Y2gubGVmdCwgZHkgPSBvdGhlci50b3AgLSB0b3VjaC50b3A7
CisgICAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHkgPiAyMCAqIDIwOworICAgIH0KKyAgICBv
bihkLnNjcm9sbGVyLCAidG91Y2hzdGFydCIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgIGlmICghaXNN
b3VzZUxpa2VUb3VjaEV2ZW50KGUpKSB7CisgICAgICAgIGNsZWFyVGltZW91dCh0b3VjaEZpbmlz
aGVkKTsKKyAgICAgICAgdmFyIG5vdyA9ICtuZXcgRGF0ZTsKKyAgICAgICAgZC5hY3RpdmVUb3Vj
aCA9IHtzdGFydDogbm93LCBtb3ZlZDogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
cHJldjogbm93IC0gcHJldlRvdWNoLmVuZCA8PSAzMDAgPyBwcmV2VG91Y2ggOiBudWxsfTsKKyAg
ICAgICAgaWYgKGUudG91Y2hlcy5sZW5ndGggPT0gMSkgeworICAgICAgICAgIGQuYWN0aXZlVG91
Y2gubGVmdCA9IGUudG91Y2hlc1swXS5wYWdlWDsKKyAgICAgICAgICBkLmFjdGl2ZVRvdWNoLnRv
cCA9IGUudG91Y2hlc1swXS5wYWdlWTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworICAg
IG9uKGQuc2Nyb2xsZXIsICJ0b3VjaG1vdmUiLCBmdW5jdGlvbigpIHsKKyAgICAgIGlmIChkLmFj
dGl2ZVRvdWNoKSBkLmFjdGl2ZVRvdWNoLm1vdmVkID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBvbihk
LnNjcm9sbGVyLCAidG91Y2hlbmQiLCBmdW5jdGlvbihlKSB7CisgICAgICB2YXIgdG91Y2ggPSBk
LmFjdGl2ZVRvdWNoOworICAgICAgaWYgKHRvdWNoICYmICFldmVudEluV2lkZ2V0KGQsIGUpICYm
IHRvdWNoLmxlZnQgIT0gbnVsbCAmJgorICAgICAgICAgICF0b3VjaC5tb3ZlZCAmJiBuZXcgRGF0
ZSAtIHRvdWNoLnN0YXJ0IDwgMzAwKSB7CisgICAgICAgIHZhciBwb3MgPSBjbS5jb29yZHNDaGFy
KGQuYWN0aXZlVG91Y2gsICJwYWdlIiksIHJhbmdlOworICAgICAgICBpZiAoIXRvdWNoLnByZXYg
fHwgZmFyQXdheSh0b3VjaCwgdG91Y2gucHJldikpIC8vIFNpbmdsZSB0YXAKKyAgICAgICAgICBy
YW5nZSA9IG5ldyBSYW5nZShwb3MsIHBvcyk7CisgICAgICAgIGVsc2UgaWYgKCF0b3VjaC5wcmV2
LnByZXYgfHwgZmFyQXdheSh0b3VjaCwgdG91Y2gucHJldi5wcmV2KSkgLy8gRG91YmxlIHRhcAor
ICAgICAgICAgIHJhbmdlID0gY20uZmluZFdvcmRBdChwb3MpOworICAgICAgICBlbHNlIC8vIFRy
aXBsZSB0YXAKKyAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZShQb3MocG9zLmxpbmUsIDApLCBj
bGlwUG9zKGNtLmRvYywgUG9zKHBvcy5saW5lICsgMSwgMCkpKTsKKyAgICAgICAgY20uc2V0U2Vs
ZWN0aW9uKHJhbmdlLmFuY2hvciwgcmFuZ2UuaGVhZCk7CisgICAgICAgIGNtLmZvY3VzKCk7Cisg
ICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CisgICAgICB9CisgICAgICBmaW5pc2hUb3VjaCgp
OworICAgIH0pOworICAgIG9uKGQuc2Nyb2xsZXIsICJ0b3VjaGNhbmNlbCIsIGZpbmlzaFRvdWNo
KTsKKwogICAgIC8vIFN5bmMgc2Nyb2xsaW5nIGJldHdlZW4gZmFrZSBzY3JvbGxiYXJzIGFuZCBy
ZWFsIHNjcm9sbGFibGUKICAgICAvLyBhcmVhLCBlbnN1cmUgdmlld3BvcnQgaXMgdXBkYXRlZCB3
aGVuIHNjcm9sbGluZy4KICAgICBvbihkLnNjcm9sbGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7
CkBAIC0yMzgzLDEwNSArMzQzNiw1MSBAQAogICAgICAgICBzaWduYWwoY20sICJzY3JvbGwiLCBj
bSk7CiAgICAgICB9CiAgICAgfSk7Ci0gICAgb24oZC5zY3JvbGxiYXJWLCAic2Nyb2xsIiwgZnVu
Y3Rpb24oKSB7Ci0gICAgICBpZiAoZC5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHNldFNjcm9sbFRv
cChjbSwgZC5zY3JvbGxiYXJWLnNjcm9sbFRvcCk7Ci0gICAgfSk7Ci0gICAgb24oZC5zY3JvbGxi
YXJILCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoZC5zY3JvbGxlci5jbGllbnRI
ZWlnaHQpIHNldFNjcm9sbExlZnQoY20sIGQuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KTsKLSAgICB9
KTsKIAogICAgIC8vIExpc3RlbiB0byB3aGVlbCBldmVudHMgaW4gb3JkZXIgdG8gdHJ5IGFuZCB1
cGRhdGUgdGhlIHZpZXdwb3J0IG9uIHRpbWUuCiAgICAgb24oZC5zY3JvbGxlciwgIm1vdXNld2hl
ZWwiLCBmdW5jdGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBlKTt9KTsKICAgICBvbihkLnNjcm9s
bGVyLCAiRE9NTW91c2VTY3JvbGwiLCBmdW5jdGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBlKTt9
KTsKIAotICAgIC8vIFByZXZlbnQgY2xpY2tzIGluIHRoZSBzY3JvbGxiYXJzIGZyb20ga2lsbGlu
ZyBmb2N1cwotICAgIGZ1bmN0aW9uIHJlRm9jdXMoKSB7IGlmIChjbS5zdGF0ZS5mb2N1c2VkKSBz
ZXRUaW1lb3V0KGJpbmQoZm9jdXNJbnB1dCwgY20pLCAwKTsgfQotICAgIG9uKGQuc2Nyb2xsYmFy
SCwgIm1vdXNlZG93biIsIHJlRm9jdXMpOwotICAgIG9uKGQuc2Nyb2xsYmFyViwgIm1vdXNlZG93
biIsIHJlRm9jdXMpOwogICAgIC8vIFByZXZlbnQgd3JhcHBlciBmcm9tIGV2ZXIgc2Nyb2xsaW5n
CiAgICAgb24oZC53cmFwcGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7IGQud3JhcHBlci5zY3Jv
bGxUb3AgPSBkLndyYXBwZXIuc2Nyb2xsTGVmdCA9IDA7IH0pOwogCi0gICAgb24oZC5pbnB1dCwg
ImtleXVwIiwgb3BlcmF0aW9uKGNtLCBvbktleVVwKSk7Ci0gICAgb24oZC5pbnB1dCwgImlucHV0
IiwgZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAoaWUgJiYgIWllX3VwdG84ICYmIGNtLmRpc3BsYXku
aW5wdXRIYXNTZWxlY3Rpb24pIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxsOwot
ICAgICAgZmFzdFBvbGwoY20pOwotICAgIH0pOwotICAgIG9uKGQuaW5wdXQsICJrZXlkb3duIiwg
b3BlcmF0aW9uKGNtLCBvbktleURvd24pKTsKLSAgICBvbihkLmlucHV0LCAia2V5cHJlc3MiLCBv
cGVyYXRpb24oY20sIG9uS2V5UHJlc3MpKTsKLSAgICBvbihkLmlucHV0LCAiZm9jdXMiLCBiaW5k
KG9uRm9jdXMsIGNtKSk7Ci0gICAgb24oZC5pbnB1dCwgImJsdXIiLCBiaW5kKG9uQmx1ciwgY20p
KTsKLQotICAgIGZ1bmN0aW9uIGRyYWdfKGUpIHsKLSAgICAgIGlmICghc2lnbmFsRE9NRXZlbnQo
Y20sIGUpKSBlX3N0b3AoZSk7Ci0gICAgfQotICAgIGlmIChjbS5vcHRpb25zLmRyYWdEcm9wKSB7
Ci0gICAgICBvbihkLnNjcm9sbGVyLCAiZHJhZ3N0YXJ0IiwgZnVuY3Rpb24oZSl7b25EcmFnU3Rh
cnQoY20sIGUpO30pOwotICAgICAgb24oZC5zY3JvbGxlciwgImRyYWdlbnRlciIsIGRyYWdfKTsK
LSAgICAgIG9uKGQuc2Nyb2xsZXIsICJkcmFnb3ZlciIsIGRyYWdfKTsKLSAgICAgIG9uKGQuc2Ny
b2xsZXIsICJkcm9wIiwgb3BlcmF0aW9uKGNtLCBvbkRyb3ApKTsKLSAgICB9Ci0gICAgb24oZC5z
Y3JvbGxlciwgInBhc3RlIiwgZnVuY3Rpb24oZSkgewotICAgICAgaWYgKGV2ZW50SW5XaWRnZXQo
ZCwgZSkpIHJldHVybjsKLSAgICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlOwotICAg
ICAgZm9jdXNJbnB1dChjbSk7Ci0gICAgICBmYXN0UG9sbChjbSk7Ci0gICAgfSk7Ci0gICAgb24o
ZC5pbnB1dCwgInBhc3RlIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAvLyBXb3JrYXJvdW5kIGZvciB3
ZWJraXQgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDIwNgot
ICAgICAgLy8gQWRkIGEgY2hhciB0byB0aGUgZW5kIG9mIHRleHRhcmVhIGJlZm9yZSBwYXN0ZSBv
Y2N1ciBzbyB0aGF0Ci0gICAgICAvLyBzZWxlY3Rpb24gZG9lc24ndCBzcGFuIHRvIHRoZSBlbmQg
b2YgdGV4dGFyZWEuCi0gICAgICBpZiAod2Via2l0ICYmICFjbS5zdGF0ZS5mYWtlZExhc3RDaGFy
ICYmICEobmV3IERhdGUgLSBjbS5zdGF0ZS5sYXN0TWlkZGxlRG93biA8IDIwMCkpIHsKLSAgICAg
ICAgdmFyIHN0YXJ0ID0gZC5pbnB1dC5zZWxlY3Rpb25TdGFydCwgZW5kID0gZC5pbnB1dC5zZWxl
Y3Rpb25FbmQ7Ci0gICAgICAgIGQuaW5wdXQudmFsdWUgKz0gIiQiOwotICAgICAgICBkLmlucHV0
LnNlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgIGQuaW5wdXQuc2VsZWN0aW9uRW5kID0g
ZW5kOwotICAgICAgICBjbS5zdGF0ZS5mYWtlZExhc3RDaGFyID0gdHJ1ZTsKLSAgICAgIH0KLSAg
ICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlOwotICAgICAgZmFzdFBvbGwoY20pOwot
ICAgIH0pOworICAgIGQuZHJhZ0Z1bmN0aW9ucyA9IHsKKyAgICAgIGVudGVyOiBmdW5jdGlvbihl
KSB7aWYgKCFzaWduYWxET01FdmVudChjbSwgZSkpIGVfc3RvcChlKTt9LAorICAgICAgb3Zlcjog
ZnVuY3Rpb24oZSkge2lmICghc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IG9uRHJhZ092ZXIoY20s
IGUpOyBlX3N0b3AoZSk7IH19LAorICAgICAgc3RhcnQ6IGZ1bmN0aW9uKGUpe29uRHJhZ1N0YXJ0
KGNtLCBlKTt9LAorICAgICAgZHJvcDogb3BlcmF0aW9uKGNtLCBvbkRyb3ApLAorICAgICAgbGVh
dmU6IGZ1bmN0aW9uKCkge2NsZWFyRHJhZ0N1cnNvcihjbSk7fQorICAgIH07CiAKLSAgICBmdW5j
dGlvbiBwcmVwYXJlQ29weUN1dChlKSB7Ci0gICAgICBpZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQo
KSkgewotICAgICAgICBpZiAoZC5pbmFjY3VyYXRlU2VsZWN0aW9uKSB7Ci0gICAgICAgICAgZC5w
cmV2SW5wdXQgPSAiIjsKLSAgICAgICAgICBkLmluYWNjdXJhdGVTZWxlY3Rpb24gPSBmYWxzZTsK
LSAgICAgICAgICBkLmlucHV0LnZhbHVlID0gY20uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgICAg
c2VsZWN0SW5wdXQoZC5pbnB1dCk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IHZhciB0ZXh0ID0gIiIsIHJhbmdlcyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGNtLmRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgdmFyIGxpbmUgPSBj
bS5kb2Muc2VsLnJhbmdlc1tpXS5oZWFkLmxpbmU7Ci0gICAgICAgICAgdmFyIGxpbmVSYW5nZSA9
IHthbmNob3I6IFBvcyhsaW5lLCAwKSwgaGVhZDogUG9zKGxpbmUgKyAxLCAwKX07Ci0gICAgICAg
ICAgcmFuZ2VzLnB1c2gobGluZVJhbmdlKTsKLSAgICAgICAgICB0ZXh0ICs9IGNtLmdldFJhbmdl
KGxpbmVSYW5nZS5hbmNob3IsIGxpbmVSYW5nZS5oZWFkKTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoZS50eXBlID09ICJjdXQiKSB7Ci0gICAgICAgICAgY20uc2V0U2VsZWN0aW9ucyhyYW5nZXMs
IG51bGwsIHNlbF9kb250U2Nyb2xsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBkLnBy
ZXZJbnB1dCA9ICIiOwotICAgICAgICAgIGQuaW5wdXQudmFsdWUgPSB0ZXh0OwotICAgICAgICAg
IHNlbGVjdElucHV0KGQuaW5wdXQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoZS50
eXBlID09ICJjdXQiKSBjbS5zdGF0ZS5jdXRJbmNvbWluZyA9IHRydWU7Ci0gICAgfQotICAgIG9u
KGQuaW5wdXQsICJjdXQiLCBwcmVwYXJlQ29weUN1dCk7Ci0gICAgb24oZC5pbnB1dCwgImNvcHki
LCBwcmVwYXJlQ29weUN1dCk7CisgICAgdmFyIGlucCA9IGQuaW5wdXQuZ2V0RmllbGQoKTsKKyAg
ICBvbihpbnAsICJrZXl1cCIsIGZ1bmN0aW9uKGUpIHsgb25LZXlVcC5jYWxsKGNtLCBlKTsgfSk7
CisgICAgb24oaW5wLCAia2V5ZG93biIsIG9wZXJhdGlvbihjbSwgb25LZXlEb3duKSk7CisgICAg
b24oaW5wLCAia2V5cHJlc3MiLCBvcGVyYXRpb24oY20sIG9uS2V5UHJlc3MpKTsKKyAgICBvbihp
bnAsICJmb2N1cyIsIGJpbmQob25Gb2N1cywgY20pKTsKKyAgICBvbihpbnAsICJibHVyIiwgYmlu
ZChvbkJsdXIsIGNtKSk7CisgIH0KIAotICAgIC8vIE5lZWRlZCB0byBoYW5kbGUgVGFiIGtleSBp
biBLSFRNTAotICAgIGlmIChraHRtbCkgb24oZC5zaXplciwgIm1vdXNldXAiLCBmdW5jdGlvbigp
IHsKLSAgICAgIGlmIChhY3RpdmVFbHQoKSA9PSBkLmlucHV0KSBkLmlucHV0LmJsdXIoKTsKLSAg
ICAgIGZvY3VzSW5wdXQoY20pOwotICAgIH0pOworICBmdW5jdGlvbiBkcmFnRHJvcENoYW5nZWQo
Y20sIHZhbHVlLCBvbGQpIHsKKyAgICB2YXIgd2FzT24gPSBvbGQgJiYgb2xkICE9IENvZGVNaXJy
b3IuSW5pdDsKKyAgICBpZiAoIXZhbHVlICE9ICF3YXNPbikgeworICAgICAgdmFyIGZ1bmNzID0g
Y20uZGlzcGxheS5kcmFnRnVuY3Rpb25zOworICAgICAgdmFyIHRvZ2dsZSA9IHZhbHVlID8gb24g
OiBvZmY7CisgICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgImRyYWdzdGFydCIsIGZ1
bmNzLnN0YXJ0KTsKKyAgICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCAiZHJhZ2VudGVy
IiwgZnVuY3MuZW50ZXIpOworICAgICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsICJkcmFn
b3ZlciIsIGZ1bmNzLm92ZXIpOworICAgICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsICJk
cmFnbGVhdmUiLCBmdW5jcy5sZWF2ZSk7CisgICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxl
ciwgImRyb3AiLCBmdW5jcy5kcm9wKTsKKyAgICB9CiAgIH0KIAogICAvLyBDYWxsZWQgd2hlbiB0
aGUgd2luZG93IHJlc2l6ZXMKICAgZnVuY3Rpb24gb25SZXNpemUoY20pIHsKLSAgICAvLyBNaWdo
dCBiZSBhIHRleHQgc2NhbGluZyBvcGVyYXRpb24sIGNsZWFyIHNpemUgY2FjaGVzLgogICAgIHZh
ciBkID0gY20uZGlzcGxheTsKKyAgICBpZiAoZC5sYXN0V3JhcEhlaWdodCA9PSBkLndyYXBwZXIu
Y2xpZW50SGVpZ2h0ICYmIGQubGFzdFdyYXBXaWR0aCA9PSBkLndyYXBwZXIuY2xpZW50V2lkdGgp
CisgICAgICByZXR1cm47CisgICAgLy8gTWlnaHQgYmUgYSB0ZXh0IHNjYWxpbmcgb3BlcmF0aW9u
LCBjbGVhciBzaXplIGNhY2hlcy4KICAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4
dEhlaWdodCA9IGQuY2FjaGVkUGFkZGluZ0ggPSBudWxsOworICAgIGQuc2Nyb2xsYmFyc0NsaXBw
ZWQgPSBmYWxzZTsKICAgICBjbS5zZXRTaXplKCk7CiAgIH0KIApAQCAtMjQ5MCw3ICszNDg5LDkg
QEAKICAgLy8gUmV0dXJuIHRydWUgd2hlbiB0aGUgZ2l2ZW4gbW91c2UgZXZlbnQgaGFwcGVuZWQg
aW4gYSB3aWRnZXQKICAgZnVuY3Rpb24gZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSB7CiAgICAg
Zm9yICh2YXIgbiA9IGVfdGFyZ2V0KGUpOyBuICE9IGRpc3BsYXkud3JhcHBlcjsgbiA9IG4ucGFy
ZW50Tm9kZSkgewotICAgICAgaWYgKCFuIHx8IG4uaWdub3JlRXZlbnRzIHx8IG4ucGFyZW50Tm9k
ZSA9PSBkaXNwbGF5LnNpemVyICYmIG4gIT0gZGlzcGxheS5tb3ZlcikgcmV0dXJuIHRydWU7Cisg
ICAgICBpZiAoIW4gfHwgKG4ubm9kZVR5cGUgPT0gMSAmJiBuLmdldEF0dHJpYnV0ZSgiY20taWdu
b3JlLWV2ZW50cyIpID09ICJ0cnVlIikgfHwKKyAgICAgICAgICAobi5wYXJlbnROb2RlID09IGRp
c3BsYXkuc2l6ZXIgJiYgbiAhPSBkaXNwbGF5Lm1vdmVyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICB9CiAKQEAgLTI1MDEsMTEgKzM1MDIsOCBAQAogICAvLyBjb29yZGluYXRlcyBi
ZXlvbmQgdGhlIHJpZ2h0IG9mIHRoZSB0ZXh0LgogICBmdW5jdGlvbiBwb3NGcm9tTW91c2UoY20s
IGUsIGxpYmVyYWwsIGZvclJlY3QpIHsKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7Ci0g
ICAgaWYgKCFsaWJlcmFsKSB7Ci0gICAgICB2YXIgdGFyZ2V0ID0gZV90YXJnZXQoZSk7Ci0gICAg
ICBpZiAodGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFySCB8fCB0YXJnZXQgPT0gZGlzcGxheS5z
Y3JvbGxiYXJWIHx8Ci0gICAgICAgICAgdGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVy
IHx8IHRhcmdldCA9PSBkaXNwbGF5Lmd1dHRlckZpbGxlcikgcmV0dXJuIG51bGw7Ci0gICAgfQor
ICAgIGlmICghbGliZXJhbCAmJiBlX3RhcmdldChlKS5nZXRBdHRyaWJ1dGUoImNtLW5vdC1jb250
ZW50IikgPT0gInRydWUiKSByZXR1cm4gbnVsbDsKKwogICAgIHZhciB4LCB5LCBzcGFjZSA9IGRp
c3BsYXkubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgIC8vIEZhaWxzIHVu
cHJlZGljdGFibHkgb24gSUVbNjddIHdoZW4gbW91c2UgaXMgZHJhZ2dlZCBhcm91bmQgcXVpY2ts
eS4KICAgICB0cnkgeyB4ID0gZS5jbGllbnRYIC0gc3BhY2UubGVmdDsgeSA9IGUuY2xpZW50WSAt
IHNwYWNlLnRvcDsgfQpAQCAtMjUyNCw4ICszNTIyLDggQEAKICAgLy8gbWlkZGxlLWNsaWNrLXBh
c3RlLiBPciBpdCBtaWdodCBiZSBhIGNsaWNrIG9uIHNvbWV0aGluZyB3ZSBzaG91bGQKICAgLy8g
bm90IGludGVyZmVyZSB3aXRoLCBzdWNoIGFzIGEgc2Nyb2xsYmFyIG9yIHdpZGdldC4KICAgZnVu
Y3Rpb24gb25Nb3VzZURvd24oZSkgewotICAgIGlmIChzaWduYWxET01FdmVudCh0aGlzLCBlKSkg
cmV0dXJuOwogICAgIHZhciBjbSA9IHRoaXMsIGRpc3BsYXkgPSBjbS5kaXNwbGF5OworICAgIGlm
IChkaXNwbGF5LmFjdGl2ZVRvdWNoICYmIGRpc3BsYXkuaW5wdXQuc3VwcG9ydHNUb3VjaCgpIHx8
IHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgcmV0dXJuOwogICAgIGRpc3BsYXkuc2hpZnQgPSBlLnNo
aWZ0S2V5OwogCiAgICAgaWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIHsKQEAgLTI1NDMs
NyArMzU0MSwxMCBAQAogCiAgICAgc3dpdGNoIChlX2J1dHRvbihlKSkgewogICAgIGNhc2UgMToK
LSAgICAgIGlmIChzdGFydCkKKyAgICAgIC8vICMzMjYxOiBtYWtlIHN1cmUsIHRoYXQgd2UncmUg
bm90IHN0YXJ0aW5nIGEgc2Vjb25kIHNlbGVjdGlvbgorICAgICAgaWYgKGNtLnN0YXRlLnNlbGVj
dGluZ1RleHQpCisgICAgICAgIGNtLnN0YXRlLnNlbGVjdGluZ1RleHQoZSk7CisgICAgICBlbHNl
IGlmIChzdGFydCkKICAgICAgICAgbGVmdEJ1dHRvbkRvd24oY20sIGUsIHN0YXJ0KTsKICAgICAg
IGVsc2UgaWYgKGVfdGFyZ2V0KGUpID09IGRpc3BsYXkuc2Nyb2xsZXIpCiAgICAgICAgIGVfcHJl
dmVudERlZmF1bHQoZSk7CkBAIC0yNTUxLDE4ICszNTUyLDIwIEBACiAgICAgY2FzZSAyOgogICAg
ICAgaWYgKHdlYmtpdCkgY20uc3RhdGUubGFzdE1pZGRsZURvd24gPSArbmV3IERhdGU7CiAgICAg
ICBpZiAoc3RhcnQpIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHN0YXJ0KTsKLSAgICAgIHNldFRp
bWVvdXQoYmluZChmb2N1c0lucHV0LCBjbSksIDIwKTsKKyAgICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7ZGlzcGxheS5pbnB1dC5mb2N1cygpO30sIDIwKTsKICAgICAgIGVfcHJldmVudERlZmF1
bHQoZSk7CiAgICAgICBicmVhazsKICAgICBjYXNlIDM6CiAgICAgICBpZiAoY2FwdHVyZVJpZ2h0
Q2xpY2spIG9uQ29udGV4dE1lbnUoY20sIGUpOworICAgICAgZWxzZSBkZWxheUJsdXJFdmVudChj
bSk7CiAgICAgICBicmVhazsKICAgICB9CiAgIH0KIAogICB2YXIgbGFzdENsaWNrLCBsYXN0RG91
YmxlQ2xpY2s7CiAgIGZ1bmN0aW9uIGxlZnRCdXR0b25Eb3duKGNtLCBlLCBzdGFydCkgewotICAg
IHNldFRpbWVvdXQoYmluZChlbnN1cmVGb2N1cywgY20pLCAwKTsKKyAgICBpZiAoaWUpIHNldFRp
bWVvdXQoYmluZChlbnN1cmVGb2N1cywgY20pLCAwKTsKKyAgICBlbHNlIGNtLmN1ck9wLmZvY3Vz
ID0gYWN0aXZlRWx0KCk7CiAKICAgICB2YXIgbm93ID0gK25ldyBEYXRlLCB0eXBlOwogICAgIGlm
IChsYXN0RG91YmxlQ2xpY2sgJiYgbGFzdERvdWJsZUNsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYg
Y21wKGxhc3REb3VibGVDbGljay5wb3MsIHN0YXJ0KSA9PSAwKSB7CkBAIC0yNTc1LDkgKzM1Nzgs
MTEgQEAKICAgICAgIGxhc3RDbGljayA9IHt0aW1lOiBub3csIHBvczogc3RhcnR9OwogICAgIH0K
IAotICAgIHZhciBzZWwgPSBjbS5kb2Muc2VsLCBtb2RpZmllciA9IG1hYyA/IGUubWV0YUtleSA6
IGUuY3RybEtleTsKKyAgICB2YXIgc2VsID0gY20uZG9jLnNlbCwgbW9kaWZpZXIgPSBtYWMgPyBl
Lm1ldGFLZXkgOiBlLmN0cmxLZXksIGNvbnRhaW5lZDsKICAgICBpZiAoY20ub3B0aW9ucy5kcmFn
RHJvcCAmJiBkcmFnQW5kRHJvcCAmJiAhaXNSZWFkT25seShjbSkgJiYKLSAgICAgICAgdHlwZSA9
PSAic2luZ2xlIiAmJiBzZWwuY29udGFpbnMoc3RhcnQpID4gLTEgJiYgc2VsLnNvbWV0aGluZ1Nl
bGVjdGVkKCkpCisgICAgICAgIHR5cGUgPT0gInNpbmdsZSIgJiYgKGNvbnRhaW5lZCA9IHNlbC5j
b250YWlucyhzdGFydCkpID4gLTEgJiYKKyAgICAgICAgKGNtcCgoY29udGFpbmVkID0gc2VsLnJh
bmdlc1tjb250YWluZWRdKS5mcm9tKCksIHN0YXJ0KSA8IDAgfHwgc3RhcnQueFJlbCA+IDApICYm
CisgICAgICAgIChjbXAoY29udGFpbmVkLnRvKCksIHN0YXJ0KSA+IDAgfHwgc3RhcnQueFJlbCA8
IDApKQogICAgICAgbGVmdEJ1dHRvblN0YXJ0RHJhZyhjbSwgZSwgc3RhcnQsIG1vZGlmaWVyKTsK
ICAgICBlbHNlCiAgICAgICBsZWZ0QnV0dG9uU2VsZWN0KGNtLCBlLCBzdGFydCwgdHlwZSwgbW9k
aWZpZXIpOwpAQCAtMjU4Niw3ICszNTkxLDcgQEAKICAgLy8gU3RhcnQgYSB0ZXh0IGRyYWcuIFdo
ZW4gaXQgZW5kcywgc2VlIGlmIGFueSBkcmFnZ2luZyBhY3R1YWxseQogICAvLyBoYXBwZW4sIGFu
ZCB0cmVhdCBhcyBhIGNsaWNrIGlmIGl0IGRpZG4ndC4KICAgZnVuY3Rpb24gbGVmdEJ1dHRvblN0
YXJ0RHJhZyhjbSwgZSwgc3RhcnQsIG1vZGlmaWVyKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5k
aXNwbGF5OworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgc3RhcnRUaW1lID0gK25ldyBE
YXRlOwogICAgIHZhciBkcmFnRW5kID0gb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlMikgewogICAg
ICAgaWYgKHdlYmtpdCkgZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSBmYWxzZTsKICAgICAg
IGNtLnN0YXRlLmRyYWdnaW5nVGV4dCA9IGZhbHNlOwpAQCAtMjU5NCwxMiArMzU5OSwxMyBAQAog
ICAgICAgb2ZmKGRpc3BsYXkuc2Nyb2xsZXIsICJkcm9wIiwgZHJhZ0VuZCk7CiAgICAgICBpZiAo
TWF0aC5hYnMoZS5jbGllbnRYIC0gZTIuY2xpZW50WCkgKyBNYXRoLmFicyhlLmNsaWVudFkgLSBl
Mi5jbGllbnRZKSA8IDEwKSB7CiAgICAgICAgIGVfcHJldmVudERlZmF1bHQoZTIpOwotICAgICAg
ICBpZiAoIW1vZGlmaWVyKQorICAgICAgICBpZiAoIW1vZGlmaWVyICYmICtuZXcgRGF0ZSAtIDIw
MCA8IHN0YXJ0VGltZSkKICAgICAgICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBzdGFydCk7
Ci0gICAgICAgIGZvY3VzSW5wdXQoY20pOwotICAgICAgICAvLyBXb3JrIGFyb3VuZCB1bmV4cGxh
aW5hYmxlIGZvY3VzIHByb2JsZW0gaW4gSUU5ICgjMjEyNykKLSAgICAgICAgaWYgKGllX3VwdG8x
MCAmJiAhaWVfdXB0bzgpCi0gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtkb2N1bWVu
dC5ib2R5LmZvY3VzKCk7IGZvY3VzSW5wdXQoY20pO30sIDIwKTsKKyAgICAgICAgLy8gV29yayBh
cm91bmQgdW5leHBsYWluYWJsZSBmb2N1cyBwcm9ibGVtIGluIElFOSAoIzIxMjcpIGFuZCBDaHJv
bWUgKCMzMDgxKQorICAgICAgICBpZiAod2Via2l0IHx8IGllICYmIGllX3ZlcnNpb24gPT0gOSkK
KyAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2RvY3VtZW50LmJvZHkuZm9jdXMoKTsg
ZGlzcGxheS5pbnB1dC5mb2N1cygpO30sIDIwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRp
c3BsYXkuaW5wdXQuZm9jdXMoKTsKICAgICAgIH0KICAgICB9KTsKICAgICAvLyBMZXQgdGhlIGRy
YWcgaGFuZGxlciBoYW5kbGUgdGhpcy4KQEAgLTI2MTYsMTUgKzM2MjIsMTYgQEAKICAgICB2YXIg
ZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKICAgICBlX3ByZXZlbnREZWZhdWx0
KGUpOwogCi0gICAgdmFyIG91clJhbmdlLCBvdXJJbmRleCwgc3RhcnRTZWwgPSBkb2Muc2VsOwor
ICAgIHZhciBvdXJSYW5nZSwgb3VySW5kZXgsIHN0YXJ0U2VsID0gZG9jLnNlbCwgcmFuZ2VzID0g
c3RhcnRTZWwucmFuZ2VzOwogICAgIGlmIChhZGROZXcgJiYgIWUuc2hpZnRLZXkpIHsKICAgICAg
IG91ckluZGV4ID0gZG9jLnNlbC5jb250YWlucyhzdGFydCk7CiAgICAgICBpZiAob3VySW5kZXgg
PiAtMSkKLSAgICAgICAgb3VyUmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tvdXJJbmRleF07CisgICAg
ICAgIG91clJhbmdlID0gcmFuZ2VzW291ckluZGV4XTsKICAgICAgIGVsc2UKICAgICAgICAgb3Vy
UmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KTsKICAgICB9IGVsc2UgewogICAgICAgb3Vy
UmFuZ2UgPSBkb2Muc2VsLnByaW1hcnkoKTsKKyAgICAgIG91ckluZGV4ID0gZG9jLnNlbC5wcmlt
SW5kZXg7CiAgICAgfQogCiAgICAgaWYgKGUuYWx0S2V5KSB7CkBAIC0yNjMzLDcgKzM2NDAsNyBA
QAogICAgICAgc3RhcnQgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUsIHRydWUpOwogICAgICAg
b3VySW5kZXggPSAtMTsKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImRvdWJsZSIpIHsKLSAgICAg
IHZhciB3b3JkID0gZmluZFdvcmRBdChjbSwgc3RhcnQpOworICAgICAgdmFyIHdvcmQgPSBjbS5m
aW5kV29yZEF0KHN0YXJ0KTsKICAgICAgIGlmIChjbS5kaXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRl
bmQpCiAgICAgICAgIG91clJhbmdlID0gZXh0ZW5kUmFuZ2UoZG9jLCBvdXJSYW5nZSwgd29yZC5h
bmNob3IsIHdvcmQuaGVhZCk7CiAgICAgICBlbHNlCkBAIC0yNjUyLDEyICszNjU5LDE1IEBACiAg
ICAgICBvdXJJbmRleCA9IDA7CiAgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBuZXcgU2VsZWN0aW9u
KFtvdXJSYW5nZV0sIDApLCBzZWxfbW91c2UpOwogICAgICAgc3RhcnRTZWwgPSBkb2Muc2VsOwot
ICAgIH0gZWxzZSBpZiAob3VySW5kZXggPiAtMSkgewotICAgICAgcmVwbGFjZU9uZVNlbGVjdGlv
bihkb2MsIG91ckluZGV4LCBvdXJSYW5nZSwgc2VsX21vdXNlKTsKLSAgICB9IGVsc2UgewotICAg
ICAgb3VySW5kZXggPSBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7Ci0gICAgICBzZXRTZWxlY3Rpb24o
ZG9jLCBub3JtYWxpemVTZWxlY3Rpb24oZG9jLnNlbC5yYW5nZXMuY29uY2F0KFtvdXJSYW5nZV0p
LCBvdXJJbmRleCksCisgICAgfSBlbHNlIGlmIChvdXJJbmRleCA9PSAtMSkgeworICAgICAgb3Vy
SW5kZXggPSByYW5nZXMubGVuZ3RoOworICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXpl
U2VsZWN0aW9uKHJhbmdlcy5jb25jYXQoW291clJhbmdlXSksIG91ckluZGV4KSwKICAgICAgICAg
ICAgICAgICAgICB7c2Nyb2xsOiBmYWxzZSwgb3JpZ2luOiAiKm1vdXNlIn0pOworICAgIH0gZWxz
ZSBpZiAocmFuZ2VzLmxlbmd0aCA+IDEgJiYgcmFuZ2VzW291ckluZGV4XS5lbXB0eSgpICYmIHR5
cGUgPT0gInNpbmdsZSIgJiYgIWUuc2hpZnRLZXkpIHsKKyAgICAgIHNldFNlbGVjdGlvbihkb2Ms
IG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMuc2xpY2UoMCwgb3VySW5kZXgpLmNvbmNhdChyYW5n
ZXMuc2xpY2Uob3VySW5kZXggKyAxKSksIDApKTsKKyAgICAgIHN0YXJ0U2VsID0gZG9jLnNlbDsK
KyAgICB9IGVsc2UgeworICAgICAgcmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIG91ckluZGV4LCBv
dXJSYW5nZSwgc2VsX21vdXNlKTsKICAgICB9CiAKICAgICB2YXIgbGFzdFBvcyA9IHN0YXJ0OwpA
QCAtMjY4Nyw3ICszNjk3LDcgQEAKICAgICAgICAgdmFyIGFuY2hvciA9IG9sZFJhbmdlLmFuY2hv
ciwgaGVhZCA9IHBvczsKICAgICAgICAgaWYgKHR5cGUgIT0gInNpbmdsZSIpIHsKICAgICAgICAg
ICBpZiAodHlwZSA9PSAiZG91YmxlIikKLSAgICAgICAgICAgIHZhciByYW5nZSA9IGZpbmRXb3Jk
QXQoY20sIHBvcyk7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBjbS5maW5kV29yZEF0KHBvcyk7
CiAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKFBvcyhw
b3MubGluZSwgMCksIGNsaXBQb3MoZG9jLCBQb3MocG9zLmxpbmUgKyAxLCAwKSkpOwogICAgICAg
ICAgIGlmIChjbXAocmFuZ2UuYW5jaG9yLCBhbmNob3IpID4gMCkgewpAQCAtMjcxNiw3ICszNzI2
LDcgQEAKICAgICAgIHZhciBjdXIgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUsIHR5cGUgPT0g
InJlY3QiKTsKICAgICAgIGlmICghY3VyKSByZXR1cm47CiAgICAgICBpZiAoY21wKGN1ciwgbGFz
dFBvcykgIT0gMCkgewotICAgICAgICBlbnN1cmVGb2N1cyhjbSk7CisgICAgICAgIGNtLmN1ck9w
LmZvY3VzID0gYWN0aXZlRWx0KCk7CiAgICAgICAgIGV4dGVuZFRvKGN1cik7CiAgICAgICAgIHZh
ciB2aXNpYmxlID0gdmlzaWJsZUxpbmVzKGRpc3BsYXksIGRvYyk7CiAgICAgICAgIGlmIChjdXIu
bGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5lIDwgdmlzaWJsZS5mcm9tKQpAQCAtMjczMiwx
OSArMzc0MiwyMSBAQAogICAgIH0KIAogICAgIGZ1bmN0aW9uIGRvbmUoZSkgeworICAgICAgY20u
c3RhdGUuc2VsZWN0aW5nVGV4dCA9IGZhbHNlOwogICAgICAgY291bnRlciA9IEluZmluaXR5Owog
ICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICAgIGZvY3VzSW5wdXQoY20pOworICAgICAg
ZGlzcGxheS5pbnB1dC5mb2N1cygpOwogICAgICAgb2ZmKGRvY3VtZW50LCAibW91c2Vtb3ZlIiwg
bW92ZSk7CiAgICAgICBvZmYoZG9jdW1lbnQsICJtb3VzZXVwIiwgdXApOwogICAgICAgZG9jLmhp
c3RvcnkubGFzdFNlbE9yaWdpbiA9IG51bGw7CiAgICAgfQogCiAgICAgdmFyIG1vdmUgPSBvcGVy
YXRpb24oY20sIGZ1bmN0aW9uKGUpIHsKLSAgICAgIGlmICgoaWUgJiYgIWllX3VwdG85KSA/ICAh
ZS5idXR0b25zIDogIWVfYnV0dG9uKGUpKSBkb25lKGUpOworICAgICAgaWYgKCFlX2J1dHRvbihl
KSkgZG9uZShlKTsKICAgICAgIGVsc2UgZXh0ZW5kKGUpOwogICAgIH0pOwogICAgIHZhciB1cCA9
IG9wZXJhdGlvbihjbSwgZG9uZSk7CisgICAgY20uc3RhdGUuc2VsZWN0aW5nVGV4dCA9IHVwOwog
ICAgIG9uKGRvY3VtZW50LCAibW91c2Vtb3ZlIiwgbW92ZSk7CiAgICAgb24oZG9jdW1lbnQsICJt
b3VzZXVwIiwgdXApOwogICB9CkBAIC0yNzg0LDYgKzM3OTYsNyBAQAogCiAgIGZ1bmN0aW9uIG9u
RHJvcChlKSB7CiAgICAgdmFyIGNtID0gdGhpczsKKyAgICBjbGVhckRyYWdDdXJzb3IoY20pOwog
ICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgZXZlbnRJbldpZGdldChjbS5kaXNwbGF5
LCBlKSkKICAgICAgIHJldHVybjsKICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwpAQCAtMjgwMCw3
ICszODEzLDkgQEAKICAgICAgICAgICB0ZXh0W2ldID0gcmVhZGVyLnJlc3VsdDsKICAgICAgICAg
ICBpZiAoKytyZWFkID09IG4pIHsKICAgICAgICAgICAgIHBvcyA9IGNsaXBQb3MoY20uZG9jLCBw
b3MpOwotICAgICAgICAgICAgdmFyIGNoYW5nZSA9IHtmcm9tOiBwb3MsIHRvOiBwb3MsIHRleHQ6
IHNwbGl0TGluZXModGV4dC5qb2luKCJcbiIpKSwgb3JpZ2luOiAicGFzdGUifTsKKyAgICAgICAg
ICAgIHZhciBjaGFuZ2UgPSB7ZnJvbTogcG9zLCB0bzogcG9zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0OiBjbS5kb2Muc3BsaXRMaW5lcyh0ZXh0LmpvaW4oY20uZG9jLmxpbmVTZXBh
cmF0b3IoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46ICJwYXN0ZSJ9Owog
ICAgICAgICAgICAgbWFrZUNoYW5nZShjbS5kb2MsIGNoYW5nZSk7CiAgICAgICAgICAgICBzZXRT
ZWxlY3Rpb25SZXBsYWNlSGlzdG9yeShjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MsIGNoYW5n
ZUVuZChjaGFuZ2UpKSk7CiAgICAgICAgICAgfQpAQCAtMjgxMywxOSArMzgyOCwxOSBAQAogICAg
ICAgaWYgKGNtLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiBjbS5kb2Muc2VsLmNvbnRhaW5zKHBvcykg
PiAtMSkgewogICAgICAgICBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQoZSk7CiAgICAgICAgIC8vIEVu
c3VyZSB0aGUgZWRpdG9yIGlzIHJlLWZvY3VzZWQKLSAgICAgICAgc2V0VGltZW91dChiaW5kKGZv
Y3VzSW5wdXQsIGNtKSwgMjApOworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2NtLmRp
c3BsYXkuaW5wdXQuZm9jdXMoKTt9LCAyMCk7CiAgICAgICAgIHJldHVybjsKICAgICAgIH0KICAg
ICAgIHRyeSB7CiAgICAgICAgIHZhciB0ZXh0ID0gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgiVGV4
dCIpOwogICAgICAgICBpZiAodGV4dCkgewotICAgICAgICAgIGlmIChjbS5zdGF0ZS5kcmFnZ2lu
Z1RleHQgJiYgIShtYWMgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXkpKQorICAgICAgICAgIGlmIChj
bS5zdGF0ZS5kcmFnZ2luZ1RleHQgJiYgIShtYWMgPyBlLmFsdEtleSA6IGUuY3RybEtleSkpCiAg
ICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBjbS5saXN0U2VsZWN0aW9ucygpOwogICAgICAgICAg
IHNldFNlbGVjdGlvbk5vVW5kbyhjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MsIHBvcykpOwog
ICAgICAgICAgIGlmIChzZWxlY3RlZCkgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZC5sZW5n
dGg7ICsraSkKICAgICAgICAgICAgIHJlcGxhY2VSYW5nZShjbS5kb2MsICIiLCBzZWxlY3RlZFtp
XS5hbmNob3IsIHNlbGVjdGVkW2ldLmhlYWQsICJkcmFnIik7CiAgICAgICAgICAgY20ucmVwbGFj
ZVNlbGVjdGlvbih0ZXh0LCAiYXJvdW5kIiwgInBhc3RlIik7Ci0gICAgICAgICAgZm9jdXNJbnB1
dChjbSk7CisgICAgICAgICAgY20uZGlzcGxheS5pbnB1dC5mb2N1cygpOwogICAgICAgICB9CiAg
ICAgICB9CiAgICAgICBjYXRjaChlKXt9CkBAIC0yODU0LDYgKzM4NjksMjUgQEAKICAgICB9CiAg
IH0KIAorICBmdW5jdGlvbiBvbkRyYWdPdmVyKGNtLCBlKSB7CisgICAgdmFyIHBvcyA9IHBvc0Zy
b21Nb3VzZShjbSwgZSk7CisgICAgaWYgKCFwb3MpIHJldHVybjsKKyAgICB2YXIgZnJhZyA9IGRv
Y3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICBkcmF3U2VsZWN0aW9uQ3Vyc29y
KGNtLCBwb3MsIGZyYWcpOworICAgIGlmICghY20uZGlzcGxheS5kcmFnQ3Vyc29yKSB7CisgICAg
ICBjbS5kaXNwbGF5LmRyYWdDdXJzb3IgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWN1
cnNvcnMgQ29kZU1pcnJvci1kcmFnY3Vyc29ycyIpOworICAgICAgY20uZGlzcGxheS5saW5lU3Bh
Y2UuaW5zZXJ0QmVmb3JlKGNtLmRpc3BsYXkuZHJhZ0N1cnNvciwgY20uZGlzcGxheS5jdXJzb3JE
aXYpOworICAgIH0KKyAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5LmRyYWdDdXJz
b3IsIGZyYWcpOworICB9CisKKyAgZnVuY3Rpb24gY2xlYXJEcmFnQ3Vyc29yKGNtKSB7CisgICAg
aWYgKGNtLmRpc3BsYXkuZHJhZ0N1cnNvcikgeworICAgICAgY20uZGlzcGxheS5saW5lU3BhY2Uu
cmVtb3ZlQ2hpbGQoY20uZGlzcGxheS5kcmFnQ3Vyc29yKTsKKyAgICAgIGNtLmRpc3BsYXkuZHJh
Z0N1cnNvciA9IG51bGw7CisgICAgfQorICB9CisKICAgLy8gU0NST0xMIEVWRU5UUwogCiAgIC8v
IFN5bmMgdGhlIHNjcm9sbGFibGUgYXJlYSBhbmQgc2Nyb2xsYmFycywgZW5zdXJlIHRoZSB2aWV3
cG9ydApAQCAtMjg2MSwxMCArMzg5NSwxMCBAQAogICBmdW5jdGlvbiBzZXRTY3JvbGxUb3AoY20s
IHZhbCkgewogICAgIGlmIChNYXRoLmFicyhjbS5kb2Muc2Nyb2xsVG9wIC0gdmFsKSA8IDIpIHJl
dHVybjsKICAgICBjbS5kb2Muc2Nyb2xsVG9wID0gdmFsOwotICAgIGlmICghZ2Vja28pIHVwZGF0
ZURpc3BsYXkoY20sIHt0b3A6IHZhbH0pOworICAgIGlmICghZ2Vja28pIHVwZGF0ZURpc3BsYXlT
aW1wbGUoY20sIHt0b3A6IHZhbH0pOwogICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9s
bFRvcCAhPSB2YWwpIGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gdmFsOwotICAgIGlm
IChjbS5kaXNwbGF5LnNjcm9sbGJhclYuc2Nyb2xsVG9wICE9IHZhbCkgY20uZGlzcGxheS5zY3Jv
bGxiYXJWLnNjcm9sbFRvcCA9IHZhbDsKLSAgICBpZiAoZ2Vja28pIHVwZGF0ZURpc3BsYXkoY20p
OworICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AodmFsKTsKKyAgICBpZiAo
Z2Vja28pIHVwZGF0ZURpc3BsYXlTaW1wbGUoY20pOwogICAgIHN0YXJ0V29ya2VyKGNtLCAxMDAp
OwogICB9CiAgIC8vIFN5bmMgc2Nyb2xsZXIgYW5kIHNjcm9sbGJhciwgZW5zdXJlIHRoZSBndXR0
ZXIgZWxlbWVudHMgYXJlCkBAIC0yODc1LDcgKzM5MDksNyBAQAogICAgIGNtLmRvYy5zY3JvbGxM
ZWZ0ID0gdmFsOwogICAgIGFsaWduSG9yaXpvbnRhbGx5KGNtKTsKICAgICBpZiAoY20uZGlzcGxh
eS5zY3JvbGxlci5zY3JvbGxMZWZ0ICE9IHZhbCkgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxM
ZWZ0ID0gdmFsOwotICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdCAhPSB2
YWwpIGNtLmRpc3BsYXkuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0ID0gdmFsOworICAgIGNtLmRpc3Bs
YXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxMZWZ0KHZhbCk7CiAgIH0KIAogICAvLyBTaW5jZSB0aGUg
ZGVsdGEgdmFsdWVzIHJlcG9ydGVkIG9uIG1vdXNlIHdoZWVsIGV2ZW50cyBhcmUKQEAgLTI4OTks
MTEgKzM5MzMsMjIgQEAKICAgZWxzZSBpZiAoY2hyb21lKSB3aGVlbFBpeGVsc1BlclVuaXQgPSAt
Ljc7CiAgIGVsc2UgaWYgKHNhZmFyaSkgd2hlZWxQaXhlbHNQZXJVbml0ID0gLTEvMzsKIAotICBm
dW5jdGlvbiBvblNjcm9sbFdoZWVsKGNtLCBlKSB7CisgIHZhciB3aGVlbEV2ZW50RGVsdGEgPSBm
dW5jdGlvbihlKSB7CiAgICAgdmFyIGR4ID0gZS53aGVlbERlbHRhWCwgZHkgPSBlLndoZWVsRGVs
dGFZOwogICAgIGlmIChkeCA9PSBudWxsICYmIGUuZGV0YWlsICYmIGUuYXhpcyA9PSBlLkhPUkla
T05UQUxfQVhJUykgZHggPSBlLmRldGFpbDsKICAgICBpZiAoZHkgPT0gbnVsbCAmJiBlLmRldGFp
bCAmJiBlLmF4aXMgPT0gZS5WRVJUSUNBTF9BWElTKSBkeSA9IGUuZGV0YWlsOwogICAgIGVsc2Ug
aWYgKGR5ID09IG51bGwpIGR5ID0gZS53aGVlbERlbHRhOworICAgIHJldHVybiB7eDogZHgsIHk6
IGR5fTsKKyAgfTsKKyAgQ29kZU1pcnJvci53aGVlbEV2ZW50UGl4ZWxzID0gZnVuY3Rpb24oZSkg
eworICAgIHZhciBkZWx0YSA9IHdoZWVsRXZlbnREZWx0YShlKTsKKyAgICBkZWx0YS54ICo9IHdo
ZWVsUGl4ZWxzUGVyVW5pdDsKKyAgICBkZWx0YS55ICo9IHdoZWVsUGl4ZWxzUGVyVW5pdDsKKyAg
ICByZXR1cm4gZGVsdGE7CisgIH07CisKKyAgZnVuY3Rpb24gb25TY3JvbGxXaGVlbChjbSwgZSkg
eworICAgIHZhciBkZWx0YSA9IHdoZWVsRXZlbnREZWx0YShlKSwgZHggPSBkZWx0YS54LCBkeSA9
IGRlbHRhLnk7CiAKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNjcm9sbCA9IGRpc3Bs
YXkuc2Nyb2xsZXI7CiAgICAgLy8gUXVpdCBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gc2Nyb2xsIGhl
cmUKQEAgLTI5NDcsNyArMzk5Miw3IEBACiAgICAgICB2YXIgdG9wID0gY20uZG9jLnNjcm9sbFRv
cCwgYm90ID0gdG9wICsgZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKICAgICAgIGlmIChw
aXhlbHMgPCAwKSB0b3AgPSBNYXRoLm1heCgwLCB0b3AgKyBwaXhlbHMgLSA1MCk7CiAgICAgICBl
bHNlIGJvdCA9IE1hdGgubWluKGNtLmRvYy5oZWlnaHQsIGJvdCArIHBpeGVscyArIDUwKTsKLSAg
ICAgIHVwZGF0ZURpc3BsYXkoY20sIHt0b3A6IHRvcCwgYm90dG9tOiBib3R9KTsKKyAgICAgIHVw
ZGF0ZURpc3BsYXlTaW1wbGUoY20sIHt0b3A6IHRvcCwgYm90dG9tOiBib3R9KTsKICAgICB9CiAK
ICAgICBpZiAod2hlZWxTYW1wbGVzIDwgMjApIHsKQEAgLTI5ODEsNyArNDAyNiw3IEBACiAgICAg
fQogICAgIC8vIEVuc3VyZSBwcmV2aW91cyBpbnB1dCBoYXMgYmVlbiByZWFkLCBzbyB0aGF0IHRo
ZSBoYW5kbGVyIHNlZXMgYQogICAgIC8vIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgZG9jdW1lbnQK
LSAgICBpZiAoY20uZGlzcGxheS5wb2xsaW5nRmFzdCAmJiByZWFkSW5wdXQoY20pKSBjbS5kaXNw
bGF5LnBvbGxpbmdGYXN0ID0gZmFsc2U7CisgICAgY20uZGlzcGxheS5pbnB1dC5lbnN1cmVQb2xs
ZWQoKTsKICAgICB2YXIgcHJldlNoaWZ0ID0gY20uZGlzcGxheS5zaGlmdCwgZG9uZSA9IGZhbHNl
OwogICAgIHRyeSB7CiAgICAgICBpZiAoaXNSZWFkT25seShjbSkpIGNtLnN0YXRlLnN1cHByZXNz
RWRpdHMgPSB0cnVlOwpAQCAtMjk5NCw3MSArNDAzOSw3OSBAQAogICAgIHJldHVybiBkb25lOwog
ICB9CiAKLSAgLy8gQ29sbGVjdCB0aGUgY3VycmVudGx5IGFjdGl2ZSBrZXltYXBzLgotICBmdW5j
dGlvbiBhbGxLZXlNYXBzKGNtKSB7Ci0gICAgdmFyIG1hcHMgPSBjbS5zdGF0ZS5rZXlNYXBzLnNs
aWNlKDApOwotICAgIGlmIChjbS5vcHRpb25zLmV4dHJhS2V5cykgbWFwcy5wdXNoKGNtLm9wdGlv
bnMuZXh0cmFLZXlzKTsKLSAgICBtYXBzLnB1c2goY20ub3B0aW9ucy5rZXlNYXApOwotICAgIHJl
dHVybiBtYXBzOworICBmdW5jdGlvbiBsb29rdXBLZXlGb3JFZGl0b3IoY20sIG5hbWUsIGhhbmRs
ZSkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uc3RhdGUua2V5TWFwcy5sZW5ndGg7IGkr
KykgeworICAgICAgdmFyIHJlc3VsdCA9IGxvb2t1cEtleShuYW1lLCBjbS5zdGF0ZS5rZXlNYXBz
W2ldLCBoYW5kbGUsIGNtKTsKKyAgICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIHJldHVybiAoY20ub3B0aW9ucy5leHRyYUtleXMgJiYgbG9va3VwS2V5KG5hbWUsIGNt
Lm9wdGlvbnMuZXh0cmFLZXlzLCBoYW5kbGUsIGNtKSkKKyAgICAgIHx8IGxvb2t1cEtleShuYW1l
LCBjbS5vcHRpb25zLmtleU1hcCwgaGFuZGxlLCBjbSk7CisgIH0KKworICB2YXIgc3RvcFNlcSA9
IG5ldyBEZWxheWVkOworICBmdW5jdGlvbiBkaXNwYXRjaEtleShjbSwgbmFtZSwgZSwgaGFuZGxl
KSB7CisgICAgdmFyIHNlcSA9IGNtLnN0YXRlLmtleVNlcTsKKyAgICBpZiAoc2VxKSB7CisgICAg
ICBpZiAoaXNNb2RpZmllcktleShuYW1lKSkgcmV0dXJuICJoYW5kbGVkIjsKKyAgICAgIHN0b3BT
ZXEuc2V0KDUwLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKGNtLnN0YXRlLmtleVNlcSA9PSBz
ZXEpIHsKKyAgICAgICAgICBjbS5zdGF0ZS5rZXlTZXEgPSBudWxsOworICAgICAgICAgIGNtLmRp
c3BsYXkuaW5wdXQucmVzZXQoKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBuYW1lID0g
c2VxICsgIiAiICsgbmFtZTsKKyAgICB9CisgICAgdmFyIHJlc3VsdCA9IGxvb2t1cEtleUZvckVk
aXRvcihjbSwgbmFtZSwgaGFuZGxlKTsKKworICAgIGlmIChyZXN1bHQgPT0gIm11bHRpIikKKyAg
ICAgIGNtLnN0YXRlLmtleVNlcSA9IG5hbWU7CisgICAgaWYgKHJlc3VsdCA9PSAiaGFuZGxlZCIp
CisgICAgICBzaWduYWxMYXRlcihjbSwgImtleUhhbmRsZWQiLCBjbSwgbmFtZSwgZSk7CisKKyAg
ICBpZiAocmVzdWx0ID09ICJoYW5kbGVkIiB8fCByZXN1bHQgPT0gIm11bHRpIikgeworICAgICAg
ZV9wcmV2ZW50RGVmYXVsdChlKTsKKyAgICAgIHJlc3RhcnRCbGluayhjbSk7CisgICAgfQorCisg
ICAgaWYgKHNlcSAmJiAhcmVzdWx0ICYmIC9cJyQvLnRlc3QobmFtZSkpIHsKKyAgICAgIGVfcHJl
dmVudERlZmF1bHQoZSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuICEh
cmVzdWx0OwogICB9CiAKLSAgdmFyIG1heWJlVHJhbnNpdGlvbjsKICAgLy8gSGFuZGxlIGEga2V5
IGZyb20gdGhlIGtleWRvd24gZXZlbnQuCiAgIGZ1bmN0aW9uIGhhbmRsZUtleUJpbmRpbmcoY20s
IGUpIHsKLSAgICAvLyBIYW5kbGUgYXV0b21hdGljIGtleW1hcCB0cmFuc2l0aW9ucwotICAgIHZh
ciBzdGFydE1hcCA9IGdldEtleU1hcChjbS5vcHRpb25zLmtleU1hcCksIG5leHQgPSBzdGFydE1h
cC5hdXRvOwotICAgIGNsZWFyVGltZW91dChtYXliZVRyYW5zaXRpb24pOwotICAgIGlmIChuZXh0
ICYmICFpc01vZGlmaWVyS2V5KGUpKSBtYXliZVRyYW5zaXRpb24gPSBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgewotICAgICAgaWYgKGdldEtleU1hcChjbS5vcHRpb25zLmtleU1hcCkgPT0gc3RhcnRN
YXApIHsKLSAgICAgICAgY20ub3B0aW9ucy5rZXlNYXAgPSAobmV4dC5jYWxsID8gbmV4dC5jYWxs
KG51bGwsIGNtKSA6IG5leHQpOwotICAgICAgICBrZXlNYXBDaGFuZ2VkKGNtKTsKLSAgICAgIH0K
LSAgICB9LCA1MCk7Ci0KLSAgICB2YXIgbmFtZSA9IGtleU5hbWUoZSwgdHJ1ZSksIGhhbmRsZWQg
PSBmYWxzZTsKKyAgICB2YXIgbmFtZSA9IGtleU5hbWUoZSwgdHJ1ZSk7CiAgICAgaWYgKCFuYW1l
KSByZXR1cm4gZmFsc2U7Ci0gICAgdmFyIGtleW1hcHMgPSBhbGxLZXlNYXBzKGNtKTsKIAotICAg
IGlmIChlLnNoaWZ0S2V5KSB7CisgICAgaWYgKGUuc2hpZnRLZXkgJiYgIWNtLnN0YXRlLmtleVNl
cSkgewogICAgICAgLy8gRmlyc3QgdHJ5IHRvIHJlc29sdmUgZnVsbCBuYW1lIChpbmNsdWRpbmcg
J1NoaWZ0LScpLiBGYWlsaW5nCiAgICAgICAvLyB0aGF0LCBzZWUgaWYgdGhlcmUgaXMgYSBjdXJz
b3ItbW90aW9uIGNvbW1hbmQgKHN0YXJ0aW5nIHdpdGgKICAgICAgIC8vICdnbycpIGJvdW5kIHRv
IHRoZSBrZXluYW1lIHdpdGhvdXQgJ1NoaWZ0LScuCi0gICAgICBoYW5kbGVkID0gbG9va3VwS2V5
KCJTaGlmdC0iICsgbmFtZSwga2V5bWFwcywgZnVuY3Rpb24oYikge3JldHVybiBkb0hhbmRsZUJp
bmRpbmcoY20sIGIsIHRydWUpO30pCi0gICAgICAgICAgICAgfHwgbG9va3VwS2V5KG5hbWUsIGtl
eW1hcHMsIGZ1bmN0aW9uKGIpIHsKLSAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYiA9PSAi
c3RyaW5nIiA/IC9eZ29bQS1aXS8udGVzdChiKSA6IGIubW90aW9uKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiKTsKLSAgICAgICAgICAgICAgICB9KTsK
KyAgICAgIHJldHVybiBkaXNwYXRjaEtleShjbSwgIlNoaWZ0LSIgKyBuYW1lLCBlLCBmdW5jdGlv
bihiKSB7cmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYiwgdHJ1ZSk7fSkKKyAgICAgICAgICB8
fCBkaXNwYXRjaEtleShjbSwgbmFtZSwgZSwgZnVuY3Rpb24oYikgeworICAgICAgICAgICAgICAg
aWYgKHR5cGVvZiBiID09ICJzdHJpbmciID8gL15nb1tBLVpdLy50ZXN0KGIpIDogYi5tb3Rpb24p
CisgICAgICAgICAgICAgICAgIHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIpOworICAgICAg
ICAgICAgIH0pOwogICAgIH0gZWxzZSB7Ci0gICAgICBoYW5kbGVkID0gbG9va3VwS2V5KG5hbWUs
IGtleW1hcHMsIGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYik7IH0p
OwotICAgIH0KLQotICAgIGlmIChoYW5kbGVkKSB7Ci0gICAgICBlX3ByZXZlbnREZWZhdWx0KGUp
OwotICAgICAgcmVzdGFydEJsaW5rKGNtKTsKLSAgICAgIHNpZ25hbExhdGVyKGNtLCAia2V5SGFu
ZGxlZCIsIGNtLCBuYW1lLCBlKTsKKyAgICAgIHJldHVybiBkaXNwYXRjaEtleShjbSwgbmFtZSwg
ZSwgZnVuY3Rpb24oYikgeyByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiKTsgfSk7CiAgICAg
fQotICAgIHJldHVybiBoYW5kbGVkOwogICB9CiAKICAgLy8gSGFuZGxlIGEga2V5IGZyb20gdGhl
IGtleXByZXNzIGV2ZW50CiAgIGZ1bmN0aW9uIGhhbmRsZUNoYXJCaW5kaW5nKGNtLCBlLCBjaCkg
ewotICAgIHZhciBoYW5kbGVkID0gbG9va3VwS2V5KCInIiArIGNoICsgIiciLCBhbGxLZXlNYXBz
KGNtKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihiKSB7IHJldHVybiBk
b0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUpOyB9KTsKLSAgICBpZiAoaGFuZGxlZCkgewotICAg
ICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKLSAgICAgIHJlc3RhcnRCbGluayhjbSk7Ci0gICAgICBz
aWduYWxMYXRlcihjbSwgImtleUhhbmRsZWQiLCBjbSwgIiciICsgY2ggKyAiJyIsIGUpOwotICAg
IH0KLSAgICByZXR1cm4gaGFuZGxlZDsKKyAgICByZXR1cm4gZGlzcGF0Y2hLZXkoY20sICInIiAr
IGNoICsgIiciLCBlLAorICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihiKSB7IHJldHVy
biBkb0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUpOyB9KTsKICAgfQogCiAgIHZhciBsYXN0U3Rv
cHBlZEtleSA9IG51bGw7CiAgIGZ1bmN0aW9uIG9uS2V5RG93bihlKSB7CiAgICAgdmFyIGNtID0g
dGhpczsKLSAgICBlbnN1cmVGb2N1cyhjbSk7CisgICAgY20uY3VyT3AuZm9jdXMgPSBhY3RpdmVF
bHQoKTsKICAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpKSByZXR1cm47CiAgICAgLy8gSUUg
ZG9lcyBzdHJhbmdlIHRoaW5ncyB3aXRoIGVzY2FwZS4KLSAgICBpZiAoaWVfdXB0bzEwICYmIGUu
a2V5Q29kZSA9PSAyNykgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgIGlmIChpZSAmJiBpZV92
ZXJzaW9uIDwgMTEgJiYgZS5rZXlDb2RlID09IDI3KSBlLnJldHVyblZhbHVlID0gZmFsc2U7CiAg
ICAgdmFyIGNvZGUgPSBlLmtleUNvZGU7CiAgICAgY20uZGlzcGxheS5zaGlmdCA9IGNvZGUgPT0g
MTYgfHwgZS5zaGlmdEtleTsKICAgICB2YXIgaGFuZGxlZCA9IGhhbmRsZUtleUJpbmRpbmcoY20s
IGUpOwpAQCAtMzA5MCw0MiArNDE0Myw1NSBAQAogICB9CiAKICAgZnVuY3Rpb24gb25LZXlVcChl
KSB7Ci0gICAgaWYgKHNpZ25hbERPTUV2ZW50KHRoaXMsIGUpKSByZXR1cm47CiAgICAgaWYgKGUu
a2V5Q29kZSA9PSAxNikgdGhpcy5kb2Muc2VsLnNoaWZ0ID0gZmFsc2U7CisgICAgc2lnbmFsRE9N
RXZlbnQodGhpcywgZSk7CiAgIH0KIAogICBmdW5jdGlvbiBvbktleVByZXNzKGUpIHsKICAgICB2
YXIgY20gPSB0aGlzOwotICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHJldHVybjsKKyAg
ICBpZiAoZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSB8fCBzaWduYWxET01FdmVudChjbSwg
ZSkgfHwgZS5jdHJsS2V5ICYmICFlLmFsdEtleSB8fCBtYWMgJiYgZS5tZXRhS2V5KSByZXR1cm47
CiAgICAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGUsIGNoYXJDb2RlID0gZS5jaGFyQ29kZTsKICAg
ICBpZiAocHJlc3RvICYmIGtleUNvZGUgPT0gbGFzdFN0b3BwZWRLZXkpIHtsYXN0U3RvcHBlZEtl
eSA9IG51bGw7IGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9Ci0gICAgaWYgKCgocHJlc3Rv
ICYmICghZS53aGljaCB8fCBlLndoaWNoIDwgMTApKSB8fCBraHRtbCkgJiYgaGFuZGxlS2V5Qmlu
ZGluZyhjbSwgZSkpIHJldHVybjsKKyAgICBpZiAoKHByZXN0byAmJiAoIWUud2hpY2ggfHwgZS53
aGljaCA8IDEwKSkgJiYgaGFuZGxlS2V5QmluZGluZyhjbSwgZSkpIHJldHVybjsKICAgICB2YXIg
Y2ggPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlID09IG51bGwgPyBrZXlDb2RlIDogY2hh
ckNvZGUpOwogICAgIGlmIChoYW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpKSByZXR1cm47Ci0g
ICAgaWYgKGllICYmICFpZV91cHRvOCkgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9IG51
bGw7Ci0gICAgZmFzdFBvbGwoY20pOworICAgIGNtLmRpc3BsYXkuaW5wdXQub25LZXlQcmVzcyhl
KTsKICAgfQogCiAgIC8vIEZPQ1VTL0JMVVIgRVZFTlRTCiAKKyAgZnVuY3Rpb24gZGVsYXlCbHVy
RXZlbnQoY20pIHsKKyAgICBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IHRydWU7CisgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgIGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJF
dmVudCkgeworICAgICAgICBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IGZhbHNlOworICAg
ICAgICBvbkJsdXIoY20pOworICAgICAgfQorICAgIH0sIDEwMCk7CisgIH0KKwogICBmdW5jdGlv
biBvbkZvY3VzKGNtKSB7CisgICAgaWYgKGNtLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50KSBjbS5z
dGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IGZhbHNlOworCiAgICAgaWYgKGNtLm9wdGlvbnMucmVh
ZE9ubHkgPT0gIm5vY3Vyc29yIikgcmV0dXJuOwogICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkg
ewogICAgICAgc2lnbmFsKGNtLCAiZm9jdXMiLCBjbSk7CiAgICAgICBjbS5zdGF0ZS5mb2N1c2Vk
ID0gdHJ1ZTsKICAgICAgIGFkZENsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3It
Zm9jdXNlZCIpOwotICAgICAgLy8gVGhlIHByZXZJbnB1dCB0ZXN0IHByZXZlbnRzIHRoaXMgZnJv
bSBmaXJpbmcgd2hlbiBhIGNvbnRleHQKLSAgICAgIC8vIG1lbnUgaXMgY2xvc2VkIChzaW5jZSB0
aGUgcmVzZXRJbnB1dCB3b3VsZCBraWxsIHRoZQorICAgICAgLy8gVGhpcyB0ZXN0IHByZXZlbnRz
IHRoaXMgZnJvbSBmaXJpbmcgd2hlbiBhIGNvbnRleHQKKyAgICAgIC8vIG1lbnUgaXMgY2xvc2Vk
IChzaW5jZSB0aGUgaW5wdXQgcmVzZXQgd291bGQga2lsbCB0aGUKICAgICAgIC8vIHNlbGVjdC1h
bGwgZGV0ZWN0aW9uIGhhY2spCiAgICAgICBpZiAoIWNtLmN1ck9wICYmIGNtLmRpc3BsYXkuc2Vs
Rm9yQ29udGV4dE1lbnUgIT0gY20uZG9jLnNlbCkgewotICAgICAgICByZXNldElucHV0KGNtKTsK
LSAgICAgICAgaWYgKHdlYmtpdCkgc2V0VGltZW91dChiaW5kKHJlc2V0SW5wdXQsIGNtLCB0cnVl
KSwgMCk7IC8vIElzc3VlICMxNzMwCisgICAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTsK
KyAgICAgICAgaWYgKHdlYmtpdCkgc2V0VGltZW91dChmdW5jdGlvbigpIHsgY20uZGlzcGxheS5p
bnB1dC5yZXNldCh0cnVlKTsgfSwgMjApOyAvLyBJc3N1ZSAjMTczMAogICAgICAgfQorICAgICAg
Y20uZGlzcGxheS5pbnB1dC5yZWNlaXZlZEZvY3VzKCk7CiAgICAgfQotICAgIHNsb3dQb2xsKGNt
KTsKICAgICByZXN0YXJ0QmxpbmsoY20pOwogICB9CiAgIGZ1bmN0aW9uIG9uQmx1cihjbSkgewor
ICAgIGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkgcmV0dXJuOworCiAgICAgaWYgKGNt
LnN0YXRlLmZvY3VzZWQpIHsKICAgICAgIHNpZ25hbChjbSwgImJsdXIiLCBjbSk7CiAgICAgICBj
bS5zdGF0ZS5mb2N1c2VkID0gZmFsc2U7CkBAIC0zMTQxLDc2ICs0MjA3LDggQEAKICAgLy8gdGV4
dGFyZWEgKG1ha2luZyBpdCBhcyB1bm9idHJ1c2l2ZSBhcyBwb3NzaWJsZSkgdG8gbGV0IHRoZQog
ICAvLyByaWdodC1jbGljayB0YWtlIGVmZmVjdCBvbiBpdC4KICAgZnVuY3Rpb24gb25Db250ZXh0
TWVudShjbSwgZSkgewotICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSwgImNvbnRleHRtZW51
IikpIHJldHVybjsKLSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7Ci0gICAgaWYgKGV2ZW50
SW5XaWRnZXQoZGlzcGxheSwgZSkgfHwgY29udGV4dE1lbnVJbkd1dHRlcihjbSwgZSkpIHJldHVy
bjsKLQotICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUpLCBzY3JvbGxQb3MgPSBkaXNw
bGF5LnNjcm9sbGVyLnNjcm9sbFRvcDsKLSAgICBpZiAoIXBvcyB8fCBwcmVzdG8pIHJldHVybjsg
Ly8gT3BlcmEgaXMgZGlmZmljdWx0LgotCi0gICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgdGV4dCBz
ZWxlY3Rpb24gb25seSBpZiB0aGUgY2xpY2sgaXMgZG9uZSBvdXRzaWRlIG9mIHRoZSBzZWxlY3Rp
b24KLSAgICAvLyBhbmQgJ3Jlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudScgb3B0aW9uIGlzIHRy
dWUuCi0gICAgdmFyIHJlc2V0ID0gY20ub3B0aW9ucy5yZXNldFNlbGVjdGlvbk9uQ29udGV4dE1l
bnU7Ci0gICAgaWYgKHJlc2V0ICYmIGNtLmRvYy5zZWwuY29udGFpbnMocG9zKSA9PSAtMSkKLSAg
ICAgIG9wZXJhdGlvbihjbSwgc2V0U2VsZWN0aW9uKShjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihw
b3MpLCBzZWxfZG9udFNjcm9sbCk7Ci0KLSAgICB2YXIgb2xkQ1NTID0gZGlzcGxheS5pbnB1dC5z
dHlsZS5jc3NUZXh0OwotICAgIGRpc3BsYXkuaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAiYWJz
b2x1dGUiOwotICAgIGRpc3BsYXkuaW5wdXQuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogZml4
ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIiArIChlLmNsaWVudFkgLSA1KSAr
Ci0gICAgICAicHg7IGxlZnQ6ICIgKyAoZS5jbGllbnRYIC0gNSkgKyAicHg7IHotaW5kZXg6IDEw
MDA7IGJhY2tncm91bmQ6ICIgKwotICAgICAgKGllID8gInJnYmEoMjU1LCAyNTUsIDI1NSwgLjA1
KSIgOiAidHJhbnNwYXJlbnQiKSArCi0gICAgICAiOyBvdXRsaW5lOiBub25lOyBib3JkZXItd2lk
dGg6IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgZmls
dGVyOiBhbHBoYShvcGFjaXR5PTUpOyI7Ci0gICAgZm9jdXNJbnB1dChjbSk7Ci0gICAgcmVzZXRJ
bnB1dChjbSk7Ci0gICAgLy8gQWRkcyAiU2VsZWN0IGFsbCIgdG8gY29udGV4dCBtZW51IGluIEZG
Ci0gICAgaWYgKCFjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSBkaXNwbGF5LmlucHV0LnZhbHVlID0g
ZGlzcGxheS5wcmV2SW5wdXQgPSAiICI7Ci0gICAgZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9
IGNtLmRvYy5zZWw7Ci0gICAgY2xlYXJUaW1lb3V0KGRpc3BsYXkuZGV0ZWN0aW5nU2VsZWN0QWxs
KTsKLQotICAgIC8vIFNlbGVjdC1hbGwgd2lsbCBiZSBncmV5ZWQgb3V0IGlmIHRoZXJlJ3Mgbm90
aGluZyB0byBzZWxlY3QsIHNvCi0gICAgLy8gdGhpcyBhZGRzIGEgemVyby13aWR0aCBzcGFjZSBz
byB0aGF0IHdlIGNhbiBsYXRlciBjaGVjayB3aGV0aGVyCi0gICAgLy8gaXQgZ290IHNlbGVjdGVk
LgotICAgIGZ1bmN0aW9uIHByZXBhcmVTZWxlY3RBbGxIYWNrKCkgewotICAgICAgaWYgKGRpc3Bs
YXkuaW5wdXQuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCkgewotICAgICAgICB2YXIgc2VsZWN0ZWQg
PSBjbS5zb21ldGhpbmdTZWxlY3RlZCgpOwotICAgICAgICB2YXIgZXh0dmFsID0gZGlzcGxheS5p
bnB1dC52YWx1ZSA9ICJcdTIwMGIiICsgKHNlbGVjdGVkID8gZGlzcGxheS5pbnB1dC52YWx1ZSA6
ICIiKTsKLSAgICAgICAgZGlzcGxheS5wcmV2SW5wdXQgPSBzZWxlY3RlZCA/ICIiIDogIlx1MjAw
YiI7Ci0gICAgICAgIGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSAxOyBkaXNwbGF5Lmlu
cHV0LnNlbGVjdGlvbkVuZCA9IGV4dHZhbC5sZW5ndGg7Ci0gICAgICAgIC8vIFJlLXNldCB0aGlz
LCBpbiBjYXNlIHNvbWUgb3RoZXIgaGFuZGxlciB0b3VjaGVkIHRoZQotICAgICAgICAvLyBzZWxl
Y3Rpb24gaW4gdGhlIG1lYW50aW1lLgotICAgICAgICBkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51
ID0gY20uZG9jLnNlbDsKLSAgICAgIH0KLSAgICB9Ci0gICAgZnVuY3Rpb24gcmVoaWRlKCkgewot
ICAgICAgZGlzcGxheS5pbnB1dERpdi5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7Ci0gICAg
ICBkaXNwbGF5LmlucHV0LnN0eWxlLmNzc1RleHQgPSBvbGRDU1M7Ci0gICAgICBpZiAoaWVfdXB0
bzgpIGRpc3BsYXkuc2Nyb2xsYmFyVi5zY3JvbGxUb3AgPSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9s
bFRvcCA9IHNjcm9sbFBvczsKLSAgICAgIHNsb3dQb2xsKGNtKTsKLQotICAgICAgLy8gVHJ5IHRv
IGRldGVjdCB0aGUgdXNlciBjaG9vc2luZyBzZWxlY3QtYWxsCi0gICAgICBpZiAoZGlzcGxheS5p
bnB1dC5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7Ci0gICAgICAgIGlmICghaWUgfHwgaWVfdXB0
bzgpIHByZXBhcmVTZWxlY3RBbGxIYWNrKCk7Ci0gICAgICAgIHZhciBpID0gMCwgcG9sbCA9IGZ1
bmN0aW9uKCkgewotICAgICAgICAgIGlmIChkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID09IGNt
LmRvYy5zZWwgJiYgZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25TdGFydCA9PSAwKQotICAgICAgICAg
ICAgb3BlcmF0aW9uKGNtLCBjb21tYW5kcy5zZWxlY3RBbGwpKGNtKTsKLSAgICAgICAgICBlbHNl
IGlmIChpKysgPCAxMCkgZGlzcGxheS5kZXRlY3RpbmdTZWxlY3RBbGwgPSBzZXRUaW1lb3V0KHBv
bGwsIDUwMCk7Ci0gICAgICAgICAgZWxzZSByZXNldElucHV0KGNtKTsKLSAgICAgICAgfTsKLSAg
ICAgICAgZGlzcGxheS5kZXRlY3RpbmdTZWxlY3RBbGwgPSBzZXRUaW1lb3V0KHBvbGwsIDIwMCk7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGllICYmICFpZV91cHRvOCkgcHJlcGFyZVNlbGVj
dEFsbEhhY2soKTsKLSAgICBpZiAoY2FwdHVyZVJpZ2h0Q2xpY2spIHsKLSAgICAgIGVfc3RvcChl
KTsKLSAgICAgIHZhciBtb3VzZXVwID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIG9mZih3aW5kb3cs
ICJtb3VzZXVwIiwgbW91c2V1cCk7Ci0gICAgICAgIHNldFRpbWVvdXQocmVoaWRlLCAyMCk7Ci0g
ICAgICB9OwotICAgICAgb24od2luZG93LCAibW91c2V1cCIsIG1vdXNldXApOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBzZXRUaW1lb3V0KHJlaGlkZSwgNTApOwotICAgIH0KKyAgICBpZiAoZXZlbnRJ
bldpZGdldChjbS5kaXNwbGF5LCBlKSB8fCBjb250ZXh0TWVudUluR3V0dGVyKGNtLCBlKSkgcmV0
dXJuOworICAgIGNtLmRpc3BsYXkuaW5wdXQub25Db250ZXh0TWVudShlKTsKICAgfQogCiAgIGZ1
bmN0aW9uIGNvbnRleHRNZW51SW5HdXR0ZXIoY20sIGUpIHsKQEAgLTMzOTAsOSArNDM4OCw5IEBA
CiAKICAgICAgIGFudGlDaGFuZ2VzLnB1c2goaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBj
aGFuZ2UpKTsKIAotICAgICAgdmFyIGFmdGVyID0gaSA/IGNvbXB1dGVTZWxBZnRlckNoYW5nZShk
b2MsIGNoYW5nZSwgbnVsbCkgOiBsc3Qoc291cmNlKTsKKyAgICAgIHZhciBhZnRlciA9IGkgPyBj
b21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpIDogbHN0KHNvdXJjZSk7CiAgICAgICBt
YWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBhZnRlciwgbWVyZ2VPbGRTcGFucyhkb2Ms
IGNoYW5nZSkpOwotICAgICAgaWYgKCFpICYmIGRvYy5jbSkgZG9jLmNtLnNjcm9sbEludG9WaWV3
KGNoYW5nZSk7CisgICAgICBpZiAoIWkgJiYgZG9jLmNtKSBkb2MuY20uc2Nyb2xsSW50b1ZpZXco
e2Zyb206IGNoYW5nZS5mcm9tLCB0bzogY2hhbmdlRW5kKGNoYW5nZSl9KTsKICAgICAgIHZhciBy
ZWJhc2VkID0gW107CiAKICAgICAgIC8vIFByb3BhZ2F0ZSB0byB0aGUgbGlua2VkIGRvY3VtZW50
cwpAQCAtMzQ0OSw3ICs0NDQ3LDcgQEAKIAogICAgIGNoYW5nZS5yZW1vdmVkID0gZ2V0QmV0d2Vl
bihkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pOwogCi0gICAgaWYgKCFzZWxBZnRlcikgc2Vs
QWZ0ZXIgPSBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIG51bGwpOworICAgIGlm
ICghc2VsQWZ0ZXIpIHNlbEFmdGVyID0gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdl
KTsKICAgICBpZiAoZG9jLmNtKSBtYWtlQ2hhbmdlU2luZ2xlRG9jSW5FZGl0b3IoZG9jLmNtLCBj
aGFuZ2UsIHNwYW5zKTsKICAgICBlbHNlIHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgc3BhbnMpOwog
ICAgIHNldFNlbGVjdGlvbk5vVW5kbyhkb2MsIHNlbEFmdGVyLCBzZWxfZG9udFNjcm9sbCk7CkBA
IC0zNDk1LDcgKzQ0OTMsOSBAQAogCiAgICAgdmFyIGxlbmRpZmYgPSBjaGFuZ2UudGV4dC5sZW5n
dGggLSAodG8ubGluZSAtIGZyb20ubGluZSkgLSAxOwogICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhl
c2UgbGluZXMgY2hhbmdlZCwgZm9yIHVwZGF0aW5nIHRoZSBkaXNwbGF5Ci0gICAgaWYgKGZyb20u
bGluZSA9PSB0by5saW5lICYmIGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxICYmICFpc1dob2xlTGlu
ZVVwZGF0ZShjbS5kb2MsIGNoYW5nZSkpCisgICAgaWYgKGNoYW5nZS5mdWxsKQorICAgICAgcmVn
Q2hhbmdlKGNtKTsKKyAgICBlbHNlIGlmIChmcm9tLmxpbmUgPT0gdG8ubGluZSAmJiBjaGFuZ2Uu
dGV4dC5sZW5ndGggPT0gMSAmJiAhaXNXaG9sZUxpbmVVcGRhdGUoY20uZG9jLCBjaGFuZ2UpKQog
ICAgICAgcmVnTGluZUNoYW5nZShjbSwgZnJvbS5saW5lLCAidGV4dCIpOwogICAgIGVsc2UKICAg
ICAgIHJlZ0NoYW5nZShjbSwgZnJvbS5saW5lLCB0by5saW5lICsgMSwgbGVuZGlmZik7CkBAIC0z
NTE3LDcgKzQ1MTcsNyBAQAogICBmdW5jdGlvbiByZXBsYWNlUmFuZ2UoZG9jLCBjb2RlLCBmcm9t
LCB0bywgb3JpZ2luKSB7CiAgICAgaWYgKCF0bykgdG8gPSBmcm9tOwogICAgIGlmIChjbXAodG8s
IGZyb20pIDwgMCkgeyB2YXIgdG1wID0gdG87IHRvID0gZnJvbTsgZnJvbSA9IHRtcDsgfQotICAg
IGlmICh0eXBlb2YgY29kZSA9PSAic3RyaW5nIikgY29kZSA9IHNwbGl0TGluZXMoY29kZSk7Cisg
ICAgaWYgKHR5cGVvZiBjb2RlID09ICJzdHJpbmciKSBjb2RlID0gZG9jLnNwbGl0TGluZXMoY29k
ZSk7CiAgICAgbWFrZUNoYW5nZShkb2MsIHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IGNvZGUs
IG9yaWdpbjogb3JpZ2lufSk7CiAgIH0KIApAQCAtMzUzNCw3ICs0NTM0LDcgQEAKICAgICBpZiAo
ZG9TY3JvbGwgIT0gbnVsbCAmJiAhcGhhbnRvbSkgewogICAgICAgdmFyIHNjcm9sbE5vZGUgPSBl
bHQoImRpdiIsICJcdTIwMGIiLCBudWxsLCAicG9zaXRpb246IGFic29sdXRlOyB0b3A6ICIgKwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvb3Jkcy50b3AgLSBkaXNwbGF5LnZpZXdPZmZz
ZXQgLSBwYWRkaW5nVG9wKGNtLmRpc3BsYXkpKSArICJweDsgaGVpZ2h0OiAiICsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjb29yZHMuYm90dG9tIC0gY29vcmRzLnRvcCArIHNjcm9sbGVy
Q3V0T2ZmKSArICJweDsgbGVmdDogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29v
cmRzLmJvdHRvbSAtIGNvb3Jkcy50b3AgKyBzY3JvbGxHYXAoY20pICsgZGlzcGxheS5iYXJIZWln
aHQpICsgInB4OyBsZWZ0OiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5s
ZWZ0ICsgInB4OyB3aWR0aDogMnB4OyIpOwogICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UuYXBw
ZW5kQ2hpbGQoc2Nyb2xsTm9kZSk7CiAgICAgICBzY3JvbGxOb2RlLnNjcm9sbEludG9WaWV3KGRv
U2Nyb2xsKTsKQEAgLTM1NDcsNyArNDU0Nyw3IEBACiAgIC8vIG1lYXN1cmVkLCB0aGUgcG9zaXRp
b24gb2Ygc29tZXRoaW5nIG1heSAnZHJpZnQnIGR1cmluZyBkcmF3aW5nKS4KICAgZnVuY3Rpb24g
c2Nyb2xsUG9zSW50b1ZpZXcoY20sIHBvcywgZW5kLCBtYXJnaW4pIHsKICAgICBpZiAobWFyZ2lu
ID09IG51bGwpIG1hcmdpbiA9IDA7Ci0gICAgZm9yICg7OykgeworICAgIGZvciAodmFyIGxpbWl0
ID0gMDsgbGltaXQgPCA1OyBsaW1pdCsrKSB7CiAgICAgICB2YXIgY2hhbmdlZCA9IGZhbHNlLCBj
b29yZHMgPSBjdXJzb3JDb29yZHMoY20sIHBvcyk7CiAgICAgICB2YXIgZW5kQ29vcmRzID0gIWVu
ZCB8fCBlbmQgPT0gcG9zID8gY29vcmRzIDogY3Vyc29yQ29vcmRzKGNtLCBlbmQpOwogICAgICAg
dmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgTWF0aC5taW4oY29vcmRzLmxl
ZnQsIGVuZENvb3Jkcy5sZWZ0KSwKQEAgLTM1NjMsOCArNDU2Myw5IEBACiAgICAgICAgIHNldFNj
cm9sbExlZnQoY20sIHNjcm9sbFBvcy5zY3JvbGxMZWZ0KTsKICAgICAgICAgaWYgKE1hdGguYWJz
KGNtLmRvYy5zY3JvbGxMZWZ0IC0gc3RhcnRMZWZ0KSA+IDEpIGNoYW5nZWQgPSB0cnVlOwogICAg
ICAgfQotICAgICAgaWYgKCFjaGFuZ2VkKSByZXR1cm4gY29vcmRzOworICAgICAgaWYgKCFjaGFu
Z2VkKSBicmVhazsKICAgICB9CisgICAgcmV0dXJuIGNvb3JkczsKICAgfQogCiAgIC8vIFNjcm9s
bCBhIGdpdmVuIHNldCBvZiBjb29yZGluYXRlcyBpbnRvIHZpZXcgKGltbWVkaWF0ZWx5KS4KQEAg
LTM1ODIsNyArNDU4Myw4IEBACiAgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzbmFwTWFy
Z2luID0gdGV4dEhlaWdodChjbS5kaXNwbGF5KTsKICAgICBpZiAoeTEgPCAwKSB5MSA9IDA7CiAg
ICAgdmFyIHNjcmVlbnRvcCA9IGNtLmN1ck9wICYmIGNtLmN1ck9wLnNjcm9sbFRvcCAhPSBudWxs
ID8gY20uY3VyT3Auc2Nyb2xsVG9wIDogZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7Ci0gICAg
dmFyIHNjcmVlbiA9IGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRP
ZmYsIHJlc3VsdCA9IHt9OworICAgIHZhciBzY3JlZW4gPSBkaXNwbGF5SGVpZ2h0KGNtKSwgcmVz
dWx0ID0ge307CisgICAgaWYgKHkyIC0geTEgPiBzY3JlZW4pIHkyID0geTEgKyBzY3JlZW47CiAg
ICAgdmFyIGRvY0JvdHRvbSA9IGNtLmRvYy5oZWlnaHQgKyBwYWRkaW5nVmVydChkaXNwbGF5KTsK
ICAgICB2YXIgYXRUb3AgPSB5MSA8IHNuYXBNYXJnaW4sIGF0Qm90dG9tID0geTIgPiBkb2NCb3R0
b20gLSBzbmFwTWFyZ2luOwogICAgIGlmICh5MSA8IHNjcmVlbnRvcCkgewpAQCAtMzU5MywxNiAr
NDU5NSwxNSBAQAogICAgIH0KIAogICAgIHZhciBzY3JlZW5sZWZ0ID0gY20uY3VyT3AgJiYgY20u
Y3VyT3Auc2Nyb2xsTGVmdCAhPSBudWxsID8gY20uY3VyT3Auc2Nyb2xsTGVmdCA6IGRpc3BsYXku
c2Nyb2xsZXIuc2Nyb2xsTGVmdDsKLSAgICB2YXIgc2NyZWVudyA9IGRpc3BsYXkuc2Nyb2xsZXIu
Y2xpZW50V2lkdGggLSBzY3JvbGxlckN1dE9mZjsKLSAgICB4MSArPSBkaXNwbGF5Lmd1dHRlcnMu
b2Zmc2V0V2lkdGg7IHgyICs9IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aDsKLSAgICB2YXIg
Z3V0dGVydyA9IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aDsKLSAgICB2YXIgYXRMZWZ0ID0g
eDEgPCBndXR0ZXJ3ICsgMTA7Ci0gICAgaWYgKHgxIDwgc2NyZWVubGVmdCArIGd1dHRlcncgfHwg
YXRMZWZ0KSB7Ci0gICAgICBpZiAoYXRMZWZ0KSB4MSA9IDA7Ci0gICAgICByZXN1bHQuc2Nyb2xs
TGVmdCA9IE1hdGgubWF4KDAsIHgxIC0gMTAgLSBndXR0ZXJ3KTsKLSAgICB9IGVsc2UgaWYgKHgy
ID4gc2NyZWVudyArIHNjcmVlbmxlZnQgLSAzKSB7Ci0gICAgICByZXN1bHQuc2Nyb2xsTGVmdCA9
IHgyICsgMTAgLSBzY3JlZW53OwotICAgIH0KKyAgICB2YXIgc2NyZWVudyA9IGRpc3BsYXlXaWR0
aChjbSkgLSAoY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRX
aWR0aCA6IDApOworICAgIHZhciB0b29XaWRlID0geDIgLSB4MSA+IHNjcmVlbnc7CisgICAgaWYg
KHRvb1dpZGUpIHgyID0geDEgKyBzY3JlZW53OworICAgIGlmICh4MSA8IDEwKQorICAgICAgcmVz
dWx0LnNjcm9sbExlZnQgPSAwOworICAgIGVsc2UgaWYgKHgxIDwgc2NyZWVubGVmdCkKKyAgICAg
IHJlc3VsdC5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgeDEgLSAodG9vV2lkZSA/IDAgOiAxMCkp
OworICAgIGVsc2UgaWYgKHgyID4gc2NyZWVudyArIHNjcmVlbmxlZnQgLSAzKQorICAgICAgcmVz
dWx0LnNjcm9sbExlZnQgPSB4MiArICh0b29XaWRlID8gMCA6IDEwKSAtIHNjcmVlbnc7CiAgICAg
cmV0dXJuIHJlc3VsdDsKICAgfQogCkBAIC0zNjU4LDcgKzQ2NTksNyBAQAogICAgIGlmIChob3cg
PT0gInNtYXJ0IikgewogICAgICAgLy8gRmFsbCBiYWNrIHRvICJwcmV2IiB3aGVuIHRoZSBtb2Rl
IGRvZXNuJ3QgaGF2ZSBhbiBpbmRlbnRhdGlvbgogICAgICAgLy8gbWV0aG9kLgotICAgICAgaWYg
KCFjbS5kb2MubW9kZS5pbmRlbnQpIGhvdyA9ICJwcmV2IjsKKyAgICAgIGlmICghZG9jLm1vZGUu
aW5kZW50KSBob3cgPSAicHJldiI7CiAgICAgICBlbHNlIHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUo
Y20sIG4pOwogICAgIH0KIApAQCAtMzY3MCw4ICs0NjcxLDggQEAKICAgICAgIGluZGVudGF0aW9u
ID0gMDsKICAgICAgIGhvdyA9ICJub3QiOwogICAgIH0gZWxzZSBpZiAoaG93ID09ICJzbWFydCIp
IHsKLSAgICAgIGluZGVudGF0aW9uID0gY20uZG9jLm1vZGUuaW5kZW50KHN0YXRlLCBsaW5lLnRl
eHQuc2xpY2UoY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSwgbGluZS50ZXh0KTsKLSAgICAgIGlmIChp
bmRlbnRhdGlvbiA9PSBQYXNzKSB7CisgICAgICBpbmRlbnRhdGlvbiA9IGRvYy5tb2RlLmluZGVu
dChzdGF0ZSwgbGluZS50ZXh0LnNsaWNlKGN1clNwYWNlU3RyaW5nLmxlbmd0aCksIGxpbmUudGV4
dCk7CisgICAgICBpZiAoaW5kZW50YXRpb24gPT0gUGFzcyB8fCBpbmRlbnRhdGlvbiA+IDE1MCkg
ewogICAgICAgICBpZiAoIWFnZ3Jlc3NpdmUpIHJldHVybjsKICAgICAgICAgaG93ID0gInByZXYi
OwogICAgICAgfQpAQCAtMzY5NCw3ICs0Njk1LDkgQEAKICAgICBpZiAocG9zIDwgaW5kZW50YXRp
b24pIGluZGVudFN0cmluZyArPSBzcGFjZVN0cihpbmRlbnRhdGlvbiAtIHBvcyk7CiAKICAgICBp
ZiAoaW5kZW50U3RyaW5nICE9IGN1clNwYWNlU3RyaW5nKSB7Ci0gICAgICByZXBsYWNlUmFuZ2Uo
Y20uZG9jLCBpbmRlbnRTdHJpbmcsIFBvcyhuLCAwKSwgUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxl
bmd0aCksICIraW5wdXQiKTsKKyAgICAgIHJlcGxhY2VSYW5nZShkb2MsIGluZGVudFN0cmluZywg
UG9zKG4sIDApLCBQb3MobiwgY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSwgIitpbnB1dCIpOworICAg
ICAgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIH0gZWxz
ZSB7CiAgICAgICAvLyBFbnN1cmUgdGhhdCwgaWYgdGhlIGN1cnNvciB3YXMgaW4gdGhlIHdoaXRl
c3BhY2UgYXQgdGhlIHN0YXJ0CiAgICAgICAvLyBvZiB0aGUgbGluZSwgaXQgaXMgbW92ZWQgdG8g
dGhlIGVuZCBvZiB0aGF0IHNwYWNlLgpAQCAtMzcwNywxOCArNDcxMCwxNyBAQAogICAgICAgICB9
CiAgICAgICB9CiAgICAgfQotICAgIGxpbmUuc3RhdGVBZnRlciA9IG51bGw7CiAgIH0KIAogICAv
LyBVdGlsaXR5IGZvciBhcHBseWluZyBhIGNoYW5nZSB0byBhIGxpbmUgYnkgaGFuZGxlIG9yIG51
bWJlciwKICAgLy8gcmV0dXJuaW5nIHRoZSBudW1iZXIgYW5kIG9wdGlvbmFsbHkgcmVnaXN0ZXJp
bmcgdGhlIGxpbmUgYXMKICAgLy8gY2hhbmdlZC4KLSAgZnVuY3Rpb24gY2hhbmdlTGluZShjbSwg
aGFuZGxlLCBjaGFuZ2VUeXBlLCBvcCkgewotICAgIHZhciBubyA9IGhhbmRsZSwgbGluZSA9IGhh
bmRsZSwgZG9jID0gY20uZG9jOworICBmdW5jdGlvbiBjaGFuZ2VMaW5lKGRvYywgaGFuZGxlLCBj
aGFuZ2VUeXBlLCBvcCkgeworICAgIHZhciBubyA9IGhhbmRsZSwgbGluZSA9IGhhbmRsZTsKICAg
ICBpZiAodHlwZW9mIGhhbmRsZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUoZG9jLCBjbGlw
TGluZShkb2MsIGhhbmRsZSkpOwogICAgIGVsc2Ugbm8gPSBsaW5lTm8oaGFuZGxlKTsKICAgICBp
ZiAobm8gPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0gICAgaWYgKG9wKGxpbmUsIG5vKSkgcmVnTGlu
ZUNoYW5nZShjbSwgbm8sIGNoYW5nZVR5cGUpOworICAgIGlmIChvcChsaW5lLCBubykgJiYgZG9j
LmNtKSByZWdMaW5lQ2hhbmdlKGRvYy5jbSwgbm8sIGNoYW5nZVR5cGUpOwogICAgIHJldHVybiBs
aW5lOwogICB9CiAKQEAgLTM4MjQsMjQgKzQ4MjYsNiBAQAogICAgIHJldHVybiB0YXJnZXQ7CiAg
IH0KIAotICAvLyBGaW5kIHRoZSB3b3JkIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiAoYXMgcmV0dXJu
ZWQgYnkgY29vcmRzQ2hhcikuCi0gIGZ1bmN0aW9uIGZpbmRXb3JkQXQoY20sIHBvcykgewotICAg
IHZhciBkb2MgPSBjbS5kb2MsIGxpbmUgPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRleHQ7Ci0g
ICAgdmFyIHN0YXJ0ID0gcG9zLmNoLCBlbmQgPSBwb3MuY2g7Ci0gICAgaWYgKGxpbmUpIHsKLSAg
ICAgIHZhciBoZWxwZXIgPSBjbS5nZXRIZWxwZXIocG9zLCAid29yZENoYXJzIik7Ci0gICAgICBp
ZiAoKHBvcy54UmVsIDwgMCB8fCBlbmQgPT0gbGluZS5sZW5ndGgpICYmIHN0YXJ0KSAtLXN0YXJ0
OyBlbHNlICsrZW5kOwotICAgICAgdmFyIHN0YXJ0Q2hhciA9IGxpbmUuY2hhckF0KHN0YXJ0KTsK
LSAgICAgIHZhciBjaGVjayA9IGlzV29yZENoYXIoc3RhcnRDaGFyLCBoZWxwZXIpCi0gICAgICAg
ID8gZnVuY3Rpb24oY2gpIHsgcmV0dXJuIGlzV29yZENoYXIoY2gsIGhlbHBlcik7IH0KLSAgICAg
ICAgOiAvXHMvLnRlc3Qoc3RhcnRDaGFyKSA/IGZ1bmN0aW9uKGNoKSB7cmV0dXJuIC9ccy8udGVz
dChjaCk7fQotICAgICAgICA6IGZ1bmN0aW9uKGNoKSB7cmV0dXJuICEvXHMvLnRlc3QoY2gpICYm
ICFpc1dvcmRDaGFyKGNoKTt9OwotICAgICAgd2hpbGUgKHN0YXJ0ID4gMCAmJiBjaGVjayhsaW5l
LmNoYXJBdChzdGFydCAtIDEpKSkgLS1zdGFydDsKLSAgICAgIHdoaWxlIChlbmQgPCBsaW5lLmxl
bmd0aCAmJiBjaGVjayhsaW5lLmNoYXJBdChlbmQpKSkgKytlbmQ7Ci0gICAgfQotICAgIHJldHVy
biBuZXcgUmFuZ2UoUG9zKHBvcy5saW5lLCBzdGFydCksIFBvcyhwb3MubGluZSwgZW5kKSk7Ci0g
IH0KLQogICAvLyBFRElUT1IgTUVUSE9EUwogCiAgIC8vIFRoZSBwdWJsaWNseSB2aXNpYmxlIEFQ
SS4gTm90ZSB0aGF0IG1ldGhvZE9wKGYpIG1lYW5zCkBAIC0zODU0LDcgKzQ4MzgsNyBAQAogCiAg
IENvZGVNaXJyb3IucHJvdG90eXBlID0gewogICAgIGNvbnN0cnVjdG9yOiBDb2RlTWlycm9yLAot
ICAgIGZvY3VzOiBmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpOyBmb2N1c0lucHV0KHRoaXMpOyBm
YXN0UG9sbCh0aGlzKTt9LAorICAgIGZvY3VzOiBmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpOyB0
aGlzLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTt9LAogCiAgICAgc2V0T3B0aW9uOiBmdW5jdGlvbihv
cHRpb24sIHZhbHVlKSB7CiAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgb2xkID0g
b3B0aW9uc1tvcHRpb25dOwpAQCAtMzg2OCwxMiArNDg1MiwxMiBAQAogICAgIGdldERvYzogZnVu
Y3Rpb24oKSB7cmV0dXJuIHRoaXMuZG9jO30sCiAKICAgICBhZGRLZXlNYXA6IGZ1bmN0aW9uKG1h
cCwgYm90dG9tKSB7Ci0gICAgICB0aGlzLnN0YXRlLmtleU1hcHNbYm90dG9tID8gInB1c2giIDog
InVuc2hpZnQiXShtYXApOworICAgICAgdGhpcy5zdGF0ZS5rZXlNYXBzW2JvdHRvbSA/ICJwdXNo
IiA6ICJ1bnNoaWZ0Il0oZ2V0S2V5TWFwKG1hcCkpOwogICAgIH0sCiAgICAgcmVtb3ZlS2V5TWFw
OiBmdW5jdGlvbihtYXApIHsKICAgICAgIHZhciBtYXBzID0gdGhpcy5zdGF0ZS5rZXlNYXBzOwog
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBzLmxlbmd0aDsgKytpKQotICAgICAgICBpZiAo
bWFwc1tpXSA9PSBtYXAgfHwgKHR5cGVvZiBtYXBzW2ldICE9ICJzdHJpbmciICYmIG1hcHNbaV0u
bmFtZSA9PSBtYXApKSB7CisgICAgICAgIGlmIChtYXBzW2ldID09IG1hcCB8fCBtYXBzW2ldLm5h
bWUgPT0gbWFwKSB7CiAgICAgICAgICAgbWFwcy5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTM5MTEsMTEgKzQ4OTUsMTQgQEAKICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgIHZhciByYW5nZSA9
IHJhbmdlc1tpXTsKICAgICAgICAgaWYgKCFyYW5nZS5lbXB0eSgpKSB7Ci0gICAgICAgICAgdmFy
IHN0YXJ0ID0gTWF0aC5tYXgoZW5kLCByYW5nZS5mcm9tKCkubGluZSk7Ci0gICAgICAgICAgdmFy
IHRvID0gcmFuZ2UudG8oKTsKKyAgICAgICAgICB2YXIgZnJvbSA9IHJhbmdlLmZyb20oKSwgdG8g
PSByYW5nZS50bygpOworICAgICAgICAgIHZhciBzdGFydCA9IE1hdGgubWF4KGVuZCwgZnJvbS5s
aW5lKTsKICAgICAgICAgICBlbmQgPSBNYXRoLm1pbih0aGlzLmxhc3RMaW5lKCksIHRvLmxpbmUg
LSAodG8uY2ggPyAwIDogMSkpICsgMTsKICAgICAgICAgICBmb3IgKHZhciBqID0gc3RhcnQ7IGog
PCBlbmQ7ICsraikKICAgICAgICAgICAgIGluZGVudExpbmUodGhpcywgaiwgaG93KTsKKyAgICAg
ICAgICB2YXIgbmV3UmFuZ2VzID0gdGhpcy5kb2Muc2VsLnJhbmdlczsKKyAgICAgICAgICBpZiAo
ZnJvbS5jaCA9PSAwICYmIHJhbmdlcy5sZW5ndGggPT0gbmV3UmFuZ2VzLmxlbmd0aCAmJiBuZXdS
YW5nZXNbaV0uZnJvbSgpLmNoID4gMCkKKyAgICAgICAgICAgIHJlcGxhY2VPbmVTZWxlY3Rpb24o
dGhpcy5kb2MsIGksIG5ldyBSYW5nZShmcm9tLCBuZXdSYW5nZXNbaV0udG8oKSksIHNlbF9kb250
U2Nyb2xsKTsKICAgICAgICAgfSBlbHNlIGlmIChyYW5nZS5oZWFkLmxpbmUgPiBlbmQpIHsKICAg
ICAgICAgICBpbmRlbnRMaW5lKHRoaXMsIHJhbmdlLmhlYWQubGluZSwgaG93LCB0cnVlKTsKICAg
ICAgICAgICBlbmQgPSByYW5nZS5oZWFkLmxpbmU7CkBAIC0zOTI3LDIwICs0OTE0LDExIEBACiAg
ICAgLy8gRmV0Y2ggdGhlIHBhcnNlciB0b2tlbiBmb3IgYSBnaXZlbiBjaGFyYWN0ZXIuIFVzZWZ1
bCBmb3IgaGFja3MKICAgICAvLyB0aGF0IHdhbnQgdG8gaW5zcGVjdCB0aGUgbW9kZSBzdGF0ZSAo
c2F5LCBmb3IgY29tcGxldGlvbikuCiAgICAgZ2V0VG9rZW5BdDogZnVuY3Rpb24ocG9zLCBwcmVj
aXNlKSB7Ci0gICAgICB2YXIgZG9jID0gdGhpcy5kb2M7Ci0gICAgICBwb3MgPSBjbGlwUG9zKGRv
YywgcG9zKTsKLSAgICAgIHZhciBzdGF0ZSA9IGdldFN0YXRlQmVmb3JlKHRoaXMsIHBvcy5saW5l
LCBwcmVjaXNlKSwgbW9kZSA9IHRoaXMuZG9jLm1vZGU7Ci0gICAgICB2YXIgbGluZSA9IGdldExp
bmUoZG9jLCBwb3MubGluZSk7Ci0gICAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbShs
aW5lLnRleHQsIHRoaXMub3B0aW9ucy50YWJTaXplKTsKLSAgICAgIHdoaWxlIChzdHJlYW0ucG9z
IDwgcG9zLmNoICYmICFzdHJlYW0uZW9sKCkpIHsKLSAgICAgICAgc3RyZWFtLnN0YXJ0ID0gc3Ry
ZWFtLnBvczsKLSAgICAgICAgdmFyIHN0eWxlID0gcmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgc3Rh
dGUpOwotICAgICAgfQotICAgICAgcmV0dXJuIHtzdGFydDogc3RyZWFtLnN0YXJ0LAotICAgICAg
ICAgICAgICBlbmQ6IHN0cmVhbS5wb3MsCi0gICAgICAgICAgICAgIHN0cmluZzogc3RyZWFtLmN1
cnJlbnQoKSwKLSAgICAgICAgICAgICAgdHlwZTogc3R5bGUgfHwgbnVsbCwKLSAgICAgICAgICAg
ICAgc3RhdGU6IHN0YXRlfTsKKyAgICAgIHJldHVybiB0YWtlVG9rZW4odGhpcywgcG9zLCBwcmVj
aXNlKTsKKyAgICB9LAorCisgICAgZ2V0TGluZVRva2VuczogZnVuY3Rpb24obGluZSwgcHJlY2lz
ZSkgeworICAgICAgcmV0dXJuIHRha2VUb2tlbih0aGlzLCBQb3MobGluZSksIHByZWNpc2UsIHRy
dWUpOwogICAgIH0sCiAKICAgICBnZXRUb2tlblR5cGVBdDogZnVuY3Rpb24ocG9zKSB7CkBAIC0z
OTcxLDcgKzQ5NDksNyBAQAogCiAgICAgZ2V0SGVscGVyczogZnVuY3Rpb24ocG9zLCB0eXBlKSB7
CiAgICAgICB2YXIgZm91bmQgPSBbXTsKLSAgICAgIGlmICghaGVscGVycy5oYXNPd25Qcm9wZXJ0
eSh0eXBlKSkgcmV0dXJuIGhlbHBlcnM7CisgICAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVy
dHkodHlwZSkpIHJldHVybiBmb3VuZDsKICAgICAgIHZhciBoZWxwID0gaGVscGVyc1t0eXBlXSwg
bW9kZSA9IHRoaXMuZ2V0TW9kZUF0KHBvcyk7CiAgICAgICBpZiAodHlwZW9mIG1vZGVbdHlwZV0g
PT0gInN0cmluZyIpIHsKICAgICAgICAgaWYgKGhlbHBbbW9kZVt0eXBlXV0pIGZvdW5kLnB1c2go
aGVscFttb2RlW3R5cGVdXSk7CkBAIC00MDIxLDEwICs0OTk5LDE1IEBACiAgICAgICByZXR1cm4g
bGluZUF0SGVpZ2h0KHRoaXMuZG9jLCBoZWlnaHQgKyB0aGlzLmRpc3BsYXkudmlld09mZnNldCk7
CiAgICAgfSwKICAgICBoZWlnaHRBdExpbmU6IGZ1bmN0aW9uKGxpbmUsIG1vZGUpIHsKLSAgICAg
IHZhciBlbmQgPSBmYWxzZSwgbGFzdCA9IHRoaXMuZG9jLmZpcnN0ICsgdGhpcy5kb2Muc2l6ZSAt
IDE7Ci0gICAgICBpZiAobGluZSA8IHRoaXMuZG9jLmZpcnN0KSBsaW5lID0gdGhpcy5kb2MuZmly
c3Q7Ci0gICAgICBlbHNlIGlmIChsaW5lID4gbGFzdCkgeyBsaW5lID0gbGFzdDsgZW5kID0gdHJ1
ZTsgfQotICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKHRoaXMuZG9jLCBsaW5lKTsKKyAgICAg
IHZhciBlbmQgPSBmYWxzZSwgbGluZU9iajsKKyAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVt
YmVyIikgeworICAgICAgICB2YXIgbGFzdCA9IHRoaXMuZG9jLmZpcnN0ICsgdGhpcy5kb2Muc2l6
ZSAtIDE7CisgICAgICAgIGlmIChsaW5lIDwgdGhpcy5kb2MuZmlyc3QpIGxpbmUgPSB0aGlzLmRv
Yy5maXJzdDsKKyAgICAgICAgZWxzZSBpZiAobGluZSA+IGxhc3QpIHsgbGluZSA9IGxhc3Q7IGVu
ZCA9IHRydWU7IH0KKyAgICAgICAgbGluZU9iaiA9IGdldExpbmUodGhpcy5kb2MsIGxpbmUpOwor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgbGluZU9iaiA9IGxpbmU7CisgICAgICB9CiAgICAgICBy
ZXR1cm4gaW50b0Nvb3JkU3lzdGVtKHRoaXMsIGxpbmVPYmosIHt0b3A6IDAsIGxlZnQ6IDB9LCBt
b2RlIHx8ICJwYWdlIikudG9wICsKICAgICAgICAgKGVuZCA/IHRoaXMuZG9jLmhlaWdodCAtIGhl
aWdodEF0TGluZShsaW5lT2JqKSA6IDApOwogICAgIH0sCkBAIC00MDMzLDcgKzUwMTYsNyBAQAog
ICAgIGRlZmF1bHRDaGFyV2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhcldpZHRoKHRoaXMu
ZGlzcGxheSk7IH0sCiAKICAgICBzZXRHdXR0ZXJNYXJrZXI6IG1ldGhvZE9wKGZ1bmN0aW9uKGxp
bmUsIGd1dHRlcklELCB2YWx1ZSkgewotICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgbGlu
ZSwgImd1dHRlciIsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRo
aXMuZG9jLCBsaW5lLCAiZ3V0dGVyIiwgZnVuY3Rpb24obGluZSkgewogICAgICAgICB2YXIgbWFy
a2VycyA9IGxpbmUuZ3V0dGVyTWFya2VycyB8fCAobGluZS5ndXR0ZXJNYXJrZXJzID0ge30pOwog
ICAgICAgICBtYXJrZXJzW2d1dHRlcklEXSA9IHZhbHVlOwogICAgICAgICBpZiAoIXZhbHVlICYm
IGlzRW1wdHkobWFya2VycykpIGxpbmUuZ3V0dGVyTWFya2VycyA9IG51bGw7CkBAIC00MDUzLDM4
ICs1MDM2LDYgQEAKICAgICAgIH0pOwogICAgIH0pLAogCi0gICAgYWRkTGluZUNsYXNzOiBtZXRo
b2RPcChmdW5jdGlvbihoYW5kbGUsIHdoZXJlLCBjbHMpIHsKLSAgICAgIHJldHVybiBjaGFuZ2VM
aW5lKHRoaXMsIGhhbmRsZSwgImNsYXNzIiwgZnVuY3Rpb24obGluZSkgewotICAgICAgICB2YXIg
cHJvcCA9IHdoZXJlID09ICJ0ZXh0IiA/ICJ0ZXh0Q2xhc3MiIDogd2hlcmUgPT0gImJhY2tncm91
bmQiID8gImJnQ2xhc3MiIDogIndyYXBDbGFzcyI7Ci0gICAgICAgIGlmICghbGluZVtwcm9wXSkg
bGluZVtwcm9wXSA9IGNsczsKLSAgICAgICAgZWxzZSBpZiAobmV3IFJlZ0V4cCgiKD86XnxcXHMp
IiArIGNscyArICIoPzokfFxccykiKS50ZXN0KGxpbmVbcHJvcF0pKSByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGVsc2UgbGluZVtwcm9wXSArPSAiICIgKyBjbHM7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgfSk7Ci0gICAgfSksCi0KLSAgICByZW1vdmVMaW5lQ2xhc3M6IG1ldGhvZE9wKGZ1
bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykgewotICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhp
cywgaGFuZGxlLCAiY2xhc3MiLCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIHZhciBwcm9wID0g
d2hlcmUgPT0gInRleHQiID8gInRleHRDbGFzcyIgOiB3aGVyZSA9PSAiYmFja2dyb3VuZCIgPyAi
YmdDbGFzcyIgOiAid3JhcENsYXNzIjsKLSAgICAgICAgdmFyIGN1ciA9IGxpbmVbcHJvcF07Ci0g
ICAgICAgIGlmICghY3VyKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGVsc2UgaWYgKGNscyA9PSBu
dWxsKSBsaW5lW3Byb3BdID0gbnVsbDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgdmFyIGZv
dW5kID0gY3VyLm1hdGNoKG5ldyBSZWdFeHAoIig/Ol58XFxzKykiICsgY2xzICsgIig/OiR8XFxz
KykiKSk7Ci0gICAgICAgICAgaWYgKCFmb3VuZCkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIHZh
ciBlbmQgPSBmb3VuZC5pbmRleCArIGZvdW5kWzBdLmxlbmd0aDsKLSAgICAgICAgICBsaW5lW3By
b3BdID0gY3VyLnNsaWNlKDAsIGZvdW5kLmluZGV4KSArICghZm91bmQuaW5kZXggfHwgZW5kID09
IGN1ci5sZW5ndGggPyAiIiA6ICIgIikgKyBjdXIuc2xpY2UoZW5kKSB8fCBudWxsOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfSk7Ci0gICAgfSksCi0KLSAgICBhZGRM
aW5lV2lkZ2V0OiBtZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHsKLSAg
ICAgIHJldHVybiBhZGRMaW5lV2lkZ2V0KHRoaXMsIGhhbmRsZSwgbm9kZSwgb3B0aW9ucyk7Ci0g
ICAgfSksCi0KLSAgICByZW1vdmVMaW5lV2lkZ2V0OiBmdW5jdGlvbih3aWRnZXQpIHsgd2lkZ2V0
LmNsZWFyKCk7IH0sCi0KICAgICBsaW5lSW5mbzogZnVuY3Rpb24obGluZSkgewogICAgICAgaWYg
KHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSB7CiAgICAgICAgIGlmICghaXNMaW5lKHRoaXMuZG9j
LCBsaW5lKSkgcmV0dXJuIG51bGw7CkBAIC00MTA3LDYgKzUwNTgsOCBAQAogICAgICAgcG9zID0g
Y3Vyc29yQ29vcmRzKHRoaXMsIGNsaXBQb3ModGhpcy5kb2MsIHBvcykpOwogICAgICAgdmFyIHRv
cCA9IHBvcy5ib3R0b20sIGxlZnQgPSBwb3MubGVmdDsKICAgICAgIG5vZGUuc3R5bGUucG9zaXRp
b24gPSAiYWJzb2x1dGUiOworICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImNtLWlnbm9yZS1ldmVu
dHMiLCAidHJ1ZSIpOworICAgICAgdGhpcy5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUobm9k
ZSk7CiAgICAgICBkaXNwbGF5LnNpemVyLmFwcGVuZENoaWxkKG5vZGUpOwogICAgICAgaWYgKHZl
cnQgPT0gIm92ZXIiKSB7CiAgICAgICAgIHRvcCA9IHBvcy50b3A7CkBAIC00MTM3LDEzICs1MDkw
LDE1IEBACiAKICAgICB0cmlnZ2VyT25LZXlEb3duOiBtZXRob2RPcChvbktleURvd24pLAogICAg
IHRyaWdnZXJPbktleVByZXNzOiBtZXRob2RPcChvbktleVByZXNzKSwKLSAgICB0cmlnZ2VyT25L
ZXlVcDogbWV0aG9kT3Aob25LZXlVcCksCisgICAgdHJpZ2dlck9uS2V5VXA6IG9uS2V5VXAsCiAK
ICAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24oY21kKSB7CiAgICAgICBpZiAoY29tbWFuZHMuaGFz
T3duUHJvcGVydHkoY21kKSkKLSAgICAgICAgcmV0dXJuIGNvbW1hbmRzW2NtZF0odGhpcyk7Cisg
ICAgICAgIHJldHVybiBjb21tYW5kc1tjbWRdLmNhbGwobnVsbCwgdGhpcyk7CiAgICAgfSwKIAor
ICAgIHRyaWdnZXJFbGVjdHJpYzogbWV0aG9kT3AoZnVuY3Rpb24odGV4dCkgeyB0cmlnZ2VyRWxl
Y3RyaWModGhpcywgdGV4dCk7IH0pLAorCiAgICAgZmluZFBvc0g6IGZ1bmN0aW9uKGZyb20sIGFt
b3VudCwgdW5pdCwgdmlzdWFsbHkpIHsKICAgICAgIHZhciBkaXIgPSAxOwogICAgICAgaWYgKGFt
b3VudCA8IDApIHsgZGlyID0gLTE7IGFtb3VudCA9IC1hbW91bnQ7IH0KQEAgLTQyMDYsNiArNTE2
MSwyNCBAQAogICAgICAgICBkb2Muc2VsLnJhbmdlc1tpXS5nb2FsQ29sdW1uID0gZ29hbHNbaV07
CiAgICAgfSksCiAKKyAgICAvLyBGaW5kIHRoZSB3b3JkIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiAo
YXMgcmV0dXJuZWQgYnkgY29vcmRzQ2hhcikuCisgICAgZmluZFdvcmRBdDogZnVuY3Rpb24ocG9z
KSB7CisgICAgICB2YXIgZG9jID0gdGhpcy5kb2MsIGxpbmUgPSBnZXRMaW5lKGRvYywgcG9zLmxp
bmUpLnRleHQ7CisgICAgICB2YXIgc3RhcnQgPSBwb3MuY2gsIGVuZCA9IHBvcy5jaDsKKyAgICAg
IGlmIChsaW5lKSB7CisgICAgICAgIHZhciBoZWxwZXIgPSB0aGlzLmdldEhlbHBlcihwb3MsICJ3
b3JkQ2hhcnMiKTsKKyAgICAgICAgaWYgKChwb3MueFJlbCA8IDAgfHwgZW5kID09IGxpbmUubGVu
Z3RoKSAmJiBzdGFydCkgLS1zdGFydDsgZWxzZSArK2VuZDsKKyAgICAgICAgdmFyIHN0YXJ0Q2hh
ciA9IGxpbmUuY2hhckF0KHN0YXJ0KTsKKyAgICAgICAgdmFyIGNoZWNrID0gaXNXb3JkQ2hhcihz
dGFydENoYXIsIGhlbHBlcikKKyAgICAgICAgICA/IGZ1bmN0aW9uKGNoKSB7IHJldHVybiBpc1dv
cmRDaGFyKGNoLCBoZWxwZXIpOyB9CisgICAgICAgICAgOiAvXHMvLnRlc3Qoc3RhcnRDaGFyKSA/
IGZ1bmN0aW9uKGNoKSB7cmV0dXJuIC9ccy8udGVzdChjaCk7fQorICAgICAgICAgIDogZnVuY3Rp
b24oY2gpIHtyZXR1cm4gIS9ccy8udGVzdChjaCkgJiYgIWlzV29yZENoYXIoY2gpO307CisgICAg
ICAgIHdoaWxlIChzdGFydCA+IDAgJiYgY2hlY2sobGluZS5jaGFyQXQoc3RhcnQgLSAxKSkpIC0t
c3RhcnQ7CisgICAgICAgIHdoaWxlIChlbmQgPCBsaW5lLmxlbmd0aCAmJiBjaGVjayhsaW5lLmNo
YXJBdChlbmQpKSkgKytlbmQ7CisgICAgICB9CisgICAgICByZXR1cm4gbmV3IFJhbmdlKFBvcyhw
b3MubGluZSwgc3RhcnQpLCBQb3MocG9zLmxpbmUsIGVuZCkpOworICAgIH0sCisKICAgICB0b2dn
bGVPdmVyd3JpdGU6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAm
JiB2YWx1ZSA9PSB0aGlzLnN0YXRlLm92ZXJ3cml0ZSkgcmV0dXJuOwogICAgICAgaWYgKHRoaXMu
c3RhdGUub3ZlcndyaXRlID0gIXRoaXMuc3RhdGUub3ZlcndyaXRlKQpAQCAtNDIxNSw3ICs1MTg4
LDcgQEAKIAogICAgICAgc2lnbmFsKHRoaXMsICJvdmVyd3JpdGVUb2dnbGUiLCB0aGlzLCB0aGlz
LnN0YXRlLm92ZXJ3cml0ZSk7CiAgICAgfSwKLSAgICBoYXNGb2N1czogZnVuY3Rpb24oKSB7IHJl
dHVybiBhY3RpdmVFbHQoKSA9PSB0aGlzLmRpc3BsYXkuaW5wdXQ7IH0sCisgICAgaGFzRm9jdXM6
IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCkgPT0gYWN0
aXZlRWx0KCk7IH0sCiAKICAgICBzY3JvbGxUbzogbWV0aG9kT3AoZnVuY3Rpb24oeCwgeSkgewog
ICAgICAgaWYgKHggIT0gbnVsbCB8fCB5ICE9IG51bGwpIHJlc29sdmVTY3JvbGxUb1Bvcyh0aGlz
KTsKQEAgLTQyMjMsMTAgKzUxOTYsMTEgQEAKICAgICAgIGlmICh5ICE9IG51bGwpIHRoaXMuY3Vy
T3Auc2Nyb2xsVG9wID0geTsKICAgICB9KSwKICAgICBnZXRTY3JvbGxJbmZvOiBmdW5jdGlvbigp
IHsKLSAgICAgIHZhciBzY3JvbGxlciA9IHRoaXMuZGlzcGxheS5zY3JvbGxlciwgY28gPSBzY3Jv
bGxlckN1dE9mZjsKKyAgICAgIHZhciBzY3JvbGxlciA9IHRoaXMuZGlzcGxheS5zY3JvbGxlcjsK
ICAgICAgIHJldHVybiB7bGVmdDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgdG9wOiBzY3JvbGxlci5z
Y3JvbGxUb3AsCi0gICAgICAgICAgICAgIGhlaWdodDogc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0g
Y28sIHdpZHRoOiBzY3JvbGxlci5zY3JvbGxXaWR0aCAtIGNvLAotICAgICAgICAgICAgICBjbGll
bnRIZWlnaHQ6IHNjcm9sbGVyLmNsaWVudEhlaWdodCAtIGNvLCBjbGllbnRXaWR0aDogc2Nyb2xs
ZXIuY2xpZW50V2lkdGggLSBjb307CisgICAgICAgICAgICAgIGhlaWdodDogc2Nyb2xsZXIuc2Ny
b2xsSGVpZ2h0IC0gc2Nyb2xsR2FwKHRoaXMpIC0gdGhpcy5kaXNwbGF5LmJhckhlaWdodCwKKyAg
ICAgICAgICAgICAgd2lkdGg6IHNjcm9sbGVyLnNjcm9sbFdpZHRoIC0gc2Nyb2xsR2FwKHRoaXMp
IC0gdGhpcy5kaXNwbGF5LmJhcldpZHRoLAorICAgICAgICAgICAgICBjbGllbnRIZWlnaHQ6IGRp
c3BsYXlIZWlnaHQodGhpcyksIGNsaWVudFdpZHRoOiBkaXNwbGF5V2lkdGgodGhpcyl9OwogICAg
IH0sCiAKICAgICBzY3JvbGxJbnRvVmlldzogbWV0aG9kT3AoZnVuY3Rpb24ocmFuZ2UsIG1hcmdp
bikgewpAQCAtNDI1NCwxNCArNTIyOCwyMSBAQAogICAgIH0pLAogCiAgICAgc2V0U2l6ZTogbWV0
aG9kT3AoZnVuY3Rpb24od2lkdGgsIGhlaWdodCkgeworICAgICAgdmFyIGNtID0gdGhpczsKICAg
ICAgIGZ1bmN0aW9uIGludGVycHJldCh2YWwpIHsKICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwg
PT0gIm51bWJlciIgfHwgL15cZCskLy50ZXN0KFN0cmluZyh2YWwpKSA/IHZhbCArICJweCIgOiB2
YWw7CiAgICAgICB9Ci0gICAgICBpZiAod2lkdGggIT0gbnVsbCkgdGhpcy5kaXNwbGF5LndyYXBw
ZXIuc3R5bGUud2lkdGggPSBpbnRlcnByZXQod2lkdGgpOwotICAgICAgaWYgKGhlaWdodCAhPSBu
dWxsKSB0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQgPSBpbnRlcnByZXQoaGVpZ2h0
KTsKLSAgICAgIGlmICh0aGlzLm9wdGlvbnMubGluZVdyYXBwaW5nKSBjbGVhckxpbmVNZWFzdXJl
bWVudENhY2hlKHRoaXMpOwotICAgICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7Ci0g
ICAgICBzaWduYWwodGhpcywgInJlZnJlc2giLCB0aGlzKTsKKyAgICAgIGlmICh3aWR0aCAhPSBu
dWxsKSBjbS5kaXNwbGF5LndyYXBwZXIuc3R5bGUud2lkdGggPSBpbnRlcnByZXQod2lkdGgpOwor
ICAgICAgaWYgKGhlaWdodCAhPSBudWxsKSBjbS5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0
ID0gaW50ZXJwcmV0KGhlaWdodCk7CisgICAgICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcp
IGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUodGhpcyk7CisgICAgICB2YXIgbGluZU5vID0gY20u
ZGlzcGxheS52aWV3RnJvbTsKKyAgICAgIGNtLmRvYy5pdGVyKGxpbmVObywgY20uZGlzcGxheS52
aWV3VG8sIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgICAgaWYgKGxpbmUud2lkZ2V0cykgZm9yICh2
YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyBpKyspCisgICAgICAgICAgaWYgKGxp
bmUud2lkZ2V0c1tpXS5ub0hTY3JvbGwpIHsgcmVnTGluZUNoYW5nZShjbSwgbGluZU5vLCAid2lk
Z2V0Iik7IGJyZWFrOyB9CisgICAgICAgICsrbGluZU5vOworICAgICAgfSk7CisgICAgICBjbS5j
dXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7CisgICAgICBzaWduYWwoY20sICJyZWZyZXNoIiwgdGhp
cyk7CiAgICAgfSksCiAKICAgICBvcGVyYXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBydW5Jbk9w
KHRoaXMsIGYpO30sCkBAIC00MjgzLDEzICs1MjY0LDE0IEBACiAgICAgICBvbGQuY20gPSBudWxs
OwogICAgICAgYXR0YWNoRG9jKHRoaXMsIGRvYyk7CiAgICAgICBjbGVhckNhY2hlcyh0aGlzKTsK
LSAgICAgIHJlc2V0SW5wdXQodGhpcyk7CisgICAgICB0aGlzLmRpc3BsYXkuaW5wdXQucmVzZXQo
KTsKICAgICAgIHRoaXMuc2Nyb2xsVG8oZG9jLnNjcm9sbExlZnQsIGRvYy5zY3JvbGxUb3ApOwor
ICAgICAgdGhpcy5jdXJPcC5mb3JjZVNjcm9sbCA9IHRydWU7CiAgICAgICBzaWduYWxMYXRlcih0
aGlzLCAic3dhcERvYyIsIHRoaXMsIG9sZCk7CiAgICAgICByZXR1cm4gb2xkOwogICAgIH0pLAog
Ci0gICAgZ2V0SW5wdXRGaWVsZDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0
O30sCisgICAgZ2V0SW5wdXRGaWVsZDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5Lmlu
cHV0LmdldEZpZWxkKCk7fSwKICAgICBnZXRXcmFwcGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5kaXNwbGF5LndyYXBwZXI7fSwKICAgICBnZXRTY3JvbGxlckVsZW1lbnQ6IGZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcjt9LAogICAgIGdldEd1dHRlckVsZW1l
bnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5ndXR0ZXJzO30KQEAgLTQzMzAsMTIg
KzUzMTIsMzEgQEAKICAgICBjbGVhckNhY2hlcyhjbSk7CiAgICAgcmVnQ2hhbmdlKGNtKTsKICAg
fSwgdHJ1ZSk7Ci0gIG9wdGlvbigic3BlY2lhbENoYXJzIiwgL1tcdFx1MDAwMC1cdTAwMTlcdTAw
YWRcdTIwMGJcdTIwMjhcdTIwMjlcdWZlZmZdL2csIGZ1bmN0aW9uKGNtLCB2YWwpIHsKLSAgICBj
bS5vcHRpb25zLnNwZWNpYWxDaGFycyA9IG5ldyBSZWdFeHAodmFsLnNvdXJjZSArICh2YWwudGVz
dCgiXHQiKSA/ICIiIDogInxcdCIpLCAiZyIpOwotICAgIGNtLnJlZnJlc2goKTsKLSAgfSwgdHJ1
ZSk7CisgIG9wdGlvbigibGluZVNlcGFyYXRvciIsIG51bGwsIGZ1bmN0aW9uKGNtLCB2YWwpIHsK
KyAgICBjbS5kb2MubGluZVNlcCA9IHZhbDsKKyAgICBpZiAoIXZhbCkgcmV0dXJuOworICAgIHZh
ciBuZXdCcmVha3MgPSBbXSwgbGluZU5vID0gY20uZG9jLmZpcnN0OworICAgIGNtLmRvYy5pdGVy
KGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAgIGZvciAodmFyIHBvcyA9IDA7OykgeworICAgICAgICB2
YXIgZm91bmQgPSBsaW5lLnRleHQuaW5kZXhPZih2YWwsIHBvcyk7CisgICAgICAgIGlmIChmb3Vu
ZCA9PSAtMSkgYnJlYWs7CisgICAgICAgIHBvcyA9IGZvdW5kICsgdmFsLmxlbmd0aDsKKyAgICAg
ICAgbmV3QnJlYWtzLnB1c2goUG9zKGxpbmVObywgZm91bmQpKTsKKyAgICAgIH0KKyAgICAgIGxp
bmVObysrOworICAgIH0pOworICAgIGZvciAodmFyIGkgPSBuZXdCcmVha3MubGVuZ3RoIC0gMTsg
aSA+PSAwOyBpLS0pCisgICAgICByZXBsYWNlUmFuZ2UoY20uZG9jLCB2YWwsIG5ld0JyZWFrc1tp
XSwgUG9zKG5ld0JyZWFrc1tpXS5saW5lLCBuZXdCcmVha3NbaV0uY2ggKyB2YWwubGVuZ3RoKSkK
KyAgfSk7CisgIG9wdGlvbigic3BlY2lhbENoYXJzIiwgL1tcdFx1MDAwMC1cdTAwMTlcdTAwYWRc
dTIwMGItXHUyMDBmXHUyMDI4XHUyMDI5XHVmZWZmXS9nLCBmdW5jdGlvbihjbSwgdmFsLCBvbGQp
IHsKKyAgICBjbS5zdGF0ZS5zcGVjaWFsQ2hhcnMgPSBuZXcgUmVnRXhwKHZhbC5zb3VyY2UgKyAo
dmFsLnRlc3QoIlx0IikgPyAiIiA6ICJ8XHQiKSwgImciKTsKKyAgICBpZiAob2xkICE9IENvZGVN
aXJyb3IuSW5pdCkgY20ucmVmcmVzaCgpOworICB9KTsKICAgb3B0aW9uKCJzcGVjaWFsQ2hhclBs
YWNlaG9sZGVyIiwgZGVmYXVsdFNwZWNpYWxDaGFyUGxhY2Vob2xkZXIsIGZ1bmN0aW9uKGNtKSB7
Y20ucmVmcmVzaCgpO30sIHRydWUpOwogICBvcHRpb24oImVsZWN0cmljQ2hhcnMiLCB0cnVlKTsK
KyAgb3B0aW9uKCJpbnB1dFN0eWxlIiwgbW9iaWxlID8gImNvbnRlbnRlZGl0YWJsZSIgOiAidGV4
dGFyZWEiLCBmdW5jdGlvbigpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoImlucHV0U3R5bGUgY2Fu
IG5vdCAoeWV0KSBiZSBjaGFuZ2VkIGluIGEgcnVubmluZyBlZGl0b3IiKTsgLy8gRklYTUUKKyAg
fSwgdHJ1ZSk7CiAgIG9wdGlvbigicnRsTW92ZVZpc3VhbGx5IiwgIXdpbmRvd3MpOwogICBvcHRp
b24oIndob2xlTGluZVVwZGF0ZUJlZm9yZSIsIHRydWUpOwogCkBAIC00MzQzLDcgKzUzNDQsMTIg
QEAKICAgICB0aGVtZUNoYW5nZWQoY20pOwogICAgIGd1dHRlcnNDaGFuZ2VkKGNtKTsKICAgfSwg
dHJ1ZSk7Ci0gIG9wdGlvbigia2V5TWFwIiwgImRlZmF1bHQiLCBrZXlNYXBDaGFuZ2VkKTsKKyAg
b3B0aW9uKCJrZXlNYXAiLCAiZGVmYXVsdCIsIGZ1bmN0aW9uKGNtLCB2YWwsIG9sZCkgeworICAg
IHZhciBuZXh0ID0gZ2V0S2V5TWFwKHZhbCk7CisgICAgdmFyIHByZXYgPSBvbGQgIT0gQ29kZU1p
cnJvci5Jbml0ICYmIGdldEtleU1hcChvbGQpOworICAgIGlmIChwcmV2ICYmIHByZXYuZGV0YWNo
KSBwcmV2LmRldGFjaChjbSwgbmV4dCk7CisgICAgaWYgKG5leHQuYXR0YWNoKSBuZXh0LmF0dGFj
aChjbSwgcHJldiB8fCBudWxsKTsKKyAgfSk7CiAgIG9wdGlvbigiZXh0cmFLZXlzIiwgbnVsbCk7
CiAKICAgb3B0aW9uKCJsaW5lV3JhcHBpbmciLCBmYWxzZSwgd3JhcHBpbmdDaGFuZ2VkLCB0cnVl
KTsKQEAgLTQzNTUsNyArNTM2MSwxMyBAQAogICAgIGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5s
ZWZ0ID0gdmFsID8gY29tcGVuc2F0ZUZvckhTY3JvbGwoY20uZGlzcGxheSkgKyAicHgiIDogIjAi
OwogICAgIGNtLnJlZnJlc2goKTsKICAgfSwgdHJ1ZSk7Ci0gIG9wdGlvbigiY292ZXJHdXR0ZXJO
ZXh0VG9TY3JvbGxiYXIiLCBmYWxzZSwgdXBkYXRlU2Nyb2xsYmFycywgdHJ1ZSk7CisgIG9wdGlv
bigiY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIiLCBmYWxzZSwgZnVuY3Rpb24oY20pIHt1cGRh
dGVTY3JvbGxiYXJzKGNtKTt9LCB0cnVlKTsKKyAgb3B0aW9uKCJzY3JvbGxiYXJTdHlsZSIsICJu
YXRpdmUiLCBmdW5jdGlvbihjbSkgeworICAgIGluaXRTY3JvbGxiYXJzKGNtKTsKKyAgICB1cGRh
dGVTY3JvbGxiYXJzKGNtKTsKKyAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9w
KGNtLmRvYy5zY3JvbGxUb3ApOworICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxM
ZWZ0KGNtLmRvYy5zY3JvbGxMZWZ0KTsKKyAgfSwgdHJ1ZSk7CiAgIG9wdGlvbigibGluZU51bWJl
cnMiLCBmYWxzZSwgZnVuY3Rpb24oY20pIHsKICAgICBzZXRHdXR0ZXJzRm9yTGluZU51bWJlcnMo
Y20ub3B0aW9ucyk7CiAgICAgZ3V0dGVyc0NoYW5nZWQoY20pOwpAQCAtNDM2NSw2ICs1Mzc3LDcg
QEAKICAgb3B0aW9uKCJzaG93Q3Vyc29yV2hlblNlbGVjdGluZyIsIGZhbHNlLCB1cGRhdGVTZWxl
Y3Rpb24sIHRydWUpOwogCiAgIG9wdGlvbigicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51Iiwg
dHJ1ZSk7CisgIG9wdGlvbigibGluZVdpc2VDb3B5Q3V0IiwgdHJ1ZSk7CiAKICAgb3B0aW9uKCJy
ZWFkT25seSIsIGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsKSB7CiAgICAgaWYgKHZhbCA9PSAibm9j
dXJzb3IiKSB7CkBAIC00MzczLDE1ICs1Mzg2LDE2IEBACiAgICAgICBjbS5kaXNwbGF5LmRpc2Fi
bGVkID0gdHJ1ZTsKICAgICB9IGVsc2UgewogICAgICAgY20uZGlzcGxheS5kaXNhYmxlZCA9IGZh
bHNlOwotICAgICAgaWYgKCF2YWwpIHJlc2V0SW5wdXQoY20pOworICAgICAgaWYgKCF2YWwpIGNt
LmRpc3BsYXkuaW5wdXQucmVzZXQoKTsKICAgICB9CiAgIH0pOwotICBvcHRpb24oImRpc2FibGVJ
bnB1dCIsIGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsKSB7aWYgKCF2YWwpIHJlc2V0SW5wdXQoY20p
O30sIHRydWUpOwotICBvcHRpb24oImRyYWdEcm9wIiwgdHJ1ZSk7CisgIG9wdGlvbigiZGlzYWJs
ZUlucHV0IiwgZmFsc2UsIGZ1bmN0aW9uKGNtLCB2YWwpIHtpZiAoIXZhbCkgY20uZGlzcGxheS5p
bnB1dC5yZXNldCgpO30sIHRydWUpOworICBvcHRpb24oImRyYWdEcm9wIiwgdHJ1ZSwgZHJhZ0Ry
b3BDaGFuZ2VkKTsKIAogICBvcHRpb24oImN1cnNvckJsaW5rUmF0ZSIsIDUzMCk7CiAgIG9wdGlv
bigiY3Vyc29yU2Nyb2xsTWFyZ2luIiwgMCk7Ci0gIG9wdGlvbigiY3Vyc29ySGVpZ2h0IiwgMSk7
CisgIG9wdGlvbigiY3Vyc29ySGVpZ2h0IiwgMSwgdXBkYXRlU2VsZWN0aW9uLCB0cnVlKTsKKyAg
b3B0aW9uKCJzaW5nbGVDdXJzb3JIZWlnaHRQZXJMaW5lIiwgdHJ1ZSwgdXBkYXRlU2VsZWN0aW9u
LCB0cnVlKTsKICAgb3B0aW9uKCJ3b3JrVGltZSIsIDEwMCk7CiAgIG9wdGlvbigid29ya0RlbGF5
IiwgMTAwKTsKICAgb3B0aW9uKCJmbGF0dGVuU3BhbnMiLCB0cnVlLCByZXNldE1vZGVTdGF0ZSwg
dHJ1ZSk7CkBAIC00MzkyLDExICs1NDA2LDExIEBACiAgIG9wdGlvbigidmlld3BvcnRNYXJnaW4i
LCAxMCwgZnVuY3Rpb24oY20pe2NtLnJlZnJlc2goKTt9LCB0cnVlKTsKICAgb3B0aW9uKCJtYXhI
aWdobGlnaHRMZW5ndGgiLCAxMDAwMCwgcmVzZXRNb2RlU3RhdGUsIHRydWUpOwogICBvcHRpb24o
Im1vdmVJbnB1dFdpdGhDdXJzb3IiLCB0cnVlLCBmdW5jdGlvbihjbSwgdmFsKSB7Ci0gICAgaWYg
KCF2YWwpIGNtLmRpc3BsYXkuaW5wdXREaXYuc3R5bGUudG9wID0gY20uZGlzcGxheS5pbnB1dERp
di5zdHlsZS5sZWZ0ID0gMDsKKyAgICBpZiAoIXZhbCkgY20uZGlzcGxheS5pbnB1dC5yZXNldFBv
c2l0aW9uKCk7CiAgIH0pOwogCiAgIG9wdGlvbigidGFiaW5kZXgiLCBudWxsLCBmdW5jdGlvbihj
bSwgdmFsKSB7Ci0gICAgY20uZGlzcGxheS5pbnB1dC50YWJJbmRleCA9IHZhbCB8fCAiIjsKKyAg
ICBjbS5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCkudGFiSW5kZXggPSB2YWwgfHwgIiI7CiAgIH0p
OwogICBvcHRpb24oImF1dG9mb2N1cyIsIG51bGwpOwogCkBAIC00NDEwLDEwICs1NDI0LDggQEAK
ICAgLy8gbG9hZCBhIG1vZGUuIChQcmVmZXJyZWQgbWVjaGFuaXNtIGlzIHRoZSByZXF1aXJlL2Rl
ZmluZSBjYWxscy4pCiAgIENvZGVNaXJyb3IuZGVmaW5lTW9kZSA9IGZ1bmN0aW9uKG5hbWUsIG1v
ZGUpIHsKICAgICBpZiAoIUNvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSAmJiBuYW1lICE9ICJudWxs
IikgQ29kZU1pcnJvci5kZWZhdWx0cy5tb2RlID0gbmFtZTsKLSAgICBpZiAoYXJndW1lbnRzLmxl
bmd0aCA+IDIpIHsKLSAgICAgIG1vZGUuZGVwZW5kZW5jaWVzID0gW107Ci0gICAgICBmb3IgKHZh
ciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkgbW9kZS5kZXBlbmRlbmNpZXMucHVz
aChhcmd1bWVudHNbaV0pOwotICAgIH0KKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpCisg
ICAgICBtb2RlLmRlcGVuZGVuY2llcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMik7CiAgICAgbW9kZXNbbmFtZV0gPSBtb2RlOwogICB9OwogCkBAIC00NTY0LDYgKzU1
NzYsMjAgQEAKICAgICAgICAgcmV0dXJuIHtmcm9tOiBQb3MocmFuZ2UuZnJvbSgpLmxpbmUsIDAp
LCB0bzogcmFuZ2UuZnJvbSgpfTsKICAgICAgIH0pOwogICAgIH0sCisgICAgZGVsV3JhcHBlZExp
bmVMZWZ0OiBmdW5jdGlvbihjbSkgeworICAgICAgZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVu
Y3Rpb24ocmFuZ2UpIHsKKyAgICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVh
ZCwgImRpdiIpLnRvcCArIDU7CisgICAgICAgIHZhciBsZWZ0UG9zID0gY20uY29vcmRzQ2hhcih7
bGVmdDogMCwgdG9wOiB0b3B9LCAiZGl2Iik7CisgICAgICAgIHJldHVybiB7ZnJvbTogbGVmdFBv
cywgdG86IHJhbmdlLmZyb20oKX07CisgICAgICB9KTsKKyAgICB9LAorICAgIGRlbFdyYXBwZWRM
aW5lUmlnaHQ6IGZ1bmN0aW9uKGNtKSB7CisgICAgICBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBm
dW5jdGlvbihyYW5nZSkgeworICAgICAgICB2YXIgdG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5o
ZWFkLCAiZGl2IikudG9wICsgNTsKKyAgICAgICAgdmFyIHJpZ2h0UG9zID0gY20uY29vcmRzQ2hh
cih7bGVmdDogY20uZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoICsgMTAwLCB0b3A6IHRvcH0s
ICJkaXYiKTsKKyAgICAgICAgcmV0dXJuIHtmcm9tOiByYW5nZS5mcm9tKCksIHRvOiByaWdodFBv
cyB9OworICAgICAgfSk7CisgICAgfSwKICAgICB1bmRvOiBmdW5jdGlvbihjbSkge2NtLnVuZG8o
KTt9LAogICAgIHJlZG86IGZ1bmN0aW9uKGNtKSB7Y20ucmVkbygpO30sCiAgICAgdW5kb1NlbGVj
dGlvbjogZnVuY3Rpb24oY20pIHtjbS51bmRvU2VsZWN0aW9uKCk7fSwKQEAgLTQ1NzEsMjMgKzU1
OTcsMTcgQEAKICAgICBnb0RvY1N0YXJ0OiBmdW5jdGlvbihjbSkge2NtLmV4dGVuZFNlbGVjdGlv
bihQb3MoY20uZmlyc3RMaW5lKCksIDApKTt9LAogICAgIGdvRG9jRW5kOiBmdW5jdGlvbihjbSkg
e2NtLmV4dGVuZFNlbGVjdGlvbihQb3MoY20ubGFzdExpbmUoKSkpO30sCiAgICAgZ29MaW5lU3Rh
cnQ6IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24o
cmFuZ2UpIHsgcmV0dXJuIGxpbmVTdGFydChjbSwgcmFuZ2UuaGVhZC5saW5lKTsgfSwgc2VsX21v
dmUpOworICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7IHJldHVy
biBsaW5lU3RhcnQoY20sIHJhbmdlLmhlYWQubGluZSk7IH0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAge29yaWdpbjogIittb3ZlIiwgYmlhczogMX0pOwogICAgIH0sCiAgICAgZ29MaW5l
U3RhcnRTbWFydDogZnVuY3Rpb24oY20pIHsKICAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShm
dW5jdGlvbihyYW5nZSkgewotICAgICAgICB2YXIgc3RhcnQgPSBsaW5lU3RhcnQoY20sIHJhbmdl
LmhlYWQubGluZSk7Ci0gICAgICAgIHZhciBsaW5lID0gY20uZ2V0TGluZUhhbmRsZShzdGFydC5s
aW5lKTsKLSAgICAgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7Ci0gICAgICAgIGlmICgh
b3JkZXIgfHwgb3JkZXJbMF0ubGV2ZWwgPT0gMCkgewotICAgICAgICAgIHZhciBmaXJzdE5vbldT
ID0gTWF0aC5tYXgoMCwgbGluZS50ZXh0LnNlYXJjaCgvXFMvKSk7Ci0gICAgICAgICAgdmFyIGlu
V1MgPSByYW5nZS5oZWFkLmxpbmUgPT0gc3RhcnQubGluZSAmJiByYW5nZS5oZWFkLmNoIDw9IGZp
cnN0Tm9uV1MgJiYgcmFuZ2UuaGVhZC5jaDsKLSAgICAgICAgICByZXR1cm4gUG9zKHN0YXJ0Lmxp
bmUsIGluV1MgPyAwIDogZmlyc3ROb25XUyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0
YXJ0OwotICAgICAgfSwgc2VsX21vdmUpOworICAgICAgICByZXR1cm4gbGluZVN0YXJ0U21hcnQo
Y20sIHJhbmdlLmhlYWQpOworICAgICAgfSwge29yaWdpbjogIittb3ZlIiwgYmlhczogMX0pOwog
ICAgIH0sCiAgICAgZ29MaW5lRW5kOiBmdW5jdGlvbihjbSkgewotICAgICAgY20uZXh0ZW5kU2Vs
ZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7IHJldHVybiBsaW5lRW5kKGNtLCByYW5nZS5oZWFk
LmxpbmUpOyB9LCBzZWxfbW92ZSk7CisgICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rp
b24ocmFuZ2UpIHsgcmV0dXJuIGxpbmVFbmQoY20sIHJhbmdlLmhlYWQubGluZSk7IH0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAge29yaWdpbjogIittb3ZlIiwgYmlhczogLTF9KTsKICAg
ICB9LAogICAgIGdvTGluZVJpZ2h0OiBmdW5jdGlvbihjbSkgewogICAgICAgY20uZXh0ZW5kU2Vs
ZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7CkBAIC00NjAxLDYgKzU2MjEsMTQgQEAKICAgICAg
ICAgcmV0dXJuIGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IDAsIHRvcDogdG9wfSwgImRpdiIpOwogICAg
ICAgfSwgc2VsX21vdmUpOwogICAgIH0sCisgICAgZ29MaW5lTGVmdFNtYXJ0OiBmdW5jdGlvbihj
bSkgeworICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7CisgICAg
ICAgIHZhciB0b3AgPSBjbS5jaGFyQ29vcmRzKHJhbmdlLmhlYWQsICJkaXYiKS50b3AgKyA1Owor
ICAgICAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCAiZGl2
Iik7CisgICAgICAgIGlmIChwb3MuY2ggPCBjbS5nZXRMaW5lKHBvcy5saW5lKS5zZWFyY2goL1xT
LykpIHJldHVybiBsaW5lU3RhcnRTbWFydChjbSwgcmFuZ2UuaGVhZCk7CisgICAgICAgIHJldHVy
biBwb3M7CisgICAgICB9LCBzZWxfbW92ZSk7CisgICAgfSwKICAgICBnb0xpbmVVcDogZnVuY3Rp
b24oY20pIHtjbS5tb3ZlVigtMSwgImxpbmUiKTt9LAogICAgIGdvTGluZURvd246IGZ1bmN0aW9u
KGNtKSB7Y20ubW92ZVYoMSwgImxpbmUiKTt9LAogICAgIGdvUGFnZVVwOiBmdW5jdGlvbihjbSkg
e2NtLm1vdmVWKC0xLCAicGFnZSIpO30sCkBAIC00NjUwLDcgKzU2NzgsOCBAQAogICAgICAgICAg
ICAgfSBlbHNlIGlmIChjdXIubGluZSA+IGNtLmRvYy5maXJzdCkgewogICAgICAgICAgICAgICB2
YXIgcHJldiA9IGdldExpbmUoY20uZG9jLCBjdXIubGluZSAtIDEpLnRleHQ7CiAgICAgICAgICAg
ICAgIGlmIChwcmV2KQotICAgICAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShsaW5lLmNoYXJB
dCgwKSArICJcbiIgKyBwcmV2LmNoYXJBdChwcmV2Lmxlbmd0aCAtIDEpLAorICAgICAgICAgICAg
ICAgIGNtLnJlcGxhY2VSYW5nZShsaW5lLmNoYXJBdCgwKSArIGNtLmRvYy5saW5lU2VwYXJhdG9y
KCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LmNoYXJBdChwcmV2Lmxl
bmd0aCAtIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3MoY3VyLmxpbmUg
LSAxLCBwcmV2Lmxlbmd0aCAtIDEpLCBQb3MoY3VyLmxpbmUsIDEpLCAiK3RyYW5zcG9zZSIpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgIH0KQEAgLTQ2NjQsNyArNTY5Myw3IEBACiAgICAgICAg
IHZhciBsZW4gPSBjbS5saXN0U2VsZWN0aW9ucygpLmxlbmd0aDsKICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgIHZhciByYW5nZSA9IGNtLmxpc3RTZWxl
Y3Rpb25zKClbaV07Ci0gICAgICAgICAgY20ucmVwbGFjZVJhbmdlKCJcbiIsIHJhbmdlLmFuY2hv
ciwgcmFuZ2UuaGVhZCwgIitpbnB1dCIpOworICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShjbS5k
b2MubGluZVNlcGFyYXRvcigpLCByYW5nZS5hbmNob3IsIHJhbmdlLmhlYWQsICIraW5wdXQiKTsK
ICAgICAgICAgICBjbS5pbmRlbnRMaW5lKHJhbmdlLmZyb20oKS5saW5lICsgMSwgbnVsbCwgdHJ1
ZSk7CiAgICAgICAgICAgZW5zdXJlQ3Vyc29yVmlzaWJsZShjbSk7CiAgICAgICAgIH0KQEAgLTQ2
NzMsOSArNTcwMiwxMSBAQAogICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24oY20pIHtjbS50
b2dnbGVPdmVyd3JpdGUoKTt9CiAgIH07CiAKKwogICAvLyBTVEFOREFSRCBLRVlNQVBTCiAKICAg
dmFyIGtleU1hcCA9IENvZGVNaXJyb3Iua2V5TWFwID0ge307CisKICAga2V5TWFwLmJhc2ljID0g
ewogICAgICJMZWZ0IjogImdvQ2hhckxlZnQiLCAiUmlnaHQiOiAiZ29DaGFyUmlnaHQiLCAiVXAi
OiAiZ29MaW5lVXAiLCAiRG93biI6ICJnb0xpbmVEb3duIiwKICAgICAiRW5kIjogImdvTGluZUVu
ZCIsICJIb21lIjogImdvTGluZVN0YXJ0U21hcnQiLCAiUGFnZVVwIjogImdvUGFnZVVwIiwgIlBh
Z2VEb3duIjogImdvUGFnZURvd24iLApAQCAtNDY4OSw3ICs1NzIwLDcgQEAKICAgLy8gYXJlIHNp
bXBseSBpZ25vcmVkLgogICBrZXlNYXAucGNEZWZhdWx0ID0gewogICAgICJDdHJsLUEiOiAic2Vs
ZWN0QWxsIiwgIkN0cmwtRCI6ICJkZWxldGVMaW5lIiwgIkN0cmwtWiI6ICJ1bmRvIiwgIlNoaWZ0
LUN0cmwtWiI6ICJyZWRvIiwgIkN0cmwtWSI6ICJyZWRvIiwKLSAgICAiQ3RybC1Ib21lIjogImdv
RG9jU3RhcnQiLCAiQ3RybC1VcCI6ICJnb0RvY1N0YXJ0IiwgIkN0cmwtRW5kIjogImdvRG9jRW5k
IiwgIkN0cmwtRG93biI6ICJnb0RvY0VuZCIsCisgICAgIkN0cmwtSG9tZSI6ICJnb0RvY1N0YXJ0
IiwgIkN0cmwtRW5kIjogImdvRG9jRW5kIiwgIkN0cmwtVXAiOiAiZ29MaW5lVXAiLCAiQ3RybC1E
b3duIjogImdvTGluZURvd24iLAogICAgICJDdHJsLUxlZnQiOiAiZ29Hcm91cExlZnQiLCAiQ3Ry
bC1SaWdodCI6ICJnb0dyb3VwUmlnaHQiLCAiQWx0LUxlZnQiOiAiZ29MaW5lU3RhcnQiLCAiQWx0
LVJpZ2h0IjogImdvTGluZUVuZCIsCiAgICAgIkN0cmwtQmFja3NwYWNlIjogImRlbEdyb3VwQmVm
b3JlIiwgIkN0cmwtRGVsZXRlIjogImRlbEdyb3VwQWZ0ZXIiLCAiQ3RybC1TIjogInNhdmUiLCAi
Q3RybC1GIjogImZpbmQiLAogICAgICJDdHJsLUciOiAiZmluZE5leHQiLCAiU2hpZnQtQ3RybC1H
IjogImZpbmRQcmV2IiwgIlNoaWZ0LUN0cmwtRiI6ICJyZXBsYWNlIiwgIlNoaWZ0LUN0cmwtUiI6
ICJyZXBsYWNlQWxsIiwKQEAgLTQ2OTcsMTYgKzU3MjgsNiBAQAogICAgICJDdHJsLVUiOiAidW5k
b1NlbGVjdGlvbiIsICJTaGlmdC1DdHJsLVUiOiAicmVkb1NlbGVjdGlvbiIsICJBbHQtVSI6ICJy
ZWRvU2VsZWN0aW9uIiwKICAgICBmYWxsdGhyb3VnaDogImJhc2ljIgogICB9OwotICBrZXlNYXAu
bWFjRGVmYXVsdCA9IHsKLSAgICAiQ21kLUEiOiAic2VsZWN0QWxsIiwgIkNtZC1EIjogImRlbGV0
ZUxpbmUiLCAiQ21kLVoiOiAidW5kbyIsICJTaGlmdC1DbWQtWiI6ICJyZWRvIiwgIkNtZC1ZIjog
InJlZG8iLAotICAgICJDbWQtVXAiOiAiZ29Eb2NTdGFydCIsICJDbWQtRW5kIjogImdvRG9jRW5k
IiwgIkNtZC1Eb3duIjogImdvRG9jRW5kIiwgIkFsdC1MZWZ0IjogImdvR3JvdXBMZWZ0IiwKLSAg
ICAiQWx0LVJpZ2h0IjogImdvR3JvdXBSaWdodCIsICJDbWQtTGVmdCI6ICJnb0xpbmVTdGFydCIs
ICJDbWQtUmlnaHQiOiAiZ29MaW5lRW5kIiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsR3JvdXBCZWZv
cmUiLAotICAgICJDdHJsLUFsdC1CYWNrc3BhY2UiOiAiZGVsR3JvdXBBZnRlciIsICJBbHQtRGVs
ZXRlIjogImRlbEdyb3VwQWZ0ZXIiLCAiQ21kLVMiOiAic2F2ZSIsICJDbWQtRiI6ICJmaW5kIiwK
LSAgICAiQ21kLUciOiAiZmluZE5leHQiLCAiU2hpZnQtQ21kLUciOiAiZmluZFByZXYiLCAiQ21k
LUFsdC1GIjogInJlcGxhY2UiLCAiU2hpZnQtQ21kLUFsdC1GIjogInJlcGxhY2VBbGwiLAotICAg
ICJDbWQtWyI6ICJpbmRlbnRMZXNzIiwgIkNtZC1dIjogImluZGVudE1vcmUiLCAiQ21kLUJhY2tz
cGFjZSI6ICJkZWxMaW5lTGVmdCIsCi0gICAgIkNtZC1VIjogInVuZG9TZWxlY3Rpb24iLCAiU2hp
ZnQtQ21kLVUiOiAicmVkb1NlbGVjdGlvbiIsCi0gICAgZmFsbHRocm91Z2g6IFsiYmFzaWMiLCAi
ZW1hY3N5Il0KLSAgfTsKICAgLy8gVmVyeSBiYXNpYyByZWFkbGluZS9lbWFjcy1zdHlsZSBiaW5k
aW5ncywgd2hpY2ggYXJlIHN0YW5kYXJkIG9uIE1hYy4KICAga2V5TWFwLmVtYWNzeSA9IHsKICAg
ICAiQ3RybC1GIjogImdvQ2hhclJpZ2h0IiwgIkN0cmwtQiI6ICJnb0NoYXJMZWZ0IiwgIkN0cmwt
UCI6ICJnb0xpbmVVcCIsICJDdHJsLU4iOiAiZ29MaW5lRG93biIsCkBAIC00NzE0LDcwICs1NzM1
LDExNyBAQAogICAgICJDdHJsLVYiOiAiZ29QYWdlRG93biIsICJTaGlmdC1DdHJsLVYiOiAiZ29Q
YWdlVXAiLCAiQ3RybC1EIjogImRlbENoYXJBZnRlciIsICJDdHJsLUgiOiAiZGVsQ2hhckJlZm9y
ZSIsCiAgICAgIkFsdC1EIjogImRlbFdvcmRBZnRlciIsICJBbHQtQmFja3NwYWNlIjogImRlbFdv
cmRCZWZvcmUiLCAiQ3RybC1LIjogImtpbGxMaW5lIiwgIkN0cmwtVCI6ICJ0cmFuc3Bvc2VDaGFy
cyIKICAgfTsKKyAga2V5TWFwLm1hY0RlZmF1bHQgPSB7CisgICAgIkNtZC1BIjogInNlbGVjdEFs
bCIsICJDbWQtRCI6ICJkZWxldGVMaW5lIiwgIkNtZC1aIjogInVuZG8iLCAiU2hpZnQtQ21kLVoi
OiAicmVkbyIsICJDbWQtWSI6ICJyZWRvIiwKKyAgICAiQ21kLUhvbWUiOiAiZ29Eb2NTdGFydCIs
ICJDbWQtVXAiOiAiZ29Eb2NTdGFydCIsICJDbWQtRW5kIjogImdvRG9jRW5kIiwgIkNtZC1Eb3du
IjogImdvRG9jRW5kIiwgIkFsdC1MZWZ0IjogImdvR3JvdXBMZWZ0IiwKKyAgICAiQWx0LVJpZ2h0
IjogImdvR3JvdXBSaWdodCIsICJDbWQtTGVmdCI6ICJnb0xpbmVMZWZ0IiwgIkNtZC1SaWdodCI6
ICJnb0xpbmVSaWdodCIsICJBbHQtQmFja3NwYWNlIjogImRlbEdyb3VwQmVmb3JlIiwKKyAgICAi
Q3RybC1BbHQtQmFja3NwYWNlIjogImRlbEdyb3VwQWZ0ZXIiLCAiQWx0LURlbGV0ZSI6ICJkZWxH
cm91cEFmdGVyIiwgIkNtZC1TIjogInNhdmUiLCAiQ21kLUYiOiAiZmluZCIsCisgICAgIkNtZC1H
IjogImZpbmROZXh0IiwgIlNoaWZ0LUNtZC1HIjogImZpbmRQcmV2IiwgIkNtZC1BbHQtRiI6ICJy
ZXBsYWNlIiwgIlNoaWZ0LUNtZC1BbHQtRiI6ICJyZXBsYWNlQWxsIiwKKyAgICAiQ21kLVsiOiAi
aW5kZW50TGVzcyIsICJDbWQtXSI6ICJpbmRlbnRNb3JlIiwgIkNtZC1CYWNrc3BhY2UiOiAiZGVs
V3JhcHBlZExpbmVMZWZ0IiwgIkNtZC1EZWxldGUiOiAiZGVsV3JhcHBlZExpbmVSaWdodCIsCisg
ICAgIkNtZC1VIjogInVuZG9TZWxlY3Rpb24iLCAiU2hpZnQtQ21kLVUiOiAicmVkb1NlbGVjdGlv
biIsICJDdHJsLVVwIjogImdvRG9jU3RhcnQiLCAiQ3RybC1Eb3duIjogImdvRG9jRW5kIiwKKyAg
ICBmYWxsdGhyb3VnaDogWyJiYXNpYyIsICJlbWFjc3kiXQorICB9OwogICBrZXlNYXBbImRlZmF1
bHQiXSA9IG1hYyA/IGtleU1hcC5tYWNEZWZhdWx0IDoga2V5TWFwLnBjRGVmYXVsdDsKIAogICAv
LyBLRVlNQVAgRElTUEFUQ0gKIAotICBmdW5jdGlvbiBnZXRLZXlNYXAodmFsKSB7Ci0gICAgaWYg
KHR5cGVvZiB2YWwgPT0gInN0cmluZyIpIHJldHVybiBrZXlNYXBbdmFsXTsKLSAgICBlbHNlIHJl
dHVybiB2YWw7Ci0gIH0KLQotICAvLyBHaXZlbiBhbiBhcnJheSBvZiBrZXltYXBzIGFuZCBhIGtl
eSBuYW1lLCBjYWxsIGhhbmRsZSBvbiBhbnkKLSAgLy8gYmluZGluZ3MgZm91bmQsIHVudGlsIHRo
YXQgcmV0dXJucyBhIHRydXRoeSB2YWx1ZSwgYXQgd2hpY2ggcG9pbnQKLSAgLy8gd2UgY29uc2lk
ZXIgdGhlIGtleSBoYW5kbGVkLiBJbXBsZW1lbnRzIHRoaW5ncyBsaWtlIGJpbmRpbmcgYSBrZXkK
LSAgLy8gdG8gZmFsc2Ugc3RvcHBpbmcgZnVydGhlciBoYW5kbGluZyBhbmQga2V5bWFwIGZhbGx0
aHJvdWdoLgotICB2YXIgbG9va3VwS2V5ID0gQ29kZU1pcnJvci5sb29rdXBLZXkgPSBmdW5jdGlv
bihuYW1lLCBtYXBzLCBoYW5kbGUpIHsKLSAgICBmdW5jdGlvbiBsb29rdXAobWFwKSB7Ci0gICAg
ICBtYXAgPSBnZXRLZXlNYXAobWFwKTsKLSAgICAgIHZhciBmb3VuZCA9IG1hcFtuYW1lXTsKLSAg
ICAgIGlmIChmb3VuZCA9PT0gZmFsc2UpIHJldHVybiAic3RvcCI7Ci0gICAgICBpZiAoZm91bmQg
IT0gbnVsbCAmJiBoYW5kbGUoZm91bmQpKSByZXR1cm4gdHJ1ZTsKLSAgICAgIGlmIChtYXAubm9m
YWxsdGhyb3VnaCkgcmV0dXJuICJzdG9wIjsKLQotICAgICAgdmFyIGZhbGx0aHJvdWdoID0gbWFw
LmZhbGx0aHJvdWdoOwotICAgICAgaWYgKGZhbGx0aHJvdWdoID09IG51bGwpIHJldHVybiBmYWxz
ZTsKLSAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZmFsbHRocm91Z2gp
ICE9ICJbb2JqZWN0IEFycmF5XSIpCi0gICAgICAgIHJldHVybiBsb29rdXAoZmFsbHRocm91Z2gp
OwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWxsdGhyb3VnaC5sZW5ndGg7ICsraSkgewot
ICAgICAgICB2YXIgZG9uZSA9IGxvb2t1cChmYWxsdGhyb3VnaFtpXSk7Ci0gICAgICAgIGlmIChk
b25lKSByZXR1cm4gZG9uZTsKKyAgZnVuY3Rpb24gbm9ybWFsaXplS2V5TmFtZShuYW1lKSB7Cisg
ICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgvLSg/ISQpLyksIG5hbWUgPSBwYXJ0c1twYXJ0cy5s
ZW5ndGggLSAxXTsKKyAgICB2YXIgYWx0LCBjdHJsLCBzaGlmdCwgY21kOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgICB2YXIgbW9kID0gcGFy
dHNbaV07CisgICAgICBpZiAoL14oY21kfG1ldGF8bSkkL2kudGVzdChtb2QpKSBjbWQgPSB0cnVl
OworICAgICAgZWxzZSBpZiAoL15hKGx0KT8kL2kudGVzdChtb2QpKSBhbHQgPSB0cnVlOworICAg
ICAgZWxzZSBpZiAoL14oY3xjdHJsfGNvbnRyb2wpJC9pLnRlc3QobW9kKSkgY3RybCA9IHRydWU7
CisgICAgICBlbHNlIGlmICgvXnMoaGlmdCkkL2kudGVzdChtb2QpKSBzaGlmdCA9IHRydWU7Cisg
ICAgICBlbHNlIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIG1vZGlmaWVyIG5hbWU6ICIg
KyBtb2QpOworICAgIH0KKyAgICBpZiAoYWx0KSBuYW1lID0gIkFsdC0iICsgbmFtZTsKKyAgICBp
ZiAoY3RybCkgbmFtZSA9ICJDdHJsLSIgKyBuYW1lOworICAgIGlmIChjbWQpIG5hbWUgPSAiQ21k
LSIgKyBuYW1lOworICAgIGlmIChzaGlmdCkgbmFtZSA9ICJTaGlmdC0iICsgbmFtZTsKKyAgICBy
ZXR1cm4gbmFtZTsKKyAgfQorCisgIC8vIFRoaXMgaXMgYSBrbHVkZ2UgdG8ga2VlcCBrZXltYXBz
IG1vc3RseSB3b3JraW5nIGFzIHJhdyBvYmplY3RzCisgIC8vIChiYWNrd2FyZHMgY29tcGF0aWJp
bGl0eSkgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSBzdXBwb3J0IGZlYXR1cmVzCisgIC8vIGxpa2Ug
bm9ybWFsaXphdGlvbiBhbmQgbXVsdGktc3Ryb2tlIGtleSBiaW5kaW5ncy4gSXQgY29tcGlsZXMg
YQorICAvLyBuZXcgbm9ybWFsaXplZCBrZXltYXAsIGFuZCB0aGVuIHVwZGF0ZXMgdGhlIG9sZCBv
YmplY3QgdG8gcmVmbGVjdAorICAvLyB0aGlzLgorICBDb2RlTWlycm9yLm5vcm1hbGl6ZUtleU1h
cCA9IGZ1bmN0aW9uKGtleW1hcCkgeworICAgIHZhciBjb3B5ID0ge307CisgICAgZm9yICh2YXIg
a2V5bmFtZSBpbiBrZXltYXApIGlmIChrZXltYXAuaGFzT3duUHJvcGVydHkoa2V5bmFtZSkpIHsK
KyAgICAgIHZhciB2YWx1ZSA9IGtleW1hcFtrZXluYW1lXTsKKyAgICAgIGlmICgvXihuYW1lfGZh
bGx0aHJvdWdofChkZXxhdCl0YWNoKSQvLnRlc3Qoa2V5bmFtZSkpIGNvbnRpbnVlOworICAgICAg
aWYgKHZhbHVlID09ICIuLi4iKSB7IGRlbGV0ZSBrZXltYXBba2V5bmFtZV07IGNvbnRpbnVlOyB9
CisKKyAgICAgIHZhciBrZXlzID0gbWFwKGtleW5hbWUuc3BsaXQoIiAiKSwgbm9ybWFsaXplS2V5
TmFtZSk7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgdmFyIHZhbCwgbmFtZTsKKyAgICAgICAgaWYgKGkgPT0ga2V5cy5sZW5ndGggLSAxKSB7
CisgICAgICAgICAgbmFtZSA9IGtleXMuam9pbigiICIpOworICAgICAgICAgIHZhbCA9IHZhbHVl
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG5hbWUgPSBrZXlzLnNsaWNlKDAsIGkgKyAx
KS5qb2luKCIgIik7CisgICAgICAgICAgdmFsID0gIi4uLiI7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIHByZXYgPSBjb3B5W25hbWVdOworICAgICAgICBpZiAoIXByZXYpIGNvcHlbbmFtZV0gPSB2
YWw7CisgICAgICAgIGVsc2UgaWYgKHByZXYgIT0gdmFsKSB0aHJvdyBuZXcgRXJyb3IoIkluY29u
c2lzdGVudCBiaW5kaW5ncyBmb3IgIiArIG5hbWUpOwogICAgICAgfQotICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgZGVsZXRlIGtleW1hcFtrZXluYW1lXTsKICAgICB9CisgICAgZm9yICh2YXIg
cHJvcCBpbiBjb3B5KSBrZXltYXBbcHJvcF0gPSBjb3B5W3Byb3BdOworICAgIHJldHVybiBrZXlt
YXA7CisgIH07CiAKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcHMubGVuZ3RoOyArK2kpIHsK
LSAgICAgIHZhciBkb25lID0gbG9va3VwKG1hcHNbaV0pOwotICAgICAgaWYgKGRvbmUpIHJldHVy
biBkb25lICE9ICJzdG9wIjsKKyAgdmFyIGxvb2t1cEtleSA9IENvZGVNaXJyb3IubG9va3VwS2V5
ID0gZnVuY3Rpb24oa2V5LCBtYXAsIGhhbmRsZSwgY29udGV4dCkgeworICAgIG1hcCA9IGdldEtl
eU1hcChtYXApOworICAgIHZhciBmb3VuZCA9IG1hcC5jYWxsID8gbWFwLmNhbGwoa2V5LCBjb250
ZXh0KSA6IG1hcFtrZXldOworICAgIGlmIChmb3VuZCA9PT0gZmFsc2UpIHJldHVybiAibm90aGlu
ZyI7CisgICAgaWYgKGZvdW5kID09PSAiLi4uIikgcmV0dXJuICJtdWx0aSI7CisgICAgaWYgKGZv
dW5kICE9IG51bGwgJiYgaGFuZGxlKGZvdW5kKSkgcmV0dXJuICJoYW5kbGVkIjsKKworICAgIGlm
IChtYXAuZmFsbHRocm91Z2gpIHsKKyAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5n
LmNhbGwobWFwLmZhbGx0aHJvdWdoKSAhPSAiW29iamVjdCBBcnJheV0iKQorICAgICAgICByZXR1
cm4gbG9va3VwS2V5KGtleSwgbWFwLmZhbGx0aHJvdWdoLCBoYW5kbGUsIGNvbnRleHQpOworICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXAuZmFsbHRocm91Z2gubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IGxvb2t1cEtleShrZXksIG1hcC5mYWxsdGhyb3VnaFtpXSwgaGFu
ZGxlLCBjb250ZXh0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDsKKyAgICAg
IH0KICAgICB9CiAgIH07CiAKICAgLy8gTW9kaWZpZXIga2V5IHByZXNzZXMgZG9uJ3QgY291bnQg
YXMgJ3JlYWwnIGtleSBwcmVzc2VzIGZvciB0aGUKICAgLy8gcHVycG9zZSBvZiBrZXltYXAgZmFs
bHRocm91Z2guCi0gIHZhciBpc01vZGlmaWVyS2V5ID0gQ29kZU1pcnJvci5pc01vZGlmaWVyS2V5
ID0gZnVuY3Rpb24oZXZlbnQpIHsKLSAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2V2ZW50LmtleUNv
ZGVdOworICB2YXIgaXNNb2RpZmllcktleSA9IENvZGVNaXJyb3IuaXNNb2RpZmllcktleSA9IGZ1
bmN0aW9uKHZhbHVlKSB7CisgICAgdmFyIG5hbWUgPSB0eXBlb2YgdmFsdWUgPT0gInN0cmluZyIg
PyB2YWx1ZSA6IGtleU5hbWVzW3ZhbHVlLmtleUNvZGVdOwogICAgIHJldHVybiBuYW1lID09ICJD
dHJsIiB8fCBuYW1lID09ICJBbHQiIHx8IG5hbWUgPT0gIlNoaWZ0IiB8fCBuYW1lID09ICJNb2Qi
OwogICB9OwogCiAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb2YgYSBrZXkgYXMgaW5kaWNhdGVkIGJ5
IGFuIGV2ZW50IG9iamVjdC4KICAgdmFyIGtleU5hbWUgPSBDb2RlTWlycm9yLmtleU5hbWUgPSBm
dW5jdGlvbihldmVudCwgbm9TaGlmdCkgewogICAgIGlmIChwcmVzdG8gJiYgZXZlbnQua2V5Q29k
ZSA9PSAzNCAmJiBldmVudFsiY2hhciJdKSByZXR1cm4gZmFsc2U7Ci0gICAgdmFyIG5hbWUgPSBr
ZXlOYW1lc1tldmVudC5rZXlDb2RlXTsKKyAgICB2YXIgYmFzZSA9IGtleU5hbWVzW2V2ZW50Lmtl
eUNvZGVdLCBuYW1lID0gYmFzZTsKICAgICBpZiAobmFtZSA9PSBudWxsIHx8IGV2ZW50LmFsdEdy
YXBoS2V5KSByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGV2ZW50LmFsdEtleSkgbmFtZSA9ICJBbHQt
IiArIG5hbWU7Ci0gICAgaWYgKGZsaXBDdHJsQ21kID8gZXZlbnQubWV0YUtleSA6IGV2ZW50LmN0
cmxLZXkpIG5hbWUgPSAiQ3RybC0iICsgbmFtZTsKLSAgICBpZiAoZmxpcEN0cmxDbWQgPyBldmVu
dC5jdHJsS2V5IDogZXZlbnQubWV0YUtleSkgbmFtZSA9ICJDbWQtIiArIG5hbWU7Ci0gICAgaWYg
KCFub1NoaWZ0ICYmIGV2ZW50LnNoaWZ0S2V5KSBuYW1lID0gIlNoaWZ0LSIgKyBuYW1lOworICAg
IGlmIChldmVudC5hbHRLZXkgJiYgYmFzZSAhPSAiQWx0IikgbmFtZSA9ICJBbHQtIiArIG5hbWU7
CisgICAgaWYgKChmbGlwQ3RybENtZCA/IGV2ZW50Lm1ldGFLZXkgOiBldmVudC5jdHJsS2V5KSAm
JiBiYXNlICE9ICJDdHJsIikgbmFtZSA9ICJDdHJsLSIgKyBuYW1lOworICAgIGlmICgoZmxpcEN0
cmxDbWQgPyBldmVudC5jdHJsS2V5IDogZXZlbnQubWV0YUtleSkgJiYgYmFzZSAhPSAiQ21kIikg
bmFtZSA9ICJDbWQtIiArIG5hbWU7CisgICAgaWYgKCFub1NoaWZ0ICYmIGV2ZW50LnNoaWZ0S2V5
ICYmIGJhc2UgIT0gIlNoaWZ0IikgbmFtZSA9ICJTaGlmdC0iICsgbmFtZTsKICAgICByZXR1cm4g
bmFtZTsKICAgfTsKIAorICBmdW5jdGlvbiBnZXRLZXlNYXAodmFsKSB7CisgICAgcmV0dXJuIHR5
cGVvZiB2YWwgPT0gInN0cmluZyIgPyBrZXlNYXBbdmFsXSA6IHZhbDsKKyAgfQorCiAgIC8vIEZS
T01URVhUQVJFQQogCiAgIENvZGVNaXJyb3IuZnJvbVRleHRBcmVhID0gZnVuY3Rpb24odGV4dGFy
ZWEsIG9wdGlvbnMpIHsKLSAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTsKKyAgICBvcHRp
b25zID0gb3B0aW9ucyA/IGNvcHlPYmoob3B0aW9ucykgOiB7fTsKICAgICBvcHRpb25zLnZhbHVl
ID0gdGV4dGFyZWEudmFsdWU7Ci0gICAgaWYgKCFvcHRpb25zLnRhYmluZGV4ICYmIHRleHRhcmVh
LnRhYmluZGV4KQotICAgICAgb3B0aW9ucy50YWJpbmRleCA9IHRleHRhcmVhLnRhYmluZGV4Owor
ICAgIGlmICghb3B0aW9ucy50YWJpbmRleCAmJiB0ZXh0YXJlYS50YWJJbmRleCkKKyAgICAgIG9w
dGlvbnMudGFiaW5kZXggPSB0ZXh0YXJlYS50YWJJbmRleDsKICAgICBpZiAoIW9wdGlvbnMucGxh
Y2Vob2xkZXIgJiYgdGV4dGFyZWEucGxhY2Vob2xkZXIpCiAgICAgICBvcHRpb25zLnBsYWNlaG9s
ZGVyID0gdGV4dGFyZWEucGxhY2Vob2xkZXI7CiAgICAgLy8gU2V0IGF1dG9mb2N1cyB0byB0cnVl
IGlmIHRoaXMgdGV4dGFyZWEgaXMgZm9jdXNlZCwgb3IgaWYgaXQgaGFzCkBAIC00ODA1LDIyICs1
ODczLDI2IEBACiAgICAgICB9CiAgICAgfQogCisgICAgb3B0aW9ucy5maW5pc2hJbml0ID0gZnVu
Y3Rpb24oY20pIHsKKyAgICAgIGNtLnNhdmUgPSBzYXZlOworICAgICAgY20uZ2V0VGV4dEFyZWEg
PSBmdW5jdGlvbigpIHsgcmV0dXJuIHRleHRhcmVhOyB9OworICAgICAgY20udG9UZXh0QXJlYSA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBjbS50b1RleHRBcmVhID0gaXNOYU47IC8vIFByZXZlbnQg
dGhpcyBmcm9tIGJlaW5nIHJhbiB0d2ljZQorICAgICAgICBzYXZlKCk7CisgICAgICAgIHRleHRh
cmVhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY20uZ2V0V3JhcHBlckVsZW1lbnQoKSk7CisgICAg
ICAgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgICAgaWYgKHRleHRhcmVhLmZv
cm0pIHsKKyAgICAgICAgICBvZmYodGV4dGFyZWEuZm9ybSwgInN1Ym1pdCIsIHNhdmUpOworICAg
ICAgICAgIGlmICh0eXBlb2YgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPT0gImZ1bmN0aW9uIikKKyAg
ICAgICAgICAgIHRleHRhcmVhLmZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDsKKyAgICAgICAgfQor
ICAgICAgfTsKKyAgICB9OworCiAgICAgdGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9ICJub25lIjsK
ICAgICB2YXIgY20gPSBDb2RlTWlycm9yKGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgIHRleHRhcmVh
LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIHRleHRhcmVhLm5leHRTaWJsaW5nKTsKICAg
ICB9LCBvcHRpb25zKTsKLSAgICBjbS5zYXZlID0gc2F2ZTsKLSAgICBjbS5nZXRUZXh0QXJlYSA9
IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGV4dGFyZWE7IH07Ci0gICAgY20udG9UZXh0QXJlYSA9IGZ1
bmN0aW9uKCkgewotICAgICAgc2F2ZSgpOwotICAgICAgdGV4dGFyZWEucGFyZW50Tm9kZS5yZW1v
dmVDaGlsZChjbS5nZXRXcmFwcGVyRWxlbWVudCgpKTsKLSAgICAgIHRleHRhcmVhLnN0eWxlLmRp
c3BsYXkgPSAiIjsKLSAgICAgIGlmICh0ZXh0YXJlYS5mb3JtKSB7Ci0gICAgICAgIG9mZih0ZXh0
YXJlYS5mb3JtLCAic3VibWl0Iiwgc2F2ZSk7Ci0gICAgICAgIGlmICh0eXBlb2YgdGV4dGFyZWEu
Zm9ybS5zdWJtaXQgPT0gImZ1bmN0aW9uIikKLSAgICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1p
dCA9IHJlYWxTdWJtaXQ7Ci0gICAgICB9Ci0gICAgfTsKICAgICByZXR1cm4gY207CiAgIH07CiAK
QEAgLTQ5MTMsMTAgKzU5ODUsMTMgQEAKICAgLy8gbWFya2VyIGNvbnRpbnVlcyBiZXlvbmQgdGhl
IHN0YXJ0L2VuZCBvZiB0aGUgbGluZS4gTWFya2VycyBoYXZlCiAgIC8vIGxpbmtzIGJhY2sgdG8g
dGhlIGxpbmVzIHRoZXkgY3VycmVudGx5IHRvdWNoLgogCisgIHZhciBuZXh0TWFya2VySWQgPSAw
OworCiAgIHZhciBUZXh0TWFya2VyID0gQ29kZU1pcnJvci5UZXh0TWFya2VyID0gZnVuY3Rpb24o
ZG9jLCB0eXBlKSB7CiAgICAgdGhpcy5saW5lcyA9IFtdOwogICAgIHRoaXMudHlwZSA9IHR5cGU7
CiAgICAgdGhpcy5kb2MgPSBkb2M7CisgICAgdGhpcy5pZCA9ICsrbmV4dE1hcmtlcklkOwogICB9
OwogICBldmVudE1peGluKFRleHRNYXJrZXIpOwogCkBAIC01MDQ4LDcgKzYxMjMsNyBAQAogICAg
ICAgLy8gU2hvd2luZyB1cCBhcyBhIHdpZGdldCBpbXBsaWVzIGNvbGxhcHNlZCAod2lkZ2V0IHJl
cGxhY2VzIHRleHQpCiAgICAgICBtYXJrZXIuY29sbGFwc2VkID0gdHJ1ZTsKICAgICAgIG1hcmtl
ci53aWRnZXROb2RlID0gZWx0KCJzcGFuIiwgW21hcmtlci5yZXBsYWNlZFdpdGhdLCAiQ29kZU1p
cnJvci13aWRnZXQiKTsKLSAgICAgIGlmICghb3B0aW9ucy5oYW5kbGVNb3VzZUV2ZW50cykgbWFy
a2VyLndpZGdldE5vZGUuaWdub3JlRXZlbnRzID0gdHJ1ZTsKKyAgICAgIGlmICghb3B0aW9ucy5o
YW5kbGVNb3VzZUV2ZW50cykgbWFya2VyLndpZGdldE5vZGUuc2V0QXR0cmlidXRlKCJjbS1pZ25v
cmUtZXZlbnRzIiwgInRydWUiKTsKICAgICAgIGlmIChvcHRpb25zLmluc2VydExlZnQpIG1hcmtl
ci53aWRnZXROb2RlLmluc2VydExlZnQgPSB0cnVlOwogICAgIH0KICAgICBpZiAobWFya2VyLmNv
bGxhcHNlZCkgewpAQCAtNTA5Miw3ICs2MTY3LDcgQEAKICAgICAgIGlmICh1cGRhdGVNYXhMaW5l
KSBjbS5jdXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1ZTsKICAgICAgIGlmIChtYXJrZXIuY29sbGFw
c2VkKQogICAgICAgICByZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEpOwotICAg
ICAgZWxzZSBpZiAobWFya2VyLmNsYXNzTmFtZSB8fCBtYXJrZXIudGl0bGUgfHwgbWFya2VyLnN0
YXJ0U3R5bGUgfHwgbWFya2VyLmVuZFN0eWxlKQorICAgICAgZWxzZSBpZiAobWFya2VyLmNsYXNz
TmFtZSB8fCBtYXJrZXIudGl0bGUgfHwgbWFya2VyLnN0YXJ0U3R5bGUgfHwgbWFya2VyLmVuZFN0
eWxlIHx8IG1hcmtlci5jc3MpCiAgICAgICAgIGZvciAodmFyIGkgPSBmcm9tLmxpbmU7IGkgPD0g
dG8ubGluZTsgaSsrKSByZWdMaW5lQ2hhbmdlKGNtLCBpLCAidGV4dCIpOwogICAgICAgaWYgKG1h
cmtlci5hdG9taWMpIHJlQ2hlY2tTZWxlY3Rpb24oY20uZG9jKTsKICAgICAgIHNpZ25hbExhdGVy
KGNtLCAibWFya2VyQWRkZWQiLCBjbSwgbWFya2VyKTsKQEAgLTUyMzIsNiArNjMwNyw3IEBACiAg
IC8vIHNwYW5zIHBhcnRpYWxseSB3aXRoaW4gdGhlIGNoYW5nZS4gUmV0dXJucyBhbiBhcnJheSBv
ZiBzcGFuCiAgIC8vIGFycmF5cyB3aXRoIG9uZSBlbGVtZW50IGZvciBlYWNoIGxpbmUgaW4gKGFm
dGVyKSB0aGUgY2hhbmdlLgogICBmdW5jdGlvbiBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywg
Y2hhbmdlKSB7CisgICAgaWYgKGNoYW5nZS5mdWxsKSByZXR1cm4gbnVsbDsKICAgICB2YXIgb2xk
Rmlyc3QgPSBpc0xpbmUoZG9jLCBjaGFuZ2UuZnJvbS5saW5lKSAmJiBnZXRMaW5lKGRvYywgY2hh
bmdlLmZyb20ubGluZSkubWFya2VkU3BhbnM7CiAgICAgdmFyIG9sZExhc3QgPSBpc0xpbmUoZG9j
LCBjaGFuZ2UudG8ubGluZSkgJiYgZ2V0TGluZShkb2MsIGNoYW5nZS50by5saW5lKS5tYXJrZWRT
cGFuczsKICAgICBpZiAoIW9sZEZpcnN0ICYmICFvbGRMYXN0KSByZXR1cm4gbnVsbDsKQEAgLTU0
MTksOCArNjQ5NSw4IEBACiAgICAgICB2YXIgZnJvbUNtcCA9IGNtcChmb3VuZC5mcm9tLCBmcm9t
KSB8fCBleHRyYUxlZnQoc3AubWFya2VyKSAtIGV4dHJhTGVmdChtYXJrZXIpOwogICAgICAgdmFy
IHRvQ21wID0gY21wKGZvdW5kLnRvLCB0bykgfHwgZXh0cmFSaWdodChzcC5tYXJrZXIpIC0gZXh0
cmFSaWdodChtYXJrZXIpOwogICAgICAgaWYgKGZyb21DbXAgPj0gMCAmJiB0b0NtcCA8PSAwIHx8
IGZyb21DbXAgPD0gMCAmJiB0b0NtcCA+PSAwKSBjb250aW51ZTsKLSAgICAgIGlmIChmcm9tQ21w
IDw9IDAgJiYgKGNtcChmb3VuZC50bywgZnJvbSkgfHwgZXh0cmFSaWdodChzcC5tYXJrZXIpIC0g
ZXh0cmFMZWZ0KG1hcmtlcikpID4gMCB8fAotICAgICAgICAgIGZyb21DbXAgPj0gMCAmJiAoY21w
KGZvdW5kLmZyb20sIHRvKSB8fCBleHRyYUxlZnQoc3AubWFya2VyKSAtIGV4dHJhUmlnaHQobWFy
a2VyKSkgPCAwKQorICAgICAgaWYgKGZyb21DbXAgPD0gMCAmJiAoY21wKGZvdW5kLnRvLCBmcm9t
KSA+IDAgfHwgKHNwLm1hcmtlci5pbmNsdXNpdmVSaWdodCAmJiBtYXJrZXIuaW5jbHVzaXZlTGVm
dCkpIHx8CisgICAgICAgICAgZnJvbUNtcCA+PSAwICYmIChjbXAoZm91bmQuZnJvbSwgdG8pIDwg
MCB8fCAoc3AubWFya2VyLmluY2x1c2l2ZUxlZnQgJiYgbWFya2VyLmluY2x1c2l2ZVJpZ2h0KSkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgfQpAQCAtNTQ5OSwxMCArNjU3NSwxMCBA
QAogCiAgIC8vIExpbmUgd2lkZ2V0cyBhcmUgYmxvY2sgZWxlbWVudHMgZGlzcGxheWVkIGFib3Zl
IG9yIGJlbG93IGEgbGluZS4KIAotICB2YXIgTGluZVdpZGdldCA9IENvZGVNaXJyb3IuTGluZVdp
ZGdldCA9IGZ1bmN0aW9uKGNtLCBub2RlLCBvcHRpb25zKSB7CisgIHZhciBMaW5lV2lkZ2V0ID0g
Q29kZU1pcnJvci5MaW5lV2lkZ2V0ID0gZnVuY3Rpb24oZG9jLCBub2RlLCBvcHRpb25zKSB7CiAg
ICAgaWYgKG9wdGlvbnMpIGZvciAodmFyIG9wdCBpbiBvcHRpb25zKSBpZiAob3B0aW9ucy5oYXNP
d25Qcm9wZXJ0eShvcHQpKQogICAgICAgdGhpc1tvcHRdID0gb3B0aW9uc1tvcHRdOwotICAgIHRo
aXMuY20gPSBjbTsKKyAgICB0aGlzLmRvYyA9IGRvYzsKICAgICB0aGlzLm5vZGUgPSBub2RlOwog
ICB9OwogICBldmVudE1peGluKExpbmVXaWRnZXQpOwpAQCAtNTUxMyw0NiArNjU4OSw1NSBAQAog
ICB9CiAKICAgTGluZVdpZGdldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHsKLSAgICB2
YXIgY20gPSB0aGlzLmNtLCB3cyA9IHRoaXMubGluZS53aWRnZXRzLCBsaW5lID0gdGhpcy5saW5l
LCBubyA9IGxpbmVObyhsaW5lKTsKKyAgICB2YXIgY20gPSB0aGlzLmRvYy5jbSwgd3MgPSB0aGlz
LmxpbmUud2lkZ2V0cywgbGluZSA9IHRoaXMubGluZSwgbm8gPSBsaW5lTm8obGluZSk7CiAgICAg
aWYgKG5vID09IG51bGwgfHwgIXdzKSByZXR1cm47CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3
cy5sZW5ndGg7ICsraSkgaWYgKHdzW2ldID09IHRoaXMpIHdzLnNwbGljZShpLS0sIDEpOwogICAg
IGlmICghd3MubGVuZ3RoKSBsaW5lLndpZGdldHMgPSBudWxsOwogICAgIHZhciBoZWlnaHQgPSB3
aWRnZXRIZWlnaHQodGhpcyk7Ci0gICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CisgICAgdXBk
YXRlTGluZUhlaWdodChsaW5lLCBNYXRoLm1heCgwLCBsaW5lLmhlaWdodCAtIGhlaWdodCkpOwor
ICAgIGlmIChjbSkgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CiAgICAgICBhZGp1c3RTY3JvbGxX
aGVuQWJvdmVWaXNpYmxlKGNtLCBsaW5lLCAtaGVpZ2h0KTsKICAgICAgIHJlZ0xpbmVDaGFuZ2Uo
Y20sIG5vLCAid2lkZ2V0Iik7Ci0gICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIE1hdGgubWF4
KDAsIGxpbmUuaGVpZ2h0IC0gaGVpZ2h0KSk7CiAgICAgfSk7CiAgIH07CiAgIExpbmVXaWRnZXQu
cHJvdG90eXBlLmNoYW5nZWQgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgb2xkSCA9IHRoaXMuaGVp
Z2h0LCBjbSA9IHRoaXMuY20sIGxpbmUgPSB0aGlzLmxpbmU7CisgICAgdmFyIG9sZEggPSB0aGlz
LmhlaWdodCwgY20gPSB0aGlzLmRvYy5jbSwgbGluZSA9IHRoaXMubGluZTsKICAgICB0aGlzLmhl
aWdodCA9IG51bGw7CiAgICAgdmFyIGRpZmYgPSB3aWRnZXRIZWlnaHQodGhpcykgLSBvbGRIOwog
ICAgIGlmICghZGlmZikgcmV0dXJuOwotICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgeworICAg
IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyBkaWZmKTsKKyAgICBpZiAoY20p
IHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgewogICAgICAgY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0
cnVlOwogICAgICAgYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZik7
Ci0gICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgZGlmZik7CiAgICAg
fSk7CiAgIH07CiAKICAgZnVuY3Rpb24gd2lkZ2V0SGVpZ2h0KHdpZGdldCkgewogICAgIGlmICh3
aWRnZXQuaGVpZ2h0ICE9IG51bGwpIHJldHVybiB3aWRnZXQuaGVpZ2h0OwotICAgIGlmICghY29u
dGFpbnMoZG9jdW1lbnQuYm9keSwgd2lkZ2V0Lm5vZGUpKQotICAgICAgcmVtb3ZlQ2hpbGRyZW5B
bmRBZGQod2lkZ2V0LmNtLmRpc3BsYXkubWVhc3VyZSwgZWx0KCJkaXYiLCBbd2lkZ2V0Lm5vZGVd
LCBudWxsLCAicG9zaXRpb246IHJlbGF0aXZlIikpOworICAgIHZhciBjbSA9IHdpZGdldC5kb2Mu
Y207CisgICAgaWYgKCFjbSkgcmV0dXJuIDA7CisgICAgaWYgKCFjb250YWlucyhkb2N1bWVudC5i
b2R5LCB3aWRnZXQubm9kZSkpIHsKKyAgICAgIHZhciBwYXJlbnRTdHlsZSA9ICJwb3NpdGlvbjog
cmVsYXRpdmU7IjsKKyAgICAgIGlmICh3aWRnZXQuY292ZXJHdXR0ZXIpCisgICAgICAgIHBhcmVu
dFN0eWxlICs9ICJtYXJnaW4tbGVmdDogLSIgKyBjbS5kaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lk
dGggKyAicHg7IjsKKyAgICAgIGlmICh3aWRnZXQubm9IU2Nyb2xsKQorICAgICAgICBwYXJlbnRT
dHlsZSArPSAid2lkdGg6ICIgKyBjbS5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggKyAicHg7
IjsKKyAgICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGNtLmRpc3BsYXkubWVhc3VyZSwgZWx0KCJk
aXYiLCBbd2lkZ2V0Lm5vZGVdLCBudWxsLCBwYXJlbnRTdHlsZSkpOworICAgIH0KICAgICByZXR1
cm4gd2lkZ2V0LmhlaWdodCA9IHdpZGdldC5ub2RlLm9mZnNldEhlaWdodDsKICAgfQogCi0gIGZ1
bmN0aW9uIGFkZExpbmVXaWRnZXQoY20sIGhhbmRsZSwgbm9kZSwgb3B0aW9ucykgewotICAgIHZh
ciB3aWRnZXQgPSBuZXcgTGluZVdpZGdldChjbSwgbm9kZSwgb3B0aW9ucyk7Ci0gICAgaWYgKHdp
ZGdldC5ub0hTY3JvbGwpIGNtLmRpc3BsYXkuYWxpZ25XaWRnZXRzID0gdHJ1ZTsKLSAgICBjaGFu
Z2VMaW5lKGNtLCBoYW5kbGUsICJ3aWRnZXQiLCBmdW5jdGlvbihsaW5lKSB7CisgIGZ1bmN0aW9u
IGFkZExpbmVXaWRnZXQoZG9jLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHsKKyAgICB2YXIgd2lk
Z2V0ID0gbmV3IExpbmVXaWRnZXQoZG9jLCBub2RlLCBvcHRpb25zKTsKKyAgICB2YXIgY20gPSBk
b2MuY207CisgICAgaWYgKGNtICYmIHdpZGdldC5ub0hTY3JvbGwpIGNtLmRpc3BsYXkuYWxpZ25X
aWRnZXRzID0gdHJ1ZTsKKyAgICBjaGFuZ2VMaW5lKGRvYywgaGFuZGxlLCAid2lkZ2V0IiwgZnVu
Y3Rpb24obGluZSkgewogICAgICAgdmFyIHdpZGdldHMgPSBsaW5lLndpZGdldHMgfHwgKGxpbmUu
d2lkZ2V0cyA9IFtdKTsKICAgICAgIGlmICh3aWRnZXQuaW5zZXJ0QXQgPT0gbnVsbCkgd2lkZ2V0
cy5wdXNoKHdpZGdldCk7CiAgICAgICBlbHNlIHdpZGdldHMuc3BsaWNlKE1hdGgubWluKHdpZGdl
dHMubGVuZ3RoIC0gMSwgTWF0aC5tYXgoMCwgd2lkZ2V0Lmluc2VydEF0KSksIDAsIHdpZGdldCk7
CiAgICAgICB3aWRnZXQubGluZSA9IGxpbmU7Ci0gICAgICBpZiAoIWxpbmVJc0hpZGRlbihjbS5k
b2MsIGxpbmUpKSB7Ci0gICAgICAgIHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExpbmUobGlu
ZSkgPCBjbS5kb2Muc2Nyb2xsVG9wOworICAgICAgaWYgKGNtICYmICFsaW5lSXNIaWRkZW4oZG9j
LCBsaW5lKSkgeworICAgICAgICB2YXIgYWJvdmVWaXNpYmxlID0gaGVpZ2h0QXRMaW5lKGxpbmUp
IDwgZG9jLnNjcm9sbFRvcDsKICAgICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBsaW5lLmhl
aWdodCArIHdpZGdldEhlaWdodCh3aWRnZXQpKTsKICAgICAgICAgaWYgKGFib3ZlVmlzaWJsZSkg
YWRkVG9TY3JvbGxQb3MoY20sIG51bGwsIHdpZGdldC5oZWlnaHQpOwogICAgICAgICBjbS5jdXJP
cC5mb3JjZVVwZGF0ZSA9IHRydWU7CkBAIC01NjE1LDIwICs2NzAwLDQ0IEBACiAgICAgaWYgKGlu
bmVyLm1vZGUuYmxhbmtMaW5lKSByZXR1cm4gaW5uZXIubW9kZS5ibGFua0xpbmUoaW5uZXIuc3Rh
dGUpOwogICB9CiAKLSAgZnVuY3Rpb24gcmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgc3RhdGUpIHsK
KyAgZnVuY3Rpb24gcmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgc3RhdGUsIGlubmVyKSB7CiAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICBpZiAoaW5uZXIpIGlubmVyWzBd
ID0gQ29kZU1pcnJvci5pbm5lck1vZGUobW9kZSwgc3RhdGUpLm1vZGU7CiAgICAgICB2YXIgc3R5
bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwogICAgICAgaWYgKHN0cmVhbS5wb3MgPiBz
dHJlYW0uc3RhcnQpIHJldHVybiBzdHlsZTsKICAgICB9CiAgICAgdGhyb3cgbmV3IEVycm9yKCJN
b2RlICIgKyBtb2RlLm5hbWUgKyAiIGZhaWxlZCB0byBhZHZhbmNlIHN0cmVhbS4iKTsKICAgfQog
CisgIC8vIFV0aWxpdHkgZm9yIGdldFRva2VuQXQgYW5kIGdldExpbmVUb2tlbnMKKyAgZnVuY3Rp
b24gdGFrZVRva2VuKGNtLCBwb3MsIHByZWNpc2UsIGFzQXJyYXkpIHsKKyAgICBmdW5jdGlvbiBn
ZXRPYmooY29weSkgeworICAgICAgcmV0dXJuIHtzdGFydDogc3RyZWFtLnN0YXJ0LCBlbmQ6IHN0
cmVhbS5wb3MsCisgICAgICAgICAgICAgIHN0cmluZzogc3RyZWFtLmN1cnJlbnQoKSwKKyAgICAg
ICAgICAgICAgdHlwZTogc3R5bGUgfHwgbnVsbCwKKyAgICAgICAgICAgICAgc3RhdGU6IGNvcHkg
PyBjb3B5U3RhdGUoZG9jLm1vZGUsIHN0YXRlKSA6IHN0YXRlfTsKKyAgICB9CisKKyAgICB2YXIg
ZG9jID0gY20uZG9jLCBtb2RlID0gZG9jLm1vZGUsIHN0eWxlOworICAgIHBvcyA9IGNsaXBQb3Mo
ZG9jLCBwb3MpOworICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKSwgc3RhdGUg
PSBnZXRTdGF0ZUJlZm9yZShjbSwgcG9zLmxpbmUsIHByZWNpc2UpOworICAgIHZhciBzdHJlYW0g
PSBuZXcgU3RyaW5nU3RyZWFtKGxpbmUudGV4dCwgY20ub3B0aW9ucy50YWJTaXplKSwgdG9rZW5z
OworICAgIGlmIChhc0FycmF5KSB0b2tlbnMgPSBbXTsKKyAgICB3aGlsZSAoKGFzQXJyYXkgfHwg
c3RyZWFtLnBvcyA8IHBvcy5jaCkgJiYgIXN0cmVhbS5lb2woKSkgeworICAgICAgc3RyZWFtLnN0
YXJ0ID0gc3RyZWFtLnBvczsKKyAgICAgIHN0eWxlID0gcmVhZFRva2VuKG1vZGUsIHN0cmVhbSwg
c3RhdGUpOworICAgICAgaWYgKGFzQXJyYXkpIHRva2Vucy5wdXNoKGdldE9iaih0cnVlKSk7Cisg
ICAgfQorICAgIHJldHVybiBhc0FycmF5ID8gdG9rZW5zIDogZ2V0T2JqKCk7CisgIH0KKwogICAv
LyBSdW4gdGhlIGdpdmVuIG1vZGUncyBwYXJzZXIgb3ZlciBhIGxpbmUsIGNhbGxpbmcgZiBmb3Ig
ZWFjaCB0b2tlbi4KICAgZnVuY3Rpb24gcnVuTW9kZShjbSwgdGV4dCwgbW9kZSwgc3RhdGUsIGYs
IGxpbmVDbGFzc2VzLCBmb3JjZVRvRW5kKSB7CiAgICAgdmFyIGZsYXR0ZW5TcGFucyA9IG1vZGUu
ZmxhdHRlblNwYW5zOwogICAgIGlmIChmbGF0dGVuU3BhbnMgPT0gbnVsbCkgZmxhdHRlblNwYW5z
ID0gY20ub3B0aW9ucy5mbGF0dGVuU3BhbnM7CiAgICAgdmFyIGN1clN0YXJ0ID0gMCwgY3VyU3R5
bGUgPSBudWxsOwogICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKHRleHQsIGNtLm9w
dGlvbnMudGFiU2l6ZSksIHN0eWxlOworICAgIHZhciBpbm5lciA9IGNtLm9wdGlvbnMuYWRkTW9k
ZUNsYXNzICYmIFtudWxsXTsKICAgICBpZiAodGV4dCA9PSAiIikgZXh0cmFjdExpbmVDbGFzc2Vz
KGNhbGxCbGFua0xpbmUobW9kZSwgc3RhdGUpLCBsaW5lQ2xhc3Nlcyk7CiAgICAgd2hpbGUgKCFz
dHJlYW0uZW9sKCkpIHsKICAgICAgIGlmIChzdHJlYW0ucG9zID4gY20ub3B0aW9ucy5tYXhIaWdo
bGlnaHRMZW5ndGgpIHsKQEAgLTU2MzcsMTUgKzY3NDYsMTggQEAKICAgICAgICAgc3RyZWFtLnBv
cyA9IHRleHQubGVuZ3RoOwogICAgICAgICBzdHlsZSA9IG51bGw7CiAgICAgICB9IGVsc2Ugewot
ICAgICAgICBzdHlsZSA9IGV4dHJhY3RMaW5lQ2xhc3NlcyhyZWFkVG9rZW4obW9kZSwgc3RyZWFt
LCBzdGF0ZSksIGxpbmVDbGFzc2VzKTsKKyAgICAgICAgc3R5bGUgPSBleHRyYWN0TGluZUNsYXNz
ZXMocmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgc3RhdGUsIGlubmVyKSwgbGluZUNsYXNzZXMpOwog
ICAgICAgfQotICAgICAgaWYgKGNtLm9wdGlvbnMuYWRkTW9kZUNsYXNzKSB7Ci0gICAgICAgIHZh
ciBtTmFtZSA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKG1vZGUsIHN0YXRlKS5tb2RlLm5hbWU7Cisg
ICAgICBpZiAoaW5uZXIpIHsKKyAgICAgICAgdmFyIG1OYW1lID0gaW5uZXJbMF0ubmFtZTsKICAg
ICAgICAgaWYgKG1OYW1lKSBzdHlsZSA9ICJtLSIgKyAoc3R5bGUgPyBtTmFtZSArICIgIiArIHN0
eWxlIDogbU5hbWUpOwogICAgICAgfQogICAgICAgaWYgKCFmbGF0dGVuU3BhbnMgfHwgY3VyU3R5
bGUgIT0gc3R5bGUpIHsKLSAgICAgICAgaWYgKGN1clN0YXJ0IDwgc3RyZWFtLnN0YXJ0KSBmKHN0
cmVhbS5zdGFydCwgY3VyU3R5bGUpOwotICAgICAgICBjdXJTdGFydCA9IHN0cmVhbS5zdGFydDsg
Y3VyU3R5bGUgPSBzdHlsZTsKKyAgICAgICAgd2hpbGUgKGN1clN0YXJ0IDwgc3RyZWFtLnN0YXJ0
KSB7CisgICAgICAgICAgY3VyU3RhcnQgPSBNYXRoLm1pbihzdHJlYW0uc3RhcnQsIGN1clN0YXJ0
ICsgNTAwMDApOworICAgICAgICAgIGYoY3VyU3RhcnQsIGN1clN0eWxlKTsKKyAgICAgICAgfQor
ICAgICAgICBjdXJTdHlsZSA9IHN0eWxlOwogICAgICAgfQogICAgICAgc3RyZWFtLnN0YXJ0ID0g
c3RyZWFtLnBvczsKICAgICB9CkBAIC01Njk5LDEyICs2ODExLDEzIEBACiAgICAgcmV0dXJuIHtz
dHlsZXM6IHN0LCBjbGFzc2VzOiBsaW5lQ2xhc3Nlcy5iZ0NsYXNzIHx8IGxpbmVDbGFzc2VzLnRl
eHRDbGFzcyA/IGxpbmVDbGFzc2VzIDogbnVsbH07CiAgIH0KIAotICBmdW5jdGlvbiBnZXRMaW5l
U3R5bGVzKGNtLCBsaW5lKSB7CisgIGZ1bmN0aW9uIGdldExpbmVTdHlsZXMoY20sIGxpbmUsIHVw
ZGF0ZUZyb250aWVyKSB7CiAgICAgaWYgKCFsaW5lLnN0eWxlcyB8fCBsaW5lLnN0eWxlc1swXSAh
PSBjbS5zdGF0ZS5tb2RlR2VuKSB7CiAgICAgICB2YXIgcmVzdWx0ID0gaGlnaGxpZ2h0TGluZShj
bSwgbGluZSwgbGluZS5zdGF0ZUFmdGVyID0gZ2V0U3RhdGVCZWZvcmUoY20sIGxpbmVObyhsaW5l
KSkpOwogICAgICAgbGluZS5zdHlsZXMgPSByZXN1bHQuc3R5bGVzOwogICAgICAgaWYgKHJlc3Vs
dC5jbGFzc2VzKSBsaW5lLnN0eWxlQ2xhc3NlcyA9IHJlc3VsdC5jbGFzc2VzOwogICAgICAgZWxz
ZSBpZiAobGluZS5zdHlsZUNsYXNzZXMpIGxpbmUuc3R5bGVDbGFzc2VzID0gbnVsbDsKKyAgICAg
IGlmICh1cGRhdGVGcm9udGllciA9PT0gY20uZG9jLmZyb250aWVyKSBjbS5kb2MuZnJvbnRpZXIr
KzsKICAgICB9CiAgICAgcmV0dXJuIGxpbmUuc3R5bGVzOwogICB9CkBAIC01NzQ0LDcgKzY4NTcs
OSBAQAogICAgIC8vIGlzIG5lZWRlZCBvbiBXZWJraXQgdG8gYmUgYWJsZSB0byBnZXQgbGluZS1s
ZXZlbCBib3VuZGluZwogICAgIC8vIHJlY3RhbmdsZXMgZm9yIGl0IChpbiBtZWFzdXJlQ2hhciku
CiAgICAgdmFyIGNvbnRlbnQgPSBlbHQoInNwYW4iLCBudWxsLCBudWxsLCB3ZWJraXQgPyAicGFk
ZGluZy1yaWdodDogLjFweCIgOiBudWxsKTsKLSAgICB2YXIgYnVpbGRlciA9IHtwcmU6IGVsdCgi
cHJlIiwgW2NvbnRlbnRdKSwgY29udGVudDogY29udGVudCwgY29sOiAwLCBwb3M6IDAsIGNtOiBj
bX07CisgICAgdmFyIGJ1aWxkZXIgPSB7cHJlOiBlbHQoInByZSIsIFtjb250ZW50XSwgIkNvZGVN
aXJyb3ItbGluZSIpLCBjb250ZW50OiBjb250ZW50LAorICAgICAgICAgICAgICAgICAgIGNvbDog
MCwgcG9zOiAwLCBjbTogY20sCisgICAgICAgICAgICAgICAgICAgc3BsaXRTcGFjZXM6IChpZSB8
fCB3ZWJraXQpICYmIGNtLmdldE9wdGlvbigibGluZVdyYXBwaW5nIil9OwogICAgIGxpbmVWaWV3
Lm1lYXN1cmUgPSB7fTsKIAogICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgbG9naWNhbCBsaW5lcyB0
aGF0IG1ha2UgdXAgdGhpcyB2aXN1YWwgbGluZS4KQEAgLTU3NTQsMTIgKzY4NjksMTEgQEAKICAg
ICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWlsZFRva2VuOwogICAgICAgLy8gT3B0aW9uYWxseSB3
aXJlIGluIHNvbWUgaGFja3MgaW50byB0aGUgdG9rZW4tcmVuZGVyaW5nCiAgICAgICAvLyBhbGdv
cml0aG0sIHRvIGRlYWwgd2l0aCBicm93c2VyIHF1aXJrcy4KLSAgICAgIGlmICgoaWUgfHwgd2Vi
a2l0KSAmJiBjbS5nZXRPcHRpb24oImxpbmVXcmFwcGluZyIpKQotICAgICAgICBidWlsZGVyLmFk
ZFRva2VuID0gYnVpbGRUb2tlblNwbGl0U3BhY2VzKGJ1aWxkZXIuYWRkVG9rZW4pOwogICAgICAg
aWYgKGhhc0JhZEJpZGlSZWN0cyhjbS5kaXNwbGF5Lm1lYXN1cmUpICYmIChvcmRlciA9IGdldE9y
ZGVyKGxpbmUpKSkKICAgICAgICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW5CYWRCaWRp
KGJ1aWxkZXIuYWRkVG9rZW4sIG9yZGVyKTsKICAgICAgIGJ1aWxkZXIubWFwID0gW107Ci0gICAg
ICBpbnNlcnRMaW5lQ29udGVudChsaW5lLCBidWlsZGVyLCBnZXRMaW5lU3R5bGVzKGNtLCBsaW5l
KSk7CisgICAgICB2YXIgYWxsb3dGcm9udGllclVwZGF0ZSA9IGxpbmVWaWV3ICE9IGNtLmRpc3Bs
YXkuZXh0ZXJuYWxNZWFzdXJlZCAmJiBsaW5lTm8obGluZSk7CisgICAgICBpbnNlcnRMaW5lQ29u
dGVudChsaW5lLCBidWlsZGVyLCBnZXRMaW5lU3R5bGVzKGNtLCBsaW5lLCBhbGxvd0Zyb250aWVy
VXBkYXRlKSk7CiAgICAgICBpZiAobGluZS5zdHlsZUNsYXNzZXMpIHsKICAgICAgICAgaWYgKGxp
bmUuc3R5bGVDbGFzc2VzLmJnQ2xhc3MpCiAgICAgICAgICAgYnVpbGRlci5iZ0NsYXNzID0gam9p
bkNsYXNzZXMobGluZS5zdHlsZUNsYXNzZXMuYmdDbGFzcywgYnVpbGRlci5iZ0NsYXNzIHx8ICIi
KTsKQEAgLTU3ODEsMjggKzY4OTUsMzUgQEAKICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBTZWUg
aXNzdWUgIzI5MDEKKyAgICBpZiAod2Via2l0ICYmIC9cYmNtLXRhYlxiLy50ZXN0KGJ1aWxkZXIu
Y29udGVudC5sYXN0Q2hpbGQuY2xhc3NOYW1lKSkKKyAgICAgIGJ1aWxkZXIuY29udGVudC5jbGFz
c05hbWUgPSAiY20tdGFiLXdyYXAtaGFjayI7CisKICAgICBzaWduYWwoY20sICJyZW5kZXJMaW5l
IiwgY20sIGxpbmVWaWV3LmxpbmUsIGJ1aWxkZXIucHJlKTsKICAgICBpZiAoYnVpbGRlci5wcmUu
Y2xhc3NOYW1lKQogICAgICAgYnVpbGRlci50ZXh0Q2xhc3MgPSBqb2luQ2xhc3NlcyhidWlsZGVy
LnByZS5jbGFzc05hbWUsIGJ1aWxkZXIudGV4dENsYXNzIHx8ICIiKTsKKwogICAgIHJldHVybiBi
dWlsZGVyOwogICB9CiAKICAgZnVuY3Rpb24gZGVmYXVsdFNwZWNpYWxDaGFyUGxhY2Vob2xkZXIo
Y2gpIHsKICAgICB2YXIgdG9rZW4gPSBlbHQoInNwYW4iLCAiXHUyMDIyIiwgImNtLWludmFsaWRj
aGFyIik7CiAgICAgdG9rZW4udGl0bGUgPSAiXFx1IiArIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJp
bmcoMTYpOworICAgIHRva2VuLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIHRva2VuLnRpdGxl
KTsKICAgICByZXR1cm4gdG9rZW47CiAgIH0KIAogICAvLyBCdWlsZCB1cCB0aGUgRE9NIHJlcHJl
c2VudGF0aW9uIGZvciBhIHNpbmdsZSB0b2tlbiwgYW5kIGFkZCBpdCB0bwogICAvLyB0aGUgbGlu
ZSBtYXAuIFRha2VzIGNhcmUgdG8gcmVuZGVyIHNwZWNpYWwgY2hhcmFjdGVycyBzZXBhcmF0ZWx5
LgotICBmdW5jdGlvbiBidWlsZFRva2VuKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxl
LCBlbmRTdHlsZSwgdGl0bGUpIHsKKyAgZnVuY3Rpb24gYnVpbGRUb2tlbihidWlsZGVyLCB0ZXh0
LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxlLCBjc3MpIHsKICAgICBpZiAoIXRl
eHQpIHJldHVybjsKLSAgICB2YXIgc3BlY2lhbCA9IGJ1aWxkZXIuY20ub3B0aW9ucy5zcGVjaWFs
Q2hhcnMsIG11c3RXcmFwID0gZmFsc2U7CisgICAgdmFyIGRpc3BsYXlUZXh0ID0gYnVpbGRlci5z
cGxpdFNwYWNlcyA/IHRleHQucmVwbGFjZSgvIHszLH0vZywgc3BsaXRTcGFjZXMpIDogdGV4dDsK
KyAgICB2YXIgc3BlY2lhbCA9IGJ1aWxkZXIuY20uc3RhdGUuc3BlY2lhbENoYXJzLCBtdXN0V3Jh
cCA9IGZhbHNlOwogICAgIGlmICghc3BlY2lhbC50ZXN0KHRleHQpKSB7CiAgICAgICBidWlsZGVy
LmNvbCArPSB0ZXh0Lmxlbmd0aDsKLSAgICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUodGV4dCk7CisgICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKGRpc3BsYXlUZXh0KTsKICAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1
aWxkZXIucG9zICsgdGV4dC5sZW5ndGgsIGNvbnRlbnQpOwotICAgICAgaWYgKGllX3VwdG84KSBt
dXN0V3JhcCA9IHRydWU7CisgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkpIG11c3RXcmFw
ID0gdHJ1ZTsKICAgICAgIGJ1aWxkZXIucG9zICs9IHRleHQubGVuZ3RoOwogICAgIH0gZWxzZSB7
CiAgICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwg
cG9zID0gMDsKQEAgLTU4MTEsOCArNjkzMiw4IEBACiAgICAgICAgIHZhciBtID0gc3BlY2lhbC5l
eGVjKHRleHQpOwogICAgICAgICB2YXIgc2tpcHBlZCA9IG0gPyBtLmluZGV4IC0gcG9zIDogdGV4
dC5sZW5ndGggLSBwb3M7CiAgICAgICAgIGlmIChza2lwcGVkKSB7Ci0gICAgICAgICAgdmFyIHR4
dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQuc2xpY2UocG9zLCBwb3MgKyBza2lwcGVk
KSk7Ci0gICAgICAgICAgaWYgKGllX3VwdG84KSBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3Bh
biIsIFt0eHRdKSk7CisgICAgICAgICAgdmFyIHR4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KGRpc3BsYXlUZXh0LnNsaWNlKHBvcywgcG9zICsgc2tpcHBlZCkpOworICAgICAgICAgIGlmIChp
ZSAmJiBpZV92ZXJzaW9uIDwgOSkgY29udGVudC5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBbdHh0
XSkpOwogICAgICAgICAgIGVsc2UgY29udGVudC5hcHBlbmRDaGlsZCh0eHQpOwogICAgICAgICAg
IGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgc2tpcHBlZCwgdHh0
KTsKICAgICAgICAgICBidWlsZGVyLmNvbCArPSBza2lwcGVkOwpAQCAtNTgyMywxMCArNjk0NCwx
NyBAQAogICAgICAgICBpZiAobVswXSA9PSAiXHQiKSB7CiAgICAgICAgICAgdmFyIHRhYlNpemUg
PSBidWlsZGVyLmNtLm9wdGlvbnMudGFiU2l6ZSwgdGFiV2lkdGggPSB0YWJTaXplIC0gYnVpbGRl
ci5jb2wgJSB0YWJTaXplOwogICAgICAgICAgIHZhciB0eHQgPSBjb250ZW50LmFwcGVuZENoaWxk
KGVsdCgic3BhbiIsIHNwYWNlU3RyKHRhYldpZHRoKSwgImNtLXRhYiIpKTsKKyAgICAgICAgICB0
eHQuc2V0QXR0cmlidXRlKCJyb2xlIiwgInByZXNlbnRhdGlvbiIpOworICAgICAgICAgIHR4dC5z
ZXRBdHRyaWJ1dGUoImNtLXRleHQiLCAiXHQiKTsKICAgICAgICAgICBidWlsZGVyLmNvbCArPSB0
YWJXaWR0aDsKKyAgICAgICAgfSBlbHNlIGlmIChtWzBdID09ICJcciIgfHwgbVswXSA9PSAiXG4i
KSB7CisgICAgICAgICAgdmFyIHR4dCA9IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwg
bVswXSA9PSAiXHIiID8gIuKQjSIgOiAi4pCkIiwgImNtLWludmFsaWRjaGFyIikpOworICAgICAg
ICAgIHR4dC5zZXRBdHRyaWJ1dGUoImNtLXRleHQiLCBtWzBdKTsKKyAgICAgICAgICBidWlsZGVy
LmNvbCArPSAxOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIHZhciB0eHQgPSBidWlsZGVy
LmNtLm9wdGlvbnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcihtWzBdKTsKLSAgICAgICAgICBpZiAo
aWVfdXB0bzgpIGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgW3R4dF0pKTsKKyAgICAg
ICAgICB0eHQuc2V0QXR0cmlidXRlKCJjbS10ZXh0IiwgbVswXSk7CisgICAgICAgICAgaWYgKGll
ICYmIGllX3ZlcnNpb24gPCA5KSBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIFt0eHRd
KSk7CiAgICAgICAgICAgZWxzZSBjb250ZW50LmFwcGVuZENoaWxkKHR4dCk7CiAgICAgICAgICAg
YnVpbGRlci5jb2wgKz0gMTsKICAgICAgICAgfQpAQCAtNTgzNCwzMyArNjk2MiwyOCBAQAogICAg
ICAgICBidWlsZGVyLnBvcysrOwogICAgICAgfQogICAgIH0KLSAgICBpZiAoc3R5bGUgfHwgc3Rh
cnRTdHlsZSB8fCBlbmRTdHlsZSB8fCBtdXN0V3JhcCkgeworICAgIGlmIChzdHlsZSB8fCBzdGFy
dFN0eWxlIHx8IGVuZFN0eWxlIHx8IG11c3RXcmFwIHx8IGNzcykgewogICAgICAgdmFyIGZ1bGxT
dHlsZSA9IHN0eWxlIHx8ICIiOwogICAgICAgaWYgKHN0YXJ0U3R5bGUpIGZ1bGxTdHlsZSArPSBz
dGFydFN0eWxlOwogICAgICAgaWYgKGVuZFN0eWxlKSBmdWxsU3R5bGUgKz0gZW5kU3R5bGU7Ci0g
ICAgICB2YXIgdG9rZW4gPSBlbHQoInNwYW4iLCBbY29udGVudF0sIGZ1bGxTdHlsZSk7CisgICAg
ICB2YXIgdG9rZW4gPSBlbHQoInNwYW4iLCBbY29udGVudF0sIGZ1bGxTdHlsZSwgY3NzKTsKICAg
ICAgIGlmICh0aXRsZSkgdG9rZW4udGl0bGUgPSB0aXRsZTsKICAgICAgIHJldHVybiBidWlsZGVy
LmNvbnRlbnQuYXBwZW5kQ2hpbGQodG9rZW4pOwogICAgIH0KICAgICBidWlsZGVyLmNvbnRlbnQu
YXBwZW5kQ2hpbGQoY29udGVudCk7CiAgIH0KIAotICBmdW5jdGlvbiBidWlsZFRva2VuU3BsaXRT
cGFjZXMoaW5uZXIpIHsKLSAgICBmdW5jdGlvbiBzcGxpdChvbGQpIHsKLSAgICAgIHZhciBvdXQg
PSAiICI7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9sZC5sZW5ndGggLSAyOyArK2kpIG91
dCArPSBpICUgMiA/ICIgIiA6ICJcdTAwYTAiOwotICAgICAgb3V0ICs9ICIgIjsKLSAgICAgIHJl
dHVybiBvdXQ7Ci0gICAgfQotICAgIHJldHVybiBmdW5jdGlvbihidWlsZGVyLCB0ZXh0LCBzdHls
ZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxlKSB7Ci0gICAgICBpbm5lcihidWlsZGVyLCB0
ZXh0LnJlcGxhY2UoLyB7Myx9L2csIHNwbGl0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxl
LCB0aXRsZSk7Ci0gICAgfTsKKyAgZnVuY3Rpb24gc3BsaXRTcGFjZXMob2xkKSB7CisgICAgdmFy
IG91dCA9ICIgIjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9sZC5sZW5ndGggLSAyOyArK2kp
IG91dCArPSBpICUgMiA/ICIgIiA6ICJcdTAwYTAiOworICAgIG91dCArPSAiICI7CisgICAgcmV0
dXJuIG91dDsKICAgfQogCiAgIC8vIFdvcmsgYXJvdW5kIG5vbnNlbnNlIGRpbWVuc2lvbnMgYmVp
bmcgcmVwb3J0ZWQgZm9yIHN0cmV0Y2hlcyBvZgogICAvLyByaWdodC10by1sZWZ0IHRleHQuCiAg
IGZ1bmN0aW9uIGJ1aWxkVG9rZW5CYWRCaWRpKGlubmVyLCBvcmRlcikgewotICAgIHJldHVybiBm
dW5jdGlvbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxl
KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxl
LCBlbmRTdHlsZSwgdGl0bGUsIGNzcykgewogICAgICAgc3R5bGUgPSBzdHlsZSA/IHN0eWxlICsg
IiBjbS1mb3JjZS1ib3JkZXIiIDogImNtLWZvcmNlLWJvcmRlciI7CiAgICAgICB2YXIgc3RhcnQg
PSBidWlsZGVyLnBvcywgZW5kID0gc3RhcnQgKyB0ZXh0Lmxlbmd0aDsKICAgICAgIGZvciAoOzsp
IHsKQEAgLTU4NjksOCArNjk5Miw4IEBACiAgICAgICAgICAgdmFyIHBhcnQgPSBvcmRlcltpXTsK
ICAgICAgICAgICBpZiAocGFydC50byA+IHN0YXJ0ICYmIHBhcnQuZnJvbSA8PSBzdGFydCkgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHBhcnQudG8gPj0gZW5kKSByZXR1cm4gaW5uZXIo
YnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSk7Ci0gICAg
ICAgIGlubmVyKGJ1aWxkZXIsIHRleHQuc2xpY2UoMCwgcGFydC50byAtIHN0YXJ0KSwgc3R5bGUs
IHN0YXJ0U3R5bGUsIG51bGwsIHRpdGxlKTsKKyAgICAgICAgaWYgKHBhcnQudG8gPj0gZW5kKSBy
ZXR1cm4gaW5uZXIoYnVpbGRlciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0
aXRsZSwgY3NzKTsKKyAgICAgICAgaW5uZXIoYnVpbGRlciwgdGV4dC5zbGljZSgwLCBwYXJ0LnRv
IC0gc3RhcnQpLCBzdHlsZSwgc3RhcnRTdHlsZSwgbnVsbCwgdGl0bGUsIGNzcyk7CiAgICAgICAg
IHN0YXJ0U3R5bGUgPSBudWxsOwogICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZShwYXJ0LnRvIC0g
c3RhcnQpOwogICAgICAgICBzdGFydCA9IHBhcnQudG87CkBAIC01ODgwLDggKzcwMDMsMTQgQEAK
IAogICBmdW5jdGlvbiBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgc2l6ZSwgbWFya2VyLCBp
Z25vcmVXaWRnZXQpIHsKICAgICB2YXIgd2lkZ2V0ID0gIWlnbm9yZVdpZGdldCAmJiBtYXJrZXIu
d2lkZ2V0Tm9kZTsKKyAgICBpZiAod2lkZ2V0KSBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9z
LCBidWlsZGVyLnBvcyArIHNpemUsIHdpZGdldCk7CisgICAgaWYgKCFpZ25vcmVXaWRnZXQgJiYg
YnVpbGRlci5jbS5kaXNwbGF5LmlucHV0Lm5lZWRzQ29udGVudEF0dHJpYnV0ZSkgeworICAgICAg
aWYgKCF3aWRnZXQpCisgICAgICAgIHdpZGdldCA9IGJ1aWxkZXIuY29udGVudC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIikpOworICAgICAgd2lkZ2V0LnNldEF0dHJp
YnV0ZSgiY20tbWFya2VyIiwgbWFya2VyLmlkKTsKKyAgICB9CiAgICAgaWYgKHdpZGdldCkgewot
ICAgICAgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyBzaXplLCB3
aWRnZXQpOworICAgICAgYnVpbGRlci5jbS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUod2lk
Z2V0KTsKICAgICAgIGJ1aWxkZXIuY29udGVudC5hcHBlbmRDaGlsZCh3aWRnZXQpOwogICAgIH0K
ICAgICBidWlsZGVyLnBvcyArPSBzaXplOwpAQCAtNTg5NywxOCArNzAyNiwyNCBAQAogICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIHZhciBsZW4gPSBhbGxUZXh0Lmxlbmd0aCwgcG9zID0gMCwg
aSA9IDEsIHRleHQgPSAiIiwgc3R5bGU7CisgICAgdmFyIGxlbiA9IGFsbFRleHQubGVuZ3RoLCBw
b3MgPSAwLCBpID0gMSwgdGV4dCA9ICIiLCBzdHlsZSwgY3NzOwogICAgIHZhciBuZXh0Q2hhbmdl
ID0gMCwgc3BhblN0eWxlLCBzcGFuRW5kU3R5bGUsIHNwYW5TdGFydFN0eWxlLCB0aXRsZSwgY29s
bGFwc2VkOwogICAgIGZvciAoOzspIHsKICAgICAgIGlmIChuZXh0Q2hhbmdlID09IHBvcykgeyAv
LyBVcGRhdGUgY3VycmVudCBtYXJrZXIgc2V0Ci0gICAgICAgIHNwYW5TdHlsZSA9IHNwYW5FbmRT
dHlsZSA9IHNwYW5TdGFydFN0eWxlID0gdGl0bGUgPSAiIjsKKyAgICAgICAgc3BhblN0eWxlID0g
c3BhbkVuZFN0eWxlID0gc3BhblN0YXJ0U3R5bGUgPSB0aXRsZSA9IGNzcyA9ICIiOwogICAgICAg
ICBjb2xsYXBzZWQgPSBudWxsOyBuZXh0Q2hhbmdlID0gSW5maW5pdHk7CiAgICAgICAgIHZhciBm
b3VuZEJvb2ttYXJrcyA9IFtdOwogICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNwYW5zLmxl
bmd0aDsgKytqKSB7CiAgICAgICAgICAgdmFyIHNwID0gc3BhbnNbal0sIG0gPSBzcC5tYXJrZXI7
Ci0gICAgICAgICAgaWYgKHNwLmZyb20gPD0gcG9zICYmIChzcC50byA9PSBudWxsIHx8IHNwLnRv
ID4gcG9zKSkgewotICAgICAgICAgICAgaWYgKHNwLnRvICE9IG51bGwgJiYgbmV4dENoYW5nZSA+
IHNwLnRvKSB7IG5leHRDaGFuZ2UgPSBzcC50bzsgc3BhbkVuZFN0eWxlID0gIiI7IH0KKyAgICAg
ICAgICBpZiAobS50eXBlID09ICJib29rbWFyayIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS53aWRn
ZXROb2RlKSB7CisgICAgICAgICAgICBmb3VuZEJvb2ttYXJrcy5wdXNoKG0pOworICAgICAgICAg
IH0gZWxzZSBpZiAoc3AuZnJvbSA8PSBwb3MgJiYgKHNwLnRvID09IG51bGwgfHwgc3AudG8gPiBw
b3MgfHwgbS5jb2xsYXBzZWQgJiYgc3AudG8gPT0gcG9zICYmIHNwLmZyb20gPT0gcG9zKSkgewor
ICAgICAgICAgICAgaWYgKHNwLnRvICE9IG51bGwgJiYgc3AudG8gIT0gcG9zICYmIG5leHRDaGFu
Z2UgPiBzcC50bykgeworICAgICAgICAgICAgICBuZXh0Q2hhbmdlID0gc3AudG87CisgICAgICAg
ICAgICAgIHNwYW5FbmRTdHlsZSA9ICIiOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYg
KG0uY2xhc3NOYW1lKSBzcGFuU3R5bGUgKz0gIiAiICsgbS5jbGFzc05hbWU7CisgICAgICAgICAg
ICBpZiAobS5jc3MpIGNzcyA9IG0uY3NzOwogICAgICAgICAgICAgaWYgKG0uc3RhcnRTdHlsZSAm
JiBzcC5mcm9tID09IHBvcykgc3BhblN0YXJ0U3R5bGUgKz0gIiAiICsgbS5zdGFydFN0eWxlOwog
ICAgICAgICAgICAgaWYgKG0uZW5kU3R5bGUgJiYgc3AudG8gPT0gbmV4dENoYW5nZSkgc3BhbkVu
ZFN0eWxlICs9ICIgIiArIG0uZW5kU3R5bGU7CiAgICAgICAgICAgICBpZiAobS50aXRsZSAmJiAh
dGl0bGUpIHRpdGxlID0gbS50aXRsZTsKQEAgLTU5MTcsMTIgKzcwNTIsMTIgQEAKICAgICAgICAg
ICB9IGVsc2UgaWYgKHNwLmZyb20gPiBwb3MgJiYgbmV4dENoYW5nZSA+IHNwLmZyb20pIHsKICAg
ICAgICAgICAgIG5leHRDaGFuZ2UgPSBzcC5mcm9tOwogICAgICAgICAgIH0KLSAgICAgICAgICBp
ZiAobS50eXBlID09ICJib29rbWFyayIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS53aWRnZXROb2Rl
KSBmb3VuZEJvb2ttYXJrcy5wdXNoKG0pOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb2xsYXBz
ZWQgJiYgKGNvbGxhcHNlZC5mcm9tIHx8IDApID09IHBvcykgewogICAgICAgICAgIGJ1aWxkQ29s
bGFwc2VkU3BhbihidWlsZGVyLCAoY29sbGFwc2VkLnRvID09IG51bGwgPyBsZW4gKyAxIDogY29s
bGFwc2VkLnRvKSAtIHBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2Vk
Lm1hcmtlciwgY29sbGFwc2VkLmZyb20gPT0gbnVsbCk7CiAgICAgICAgICAgaWYgKGNvbGxhcHNl
ZC50byA9PSBudWxsKSByZXR1cm47CisgICAgICAgICAgaWYgKGNvbGxhcHNlZC50byA9PSBwb3Mp
IGNvbGxhcHNlZCA9IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmICghY29sbGFwc2VkICYm
IGZvdW5kQm9va21hcmtzLmxlbmd0aCkgZm9yICh2YXIgaiA9IDA7IGogPCBmb3VuZEJvb2ttYXJr
cy5sZW5ndGg7ICsraikKICAgICAgICAgICBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgMCwg
Zm91bmRCb29rbWFya3Nbal0pOwpAQCAtNTkzNiw3ICs3MDcxLDcgQEAKICAgICAgICAgICBpZiAo
IWNvbGxhcHNlZCkgewogICAgICAgICAgICAgdmFyIHRva2VuVGV4dCA9IGVuZCA+IHVwdG8gPyB0
ZXh0LnNsaWNlKDAsIHVwdG8gLSBwb3MpIDogdGV4dDsKICAgICAgICAgICAgIGJ1aWxkZXIuYWRk
VG9rZW4oYnVpbGRlciwgdG9rZW5UZXh0LCBzdHlsZSA/IHN0eWxlICsgc3BhblN0eWxlIDogc3Bh
blN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuU3RhcnRTdHlsZSwgcG9z
ICsgdG9rZW5UZXh0Lmxlbmd0aCA9PSBuZXh0Q2hhbmdlID8gc3BhbkVuZFN0eWxlIDogIiIsIHRp
dGxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhblN0YXJ0U3R5bGUsIHBvcyAr
IHRva2VuVGV4dC5sZW5ndGggPT0gbmV4dENoYW5nZSA/IHNwYW5FbmRTdHlsZSA6ICIiLCB0aXRs
ZSwgY3NzKTsKICAgICAgICAgICB9CiAgICAgICAgICAgaWYgKGVuZCA+PSB1cHRvKSB7dGV4dCA9
IHRleHQuc2xpY2UodXB0byAtIHBvcyk7IHBvcyA9IHVwdG87IGJyZWFrO30KICAgICAgICAgICBw
b3MgPSBlbmQ7CkBAIC01OTY1LDE3ICs3MTAwLDI0IEBACiAgICAgICB1cGRhdGVMaW5lKGxpbmUs
IHRleHQsIHNwYW5zLCBlc3RpbWF0ZUhlaWdodCk7CiAgICAgICBzaWduYWxMYXRlcihsaW5lLCAi
Y2hhbmdlIiwgbGluZSwgY2hhbmdlKTsKICAgICB9CisgICAgZnVuY3Rpb24gbGluZXNGb3Ioc3Rh
cnQsIGVuZCkgeworICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0LCByZXN1bHQgPSBbXTsgaSA8IGVu
ZDsgKytpKQorICAgICAgICByZXN1bHQucHVzaChuZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0Zvcihp
KSwgZXN0aW1hdGVIZWlnaHQpKTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCiAgICAg
dmFyIGZyb20gPSBjaGFuZ2UuZnJvbSwgdG8gPSBjaGFuZ2UudG8sIHRleHQgPSBjaGFuZ2UudGV4
dDsKICAgICB2YXIgZmlyc3RMaW5lID0gZ2V0TGluZShkb2MsIGZyb20ubGluZSksIGxhc3RMaW5l
ID0gZ2V0TGluZShkb2MsIHRvLmxpbmUpOwogICAgIHZhciBsYXN0VGV4dCA9IGxzdCh0ZXh0KSwg
bGFzdFNwYW5zID0gc3BhbnNGb3IodGV4dC5sZW5ndGggLSAxKSwgbmxpbmVzID0gdG8ubGluZSAt
IGZyb20ubGluZTsKIAogICAgIC8vIEFkanVzdCB0aGUgbGluZSBzdHJ1Y3R1cmUKLSAgICBpZiAo
aXNXaG9sZUxpbmVVcGRhdGUoZG9jLCBjaGFuZ2UpKSB7CisgICAgaWYgKGNoYW5nZS5mdWxsKSB7
CisgICAgICBkb2MuaW5zZXJ0KDAsIGxpbmVzRm9yKDAsIHRleHQubGVuZ3RoKSk7CisgICAgICBk
b2MucmVtb3ZlKHRleHQubGVuZ3RoLCBkb2Muc2l6ZSAtIHRleHQubGVuZ3RoKTsKKyAgICB9IGVs
c2UgaWYgKGlzV2hvbGVMaW5lVXBkYXRlKGRvYywgY2hhbmdlKSkgewogICAgICAgLy8gVGhpcyBp
cyBhIHdob2xlLWxpbmUgcmVwbGFjZS4gVHJlYXRlZCBzcGVjaWFsbHkgdG8gbWFrZQogICAgICAg
Ly8gc3VyZSBsaW5lIG9iamVjdHMgbW92ZSB0aGUgd2F5IHRoZXkgYXJlIHN1cHBvc2VkIHRvLgot
ICAgICAgZm9yICh2YXIgaSA9IDAsIGFkZGVkID0gW107IGkgPCB0ZXh0Lmxlbmd0aCAtIDE7ICsr
aSkKLSAgICAgICAgYWRkZWQucHVzaChuZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0
aW1hdGVIZWlnaHQpKTsKKyAgICAgIHZhciBhZGRlZCA9IGxpbmVzRm9yKDAsIHRleHQubGVuZ3Ro
IC0gMSk7CiAgICAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RMaW5lLnRleHQsIGxhc3RTcGFucyk7
CiAgICAgICBpZiAobmxpbmVzKSBkb2MucmVtb3ZlKGZyb20ubGluZSwgbmxpbmVzKTsKICAgICAg
IGlmIChhZGRlZC5sZW5ndGgpIGRvYy5pbnNlcnQoZnJvbS5saW5lLCBhZGRlZCk7CkBAIC01OTgz
LDggKzcxMjUsNyBAQAogICAgICAgaWYgKHRleHQubGVuZ3RoID09IDEpIHsKICAgICAgICAgdXBk
YXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyBsYXN0VGV4
dCArIGZpcnN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zKTsKICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGZvciAodmFyIGFkZGVkID0gW10sIGkgPSAxOyBpIDwgdGV4dC5sZW5ndGgg
LSAxOyArK2kpCi0gICAgICAgICAgYWRkZWQucHVzaChuZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0Zv
cihpKSwgZXN0aW1hdGVIZWlnaHQpKTsKKyAgICAgICAgdmFyIGFkZGVkID0gbGluZXNGb3IoMSwg
dGV4dC5sZW5ndGggLSAxKTsKICAgICAgICAgYWRkZWQucHVzaChuZXcgTGluZShsYXN0VGV4dCAr
IGZpcnN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkp
OwogICAgICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9t
LmNoKSArIHRleHRbMF0sIHNwYW5zRm9yKDApKTsKICAgICAgICAgZG9jLmluc2VydChmcm9tLmxp
bmUgKyAxLCBhZGRlZCk7CkBAIC01OTk1LDggKzcxMzYsNyBAQAogICAgIH0gZWxzZSB7CiAgICAg
ICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIHRl
eHRbMF0sIHNwYW5zRm9yKDApKTsKICAgICAgIHVwZGF0ZShsYXN0TGluZSwgbGFzdFRleHQgKyBs
YXN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zKTsKLSAgICAgIGZvciAodmFyIGkg
PSAxLCBhZGRlZCA9IFtdOyBpIDwgdGV4dC5sZW5ndGggLSAxOyArK2kpCi0gICAgICAgIGFkZGVk
LnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7Cisg
ICAgICB2YXIgYWRkZWQgPSBsaW5lc0ZvcigxLCB0ZXh0Lmxlbmd0aCAtIDEpOwogICAgICAgaWYg
KG5saW5lcyA+IDEpIGRvYy5yZW1vdmUoZnJvbS5saW5lICsgMSwgbmxpbmVzIC0gMSk7CiAgICAg
ICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKICAgICB9CkBAIC02MTU2LDggKzcy
OTYsOCBAQAogICB9OwogCiAgIHZhciBuZXh0RG9jSWQgPSAwOwotICB2YXIgRG9jID0gQ29kZU1p
cnJvci5Eb2MgPSBmdW5jdGlvbih0ZXh0LCBtb2RlLCBmaXJzdExpbmUpIHsKLSAgICBpZiAoISh0
aGlzIGluc3RhbmNlb2YgRG9jKSkgcmV0dXJuIG5ldyBEb2ModGV4dCwgbW9kZSwgZmlyc3RMaW5l
KTsKKyAgdmFyIERvYyA9IENvZGVNaXJyb3IuRG9jID0gZnVuY3Rpb24odGV4dCwgbW9kZSwgZmly
c3RMaW5lLCBsaW5lU2VwKSB7CisgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERvYykpIHJldHVy
biBuZXcgRG9jKHRleHQsIG1vZGUsIGZpcnN0TGluZSwgbGluZVNlcCk7CiAgICAgaWYgKGZpcnN0
TGluZSA9PSBudWxsKSBmaXJzdExpbmUgPSAwOwogCiAgICAgQnJhbmNoQ2h1bmsuY2FsbCh0aGlz
LCBbbmV3IExlYWZDaHVuayhbbmV3IExpbmUoIiIsIG51bGwpXSldKTsKQEAgLTYxNzEsOCArNzMx
MSw5IEBACiAgICAgdGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkobnVsbCk7CiAgICAgdGhpcy5p
ZCA9ICsrbmV4dERvY0lkOwogICAgIHRoaXMubW9kZU9wdGlvbiA9IG1vZGU7CisgICAgdGhpcy5s
aW5lU2VwID0gbGluZVNlcDsKIAotICAgIGlmICh0eXBlb2YgdGV4dCA9PSAic3RyaW5nIikgdGV4
dCA9IHNwbGl0TGluZXModGV4dCk7CisgICAgaWYgKHR5cGVvZiB0ZXh0ID09ICJzdHJpbmciKSB0
ZXh0ID0gdGhpcy5zcGxpdExpbmVzKHRleHQpOwogICAgIHVwZGF0ZURvYyh0aGlzLCB7ZnJvbTog
c3RhcnQsIHRvOiBzdGFydCwgdGV4dDogdGV4dH0pOwogICAgIHNldFNlbGVjdGlvbih0aGlzLCBz
aW1wbGVTZWxlY3Rpb24oc3RhcnQpLCBzZWxfZG9udFNjcm9sbCk7CiAgIH07CkBAIC02MjAyLDEy
ICs3MzQzLDEyIEBACiAgICAgZ2V0VmFsdWU6IGZ1bmN0aW9uKGxpbmVTZXApIHsKICAgICAgIHZh
ciBsaW5lcyA9IGdldExpbmVzKHRoaXMsIHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNp
emUpOwogICAgICAgaWYgKGxpbmVTZXAgPT09IGZhbHNlKSByZXR1cm4gbGluZXM7Ci0gICAgICBy
ZXR1cm4gbGluZXMuam9pbihsaW5lU2VwIHx8ICJcbiIpOworICAgICAgcmV0dXJuIGxpbmVzLmpv
aW4obGluZVNlcCB8fCB0aGlzLmxpbmVTZXBhcmF0b3IoKSk7CiAgICAgfSwKICAgICBzZXRWYWx1
ZTogZG9jTWV0aG9kT3AoZnVuY3Rpb24oY29kZSkgewogICAgICAgdmFyIHRvcCA9IFBvcyh0aGlz
LmZpcnN0LCAwKSwgbGFzdCA9IHRoaXMuZmlyc3QgKyB0aGlzLnNpemUgLSAxOwogICAgICAgbWFr
ZUNoYW5nZSh0aGlzLCB7ZnJvbTogdG9wLCB0bzogUG9zKGxhc3QsIGdldExpbmUodGhpcywgbGFz
dCkudGV4dC5sZW5ndGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3BsaXRMaW5l
cyhjb2RlKSwgb3JpZ2luOiAic2V0VmFsdWUifSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0OiB0aGlzLnNwbGl0TGluZXMoY29kZSksIG9yaWdpbjogInNldFZhbHVlIiwgZnVs
bDogdHJ1ZX0sIHRydWUpOwogICAgICAgc2V0U2VsZWN0aW9uKHRoaXMsIHNpbXBsZVNlbGVjdGlv
bih0b3ApKTsKICAgICB9KSwKICAgICByZXBsYWNlUmFuZ2U6IGZ1bmN0aW9uKGNvZGUsIGZyb20s
IHRvLCBvcmlnaW4pIHsKQEAgLTYyMTgsNyArNzM1OSw3IEBACiAgICAgZ2V0UmFuZ2U6IGZ1bmN0
aW9uKGZyb20sIHRvLCBsaW5lU2VwKSB7CiAgICAgICB2YXIgbGluZXMgPSBnZXRCZXR3ZWVuKHRo
aXMsIGNsaXBQb3ModGhpcywgZnJvbSksIGNsaXBQb3ModGhpcywgdG8pKTsKICAgICAgIGlmIChs
aW5lU2VwID09PSBmYWxzZSkgcmV0dXJuIGxpbmVzOwotICAgICAgcmV0dXJuIGxpbmVzLmpvaW4o
bGluZVNlcCB8fCAiXG4iKTsKKyAgICAgIHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgdGhp
cy5saW5lU2VwYXJhdG9yKCkpOwogICAgIH0sCiAKICAgICBnZXRMaW5lOiBmdW5jdGlvbihsaW5l
KSB7dmFyIGwgPSB0aGlzLmdldExpbmVIYW5kbGUobGluZSk7IHJldHVybiBsICYmIGwudGV4dDt9
LApAQCAtNjI4NCwxMyArNzQyNSwxMyBAQAogICAgICAgICBsaW5lcyA9IGxpbmVzID8gbGluZXMu
Y29uY2F0KHNlbCkgOiBzZWw7CiAgICAgICB9CiAgICAgICBpZiAobGluZVNlcCA9PT0gZmFsc2Up
IHJldHVybiBsaW5lczsKLSAgICAgIGVsc2UgcmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCAi
XG4iKTsKKyAgICAgIGVsc2UgcmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCB0aGlzLmxpbmVT
ZXBhcmF0b3IoKSk7CiAgICAgfSwKICAgICBnZXRTZWxlY3Rpb25zOiBmdW5jdGlvbihsaW5lU2Vw
KSB7CiAgICAgICB2YXIgcGFydHMgPSBbXSwgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzOwogICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgdmFy
IHNlbCA9IGdldEJldHdlZW4odGhpcywgcmFuZ2VzW2ldLmZyb20oKSwgcmFuZ2VzW2ldLnRvKCkp
OwotICAgICAgICBpZiAobGluZVNlcCAhPT0gZmFsc2UpIHNlbCA9IHNlbC5qb2luKGxpbmVTZXAg
fHwgIlxuIik7CisgICAgICAgIGlmIChsaW5lU2VwICE9PSBmYWxzZSkgc2VsID0gc2VsLmpvaW4o
bGluZVNlcCB8fCB0aGlzLmxpbmVTZXBhcmF0b3IoKSk7CiAgICAgICAgIHBhcnRzW2ldID0gc2Vs
OwogICAgICAgfQogICAgICAgcmV0dXJuIHBhcnRzOwpAQCAtNjMwNSw3ICs3NDQ2LDcgQEAKICAg
ICAgIHZhciBjaGFuZ2VzID0gW10sIHNlbCA9IHRoaXMuc2VsOwogICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgIHZhciByYW5nZSA9IHNl
bC5yYW5nZXNbaV07Ci0gICAgICAgIGNoYW5nZXNbaV0gPSB7ZnJvbTogcmFuZ2UuZnJvbSgpLCB0
bzogcmFuZ2UudG8oKSwgdGV4dDogc3BsaXRMaW5lcyhjb2RlW2ldKSwgb3JpZ2luOiBvcmlnaW59
OworICAgICAgICBjaGFuZ2VzW2ldID0ge2Zyb206IHJhbmdlLmZyb20oKSwgdG86IHJhbmdlLnRv
KCksIHRleHQ6IHRoaXMuc3BsaXRMaW5lcyhjb2RlW2ldKSwgb3JpZ2luOiBvcmlnaW59OwogICAg
ICAgfQogICAgICAgdmFyIG5ld1NlbCA9IGNvbGxhcHNlICYmIGNvbGxhcHNlICE9ICJlbmQiICYm
IGNvbXB1dGVSZXBsYWNlZFNlbCh0aGlzLCBjaGFuZ2VzLCBjb2xsYXBzZSk7CiAgICAgICBmb3Ig
KHZhciBpID0gY2hhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkKQEAgLTYzMzQsNyArNzQ3
NSw3IEBACiAgICAgfSwKICAgICBjaGFuZ2VHZW5lcmF0aW9uOiBmdW5jdGlvbihmb3JjZVNwbGl0
KSB7CiAgICAgICBpZiAoZm9yY2VTcGxpdCkKLSAgICAgICAgdGhpcy5oaXN0b3J5Lmxhc3RPcCA9
IHRoaXMuaGlzdG9yeS5sYXN0T3JpZ2luID0gbnVsbDsKKyAgICAgICAgdGhpcy5oaXN0b3J5Lmxh
c3RPcCA9IHRoaXMuaGlzdG9yeS5sYXN0U2VsT3AgPSB0aGlzLmhpc3RvcnkubGFzdE9yaWdpbiA9
IG51bGw7CiAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb247CiAgICAgfSwKICAg
ICBpc0NsZWFuOiBmdW5jdGlvbiAoZ2VuKSB7CkBAIC02MzUxLDEzICs3NDkyLDQ4IEBACiAgICAg
ICBoaXN0LnVuZG9uZSA9IGNvcHlIaXN0b3J5QXJyYXkoaGlzdERhdGEudW5kb25lLnNsaWNlKDAp
LCBudWxsLCB0cnVlKTsKICAgICB9LAogCisgICAgYWRkTGluZUNsYXNzOiBkb2NNZXRob2RPcChm
dW5jdGlvbihoYW5kbGUsIHdoZXJlLCBjbHMpIHsKKyAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRo
aXMsIGhhbmRsZSwgd2hlcmUgPT0gImd1dHRlciIgPyAiZ3V0dGVyIiA6ICJjbGFzcyIsIGZ1bmN0
aW9uKGxpbmUpIHsKKyAgICAgICAgdmFyIHByb3AgPSB3aGVyZSA9PSAidGV4dCIgPyAidGV4dENs
YXNzIgorICAgICAgICAgICAgICAgICA6IHdoZXJlID09ICJiYWNrZ3JvdW5kIiA/ICJiZ0NsYXNz
IgorICAgICAgICAgICAgICAgICA6IHdoZXJlID09ICJndXR0ZXIiID8gImd1dHRlckNsYXNzIiA6
ICJ3cmFwQ2xhc3MiOworICAgICAgICBpZiAoIWxpbmVbcHJvcF0pIGxpbmVbcHJvcF0gPSBjbHM7
CisgICAgICAgIGVsc2UgaWYgKGNsYXNzVGVzdChjbHMpLnRlc3QobGluZVtwcm9wXSkpIHJldHVy
biBmYWxzZTsKKyAgICAgICAgZWxzZSBsaW5lW3Byb3BdICs9ICIgIiArIGNsczsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICB9KTsKKyAgICB9KSwKKyAgICByZW1vdmVMaW5lQ2xhc3M6IGRv
Y01ldGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykgeworICAgICAgcmV0dXJuIGNo
YW5nZUxpbmUodGhpcywgaGFuZGxlLCB3aGVyZSA9PSAiZ3V0dGVyIiA/ICJndXR0ZXIiIDogImNs
YXNzIiwgZnVuY3Rpb24obGluZSkgeworICAgICAgICB2YXIgcHJvcCA9IHdoZXJlID09ICJ0ZXh0
IiA/ICJ0ZXh0Q2xhc3MiCisgICAgICAgICAgICAgICAgIDogd2hlcmUgPT0gImJhY2tncm91bmQi
ID8gImJnQ2xhc3MiCisgICAgICAgICAgICAgICAgIDogd2hlcmUgPT0gImd1dHRlciIgPyAiZ3V0
dGVyQ2xhc3MiIDogIndyYXBDbGFzcyI7CisgICAgICAgIHZhciBjdXIgPSBsaW5lW3Byb3BdOwor
ICAgICAgICBpZiAoIWN1cikgcmV0dXJuIGZhbHNlOworICAgICAgICBlbHNlIGlmIChjbHMgPT0g
bnVsbCkgbGluZVtwcm9wXSA9IG51bGw7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHZhciBm
b3VuZCA9IGN1ci5tYXRjaChjbGFzc1Rlc3QoY2xzKSk7CisgICAgICAgICAgaWYgKCFmb3VuZCkg
cmV0dXJuIGZhbHNlOworICAgICAgICAgIHZhciBlbmQgPSBmb3VuZC5pbmRleCArIGZvdW5kWzBd
Lmxlbmd0aDsKKyAgICAgICAgICBsaW5lW3Byb3BdID0gY3VyLnNsaWNlKDAsIGZvdW5kLmluZGV4
KSArICghZm91bmQuaW5kZXggfHwgZW5kID09IGN1ci5sZW5ndGggPyAiIiA6ICIgIikgKyBjdXIu
c2xpY2UoZW5kKSB8fCBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgfSk7CisgICAgfSksCisKKyAgICBhZGRMaW5lV2lkZ2V0OiBkb2NNZXRob2RPcChmdW5jdGlv
bihoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHsKKyAgICAgIHJldHVybiBhZGRMaW5lV2lkZ2V0KHRo
aXMsIGhhbmRsZSwgbm9kZSwgb3B0aW9ucyk7CisgICAgfSksCisgICAgcmVtb3ZlTGluZVdpZGdl
dDogZnVuY3Rpb24od2lkZ2V0KSB7IHdpZGdldC5jbGVhcigpOyB9LAorCiAgICAgbWFya1RleHQ6
IGZ1bmN0aW9uKGZyb20sIHRvLCBvcHRpb25zKSB7CiAgICAgICByZXR1cm4gbWFya1RleHQodGhp
cywgY2xpcFBvcyh0aGlzLCBmcm9tKSwgY2xpcFBvcyh0aGlzLCB0byksIG9wdGlvbnMsICJyYW5n
ZSIpOwogICAgIH0sCiAgICAgc2V0Qm9va21hcms6IGZ1bmN0aW9uKHBvcywgb3B0aW9ucykgewog
ICAgICAgdmFyIHJlYWxPcHRzID0ge3JlcGxhY2VkV2l0aDogb3B0aW9ucyAmJiAob3B0aW9ucy5u
b2RlVHlwZSA9PSBudWxsID8gb3B0aW9ucy53aWRnZXQgOiBvcHRpb25zKSwKICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRMZWZ0OiBvcHRpb25zICYmIG9wdGlvbnMuaW5zZXJ0TGVmdCwKLSAg
ICAgICAgICAgICAgICAgICAgICBjbGVhcldoZW5FbXB0eTogZmFsc2UsIHNoYXJlZDogb3B0aW9u
cyAmJiBvcHRpb25zLnNoYXJlZH07CisgICAgICAgICAgICAgICAgICAgICAgY2xlYXJXaGVuRW1w
dHk6IGZhbHNlLCBzaGFyZWQ6IG9wdGlvbnMgJiYgb3B0aW9ucy5zaGFyZWQsCisgICAgICAgICAg
ICAgICAgICAgICAgaGFuZGxlTW91c2VFdmVudHM6IG9wdGlvbnMgJiYgb3B0aW9ucy5oYW5kbGVN
b3VzZUV2ZW50c307CiAgICAgICBwb3MgPSBjbGlwUG9zKHRoaXMsIHBvcyk7CiAgICAgICByZXR1
cm4gbWFya1RleHQodGhpcywgcG9zLCBwb3MsIHJlYWxPcHRzLCAiYm9va21hcmsiKTsKICAgICB9
LApAQCAtNjQyMCw3ICs3NTk2LDggQEAKICAgICB9LAogCiAgICAgY29weTogZnVuY3Rpb24oY29w
eUhpc3RvcnkpIHsKLSAgICAgIHZhciBkb2MgPSBuZXcgRG9jKGdldExpbmVzKHRoaXMsIHRoaXMu
Zmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUpLCB0aGlzLm1vZGVPcHRpb24sIHRoaXMuZmly
c3QpOworICAgICAgdmFyIGRvYyA9IG5ldyBEb2MoZ2V0TGluZXModGhpcywgdGhpcy5maXJzdCwg
dGhpcy5maXJzdCArIHRoaXMuc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1v
ZGVPcHRpb24sIHRoaXMuZmlyc3QsIHRoaXMubGluZVNlcCk7CiAgICAgICBkb2Muc2Nyb2xsVG9w
ID0gdGhpcy5zY3JvbGxUb3A7IGRvYy5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0OwogICAg
ICAgZG9jLnNlbCA9IHRoaXMuc2VsOwogICAgICAgZG9jLmV4dGVuZCA9IGZhbHNlOwpAQCAtNjQz
Niw3ICs3NjEzLDcgQEAKICAgICAgIHZhciBmcm9tID0gdGhpcy5maXJzdCwgdG8gPSB0aGlzLmZp
cnN0ICsgdGhpcy5zaXplOwogICAgICAgaWYgKG9wdGlvbnMuZnJvbSAhPSBudWxsICYmIG9wdGlv
bnMuZnJvbSA+IGZyb20pIGZyb20gPSBvcHRpb25zLmZyb207CiAgICAgICBpZiAob3B0aW9ucy50
byAhPSBudWxsICYmIG9wdGlvbnMudG8gPCB0bykgdG8gPSBvcHRpb25zLnRvOwotICAgICAgdmFy
IGNvcHkgPSBuZXcgRG9jKGdldExpbmVzKHRoaXMsIGZyb20sIHRvKSwgb3B0aW9ucy5tb2RlIHx8
IHRoaXMubW9kZU9wdGlvbiwgZnJvbSk7CisgICAgICB2YXIgY29weSA9IG5ldyBEb2MoZ2V0TGlu
ZXModGhpcywgZnJvbSwgdG8pLCBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlT3B0aW9uLCBmcm9t
LCB0aGlzLmxpbmVTZXApOwogICAgICAgaWYgKG9wdGlvbnMuc2hhcmVkSGlzdCkgY29weS5oaXN0
b3J5ID0gdGhpcy5oaXN0b3J5OwogICAgICAgKHRoaXMubGlua2VkIHx8ICh0aGlzLmxpbmtlZCA9
IFtdKSkucHVzaCh7ZG9jOiBjb3B5LCBzaGFyZWRIaXN0OiBvcHRpb25zLnNoYXJlZEhpc3R9KTsK
ICAgICAgIGNvcHkubGlua2VkID0gW3tkb2M6IHRoaXMsIGlzUGFyZW50OiB0cnVlLCBzaGFyZWRI
aXN0OiBvcHRpb25zLnNoYXJlZEhpc3R9XTsKQEAgLTY0NjUsMTQgKzc2NDIsMjAgQEAKICAgICBp
dGVyTGlua2VkRG9jczogZnVuY3Rpb24oZikge2xpbmtlZERvY3ModGhpcywgZik7fSwKIAogICAg
IGdldE1vZGU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLm1vZGU7fSwKLSAgICBnZXRFZGl0b3I6
IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmNtO30KKyAgICBnZXRFZGl0b3I6IGZ1bmN0aW9uKCkg
e3JldHVybiB0aGlzLmNtO30sCisKKyAgICBzcGxpdExpbmVzOiBmdW5jdGlvbihzdHIpIHsKKyAg
ICAgIGlmICh0aGlzLmxpbmVTZXApIHJldHVybiBzdHIuc3BsaXQodGhpcy5saW5lU2VwKTsKKyAg
ICAgIHJldHVybiBzcGxpdExpbmVzQXV0byhzdHIpOworICAgIH0sCisgICAgbGluZVNlcGFyYXRv
cjogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmxpbmVTZXAgfHwgIlxuIjsgfQogICB9KTsKIAog
ICAvLyBQdWJsaWMgYWxpYXMuCiAgIERvYy5wcm90b3R5cGUuZWFjaExpbmUgPSBEb2MucHJvdG90
eXBlLml0ZXI7CiAKICAgLy8gU2V0IHVwIG1ldGhvZHMgb24gQ29kZU1pcnJvcidzIHByb3RvdHlw
ZSB0byByZWRpcmVjdCB0byB0aGUgZWRpdG9yJ3MgZG9jdW1lbnQuCi0gIHZhciBkb250RGVsZWdh
dGUgPSAiaXRlciBpbnNlcnQgcmVtb3ZlIGNvcHkgZ2V0RWRpdG9yIi5zcGxpdCgiICIpOworICB2
YXIgZG9udERlbGVnYXRlID0gIml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciBjb25z
dHJ1Y3RvciIuc3BsaXQoIiAiKTsKICAgZm9yICh2YXIgcHJvcCBpbiBEb2MucHJvdG90eXBlKSBp
ZiAoRG9jLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiBpbmRleE9mKGRvbnREZWxl
Z2F0ZSwgcHJvcCkgPCAwKQogICAgIENvZGVNaXJyb3IucHJvdG90eXBlW3Byb3BdID0gKGZ1bmN0
aW9uKG1ldGhvZCkgewogICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge3JldHVybiBtZXRob2QuYXBw
bHkodGhpcy5kb2MsIGFyZ3VtZW50cyk7fTsKQEAgLTY2MjYsNyArNzgwOSw3IEBACiAgICAgLy8g
VXNlZCB0byB0cmFjayB3aGVuIGNoYW5nZXMgY2FuIGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIHVu
ZG8KICAgICAvLyBldmVudAogICAgIHRoaXMubGFzdE1vZFRpbWUgPSB0aGlzLmxhc3RTZWxUaW1l
ID0gMDsKLSAgICB0aGlzLmxhc3RPcCA9IG51bGw7CisgICAgdGhpcy5sYXN0T3AgPSB0aGlzLmxh
c3RTZWxPcCA9IG51bGw7CiAgICAgdGhpcy5sYXN0T3JpZ2luID0gdGhpcy5sYXN0U2VsT3JpZ2lu
ID0gbnVsbDsKICAgICAvLyBVc2VkIGJ5IHRoZSBpc0NsZWFuKCkgbWV0aG9kCiAgICAgdGhpcy5n
ZW5lcmF0aW9uID0gdGhpcy5tYXhHZW5lcmF0aW9uID0gc3RhcnRHZW4gfHwgMTsKQEAgLTY3MDQs
NyArNzg4Nyw3IEBACiAgICAgaGlzdC5kb25lLnB1c2goc2VsQWZ0ZXIpOwogICAgIGhpc3QuZ2Vu
ZXJhdGlvbiA9ICsraGlzdC5tYXhHZW5lcmF0aW9uOwogICAgIGhpc3QubGFzdE1vZFRpbWUgPSBo
aXN0Lmxhc3RTZWxUaW1lID0gdGltZTsKLSAgICBoaXN0Lmxhc3RPcCA9IG9wSWQ7CisgICAgaGlz
dC5sYXN0T3AgPSBoaXN0Lmxhc3RTZWxPcCA9IG9wSWQ7CiAgICAgaGlzdC5sYXN0T3JpZ2luID0g
aGlzdC5sYXN0U2VsT3JpZ2luID0gY2hhbmdlLm9yaWdpbjsKIAogICAgIGlmICghbGFzdCkgc2ln
bmFsKGRvYywgImhpc3RvcnlBZGRlZCIpOwpAQCAtNjczMCw3ICs3OTEzLDcgQEAKICAgICAvLyB0
aGUgY3VycmVudCwgb3IgdGhlIG9yaWdpbnMgZG9uJ3QgYWxsb3cgbWF0Y2hpbmcuIE9yaWdpbnMK
ICAgICAvLyBzdGFydGluZyB3aXRoICogYXJlIGFsd2F5cyBtZXJnZWQsIHRob3NlIHN0YXJ0aW5n
IHdpdGggKyBhcmUKICAgICAvLyBtZXJnZWQgd2hlbiBzaW1pbGFyIGFuZCBjbG9zZSB0b2dldGhl
ciBpbiB0aW1lLgotICAgIGlmIChvcElkID09IGhpc3QubGFzdE9wIHx8CisgICAgaWYgKG9wSWQg
PT0gaGlzdC5sYXN0U2VsT3AgfHwKICAgICAgICAgKG9yaWdpbiAmJiBoaXN0Lmxhc3RTZWxPcmln
aW4gPT0gb3JpZ2luICYmCiAgICAgICAgICAoaGlzdC5sYXN0TW9kVGltZSA9PSBoaXN0Lmxhc3RT
ZWxUaW1lICYmIGhpc3QubGFzdE9yaWdpbiA9PSBvcmlnaW4gfHwKICAgICAgICAgICBzZWxlY3Rp
b25FdmVudENhbkJlTWVyZ2VkKGRvYywgb3JpZ2luLCBsc3QoaGlzdC5kb25lKSwgc2VsKSkpKQpA
QCAtNjc0MCw3ICs3OTIzLDcgQEAKIAogICAgIGhpc3QubGFzdFNlbFRpbWUgPSArbmV3IERhdGU7
CiAgICAgaGlzdC5sYXN0U2VsT3JpZ2luID0gb3JpZ2luOwotICAgIGhpc3QubGFzdE9wID0gb3BJ
ZDsKKyAgICBoaXN0Lmxhc3RTZWxPcCA9IG9wSWQ7CiAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9u
cy5jbGVhclJlZG8gIT09IGZhbHNlKQogICAgICAgY2xlYXJTZWxlY3Rpb25FdmVudHMoaGlzdC51
bmRvbmUpOwogICB9CkBAIC02OTI1LDYgKzgxMDgsOCBAQAogICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYXJyLmxlbmd0aDsgKytpKSBhcnJbaV0uYXBwbHkobnVsbCwgYXJncyk7CiAgIH07CiAKKyAg
dmFyIG9ycGhhbkRlbGF5ZWRDYWxsYmFja3MgPSBudWxsOworCiAgIC8vIE9mdGVuLCB3ZSB3YW50
IHRvIHNpZ25hbCBldmVudHMgYXQgYSBwb2ludCB3aGVyZSB3ZSBhcmUgaW4gdGhlCiAgIC8vIG1p
ZGRsZSBvZiBzb21lIHdvcmssIGJ1dCBkb24ndCB3YW50IHRoZSBoYW5kbGVyIHRvIHN0YXJ0IGNh
bGxpbmcKICAgLy8gb3RoZXIgbWV0aG9kcyBvbiB0aGUgZWRpdG9yLCB3aGljaCBtaWdodCBiZSBp
biBhbiBpbmNvbnNpc3RlbnQKQEAgLTY5MzIsMjUgKzgxMTcsMjYgQEAKICAgLy8gc2lnbmFsTGF0
ZXIgbG9va3Mgd2hldGhlciB0aGVyZSBhcmUgYW55IGhhbmRsZXJzLCBhbmQgc2NoZWR1bGVzCiAg
IC8vIHRoZW0gdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbGFzdCBvcGVyYXRpb24gZW5kcywgb3Is
IGlmIG5vCiAgIC8vIG9wZXJhdGlvbiBpcyBhY3RpdmUsIHdoZW4gYSB0aW1lb3V0IGZpcmVzLgot
ICB2YXIgZGVsYXllZENhbGxiYWNrcywgZGVsYXllZENhbGxiYWNrRGVwdGggPSAwOwogICBmdW5j
dGlvbiBzaWduYWxMYXRlcihlbWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykgewogICAgIHZh
ciBhcnIgPSBlbWl0dGVyLl9oYW5kbGVycyAmJiBlbWl0dGVyLl9oYW5kbGVyc1t0eXBlXTsKICAg
ICBpZiAoIWFycikgcmV0dXJuOwotICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNl
LmNhbGwoYXJndW1lbnRzLCAyKTsKLSAgICBpZiAoIWRlbGF5ZWRDYWxsYmFja3MpIHsKLSAgICAg
ICsrZGVsYXllZENhbGxiYWNrRGVwdGg7Ci0gICAgICBkZWxheWVkQ2FsbGJhY2tzID0gW107Ci0g
ICAgICBzZXRUaW1lb3V0KGZpcmVEZWxheWVkLCAwKTsKKyAgICB2YXIgYXJncyA9IEFycmF5LnBy
b3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksIGxpc3Q7CisgICAgaWYgKG9wZXJhdGlv
bkdyb3VwKSB7CisgICAgICBsaXN0ID0gb3BlcmF0aW9uR3JvdXAuZGVsYXllZENhbGxiYWNrczsK
KyAgICB9IGVsc2UgaWYgKG9ycGhhbkRlbGF5ZWRDYWxsYmFja3MpIHsKKyAgICAgIGxpc3QgPSBv
cnBoYW5EZWxheWVkQ2FsbGJhY2tzOworICAgIH0gZWxzZSB7CisgICAgICBsaXN0ID0gb3JwaGFu
RGVsYXllZENhbGxiYWNrcyA9IFtdOworICAgICAgc2V0VGltZW91dChmaXJlT3JwaGFuRGVsYXll
ZCwgMCk7CiAgICAgfQogICAgIGZ1bmN0aW9uIGJuZChmKSB7cmV0dXJuIGZ1bmN0aW9uKCl7Zi5h
cHBseShudWxsLCBhcmdzKTt9O307CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3Ro
OyArK2kpCi0gICAgICBkZWxheWVkQ2FsbGJhY2tzLnB1c2goYm5kKGFycltpXSkpOworICAgICAg
bGlzdC5wdXNoKGJuZChhcnJbaV0pKTsKICAgfQogCi0gIGZ1bmN0aW9uIGZpcmVEZWxheWVkKCkg
ewotICAgIC0tZGVsYXllZENhbGxiYWNrRGVwdGg7Ci0gICAgdmFyIGRlbGF5ZWQgPSBkZWxheWVk
Q2FsbGJhY2tzOwotICAgIGRlbGF5ZWRDYWxsYmFja3MgPSBudWxsOworICBmdW5jdGlvbiBmaXJl
T3JwaGFuRGVsYXllZCgpIHsKKyAgICB2YXIgZGVsYXllZCA9IG9ycGhhbkRlbGF5ZWRDYWxsYmFj
a3M7CisgICAgb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9IG51bGw7CiAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBkZWxheWVkLmxlbmd0aDsgKytpKSBkZWxheWVkW2ldKCk7CiAgIH0KIApAQCAtNjk4
Nyw3ICs4MTczLDcgQEAKICAgLy8gTUlTQyBVVElMSVRJRVMKIAogICAvLyBOdW1iZXIgb2YgcGl4
ZWxzIGFkZGVkIHRvIHNjcm9sbGVyIGFuZCBzaXplciB0byBoaWRlIHNjcm9sbGJhcgotICB2YXIg
c2Nyb2xsZXJDdXRPZmYgPSAzMDsKKyAgdmFyIHNjcm9sbGVyR2FwID0gMzA7CiAKICAgLy8gUmV0
dXJuZWQgb3IgdGhyb3duIGJ5IHZhcmlvdXMgcHJvdG9jb2xzIHRvIHNpZ25hbCAnSSdtIG5vdAog
ICAvLyBoYW5kbGluZyB0aGlzJy4KQEAgLTcwNTUsMjIgKzgyNDEsMjEgQEAKICAgICAgIGlmIChh
cnJheVtpXSA9PSBlbHQpIHJldHVybiBpOwogICAgIHJldHVybiAtMTsKICAgfQotICBpZiAoW10u
aW5kZXhPZikgaW5kZXhPZiA9IGZ1bmN0aW9uKGFycmF5LCBlbHQpIHsgcmV0dXJuIGFycmF5Lmlu
ZGV4T2YoZWx0KTsgfTsKICAgZnVuY3Rpb24gbWFwKGFycmF5LCBmKSB7CiAgICAgdmFyIG91dCA9
IFtdOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIG91dFtpXSA9
IGYoYXJyYXlbaV0sIGkpOwogICAgIHJldHVybiBvdXQ7CiAgIH0KLSAgaWYgKFtdLm1hcCkgbWFw
ID0gZnVuY3Rpb24oYXJyYXksIGYpIHsgcmV0dXJuIGFycmF5Lm1hcChmKTsgfTsKKworICBmdW5j
dGlvbiBub3RoaW5nKCkge30KIAogICBmdW5jdGlvbiBjcmVhdGVPYmooYmFzZSwgcHJvcHMpIHsK
ICAgICB2YXIgaW5zdDsKICAgICBpZiAoT2JqZWN0LmNyZWF0ZSkgewogICAgICAgaW5zdCA9IE9i
amVjdC5jcmVhdGUoYmFzZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgIHZhciBjdG9yID0gZnVuY3Rp
b24oKSB7fTsKLSAgICAgIGN0b3IucHJvdG90eXBlID0gYmFzZTsKLSAgICAgIGluc3QgPSBuZXcg
Y3RvcigpOworICAgICAgbm90aGluZy5wcm90b3R5cGUgPSBiYXNlOworICAgICAgaW5zdCA9IG5l
dyBub3RoaW5nKCk7CiAgICAgfQogICAgIGlmIChwcm9wcykgY29weU9iaihwcm9wcywgaW5zdCk7
CiAgICAgcmV0dXJuIGluc3Q7CkBAIC03MDg5LDcgKzgyNzQsNyBAQAogICAgIHJldHVybiBmdW5j
dGlvbigpe3JldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO307CiAgIH0KIAotICB2YXIgbm9uQVND
SUlTaW5nbGVDYXNlV29yZENoYXIgPSAvW1x1MDBkZlx1MzA0MC1cdTMwOWZcdTMwYTAtXHUzMGZm
XHUzNDAwLVx1NGRiNVx1NGUwMC1cdTlmY2NcdWFjMDAtXHVkN2FmXS87CisgIHZhciBub25BU0NJ
SVNpbmdsZUNhc2VXb3JkQ2hhciA9IC9bXHUwMGRmXHUwNTg3XHUwNTkwLVx1MDVmNFx1MDYwMC1c
dTA2ZmZcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNj
XHVhYzAwLVx1ZDdhZl0vOwogICB2YXIgaXNXb3JkQ2hhckJhc2ljID0gQ29kZU1pcnJvci5pc1dv
cmRDaGFyID0gZnVuY3Rpb24oY2gpIHsKICAgICByZXR1cm4gL1x3Ly50ZXN0KGNoKSB8fCBjaCA+
ICJceDgwIiAmJgogICAgICAgKGNoLnRvVXBwZXJDYXNlKCkgIT0gY2gudG9Mb3dlckNhc2UoKSB8
fCBub25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hhci50ZXN0KGNoKSk7CkBAIC03MTI1LDE1ICs4MzEw
LDE2IEBACiAgIH0KIAogICB2YXIgcmFuZ2U7Ci0gIGlmIChkb2N1bWVudC5jcmVhdGVSYW5nZSkg
cmFuZ2UgPSBmdW5jdGlvbihub2RlLCBzdGFydCwgZW5kKSB7CisgIGlmIChkb2N1bWVudC5jcmVh
dGVSYW5nZSkgcmFuZ2UgPSBmdW5jdGlvbihub2RlLCBzdGFydCwgZW5kLCBlbmROb2RlKSB7CiAg
ICAgdmFyIHIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgIHIuc2V0RW5kKG5vZGUsIGVu
ZCk7CisgICAgci5zZXRFbmQoZW5kTm9kZSB8fCBub2RlLCBlbmQpOwogICAgIHIuc2V0U3RhcnQo
bm9kZSwgc3RhcnQpOwogICAgIHJldHVybiByOwogICB9OwogICBlbHNlIHJhbmdlID0gZnVuY3Rp
b24obm9kZSwgc3RhcnQsIGVuZCkgewogICAgIHZhciByID0gZG9jdW1lbnQuYm9keS5jcmVhdGVU
ZXh0UmFuZ2UoKTsKLSAgICByLm1vdmVUb0VsZW1lbnRUZXh0KG5vZGUucGFyZW50Tm9kZSk7Cisg
ICAgdHJ5IHsgci5tb3ZlVG9FbGVtZW50VGV4dChub2RlLnBhcmVudE5vZGUpOyB9CisgICAgY2F0
Y2goZSkgeyByZXR1cm4gcjsgfQogICAgIHIuY29sbGFwc2UodHJ1ZSk7CiAgICAgci5tb3ZlRW5k
KCJjaGFyYWN0ZXIiLCBlbmQpOwogICAgIHIubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLCBzdGFydCk7
CkBAIC03MTUwLDI5ICs4MzM2LDQzIEBACiAgICAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKHBhcmVu
dCkuYXBwZW5kQ2hpbGQoZSk7CiAgIH0KIAotICBmdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGNo
aWxkKSB7CisgIHZhciBjb250YWlucyA9IENvZGVNaXJyb3IuY29udGFpbnMgPSBmdW5jdGlvbihw
YXJlbnQsIGNoaWxkKSB7CisgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09IDMpIC8vIEFuZHJvaWQg
YnJvd3NlciBhbHdheXMgcmV0dXJucyBmYWxzZSB3aGVuIGNoaWxkIGlzIGEgdGV4dG5vZGUKKyAg
ICAgIGNoaWxkID0gY2hpbGQucGFyZW50Tm9kZTsKICAgICBpZiAocGFyZW50LmNvbnRhaW5zKQog
ICAgICAgcmV0dXJuIHBhcmVudC5jb250YWlucyhjaGlsZCk7Ci0gICAgd2hpbGUgKGNoaWxkID0g
Y2hpbGQucGFyZW50Tm9kZSkKKyAgICBkbyB7CisgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT0g
MTEpIGNoaWxkID0gY2hpbGQuaG9zdDsKICAgICAgIGlmIChjaGlsZCA9PSBwYXJlbnQpIHJldHVy
biB0cnVlOwotICB9CisgICAgfSB3aGlsZSAoY2hpbGQgPSBjaGlsZC5wYXJlbnROb2RlKTsKKyAg
fTsKIAotICBmdW5jdGlvbiBhY3RpdmVFbHQoKSB7IHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVt
ZW50OyB9CisgIGZ1bmN0aW9uIGFjdGl2ZUVsdCgpIHsKKyAgICB2YXIgYWN0aXZlRWxlbWVudCA9
IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7CisgICAgd2hpbGUgKGFjdGl2ZUVsZW1lbnQgJiYgYWN0
aXZlRWxlbWVudC5yb290ICYmIGFjdGl2ZUVsZW1lbnQucm9vdC5hY3RpdmVFbGVtZW50KQorICAg
ICAgYWN0aXZlRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnQucm9vdC5hY3RpdmVFbGVtZW50OworICAg
IHJldHVybiBhY3RpdmVFbGVtZW50OworICB9CiAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIElFIHRo
cm93cyB1bnNwZWNpZmllZCBlcnJvciB3aGVuIHRvdWNoaW5nCiAgIC8vIGRvY3VtZW50LmFjdGl2
ZUVsZW1lbnQgaW4gc29tZSBjYXNlcyAoZHVyaW5nIGxvYWRpbmcsIGluIGlmcmFtZSkKLSAgaWYg
KGllX3VwdG8xMCkgYWN0aXZlRWx0ID0gZnVuY3Rpb24oKSB7CisgIGlmIChpZSAmJiBpZV92ZXJz
aW9uIDwgMTEpIGFjdGl2ZUVsdCA9IGZ1bmN0aW9uKCkgewogICAgIHRyeSB7IHJldHVybiBkb2N1
bWVudC5hY3RpdmVFbGVtZW50OyB9CiAgICAgY2F0Y2goZSkgeyByZXR1cm4gZG9jdW1lbnQuYm9k
eTsgfQogICB9OwogCi0gIGZ1bmN0aW9uIGNsYXNzVGVzdChjbHMpIHsgcmV0dXJuIG5ldyBSZWdF
eHAoIlxcYiIgKyBjbHMgKyAiXFxiXFxzKiIpOyB9Ci0gIGZ1bmN0aW9uIHJtQ2xhc3Mobm9kZSwg
Y2xzKSB7Ci0gICAgdmFyIHRlc3QgPSBjbGFzc1Rlc3QoY2xzKTsKLSAgICBpZiAodGVzdC50ZXN0
KG5vZGUuY2xhc3NOYW1lKSkgbm9kZS5jbGFzc05hbWUgPSBub2RlLmNsYXNzTmFtZS5yZXBsYWNl
KHRlc3QsICIiKTsKLSAgfQotICBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCBjbHMpIHsKLSAgICBp
ZiAoIWNsYXNzVGVzdChjbHMpLnRlc3Qobm9kZS5jbGFzc05hbWUpKSBub2RlLmNsYXNzTmFtZSAr
PSAiICIgKyBjbHM7Ci0gIH0KKyAgZnVuY3Rpb24gY2xhc3NUZXN0KGNscykgeyByZXR1cm4gbmV3
IFJlZ0V4cCgiKF58XFxzKSIgKyBjbHMgKyAiKD86JHxcXHMpXFxzKiIpOyB9CisgIHZhciBybUNs
YXNzID0gQ29kZU1pcnJvci5ybUNsYXNzID0gZnVuY3Rpb24obm9kZSwgY2xzKSB7CisgICAgdmFy
IGN1cnJlbnQgPSBub2RlLmNsYXNzTmFtZTsKKyAgICB2YXIgbWF0Y2ggPSBjbGFzc1Rlc3QoY2xz
KS5leGVjKGN1cnJlbnQpOworICAgIGlmIChtYXRjaCkgeworICAgICAgdmFyIGFmdGVyID0gY3Vy
cmVudC5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7CisgICAgICBub2RlLmNs
YXNzTmFtZSA9IGN1cnJlbnQuc2xpY2UoMCwgbWF0Y2guaW5kZXgpICsgKGFmdGVyID8gbWF0Y2hb
MV0gKyBhZnRlciA6ICIiKTsKKyAgICB9CisgIH07CisgIHZhciBhZGRDbGFzcyA9IENvZGVNaXJy
b3IuYWRkQ2xhc3MgPSBmdW5jdGlvbihub2RlLCBjbHMpIHsKKyAgICB2YXIgY3VycmVudCA9IG5v
ZGUuY2xhc3NOYW1lOworICAgIGlmICghY2xhc3NUZXN0KGNscykudGVzdChjdXJyZW50KSkgbm9k
ZS5jbGFzc05hbWUgKz0gKGN1cnJlbnQgPyAiICIgOiAiIikgKyBjbHM7CisgIH07CiAgIGZ1bmN0
aW9uIGpvaW5DbGFzc2VzKGEsIGIpIHsKICAgICB2YXIgYXMgPSBhLnNwbGl0KCIgIik7CiAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBhcy5sZW5ndGg7IGkrKykKQEAgLTcyMDcsNyArODQwNyw2IEBA
CiAgICAgb24od2luZG93LCAicmVzaXplIiwgZnVuY3Rpb24oKSB7CiAgICAgICBpZiAocmVzaXpl
VGltZXIgPT0gbnVsbCkgcmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAg
ICAgICByZXNpemVUaW1lciA9IG51bGw7Ci0gICAgICAgIGtub3duU2Nyb2xsYmFyV2lkdGggPSBu
dWxsOwogICAgICAgICBmb3JFYWNoQ29kZU1pcnJvcihvblJlc2l6ZSk7CiAgICAgICB9LCAxMDAp
OwogICAgIH0pOwpAQCAtNzIyMywzMSArODQyMiwyMyBAQAogICB2YXIgZHJhZ0FuZERyb3AgPSBm
dW5jdGlvbigpIHsKICAgICAvLyBUaGVyZSBpcyAqc29tZSoga2luZCBvZiBkcmFnLWFuZC1kcm9w
IHN1cHBvcnQgaW4gSUU2LTgsIGJ1dCBJCiAgICAgLy8gY291bGRuJ3QgZ2V0IGl0IHRvIHdvcmsg
eWV0LgotICAgIGlmIChpZV91cHRvOCkgcmV0dXJuIGZhbHNlOworICAgIGlmIChpZSAmJiBpZV92
ZXJzaW9uIDwgOSkgcmV0dXJuIGZhbHNlOwogICAgIHZhciBkaXYgPSBlbHQoJ2RpdicpOwogICAg
IHJldHVybiAiZHJhZ2dhYmxlIiBpbiBkaXYgfHwgImRyYWdEcm9wIiBpbiBkaXY7CiAgIH0oKTsK
IAotICB2YXIga25vd25TY3JvbGxiYXJXaWR0aDsKLSAgZnVuY3Rpb24gc2Nyb2xsYmFyV2lkdGgo
bWVhc3VyZSkgewotICAgIGlmIChrbm93blNjcm9sbGJhcldpZHRoICE9IG51bGwpIHJldHVybiBr
bm93blNjcm9sbGJhcldpZHRoOwotICAgIHZhciB0ZXN0ID0gZWx0KCJkaXYiLCBudWxsLCBudWxs
LCAid2lkdGg6IDUwcHg7IGhlaWdodDogNTBweDsgb3ZlcmZsb3cteDogc2Nyb2xsIik7Ci0gICAg
cmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3VyZSwgdGVzdCk7Ci0gICAgaWYgKHRlc3Qub2Zmc2V0
V2lkdGgpCi0gICAgICBrbm93blNjcm9sbGJhcldpZHRoID0gdGVzdC5vZmZzZXRIZWlnaHQgLSB0
ZXN0LmNsaWVudEhlaWdodDsKLSAgICByZXR1cm4ga25vd25TY3JvbGxiYXJXaWR0aCB8fCAwOwot
ICB9Ci0KICAgdmFyIHp3c3BTdXBwb3J0ZWQ7CiAgIGZ1bmN0aW9uIHplcm9XaWR0aEVsZW1lbnQo
bWVhc3VyZSkgewogICAgIGlmICh6d3NwU3VwcG9ydGVkID09IG51bGwpIHsKICAgICAgIHZhciB0
ZXN0ID0gZWx0KCJzcGFuIiwgIlx1MjAwYiIpOwogICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQo
bWVhc3VyZSwgZWx0KCJzcGFuIiwgW3Rlc3QsIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4Iild
KSk7CiAgICAgICBpZiAobWVhc3VyZS5maXJzdENoaWxkLm9mZnNldEhlaWdodCAhPSAwKQotICAg
ICAgICB6d3NwU3VwcG9ydGVkID0gdGVzdC5vZmZzZXRXaWR0aCA8PSAxICYmIHRlc3Qub2Zmc2V0
SGVpZ2h0ID4gMiAmJiAhaWVfdXB0bzc7CisgICAgICAgIHp3c3BTdXBwb3J0ZWQgPSB0ZXN0Lm9m
ZnNldFdpZHRoIDw9IDEgJiYgdGVzdC5vZmZzZXRIZWlnaHQgPiAyICYmICEoaWUgJiYgaWVfdmVy
c2lvbiA8IDgpOwogICAgIH0KLSAgICBpZiAoendzcFN1cHBvcnRlZCkgcmV0dXJuIGVsdCgic3Bh
biIsICJcdTIwMGIiKTsKLSAgICBlbHNlIHJldHVybiBlbHQoInNwYW4iLCAiXHUwMGEwIiwgbnVs
bCwgImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDFweDsgbWFyZ2luLXJpZ2h0OiAtMXB4
Iik7CisgICAgdmFyIG5vZGUgPSB6d3NwU3VwcG9ydGVkID8gZWx0KCJzcGFuIiwgIlx1MjAwYiIp
IDoKKyAgICAgIGVsdCgic3BhbiIsICJcdTAwYTAiLCBudWxsLCAiZGlzcGxheTogaW5saW5lLWJs
b2NrOyB3aWR0aDogMXB4OyBtYXJnaW4tcmlnaHQ6IC0xcHgiKTsKKyAgICBub2RlLnNldEF0dHJp
YnV0ZSgiY20tdGV4dCIsICIiKTsKKyAgICByZXR1cm4gbm9kZTsKICAgfQogCiAgIC8vIEZlYXR1
cmUtZGV0ZWN0IElFJ3MgY3J1bW15IGNsaWVudCByZWN0IHJlcG9ydGluZyBmb3IgYmlkaSB0ZXh0
CkBAIC03MjU2LDE0ICs4NDQ3LDE0IEBACiAgICAgaWYgKGJhZEJpZGlSZWN0cyAhPSBudWxsKSBy
ZXR1cm4gYmFkQmlkaVJlY3RzOwogICAgIHZhciB0eHQgPSByZW1vdmVDaGlsZHJlbkFuZEFkZCht
ZWFzdXJlLCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiQVx1MDYyZUEiKSk7CiAgICAgdmFyIHIw
ID0gcmFuZ2UodHh0LCAwLCAxKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICBpZiAocjAu
bGVmdCA9PSByMC5yaWdodCkgcmV0dXJuIGZhbHNlOworICAgIGlmICghcjAgfHwgcjAubGVmdCA9
PSByMC5yaWdodCkgcmV0dXJuIGZhbHNlOyAvLyBTYWZhcmkgcmV0dXJucyBudWxsIGluIHNvbWUg
Y2FzZXMgKCMyNzgwKQogICAgIHZhciByMSA9IHJhbmdlKHR4dCwgMSwgMikuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCk7CiAgICAgcmV0dXJuIGJhZEJpZGlSZWN0cyA9IChyMS5yaWdodCAtIHIwLnJp
Z2h0IDwgMyk7CiAgIH0KIAogICAvLyBTZWUgaWYgIiIuc3BsaXQgaXMgdGhlIGJyb2tlbiBJRSB2
ZXJzaW9uLCBpZiBzbywgcHJvdmlkZSBhbgogICAvLyBhbHRlcm5hdGl2ZSB3YXkgdG8gc3BsaXQg
bGluZXMuCi0gIHZhciBzcGxpdExpbmVzID0gQ29kZU1pcnJvci5zcGxpdExpbmVzID0gIlxuXG5i
Ii5zcGxpdCgvXG4vKS5sZW5ndGggIT0gMyA/IGZ1bmN0aW9uKHN0cmluZykgeworICB2YXIgc3Bs
aXRMaW5lc0F1dG8gPSBDb2RlTWlycm9yLnNwbGl0TGluZXMgPSAiXG5cbmIiLnNwbGl0KC9cbi8p
Lmxlbmd0aCAhPSAzID8gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICAgdmFyIHBvcyA9IDAsIHJlc3Vs
dCA9IFtdLCBsID0gc3RyaW5nLmxlbmd0aDsKICAgICB3aGlsZSAocG9zIDw9IGwpIHsKICAgICAg
IHZhciBubCA9IHN0cmluZy5pbmRleE9mKCJcbiIsIHBvcyk7CkBAIC03Mjk4LDYgKzg0ODksMTUg
QEAKICAgICByZXR1cm4gdHlwZW9mIGUub25jb3B5ID09ICJmdW5jdGlvbiI7CiAgIH0pKCk7CiAK
KyAgdmFyIGJhZFpvb21lZFJlY3RzID0gbnVsbDsKKyAgZnVuY3Rpb24gaGFzQmFkWm9vbWVkUmVj
dHMobWVhc3VyZSkgeworICAgIGlmIChiYWRab29tZWRSZWN0cyAhPSBudWxsKSByZXR1cm4gYmFk
Wm9vbWVkUmVjdHM7CisgICAgdmFyIG5vZGUgPSByZW1vdmVDaGlsZHJlbkFuZEFkZChtZWFzdXJl
LCBlbHQoInNwYW4iLCAieCIpKTsKKyAgICB2YXIgbm9ybWFsID0gbm9kZS5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKTsKKyAgICB2YXIgZnJvbVJhbmdlID0gcmFuZ2Uobm9kZSwgMCwgMSkuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCk7CisgICAgcmV0dXJuIGJhZFpvb21lZFJlY3RzID0gTWF0aC5hYnMo
bm9ybWFsLmxlZnQgLSBmcm9tUmFuZ2UubGVmdCkgPiAxOworICB9CisKICAgLy8gS0VZIE5BTUVT
CiAKICAgdmFyIGtleU5hbWVzID0gezM6ICJFbnRlciIsIDg6ICJCYWNrc3BhY2UiLCA5OiAiVGFi
IiwgMTM6ICJFbnRlciIsIDE2OiAiU2hpZnQiLCAxNzogIkN0cmwiLCAxODogIkFsdCIsCkBAIC03
MzYwLDYgKzg1NjAsMTcgQEAKICAgICB2YXIgY2ggPSAhb3JkZXIgPyBsaW5lLnRleHQubGVuZ3Ro
IDogb3JkZXJbMF0ubGV2ZWwgJSAyID8gbGluZUxlZnQobGluZSkgOiBsaW5lUmlnaHQobGluZSk7
CiAgICAgcmV0dXJuIFBvcyhsaW5lTiA9PSBudWxsID8gbGluZU5vKGxpbmUpIDogbGluZU4sIGNo
KTsKICAgfQorICBmdW5jdGlvbiBsaW5lU3RhcnRTbWFydChjbSwgcG9zKSB7CisgICAgdmFyIHN0
YXJ0ID0gbGluZVN0YXJ0KGNtLCBwb3MubGluZSk7CisgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGNt
LmRvYywgc3RhcnQubGluZSk7CisgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7CisgICAg
aWYgKCFvcmRlciB8fCBvcmRlclswXS5sZXZlbCA9PSAwKSB7CisgICAgICB2YXIgZmlyc3ROb25X
UyA9IE1hdGgubWF4KDAsIGxpbmUudGV4dC5zZWFyY2goL1xTLykpOworICAgICAgdmFyIGluV1Mg
PSBwb3MubGluZSA9PSBzdGFydC5saW5lICYmIHBvcy5jaCA8PSBmaXJzdE5vbldTICYmIHBvcy5j
aDsKKyAgICAgIHJldHVybiBQb3Moc3RhcnQubGluZSwgaW5XUyA/IDAgOiBmaXJzdE5vbldTKTsK
KyAgICB9CisgICAgcmV0dXJuIHN0YXJ0OworICB9CiAKICAgZnVuY3Rpb24gY29tcGFyZUJpZGlM
ZXZlbChvcmRlciwgYSwgYikgewogICAgIHZhciBsaW5lZGlyID0gb3JkZXJbMF0ubGV2ZWw7CkBA
IC03NTkwLDYgKzg4MDEsOCBAQAogICAgICAgICBsc3Qob3JkZXIpLnRvIC09IG1bMF0ubGVuZ3Ro
OwogICAgICAgICBvcmRlci5wdXNoKG5ldyBCaWRpU3BhbigwLCBsZW4gLSBtWzBdLmxlbmd0aCwg
bGVuKSk7CiAgICAgICB9CisgICAgICBpZiAob3JkZXJbMF0ubGV2ZWwgPT0gMikKKyAgICAgICAg
b3JkZXIudW5zaGlmdChuZXcgQmlkaVNwYW4oMSwgb3JkZXJbMF0udG8sIG9yZGVyWzBdLnRvKSk7
CiAgICAgICBpZiAob3JkZXJbMF0ubGV2ZWwgIT0gbHN0KG9yZGVyKS5sZXZlbCkKICAgICAgICAg
b3JkZXIucHVzaChuZXcgQmlkaVNwYW4ob3JkZXJbMF0ubGV2ZWwsIGxlbiwgbGVuKSk7CiAKQEAg
LTc1OTksNyArODgxMiw3IEBACiAKICAgLy8gVEhFIEVORAogCi0gIENvZGVNaXJyb3IudmVyc2lv
biA9ICI0LjIuMCI7CisgIENvZGVNaXJyb3IudmVyc2lvbiA9ICI1LjUuMSI7CiAKICAgcmV0dXJu
IENvZGVNaXJyb3I7CiB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2ZmZWVzY3Jp
cHQuanMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAxNjk1NjUwMTI2Mjgz
OWRhZjliZGZjNTdmMzJkY2JiZGE2NGM2MGYwLi5kYTBlYjJkNTE4MGEyYzg5NjVhMWUxMGIxOTgw
YzYxNTNlOGE5ZmZjCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4
dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzCkBA
IC0xNSwxNCArMTUsMTQgQEAKIH0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKICJ1c2Ugc3RyaWN0
IjsKIAotQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjb2ZmZWVzY3JpcHQiLCBmdW5jdGlvbihjb25m
KSB7CitDb2RlTWlycm9yLmRlZmluZU1vZGUoImNvZmZlZXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmYs
IHBhcnNlckNvbmYpIHsKICAgdmFyIEVSUk9SQ0xBU1MgPSAiZXJyb3IiOwogCiAgIGZ1bmN0aW9u
IHdvcmRSZWdleHAod29yZHMpIHsKICAgICByZXR1cm4gbmV3IFJlZ0V4cCgiXigoIiArIHdvcmRz
LmpvaW4oIil8KCIpICsgIikpXFxiIik7CiAgIH0KIAotICB2YXIgb3BlcmF0b3JzID0gL14oPzot
Pnw9PnxcK1srPV0/fC1bXC09XT98XCpbXCo9XT98XC9bXC89XT98Wz0hXT18PFs+PF0/PT98Pj4/
PT98JT0/fCY9P3xcfD0/fFxePT98XH58IXxcPykvOworICB2YXIgb3BlcmF0b3JzID0gL14oPzot
Pnw9PnxcK1srPV0/fC1bXC09XT98XCpbXCo9XT98XC9bXC89XT98Wz0hXT18PFs+PF0/PT98Pj4/
PT98JT0/fCY9P3xcfD0/fFxePT98XH58IXxcP3wob3J8YW5kfFx8XHx8JiZ8XD8pPSkvOwogICB2
YXIgZGVsaW1pdGVycyA9IC9eKD86WygpXFtcXXt9LDpgPTtdfFwuXC4/XC4/KS87CiAgIHZhciBp
ZGVudGlmaWVycyA9IC9eW19BLVphLXokXVtfQS1aYS16JDAtOV0qLzsKICAgdmFyIHByb3BlcnRp
ZXMgPSAvXihAfHRoaXNcLilbX0EtWmEteiRdW19BLVphLXokMC05XSovOwpAQCAtMzQsNyArMzQs
NyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNvZmZlZXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmYp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICJzd2l0Y2giLCAidHJ5IiwgImNhdGNoIiwgImZp
bmFsbHkiLCAiY2xhc3MiXTsKICAgdmFyIGNvbW1vbktleXdvcmRzID0gWyJicmVhayIsICJieSIs
ICJjb250aW51ZSIsICJkZWJ1Z2dlciIsICJkZWxldGUiLAogICAgICAgICAgICAgICAgICAgICAg
ICAgImRvIiwgImluIiwgIm9mIiwgIm5ldyIsICJyZXR1cm4iLCAidGhlbiIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAidGhpcyIsICJ0aHJvdyIsICJ3aGVuIiwgInVudGlsIl07CisgICAgICAg
ICAgICAgICAgICAgICAgICAidGhpcyIsICJAIiwgInRocm93IiwgIndoZW4iLCAidW50aWwiLCAi
ZXh0ZW5kcyJdOwogCiAgIHZhciBrZXl3b3JkcyA9IHdvcmRSZWdleHAoaW5kZW50S2V5d29yZHMu
Y29uY2F0KGNvbW1vbktleXdvcmRzKSk7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCBDb2RlTWlycm9y
LmRlZmluZU1vZGUoImNvZmZlZXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmYpIHsKICAgICAgICAgfQog
ICAgICAgfQogICAgICAgaWYgKHNpbmdsZWxpbmUpIHsKLSAgICAgICAgaWYgKGNvbmYubW9kZS5z
aW5nbGVMaW5lU3RyaW5nRXJyb3JzKSB7CisgICAgICAgIGlmIChwYXJzZXJDb25mLnNpbmdsZUxp
bmVTdHJpbmdFcnJvcnMpIHsKICAgICAgICAgICBvdXRjbGFzcyA9IEVSUk9SQ0xBU1M7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CkBAIC0y
MTcsNyArMjE3LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjb2ZmZWVzY3JpcHQiLCBmdW5j
dGlvbihjb25mKSB7CiAgICAgdHlwZSA9IHR5cGUgfHwgImNvZmZlZSI7CiAgICAgdmFyIG9mZnNl
dCA9IDAsIGFsaWduID0gZmFsc2UsIGFsaWduT2Zmc2V0ID0gbnVsbDsKICAgICBmb3IgKHZhciBz
Y29wZSA9IHN0YXRlLnNjb3BlOyBzY29wZTsgc2NvcGUgPSBzY29wZS5wcmV2KSB7Ci0gICAgICBp
ZiAoc2NvcGUudHlwZSA9PT0gImNvZmZlZSIpIHsKKyAgICAgIGlmIChzY29wZS50eXBlID09PSAi
Y29mZmVlIiB8fCBzY29wZS50eXBlID09ICJ9IikgewogICAgICAgICBvZmZzZXQgPSBzY29wZS5v
ZmZzZXQgKyBjb25mLmluZGVudFVuaXQ7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQpAQCAtMjc4
LDcgKzI3OCw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY29mZmVlc2NyaXB0IiwgZnVuY3Rp
b24oY29uZikgewogCiAgICAgLy8gSGFuZGxlIHNjb3BlIGNoYW5nZXMuCiAgICAgaWYgKGN1cnJl
bnQgPT09ICJyZXR1cm4iKSB7Ci0gICAgICBzdGF0ZS5kZWRlbnQgKz0gMTsKKyAgICAgIHN0YXRl
LmRlZGVudCA9IHRydWU7CiAgICAgfQogICAgIGlmICgoKGN1cnJlbnQgPT09ICItPiIgfHwgY3Vy
cmVudCA9PT0gIj0+IikgJiYKICAgICAgICAgICFzdGF0ZS5sYW1iZGEgJiYKQEAgLTMxMCw5ICsz
MTAsMTAgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjb2ZmZWVzY3JpcHQiLCBmdW5jdGlvbihj
b25mKSB7CiAgICAgICBpZiAoc3RhdGUuc2NvcGUudHlwZSA9PSBjdXJyZW50KQogICAgICAgICBz
dGF0ZS5zY29wZSA9IHN0YXRlLnNjb3BlLnByZXY7CiAgICAgfQotICAgIGlmIChzdGF0ZS5kZWRl
bnQgPiAwICYmIHN0cmVhbS5lb2woKSAmJiBzdGF0ZS5zY29wZS50eXBlID09ICJjb2ZmZWUiKSB7
Ci0gICAgICBpZiAoc3RhdGUuc2NvcGUucHJldikgc3RhdGUuc2NvcGUgPSBzdGF0ZS5zY29wZS5w
cmV2OwotICAgICAgc3RhdGUuZGVkZW50IC09IDE7CisgICAgaWYgKHN0YXRlLmRlZGVudCAmJiBz
dHJlYW0uZW9sKCkpIHsKKyAgICAgIGlmIChzdGF0ZS5zY29wZS50eXBlID09ICJjb2ZmZWUiICYm
IHN0YXRlLnNjb3BlLnByZXYpCisgICAgICAgIHN0YXRlLnNjb3BlID0gc3RhdGUuc2NvcGUucHJl
djsKKyAgICAgIHN0YXRlLmRlZGVudCA9IGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiBzdHls
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3IvY29tbWVudC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29tbWVudC5qcwpvbGQgbW9kZSAxMDA2NDQKbmV3
IG1vZGUgMTAwNzU1CmluZGV4IDNhYzQ3NjQ1MmRkODY3N2U5MjAxYTdmZWE5NjFhNzgxNDNiYjQ5
NTcuLjJkZDExNGQzMzJkYzliMWUwYjE5Y2ZmZjNmYzYwMDYxYzdjYjlmYmUKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb21tZW50
LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0Nv
ZGVNaXJyb3IvY29tbWVudC5qcwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgIENvZGVNaXJyb3IuZGVm
aW5lRXh0ZW5zaW9uKCJ1bmNvbW1lbnQiLCBmdW5jdGlvbihmcm9tLCB0bywgb3B0aW9ucykgewog
ICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IG5vT3B0aW9uczsKICAgICB2YXIgc2VsZiA9IHRo
aXMsIG1vZGUgPSBzZWxmLmdldE1vZGVBdChmcm9tKTsKLSAgICB2YXIgZW5kID0gTWF0aC5taW4o
dG8ubGluZSwgc2VsZi5sYXN0TGluZSgpKSwgc3RhcnQgPSBNYXRoLm1pbihmcm9tLmxpbmUsIGVu
ZCk7CisgICAgdmFyIGVuZCA9IE1hdGgubWluKHRvLmNoICE9IDAgfHwgdG8ubGluZSA9PSBmcm9t
LmxpbmUgPyB0by5saW5lIDogdG8ubGluZSAtIDEsIHNlbGYubGFzdExpbmUoKSksIHN0YXJ0ID0g
TWF0aC5taW4oZnJvbS5saW5lLCBlbmQpOwogCiAgICAgLy8gVHJ5IGZpbmRpbmcgbGluZSBjb21t
ZW50cwogICAgIHZhciBsaW5lU3RyaW5nID0gb3B0aW9ucy5saW5lQ29tbWVudCB8fCBtb2RlLmxp
bmVDb21tZW50LCBsaW5lcyA9IFtdOwpAQCAtMTUzLDYgKzE1MywxNyBAQAogICAgICAgICAhL2Nv
bW1lbnQvLnRlc3Qoc2VsZi5nZXRUb2tlblR5cGVBdChQb3MoZW5kLCBjbG9zZSArIDEpKSkpCiAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAvLyBBdm9pZCBraWxsaW5nIGJsb2NrIGNvbW1lbnRz
IGNvbXBsZXRlbHkgb3V0c2lkZSB0aGUgc2VsZWN0aW9uLgorICAgIC8vIFBvc2l0aW9ucyBvZiB0
aGUgbGFzdCBzdGFydFN0cmluZyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBzZWxlY3Rpb24sIGFu
ZCB0aGUgZmlyc3QgZW5kU3RyaW5nIGFmdGVyIGl0LgorICAgIHZhciBsYXN0U3RhcnQgPSBzdGFy
dExpbmUubGFzdEluZGV4T2Yoc3RhcnRTdHJpbmcsIGZyb20uY2gpOworICAgIHZhciBmaXJzdEVu
ZCA9IGxhc3RTdGFydCA9PSAtMSA/IC0xIDogc3RhcnRMaW5lLnNsaWNlKDAsIGZyb20uY2gpLmlu
ZGV4T2YoZW5kU3RyaW5nLCBsYXN0U3RhcnQgKyBzdGFydFN0cmluZy5sZW5ndGgpOworICAgIGlm
IChsYXN0U3RhcnQgIT0gLTEgJiYgZmlyc3RFbmQgIT0gLTEgJiYgZmlyc3RFbmQgKyBlbmRTdHJp
bmcubGVuZ3RoICE9IGZyb20uY2gpIHJldHVybiBmYWxzZTsKKyAgICAvLyBQb3NpdGlvbnMgb2Yg
dGhlIGZpcnN0IGVuZFN0cmluZyBhZnRlciB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIGFuZCB0
aGUgbGFzdCBzdGFydFN0cmluZyBiZWZvcmUgaXQuCisgICAgZmlyc3RFbmQgPSBlbmRMaW5lLmlu
ZGV4T2YoZW5kU3RyaW5nLCB0by5jaCk7CisgICAgdmFyIGFsbW9zdExhc3RTdGFydCA9IGVuZExp
bmUuc2xpY2UodG8uY2gpLmxhc3RJbmRleE9mKHN0YXJ0U3RyaW5nLCBmaXJzdEVuZCAtIHRvLmNo
KTsKKyAgICBsYXN0U3RhcnQgPSAoZmlyc3RFbmQgPT0gLTEgfHwgYWxtb3N0TGFzdFN0YXJ0ID09
IC0xKSA/IC0xIDogdG8uY2ggKyBhbG1vc3RMYXN0U3RhcnQ7CisgICAgaWYgKGZpcnN0RW5kICE9
IC0xICYmIGxhc3RTdGFydCAhPSAtMSAmJiBsYXN0U3RhcnQgIT0gdG8uY2gpIHJldHVybiBmYWxz
ZTsKKwogICAgIHNlbGYub3BlcmF0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgc2VsZi5yZXBsYWNl
UmFuZ2UoIiIsIFBvcyhlbmQsIGNsb3NlIC0gKHBhZCAmJiBlbmRMaW5lLnNsaWNlKGNsb3NlIC0g
cGFkLmxlbmd0aCwgY2xvc2UpID09IHBhZCA/IHBhZC5sZW5ndGggOiAwKSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICBQb3MoZW5kLCBjbG9zZSArIGVuZFN0cmluZy5sZW5ndGgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVN
aXJyb3IvY3NzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJu
YWwvQ29kZU1pcnJvci9jc3MuanMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRl
eCBhYWZkZGI2YzY3NjM4Y2Y2ZTc0Mzc0NWUxMWM5MjMzYjIzZWE4YmU5Li5mNjdjZDIxNjFiOTU0
ZWNiZDJjZTEzODRkOTQzNDllNWQ3NTU0OWQ3Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY3NzLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY3NzLmpzCkBAIC0x
MiwxNyArMTIsMjIgQEAKICJ1c2Ugc3RyaWN0IjsKIAogQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJj
c3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgeworICB2YXIgcHJvdmlkZWQgPSBw
YXJzZXJDb25maWc7CiAgIGlmICghcGFyc2VyQ29uZmlnLnByb3BlcnR5S2V5d29yZHMpIHBhcnNl
ckNvbmZpZyA9IENvZGVNaXJyb3IucmVzb2x2ZU1vZGUoInRleHQvY3NzIik7CisgIHBhcnNlckNv
bmZpZy5pbmxpbmUgPSBwcm92aWRlZC5pbmxpbmU7CiAKICAgdmFyIGluZGVudFVuaXQgPSBjb25m
aWcuaW5kZW50VW5pdCwKICAgICAgIHRva2VuSG9va3MgPSBwYXJzZXJDb25maWcudG9rZW5Ib29r
cywKKyAgICAgIGRvY3VtZW50VHlwZXMgPSBwYXJzZXJDb25maWcuZG9jdW1lbnRUeXBlcyB8fCB7
fSwKICAgICAgIG1lZGlhVHlwZXMgPSBwYXJzZXJDb25maWcubWVkaWFUeXBlcyB8fCB7fSwKICAg
ICAgIG1lZGlhRmVhdHVyZXMgPSBwYXJzZXJDb25maWcubWVkaWFGZWF0dXJlcyB8fCB7fSwKKyAg
ICAgIG1lZGlhVmFsdWVLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5tZWRpYVZhbHVlS2V5d29yZHMg
fHwge30sCiAgICAgICBwcm9wZXJ0eUtleXdvcmRzID0gcGFyc2VyQ29uZmlnLnByb3BlcnR5S2V5
d29yZHMgfHwge30sCiAgICAgICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMgPSBwYXJzZXJD
b25maWcubm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzIHx8IHt9LAorICAgICAgZm9udFByb3Bl
cnRpZXMgPSBwYXJzZXJDb25maWcuZm9udFByb3BlcnRpZXMgfHwge30sCisgICAgICBjb3VudGVy
RGVzY3JpcHRvcnMgPSBwYXJzZXJDb25maWcuY291bnRlckRlc2NyaXB0b3JzIHx8IHt9LAogICAg
ICAgY29sb3JLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5jb2xvcktleXdvcmRzIHx8IHt9LAogICAg
ICAgdmFsdWVLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy52YWx1ZUtleXdvcmRzIHx8IHt9LAotICAg
ICAgZm9udFByb3BlcnRpZXMgPSBwYXJzZXJDb25maWcuZm9udFByb3BlcnRpZXMgfHwge30sCiAg
ICAgICBhbGxvd05lc3RlZCA9IHBhcnNlckNvbmZpZy5hbGxvd05lc3RlZDsKIAogICB2YXIgdHlw
ZSwgb3ZlcnJpZGU7CkBAIC01Nyw2ICs2MiwxMSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNz
cyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICBpZiAoL1tcZC5dLy50
ZXN0KHN0cmVhbS5wZWVrKCkpKSB7CiAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LiVdLyk7
CiAgICAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJ1bml0Iik7CisgICAgICB9IGVsc2UgaWYg
KHN0cmVhbS5tYXRjaCgvXi1bXHdcXFwtXSsvKSkgeworICAgICAgICBzdHJlYW0uZWF0V2hpbGUo
L1tcd1xcXC1dLyk7CisgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15ccyo6LywgZmFsc2UpKQor
ICAgICAgICAgIHJldHVybiByZXQoInZhcmlhYmxlLTIiLCAidmFyaWFibGUtZGVmaW5pdGlvbiIp
OworICAgICAgICByZXR1cm4gcmV0KCJ2YXJpYWJsZS0yIiwgInZhcmlhYmxlIik7CiAgICAgICB9
IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXlx3Ky0vKSkgewogICAgICAgICByZXR1cm4gcmV0KCJt
ZXRhIiwgIm1ldGEiKTsKICAgICAgIH0KQEAgLTY2LDcgKzc2LDkgQEAgQ29kZU1pcnJvci5kZWZp
bmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgcmV0
dXJuIHJldCgicXVhbGlmaWVyIiwgInF1YWxpZmllciIpOwogICAgIH0gZWxzZSBpZiAoL1s6O3t9
XFtcXVwoXCldLy50ZXN0KGNoKSkgewogICAgICAgcmV0dXJuIHJldChudWxsLCBjaCk7Ci0gICAg
fSBlbHNlIGlmIChjaCA9PSAidSIgJiYgc3RyZWFtLm1hdGNoKCJybCgiKSkgeworICAgIH0gZWxz
ZSBpZiAoKGNoID09ICJ1IiAmJiBzdHJlYW0ubWF0Y2goL3JsKC1wcmVmaXgpP1woLykpIHx8Cisg
ICAgICAgICAgICAgICAoY2ggPT0gImQiICYmIHN0cmVhbS5tYXRjaCgib21haW4oIikpIHx8Cisg
ICAgICAgICAgICAgICAoY2ggPT0gInIiICYmIHN0cmVhbS5tYXRjaCgiZWdleHAoIikpKSB7CiAg
ICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblBhcmVu
dGhlc2l6ZWQ7CiAgICAgICByZXR1cm4gcmV0KCJwcm9wZXJ0eSIsICJ3b3JkIik7CkBAIC0xNDgs
MTAgKzE2MCwxMSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVh
bSwgImJsb2NrIik7CiAgICAgfSBlbHNlIGlmICh0eXBlID09ICJ9IiAmJiBzdGF0ZS5jb250ZXh0
LnByZXYpIHsKICAgICAgIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTsKLSAgICB9IGVsc2UgaWYg
KHR5cGUgPT0gIkBtZWRpYSIpIHsKLSAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3Ry
ZWFtLCAibWVkaWEiKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gIkBmb250LWZhY2UiKSB7Ci0g
ICAgICByZXR1cm4gImZvbnRfZmFjZV9iZWZvcmUiOworICAgIH0gZWxzZSBpZiAoL0AobWVkaWF8
c3VwcG9ydHN8KC1tb3otKT9kb2N1bWVudCkvLnRlc3QodHlwZSkpIHsKKyAgICAgIHJldHVybiBw
dXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAiYXRCbG9jayIpOworICAgIH0gZWxzZSBpZiAoL0Ao
Zm9udC1mYWNlfGNvdW50ZXItc3R5bGUpLy50ZXN0KHR5cGUpKSB7CisgICAgICBzdGF0ZS5zdGF0
ZUFyZyA9IHR5cGU7CisgICAgICByZXR1cm4gInJlc3RyaWN0ZWRfYXRCbG9ja19iZWZvcmUiOwog
ICAgIH0gZWxzZSBpZiAoL15AKC0obW96fG1zfG98d2Via2l0KS0pP2tleWZyYW1lcyQvLnRlc3Qo
dHlwZSkpIHsKICAgICAgIHJldHVybiAia2V5ZnJhbWVzIjsKICAgICB9IGVsc2UgaWYgKHR5cGUg
JiYgdHlwZS5jaGFyQXQoMCkgPT0gIkAiKSB7CkBAIC0xODIsNyArMTk1LDcgQEAgQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAg
ICAgICBvdmVycmlkZSA9ICJzdHJpbmctMiI7CiAgICAgICAgIHJldHVybiAibWF5YmVwcm9wIjsK
ICAgICAgIH0gZWxzZSBpZiAoYWxsb3dOZXN0ZWQpIHsKLSAgICAgICAgb3ZlcnJpZGUgPSBzdHJl
YW0ubWF0Y2goL15ccyo6LywgZmFsc2UpID8gInByb3BlcnR5IiA6ICJ0YWciOworICAgICAgICBv
dmVycmlkZSA9IHN0cmVhbS5tYXRjaCgvXlxzKjooPzpcc3wkKS8sIGZhbHNlKSA/ICJwcm9wZXJ0
eSIgOiAidGFnIjsKICAgICAgICAgcmV0dXJuICJibG9jayI7CiAgICAgICB9IGVsc2UgewogICAg
ICAgICBvdmVycmlkZSArPSAiIGVycm9yIjsKQEAgLTIyOSw2ICsyNDIsNyBAQCBDb2RlTWlycm9y
LmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAg
aWYgKHR5cGUgPT0gInsiIHx8IHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBz
dHJlYW0sIHN0YXRlKTsKICAgICBpZiAodHlwZSA9PSAiKSIpIHJldHVybiBwb3BDb250ZXh0KHN0
YXRlKTsKICAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3Ry
ZWFtLCAicGFyZW5zIik7CisgICAgaWYgKHR5cGUgPT0gImludGVycG9sYXRpb24iKSByZXR1cm4g
cHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgImludGVycG9sYXRpb24iKTsKICAgICBpZiAodHlw
ZSA9PSAid29yZCIpIHdvcmRBc1ZhbHVlKHN0cmVhbSk7CiAgICAgcmV0dXJuICJwYXJlbnMiOwog
ICB9OwpAQCAtMjQxLDQ3ICsyNTUsNjcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBm
dW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIHJldHVybiBwYXNzKHR5cGUsIHN0
cmVhbSwgc3RhdGUpOwogICB9OwogCi0gIHN0YXRlcy5tZWRpYSA9IGZ1bmN0aW9uKHR5cGUsIHN0
cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBwdXNoQ29udGV4dChz
dGF0ZSwgc3RyZWFtLCAibWVkaWFfcGFyZW5zIik7CisgIHN0YXRlcy5hdEJsb2NrID0gZnVuY3Rp
b24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgeworICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIHB1
c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJhdEJsb2NrX3BhcmVucyIpOwogICAgIGlmICh0eXBl
ID09ICJ9IikgcmV0dXJuIHBvcEFuZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgaWYg
KHR5cGUgPT0gInsiKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSkgJiYgcHVzaENvbnRleHQoc3Rh
dGUsIHN0cmVhbSwgYWxsb3dOZXN0ZWQgPyAiYmxvY2siIDogInRvcCIpOwogCiAgICAgaWYgKHR5
cGUgPT0gIndvcmQiKSB7CiAgICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dl
ckNhc2UoKTsKLSAgICAgIGlmICh3b3JkID09ICJvbmx5IiB8fCB3b3JkID09ICJub3QiIHx8IHdv
cmQgPT0gImFuZCIpCisgICAgICBpZiAod29yZCA9PSAib25seSIgfHwgd29yZCA9PSAibm90IiB8
fCB3b3JkID09ICJhbmQiIHx8IHdvcmQgPT0gIm9yIikKICAgICAgICAgb3ZlcnJpZGUgPSAia2V5
d29yZCI7CisgICAgICBlbHNlIGlmIChkb2N1bWVudFR5cGVzLmhhc093blByb3BlcnR5KHdvcmQp
KQorICAgICAgICBvdmVycmlkZSA9ICJ0YWciOwogICAgICAgZWxzZSBpZiAobWVkaWFUeXBlcy5o
YXNPd25Qcm9wZXJ0eSh3b3JkKSkKICAgICAgICAgb3ZlcnJpZGUgPSAiYXR0cmlidXRlIjsKICAg
ICAgIGVsc2UgaWYgKG1lZGlhRmVhdHVyZXMuaGFzT3duUHJvcGVydHkod29yZCkpCiAgICAgICAg
IG92ZXJyaWRlID0gInByb3BlcnR5IjsKKyAgICAgIGVsc2UgaWYgKG1lZGlhVmFsdWVLZXl3b3Jk
cy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkKKyAgICAgICAgb3ZlcnJpZGUgPSAia2V5d29yZCI7Cisg
ICAgICBlbHNlIGlmIChwcm9wZXJ0eUtleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKQorICAg
ICAgICBvdmVycmlkZSA9ICJwcm9wZXJ0eSI7CisgICAgICBlbHNlIGlmIChub25TdGFuZGFyZFBy
b3BlcnR5S2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpCisgICAgICAgIG92ZXJyaWRlID0g
InN0cmluZy0yIjsKKyAgICAgIGVsc2UgaWYgKHZhbHVlS2V5d29yZHMuaGFzT3duUHJvcGVydHko
d29yZCkpCisgICAgICAgIG92ZXJyaWRlID0gImF0b20iOworICAgICAgZWxzZSBpZiAoY29sb3JL
ZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3b3JkKSkKKyAgICAgICAgb3ZlcnJpZGUgPSAia2V5d29y
ZCI7CiAgICAgICBlbHNlCiAgICAgICAgIG92ZXJyaWRlID0gImVycm9yIjsKICAgICB9CiAgICAg
cmV0dXJuIHN0YXRlLmNvbnRleHQudHlwZTsKICAgfTsKIAotICBzdGF0ZXMubWVkaWFfcGFyZW5z
ID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBzdGF0ZSkgeworICBzdGF0ZXMuYXRCbG9ja19wYXJl
bnMgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CiAgICAgaWYgKHR5cGUgPT0gIiki
KSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgaWYgKHR5cGUgPT0gInsiIHx8IHR5cGUg
PT0gIn0iKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlLCAyKTsKLSAgICBy
ZXR1cm4gc3RhdGVzLm1lZGlhKHR5cGUsIHN0cmVhbSwgc3RhdGUpOworICAgIHJldHVybiBzdGF0
ZXMuYXRCbG9jayh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKICAgfTsKIAotICBzdGF0ZXMuZm9udF9m
YWNlX2JlZm9yZSA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgc3RhdGVzLnJl
c3RyaWN0ZWRfYXRCbG9ja19iZWZvcmUgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7
CiAgICAgaWYgKHR5cGUgPT0gInsiKQotICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBz
dHJlYW0sICJmb250X2ZhY2UiKTsKKyAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3Ry
ZWFtLCAicmVzdHJpY3RlZF9hdEJsb2NrIik7CisgICAgaWYgKHR5cGUgPT0gIndvcmQiICYmIHN0
YXRlLnN0YXRlQXJnID09ICJAY291bnRlci1zdHlsZSIpIHsKKyAgICAgIG92ZXJyaWRlID0gInZh
cmlhYmxlIjsKKyAgICAgIHJldHVybiAicmVzdHJpY3RlZF9hdEJsb2NrX2JlZm9yZSI7CisgICAg
fQogICAgIHJldHVybiBwYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwogICB9OwogCi0gIHN0YXRl
cy5mb250X2ZhY2UgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7Ci0gICAgaWYgKHR5
cGUgPT0gIn0iKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7CisgIHN0YXRlcy5yZXN0cmljdGVk
X2F0QmxvY2sgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUg
PT0gIn0iKSB7CisgICAgICBzdGF0ZS5zdGF0ZUFyZyA9IG51bGw7CisgICAgICByZXR1cm4gcG9w
Q29udGV4dChzdGF0ZSk7CisgICAgfQogICAgIGlmICh0eXBlID09ICJ3b3JkIikgewotICAgICAg
aWYgKCFmb250UHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShzdHJlYW0uY3VycmVudCgpLnRvTG93
ZXJDYXNlKCkpKQorICAgICAgaWYgKChzdGF0ZS5zdGF0ZUFyZyA9PSAiQGZvbnQtZmFjZSIgJiYg
IWZvbnRQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNh
c2UoKSkpIHx8CisgICAgICAgICAgKHN0YXRlLnN0YXRlQXJnID09ICJAY291bnRlci1zdHlsZSIg
JiYgIWNvdW50ZXJEZXNjcmlwdG9ycy5oYXNPd25Qcm9wZXJ0eShzdHJlYW0uY3VycmVudCgpLnRv
TG93ZXJDYXNlKCkpKSkKICAgICAgICAgb3ZlcnJpZGUgPSAiZXJyb3IiOwogICAgICAgZWxzZQog
ICAgICAgICBvdmVycmlkZSA9ICJwcm9wZXJ0eSI7CiAgICAgICByZXR1cm4gIm1heWJlcHJvcCI7
CiAgICAgfQotICAgIHJldHVybiAiZm9udF9mYWNlIjsKKyAgICByZXR1cm4gInJlc3RyaWN0ZWRf
YXRCbG9jayI7CiAgIH07CiAKICAgc3RhdGVzLmtleWZyYW1lcyA9IGZ1bmN0aW9uKHR5cGUsIHN0
cmVhbSwgc3RhdGUpIHsKQEAgLTMwMSwxNSArMzM1LDE3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9k
ZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgc3RhdGVzLmludGVy
cG9sYXRpb24gPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CiAgICAgaWYgKHR5cGUg
PT0gIn0iKSByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgaWYgKHR5cGUgPT0gInsiIHx8
IHR5cGUgPT0gIjsiKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKLSAg
ICBpZiAodHlwZSAhPSAidmFyaWFibGUiKSBvdmVycmlkZSA9ICJlcnJvciI7CisgICAgaWYgKHR5
cGUgPT0gIndvcmQiKSBvdmVycmlkZSA9ICJ2YXJpYWJsZSI7CisgICAgZWxzZSBpZiAodHlwZSAh
PSAidmFyaWFibGUiICYmIHR5cGUgIT0gIigiICYmIHR5cGUgIT0gIikiKSBvdmVycmlkZSA9ICJl
cnJvciI7CiAgICAgcmV0dXJuICJpbnRlcnBvbGF0aW9uIjsKICAgfTsKIAogICByZXR1cm4gewog
ICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2UpIHsKICAgICAgIHJldHVybiB7dG9rZW5pemU6
IG51bGwsCi0gICAgICAgICAgICAgIHN0YXRlOiAidG9wIiwKLSAgICAgICAgICAgICAgY29udGV4
dDogbmV3IENvbnRleHQoInRvcCIsIGJhc2UgfHwgMCwgbnVsbCl9OworICAgICAgICAgICAgICBz
dGF0ZTogcGFyc2VyQ29uZmlnLmlubGluZSA/ICJibG9jayIgOiAidG9wIiwKKyAgICAgICAgICAg
ICAgc3RhdGVBcmc6IG51bGwsCisgICAgICAgICAgICAgIGNvbnRleHQ6IG5ldyBDb250ZXh0KHBh
cnNlckNvbmZpZy5pbmxpbmUgPyAiYmxvY2siIDogInRvcCIsIGJhc2UgfHwgMCwgbnVsbCl9Owog
ICAgIH0sCiAKICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewpAQCAtMzI5LDkg
KzM2NSw5IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBw
YXJzZXJDb25maWcpIHsKICAgICAgIHZhciBpbmRlbnQgPSBjeC5pbmRlbnQ7CiAgICAgICBpZiAo
Y3gudHlwZSA9PSAicHJvcCIgJiYgKGNoID09ICJ9IiB8fCBjaCA9PSAiKSIpKSBjeCA9IGN4LnBy
ZXY7CiAgICAgICBpZiAoY3gucHJldiAmJgotICAgICAgICAgIChjaCA9PSAifSIgJiYgKGN4LnR5
cGUgPT0gImJsb2NrIiB8fCBjeC50eXBlID09ICJ0b3AiIHx8IGN4LnR5cGUgPT0gImludGVycG9s
YXRpb24iIHx8IGN4LnR5cGUgPT0gImZvbnRfZmFjZSIpIHx8Ci0gICAgICAgICAgIGNoID09ICIp
IiAmJiAoY3gudHlwZSA9PSAicGFyZW5zIiB8fCBjeC50eXBlID09ICJtZWRpYV9wYXJlbnMiKSB8
fAotICAgICAgICAgICBjaCA9PSAieyIgJiYgKGN4LnR5cGUgPT0gImF0IiB8fCBjeC50eXBlID09
ICJtZWRpYSIpKSkgeworICAgICAgICAgIChjaCA9PSAifSIgJiYgKGN4LnR5cGUgPT0gImJsb2Nr
IiB8fCBjeC50eXBlID09ICJ0b3AiIHx8IGN4LnR5cGUgPT0gImludGVycG9sYXRpb24iIHx8IGN4
LnR5cGUgPT0gInJlc3RyaWN0ZWRfYXRCbG9jayIpIHx8CisgICAgICAgICAgIGNoID09ICIpIiAm
JiAoY3gudHlwZSA9PSAicGFyZW5zIiB8fCBjeC50eXBlID09ICJhdEJsb2NrX3BhcmVucyIpIHx8
CisgICAgICAgICAgIGNoID09ICJ7IiAmJiAoY3gudHlwZSA9PSAiYXQiIHx8IGN4LnR5cGUgPT0g
ImF0QmxvY2siKSkpIHsKICAgICAgICAgaW5kZW50ID0gY3guaW5kZW50IC0gaW5kZW50VW5pdDsK
ICAgICAgICAgY3ggPSBjeC5wcmV2OwogICAgICAgfQpAQCAtMzUzLDYgKzM4OSwxMCBAQCBDb2Rl
TWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CiAgICAgcmV0dXJuIGtleXM7CiAgIH0KIAorICB2YXIgZG9jdW1lbnRUeXBlc18gPSBbCisgICAg
ImRvbWFpbiIsICJyZWdleHAiLCAidXJsIiwgInVybC1wcmVmaXgiCisgIF0sIGRvY3VtZW50VHlw
ZXMgPSBrZXlTZXQoZG9jdW1lbnRUeXBlc18pOworCiAgIHZhciBtZWRpYVR5cGVzXyA9IFsKICAg
ICAiYWxsIiwgImF1cmFsIiwgImJyYWlsbGUiLCAiaGFuZGhlbGQiLCAicHJpbnQiLCAicHJvamVj
dGlvbiIsICJzY3JlZW4iLAogICAgICJ0dHkiLCAidHYiLCAiZW1ib3NzZWQiCkBAIC0zNjYsOSAr
NDA2LDE2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBw
YXJzZXJDb25maWcpIHsKICAgICAibWluLWRldmljZS1hc3BlY3QtcmF0aW8iLCAibWF4LWRldmlj
ZS1hc3BlY3QtcmF0aW8iLCAiY29sb3IiLCAibWluLWNvbG9yIiwKICAgICAibWF4LWNvbG9yIiwg
ImNvbG9yLWluZGV4IiwgIm1pbi1jb2xvci1pbmRleCIsICJtYXgtY29sb3ItaW5kZXgiLAogICAg
ICJtb25vY2hyb21lIiwgIm1pbi1tb25vY2hyb21lIiwgIm1heC1tb25vY2hyb21lIiwgInJlc29s
dXRpb24iLAotICAgICJtaW4tcmVzb2x1dGlvbiIsICJtYXgtcmVzb2x1dGlvbiIsICJzY2FuIiwg
ImdyaWQiCisgICAgIm1pbi1yZXNvbHV0aW9uIiwgIm1heC1yZXNvbHV0aW9uIiwgInNjYW4iLCAi
Z3JpZCIsICJvcmllbnRhdGlvbiIsCisgICAgImRldmljZS1waXhlbC1yYXRpbyIsICJtaW4tZGV2
aWNlLXBpeGVsLXJhdGlvIiwgIm1heC1kZXZpY2UtcGl4ZWwtcmF0aW8iLAorICAgICJwb2ludGVy
IiwgImFueS1wb2ludGVyIiwgImhvdmVyIiwgImFueS1ob3ZlciIKICAgXSwgbWVkaWFGZWF0dXJl
cyA9IGtleVNldChtZWRpYUZlYXR1cmVzXyk7CiAKKyAgdmFyIG1lZGlhVmFsdWVLZXl3b3Jkc18g
PSBbCisgICAgImxhbmRzY2FwZSIsICJwb3J0cmFpdCIsICJub25lIiwgImNvYXJzZSIsICJmaW5l
IiwgIm9uLWRlbWFuZCIsICJob3ZlciIsCisgICAgImludGVybGFjZSIsICJwcm9ncmVzc2l2ZSIK
KyAgXSwgbWVkaWFWYWx1ZUtleXdvcmRzID0ga2V5U2V0KG1lZGlhVmFsdWVLZXl3b3Jkc18pOwor
CiAgIHZhciBwcm9wZXJ0eUtleXdvcmRzXyA9IFsKICAgICAiYWxpZ24tY29udGVudCIsICJhbGln
bi1pdGVtcyIsICJhbGlnbi1zZWxmIiwgImFsaWdubWVudC1hZGp1c3QiLAogICAgICJhbGlnbm1l
bnQtYmFzZWxpbmUiLCAiYW5jaG9yLXBvaW50IiwgImFuaW1hdGlvbiIsICJhbmltYXRpb24tZGVs
YXkiLApAQCAtNDYxLDEzICs1MDgsMjMgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBm
dW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICJnbHlwaC1vcmllbnRhdGlvbi12
ZXJ0aWNhbCIsICJ0ZXh0LWFuY2hvciIsICJ3cml0aW5nLW1vZGUiCiAgIF0sIHByb3BlcnR5S2V5
d29yZHMgPSBrZXlTZXQocHJvcGVydHlLZXl3b3Jkc18pOwogCi0gIHZhciBub25TdGFuZGFyZFBy
b3BlcnR5S2V5d29yZHMgPSBbCisgIHZhciBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHNfID0g
WwogICAgICJzY3JvbGxiYXItYXJyb3ctY29sb3IiLCAic2Nyb2xsYmFyLWJhc2UtY29sb3IiLCAi
c2Nyb2xsYmFyLWRhcmstc2hhZG93LWNvbG9yIiwKICAgICAic2Nyb2xsYmFyLWZhY2UtY29sb3Ii
LCAic2Nyb2xsYmFyLWhpZ2hsaWdodC1jb2xvciIsICJzY3JvbGxiYXItc2hhZG93LWNvbG9yIiwK
ICAgICAic2Nyb2xsYmFyLTNkLWxpZ2h0LWNvbG9yIiwgInNjcm9sbGJhci10cmFjay1jb2xvciIs
ICJzaGFwZS1pbnNpZGUiLAogICAgICJzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uIiwgInNlYXJj
aGZpZWxkLWRlY29yYXRpb24iLCAic2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b24iLAogICAgICJz
ZWFyY2hmaWVsZC1yZXN1bHRzLWRlY29yYXRpb24iLCAiem9vbSIKLSAgXSwgbm9uU3RhbmRhcmRQ
cm9wZXJ0eUtleXdvcmRzID0ga2V5U2V0KG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkcyk7Cisg
IF0sIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3JkcyA9IGtleVNldChub25TdGFuZGFyZFByb3Bl
cnR5S2V5d29yZHNfKTsKKworICB2YXIgZm9udFByb3BlcnRpZXNfID0gWworICAgICJmb250LWZh
bWlseSIsICJzcmMiLCAidW5pY29kZS1yYW5nZSIsICJmb250LXZhcmlhbnQiLCAiZm9udC1mZWF0
dXJlLXNldHRpbmdzIiwKKyAgICAiZm9udC1zdHJldGNoIiwgImZvbnQtd2VpZ2h0IiwgImZvbnQt
c3R5bGUiCisgIF0sIGZvbnRQcm9wZXJ0aWVzID0ga2V5U2V0KGZvbnRQcm9wZXJ0aWVzXyk7CisK
KyAgdmFyIGNvdW50ZXJEZXNjcmlwdG9yc18gPSBbCisgICAgImFkZGl0aXZlLXN5bWJvbHMiLCAi
ZmFsbGJhY2siLCAibmVnYXRpdmUiLCAicGFkIiwgInByZWZpeCIsICJyYW5nZSIsCisgICAgInNw
ZWFrLWFzIiwgInN1ZmZpeCIsICJzeW1ib2xzIiwgInN5c3RlbSIKKyAgXSwgY291bnRlckRlc2Ny
aXB0b3JzID0ga2V5U2V0KGNvdW50ZXJEZXNjcmlwdG9yc18pOwogCiAgIHZhciBjb2xvcktleXdv
cmRzXyA9IFsKICAgICAiYWxpY2VibHVlIiwgImFudGlxdWV3aGl0ZSIsICJhcXVhIiwgImFxdWFt
YXJpbmUiLCAiYXp1cmUiLCAiYmVpZ2UiLApAQCAtNDkxLDU0ICs1NDgsNTcgQEAgQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAg
ICJuYXZham93aGl0ZSIsICJuYXZ5IiwgIm9sZGxhY2UiLCAib2xpdmUiLCAib2xpdmVkcmFiIiwg
Im9yYW5nZSIsICJvcmFuZ2VyZWQiLAogICAgICJvcmNoaWQiLCAicGFsZWdvbGRlbnJvZCIsICJw
YWxlZ3JlZW4iLCAicGFsZXR1cnF1b2lzZSIsICJwYWxldmlvbGV0cmVkIiwKICAgICAicGFwYXlh
d2hpcCIsICJwZWFjaHB1ZmYiLCAicGVydSIsICJwaW5rIiwgInBsdW0iLCAicG93ZGVyYmx1ZSIs
Ci0gICAgInB1cnBsZSIsICJyZWJlY2NhcHVycGxlIiwgInJlZCIsICJyb3N5YnJvd24iLCAicm95
YWxibHVlIiwgInNhZGRsZWJyb3duIiwgInNhbG1vbiIsCi0gICAgInNhbmR5YnJvd24iLCAic2Vh
Z3JlZW4iLCAic2Vhc2hlbGwiLCAic2llbm5hIiwgInNpbHZlciIsICJza3libHVlIiwKKyAgICAi
cHVycGxlIiwgInJlYmVjY2FwdXJwbGUiLCAicmVkIiwgInJvc3licm93biIsICJyb3lhbGJsdWUi
LCAic2FkZGxlYnJvd24iLAorICAgICJzYWxtb24iLCAic2FuZHlicm93biIsICJzZWFncmVlbiIs
ICJzZWFzaGVsbCIsICJzaWVubmEiLCAic2lsdmVyIiwgInNreWJsdWUiLAogICAgICJzbGF0ZWJs
dWUiLCAic2xhdGVncmF5IiwgInNub3ciLCAic3ByaW5nZ3JlZW4iLCAic3RlZWxibHVlIiwgInRh
biIsCiAgICAgInRlYWwiLCAidGhpc3RsZSIsICJ0b21hdG8iLCAidHVycXVvaXNlIiwgInZpb2xl
dCIsICJ3aGVhdCIsICJ3aGl0ZSIsCiAgICAgIndoaXRlc21va2UiLCAieWVsbG93IiwgInllbGxv
d2dyZWVuIgogICBdLCBjb2xvcktleXdvcmRzID0ga2V5U2V0KGNvbG9yS2V5d29yZHNfKTsKIAog
ICB2YXIgdmFsdWVLZXl3b3Jkc18gPSBbCi0gICAgImFib3ZlIiwgImFic29sdXRlIiwgImFjdGl2
ZWJvcmRlciIsICJhY3RpdmVjYXB0aW9uIiwgImFmYXIiLAotICAgICJhZnRlci13aGl0ZS1zcGFj
ZSIsICJhaGVhZCIsICJhbGlhcyIsICJhbGwiLCAiYWxsLXNjcm9sbCIsICJhbHRlcm5hdGUiLAor
ICAgICJhYm92ZSIsICJhYnNvbHV0ZSIsICJhY3RpdmVib3JkZXIiLCAiYWRkaXRpdmUiLCAiYWN0
aXZlY2FwdGlvbiIsICJhZmFyIiwKKyAgICAiYWZ0ZXItd2hpdGUtc3BhY2UiLCAiYWhlYWQiLCAi
YWxpYXMiLCAiYWxsIiwgImFsbC1zY3JvbGwiLCAiYWxwaGFiZXRpYyIsICJhbHRlcm5hdGUiLAog
ICAgICJhbHdheXMiLCAiYW1oYXJpYyIsICJhbWhhcmljLWFiZWdlZGUiLCAiYW50aWFsaWFzZWQi
LCAiYXBwd29ya3NwYWNlIiwKLSAgICAiYXJhYmljLWluZGljIiwgImFybWVuaWFuIiwgImFzdGVy
aXNrcyIsICJhdXRvIiwgImF2b2lkIiwgImF2b2lkLWNvbHVtbiIsICJhdm9pZC1wYWdlIiwKKyAg
ICAiYXJhYmljLWluZGljIiwgImFybWVuaWFuIiwgImFzdGVyaXNrcyIsICJhdHRyIiwgImF1dG8i
LCAiYXZvaWQiLCAiYXZvaWQtY29sdW1uIiwgImF2b2lkLXBhZ2UiLAogICAgICJhdm9pZC1yZWdp
b24iLCAiYmFja2dyb3VuZCIsICJiYWNrd2FyZHMiLCAiYmFzZWxpbmUiLCAiYmVsb3ciLCAiYmlk
aS1vdmVycmlkZSIsICJiaW5hcnkiLAogICAgICJiZW5nYWxpIiwgImJsaW5rIiwgImJsb2NrIiwg
ImJsb2NrLWF4aXMiLCAiYm9sZCIsICJib2xkZXIiLCAiYm9yZGVyIiwgImJvcmRlci1ib3giLAot
ICAgICJib3RoIiwgImJvdHRvbSIsICJicmVhayIsICJicmVhay1hbGwiLCAiYnJlYWstd29yZCIs
ICJidXR0b24iLCAiYnV0dG9uLWJldmVsIiwKLSAgICAiYnV0dG9uZmFjZSIsICJidXR0b25oaWdo
bGlnaHQiLCAiYnV0dG9uc2hhZG93IiwgImJ1dHRvbnRleHQiLCAiY2FtYm9kaWFuIiwKKyAgICAi
Ym90aCIsICJib3R0b20iLCAiYnJlYWsiLCAiYnJlYWstYWxsIiwgImJyZWFrLXdvcmQiLCAiYnVs
bGV0cyIsICJidXR0b24iLCAiYnV0dG9uLWJldmVsIiwKKyAgICAiYnV0dG9uZmFjZSIsICJidXR0
b25oaWdobGlnaHQiLCAiYnV0dG9uc2hhZG93IiwgImJ1dHRvbnRleHQiLCAiY2FsYyIsICJjYW1i
b2RpYW4iLAogICAgICJjYXBpdGFsaXplIiwgImNhcHMtbG9jay1pbmRpY2F0b3IiLCAiY2FwdGlv
biIsICJjYXB0aW9udGV4dCIsICJjYXJldCIsCi0gICAgImNlbGwiLCAiY2VudGVyIiwgImNoZWNr
Ym94IiwgImNpcmNsZSIsICJjamstZWFydGhseS1icmFuY2giLAorICAgICJjZWxsIiwgImNlbnRl
ciIsICJjaGVja2JveCIsICJjaXJjbGUiLCAiY2prLWRlY2ltYWwiLCAiY2prLWVhcnRobHktYnJh
bmNoIiwKICAgICAiY2prLWhlYXZlbmx5LXN0ZW0iLCAiY2prLWlkZW9ncmFwaGljIiwgImNsZWFy
IiwgImNsaXAiLCAiY2xvc2UtcXVvdGUiLAotICAgICJjb2wtcmVzaXplIiwgImNvbGxhcHNlIiwg
ImNvbHVtbiIsICJjb21wYWN0IiwgImNvbmRlbnNlZCIsICJjb250YWluIiwgImNvbnRlbnQiLAot
ICAgICJjb250ZW50LWJveCIsICJjb250ZXh0LW1lbnUiLCAiY29udGludW91cyIsICJjb3B5Iiwg
ImNvdmVyIiwgImNyb3AiLAotICAgICJjcm9zcyIsICJjcm9zc2hhaXIiLCAiY3VycmVudGNvbG9y
IiwgImN1cnNpdmUiLCAiZGFzaGVkIiwgImRlY2ltYWwiLAorICAgICJjb2wtcmVzaXplIiwgImNv
bGxhcHNlIiwgImNvbHVtbiIsICJjb2x1bW4tcmV2ZXJzZSIsICJjb21wYWN0IiwgImNvbmRlbnNl
ZCIsICJjb250YWluIiwgImNvbnRlbnQiLAorICAgICJjb250ZW50LWJveCIsICJjb250ZXh0LW1l
bnUiLCAiY29udGludW91cyIsICJjb3B5IiwgImNvdW50ZXIiLCAiY291bnRlcnMiLCAiY292ZXIi
LCAiY3JvcCIsCisgICAgImNyb3NzIiwgImNyb3NzaGFpciIsICJjdXJyZW50Y29sb3IiLCAiY3Vy
c2l2ZSIsICJjeWNsaWMiLCAiZGFzaGVkIiwgImRlY2ltYWwiLAogICAgICJkZWNpbWFsLWxlYWRp
bmctemVybyIsICJkZWZhdWx0IiwgImRlZmF1bHQtYnV0dG9uIiwgImRlc3RpbmF0aW9uLWF0b3Ai
LAogICAgICJkZXN0aW5hdGlvbi1pbiIsICJkZXN0aW5hdGlvbi1vdXQiLCAiZGVzdGluYXRpb24t
b3ZlciIsICJkZXZhbmFnYXJpIiwKLSAgICAiZGlzYyIsICJkaXNjYXJkIiwgImRvY3VtZW50Iiwg
ImRvdC1kYXNoIiwgImRvdC1kb3QtZGFzaCIsICJkb3R0ZWQiLAotICAgICJkb3VibGUiLCAiZG93
biIsICJlLXJlc2l6ZSIsICJlYXNlIiwgImVhc2UtaW4iLCAiZWFzZS1pbi1vdXQiLCAiZWFzZS1v
dXQiLAorICAgICJkaXNjIiwgImRpc2NhcmQiLCAiZGlzY2xvc3VyZS1jbG9zZWQiLCAiZGlzY2xv
c3VyZS1vcGVuIiwgImRvY3VtZW50IiwKKyAgICAiZG90LWRhc2giLCAiZG90LWRvdC1kYXNoIiwK
KyAgICAiZG90dGVkIiwgImRvdWJsZSIsICJkb3duIiwgImUtcmVzaXplIiwgImVhc2UiLCAiZWFz
ZS1pbiIsICJlYXNlLWluLW91dCIsICJlYXNlLW91dCIsCiAgICAgImVsZW1lbnQiLCAiZWxsaXBz
ZSIsICJlbGxpcHNpcyIsICJlbWJlZCIsICJlbmQiLCAiZXRoaW9waWMiLCAiZXRoaW9waWMtYWJl
Z2VkZSIsCiAgICAgImV0aGlvcGljLWFiZWdlZGUtYW0tZXQiLCAiZXRoaW9waWMtYWJlZ2VkZS1n
ZXoiLCAiZXRoaW9waWMtYWJlZ2VkZS10aS1lciIsCiAgICAgImV0aGlvcGljLWFiZWdlZGUtdGkt
ZXQiLCAiZXRoaW9waWMtaGFsZWhhbWUtYWEtZXIiLAogICAgICJldGhpb3BpYy1oYWxlaGFtZS1h
YS1ldCIsICJldGhpb3BpYy1oYWxlaGFtZS1hbS1ldCIsCiAgICAgImV0aGlvcGljLWhhbGVoYW1l
LWdleiIsICJldGhpb3BpYy1oYWxlaGFtZS1vbS1ldCIsCiAgICAgImV0aGlvcGljLWhhbGVoYW1l
LXNpZC1ldCIsICJldGhpb3BpYy1oYWxlaGFtZS1zby1ldCIsCi0gICAgImV0aGlvcGljLWhhbGVo
YW1lLXRpLWVyIiwgImV0aGlvcGljLWhhbGVoYW1lLXRpLWV0IiwKLSAgICAiZXRoaW9waWMtaGFs
ZWhhbWUtdGlnIiwgImV3LXJlc2l6ZSIsICJleHBhbmRlZCIsICJleHRyYS1jb25kZW5zZWQiLAot
ICAgICJleHRyYS1leHBhbmRlZCIsICJmYW50YXN5IiwgImZhc3QiLCAiZmlsbCIsICJmaXhlZCIs
ICJmbGF0IiwgImZvb3Rub3RlcyIsCisgICAgImV0aGlvcGljLWhhbGVoYW1lLXRpLWVyIiwgImV0
aGlvcGljLWhhbGVoYW1lLXRpLWV0IiwgImV0aGlvcGljLWhhbGVoYW1lLXRpZyIsCisgICAgImV0
aGlvcGljLW51bWVyaWMiLCAiZXctcmVzaXplIiwgImV4cGFuZGVkIiwgImV4dGVuZHMiLCAiZXh0
cmEtY29uZGVuc2VkIiwKKyAgICAiZXh0cmEtZXhwYW5kZWQiLCAiZmFudGFzeSIsICJmYXN0Iiwg
ImZpbGwiLCAiZml4ZWQiLCAiZmxhdCIsICJmbGV4IiwgImZvb3Rub3RlcyIsCiAgICAgImZvcndh
cmRzIiwgImZyb20iLCAiZ2VvbWV0cmljUHJlY2lzaW9uIiwgImdlb3JnaWFuIiwgImdyYXl0ZXh0
IiwgImdyb292ZSIsCiAgICAgImd1amFyYXRpIiwgImd1cm11a2hpIiwgImhhbmQiLCAiaGFuZ3Vs
IiwgImhhbmd1bC1jb25zb25hbnQiLCAiaGVicmV3IiwKICAgICAiaGVscCIsICJoaWRkZW4iLCAi
aGlkZSIsICJoaWdoZXIiLCAiaGlnaGxpZ2h0IiwgImhpZ2hsaWdodHRleHQiLAogICAgICJoaXJh
Z2FuYSIsICJoaXJhZ2FuYS1pcm9oYSIsICJob3Jpem9udGFsIiwgImhzbCIsICJoc2xhIiwgImlj
b24iLCAiaWdub3JlIiwKICAgICAiaW5hY3RpdmVib3JkZXIiLCAiaW5hY3RpdmVjYXB0aW9uIiwg
ImluYWN0aXZlY2FwdGlvbnRleHQiLCAiaW5maW5pdGUiLAogICAgICJpbmZvYmFja2dyb3VuZCIs
ICJpbmZvdGV4dCIsICJpbmhlcml0IiwgImluaXRpYWwiLCAiaW5saW5lIiwgImlubGluZS1heGlz
IiwKLSAgICAiaW5saW5lLWJsb2NrIiwgImlubGluZS10YWJsZSIsICJpbnNldCIsICJpbnNpZGUi
LCAiaW50cmluc2ljIiwgImludmVydCIsCi0gICAgIml0YWxpYyIsICJqdXN0aWZ5IiwgImthbm5h
ZGEiLCAia2F0YWthbmEiLCAia2F0YWthbmEtaXJvaGEiLCAia2VlcC1hbGwiLCAia2htZXIiLAor
ICAgICJpbmxpbmUtYmxvY2siLCAiaW5saW5lLWZsZXgiLCAiaW5saW5lLXRhYmxlIiwgImluc2V0
IiwgImluc2lkZSIsICJpbnRyaW5zaWMiLCAiaW52ZXJ0IiwKKyAgICAiaXRhbGljIiwgImphcGFu
ZXNlLWZvcm1hbCIsICJqYXBhbmVzZS1pbmZvcm1hbCIsICJqdXN0aWZ5IiwgImthbm5hZGEiLAor
ICAgICJrYXRha2FuYSIsICJrYXRha2FuYS1pcm9oYSIsICJrZWVwLWFsbCIsICJraG1lciIsCisg
ICAgImtvcmVhbi1oYW5ndWwtZm9ybWFsIiwgImtvcmVhbi1oYW5qYS1mb3JtYWwiLCAia29yZWFu
LWhhbmphLWluZm9ybWFsIiwKICAgICAibGFuZHNjYXBlIiwgImxhbyIsICJsYXJnZSIsICJsYXJn
ZXIiLCAibGVmdCIsICJsZXZlbCIsICJsaWdodGVyIiwKLSAgICAibGluZS10aHJvdWdoIiwgImxp
bmVhciIsICJsaW5lcyIsICJsaXN0LWl0ZW0iLCAibGlzdGJveCIsICJsaXN0aXRlbSIsCisgICAg
ImxpbmUtdGhyb3VnaCIsICJsaW5lYXIiLCAibGluZWFyLWdyYWRpZW50IiwgImxpbmVzIiwgImxp
c3QtaXRlbSIsICJsaXN0Ym94IiwgImxpc3RpdGVtIiwKICAgICAibG9jYWwiLCAibG9naWNhbCIs
ICJsb3VkIiwgImxvd2VyIiwgImxvd2VyLWFscGhhIiwgImxvd2VyLWFybWVuaWFuIiwKICAgICAi
bG93ZXItZ3JlZWsiLCAibG93ZXItaGV4YWRlY2ltYWwiLCAibG93ZXItbGF0aW4iLCAibG93ZXIt
bm9yd2VnaWFuIiwKLSAgICAibG93ZXItcm9tYW4iLCAibG93ZXJjYXNlIiwgImx0ciIsICJtYWxh
eWFsYW0iLCAibWF0Y2giLAorICAgICJsb3dlci1yb21hbiIsICJsb3dlcmNhc2UiLCAibHRyIiwg
Im1hbGF5YWxhbSIsICJtYXRjaCIsICJtYXRyaXgiLCAibWF0cml4M2QiLAogICAgICJtZWRpYS1j
b250cm9scy1iYWNrZ3JvdW5kIiwgIm1lZGlhLWN1cnJlbnQtdGltZS1kaXNwbGF5IiwKICAgICAi
bWVkaWEtZnVsbHNjcmVlbi1idXR0b24iLCAibWVkaWEtbXV0ZS1idXR0b24iLCAibWVkaWEtcGxh
eS1idXR0b24iLAogICAgICJtZWRpYS1yZXR1cm4tdG8tcmVhbHRpbWUtYnV0dG9uIiwgIm1lZGlh
LXJld2luZC1idXR0b24iLApAQCAtNTUwLDQ2ICs2MTAsNTAgQEAgQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICJtaXgiLCAi
bW9uZ29saWFuIiwgIm1vbm9zcGFjZSIsICJtb3ZlIiwgIm11bHRpcGxlIiwgIm15YW5tYXIiLCAi
bi1yZXNpemUiLAogICAgICJuYXJyb3dlciIsICJuZS1yZXNpemUiLCAibmVzdy1yZXNpemUiLCAi
bm8tY2xvc2UtcXVvdGUiLCAibm8tZHJvcCIsCiAgICAgIm5vLW9wZW4tcXVvdGUiLCAibm8tcmVw
ZWF0IiwgIm5vbmUiLCAibm9ybWFsIiwgIm5vdC1hbGxvd2VkIiwgIm5vd3JhcCIsCi0gICAgIm5z
LXJlc2l6ZSIsICJudy1yZXNpemUiLCAibndzZS1yZXNpemUiLCAib2JsaXF1ZSIsICJvY3RhbCIs
ICJvcGVuLXF1b3RlIiwKKyAgICAibnMtcmVzaXplIiwgIm51bWJlcnMiLCAibnVtZXJpYyIsICJu
dy1yZXNpemUiLCAibndzZS1yZXNpemUiLCAib2JsaXF1ZSIsICJvY3RhbCIsICJvcGVuLXF1b3Rl
IiwKICAgICAib3B0aW1pemVMZWdpYmlsaXR5IiwgIm9wdGltaXplU3BlZWQiLCAib3JpeWEiLCAi
b3JvbW8iLCAib3V0c2V0IiwKICAgICAib3V0c2lkZSIsICJvdXRzaWRlLXNoYXBlIiwgIm92ZXJs
YXkiLCAib3ZlcmxpbmUiLCAicGFkZGluZyIsICJwYWRkaW5nLWJveCIsCi0gICAgInBhaW50ZWQi
LCAicGFnZSIsICJwYXVzZWQiLCAicGVyc2lhbiIsICJwbHVzLWRhcmtlciIsICJwbHVzLWxpZ2h0
ZXIiLCAicG9pbnRlciIsCi0gICAgInBvbHlnb24iLCAicG9ydHJhaXQiLCAicHJlIiwgInByZS1s
aW5lIiwgInByZS13cmFwIiwgInByZXNlcnZlLTNkIiwgInByb2dyZXNzIiwgInB1c2gtYnV0dG9u
IiwKLSAgICAicmFkaW8iLCAicmVhZC1vbmx5IiwgInJlYWQtd3JpdGUiLCAicmVhZC13cml0ZS1w
bGFpbnRleHQtb25seSIsICJyZWN0YW5nbGUiLCAicmVnaW9uIiwKLSAgICAicmVsYXRpdmUiLCAi
cmVwZWF0IiwgInJlcGVhdC14IiwgInJlcGVhdC15IiwgInJlc2V0IiwgInJldmVyc2UiLCAicmdi
IiwgInJnYmEiLAotICAgICJyaWRnZSIsICJyaWdodCIsICJyb3VuZCIsICJyb3ctcmVzaXplIiwg
InJ0bCIsICJydW4taW4iLCAicnVubmluZyIsCi0gICAgInMtcmVzaXplIiwgInNhbnMtc2VyaWYi
LCAic2Nyb2xsIiwgInNjcm9sbGJhciIsICJzZS1yZXNpemUiLCAic2VhcmNoZmllbGQiLAorICAg
ICJwYWludGVkIiwgInBhZ2UiLCAicGF1c2VkIiwgInBlcnNpYW4iLCAicGVyc3BlY3RpdmUiLCAi
cGx1cy1kYXJrZXIiLCAicGx1cy1saWdodGVyIiwKKyAgICAicG9pbnRlciIsICJwb2x5Z29uIiwg
InBvcnRyYWl0IiwgInByZSIsICJwcmUtbGluZSIsICJwcmUtd3JhcCIsICJwcmVzZXJ2ZS0zZCIs
CisgICAgInByb2dyZXNzIiwgInB1c2gtYnV0dG9uIiwgInJhZGlhbC1ncmFkaWVudCIsICJyYWRp
byIsICJyZWFkLW9ubHkiLAorICAgICJyZWFkLXdyaXRlIiwgInJlYWQtd3JpdGUtcGxhaW50ZXh0
LW9ubHkiLCAicmVjdGFuZ2xlIiwgInJlZ2lvbiIsCisgICAgInJlbGF0aXZlIiwgInJlcGVhdCIs
ICJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50IiwKKyAgICAicmVwZWF0aW5nLXJhZGlhbC1ncmFk
aWVudCIsICJyZXBlYXQteCIsICJyZXBlYXQteSIsICJyZXNldCIsICJyZXZlcnNlIiwKKyAgICAi
cmdiIiwgInJnYmEiLCAicmlkZ2UiLCAicmlnaHQiLCAicm90YXRlIiwgInJvdGF0ZTNkIiwgInJv
dGF0ZVgiLCAicm90YXRlWSIsCisgICAgInJvdGF0ZVoiLCAicm91bmQiLCAicm93IiwgInJvdy1y
ZXNpemUiLCAicm93LXJldmVyc2UiLCAicnRsIiwgInJ1bi1pbiIsICJydW5uaW5nIiwKKyAgICAi
cy1yZXNpemUiLCAic2Fucy1zZXJpZiIsICJzY2FsZSIsICJzY2FsZTNkIiwgInNjYWxlWCIsICJz
Y2FsZVkiLCAic2NhbGVaIiwKKyAgICAic2Nyb2xsIiwgInNjcm9sbGJhciIsICJzZS1yZXNpemUi
LCAic2VhcmNoZmllbGQiLAogICAgICJzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uIiwgInNlYXJj
aGZpZWxkLWRlY29yYXRpb24iLAogICAgICJzZWFyY2hmaWVsZC1yZXN1bHRzLWJ1dHRvbiIsICJz
ZWFyY2hmaWVsZC1yZXN1bHRzLWRlY29yYXRpb24iLAogICAgICJzZW1pLWNvbmRlbnNlZCIsICJz
ZW1pLWV4cGFuZGVkIiwgInNlcGFyYXRlIiwgInNlcmlmIiwgInNob3ciLCAic2lkYW1hIiwKLSAg
ICAic2luZ2xlIiwgInNraXAtd2hpdGUtc3BhY2UiLCAic2xpZGUiLCAic2xpZGVyLWhvcml6b250
YWwiLAorICAgICJzaW1wLWNoaW5lc2UtZm9ybWFsIiwgInNpbXAtY2hpbmVzZS1pbmZvcm1hbCIs
ICJzaW5nbGUiLAorICAgICJza2V3IiwgInNrZXdYIiwgInNrZXdZIiwgInNraXAtd2hpdGUtc3Bh
Y2UiLCAic2xpZGUiLCAic2xpZGVyLWhvcml6b250YWwiLAogICAgICJzbGlkZXItdmVydGljYWwi
LCAic2xpZGVydGh1bWItaG9yaXpvbnRhbCIsICJzbGlkZXJ0aHVtYi12ZXJ0aWNhbCIsICJzbG93
IiwKICAgICAic21hbGwiLCAic21hbGwtY2FwcyIsICJzbWFsbC1jYXB0aW9uIiwgInNtYWxsZXIi
LCAic29saWQiLCAic29tYWxpIiwKLSAgICAic291cmNlLWF0b3AiLCAic291cmNlLWluIiwgInNv
dXJjZS1vdXQiLCAic291cmNlLW92ZXIiLCAic3BhY2UiLCAic3F1YXJlIiwKLSAgICAic3F1YXJl
LWJ1dHRvbiIsICJzdGFydCIsICJzdGF0aWMiLCAic3RhdHVzLWJhciIsICJzdHJldGNoIiwgInN0
cm9rZSIsCi0gICAgInN1YiIsICJzdWJwaXhlbC1hbnRpYWxpYXNlZCIsICJzdXBlciIsICJzdy1y
ZXNpemUiLCAidGFibGUiLAorICAgICJzb3VyY2UtYXRvcCIsICJzb3VyY2UtaW4iLCAic291cmNl
LW91dCIsICJzb3VyY2Utb3ZlciIsICJzcGFjZSIsICJzcGVsbC1vdXQiLCAic3F1YXJlIiwKKyAg
ICAic3F1YXJlLWJ1dHRvbiIsICJzdGFydCIsICJzdGF0aWMiLCAic3RhdHVzLWJhciIsICJzdHJl
dGNoIiwgInN0cm9rZSIsICJzdWIiLAorICAgICJzdWJwaXhlbC1hbnRpYWxpYXNlZCIsICJzdXBl
ciIsICJzdy1yZXNpemUiLCAic3ltYm9saWMiLCAic3ltYm9scyIsICJ0YWJsZSIsCiAgICAgInRh
YmxlLWNhcHRpb24iLCAidGFibGUtY2VsbCIsICJ0YWJsZS1jb2x1bW4iLCAidGFibGUtY29sdW1u
LWdyb3VwIiwKICAgICAidGFibGUtZm9vdGVyLWdyb3VwIiwgInRhYmxlLWhlYWRlci1ncm91cCIs
ICJ0YWJsZS1yb3ciLCAidGFibGUtcm93LWdyb3VwIiwKKyAgICAidGFtaWwiLAogICAgICJ0ZWx1
Z3UiLCAidGV4dCIsICJ0ZXh0LWJvdHRvbSIsICJ0ZXh0LXRvcCIsICJ0ZXh0YXJlYSIsICJ0ZXh0
ZmllbGQiLCAidGhhaSIsCiAgICAgInRoaWNrIiwgInRoaW4iLCAidGhyZWVkZGFya3NoYWRvdyIs
ICJ0aHJlZWRmYWNlIiwgInRocmVlZGhpZ2hsaWdodCIsCiAgICAgInRocmVlZGxpZ2h0c2hhZG93
IiwgInRocmVlZHNoYWRvdyIsICJ0aWJldGFuIiwgInRpZ3JlIiwgInRpZ3JpbnlhLWVyIiwKICAg
ICAidGlncmlueWEtZXItYWJlZ2VkZSIsICJ0aWdyaW55YS1ldCIsICJ0aWdyaW55YS1ldC1hYmVn
ZWRlIiwgInRvIiwgInRvcCIsCisgICAgInRyYWQtY2hpbmVzZS1mb3JtYWwiLCAidHJhZC1jaGlu
ZXNlLWluZm9ybWFsIiwKKyAgICAidHJhbnNsYXRlIiwgInRyYW5zbGF0ZTNkIiwgInRyYW5zbGF0
ZVgiLCAidHJhbnNsYXRlWSIsICJ0cmFuc2xhdGVaIiwKICAgICAidHJhbnNwYXJlbnQiLCAidWx0
cmEtY29uZGVuc2VkIiwgInVsdHJhLWV4cGFuZGVkIiwgInVuZGVybGluZSIsICJ1cCIsCiAgICAg
InVwcGVyLWFscGhhIiwgInVwcGVyLWFybWVuaWFuIiwgInVwcGVyLWdyZWVrIiwgInVwcGVyLWhl
eGFkZWNpbWFsIiwKICAgICAidXBwZXItbGF0aW4iLCAidXBwZXItbm9yd2VnaWFuIiwgInVwcGVy
LXJvbWFuIiwgInVwcGVyY2FzZSIsICJ1cmR1IiwgInVybCIsCi0gICAgInZlcnRpY2FsIiwgInZl
cnRpY2FsLXRleHQiLCAidmlzaWJsZSIsICJ2aXNpYmxlRmlsbCIsICJ2aXNpYmxlUGFpbnRlZCIs
CisgICAgInZhciIsICJ2ZXJ0aWNhbCIsICJ2ZXJ0aWNhbC10ZXh0IiwgInZpc2libGUiLCAidmlz
aWJsZUZpbGwiLCAidmlzaWJsZVBhaW50ZWQiLAogICAgICJ2aXNpYmxlU3Ryb2tlIiwgInZpc3Vh
bCIsICJ3LXJlc2l6ZSIsICJ3YWl0IiwgIndhdmUiLCAid2lkZXIiLAotICAgICJ3aW5kb3ciLCAi
d2luZG93ZnJhbWUiLCAid2luZG93dGV4dCIsICJ4LWxhcmdlIiwgIngtc21hbGwiLCAieG9yIiwK
KyAgICAid2luZG93IiwgIndpbmRvd2ZyYW1lIiwgIndpbmRvd3RleHQiLCAid29yZHMiLCAieC1s
YXJnZSIsICJ4LXNtYWxsIiwgInhvciIsCiAgICAgInh4LWxhcmdlIiwgInh4LXNtYWxsIgogICBd
LCB2YWx1ZUtleXdvcmRzID0ga2V5U2V0KHZhbHVlS2V5d29yZHNfKTsKIAotICB2YXIgZm9udFBy
b3BlcnRpZXNfID0gWwotICAgICJmb250LWZhbWlseSIsICJzcmMiLCAidW5pY29kZS1yYW5nZSIs
ICJmb250LXZhcmlhbnQiLCAiZm9udC1mZWF0dXJlLXNldHRpbmdzIiwKLSAgICAiZm9udC1zdHJl
dGNoIiwgImZvbnQtd2VpZ2h0IiwgImZvbnQtc3R5bGUiCi0gIF0sIGZvbnRQcm9wZXJ0aWVzID0g
a2V5U2V0KGZvbnRQcm9wZXJ0aWVzXyk7Ci0KLSAgdmFyIGFsbFdvcmRzID0gbWVkaWFUeXBlc18u
Y29uY2F0KG1lZGlhRmVhdHVyZXNfKS5jb25jYXQocHJvcGVydHlLZXl3b3Jkc18pCi0gICAgLmNv
bmNhdChub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMpLmNvbmNhdChjb2xvcktleXdvcmRzXyku
Y29uY2F0KHZhbHVlS2V5d29yZHNfKTsKKyAgdmFyIGFsbFdvcmRzID0gZG9jdW1lbnRUeXBlc18u
Y29uY2F0KG1lZGlhVHlwZXNfKS5jb25jYXQobWVkaWFGZWF0dXJlc18pLmNvbmNhdChtZWRpYVZh
bHVlS2V5d29yZHNfKQorICAgIC5jb25jYXQocHJvcGVydHlLZXl3b3Jkc18pLmNvbmNhdChub25T
dGFuZGFyZFByb3BlcnR5S2V5d29yZHNfKS5jb25jYXQoY29sb3JLZXl3b3Jkc18pCisgICAgLmNv
bmNhdCh2YWx1ZUtleXdvcmRzXyk7CiAgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoImhpbnRX
b3JkcyIsICJjc3MiLCBhbGxXb3Jkcyk7CiAKICAgZnVuY3Rpb24gdG9rZW5DQ29tbWVudChzdHJl
YW0sIHN0YXRlKSB7CkBAIC02MDQsMzAgKzY2OCwxOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUo
ImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgcmV0dXJuIFsiY29t
bWVudCIsICJjb21tZW50Il07CiAgIH0KIAotICBmdW5jdGlvbiB0b2tlblNHTUxDb21tZW50KHN0
cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAoc3RyZWFtLnNraXBUbygiLS0+IikpIHsKLSAgICAgIHN0
cmVhbS5tYXRjaCgiLS0+Iik7Ci0gICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFsiY29t
bWVudCIsICJjb21tZW50Il07Ci0gIH0KLQogICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQv
Y3NzIiwgeworICAgIGRvY3VtZW50VHlwZXM6IGRvY3VtZW50VHlwZXMsCiAgICAgbWVkaWFUeXBl
czogbWVkaWFUeXBlcywKICAgICBtZWRpYUZlYXR1cmVzOiBtZWRpYUZlYXR1cmVzLAorICAgIG1l
ZGlhVmFsdWVLZXl3b3JkczogbWVkaWFWYWx1ZUtleXdvcmRzLAogICAgIHByb3BlcnR5S2V5d29y
ZHM6IHByb3BlcnR5S2V5d29yZHMsCiAgICAgbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzOiBu
b25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMsCisgICAgZm9udFByb3BlcnRpZXM6IGZvbnRQcm9w
ZXJ0aWVzLAorICAgIGNvdW50ZXJEZXNjcmlwdG9yczogY291bnRlckRlc2NyaXB0b3JzLAogICAg
IGNvbG9yS2V5d29yZHM6IGNvbG9yS2V5d29yZHMsCiAgICAgdmFsdWVLZXl3b3JkczogdmFsdWVL
ZXl3b3JkcywKLSAgICBmb250UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsCiAgICAgdG9rZW5I
b29rczogewotICAgICAgIjwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7Ci0gICAgICAgIGlm
ICghc3RyZWFtLm1hdGNoKCIhLS0iKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICBzdGF0ZS50b2tl
bml6ZSA9IHRva2VuU0dNTENvbW1lbnQ7Ci0gICAgICAgIHJldHVybiB0b2tlblNHTUxDb21tZW50
KHN0cmVhbSwgc3RhdGUpOwotICAgICAgfSwKICAgICAgICIvIjogZnVuY3Rpb24oc3RyZWFtLCBz
dGF0ZSkgewogICAgICAgICBpZiAoIXN0cmVhbS5lYXQoIioiKSkgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ0NvbW1lbnQ7CkBAIC02NDAsNiArNjkyLDcgQEAg
Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZp
ZykgewogICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1zY3NzIiwgewogICAgIG1lZGlh
VHlwZXM6IG1lZGlhVHlwZXMsCiAgICAgbWVkaWFGZWF0dXJlczogbWVkaWFGZWF0dXJlcywKKyAg
ICBtZWRpYVZhbHVlS2V5d29yZHM6IG1lZGlhVmFsdWVLZXl3b3JkcywKICAgICBwcm9wZXJ0eUtl
eXdvcmRzOiBwcm9wZXJ0eUtleXdvcmRzLAogICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jk
czogbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzLAogICAgIGNvbG9yS2V5d29yZHM6IGNvbG9y
S2V5d29yZHMsCkBAIC02NTksNyArNzEyLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3Mi
LCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgICB9CiAgICAgICB9LAog
ICAgICAgIjoiOiBmdW5jdGlvbihzdHJlYW0pIHsKLSAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgv
XHMqey8pKQorICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9ccypcey8pKQogICAgICAgICAgIHJl
dHVybiBbbnVsbCwgInsiXTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfSwKQEAgLTY4
MSw2ICs3MzQsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7CiAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWxlc3Mi
LCB7CiAgICAgbWVkaWFUeXBlczogbWVkaWFUeXBlcywKICAgICBtZWRpYUZlYXR1cmVzOiBtZWRp
YUZlYXR1cmVzLAorICAgIG1lZGlhVmFsdWVLZXl3b3JkczogbWVkaWFWYWx1ZUtleXdvcmRzLAog
ICAgIHByb3BlcnR5S2V5d29yZHM6IHByb3BlcnR5S2V5d29yZHMsCiAgICAgbm9uU3RhbmRhcmRQ
cm9wZXJ0eUtleXdvcmRzOiBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMsCiAgICAgY29sb3JL
ZXl3b3JkczogY29sb3JLZXl3b3JkcywKQEAgLTcwMCw2ICs3NTQsNyBAQCBDb2RlTWlycm9yLmRl
ZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICAg
IH0KICAgICAgIH0sCiAgICAgICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSkgeworICAgICAgICBpZiAo
c3RyZWFtLmVhdCgieyIpKSByZXR1cm4gW251bGwsICJpbnRlcnBvbGF0aW9uIl07CiAgICAgICAg
IGlmIChzdHJlYW0ubWF0Y2goL14oY2hhcnNldHxkb2N1bWVudHxmb250LWZhY2V8aW1wb3J0fCgt
KG1venxtc3xvfHdlYmtpdCktKT9rZXlmcmFtZXN8bWVkaWF8bmFtZXNwYWNlfHBhZ2V8c3VwcG9y
dHMpXGIvLCBmYWxzZSkpIHJldHVybiBmYWxzZTsKICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9b
XHdcXFwtXS8pOwogICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXHMqOi8sIGZhbHNlKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0Nv
ZGVNaXJyb3IvaHRtbG1peGVkLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9odG1sbWl4ZWQuanMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBt
b2RlIDEwMDc1NQppbmRleCBkYzQ4OTc4ZWIyZTg5YmZmOWJlZDAwZGFjMjA3YTQwMzFiODEzZjRi
Li4yNDU1MmUyZDgwNjE2N2RiZWQ1ODFhNTVhNGJkNDM4ODA1ZTI5M2Q2Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvaHRtbG1peGVk
LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0Nv
ZGVNaXJyb3IvaHRtbG1peGVkLmpzCkBAIC0zMCw2ICszMCw3IEBAIENvZGVNaXJyb3IuZGVmaW5l
TW9kZSgiaHRtbG1peGVkIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKIAogICBm
dW5jdGlvbiBodG1sKHN0cmVhbSwgc3RhdGUpIHsKICAgICB2YXIgdGFnTmFtZSA9IHN0YXRlLmh0
bWxTdGF0ZS50YWdOYW1lOworICAgIGlmICh0YWdOYW1lKSB0YWdOYW1lID0gdGFnTmFtZS50b0xv
d2VyQ2FzZSgpOwogICAgIHZhciBzdHlsZSA9IGh0bWxNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUu
aHRtbFN0YXRlKTsKICAgICBpZiAodGFnTmFtZSA9PSAic2NyaXB0IiAmJiAvXGJ0YWdcYi8udGVz
dChzdHlsZSkgJiYgc3RyZWFtLmN1cnJlbnQoKSA9PSAiPiIpIHsKICAgICAgIC8vIFNjcmlwdCBi
bG9jazogbW9kZSB0byBjaGFuZ2UgdG8gZGVwZW5kcyBvbiB0eXBlIGF0dHJpYnV0ZQpAQCAtNTYs
OSArNTcsOSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImh0bWxtaXhlZCIsIGZ1bmN0aW9uKGNv
bmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIH0KICAgZnVuY3Rpb24gbWF5YmVCYWNrdXAoc3RyZWFt
LCBwYXQsIHN0eWxlKSB7CiAgICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7Ci0gICAgdmFy
IGNsb3NlID0gY3VyLnNlYXJjaChwYXQpLCBtOworICAgIHZhciBjbG9zZSA9IGN1ci5zZWFyY2go
cGF0KTsKICAgICBpZiAoY2xvc2UgPiAtMSkgc3RyZWFtLmJhY2tVcChjdXIubGVuZ3RoIC0gY2xv
c2UpOwotICAgIGVsc2UgaWYgKG0gPSBjdXIubWF0Y2goLzxcLz8kLykpIHsKKyAgICBlbHNlIGlm
IChjdXIubWF0Y2goLzxcLz8kLykpIHsKICAgICAgIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCk7
CiAgICAgICBpZiAoIXN0cmVhbS5tYXRjaChwYXQsIGZhbHNlKSkgc3RyZWFtLm1hdGNoKGN1cik7
CiAgICAgfQpAQCAtNjgsNyArNjksNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImh0bWxtaXhl
ZCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgaWYgKHN0cmVhbS5tYXRj
aCgvXjxcL1xzKnNjcmlwdFxzKj4vaSwgZmFsc2UpKSB7CiAgICAgICBzdGF0ZS50b2tlbiA9IGh0
bWw7CiAgICAgICBzdGF0ZS5sb2NhbFN0YXRlID0gc3RhdGUubG9jYWxNb2RlID0gbnVsbDsKLSAg
ICAgIHJldHVybiBodG1sKHN0cmVhbSwgc3RhdGUpOworICAgICAgcmV0dXJuIG51bGw7CiAgICAg
fQogICAgIHJldHVybiBtYXliZUJhY2t1cChzdHJlYW0sIC88XC9ccypzY3JpcHRccyo+LywKICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUubG9jYWxNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUu
bG9jYWxTdGF0ZSkpOwpAQCAtNzcsNyArNzgsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImh0
bWxtaXhlZCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgaWYgKHN0cmVh
bS5tYXRjaCgvXjxcL1xzKnN0eWxlXHMqPi9pLCBmYWxzZSkpIHsKICAgICAgIHN0YXRlLnRva2Vu
ID0gaHRtbDsKICAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBzdGF0ZS5sb2NhbE1vZGUgPSBudWxs
OwotICAgICAgcmV0dXJuIGh0bWwoc3RyZWFtLCBzdGF0ZSk7CisgICAgICByZXR1cm4gbnVsbDsK
ICAgICB9CiAgICAgcmV0dXJuIG1heWJlQmFja3VwKHN0cmVhbSwgLzxcL1xzKnN0eWxlXHMqPi8s
CiAgICAgICAgICAgICAgICAgICAgICAgIGNzc01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2Nh
bFN0YXRlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanMKb2xkIG1v
ZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBiNTIyZWM0ODMxZjg4MzhmNDgyZTVkZWQy
ZGJlMmNkMWU2OTU0MDFkLi5jODZmNDllMWY2MGE5ZDg1NTliYWU0MjYzOTUzNGIxZjIzZWRkYmUy
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVN
aXJyb3IvamF2YXNjcmlwdC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanMKQEAgLTE5LDYgKzE5LDcgQEAg
Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJz
ZXJDb25maWcpIHsKICAgdmFyIGpzb25sZE1vZGUgPSBwYXJzZXJDb25maWcuanNvbmxkOwogICB2
YXIganNvbk1vZGUgPSBwYXJzZXJDb25maWcuanNvbiB8fCBqc29ubGRNb2RlOwogICB2YXIgaXNU
UyA9IHBhcnNlckNvbmZpZy50eXBlc2NyaXB0OworICB2YXIgd29yZFJFID0gcGFyc2VyQ29uZmln
LndvcmRDaGFyYWN0ZXJzIHx8IC9bXHckXHhhMS1cdWZmZmZdLzsKIAogICAvLyBUb2tlbml6ZXIK
IApAQCAtMTE3LDcgKzExOCw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIs
IGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICB9IGVsc2UgaWYgKHN0YXRl
Lmxhc3RUeXBlID09ICJvcGVyYXRvciIgfHwgc3RhdGUubGFzdFR5cGUgPT0gImtleXdvcmQgYyIg
fHwKICAgICAgICAgICAgICAgIHN0YXRlLmxhc3RUeXBlID09ICJzb2YiIHx8IC9eW1xbe31cKCw7
Ol0kLy50ZXN0KHN0YXRlLmxhc3RUeXBlKSkgewogICAgICAgICByZWFkUmVnZXhwKHN0cmVhbSk7
Ci0gICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW2dpbXldLyk7IC8vICd5JyBpcyAic3RpY2t5IiBv
cHRpb24gaW4gTW96aWxsYQorICAgICAgICBzdHJlYW0ubWF0Y2goL15cYigoW2dpbXl1XSkoPyFb
Z2lteXVdKlwyKSkrXGIvKTsKICAgICAgICAgcmV0dXJuIHJldCgicmVnZXhwIiwgInN0cmluZy0y
Iik7CiAgICAgICB9IGVsc2UgewogICAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNo
YXIpOwpAQCAtMTMyLDggKzEzMyw4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlw
dCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgfSBlbHNlIGlmIChpc09w
ZXJhdG9yQ2hhci50ZXN0KGNoKSkgewogICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JD
aGFyKTsKICAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIiwgIm9wZXJhdG9yIiwgc3RyZWFtLmN1
cnJlbnQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8p
OworICAgIH0gZWxzZSBpZiAod29yZFJFLnRlc3QoY2gpKSB7CisgICAgICBzdHJlYW0uZWF0V2hp
bGUod29yZFJFKTsKICAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKSwga25vd24gPSBr
ZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSAmJiBrZXl3b3Jkc1t3b3JkXTsKICAg
ICAgIHJldHVybiAoa25vd24gJiYgc3RhdGUubGFzdFR5cGUgIT0gIi4iKSA/IHJldChrbm93bi50
eXBlLCBrbm93bi5zdHlsZSwgd29yZCkgOgogICAgICAgICAgICAgICAgICAgICAgcmV0KCJ2YXJp
YWJsZSIsICJ2YXJpYWJsZSIsIHdvcmQpOwpAQCAtMjAyLDggKzIwMywxMCBAQCBDb2RlTWlycm9y
LmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykg
ewogICAgICAgICBpZiAoLS1kZXB0aCA9PSAwKSBicmVhazsKICAgICAgIH0gZWxzZSBpZiAoYnJh
Y2tldCA+PSAzICYmIGJyYWNrZXQgPCA2KSB7CiAgICAgICAgICsrZGVwdGg7Ci0gICAgICB9IGVs
c2UgaWYgKC9bJFx3XS8udGVzdChjaCkpIHsKKyAgICAgIH0gZWxzZSBpZiAod29yZFJFLnRlc3Qo
Y2gpKSB7CiAgICAgICAgIHNhd1NvbWV0aGluZyA9IHRydWU7CisgICAgICB9IGVsc2UgaWYgKC9b
IidcL10vLnRlc3QoY2gpKSB7CisgICAgICAgIHJldHVybjsKICAgICAgIH0gZWxzZSBpZiAoc2F3
U29tZXRoaW5nICYmICFkZXB0aCkgewogICAgICAgICArK3BvczsKICAgICAgICAgYnJlYWs7CkBA
IC0yMzgsNyArMjQxLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVu
Y3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICB2YXIgY2MgPSBzdGF0ZS5jYzsKICAg
ICAvLyBDb21tdW5pY2F0ZSBvdXIgY29udGV4dCB0byB0aGUgY29tYmluYXRvcnMuCiAgICAgLy8g
KExlc3Mgd2FzdGVmdWwgdGhhbiBjb25zaW5nIHVwIGEgaHVuZHJlZCBjbG9zdXJlcyBvbiBldmVy
eSBjYWxsLikKLSAgICBjeC5zdGF0ZSA9IHN0YXRlOyBjeC5zdHJlYW0gPSBzdHJlYW07IGN4Lm1h
cmtlZCA9IG51bGwsIGN4LmNjID0gY2M7CisgICAgY3guc3RhdGUgPSBzdGF0ZTsgY3guc3RyZWFt
ID0gc3RyZWFtOyBjeC5tYXJrZWQgPSBudWxsLCBjeC5jYyA9IGNjOyBjeC5zdHlsZSA9IHN0eWxl
OwogCiAgICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KCJhbGlnbiIpKQogICAg
ICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IHRydWU7CkBAIC0yOTgsNiArMzAxLDggQEAgQ29kZU1p
cnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25m
aWcpIHsKICAgICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oKSB7CiAgICAgICB2YXIgc3RhdGUgPSBj
eC5zdGF0ZSwgaW5kZW50ID0gc3RhdGUuaW5kZW50ZWQ7CiAgICAgICBpZiAoc3RhdGUubGV4aWNh
bC50eXBlID09ICJzdGF0IikgaW5kZW50ID0gc3RhdGUubGV4aWNhbC5pbmRlbnRlZDsKKyAgICAg
IGVsc2UgZm9yICh2YXIgb3V0ZXIgPSBzdGF0ZS5sZXhpY2FsOyBvdXRlciAmJiBvdXRlci50eXBl
ID09ICIpIiAmJiBvdXRlci5hbGlnbjsgb3V0ZXIgPSBvdXRlci5wcmV2KQorICAgICAgICBpbmRl
bnQgPSBvdXRlci5pbmRlbnRlZDsKICAgICAgIHN0YXRlLmxleGljYWwgPSBuZXcgSlNMZXhpY2Fs
KGluZGVudCwgY3guc3RyZWFtLmNvbHVtbigpLCB0eXBlLCBudWxsLCBzdGF0ZS5sZXhpY2FsLCBp
bmZvKTsKICAgICB9OwogICAgIHJlc3VsdC5sZXggPSB0cnVlOwpAQCAtMzQzLDcgKzM0OCw3IEBA
IENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFy
c2VyQ29uZmlnKSB7CiAgICAgaWYgKHR5cGUgPT0gImNhdGNoIikgcmV0dXJuIGNvbnQocHVzaGxl
eCgiZm9ybSIpLCBwdXNoY29udGV4dCwgZXhwZWN0KCIoIiksIGZ1bmFyZywgZXhwZWN0KCIpIiks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LCBwb3BsZXgs
IHBvcGNvbnRleHQpOwogICAgIGlmICh0eXBlID09ICJtb2R1bGUiKSByZXR1cm4gY29udChwdXNo
bGV4KCJmb3JtIiksIHB1c2hjb250ZXh0LCBhZnRlck1vZHVsZSwgcG9wY29udGV4dCwgcG9wbGV4
KTsKLSAgICBpZiAodHlwZSA9PSAiY2xhc3MiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiks
IGNsYXNzTmFtZSwgb2JqbGl0LCBwb3BsZXgpOworICAgIGlmICh0eXBlID09ICJjbGFzcyIpIHJl
dHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgY2xhc3NOYW1lLCBwb3BsZXgpOwogICAgIGlmICh0
eXBlID09ICJleHBvcnQiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGFmdGVyRXhwb3J0
LCBwb3BsZXgpOwogICAgIGlmICh0eXBlID09ICJpbXBvcnQiKSByZXR1cm4gY29udChwdXNobGV4
KCJmb3JtIiksIGFmdGVySW1wb3J0LCBwb3BsZXgpOwogICAgIHJldHVybiBwYXNzKHB1c2hsZXgo
InN0YXQiKSwgZXhwcmVzc2lvbiwgZXhwZWN0KCI7IiksIHBvcGxleCk7CkBAIC0zODgsNyArMzkz
LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmln
LCBwYXJzZXJDb25maWcpIHsKICAgZnVuY3Rpb24gbWF5YmVvcGVyYXRvck5vQ29tbWEodHlwZSwg
dmFsdWUsIG5vQ29tbWEpIHsKICAgICB2YXIgbWUgPSBub0NvbW1hID09IGZhbHNlID8gbWF5YmVv
cGVyYXRvckNvbW1hIDogbWF5YmVvcGVyYXRvck5vQ29tbWE7CiAgICAgdmFyIGV4cHIgPSBub0Nv
bW1hID09IGZhbHNlID8gZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25Ob0NvbW1hOwotICAgIGlmICh2
YWx1ZSA9PSAiPT4iKSByZXR1cm4gY29udChwdXNoY29udGV4dCwgbm9Db21tYSA/IGFycm93Qm9k
eU5vQ29tbWEgOiBhcnJvd0JvZHksIHBvcGNvbnRleHQpOworICAgIGlmICh0eXBlID09ICI9PiIp
IHJldHVybiBjb250KHB1c2hjb250ZXh0LCBub0NvbW1hID8gYXJyb3dCb2R5Tm9Db21tYSA6IGFy
cm93Qm9keSwgcG9wY29udGV4dCk7CiAgICAgaWYgKHR5cGUgPT0gIm9wZXJhdG9yIikgewogICAg
ICAgaWYgKC9cK1wrfC0tLy50ZXN0KHZhbHVlKSkgcmV0dXJuIGNvbnQobWUpOwogICAgICAgaWYg
KHZhbHVlID09ICI/IikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KCI6IiksIGV4cHIp
OwpAQCAtNDE0LDEzICs0MTksMTEgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0
IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgfQogICBmdW5jdGlvbiBhcnJv
d0JvZHkodHlwZSkgewogICAgIGZpbmRGYXRBcnJvdyhjeC5zdHJlYW0sIGN4LnN0YXRlKTsKLSAg
ICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBwYXNzKHN0YXRlbWVudCk7Ci0gICAgcmV0dXJuIHBh
c3MoZXhwcmVzc2lvbik7CisgICAgcmV0dXJuIHBhc3ModHlwZSA9PSAieyIgPyBzdGF0ZW1lbnQg
OiBleHByZXNzaW9uKTsKICAgfQogICBmdW5jdGlvbiBhcnJvd0JvZHlOb0NvbW1hKHR5cGUpIHsK
ICAgICBmaW5kRmF0QXJyb3coY3guc3RyZWFtLCBjeC5zdGF0ZSk7Ci0gICAgaWYgKHR5cGUgPT0g
InsiKSByZXR1cm4gcGFzcyhzdGF0ZW1lbnQpOwotICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb25O
b0NvbW1hKTsKKyAgICByZXR1cm4gcGFzcyh0eXBlID09ICJ7IiA/IHN0YXRlbWVudCA6IGV4cHJl
c3Npb25Ob0NvbW1hKTsKICAgfQogICBmdW5jdGlvbiBtYXliZWxhYmVsKHR5cGUpIHsKICAgICBp
ZiAodHlwZSA9PSAiOiIpIHJldHVybiBjb250KHBvcGxleCwgc3RhdGVtZW50KTsKQEAgLTQzMCwx
NSArNDMzLDE4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikge2N4
Lm1hcmtlZCA9ICJwcm9wZXJ0eSI7IHJldHVybiBjb250KCk7fQogICB9CiAgIGZ1bmN0aW9uIG9i
anByb3AodHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7CisgICAg
aWYgKHR5cGUgPT0gInZhcmlhYmxlIiB8fCBjeC5zdHlsZSA9PSAia2V5d29yZCIpIHsKICAgICAg
IGN4Lm1hcmtlZCA9ICJwcm9wZXJ0eSI7CiAgICAgICBpZiAodmFsdWUgPT0gImdldCIgfHwgdmFs
dWUgPT0gInNldCIpIHJldHVybiBjb250KGdldHRlclNldHRlcik7CisgICAgICByZXR1cm4gY29u
dChhZnRlcnByb3ApOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSAibnVtYmVyIiB8fCB0eXBlID09
ICJzdHJpbmciKSB7Ci0gICAgICBjeC5tYXJrZWQgPSBqc29ubGRNb2RlID8gInByb3BlcnR5IiA6
ICh0eXBlICsgIiBwcm9wZXJ0eSIpOworICAgICAgY3gubWFya2VkID0ganNvbmxkTW9kZSA/ICJw
cm9wZXJ0eSIgOiAoY3guc3R5bGUgKyAiIHByb3BlcnR5Iik7CisgICAgICByZXR1cm4gY29udChh
ZnRlcnByb3ApOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSAianNvbmxkLWtleXdvcmQiKSB7Cisg
ICAgICByZXR1cm4gY29udChhZnRlcnByb3ApOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiWyIp
IHsKICAgICAgIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdCgiXSIpLCBhZnRlcnByb3Ap
OwogICAgIH0KLSAgICBpZiAoYXRvbWljVHlwZXMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVy
biBjb250KGFmdGVycHJvcCk7CiAgIH0KICAgZnVuY3Rpb24gZ2V0dGVyU2V0dGVyKHR5cGUpIHsK
ICAgICBpZiAodHlwZSAhPSAidmFyaWFibGUiKSByZXR1cm4gcGFzcyhhZnRlcnByb3ApOwpAQCAt
NDc2LDggKzQ4MiwxMSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICBmdW5jdGlvbiBtYXliZXR5cGUodHlwZSkg
ewogICAgIGlmIChpc1RTICYmIHR5cGUgPT0gIjoiKSByZXR1cm4gY29udCh0eXBlZGVmKTsKICAg
fQorICBmdW5jdGlvbiBtYXliZWRlZmF1bHQoXywgdmFsdWUpIHsKKyAgICBpZiAodmFsdWUgPT0g
Ij0iKSByZXR1cm4gY29udChleHByZXNzaW9uTm9Db21tYSk7CisgIH0KICAgZnVuY3Rpb24gdHlw
ZWRlZih0eXBlKSB7Ci0gICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIil7Y3gubWFya2VkID0gInZh
cmlhYmxlLTMiOyByZXR1cm4gY29udCgpO30KKyAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7
Y3gubWFya2VkID0gInZhcmlhYmxlLTMiOyByZXR1cm4gY29udCgpO30KICAgfQogICBmdW5jdGlv
biB2YXJkZWYoKSB7CiAgICAgcmV0dXJuIHBhc3MocGF0dGVybiwgbWF5YmV0eXBlLCBtYXliZUFz
c2lnbiwgdmFyZGVmQ29udCk7CkBAIC01MzIsMTYgKzU0MSwzNiBAQCBDb2RlTWlycm9yLmRlZmlu
ZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICB9
CiAgIGZ1bmN0aW9uIGZ1bmFyZyh0eXBlKSB7CiAgICAgaWYgKHR5cGUgPT0gInNwcmVhZCIpIHJl
dHVybiBjb250KGZ1bmFyZyk7Ci0gICAgcmV0dXJuIHBhc3MocGF0dGVybiwgbWF5YmV0eXBlKTsK
KyAgICByZXR1cm4gcGFzcyhwYXR0ZXJuLCBtYXliZXR5cGUsIG1heWJlZGVmYXVsdCk7CiAgIH0K
ICAgZnVuY3Rpb24gY2xhc3NOYW1lKHR5cGUsIHZhbHVlKSB7CiAgICAgaWYgKHR5cGUgPT0gInZh
cmlhYmxlIikge3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoY2xhc3NOYW1lQWZ0ZXIpO30K
ICAgfQotICBmdW5jdGlvbiBjbGFzc05hbWVBZnRlcihfdHlwZSwgdmFsdWUpIHsKLSAgICBpZiAo
dmFsdWUgPT0gImV4dGVuZHMiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKKyAgZnVuY3Rpb24g
Y2xhc3NOYW1lQWZ0ZXIodHlwZSwgdmFsdWUpIHsKKyAgICBpZiAodmFsdWUgPT0gImV4dGVuZHMi
KSByZXR1cm4gY29udChleHByZXNzaW9uLCBjbGFzc05hbWVBZnRlcik7CisgICAgaWYgKHR5cGUg
PT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGNsYXNzQm9keSwgcG9wbGV4KTsKICAg
fQotICBmdW5jdGlvbiBvYmpsaXQodHlwZSkgewotICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJu
IGNvbnRDb21tYXNlcChvYmpwcm9wLCAifSIpOworICBmdW5jdGlvbiBjbGFzc0JvZHkodHlwZSwg
dmFsdWUpIHsKKyAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiIHx8IGN4LnN0eWxlID09ICJrZXl3
b3JkIikgeworICAgICAgaWYgKHZhbHVlID09ICJzdGF0aWMiKSB7CisgICAgICAgIGN4Lm1hcmtl
ZCA9ICJrZXl3b3JkIjsKKyAgICAgICAgcmV0dXJuIGNvbnQoY2xhc3NCb2R5KTsKKyAgICAgIH0K
KyAgICAgIGN4Lm1hcmtlZCA9ICJwcm9wZXJ0eSI7CisgICAgICBpZiAodmFsdWUgPT0gImdldCIg
fHwgdmFsdWUgPT0gInNldCIpIHJldHVybiBjb250KGNsYXNzR2V0dGVyU2V0dGVyLCBmdW5jdGlv
bmRlZiwgY2xhc3NCb2R5KTsKKyAgICAgIHJldHVybiBjb250KGZ1bmN0aW9uZGVmLCBjbGFzc0Jv
ZHkpOworICAgIH0KKyAgICBpZiAodmFsdWUgPT0gIioiKSB7CisgICAgICBjeC5tYXJrZWQgPSAi
a2V5d29yZCI7CisgICAgICByZXR1cm4gY29udChjbGFzc0JvZHkpOworICAgIH0KKyAgICBpZiAo
dHlwZSA9PSAiOyIpIHJldHVybiBjb250KGNsYXNzQm9keSk7CisgICAgaWYgKHR5cGUgPT0gIn0i
KSByZXR1cm4gY29udCgpOworICB9CisgIGZ1bmN0aW9uIGNsYXNzR2V0dGVyU2V0dGVyKHR5cGUp
IHsKKyAgICBpZiAodHlwZSAhPSAidmFyaWFibGUiKSByZXR1cm4gcGFzcygpOworICAgIGN4Lm1h
cmtlZCA9ICJwcm9wZXJ0eSI7CisgICAgcmV0dXJuIGNvbnQoKTsKICAgfQogICBmdW5jdGlvbiBh
ZnRlck1vZHVsZSh0eXBlLCB2YWx1ZSkgewogICAgIGlmICh0eXBlID09ICJzdHJpbmciKSByZXR1
cm4gY29udChzdGF0ZW1lbnQpOwpAQCAtNTU5LDcgKzU4OCwxMSBAQCBDb2RlTWlycm9yLmRlZmlu
ZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICBm
dW5jdGlvbiBpbXBvcnRTcGVjKHR5cGUsIHZhbHVlKSB7CiAgICAgaWYgKHR5cGUgPT0gInsiKSBy
ZXR1cm4gY29udENvbW1hc2VwKGltcG9ydFNwZWMsICJ9Iik7CiAgICAgaWYgKHR5cGUgPT0gInZh
cmlhYmxlIikgcmVnaXN0ZXIodmFsdWUpOwotICAgIHJldHVybiBjb250KCk7CisgICAgaWYgKHZh
bHVlID09ICIqIikgY3gubWFya2VkID0gImtleXdvcmQiOworICAgIHJldHVybiBjb250KG1heWJl
QXMpOworICB9CisgIGZ1bmN0aW9uIG1heWJlQXMoX3R5cGUsIHZhbHVlKSB7CisgICAgaWYgKHZh
bHVlID09ICJhcyIpIHsgY3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChpbXBvcnRT
cGVjKTsgfQogICB9CiAgIGZ1bmN0aW9uIG1heWJlRnJvbShfdHlwZSwgdmFsdWUpIHsKICAgICBp
ZiAodmFsdWUgPT0gImZyb20iKSB7IGN4Lm1hcmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNvbnQo
ZXhwcmVzc2lvbik7IH0KQEAgLTU3MCw3ICs2MDMsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUo
ImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICB9CiAgIGZ1
bmN0aW9uIG1heWJlQXJyYXlDb21wcmVoZW5zaW9uKHR5cGUpIHsKICAgICBpZiAodHlwZSA9PSAi
Zm9yIikgcmV0dXJuIHBhc3MoY29tcHJlaGVuc2lvbiwgZXhwZWN0KCJdIikpOwotICAgIGlmICh0
eXBlID09ICIsIikgcmV0dXJuIGNvbnQoY29tbWFzZXAoZXhwcmVzc2lvbk5vQ29tbWEsICJdIikp
OworICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJuIGNvbnQoY29tbWFzZXAobWF5YmVleHByZXNz
aW9uTm9Db21tYSwgIl0iKSk7CiAgICAgcmV0dXJuIHBhc3MoY29tbWFzZXAoZXhwcmVzc2lvbk5v
Q29tbWEsICJdIikpOwogICB9CiAgIGZ1bmN0aW9uIGNvbXByZWhlbnNpb24odHlwZSkgewpAQCAt
NTc4LDYgKzYxMSwxMiBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIGlmICh0eXBlID09ICJpZiIpIHJldHVy
biBjb250KGV4cHJlc3Npb24sIGNvbXByZWhlbnNpb24pOwogICB9CiAKKyAgZnVuY3Rpb24gaXND
b250aW51ZWRTdGF0ZW1lbnQoc3RhdGUsIHRleHRBZnRlcikgeworICAgIHJldHVybiBzdGF0ZS5s
YXN0VHlwZSA9PSAib3BlcmF0b3IiIHx8IHN0YXRlLmxhc3RUeXBlID09ICIsIiB8fAorICAgICAg
aXNPcGVyYXRvckNoYXIudGVzdCh0ZXh0QWZ0ZXIuY2hhckF0KDApKSB8fAorICAgICAgL1ssLl0v
LnRlc3QodGV4dEFmdGVyLmNoYXJBdCgwKSk7CisgIH0KKwogICAvLyBJbnRlcmZhY2UKIAogICBy
ZXR1cm4gewpAQCAtNjI5LDE4ICs2NjgsMTkgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZh
c2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgIGVsc2UgaWYg
KHR5cGUgPT0gImZvcm0iICYmIGZpcnN0Q2hhciA9PSAieyIpIHJldHVybiBsZXhpY2FsLmluZGVu
dGVkOwogICAgICAgZWxzZSBpZiAodHlwZSA9PSAiZm9ybSIpIHJldHVybiBsZXhpY2FsLmluZGVu
dGVkICsgaW5kZW50VW5pdDsKICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gInN0YXQiKQotICAgICAg
ICByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChzdGF0ZS5sYXN0VHlwZSA9PSAib3BlcmF0b3Ii
IHx8IHN0YXRlLmxhc3RUeXBlID09ICIsIiA/IHN0YXRlbWVudEluZGVudCB8fCBpbmRlbnRVbml0
IDogMCk7CisgICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKGlzQ29udGludWVkU3Rh
dGVtZW50KHN0YXRlLCB0ZXh0QWZ0ZXIpID8gc3RhdGVtZW50SW5kZW50IHx8IGluZGVudFVuaXQg
OiAwKTsKICAgICAgIGVsc2UgaWYgKGxleGljYWwuaW5mbyA9PSAic3dpdGNoIiAmJiAhY2xvc2lu
ZyAmJiBwYXJzZXJDb25maWcuZG91YmxlSW5kZW50U3dpdGNoICE9IGZhbHNlKQogICAgICAgICBy
ZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArICgvXig/OmNhc2V8ZGVmYXVsdClcYi8udGVzdCh0ZXh0
QWZ0ZXIpID8gaW5kZW50VW5pdCA6IDIgKiBpbmRlbnRVbml0KTsKICAgICAgIGVsc2UgaWYgKGxl
eGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpOwog
ICAgICAgZWxzZSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVu
dFVuaXQpOwogICAgIH0sCiAKLSAgICBlbGVjdHJpY0NoYXJzOiAiOnt9IiwKKyAgICBlbGVjdHJp
Y0lucHV0OiAvXlxzKig/OmNhc2UgLio/OnxkZWZhdWx0Onxce3xcfSkkLywKICAgICBibG9ja0Nv
bW1lbnRTdGFydDoganNvbk1vZGUgPyBudWxsIDogIi8qIiwKICAgICBibG9ja0NvbW1lbnRFbmQ6
IGpzb25Nb2RlID8gbnVsbCA6ICIqLyIsCiAgICAgbGluZUNvbW1lbnQ6IGpzb25Nb2RlID8gbnVs
bCA6ICIvLyIsCiAgICAgZm9sZDogImJyYWNlIiwKKyAgICBjbG9zZUJyYWNrZXRzOiAiKClbXXt9
JydcIlwiYGAiLAogCiAgICAgaGVscGVyVHlwZToganNvbk1vZGUgPyAianNvbiIgOiAiamF2YXNj
cmlwdCIsCiAgICAganNvbmxkTW9kZToganNvbmxkTW9kZSwKQEAgLTY0OCwxMSArNjg4LDEyIEBA
IENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFy
c2VyQ29uZmlnKSB7CiAgIH07CiB9KTsKIAotQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcigid29y
ZENoYXJzIiwgImphdmFzY3JpcHQiLCAvW1xcdyRdLyk7CitDb2RlTWlycm9yLnJlZ2lzdGVySGVs
cGVyKCJ3b3JkQ2hhcnMiLCAiamF2YXNjcmlwdCIsIC9bXHckXS8pOwogCiBDb2RlTWlycm9yLmRl
ZmluZU1JTUUoInRleHQvamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CiBDb2RlTWlycm9yLmRl
ZmluZU1JTUUoInRleHQvZWNtYXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CiBDb2RlTWlycm9yLmRl
ZmluZU1JTUUoImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLCAiamF2YXNjcmlwdCIpOworQ29kZU1p
cnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiLCAiamF2YXNjcmlwdCIp
OwogQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0IiwgImphdmFz
Y3JpcHQiKTsKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24vanNvbiIsIHtuYW1l
OiAiamF2YXNjcmlwdCIsIGpzb246IHRydWV9KTsKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBw
bGljYXRpb24veC1qc29uIiwge25hbWU6ICJqYXZhc2NyaXB0IiwganNvbjogdHJ1ZX0pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29k
ZU1pcnJvci9saXZlc2NyaXB0LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9saXZlc2NyaXB0LmpzCm9sZCBtb2RlIDEwMDY0NApuZXcg
bW9kZSAxMDA3NTUKaW5kZXggNTU4ODJlZmMzYmM0ZjczYmY5NjA5NTUwOTJhMWQxODA4Y2Q5YzI3
My4uNGIyNmUwNDYxOWNkNjM5NjYwMWQyMjQ3MjRlYzI5Y2QzYTU3ZDljZgotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2xpdmVzY3Jp
cHQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
Q29kZU1pcnJvci9saXZlc2NyaXB0LmpzCkBAIC0yNCw4ICsyNCw4IEBACiAgICAgICAgIHZhciBu
ciA9IFJ1bGVzW25leHRfcnVsZV07CiAgICAgICAgIGlmIChuci5zcGxpY2UpIHsKICAgICAgICAg
ICBmb3IgKHZhciBpJCA9IDA7IGkkIDwgbnIubGVuZ3RoOyArK2kkKSB7Ci0gICAgICAgICAgICB2
YXIgciA9IG5yW2kkXSwgbTsKLSAgICAgICAgICAgIGlmIChyLnJlZ2V4ICYmIChtID0gc3RyZWFt
Lm1hdGNoKHIucmVnZXgpKSkgeworICAgICAgICAgICAgdmFyIHIgPSBucltpJF07CisgICAgICAg
ICAgICBpZiAoci5yZWdleCAmJiBzdHJlYW0ubWF0Y2goci5yZWdleCkpIHsKICAgICAgICAgICAg
ICAgc3RhdGUubmV4dCA9IHIubmV4dCB8fCBzdGF0ZS5uZXh0OwogICAgICAgICAgICAgICByZXR1
cm4gci50b2tlbjsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hicmFja2V0cy5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Iv
bWF0Y2hicmFja2V0cy5qcwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGZh
MWFlMDMwYTU0NDJjN2FiODVjYThjZjMwMWNhNzZlNmNmMTgxMzIuLjcwZTFhZTE4Yzc0ODE3NDI1
OThjOGIyMDY5YjhhNmM3MTdmNDcyNTcKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9tYXRjaGJyYWNrZXRzLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hi
cmFja2V0cy5qcwpAQCAtODEsNyArODEsNyBAQAogICAgIGlmIChtYXJrcy5sZW5ndGgpIHsKICAg
ICAgIC8vIEtsdWRnZSB0byB3b3JrIGFyb3VuZCB0aGUgSUUgYnVnIGZyb20gaXNzdWUgIzExOTMs
IHdoZXJlIHRleHQKICAgICAgIC8vIGlucHV0IHN0b3BzIGdvaW5nIHRvIHRoZSB0ZXh0YXJlIHdo
ZXZlciB0aGlzIGZpcmVzLgotICAgICAgaWYgKGllX2x0OCAmJiBjbS5zdGF0ZS5mb2N1c2VkKSBj
bS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7CisgICAgICBpZiAoaWVfbHQ4ICYmIGNtLnN0YXRlLmZv
Y3VzZWQpIGNtLmZvY3VzKCk7CiAKICAgICAgIHZhciBjbGVhciA9IGZ1bmN0aW9uKCkgewogICAg
ICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL292ZXJsYXkuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL292
ZXJsYXkuanMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAzOTMwNTRkZmE0
NDE3NzhmZTg1MDFkOTZiYmU3Y2I4Y2YwMTY3MzI3Li5lMWI5ZWQzNzUzMGFkODI0ZTIzZDUwYTBj
NGM5MTA1N2M4ZTlmYjQxCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3Ivb3ZlcmxheS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL292ZXJsYXkuanMKQEAgLTI4LDcg
KzI4LDcgQEAgQ29kZU1pcnJvci5vdmVybGF5TW9kZSA9IGZ1bmN0aW9uKGJhc2UsIG92ZXJsYXks
IGNvbWJpbmUpIHsKICAgICAgICAgb3ZlcmxheTogQ29kZU1pcnJvci5zdGFydFN0YXRlKG92ZXJs
YXkpLAogICAgICAgICBiYXNlUG9zOiAwLCBiYXNlQ3VyOiBudWxsLAogICAgICAgICBvdmVybGF5
UG9zOiAwLCBvdmVybGF5Q3VyOiBudWxsLAotICAgICAgICBsaW5lU2VlbjogbnVsbAorICAgICAg
ICBzdHJlYW1TZWVuOiBudWxsCiAgICAgICB9OwogICAgIH0sCiAgICAgY29weVN0YXRlOiBmdW5j
dGlvbihzdGF0ZSkgewpAQCAtNDEsOSArNDEsOSBAQCBDb2RlTWlycm9yLm92ZXJsYXlNb2RlID0g
ZnVuY3Rpb24oYmFzZSwgb3ZlcmxheSwgY29tYmluZSkgewogICAgIH0sCiAKICAgICB0b2tlbjog
ZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgICAgaWYgKHN0cmVhbS5zb2woKSB8fCBzdHJl
YW0uc3RyaW5nICE9IHN0YXRlLmxpbmVTZWVuIHx8CisgICAgICBpZiAoc3RyZWFtICE9IHN0YXRl
LnN0cmVhbVNlZW4gfHwKICAgICAgICAgICBNYXRoLm1pbihzdGF0ZS5iYXNlUG9zLCBzdGF0ZS5v
dmVybGF5UG9zKSA8IHN0cmVhbS5zdGFydCkgewotICAgICAgICBzdGF0ZS5saW5lU2VlbiA9IHN0
cmVhbS5zdHJpbmc7CisgICAgICAgIHN0YXRlLnN0cmVhbVNlZW4gPSBzdHJlYW07CiAgICAgICAg
IHN0YXRlLmJhc2VQb3MgPSBzdGF0ZS5vdmVybGF5UG9zID0gc3RyZWFtLnN0YXJ0OwogICAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Db2RlTWlycm9yL3BsYWNlaG9sZGVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9wbGFjZWhvbGRlci5qcwpvbGQgbW9kZSAx
MDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3J1bm1vZGUuanMgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3J1bm1vZGUuanMK
b2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zYXNzLmpzIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zYXNz
LmpzCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMmZmNTAwM2MwYWQ3OTlh
ZTc4Y2JiZWJlYzlkMzVlNjBjOWIyZmNjMC4uNjk3M2VjZTI5MmIwOTAxNmE0MjE5N2E4MWUzZTA5
NThlY2Q3ZGUxMwotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Db2RlTWlycm9yL3Nhc3MuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zYXNzLmpzCkBAIC0xMiwzMDIgKzEyLDM2OCBA
QAogInVzZSBzdHJpY3QiOwogCiBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNhc3MiLCBmdW5jdGlv
bihjb25maWcpIHsKLSAgdmFyIHRva2VuUmVnZXhwID0gZnVuY3Rpb24od29yZHMpeworICBmdW5j
dGlvbiB0b2tlblJlZ2V4cCh3b3JkcykgewogICAgIHJldHVybiBuZXcgUmVnRXhwKCJeIiArIHdv
cmRzLmpvaW4oInwiKSk7Ci0gIH07CisgIH0KIAogICB2YXIga2V5d29yZHMgPSBbInRydWUiLCAi
ZmFsc2UiLCAibnVsbCIsICJhdXRvIl07CiAgIHZhciBrZXl3b3Jkc1JlZ2V4cCA9IG5ldyBSZWdF
eHAoIl4iICsga2V5d29yZHMuam9pbigifCIpKTsKIAotICB2YXIgb3BlcmF0b3JzID0gWyJcXCgi
LCAiXFwpIiwgIj0iLCAiPiIsICI8IiwgIj09IiwgIj49IiwgIjw9IiwgIlxcKyIsICItIiwgIlxc
IT0iLCAiLyIsICJcXCoiLCAiJSIsICJhbmQiLCAib3IiLCAibm90Il07CisgIHZhciBvcGVyYXRv
cnMgPSBbIlxcKCIsICJcXCkiLCAiPSIsICI+IiwgIjwiLCAiPT0iLCAiPj0iLCAiPD0iLCAiXFwr
IiwgIi0iLAorICAgICAgICAgICAgICAgICAgICJcXCE9IiwgIi8iLCAiXFwqIiwgIiUiLCAiYW5k
IiwgIm9yIiwgIm5vdCIsICI7IiwiXFx7IiwiXFx9IiwiOiJdOwogICB2YXIgb3BSZWdleHAgPSB0
b2tlblJlZ2V4cChvcGVyYXRvcnMpOwogCi0gIHZhciBwc2V1ZG9FbGVtZW50c1JlZ2V4cCA9IC9e
Ojo/W1x3XC1dKy87CisgIHZhciBwc2V1ZG9FbGVtZW50c1JlZ2V4cCA9IC9eOjo/W2EtekEtWl9d
W1x3XC1dKi87CiAKLSAgdmFyIHVybFRva2VucyA9IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpewor
ICBmdW5jdGlvbiB1cmxUb2tlbnMoc3RyZWFtLCBzdGF0ZSkgewogICAgIHZhciBjaCA9IHN0cmVh
bS5wZWVrKCk7CiAKLSAgICBpZiAoY2ggPT09ICIpIil7CisgICAgaWYgKGNoID09PSAiKSIpIHsK
ICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICBzdGF0ZS50b2tlbml6ZXIgPSB0b2tlbkJhc2U7
CiAgICAgICByZXR1cm4gIm9wZXJhdG9yIjsKLSAgICB9ZWxzZSBpZiAoY2ggPT09ICIoIil7Cisg
ICAgfSBlbHNlIGlmIChjaCA9PT0gIigiKSB7CiAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAg
c3RyZWFtLmVhdFNwYWNlKCk7CiAKICAgICAgIHJldHVybiAib3BlcmF0b3IiOwotICAgIH1lbHNl
IGlmIChjaCA9PT0gIiciIHx8IGNoID09PSAnIicpeworICAgIH0gZWxzZSBpZiAoY2ggPT09ICIn
IiB8fCBjaCA9PT0gJyInKSB7CiAgICAgICBzdGF0ZS50b2tlbml6ZXIgPSBidWlsZFN0cmluZ1Rv
a2VuaXplcihzdHJlYW0ubmV4dCgpKTsKICAgICAgIHJldHVybiAic3RyaW5nIjsKLSAgICB9ZWxz
ZXsKKyAgICB9IGVsc2UgewogICAgICAgc3RhdGUudG9rZW5pemVyID0gYnVpbGRTdHJpbmdUb2tl
bml6ZXIoIikiLCBmYWxzZSk7CiAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgfQotICB9Owot
ICB2YXIgbXVsdGlsaW5lQ29tbWVudCA9IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKLSAgICBp
ZiAoc3RyZWFtLnNraXBUbygiKi8iKSl7Ci0gICAgICBzdHJlYW0ubmV4dCgpOwotICAgICAgc3Ry
ZWFtLm5leHQoKTsKLSAgICAgIHN0YXRlLnRva2VuaXplciA9IHRva2VuQmFzZTsKLSAgICB9ZWxz
ZSB7Ci0gICAgICBzdHJlYW0ubmV4dCgpOwotICAgIH0KKyAgfQorICBmdW5jdGlvbiBjb21tZW50
KGluZGVudGF0aW9uLCBtdWx0aUxpbmUpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBz
dGF0ZSkgeworICAgICAgaWYgKHN0cmVhbS5zb2woKSAmJiBzdHJlYW0uaW5kZW50YXRpb24oKSA8
PSBpbmRlbnRhdGlvbikgeworICAgICAgICBzdGF0ZS50b2tlbml6ZXIgPSB0b2tlbkJhc2U7Cisg
ICAgICAgIHJldHVybiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSk7CisgICAgICB9CiAKLSAgICBy
ZXR1cm4gImNvbW1lbnQiOwotICB9OworICAgICAgaWYgKG11bHRpTGluZSAmJiBzdHJlYW0uc2tp
cFRvKCIqLyIpKSB7CisgICAgICAgIHN0cmVhbS5uZXh0KCk7CisgICAgICAgIHN0cmVhbS5uZXh0
KCk7CisgICAgICAgIHN0YXRlLnRva2VuaXplciA9IHRva2VuQmFzZTsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuICJj
b21tZW50IjsKKyAgICB9OworICB9CiAKLSAgdmFyIGJ1aWxkU3RyaW5nVG9rZW5pemVyID0gZnVu
Y3Rpb24ocXVvdGUsIGdyZWVkeSl7Ci0gICAgaWYoZ3JlZWR5ID09IG51bGwpeyBncmVlZHkgPSB0
cnVlOyB9CisgIGZ1bmN0aW9uIGJ1aWxkU3RyaW5nVG9rZW5pemVyKHF1b3RlLCBncmVlZHkpIHsK
KyAgICBpZiAoZ3JlZWR5ID09IG51bGwpIHsgZ3JlZWR5ID0gdHJ1ZTsgfQogCi0gICAgZnVuY3Rp
b24gc3RyaW5nVG9rZW5pemVyKHN0cmVhbSwgc3RhdGUpeworICAgIGZ1bmN0aW9uIHN0cmluZ1Rv
a2VuaXplcihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICB2YXIgbmV4dENoYXIgPSBzdHJlYW0ubmV4
dCgpOwogICAgICAgdmFyIHBlZWtDaGFyID0gc3RyZWFtLnBlZWsoKTsKICAgICAgIHZhciBwcmV2
aW91c0NoYXIgPSBzdHJlYW0uc3RyaW5nLmNoYXJBdChzdHJlYW0ucG9zLTIpOwogCiAgICAgICB2
YXIgZW5kaW5nU3RyaW5nID0gKChuZXh0Q2hhciAhPT0gIlxcIiAmJiBwZWVrQ2hhciA9PT0gcXVv
dGUpIHx8IChuZXh0Q2hhciA9PT0gcXVvdGUgJiYgcHJldmlvdXNDaGFyICE9PSAiXFwiKSk7CiAK
LSAgICAgIC8qCi0gICAgICBjb25zb2xlLmxvZygicHJldmlvdXNDaGFyOiAiICsgcHJldmlvdXND
aGFyKTsKLSAgICAgIGNvbnNvbGUubG9nKCJuZXh0Q2hhcjogIiArIG5leHRDaGFyKTsKLSAgICAg
IGNvbnNvbGUubG9nKCJwZWVrQ2hhcjogIiArIHBlZWtDaGFyKTsKLSAgICAgIGNvbnNvbGUubG9n
KCJlbmRpbmc6ICIgKyBlbmRpbmdTdHJpbmcpOwotICAgICAgKi8KLQotICAgICAgaWYgKGVuZGlu
Z1N0cmluZyl7CisgICAgICBpZiAoZW5kaW5nU3RyaW5nKSB7CiAgICAgICAgIGlmIChuZXh0Q2hh
ciAhPT0gcXVvdGUgJiYgZ3JlZWR5KSB7IHN0cmVhbS5uZXh0KCk7IH0KICAgICAgICAgc3RhdGUu
dG9rZW5pemVyID0gdG9rZW5CYXNlOwogICAgICAgICByZXR1cm4gInN0cmluZyI7Ci0gICAgICB9
ZWxzZSBpZiAobmV4dENoYXIgPT09ICIjIiAmJiBwZWVrQ2hhciA9PT0gInsiKXsKKyAgICAgIH0g
ZWxzZSBpZiAobmV4dENoYXIgPT09ICIjIiAmJiBwZWVrQ2hhciA9PT0gInsiKSB7CiAgICAgICAg
IHN0YXRlLnRva2VuaXplciA9IGJ1aWxkSW50ZXJwb2xhdGlvblRva2VuaXplcihzdHJpbmdUb2tl
bml6ZXIpOwogICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgICByZXR1cm4gIm9wZXJhdG9y
IjsKLSAgICAgIH1lbHNlIHsKKyAgICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybiAic3RyaW5n
IjsKICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gc3RyaW5nVG9rZW5pemVyOwotICB9Owor
ICB9CiAKLSAgdmFyIGJ1aWxkSW50ZXJwb2xhdGlvblRva2VuaXplciA9IGZ1bmN0aW9uKGN1cnJl
bnRUb2tlbml6ZXIpewotICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKXsKLSAgICAg
IGlmIChzdHJlYW0ucGVlaygpID09PSAifSIpeworICBmdW5jdGlvbiBidWlsZEludGVycG9sYXRp
b25Ub2tlbml6ZXIoY3VycmVudFRva2VuaXplcikgeworICAgIHJldHVybiBmdW5jdGlvbihzdHJl
YW0sIHN0YXRlKSB7CisgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gIn0iKSB7CiAgICAgICAg
IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgIHN0YXRlLnRva2VuaXplciA9IGN1cnJlbnRUb2tlbml6
ZXI7CiAgICAgICAgIHJldHVybiAib3BlcmF0b3IiOwotICAgICAgfWVsc2V7CisgICAgICB9IGVs
c2UgewogICAgICAgICByZXR1cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpOwogICAgICAgfQog
ICAgIH07Ci0gIH07CisgIH0KIAotICB2YXIgaW5kZW50ID0gZnVuY3Rpb24oc3RhdGUpewotICAg
IGlmIChzdGF0ZS5pbmRlbnRDb3VudCA9PSAwKXsKKyAgZnVuY3Rpb24gaW5kZW50KHN0YXRlKSB7
CisgICAgaWYgKHN0YXRlLmluZGVudENvdW50ID09IDApIHsKICAgICAgIHN0YXRlLmluZGVudENv
dW50Kys7CiAgICAgICB2YXIgbGFzdFNjb3BlT2Zmc2V0ID0gc3RhdGUuc2NvcGVzWzBdLm9mZnNl
dDsKICAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gbGFzdFNjb3BlT2Zmc2V0ICsgY29uZmlnLmlu
ZGVudFVuaXQ7CiAgICAgICBzdGF0ZS5zY29wZXMudW5zaGlmdCh7IG9mZnNldDpjdXJyZW50T2Zm
c2V0IH0pOwogICAgIH0KLSAgfTsKKyAgfQogCi0gIHZhciBkZWRlbnQgPSBmdW5jdGlvbihzdGF0
ZSl7Ci0gICAgaWYgKHN0YXRlLnNjb3Blcy5sZW5ndGggPT0gMSkgeyByZXR1cm47IH0KKyAgZnVu
Y3Rpb24gZGVkZW50KHN0YXRlKSB7CisgICAgaWYgKHN0YXRlLnNjb3Blcy5sZW5ndGggPT0gMSkg
cmV0dXJuOwogCiAgICAgc3RhdGUuc2NvcGVzLnNoaWZ0KCk7Ci0gIH07CisgIH0KIAotICB2YXIg
dG9rZW5CYXNlID0gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgeworICBmdW5jdGlvbiB0b2tlbkJh
c2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7CiAKLSAgICAv
LyBTaW5nbGUgbGluZSBDb21tZW50Ci0gICAgaWYgKHN0cmVhbS5tYXRjaCgnLy8nKSkgewotICAg
ICAgc3RyZWFtLnNraXBUb0VuZCgpOwotICAgICAgcmV0dXJuICJjb21tZW50IjsKKyAgICAvLyBD
b21tZW50CisgICAgaWYgKHN0cmVhbS5tYXRjaCgiLyoiKSkgeworICAgICAgc3RhdGUudG9rZW5p
emVyID0gY29tbWVudChzdHJlYW0uaW5kZW50YXRpb24oKSwgdHJ1ZSk7CisgICAgICByZXR1cm4g
c3RhdGUudG9rZW5pemVyKHN0cmVhbSwgc3RhdGUpOwogICAgIH0KLQotICAgIC8vIE11bHRpbGlu
ZSBDb21tZW50Ci0gICAgaWYgKHN0cmVhbS5tYXRjaCgnLyonKSl7Ci0gICAgICBzdGF0ZS50b2tl
bml6ZXIgPSBtdWx0aWxpbmVDb21tZW50OworICAgIGlmIChzdHJlYW0ubWF0Y2goIi8vIikpIHsK
KyAgICAgIHN0YXRlLnRva2VuaXplciA9IGNvbW1lbnQoc3RyZWFtLmluZGVudGF0aW9uKCksIGZh
bHNlKTsKICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZXIoc3RyZWFtLCBzdGF0ZSk7CiAgICAg
fQogCiAgICAgLy8gSW50ZXJwb2xhdGlvbgotICAgIGlmIChzdHJlYW0ubWF0Y2goJyN7Jykpewot
ICAgIHN0YXRlLnRva2VuaXplciA9IGJ1aWxkSW50ZXJwb2xhdGlvblRva2VuaXplcih0b2tlbkJh
c2UpOworICAgIGlmIChzdHJlYW0ubWF0Y2goIiN7IikpIHsKKyAgICAgIHN0YXRlLnRva2VuaXpl
ciA9IGJ1aWxkSW50ZXJwb2xhdGlvblRva2VuaXplcih0b2tlbkJhc2UpOwogICAgICAgcmV0dXJu
ICJvcGVyYXRvciI7CiAgICAgfQogCi0gICAgaWYgKGNoID09PSAiLiIpeworICAgIC8vIFN0cmlu
Z3MKKyAgICBpZiAoY2ggPT09ICciJyB8fCBjaCA9PT0gIiciKSB7CiAgICAgICBzdHJlYW0ubmV4
dCgpOworICAgICAgc3RhdGUudG9rZW5pemVyID0gYnVpbGRTdHJpbmdUb2tlbml6ZXIoY2gpOwor
ICAgICAgcmV0dXJuICJzdHJpbmciOworICAgIH0KIAotICAgICAgLy8gTWF0Y2ggY2xhc3Mgc2Vs
ZWN0b3JzCi0gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW1x3LV0rLykpewotICAgICAgICBpbmRl
bnQoc3RhdGUpOwotICAgICAgICByZXR1cm4gImF0b20iOwotICAgICAgfWVsc2UgaWYgKHN0cmVh
bS5wZWVrKCkgPT09ICIjIil7Ci0gICAgICAgIGluZGVudChzdGF0ZSk7Ci0gICAgICAgIHJldHVy
biAiYXRvbSI7Ci0gICAgICB9ZWxzZXsKLSAgICAgICAgcmV0dXJuICJvcGVyYXRvciI7CisgICAg
aWYoIXN0YXRlLmN1cnNvckhhbGYpey8vIHN0YXRlLmN1cnNvckhhbGYgPT09IDAKKyAgICAvLyBm
aXJzdCBoYWxmIGkuZS4gYmVmb3JlIDogZm9yIGtleS12YWx1ZSBwYWlycworICAgIC8vIGluY2x1
ZGluZyBzZWxlY3RvcnMKKworICAgICAgaWYgKGNoID09PSAiLiIpIHsKKyAgICAgICAgc3RyZWFt
Lm5leHQoKTsKKyAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXltcdy1dKy8pKSB7CisgICAgICAg
ICAgaW5kZW50KHN0YXRlKTsKKyAgICAgICAgICByZXR1cm4gImF0b20iOworICAgICAgICB9IGVs
c2UgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICIjIikgeworICAgICAgICAgIGluZGVudChzdGF0ZSk7
CisgICAgICAgICAgcmV0dXJuICJhdG9tIjsKKyAgICAgICAgfQogICAgICAgfQotICAgIH0KIAot
ICAgIGlmIChjaCA9PT0gIiMiKXsKLSAgICAgIHN0cmVhbS5uZXh0KCk7CisgICAgICBpZiAoY2gg
PT09ICIjIikgeworICAgICAgICBzdHJlYW0ubmV4dCgpOworICAgICAgICAvLyBJRCBzZWxlY3Rv
cnMKKyAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXltcdy1dKy8pKSB7CisgICAgICAgICAgaW5k
ZW50KHN0YXRlKTsKKyAgICAgICAgICByZXR1cm4gImF0b20iOworICAgICAgICB9CisgICAgICAg
IGlmIChzdHJlYW0ucGVlaygpID09PSAiIyIpIHsKKyAgICAgICAgICBpbmRlbnQoc3RhdGUpOwor
ICAgICAgICAgIHJldHVybiAiYXRvbSI7CisgICAgICAgIH0KKyAgICAgIH0KIAotICAgICAgLy8g
SGV4IG51bWJlcnMKLSAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1swLTlhLWZBLUZdezZ9fFswLTlh
LWZBLUZdezN9LykpewotICAgICAgICByZXR1cm4gIm51bWJlciI7CisgICAgICAvLyBWYXJpYWJs
ZXMKKyAgICAgIGlmIChjaCA9PT0gIiQiKSB7CisgICAgICAgIHN0cmVhbS5uZXh0KCk7CisgICAg
ICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LV0vKTsKKyAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS0y
IjsKICAgICAgIH0KIAotICAgICAgLy8gSUQgc2VsZWN0b3JzCi0gICAgICBpZiAoc3RyZWFtLm1h
dGNoKC9eW1x3LV0rLykpewotICAgICAgICBpbmRlbnQoc3RhdGUpOworICAgICAgLy8gTnVtYmVy
cworICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/WzAtOVwuXSsvKSkKKyAgICAgICAgcmV0dXJu
ICJudW1iZXIiOworCisgICAgICAvLyBVbml0cworICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXihw
eHxlbXxpbilcYi8pKQorICAgICAgICByZXR1cm4gInVuaXQiOworCisgICAgICBpZiAoc3RyZWFt
Lm1hdGNoKGtleXdvcmRzUmVnZXhwKSkKKyAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKKworICAg
ICAgaWYgKHN0cmVhbS5tYXRjaCgvXnVybC8pICYmIHN0cmVhbS5wZWVrKCkgPT09ICIoIikgewor
ICAgICAgICBzdGF0ZS50b2tlbml6ZXIgPSB1cmxUb2tlbnM7CiAgICAgICAgIHJldHVybiAiYXRv
bSI7CiAgICAgICB9CiAKLSAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSAiIyIpewotICAgICAg
ICBpbmRlbnQoc3RhdGUpOwotICAgICAgICByZXR1cm4gImF0b20iOworICAgICAgaWYgKGNoID09
PSAiPSIpIHsKKyAgICAgICAgLy8gTWF0Y2ggc2hvcnRjdXQgbWl4aW4gZGVmaW5pdGlvbgorICAg
ICAgICBpZiAoc3RyZWFtLm1hdGNoKC9ePVtcdy1dKy8pKSB7CisgICAgICAgICAgaW5kZW50KHN0
YXRlKTsKKyAgICAgICAgICByZXR1cm4gIm1ldGEiOworICAgICAgICB9CiAgICAgICB9Ci0gICAg
fQogCi0gICAgLy8gTnVtYmVycwotICAgIGlmIChzdHJlYW0ubWF0Y2goL14tP1swLTlcLl0rLykp
ewotICAgICAgcmV0dXJuICJudW1iZXIiOwotICAgIH0KKyAgICAgIGlmIChjaCA9PT0gIisiKSB7
CisgICAgICAgIC8vIE1hdGNoIHNob3J0Y3V0IG1peGluIGRlZmluaXRpb24KKyAgICAgICAgaWYg
KHN0cmVhbS5tYXRjaCgvXlwrW1x3LV0rLykpeworICAgICAgICAgIHJldHVybiAidmFyaWFibGUt
MyI7CisgICAgICAgIH0KKyAgICAgIH0KIAotICAgIC8vIFVuaXRzCi0gICAgaWYgKHN0cmVhbS5t
YXRjaCgvXihweHxlbXxpbilcYi8pKXsKLSAgICAgIHJldHVybiAidW5pdCI7Ci0gICAgfQorICAg
ICAgaWYoY2ggPT09ICJAIil7CisgICAgICAgIGlmKHN0cmVhbS5tYXRjaCgvQGV4dGVuZC8pKXsK
KyAgICAgICAgICBpZighc3RyZWFtLm1hdGNoKC9ccypbXHddLykpCisgICAgICAgICAgICBkZWRl
bnQoc3RhdGUpOworICAgICAgICB9CisgICAgICB9CiAKLSAgICBpZiAoc3RyZWFtLm1hdGNoKGtl
eXdvcmRzUmVnZXhwKSl7Ci0gICAgICByZXR1cm4gImtleXdvcmQiOwotICAgIH0KIAotICAgIGlm
IChzdHJlYW0ubWF0Y2goL151cmwvKSAmJiBzdHJlYW0ucGVlaygpID09PSAiKCIpewotICAgICAg
c3RhdGUudG9rZW5pemVyID0gdXJsVG9rZW5zOwotICAgICAgcmV0dXJuICJhdG9tIjsKLSAgICB9
CisgICAgICAvLyBJbmRlbnQgRGlyZWN0aXZlcworICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXkAo
ZWxzZSBpZnxpZnxtZWRpYXxlbHNlfGZvcnxlYWNofHdoaWxlfG1peGlufGZ1bmN0aW9uKS8pKSB7
CisgICAgICAgIGluZGVudChzdGF0ZSk7CisgICAgICAgIHJldHVybiAibWV0YSI7CisgICAgICB9
CiAKLSAgICAvLyBWYXJpYWJsZXMKLSAgICBpZiAoY2ggPT09ICIkIil7Ci0gICAgICBzdHJlYW0u
bmV4dCgpOwotICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHctXS8pOworICAgICAgLy8gT3RoZXIg
RGlyZWN0aXZlcworICAgICAgaWYgKGNoID09PSAiQCIpIHsKKyAgICAgICAgc3RyZWFtLm5leHQo
KTsKKyAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHctXS8pOworICAgICAgICByZXR1cm4gIm1l
dGEiOworICAgICAgfQorCisgICAgICBpZiAoc3RyZWFtLmVhdFdoaWxlKC9bXHctXS8pKXsKKyAg
ICAgICAgaWYoc3RyZWFtLm1hdGNoKC8gKjogKltcdy1cK1wkIyFcKCInXS8sZmFsc2UpKXsKKyAg
ICAgICAgICByZXR1cm4gInByb3BlcnR5IjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHN0
cmVhbS5tYXRjaCgvICo6LyxmYWxzZSkpeworICAgICAgICAgIGluZGVudChzdGF0ZSk7CisgICAg
ICAgICAgc3RhdGUuY3Vyc29ySGFsZiA9IDE7CisgICAgICAgICAgcmV0dXJuICJhdG9tIjsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmKHN0cmVhbS5tYXRjaCgvICosLyxmYWxzZSkpeworICAg
ICAgICAgIHJldHVybiAiYXRvbSI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZXsKKyAgICAgICAg
ICBpbmRlbnQoc3RhdGUpOworICAgICAgICAgIHJldHVybiAiYXRvbSI7CisgICAgICAgIH0KKyAg
ICAgIH0KIAotICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICI6Iil7CisgICAgICBpZihjaCA9
PT0gIjoiKXsKKyAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChwc2V1ZG9FbGVtZW50c1JlZ2V4cCkp
eyAvLyBjb3VsZCBiZSBhIHBzZXVkby1lbGVtZW50CisgICAgICAgICAgcmV0dXJuICJrZXl3b3Jk
IjsKKyAgICAgICAgfQogICAgICAgICBzdHJlYW0ubmV4dCgpOwotICAgICAgICByZXR1cm4gInZh
cmlhYmxlLTIiOwotICAgICAgfWVsc2V7Ci0gICAgICAgIHJldHVybiAidmFyaWFibGUtMyI7Cisg
ICAgICAgIHN0YXRlLmN1cnNvckhhbGY9MTsKKyAgICAgICAgcmV0dXJuICJvcGVyYXRvciI7CiAg
ICAgICB9Ci0gICAgfQogCi0gICAgaWYgKGNoID09PSAiISIpewotICAgICAgc3RyZWFtLm5leHQo
KTsKKyAgICB9IC8vIGN1cnNvckhhbGY9PT0wIGVuZHMgaGVyZQorICAgIGVsc2V7CiAKLSAgICAg
IGlmIChzdHJlYW0ubWF0Y2goL15bXHddKy8pKXsKLSAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsK
KyAgICAgIGlmIChjaCA9PT0gIiMiKSB7CisgICAgICAgIHN0cmVhbS5uZXh0KCk7CisgICAgICAg
IC8vIEhleCBudW1iZXJzCisgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1swLTlhLWZBLUZdezZ9
fFswLTlhLWZBLUZdezN9LykpeworICAgICAgICAgIGlmKCFzdHJlYW0ucGVlaygpKXsKKyAgICAg
ICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1
cm4gIm51bWJlciI7CisgICAgICAgIH0KICAgICAgIH0KIAotICAgICAgcmV0dXJuICJvcGVyYXRv
ciI7Ci0gICAgfQorICAgICAgLy8gTnVtYmVycworICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/
WzAtOVwuXSsvKSl7CisgICAgICAgIGlmKCFzdHJlYW0ucGVlaygpKXsKKyAgICAgICAgICBzdGF0
ZS5jdXJzb3JIYWxmID0gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gIm51bWJlciI7Cisg
ICAgICB9CiAKLSAgICBpZiAoY2ggPT09ICI9Iil7Ci0gICAgICBzdHJlYW0ubmV4dCgpOworICAg
ICAgLy8gVW5pdHMKKyAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14ocHh8ZW18aW4pXGIvKSl7Cisg
ICAgICAgIGlmKCFzdHJlYW0ucGVlaygpKXsKKyAgICAgICAgICBzdGF0ZS5jdXJzb3JIYWxmID0g
MDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gInVuaXQiOworICAgICAgfQogCi0gICAgICAv
LyBNYXRjaCBzaG9ydGN1dCBtaXhpbiBkZWZpbml0aW9uCi0gICAgICBpZiAoc3RyZWFtLm1hdGNo
KC9eW1x3LV0rLykpewotICAgICAgICBpbmRlbnQoc3RhdGUpOwotICAgICAgICByZXR1cm4gIm1l
dGEiOwotICAgICAgfWVsc2UgewotICAgICAgICByZXR1cm4gIm9wZXJhdG9yIjsKKyAgICAgIGlm
IChzdHJlYW0ubWF0Y2goa2V5d29yZHNSZWdleHApKXsKKyAgICAgICAgaWYoIXN0cmVhbS5wZWVr
KCkpeworICAgICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAwOworICAgICAgICB9CisgICAgICAg
IHJldHVybiAia2V5d29yZCI7CiAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKGNoID09PSAiKyIp
ewotICAgICAgc3RyZWFtLm5leHQoKTsKKyAgICAgIGlmIChzdHJlYW0ubWF0Y2goL151cmwvKSAm
JiBzdHJlYW0ucGVlaygpID09PSAiKCIpIHsKKyAgICAgICAgc3RhdGUudG9rZW5pemVyID0gdXJs
VG9rZW5zOworICAgICAgICBpZighc3RyZWFtLnBlZWsoKSl7CisgICAgICAgICAgc3RhdGUuY3Vy
c29ySGFsZiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICJhdG9tIjsKKyAgICAgIH0K
IAotICAgICAgLy8gTWF0Y2ggc2hvcnRjdXQgbWl4aW4gZGVmaW5pdGlvbgotICAgICAgaWYgKHN0
cmVhbS5tYXRjaCgvXltcdy1dKy8pKXsKKyAgICAgIC8vIFZhcmlhYmxlcworICAgICAgaWYgKGNo
ID09PSAiJCIpIHsKKyAgICAgICAgc3RyZWFtLm5leHQoKTsKKyAgICAgICAgc3RyZWFtLmVhdFdo
aWxlKC9bXHctXS8pOworICAgICAgICBpZighc3RyZWFtLnBlZWsoKSl7CisgICAgICAgICAgc3Rh
dGUuY3Vyc29ySGFsZiA9IDA7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS0z
IjsKLSAgICAgIH1lbHNlIHsKLSAgICAgICAgcmV0dXJuICJvcGVyYXRvciI7CiAgICAgICB9Ci0g
ICAgfQogCi0gICAgLy8gSW5kZW50IERpcmVjdGl2ZXMKLSAgICBpZiAoc3RyZWFtLm1hdGNoKC9e
QChlbHNlIGlmfGlmfG1lZGlhfGVsc2V8Zm9yfGVhY2h8d2hpbGV8bWl4aW58ZnVuY3Rpb24pLykp
ewotICAgICAgaW5kZW50KHN0YXRlKTsKLSAgICAgIHJldHVybiAibWV0YSI7Ci0gICAgfQorICAg
ICAgLy8gYmFuZyBjaGFyYWN0ZXIgZm9yICFpbXBvcnRhbnQsICFkZWZhdWx0LCBldGMuCisgICAg
ICBpZiAoY2ggPT09ICIhIikgeworICAgICAgICBzdHJlYW0ubmV4dCgpOworICAgICAgICBpZigh
c3RyZWFtLnBlZWsoKSl7CisgICAgICAgICAgc3RhdGUuY3Vyc29ySGFsZiA9IDA7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHN0cmVhbS5tYXRjaCgvXltcd10rLykgPyAia2V5d29yZCI6ICJv
cGVyYXRvciI7CisgICAgICB9CiAKLSAgICAvLyBPdGhlciBEaXJlY3RpdmVzCi0gICAgaWYgKGNo
ID09PSAiQCIpewotICAgICAgc3RyZWFtLm5leHQoKTsKLSAgICAgIHN0cmVhbS5lYXRXaGlsZSgv
W1x3LV0vKTsKLSAgICAgIHJldHVybiAibWV0YSI7Ci0gICAgfQorICAgICAgaWYgKHN0cmVhbS5t
YXRjaChvcFJlZ2V4cCkpeworICAgICAgICBpZighc3RyZWFtLnBlZWsoKSl7CisgICAgICAgICAg
c3RhdGUuY3Vyc29ySGFsZiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICJvcGVyYXRv
ciI7CisgICAgICB9CiAKLSAgICAvLyBTdHJpbmdzCi0gICAgaWYgKGNoID09PSAnIicgfHwgY2gg
PT09ICInIil7Ci0gICAgICBzdHJlYW0ubmV4dCgpOwotICAgICAgc3RhdGUudG9rZW5pemVyID0g
YnVpbGRTdHJpbmdUb2tlbml6ZXIoY2gpOwotICAgICAgcmV0dXJuICJzdHJpbmciOwotICAgIH0K
KyAgICAgIC8vIGF0dHJpYnV0ZXMKKyAgICAgIGlmIChzdHJlYW0uZWF0V2hpbGUoL1tcdy1dLykp
IHsKKyAgICAgICAgaWYoIXN0cmVhbS5wZWVrKCkpeworICAgICAgICAgIHN0YXRlLmN1cnNvckhh
bGYgPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiYXR0cmlidXRlIjsKKyAgICAgIH0K
IAotICAgIC8vIFBzZXVkbyBlbGVtZW50IHNlbGVjdG9ycwotICAgIGlmIChjaCA9PSAnOicgJiYg
c3RyZWFtLm1hdGNoKHBzZXVkb0VsZW1lbnRzUmVnZXhwKSl7Ci0gICAgICByZXR1cm4gImtleXdv
cmQiOwotICAgIH0KKyAgICAgIC8vc3RyZWFtLmVhdFNwYWNlKCk7CisgICAgICBpZighc3RyZWFt
LnBlZWsoKSl7CisgICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAwOworICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgIH0KIAotICAgIC8vIGF0b21zCi0gICAgaWYgKHN0cmVhbS5lYXRXaGlsZSgv
W1x3LSZdLykpewotICAgICAgLy8gbWF0Y2hlcyBhIHByb3BlcnR5IGRlZmluaXRpb24KLSAgICAg
IGlmIChzdHJlYW0ucGVlaygpID09PSAiOiIgJiYgIXN0cmVhbS5tYXRjaChwc2V1ZG9FbGVtZW50
c1JlZ2V4cCwgZmFsc2UpKQotICAgICAgICByZXR1cm4gInByb3BlcnR5IjsKLSAgICAgIGVsc2UK
LSAgICAgICAgcmV0dXJuICJhdG9tIjsKLSAgICB9CisgICAgfSAvLyBlbHNlIGVuZHMgaGVyZQog
Ci0gICAgaWYgKHN0cmVhbS5tYXRjaChvcFJlZ2V4cCkpeworICAgIGlmIChzdHJlYW0ubWF0Y2go
b3BSZWdleHApKQogICAgICAgcmV0dXJuICJvcGVyYXRvciI7Ci0gICAgfQogCiAgICAgLy8gSWYg
d2UgaGF2ZW4ndCByZXR1cm5lZCBieSBub3csIHdlIG1vdmUgMSBjaGFyYWN0ZXIKICAgICAvLyBh
bmQgcmV0dXJuIGFuIGVycm9yCiAgICAgc3RyZWFtLm5leHQoKTsKICAgICByZXR1cm4gbnVsbDsK
LSAgfTsKKyAgfQogCi0gIHZhciB0b2tlbkxleGVyID0gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkg
ewotICAgIGlmIChzdHJlYW0uc29sKCkpewotICAgICAgc3RhdGUuaW5kZW50Q291bnQgPSAwOwot
ICAgIH0KKyAgZnVuY3Rpb24gdG9rZW5MZXhlcihzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHN0
cmVhbS5zb2woKSkgc3RhdGUuaW5kZW50Q291bnQgPSAwOwogICAgIHZhciBzdHlsZSA9IHN0YXRl
LnRva2VuaXplcihzdHJlYW0sIHN0YXRlKTsKICAgICB2YXIgY3VycmVudCA9IHN0cmVhbS5jdXJy
ZW50KCk7CiAKLSAgICBpZiAoY3VycmVudCA9PT0gIkByZXR1cm4iKXsKKyAgICBpZiAoY3VycmVu
dCA9PT0gIkByZXR1cm4iIHx8IGN1cnJlbnQgPT09ICJ9Iil7CiAgICAgICBkZWRlbnQoc3RhdGUp
OwogICAgIH0KIAotICAgIGlmIChzdHlsZSA9PT0gImF0b20iKXsKLSAgICAgIGluZGVudChzdGF0
ZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlICE9PSBudWxsKXsKKyAgICBpZiAoc3R5bGUgIT09
IG51bGwpIHsKICAgICAgIHZhciBzdGFydE9mVG9rZW4gPSBzdHJlYW0ucG9zIC0gY3VycmVudC5s
ZW5ndGg7CisKICAgICAgIHZhciB3aXRoQ3VycmVudEluZGVudCA9IHN0YXJ0T2ZUb2tlbiArIChj
b25maWcuaW5kZW50VW5pdCAqIHN0YXRlLmluZGVudENvdW50KTsKIAogICAgICAgdmFyIG5ld1Nj
b3BlcyA9IFtdOwogCi0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLnNjb3Blcy5sZW5n
dGg7IGkrKyl7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLnNjb3Blcy5sZW5ndGg7
IGkrKykgewogICAgICAgICB2YXIgc2NvcGUgPSBzdGF0ZS5zY29wZXNbaV07CiAKLSAgICAgICAg
aWYgKHNjb3BlLm9mZnNldCA8PSB3aXRoQ3VycmVudEluZGVudCl7CisgICAgICAgIGlmIChzY29w
ZS5vZmZzZXQgPD0gd2l0aEN1cnJlbnRJbmRlbnQpCiAgICAgICAgICAgbmV3U2NvcGVzLnB1c2go
c2NvcGUpOwotICAgICAgICB9CiAgICAgICB9CiAKICAgICAgIHN0YXRlLnNjb3BlcyA9IG5ld1Nj
b3BlczsKQEAgLTMxNSwxMyArMzgxLDE2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic2FzcyIs
IGZ1bmN0aW9uKGNvbmZpZykgewogCiAKICAgICByZXR1cm4gc3R5bGU7Ci0gIH07CisgIH0KIAog
ICByZXR1cm4gewogICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgcmV0dXJuIHsK
ICAgICAgICAgdG9rZW5pemVyOiB0b2tlbkJhc2UsCi0gICAgICAgIHNjb3BlczogW3tvZmZzZXQ6
IDAsIHR5cGU6ICdzYXNzJ31dLAorICAgICAgICBzY29wZXM6IFt7b2Zmc2V0OiAwLCB0eXBlOiAi
c2FzcyJ9XSwKKyAgICAgICAgaW5kZW50Q291bnQ6IDAsCisgICAgICAgIGN1cnNvckhhbGY6IDAs
ICAvLyBjdXJzb3IgaGFsZiB0ZWxscyB1cyBpZiBjdXJzb3IgbGllcyBhZnRlciAoMSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIG9yIGJlZm9yZSAoMCkgY29sb24gKHdlbGwuLi4gbW9yZSBv
ciBsZXNzKQogICAgICAgICBkZWZpbmVkVmFyczogW10sCiAgICAgICAgIGRlZmluZWRNaXhpbnM6
IFtdCiAgICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zZWFyY2hjdXJzb3IuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NlYXJjaGN1cnNvci5q
cwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDI3ODMzMDg4NThjYmI4YThm
ZGYzNmM4NTExNGRjZDU4MGIwYzJlNjMuLmI3MDI0MmVlNGI4Y2YxYjY5OGU1OGJlNTlmZDRhNGNk
MDUwNjUwMDUKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJu
YWwvQ29kZU1pcnJvci9zZWFyY2hjdXJzb3IuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zZWFyY2hjdXJzb3IuanMKQEAgLTEw
Nyw3ICsxMDcsNyBAQAogICAgICAgICAgICAgdmFyIGZyb20gPSBQb3MocG9zLmxpbmUsIGN1dCk7
CiAgICAgICAgICAgICBmb3IgKHZhciBsbiA9IHBvcy5saW5lICsgMSwgaSA9IDE7IGkgPCBsYXN0
OyArK2ksICsrbG4pCiAgICAgICAgICAgICAgIGlmICh0YXJnZXRbaV0gIT0gZm9sZChkb2MuZ2V0
TGluZShsbikpKSByZXR1cm47Ci0gICAgICAgICAgICBpZiAoZG9jLmdldExpbmUobG4pLnNsaWNl
KDAsIG9yaWdUYXJnZXRbbGFzdF0ubGVuZ3RoKSAhPSB0YXJnZXRbbGFzdF0pIHJldHVybjsKKyAg
ICAgICAgICAgIGlmIChmb2xkKGRvYy5nZXRMaW5lKGxuKS5zbGljZSgwLCBvcmlnVGFyZ2V0W2xh
c3RdLmxlbmd0aCkpICE9IHRhcmdldFtsYXN0XSkgcmV0dXJuOwogICAgICAgICAgICAgcmV0dXJu
IHtmcm9tOiBmcm9tLCB0bzogUG9zKGxuLCBvcmlnVGFyZ2V0W2xhc3RdLmxlbmd0aCl9OwogICAg
ICAgICAgIH0KICAgICAgICAgfTsKQEAgLTE0OCwxMCArMTQ4LDEwIEBACiAgICAgZnJvbTogZnVu
Y3Rpb24oKSB7aWYgKHRoaXMuYXRPY2N1cnJlbmNlKSByZXR1cm4gdGhpcy5wb3MuZnJvbTt9LAog
ICAgIHRvOiBmdW5jdGlvbigpIHtpZiAodGhpcy5hdE9jY3VycmVuY2UpIHJldHVybiB0aGlzLnBv
cy50bzt9LAogCi0gICAgcmVwbGFjZTogZnVuY3Rpb24obmV3VGV4dCkgeworICAgIHJlcGxhY2U6
IGZ1bmN0aW9uKG5ld1RleHQsIG9yaWdpbikgewogICAgICAgaWYgKCF0aGlzLmF0T2NjdXJyZW5j
ZSkgcmV0dXJuOwogICAgICAgdmFyIGxpbmVzID0gQ29kZU1pcnJvci5zcGxpdExpbmVzKG5ld1Rl
eHQpOwotICAgICAgdGhpcy5kb2MucmVwbGFjZVJhbmdlKGxpbmVzLCB0aGlzLnBvcy5mcm9tLCB0
aGlzLnBvcy50byk7CisgICAgICB0aGlzLmRvYy5yZXBsYWNlUmFuZ2UobGluZXMsIHRoaXMucG9z
LmZyb20sIHRoaXMucG9zLnRvLCBvcmlnaW4pOwogICAgICAgdGhpcy5wb3MudG8gPSBQb3ModGhp
cy5wb3MuZnJvbS5saW5lICsgbGluZXMubGVuZ3RoIC0gMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCArIChsaW5lcy5sZW5ndGggPT0gMSA/
IHRoaXMucG9zLmZyb20uY2ggOiAwKSk7CiAgICAgfQpAQCAtMTc3LDkgKzE3Nyw5IEBACiAgIH0p
OwogCiAgIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJzZWxlY3RNYXRjaGVzIiwgZnVuY3Rp
b24ocXVlcnksIGNhc2VGb2xkKSB7Ci0gICAgdmFyIHJhbmdlcyA9IFtdLCBuZXh0OworICAgIHZh
ciByYW5nZXMgPSBbXTsKICAgICB2YXIgY3VyID0gdGhpcy5nZXRTZWFyY2hDdXJzb3IocXVlcnks
IHRoaXMuZ2V0Q3Vyc29yKCJmcm9tIiksIGNhc2VGb2xkKTsKLSAgICB3aGlsZSAobmV4dCA9IGN1
ci5maW5kTmV4dCgpKSB7CisgICAgd2hpbGUgKGN1ci5maW5kTmV4dCgpKSB7CiAgICAgICBpZiAo
Q29kZU1pcnJvci5jbXBQb3MoY3VyLnRvKCksIHRoaXMuZ2V0Q3Vyc29yKCJ0byIpKSA+IDApIGJy
ZWFrOwogICAgICAgcmFuZ2VzLnB1c2goe2FuY2hvcjogY3VyLmZyb20oKSwgaGVhZDogY3VyLnRv
KCl9KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Ivc3FsLmpzCm9sZCBtb2RlIDEwMDY0NApu
ZXcgbW9kZSAxMDA3NTUKaW5kZXggNmMwMmY0ZTk0NzQxYmZiMDQ3NzA1OTYwMTEyN2FhZTQzOTcy
MmVjMi4uYTkwODI3NzE1MWZlOWZkNTA4YTQxMzcxNWY3YjMxMDljMzQ4Mjc3ZgotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2Rl
TWlycm9yL3NxbC5qcwpAQCAtMTkwLDcgKzE5MCw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgi
c3FsIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKIAogICAgIGluZGVudDogZnVu
Y3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICAgdmFyIGN4ID0gc3RhdGUuY29udGV4dDsK
LSAgICAgIGlmICghY3gpIHJldHVybiAwOworICAgICAgaWYgKCFjeCkgcmV0dXJuIENvZGVNaXJy
b3IuUGFzczsKICAgICAgIHZhciBjbG9zaW5nID0gdGV4dEFmdGVyLmNoYXJBdCgwKSA9PSBjeC50
eXBlOwogICAgICAgaWYgKGN4LmFsaWduKSByZXR1cm4gY3guY29sICsgKGNsb3NpbmcgPyAwIDog
MSk7CiAgICAgICBlbHNlIHJldHVybiBjeC5pbmRlbnQgKyAoY2xvc2luZyA/IDAgOiBjb25maWcu
aW5kZW50VW5pdCk7CkBAIC0yMTMsNyArMjEzLDggQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJz
cWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgIHdoaWxlICgoY2ggPSBz
dHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICBpZiAoY2ggPT0gImAiICYmICFzdHJlYW0u
ZWF0KCJgIikpIHJldHVybiAidmFyaWFibGUtMiI7CiAgICAgfQotICAgIHJldHVybiBudWxsOwor
ICAgIHN0cmVhbS5iYWNrVXAoc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGggLSAxKTsKKyAgICByZXR1
cm4gc3RyZWFtLmVhdFdoaWxlKC9cdy8pID8gInZhcmlhYmxlLTIiIDogbnVsbDsKICAgfQogCiAg
IC8vIHZhcmlhYmxlIHRva2VuCkBAIC0yNTYsNyArMjU3LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJzcWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICB9CiAKICAgLy8g
dGhlc2Uga2V5d29yZHMgYXJlIHVzZWQgYnkgYWxsIFNRTCBkaWFsZWN0cyAoaG93ZXZlciwgYSBt
b2RlIGNhbiBzdGlsbCBvdmVyd3JpdGUgaXQpCi0gIHZhciBzcWxLZXl3b3JkcyA9ICJhbHRlciBh
bmQgYXMgYXNjIGJldHdlZW4gYnkgY291bnQgY3JlYXRlIGRlbGV0ZSBkZXNjIGRpc3RpbmN0IGRy
b3AgZnJvbSBoYXZpbmcgaW4gaW5zZXJ0IGludG8gaXMgam9pbiBsaWtlIG5vdCBvbiBvciBvcmRl
ciBzZWxlY3Qgc2V0IHRhYmxlIHVuaW9uIHVwZGF0ZSB2YWx1ZXMgd2hlcmUgIjsKKyAgdmFyIHNx
bEtleXdvcmRzID0gImFsdGVyIGFuZCBhcyBhc2MgYmV0d2VlbiBieSBjb3VudCBjcmVhdGUgZGVs
ZXRlIGRlc2MgZGlzdGluY3QgZHJvcCBmcm9tIGdyb3VwIGhhdmluZyBpbiBpbnNlcnQgaW50byBp
cyBqb2luIGxpa2Ugbm90IG9uIG9yIG9yZGVyIHNlbGVjdCBzZXQgdGFibGUgdW5pb24gdXBkYXRl
IHZhbHVlcyB3aGVyZSAiOwogCiAgIC8vIHR1cm4gYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBpbnRv
IGFuIGFycmF5CiAgIGZ1bmN0aW9uIHNldChzdHIpIHsKQEAgLTI3OSw3ICsyODAsNyBAQCBDb2Rl
TWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CiAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LW1zc3FsIiwgewogICAgIG5hbWU6ICJz
cWwiLAogICAgIGNsaWVudDogc2V0KCJjaGFyc2V0IGNsZWFyIGNvbm5lY3QgZWRpdCBlZ28gZXhp
dCBnbyBoZWxwIG5vcGFnZXIgbm90ZWUgbm93YXJuaW5nIHBhZ2VyIHByaW50IHByb21wdCBxdWl0
IHJlaGFzaCBzb3VyY2Ugc3RhdHVzIHN5c3RlbSB0ZWUiKSwKLSAgICBrZXl3b3Jkczogc2V0KHNx
bEtleXdvcmRzICsgImJlZ2luIHRyaWdnZXIgcHJvYyB2aWV3IGluZGV4IGZvciBhZGQgY29uc3Ry
YWludCBrZXkgcHJpbWFyeSBmb3JlaWduIGNvbGxhdGUgY2x1c3RlcmVkIG5vbmNsdXN0ZXJlZCIp
LAorICAgIGtleXdvcmRzOiBzZXQoc3FsS2V5d29yZHMgKyAiYmVnaW4gdHJpZ2dlciBwcm9jIHZp
ZXcgaW5kZXggZm9yIGFkZCBjb25zdHJhaW50IGtleSBwcmltYXJ5IGZvcmVpZ24gY29sbGF0ZSBj
bHVzdGVyZWQgbm9uY2x1c3RlcmVkIGRlY2xhcmUiKSwKICAgICBidWlsdGluOiBzZXQoImJpZ2lu
dCBudW1lcmljIGJpdCBzbWFsbGludCBkZWNpbWFsIHNtYWxsbW9uZXkgaW50IHRpbnlpbnQgbW9u
ZXkgZmxvYXQgcmVhbCBjaGFyIHZhcmNoYXIgdGV4dCBuY2hhciBudmFyY2hhciBudGV4dCBiaW5h
cnkgdmFyYmluYXJ5IGltYWdlIGN1cnNvciB0aW1lc3RhbXAgaGllcmFyY2h5aWQgdW5pcXVlaWRl
bnRpZmllciBzcWxfdmFyaWFudCB4bWwgdGFibGUgIiksCiAgICAgYXRvbXM6IHNldCgiZmFsc2Ug
dHJ1ZSBudWxsIHVua25vd24iKSwKICAgICBvcGVyYXRvckNoYXJzOiAvXlsqK1wtJTw+IT1dLywK
QEAgLTI5Miw3ICsyOTMsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94
LW15c3FsIiwgewogICAgIG5hbWU6ICJzcWwiLAogICAgIGNsaWVudDogc2V0KCJjaGFyc2V0IGNs
ZWFyIGNvbm5lY3QgZWRpdCBlZ28gZXhpdCBnbyBoZWxwIG5vcGFnZXIgbm90ZWUgbm93YXJuaW5n
IHBhZ2VyIHByaW50IHByb21wdCBxdWl0IHJlaGFzaCBzb3VyY2Ugc3RhdHVzIHN5c3RlbSB0ZWUi
KSwKLSAgICBrZXl3b3Jkczogc2V0KHNxbEtleXdvcmRzICsgImFjY2Vzc2libGUgYWN0aW9uIGFk
ZCBhZnRlciBhbGdvcml0aG0gYWxsIGFuYWx5emUgYXNlbnNpdGl2ZSBhdCBhdXRob3JzIGF1dG9f
aW5jcmVtZW50IGF1dG9jb21taXQgYXZnIGF2Z19yb3dfbGVuZ3RoIGJlZm9yZSBiaW5hcnkgYmlu
bG9nIGJvdGggYnRyZWUgY2FjaGUgY2FsbCBjYXNjYWRlIGNhc2NhZGVkIGNhc2UgY2F0YWxvZ19u
YW1lIGNoYWluIGNoYW5nZSBjaGFuZ2VkIGNoYXJhY3RlciBjaGVjayBjaGVja3BvaW50IGNoZWNr
c3VtIGNsYXNzX29yaWdpbiBjbGllbnRfc3RhdGlzdGljcyBjbG9zZSBjb2FsZXNjZSBjb2RlIGNv
bGxhdGUgY29sbGF0aW9uIGNvbGxhdGlvbnMgY29sdW1uIGNvbHVtbnMgY29tbWVudCBjb21taXQg
Y29tbWl0dGVkIGNvbXBsZXRpb24gY29uY3VycmVudCBjb25kaXRpb24gY29ubmVjdGlvbiBjb25z
aXN0ZW50IGNvbnN0cmFpbnQgY29udGFpbnMgY29udGludWUgY29udHJpYnV0b3JzIGNvbnZlcnQg
Y3Jvc3MgY3VycmVudCBjdXJyZW50X2RhdGUgY3VycmVudF90aW1lIGN1cnJlbnRfdGltZXN0YW1w
IGN1cnJlbnRfdXNlciBjdXJzb3IgZGF0YSBkYXRhYmFzZSBkYXRhYmFzZXMgZGF5X2hvdXIgZGF5
X21pY3Jvc2Vjb25kIGRheV9taW51dGUgZGF5X3NlY29uZCBkZWFsbG9jYXRlIGRlYyBkZWNsYXJl
IGRlZmF1bHQgZGVsYXlfa2V5X3dyaXRlIGRlbGF5ZWQgZGVsaW1pdGVyIGRlc19rZXlfZmlsZSBk
ZXNjcmliZSBkZXRlcm1pbmlzdGljIGRldl9wb3AgZGV2X3NhbXAgZGV2aWFuY2UgZGlhZ25vc3Rp
Y3MgZGlyZWN0b3J5IGRpc2FibGUgZGlzY2FyZCBkaXN0aW5jdHJvdyBkaXYgZHVhbCBkdW1wZmls
ZSBlYWNoIGVsc2VpZiBlbmFibGUgZW5jbG9zZWQgZW5kIGVuZHMgZW5naW5lIGVuZ2luZXMgZW51
bSBlcnJvcnMgZXNjYXBlIGVzY2FwZWQgZXZlbiBldmVudCBldmVudHMgZXZlcnkgZXhlY3V0ZSBl
eGlzdHMgZXhpdCBleHBsYWluIGV4dGVuZGVkIGZhc3QgZmV0Y2ggZmllbGQgZmllbGRzIGZpcnN0
IGZsdXNoIGZvciBmb3JjZSBmb3JlaWduIGZvdW5kX3Jvd3MgZnVsbCBmdWxsdGV4dCBmdW5jdGlv
biBnZW5lcmFsIGdldCBnbG9iYWwgZ3JhbnQgZ3JhbnRzIGdyb3VwIGdyb3VwYnlfY29uY2F0IGhh
bmRsZXIgaGFzaCBoZWxwIGhpZ2hfcHJpb3JpdHkgaG9zdHMgaG91cl9taWNyb3NlY29uZCBob3Vy
X21pbnV0ZSBob3VyX3NlY29uZCBpZiBpZ25vcmUgaWdub3JlX3NlcnZlcl9pZHMgaW1wb3J0IGlu
ZGV4IGluZGV4X3N0YXRpc3RpY3MgaW5maWxlIGlubmVyIGlubm9kYiBpbm91dCBpbnNlbnNpdGl2
ZSBpbnNlcnRfbWV0aG9kIGluc3RhbGwgaW50ZXJ2YWwgaW52b2tlciBpc29sYXRpb24gaXRlcmF0
ZSBrZXkga2V5cyBraWxsIGxhbmd1YWdlIGxhc3QgbGVhZGluZyBsZWF2ZSBsZWZ0IGxldmVsIGxp
bWl0IGxpbmVhciBsaW5lcyBsaXN0IGxvYWQgbG9jYWwgbG9jYWx0aW1lIGxvY2FsdGltZXN0YW1w
IGxvY2sgbG9ncyBsb3dfcHJpb3JpdHkgbWFzdGVyIG1hc3Rlcl9oZWFydGJlYXRfcGVyaW9kIG1h
c3Rlcl9zc2xfdmVyaWZ5X3NlcnZlcl9jZXJ0IG1hc3RlcnMgbWF0Y2ggbWF4IG1heF9yb3dzIG1h
eHZhbHVlIG1lc3NhZ2VfdGV4dCBtaWRkbGVpbnQgbWlncmF0ZSBtaW4gbWluX3Jvd3MgbWludXRl
X21pY3Jvc2Vjb25kIG1pbnV0ZV9zZWNvbmQgbW9kIG1vZGUgbW9kaWZpZXMgbW9kaWZ5IG11dGV4
IG15c3FsX2Vycm5vIG5hdHVyYWwgbmV4dCBubyBub193cml0ZV90b19iaW5sb2cgb2ZmbGluZSBv
ZmZzZXQgb25lIG9ubGluZSBvcGVuIG9wdGltaXplIG9wdGlvbiBvcHRpb25hbGx5IG91dCBvdXRl
ciBvdXRmaWxlIHBhY2tfa2V5cyBwYXJzZXIgcGFydGl0aW9uIHBhcnRpdGlvbnMgcGFzc3dvcmQg
cGhhc2UgcGx1Z2luIHBsdWdpbnMgcHJlcGFyZSBwcmVzZXJ2ZSBwcmV2IHByaW1hcnkgcHJpdmls
ZWdlcyBwcm9jZWR1cmUgcHJvY2Vzc2xpc3QgcHJvZmlsZSBwcm9maWxlcyBwdXJnZSBxdWVyeSBx
dWljayByYW5nZSByZWFkIHJlYWRfd3JpdGUgcmVhZHMgcmVhbCByZWJ1aWxkIHJlY292ZXIgcmVm
ZXJlbmNlcyByZWdleHAgcmVsYXlsb2cgcmVsZWFzZSByZW1vdmUgcmVuYW1lIHJlb3JnYW5pemUg
cmVwYWlyIHJlcGVhdGFibGUgcmVwbGFjZSByZXF1aXJlIHJlc2lnbmFsIHJlc3RyaWN0IHJlc3Vt
ZSByZXR1cm4gcmV0dXJucyByZXZva2UgcmlnaHQgcmxpa2Ugcm9sbGJhY2sgcm9sbHVwIHJvdyBy
b3dfZm9ybWF0IHJ0cmVlIHNhdmVwb2ludCBzY2hlZHVsZSBzY2hlbWEgc2NoZW1hX25hbWUgc2No
ZW1hcyBzZWNvbmRfbWljcm9zZWNvbmQgc2VjdXJpdHkgc2Vuc2l0aXZlIHNlcGFyYXRvciBzZXJp
YWxpemFibGUgc2VydmVyIHNlc3Npb24gc2hhcmUgc2hvdyBzaWduYWwgc2xhdmUgc2xvdyBzbWFs
bGludCBzbmFwc2hvdCBzb25hbWUgc3BhdGlhbCBzcGVjaWZpYyBzcWwgc3FsX2JpZ19yZXN1bHQg
c3FsX2J1ZmZlcl9yZXN1bHQgc3FsX2NhY2hlIHNxbF9jYWxjX2ZvdW5kX3Jvd3Mgc3FsX25vX2Nh
Y2hlIHNxbF9zbWFsbF9yZXN1bHQgc3FsZXhjZXB0aW9uIHNxbHN0YXRlIHNxbHdhcm5pbmcgc3Ns
IHN0YXJ0IHN0YXJ0aW5nIHN0YXJ0cyBzdGF0dXMgc3RkIHN0ZGRldiBzdGRkZXZfcG9wIHN0ZGRl
dl9zYW1wIHN0b3JhZ2Ugc3RyYWlnaHRfam9pbiBzdWJjbGFzc19vcmlnaW4gc3VtIHN1c3BlbmQg
dGFibGVfbmFtZSB0YWJsZV9zdGF0aXN0aWNzIHRhYmxlcyB0YWJsZXNwYWNlIHRlbXBvcmFyeSB0
ZXJtaW5hdGVkIHRvIHRyYWlsaW5nIHRyYW5zYWN0aW9uIHRyaWdnZXIgdHJpZ2dlcnMgdHJ1bmNh
dGUgdW5jb21taXR0ZWQgdW5kbyB1bmluc3RhbGwgdW5pcXVlIHVubG9jayB1cGdyYWRlIHVzYWdl
IHVzZSB1c2VfZnJtIHVzZXIgdXNlcl9yZXNvdXJjZXMgdXNlcl9zdGF0aXN0aWNzIHVzaW5nIHV0
Y19kYXRlIHV0Y190aW1lIHV0Y190aW1lc3RhbXAgdmFsdWUgdmFyaWFibGVzIHZhcnlpbmcgdmll
dyB2aWV3cyB3YXJuaW5ncyB3aGVuIHdoaWxlIHdpdGggd29yayB3cml0ZSB4YSB4b3IgeWVhcl9t
b250aCB6ZXJvZmlsbCBiZWdpbiBkbyB0aGVuIGVsc2UgbG9vcCByZXBlYXQiKSwKKyAgICBrZXl3
b3Jkczogc2V0KHNxbEtleXdvcmRzICsgImFjY2Vzc2libGUgYWN0aW9uIGFkZCBhZnRlciBhbGdv
cml0aG0gYWxsIGFuYWx5emUgYXNlbnNpdGl2ZSBhdCBhdXRob3JzIGF1dG9faW5jcmVtZW50IGF1
dG9jb21taXQgYXZnIGF2Z19yb3dfbGVuZ3RoIGJlZm9yZSBiaW5hcnkgYmlubG9nIGJvdGggYnRy
ZWUgY2FjaGUgY2FsbCBjYXNjYWRlIGNhc2NhZGVkIGNhc2UgY2F0YWxvZ19uYW1lIGNoYWluIGNo
YW5nZSBjaGFuZ2VkIGNoYXJhY3RlciBjaGVjayBjaGVja3BvaW50IGNoZWNrc3VtIGNsYXNzX29y
aWdpbiBjbGllbnRfc3RhdGlzdGljcyBjbG9zZSBjb2FsZXNjZSBjb2RlIGNvbGxhdGUgY29sbGF0
aW9uIGNvbGxhdGlvbnMgY29sdW1uIGNvbHVtbnMgY29tbWVudCBjb21taXQgY29tbWl0dGVkIGNv
bXBsZXRpb24gY29uY3VycmVudCBjb25kaXRpb24gY29ubmVjdGlvbiBjb25zaXN0ZW50IGNvbnN0
cmFpbnQgY29udGFpbnMgY29udGludWUgY29udHJpYnV0b3JzIGNvbnZlcnQgY3Jvc3MgY3VycmVu
dCBjdXJyZW50X2RhdGUgY3VycmVudF90aW1lIGN1cnJlbnRfdGltZXN0YW1wIGN1cnJlbnRfdXNl
ciBjdXJzb3IgZGF0YSBkYXRhYmFzZSBkYXRhYmFzZXMgZGF5X2hvdXIgZGF5X21pY3Jvc2Vjb25k
IGRheV9taW51dGUgZGF5X3NlY29uZCBkZWFsbG9jYXRlIGRlYyBkZWNsYXJlIGRlZmF1bHQgZGVs
YXlfa2V5X3dyaXRlIGRlbGF5ZWQgZGVsaW1pdGVyIGRlc19rZXlfZmlsZSBkZXNjcmliZSBkZXRl
cm1pbmlzdGljIGRldl9wb3AgZGV2X3NhbXAgZGV2aWFuY2UgZGlhZ25vc3RpY3MgZGlyZWN0b3J5
IGRpc2FibGUgZGlzY2FyZCBkaXN0aW5jdHJvdyBkaXYgZHVhbCBkdW1wZmlsZSBlYWNoIGVsc2Vp
ZiBlbmFibGUgZW5jbG9zZWQgZW5kIGVuZHMgZW5naW5lIGVuZ2luZXMgZW51bSBlcnJvcnMgZXNj
YXBlIGVzY2FwZWQgZXZlbiBldmVudCBldmVudHMgZXZlcnkgZXhlY3V0ZSBleGlzdHMgZXhpdCBl
eHBsYWluIGV4dGVuZGVkIGZhc3QgZmV0Y2ggZmllbGQgZmllbGRzIGZpcnN0IGZsdXNoIGZvciBm
b3JjZSBmb3JlaWduIGZvdW5kX3Jvd3MgZnVsbCBmdWxsdGV4dCBmdW5jdGlvbiBnZW5lcmFsIGdl
dCBnbG9iYWwgZ3JhbnQgZ3JhbnRzIGdyb3VwIGdyb3VwX2NvbmNhdCBoYW5kbGVyIGhhc2ggaGVs
cCBoaWdoX3ByaW9yaXR5IGhvc3RzIGhvdXJfbWljcm9zZWNvbmQgaG91cl9taW51dGUgaG91cl9z
ZWNvbmQgaWYgaWdub3JlIGlnbm9yZV9zZXJ2ZXJfaWRzIGltcG9ydCBpbmRleCBpbmRleF9zdGF0
aXN0aWNzIGluZmlsZSBpbm5lciBpbm5vZGIgaW5vdXQgaW5zZW5zaXRpdmUgaW5zZXJ0X21ldGhv
ZCBpbnN0YWxsIGludGVydmFsIGludm9rZXIgaXNvbGF0aW9uIGl0ZXJhdGUga2V5IGtleXMga2ls
bCBsYW5ndWFnZSBsYXN0IGxlYWRpbmcgbGVhdmUgbGVmdCBsZXZlbCBsaW1pdCBsaW5lYXIgbGlu
ZXMgbGlzdCBsb2FkIGxvY2FsIGxvY2FsdGltZSBsb2NhbHRpbWVzdGFtcCBsb2NrIGxvZ3MgbG93
X3ByaW9yaXR5IG1hc3RlciBtYXN0ZXJfaGVhcnRiZWF0X3BlcmlvZCBtYXN0ZXJfc3NsX3Zlcmlm
eV9zZXJ2ZXJfY2VydCBtYXN0ZXJzIG1hdGNoIG1heCBtYXhfcm93cyBtYXh2YWx1ZSBtZXNzYWdl
X3RleHQgbWlkZGxlaW50IG1pZ3JhdGUgbWluIG1pbl9yb3dzIG1pbnV0ZV9taWNyb3NlY29uZCBt
aW51dGVfc2Vjb25kIG1vZCBtb2RlIG1vZGlmaWVzIG1vZGlmeSBtdXRleCBteXNxbF9lcnJubyBu
YXR1cmFsIG5leHQgbm8gbm9fd3JpdGVfdG9fYmlubG9nIG9mZmxpbmUgb2Zmc2V0IG9uZSBvbmxp
bmUgb3BlbiBvcHRpbWl6ZSBvcHRpb24gb3B0aW9uYWxseSBvdXQgb3V0ZXIgb3V0ZmlsZSBwYWNr
X2tleXMgcGFyc2VyIHBhcnRpdGlvbiBwYXJ0aXRpb25zIHBhc3N3b3JkIHBoYXNlIHBsdWdpbiBw
bHVnaW5zIHByZXBhcmUgcHJlc2VydmUgcHJldiBwcmltYXJ5IHByaXZpbGVnZXMgcHJvY2VkdXJl
IHByb2Nlc3NsaXN0IHByb2ZpbGUgcHJvZmlsZXMgcHVyZ2UgcXVlcnkgcXVpY2sgcmFuZ2UgcmVh
ZCByZWFkX3dyaXRlIHJlYWRzIHJlYWwgcmVidWlsZCByZWNvdmVyIHJlZmVyZW5jZXMgcmVnZXhw
IHJlbGF5bG9nIHJlbGVhc2UgcmVtb3ZlIHJlbmFtZSByZW9yZ2FuaXplIHJlcGFpciByZXBlYXRh
YmxlIHJlcGxhY2UgcmVxdWlyZSByZXNpZ25hbCByZXN0cmljdCByZXN1bWUgcmV0dXJuIHJldHVy
bnMgcmV2b2tlIHJpZ2h0IHJsaWtlIHJvbGxiYWNrIHJvbGx1cCByb3cgcm93X2Zvcm1hdCBydHJl
ZSBzYXZlcG9pbnQgc2NoZWR1bGUgc2NoZW1hIHNjaGVtYV9uYW1lIHNjaGVtYXMgc2Vjb25kX21p
Y3Jvc2Vjb25kIHNlY3VyaXR5IHNlbnNpdGl2ZSBzZXBhcmF0b3Igc2VyaWFsaXphYmxlIHNlcnZl
ciBzZXNzaW9uIHNoYXJlIHNob3cgc2lnbmFsIHNsYXZlIHNsb3cgc21hbGxpbnQgc25hcHNob3Qg
c29uYW1lIHNwYXRpYWwgc3BlY2lmaWMgc3FsIHNxbF9iaWdfcmVzdWx0IHNxbF9idWZmZXJfcmVz
dWx0IHNxbF9jYWNoZSBzcWxfY2FsY19mb3VuZF9yb3dzIHNxbF9ub19jYWNoZSBzcWxfc21hbGxf
cmVzdWx0IHNxbGV4Y2VwdGlvbiBzcWxzdGF0ZSBzcWx3YXJuaW5nIHNzbCBzdGFydCBzdGFydGlu
ZyBzdGFydHMgc3RhdHVzIHN0ZCBzdGRkZXYgc3RkZGV2X3BvcCBzdGRkZXZfc2FtcCBzdG9yYWdl
IHN0cmFpZ2h0X2pvaW4gc3ViY2xhc3Nfb3JpZ2luIHN1bSBzdXNwZW5kIHRhYmxlX25hbWUgdGFi
bGVfc3RhdGlzdGljcyB0YWJsZXMgdGFibGVzcGFjZSB0ZW1wb3JhcnkgdGVybWluYXRlZCB0byB0
cmFpbGluZyB0cmFuc2FjdGlvbiB0cmlnZ2VyIHRyaWdnZXJzIHRydW5jYXRlIHVuY29tbWl0dGVk
IHVuZG8gdW5pbnN0YWxsIHVuaXF1ZSB1bmxvY2sgdXBncmFkZSB1c2FnZSB1c2UgdXNlX2ZybSB1
c2VyIHVzZXJfcmVzb3VyY2VzIHVzZXJfc3RhdGlzdGljcyB1c2luZyB1dGNfZGF0ZSB1dGNfdGlt
ZSB1dGNfdGltZXN0YW1wIHZhbHVlIHZhcmlhYmxlcyB2YXJ5aW5nIHZpZXcgdmlld3Mgd2Fybmlu
Z3Mgd2hlbiB3aGlsZSB3aXRoIHdvcmsgd3JpdGUgeGEgeG9yIHllYXJfbW9udGggemVyb2ZpbGwg
YmVnaW4gZG8gdGhlbiBlbHNlIGxvb3AgcmVwZWF0IiksCiAgICAgYnVpbHRpbjogc2V0KCJib29s
IGJvb2xlYW4gYml0IGJsb2IgZGVjaW1hbCBkb3VibGUgZmxvYXQgbG9uZyBsb25nYmxvYiBsb25n
dGV4dCBtZWRpdW0gbWVkaXVtYmxvYiBtZWRpdW1pbnQgbWVkaXVtdGV4dCB0aW1lIHRpbWVzdGFt
cCB0aW55YmxvYiB0aW55aW50IHRpbnl0ZXh0IHRleHQgYmlnaW50IGludCBpbnQxIGludDIgaW50
MyBpbnQ0IGludDggaW50ZWdlciBmbG9hdCBmbG9hdDQgZmxvYXQ4IGRvdWJsZSBjaGFyIHZhcmJp
bmFyeSB2YXJjaGFyIHZhcmNoYXJhY3RlciBwcmVjaXNpb24gZGF0ZSBkYXRldGltZSB5ZWFyIHVu
c2lnbmVkIHNpZ25lZCBudW1lcmljIiksCiAgICAgYXRvbXM6IHNldCgiZmFsc2UgdHJ1ZSBudWxs
IHVua25vd24iKSwKICAgICBvcGVyYXRvckNoYXJzOiAvXlsqK1wtJTw+IT0mfF5dLywKQEAgLTMy
Niw5ICszMjcsOSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7CiAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWNhc3Nh
bmRyYSIsIHsKICAgICBuYW1lOiAic3FsIiwKICAgICBjbGllbnQ6IHsgfSwKLSAgICBrZXl3b3Jk
czogc2V0KCJ1c2Ugc2VsZWN0IGZyb20gdXNpbmcgY29uc2lzdGVuY3kgd2hlcmUgbGltaXQgZmly
c3QgcmV2ZXJzZWQgZmlyc3QgYW5kIGluIGluc2VydCBpbnRvIHZhbHVlcyB1c2luZyBjb25zaXN0
ZW5jeSB0dGwgdXBkYXRlIHNldCBkZWxldGUgdHJ1bmNhdGUgYmVnaW4gYmF0Y2ggYXBwbHkgY3Jl
YXRlIGtleXNwYWNlIHdpdGggY29sdW1uZmFtaWx5IHByaW1hcnkga2V5IGluZGV4IG9uIGRyb3Ag
YWx0ZXIgdHlwZSBhZGQgYW55IG9uZSBxdW9ydW0gYWxsIGxvY2FsX3F1b3J1bSBlYWNoX3F1b3J1
bSIpLAotICAgIGJ1aWx0aW46IHNldCgiYXNjaWkgYmlnaW50IGJsb2IgYm9vbGVhbiBjb3VudGVy
IGRlY2ltYWwgZG91YmxlIGZsb2F0IGludCB0ZXh0IHRpbWVzdGFtcCB1dWlkIHZhcmNoYXIgdmFy
aW50IiksCi0gICAgYXRvbXM6IHNldCgiZmFsc2UgdHJ1ZSIpLAorICAgIGtleXdvcmRzOiBzZXQo
ImFkZCBhbGwgYWxsb3cgYWx0ZXIgYW5kIGFueSBhcHBseSBhcyBhc2MgYXV0aG9yaXplIGJhdGNo
IGJlZ2luIGJ5IGNsdXN0ZXJpbmcgY29sdW1uZmFtaWx5IGNvbXBhY3QgY29uc2lzdGVuY3kgY291
bnQgY3JlYXRlIGN1c3RvbSBkZWxldGUgZGVzYyBkaXN0aW5jdCBkcm9wIGVhY2hfcXVvcnVtIGV4
aXN0cyBmaWx0ZXJpbmcgZnJvbSBncmFudCBpZiBpbiBpbmRleCBpbnNlcnQgaW50byBrZXkga2V5
c3BhY2Uga2V5c3BhY2VzIGxldmVsIGxpbWl0IGxvY2FsX29uZSBsb2NhbF9xdW9ydW0gbW9kaWZ5
IG5hbiBub3JlY3Vyc2l2ZSBub3N1cGVydXNlciBub3Qgb2Ygb24gb25lIG9yZGVyIHBhc3N3b3Jk
IHBlcm1pc3Npb24gcGVybWlzc2lvbnMgcHJpbWFyeSBxdW9ydW0gcmVuYW1lIHJldm9rZSBzY2hl
bWEgc2VsZWN0IHNldCBzdG9yYWdlIHN1cGVydXNlciB0YWJsZSB0aHJlZSB0byB0b2tlbiB0cnVu
Y2F0ZSB0dGwgdHdvIHR5cGUgdW5sb2dnZWQgdXBkYXRlIHVzZSB1c2VyIHVzZXJzIHVzaW5nIHZh
bHVlcyB3aGVyZSB3aXRoIHdyaXRldGltZSIpLAorICAgIGJ1aWx0aW46IHNldCgiYXNjaWkgYmln
aW50IGJsb2IgYm9vbGVhbiBjb3VudGVyIGRlY2ltYWwgZG91YmxlIGZsb2F0IGZyb3plbiBpbmV0
IGludCBsaXN0IG1hcCBzdGF0aWMgdGV4dCB0aW1lc3RhbXAgdGltZXV1aWQgdHVwbGUgdXVpZCB2
YXJjaGFyIHZhcmludCIpLAorICAgIGF0b21zOiBzZXQoImZhbHNlIHRydWUgaW5maW5pdHkgTmFO
IiksCiAgICAgb3BlcmF0b3JDaGFyczogL15bPD49XS8sCiAgICAgZGF0ZVNRTDogeyB9LAogICAg
IHN1cHBvcnQ6IHNldCgiY29tbWVudFNsYXNoU2xhc2ggZGVjaW1hbGxlc3NGbG9hdCIpLApAQCAt
MzY2LDggKzM2Nyw2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29u
ZmlnLCBwYXJzZXJDb25maWcpIHsKIAogICBrZXl3b3JkczoKICAgICBBIGxpc3Qgb2Yga2V5d29y
ZHMgeW91IHdhbnQgdG8gYmUgaGlnaGxpZ2h0ZWQuCi0gIGZ1bmN0aW9uczoKLSAgICBBIGxpc3Qg
b2YgZnVuY3Rpb24gbmFtZXMgeW91IHdhbnQgdG8gYmUgaGlnaGxpZ2h0ZWQuCiAgIGJ1aWx0aW46
CiAgICAgQSBsaXN0IG9mIGJ1aWx0aW4gdHlwZXMgeW91IHdhbnQgdG8gYmUgaGlnaGxpZ2h0ZWQg
KGlmIHlvdSB3YW50IHR5cGVzIHRvIGJlIG9mIGNsYXNzICJidWlsdGluIiBpbnN0ZWFkIG9mICJr
ZXl3b3JkIikuCiAgIG9wZXJhdG9yQ2hhcnM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzCm9s
ZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNzg2NTA3ZDJlNDM5MmEzNTJkZGFl
NGFjMDAzNWY5MmVhZWY2MDlhNC4uNWFkMjE3MjBmYmNhMzg2MGE2NzU4YWQ3N2ZjOGI1NzM5MjY5
MjY1MQotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9D
b2RlTWlycm9yL3htbC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qcwpAQCAtMjEsNyArMjEsNyBAQCBDb2RlTWlycm9y
LmRlZmluZU1vZGUoInhtbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAg
YXV0b1NlbGZDbG9zZXJzOiB7J2FyZWEnOiB0cnVlLCAnYmFzZSc6IHRydWUsICdicic6IHRydWUs
ICdjb2wnOiB0cnVlLCAnY29tbWFuZCc6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgJ2Vt
YmVkJzogdHJ1ZSwgJ2ZyYW1lJzogdHJ1ZSwgJ2hyJzogdHJ1ZSwgJ2ltZyc6IHRydWUsICdpbnB1
dCc6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgJ2tleWdlbic6IHRydWUsICdsaW5rJzog
dHJ1ZSwgJ21ldGEnOiB0cnVlLCAncGFyYW0nOiB0cnVlLCAnc291cmNlJzogdHJ1ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAndHJhY2snOiB0cnVlLCAnd2JyJzogdHJ1ZX0sCisgICAgICAgICAg
ICAgICAgICAgICAgJ3RyYWNrJzogdHJ1ZSwgJ3dicic6IHRydWUsICdtZW51aXRlbSc6IHRydWV9
LAogICAgIGltcGxpY2l0bHlDbG9zZWQ6IHsnZGQnOiB0cnVlLCAnbGknOiB0cnVlLCAnb3B0Z3Jv
dXAnOiB0cnVlLCAnb3B0aW9uJzogdHJ1ZSwgJ3AnOiB0cnVlLAogICAgICAgICAgICAgICAgICAg
ICAgICAncnAnOiB0cnVlLCAncnQnOiB0cnVlLCAndGJvZHknOiB0cnVlLCAndGQnOiB0cnVlLCAn
dGZvb3QnOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAndGgnOiB0cnVlLCAndHInOiB0
cnVlfSwKQEAgLTEwOSw2ICsxMDksNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsIGZ1
bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICByZXR1cm4gbnVsbDsKICAgICB9
CiAgIH0KKyAgaW5UZXh0LmlzSW5UZXh0ID0gdHJ1ZTsKIAogICBmdW5jdGlvbiBpblRhZyhzdHJl
YW0sIHN0YXRlKSB7CiAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRp
b25UZXh0RWRpdG9yLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanMKaW5kZXggOWNlOGE1MjQxMjE2NDk0
MWZjNDM0NWVkYmY4YmI2ZjM2MDNjZDg0Yi4uNjY2NmFjNzQ5NzViZDQ4MTI3NmFkOThkMmFkOTU2
ODhhZWI2MTA0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuanMKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRF
ZGl0b3IuanMKQEAgLTQ0MSwxMyArNDQxLDEyIEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xh
cmF0aW9uVGV4dEVkaXRvciA9IGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yCiAK
ICAgICBfaGFuZGxlTW91c2VEb3duKGV2ZW50KQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2Nv
ZGVNaXJyb3Iub3B0aW9ucy5yZWFkT25seSB8fCB0aGlzLl9jb2RlTWlycm9yLnN0YXRlLmZvY3Vz
ZWQpCisgICAgICAgIGlmICh0aGlzLl9jb2RlTWlycm9yLm9wdGlvbnMucmVhZE9ubHkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMuX2NvZGVNaXJyb3Iu
Y29vcmRzQ2hhcih7bGVmdDogZXZlbnQueCwgdG9wOiBldmVudC55fSk7Ci0gICAgICAgIHZhciBs
aW5lID0gdGhpcy5fY29kZU1pcnJvci5nZXRMaW5lKGN1cnNvci5saW5lKTsKLSAgICAgICAgdmFy
IHRyaW1tZWRMaW5lID0gbGluZS50cmltUmlnaHQoKTsKLQorICAgICAgICBsZXQgY3Vyc29yID0g
dGhpcy5fY29kZU1pcnJvci5jb29yZHNDaGFyKHtsZWZ0OiBldmVudC54LCB0b3A6IGV2ZW50Lnl9
KTsKKyAgICAgICAgbGV0IGxpbmUgPSB0aGlzLl9jb2RlTWlycm9yLmdldExpbmUoY3Vyc29yLmxp
bmUpOworICAgICAgICBsZXQgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW1SaWdodCgpOwogICAgICAg
ICBpZiAoIXRyaW1tZWRMaW5lLnRyaW1MZWZ0KCkubGVuZ3RoIHx8IGN1cnNvci5jaCAhPT0gdHJp
bW1lZExpbmUubGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC00NTksMTYgKzQ1OCwx
OSBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IgPSBjbGFzcyBD
U1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvcgogICAgICAgICBpZiAodGhpcy5fY29kZU1pcnJv
ci5vcHRpb25zLnJlYWRPbmx5IHx8ICF0aGlzLl9tb3VzZURvd25DdXJzb3JQb3NpdGlvbikKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5fY29kZU1pcnJv
ci5jb29yZHNDaGFyKHtsZWZ0OiBldmVudC54LCB0b3A6IGV2ZW50Lnl9KTsKLSAgICAgICAgdmFy
IGxpbmUgPSB0aGlzLl9jb2RlTWlycm9yLmdldExpbmUoY3Vyc29yLmxpbmUpOwotCisgICAgICAg
IGxldCBjdXJzb3IgPSB0aGlzLl9jb2RlTWlycm9yLmNvb3Jkc0NoYXIoe2xlZnQ6IGV2ZW50Lngs
IHRvcDogZXZlbnQueX0pOwogICAgICAgICBpZiAodGhpcy5fbW91c2VEb3duQ3Vyc29yUG9zaXRp
b24ubGluZSA9PT0gY3Vyc29yLmxpbmUgJiYgdGhpcy5fbW91c2VEb3duQ3Vyc29yUG9zaXRpb24u
Y2ggPT09IGN1cnNvci5jaCkgewotICAgICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gIlxuIjsK
LQotICAgICAgICAgICAgaWYgKCFsaW5lLnRyaW1SaWdodCgpLmVuZHNXaXRoKCI7IikgJiYgIXRo
aXMuX3RleHRBdEN1cnNvcklzQ29tbWVudCh0aGlzLl9jb2RlTWlycm9yLCBjdXJzb3IpKQotICAg
ICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gIjsiICsgcmVwbGFjZW1lbnQ7CisgICAgICAgICAg
ICBsZXQgbmV4dExpbmUgPSB0aGlzLl9jb2RlTWlycm9yLmdldExpbmUoY3Vyc29yLmxpbmUgKyAx
KTsKKyAgICAgICAgICAgIGlmIChjdXJzb3IubGluZSA8IHRoaXMuX2NvZGVNaXJyb3IubGluZUNv
dW50KCkgLSAxICYmICghbmV4dExpbmUgfHwgIW5leHRMaW5lLnRyaW0oKS5sZW5ndGgpKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zZXRDdXJzb3Ioe2xpbmU6IGN1cnNvci5s
aW5lICsgMSwgY2g6IDB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
bGV0IGxpbmUgPSB0aGlzLl9jb2RlTWlycm9yLmdldExpbmUoY3Vyc29yLmxpbmUpOworICAgICAg
ICAgICAgICAgIGxldCByZXBsYWNlbWVudCA9ICJcbiI7CisgICAgICAgICAgICAgICAgaWYgKCFs
aW5lLnRyaW1SaWdodCgpLmVuZHNXaXRoKCI7IikgJiYgIXRoaXMuX3RleHRBdEN1cnNvcklzQ29t
bWVudCh0aGlzLl9jb2RlTWlycm9yLCBjdXJzb3IpKQorICAgICAgICAgICAgICAgICAgICByZXBs
YWNlbWVudCA9ICI7IiArIHJlcGxhY2VtZW50OwogCi0gICAgICAgICAgICB0aGlzLl9jb2RlTWly
cm9yLnJlcGxhY2VSYW5nZShyZXBsYWNlbWVudCwgY3Vyc29yKTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9jb2RlTWlycm9yLnJlcGxhY2VSYW5nZShyZXBsYWNlbWVudCwgY3Vyc29yKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHRoaXMuX21vdXNlRG93bkN1cnNvclBvc2l0
aW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMKaW5kZXggZWVmYzJk
NTY2MzQ0ZWU1MWM3MjI2MTMzYTk1M2VjNjI3N2ZhYTg1MS4uZmI1YmRiYTBiZTM1MmQ0ZTI3ODEw
MDU4ZWViMTQ1NDA5Y2Y0ZmI4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29kZU1pcnJvckZvcm1hdHRlcnMuanMK
QEAgLTMzOSw3ICszMzksNyBAQCBDb2RlTWlycm9yLmV4dGVuZE1vZGUoImNzcyIsIHsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0
YXRlID09PSAicHJvcCIpIC8vIC13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSguLi4pdHJhbnNsYXRl
KC4uLik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAg
IGlmIChzdGF0ZS5zdGF0ZSA9PT0gIm1lZGlhIiB8fCBzdGF0ZS5zdGF0ZSA9PT0gIm1lZGlhX3Bh
cmVucyIpIC8vIFNwYWNlIGluICJub3QoZm9vKWFuZCIgYnV0IG5vdCBhdCB0aGUgZW5kIG9mICJu
b3Qobm90KGZvbykpIgorICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gIm1lZGlh
IiB8fCBzdGF0ZS5zdGF0ZSA9PT0gImF0QmxvY2tfcGFyZW5zIikgLy8gU3BhY2UgaW4gIm5vdChm
b28pYW5kIiBidXQgbm90IGF0IHRoZSBlbmQgb2YgIm5vdChub3QoZm9vKSkiCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
Y29sb3I6IHJnYiguLi4pOwogICAgICAgICAgICAgfQpAQCAtMzUwLDcgKzM1MCw3IEBAIENvZGVN
aXJyb3IuZXh0ZW5kTW9kZSgiY3NzIiwgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICAgICAgaWYgKC9cYmtleXdvcmRcYi8udGVzdChsYXN0VG9rZW4pKSAvLyBtZWRpYS1xdWVyeSBr
ZXl3b3JkcwotICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0YXRlID09PSAibWVkaWEiIHx8IHN0
YXRlLnN0YXRlID09PSAibWVkaWFfcGFyZW5zIjsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS5z
dGF0ZSA9PT0gIm1lZGlhIiB8fCAoc3RhdGUuc3RhdGUgPT09ICJhdEJsb2NrX3BhcmVucyIgJiYg
Y29udGVudCAhPT0gIikiKTsKIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0hvdmVyTWVu
dS5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Ib3Zlck1l
bnUuY3NzCmluZGV4IDFmMTQ2ZGJlMDcyYWEwMjgzMmRlZGFmZDFkOTQ4ZDJiZDM3MGM4YzYuLmRm
OWQ4NTZmMmJmY2RiNzhmYTcxNzA0OGEwNzE4YzZlMWUxMmE5MTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0hvdmVyTWVudS5jc3MKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvSG92ZXJNZW51LmNzcwpA
QCAtNTksNiArNTksNyBAQAogICAgIGhlaWdodDogMTNweDsKIAogICAgIGNvbnRlbnQ6IC13ZWJr
aXQtaW1hZ2Utc2V0KHVybCguLi9JbWFnZXMvSG92ZXJNZW51QnV0dG9uLnBuZykgMXgsIHVybCgu
Li9JbWFnZXMvSG92ZXJNZW51QnV0dG9uQDJ4LnBuZykgMngpOworICAgIHRyYW5zZm9ybTogdHJh
bnNsYXRlWSgtMXB4KTsKIH0KIAogLmhvdmVyLW1lbnUudmlzaWJsZSA+IGltZyB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5jc3MKaW5kZXggNjhhOTU5ZjBhNDAzMTM3YzFhMjMxZDBh
YzgyNDA1MjNhMmJjMzE4OS4uYjk0ZWVhZWUwZDk2Y2U1YWUzOGY5MzRkYTU5MGRmNzJiMDc1NGE5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
U291cmNlQ29kZVRleHRFZGl0b3IuY3NzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmNzcwpAQCAtMTgwLDggKzE4MCw3
IEBACiAgICAgd2lkdGg6IDE2cHg7CiAgICAgaGVpZ2h0OiAxNnB4OwogICAgIGNvbnRlbnQ6IC13
ZWJraXQtaW1hZ2Utc2V0KHVybCguLi9JbWFnZXMvQ29sb3JJY29uLnBuZykgMXgsIHVybCguLi9J
bWFnZXMvQ29sb3JJY29uQDJ4LnBuZykgMngpOwotCi0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRy
YW5zbGF0ZVkoMXB4KTsKKyAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMC41cHgpOwogfQogCiBA
bWVkaWEgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMikgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>258784</attachid>
            <date>2015-08-11 17:18:54 -0700</date>
            <delta_ts>2015-08-11 17:18:54 -0700</delta_ts>
            <desc>[Animated GIF] Before/after the patch</desc>
            <filename>codemirror-5-befor-after.gif</filename>
            <type>image/gif</type>
            <size>44327</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">R0lGODlh9gE0AfcAAP/23uLy//T//65Fl4ODg+zn9ktMTOfn6Nulttjk/KXT9KYanVQAALFxt9XV
1bUajqZFvKgaj/TGuB8byrOzs6h20OehojlXnsxUjqk0lMjO89Ta96Yaq55vWrKS3fnZxpXO88XN
8wAAZeOSmquL2aZhxKMajci65aZhKeaZobmp5PjSvaqqqsiSu+S6yHSn1tbJ6Pb399X2/72j1f/2
4s+UUPj//2BunvL0/e39/8zU9+a1vOXT4UtR0MPDw92Jmq1Uo+7JlL216vPu8mZmZvny9fXb1aVU
v1KTzSJX3ZWVlceXydl8lKY0tHl5eeXO1rqIuq6S3sM0jurX48m03VceyubFzP7k0enV2f//8tGd
acpzmF6CsrF/YMiq2PzhzP706v/r1s2hwsZFjsnG6dS1zYa22//3z+b3/9msgtalb4mq5//yzOvc
6///7O3Cvv//9v/75Pzu5Gqo8LiKytasxcLo+97Ny/r3+zY7bfLg5798ocrx//7s3Prt7Wiay1SS
7Vk8NP//+dSTqeywqu3c5cFpnqhFpjk5OdfC27Ob4PfY4daKo9fU6+D9/+3j7a8ajvfaq7CH0vv7
+82ZvO/JyntOy7mUx8mEp9Cg0TmCz+3bxP7387GXj7N+wGZngM5fjpCUrf////bm0wBElvjq47y8
vL9ypeLO4Yxv0vXq6//41/z7/rDd97jEzcLF8WN83v/78KWkok1qeXI8Ov///Pb7/69hqPzmve6/
teKz1dJpjpqqvb7T7Hg0yuW9jdVykoiJiZZFAPjl5/z//9vSyseLs9W9m6usr4NmZsvW2v/72czM
ztfBveCyc+isrN7j9vz8/P3l2tVpk3xhSKO/4NHO8N7X8MppkvHS34iN3u+4r6Kj35uXinJzdOPi
47a3uLxalerX6OTg9XeOov/l5+fixqSMdY6MjYiKgorC7JCd5AAAAIVxZDlOgP7+/v/79vbg2P//
/rGwr9GSs+vNrgAASfPz8+zv+8K+63F+itrgzPTUnuLUvMPg811dXSH/C05FVFNDQVBFMi4wAwEA
AAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVT
ek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9
IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAg
ICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIy
LXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1w
PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFk
b2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFw
LzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9w
IENDIDIwMTUgTWFjaW50b3NoIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkU0NDUyMjgzMzhB
QTExRTU5MTUxRjA3REJCN0M3RjQzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkU0NDUyMjg0
MzhBQTExRTU5MTUxRjA3REJCN0M3RjQzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3Rh
bmNlSUQ9InhtcC5paWQ6RTQ0NTIyODEzOEFBMTFFNTkxNTFGMDdEQkI3QzdGNDMiIHN0UmVmOmRv
Y3VtZW50SUQ9InhtcC5kaWQ6RTQ0NTIyODIzOEFBMTFFNTkxNTFGMDdEQkI3QzdGNDMiLz4gPC9y
ZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIi
Pz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvK
ycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KR
kI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllY
V1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAf
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
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258802</attachid>
            <date>2015-08-11 21:45:18 -0700</date>
            <delta_ts>2015-08-11 22:40:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147109-20150811214502.patch</filename>
            <type>text/plain</type>
            <size>334511</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDEyMzkwYWJiODU0OTkzYmM5Y2Q5ZmM2ZDE5ZmRk
ZGFiYzhlNTNmZjkuLjc2NmQ3ZGM3ZGU5YTI0ZDU5OTViOTczMTNiZjU2YTE3ZTkzNWMzMDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE1LTA4LTExICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBV
cGRhdGUgdG8gQ29kZU1pcnJvciA1LjUgb3IgbGF0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IFRp
bW90aHkgSGF0Y2hlci4KKworICAgICAgICBVcGRhdGVkIENvZGVNaXJyb3IgdG8gdmVyc2lvbiA1
LjUsIGFzIHdlbGwgYXMgdGhlIGV4dGVuc2lvbiBmaWxlcyBmb3IgQ29kZU1pcnJvcgorICAgICAg
ICB0aGF0IGFyZSBjdXJyZW50bHkgdXNlZCBpbiBXZWJJbnNwZWN0b3IuCisKKyAgICAgICAgKiBM
b2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CisgICAgICAgICogVG9v
bHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyRGVidWcuanM6CisgICAgICAgIEFkZGVkIFdlYklu
c3BlY3RvciBuYW1lc3BhY2UgZm9yIGZvcm1hdHRlcnMuCisKKyAgICAgICAgKiBUb29scy9QcmV0
dHlQcmludGluZy9pbmRleC5odG1sOgorICAgICAgICBBZGRlZCBXZWJJbnNwZWN0b3IgbmFtZXNw
YWNlIGZvciBmb3JtYXR0ZXJzLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9D
b2RlTWlycm9yL0xJQ0VOU0U6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2Rl
TWlycm9yL2Nsb2p1cmUuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2Rl
TWlycm9yL2Nsb3NlYnJhY2tldHMuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5h
bC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0
ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2Uv
RXh0ZXJuYWwvQ29kZU1pcnJvci9jb2ZmZWVzY3JpcHQuanM6CisgICAgICAgICogVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvbW1lbnQuanM6CisgICAgICAgICogVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nzcy5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IvaHRtbG1peGVkLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9qYXZhc2NyaXB0LmpzOgorICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9saXZlc2NyaXB0LmpzOgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9tYXRjaGJyYWNrZXRzLmpzOgorICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9vdmVybGF5LmpzOgorICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zYXNzLmpzOgorICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zZWFyY2hjdXJzb3IuanM6CisgICAgICAg
ICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qczoKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzOgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvVmlld3MvQ29kZU1pcnJvckZvcm1hdHRlcnMuanM6CisgICAgICAgIE5vdyB1c2Vz
IHRoZSBuZXcgdG9rZW4gaW4gQ29kZU1pcnJvciBmb3IgbWVkaWEgcXVlcnkgcGFyZW50aGVzaXMu
CisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0
RWRpdG9yLmNzczoKKyAgICAgICAgKC5jc3Mtc3R5bGUtdGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJv
ciBwcmUpOgorICAgICAgICBSZW1vdmVkIHRoZSBhZGRpdGlvbmFsIHZlcnRpY2FsIHBhZGRpbmcu
CisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0
RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0
RWRpdG9yLnByb3RvdHlwZS5faGFuZGxlTW91c2VEb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5wcm90b3R5cGUuX2hhbmRsZU1vdXNlVXAp
OgorICAgICAgICBDbGlja2luZyBvbiB0aGUgZW5kIG9mIGEgbGluZSBpbiBhIHN0eWxlIHdpbGwg
bm93IGNvcnJlY3RseSBpbnNlcnQgYSBuZXcgbGluZS4KKworICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvVmlld3MvQ29tcHV0ZWRTdHlsZURldGFpbHNQYW5lbC5jc3M6CisgICAgICAgICguZGV0YWls
cy1zZWN0aW9uID4gLmNvbnRlbnQgPiAuZ3JvdXAgPiAucm93IC5Db2RlTWlycm9yLWNvZGUgcHJl
IC5nby10by1hcnJvdyk6CisgICAgICAgIFRoZSBnby10byBhcnJvdyBub3cgaGFzIHRoZSBwcm9w
ZXIgZGltZW5zaW9ucy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvSG92ZXJNZW51
LmNzczoKKyAgICAgICAgKC5ob3Zlci1tZW51ID4gaW1nKToKKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmNzczoKKyAgICAgICAgKC5ob3Zlci1tZW51
LmNvbG9yID4gaW1nKToKKwogMjAxNS0wOC0xMSAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZ2VudCBjb21tYW5kcyBkbyBub3QgYWN0dWFs
bHkgcmV0dXJuIGEgcHJvbWlzZSB3aGVuIGV4cGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3Ry
aW5ncy5qcwppbmRleCAwN2U5YWMxOTY4NWQyZTYxYWYzNzY5Y2Y2ZDQ0ZTRkOTZkNWMwYjZmLi5j
YTZkYmQxMzA3ZWFiMGIxODkyMzI1Yzc3YWU1ZDRlNzA5YzVhMDlhIDEwMDY0NApHSVQgYmluYXJ5
IHBhdGNoCmRlbHRhIDg5OQp6Y21iN0NPPXVIUTVUNHFXbTBjNkopaXU8I1c/UDV7eVVDXiZeYzFL
XyYjazNKUD12OzBITm92QmJadEJZcSFtMm4KelV8PilXZFo9UHM9JkE2SXkjJUMoZkNtcEFNVDBq
bm87Pk52WiNPP0NsP3Qqdl9QelAkYEBUMGJANzwkO2tDbFBGCnpzbVhBUEdXY3sjVkw0PmMxTj5L
TWpjbD93WmpBcEVTR1FzdW5TMnctUD54KEUtMWI+Nzdzak52TGMpbXJqcklmTwp6X2h9UXtWYTA7
JDV6TkNfSCYzJFI+Q2lvJWBLfkVOREE+NU9NSn5nITg8U2NYRktfc01KWkdxVUdqXldNU1k+RjEK
ekA+QiMlMmZMe1RfTmk0dzRrMjg1O1otYCFgPzJrRG8kaUNEcWhpYWVtKG47bGA8RilDcmFUdm5z
TiRsTklVczR1CnpAfT8yKWJHPmVrezE9Q1JlMkJ3VTdPRDcrRH5iYSMzIXtNKlM0JiE4N1Vsbm1k
QDQ7UmRtX201OG9MNWNvRj9jTgp6JlBsOFpJd0ZnYFZKWmIjeXZAc19lNyZyTz8hWVYkMGlCfCN3
SWpqdjwmZjBFSUJ7LUQpWEkmcHY7O1NsJWxmN14Kej08bWgpJlhaJWpWVnZmYENIYlRgOX4oKyp0
K2UyN3hRenZSRnN7NWRse3FTKXY+ZTxXVU48eVBWV14kZW5LZ0g1CnpibzlIWEUmNncjb3pXfV5i
Kl8leDB7WT17e2c9c0t0MTNTfVEyQldeJGhDdEQ7Iz43JU1BNERwemtNVnZlK35gJAp6WEhMfFVC
MnNWa2lLa3hAR1FWMG50MU1DJF9qNkl2RVlEb0tFY1AxQFBlaWxtdz9sV35rbT5SQ2BoalFBTHxN
T1QKS2lzXyN0JEExR1otc1hAMQoKZGVsdGEgMjYxCnpjbWNhSmYjcG1TJUxZVTMkO1kpUFAyVF5S
TV51MyFuSVdHYzJaKU9wM0sla2h5bGpUbCRwVkl8K3twfFg0MmNZUgp6NEN6Mz1nUH1CfC1lZHR5
JDt0NyRZXjNSJXtMbj5idmI/cXNOWX5fPmRSbWkoSE57fTIwUW5oe2AzKkVDenRed1kKekpsUWJI
YXI0ZSVBKF9wdDZKQUpmWmVBMGB3QXBxO20pUFhicj09I3BKPGM9UHsqMkNLLXM2MG0zeS1WRlp+
cCU1Cnk5VjUzZExuPWNGKEJWTDVQb0RRb2EmcWtwQXIhRiMmbnpkYHpZeTVgXm8wU309SVlOU0pY
PHsoZypnRUZ7IykxcAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9Q
cmV0dHlQcmludGluZy9Gb3JtYXR0ZXJEZWJ1Zy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9U
b29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXJEZWJ1Zy5qcwppbmRleCBhYWIzNWI5OTkyZDU5
ZjA3YzA1ZWFjZGEyM2EzYjBhNDUzMjZlN2Q0Li42MmJmNmRhNmIzMzI0NzZlYmM5MGQ5Yzk4Zjcx
MzFhYTI5NzQ5MDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJl
dHR5UHJpbnRpbmcvRm9ybWF0dGVyRGVidWcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlckRlYnVnLmpzCkBAIC0xLDQgKzEsNCBAQAot
Rm9ybWF0dGVyLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uKGZyb20sIHRvKQorV2ViSW5zcGVj
dG9yLkZvcm1hdHRlci5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbihmcm9tLCB0bykKIHsKICAg
ICB2YXIgZGVidWcgPSAiIjsKICAgICB2YXIgb3V0ZXJNb2RlID0gdGhpcy5fY29kZU1pcnJvci5n
ZXRNb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5
UHJpbnRpbmcvaW5kZXguaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQ
cmludGluZy9pbmRleC5odG1sCmluZGV4IGQxYjYzMWM1MzlmMzIyMmUyYTdkNGE0MmQ1ZjllMGMw
NGFkNzA0YjMuLjUyYmIxZDM0ZGRmYWMxZjQxMjVlYWU2ZWIwMWRkNGIzNzdkMGVmZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9pbmRleC5o
dG1sCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9pbmRl
eC5odG1sCkBAIC0yMTAsOCArMjEwLDggQEAKICAgICAgICAgdmFyIG9yaWdpbmFsTGluZUVuZGlu
Z3MgPSBbXTsKICAgICAgICAgdmFyIGZvcm1hdHRlZExpbmVFbmRpbmdzID0gW107CiAgICAgICAg
IHZhciBtYXBwaW5nID0ge29yaWdpbmFsOiBbMF0sIGZvcm1hdHRlZDogWzBdfTsKLSAgICAgICAg
dmFyIGJ1aWxkZXIgPSBuZXcgRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIobWFwcGluZywgb3JpZ2lu
YWxMaW5lRW5kaW5ncywgZm9ybWF0dGVkTGluZUVuZGluZ3MsIDAsIDAsIGluZGVudFN0cmluZyk7
Ci0gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKGNtLCBidWlsZGVyKTsKKyAg
ICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkZvcm1hdHRlckNvbnRlbnRCdWls
ZGVyKG1hcHBpbmcsIG9yaWdpbmFsTGluZUVuZGluZ3MsIGZvcm1hdHRlZExpbmVFbmRpbmdzLCAw
LCAwLCBpbmRlbnRTdHJpbmcpOworICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IFdlYkluc3Bl
Y3Rvci5Gb3JtYXR0ZXIoY20sIGJ1aWxkZXIpOwogCiAgICAgICAgIC8vIFRpbWUgdGhlIGZvcm1h
dHRlci4KICAgICAgICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7CkBAIC0zMzIsOCArMzMy
LDggQEAKICAgICAgICAgICAgIHZhciBvcmlnaW5hbExpbmVFbmRpbmdzID0gW107CiAgICAgICAg
ICAgICB2YXIgZm9ybWF0dGVkTGluZUVuZGluZ3MgPSBbXTsKICAgICAgICAgICAgIHZhciBtYXBw
aW5nID0ge29yaWdpbmFsOiBbMF0sIGZvcm1hdHRlZDogWzBdfTsKLSAgICAgICAgICAgIHZhciBi
dWlsZGVyID0gbmV3IEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyKG1hcHBpbmcsIG9yaWdpbmFsTGlu
ZUVuZGluZ3MsIGZvcm1hdHRlZExpbmVFbmRpbmdzLCAwLCAwLCBpbmRlbnRTdHJpbmcpOwotICAg
ICAgICAgICAgdmFyIGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoZWRpdG9yLCBidWlsZGVyKTsK
KyAgICAgICAgICAgIHZhciBidWlsZGVyID0gbmV3IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJDb250
ZW50QnVpbGRlcihtYXBwaW5nLCBvcmlnaW5hbExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRMaW5lRW5k
aW5ncywgMCwgMCwgaW5kZW50U3RyaW5nKTsKKyAgICAgICAgICAgIHZhciBmb3JtYXR0ZXIgPSBu
ZXcgV2ViSW5zcGVjdG9yLkZvcm1hdHRlcihlZGl0b3IsIGJ1aWxkZXIpOwogICAgICAgICAgICAg
Zm9ybWF0dGVyLmZvcm1hdChzdGFydCwgZW5kKTsKIAogICAgICAgICAgICAgLy8gQ29tcGFyZSBy
ZXN1bHRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
RXh0ZXJuYWwvQ29kZU1pcnJvci9MSUNFTlNFIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9MSUNFTlNFCm9sZCBtb2RlIDEwMDY0NApuZXcg
bW9kZSAxMDA3NTUKaW5kZXggNDgyZDU1ZWI3M2VjNDNmODdhYTQxMDU4YzdlZTM5YmI4MzE4ZjM3
Yi4uZjRhNWE0YTI1ZjBjOGNlYTAyYmY4MTQxMTg3ODM0MzkxMTNmNDhkMgotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL0xJQ0VOU0UK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1p
cnJvci9MSUNFTlNFCkBAIC0xLDQgKzEsNCBAQAotQ29weXJpZ2h0IChDKSAyMDEzIGJ5IE1hcmlq
biBIYXZlcmJla2UgPG1hcmlqbmhAZ21haWwuY29tPgorQ29weXJpZ2h0IChDKSAyMDE1IGJ5IE1h
cmlqbiBIYXZlcmJla2UgPG1hcmlqbmhAZ21haWwuY29tPiBhbmQgb3RoZXJzCiAKIFBlcm1pc3Np
b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp
bmluZyBhIGNvcHkKIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv
biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCkBAIC0xNyw3ICsxNywzIEBAIEFVVEhP
UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg
T1IgT1RIRVIKIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP
UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX
SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCiBUSEUgU09G
VFdBUkUuCi0KLVBsZWFzZSBub3RlIHRoYXQgc29tZSBzdWJkaXJlY3RvcmllcyBvZiB0aGUgQ29k
ZU1pcnJvciBkaXN0cmlidXRpb24KLWluY2x1ZGUgdGhlaXIgb3duIExJQ0VOU0UgZmlsZXMsIGFu
ZCBhcmUgcmVsZWFzZWQgdW5kZXIgZGlmZmVyZW50Ci1saWNlbmNlcy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY2xv
anVyZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0Nv
ZGVNaXJyb3IvY2xvanVyZS5qcwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4
IGY4MWJkMmMxNDAxY2M4N2YzODY3YWI5NTdlMWQ0NmQ2MzQxOTk0MTAuLmQ1MzEwMjJhMmViZmVh
MDdmNzVlYTg4MTk4OGZiZjVmNzY4YzMwY2IKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jbG9qdXJlLmpzCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY2xvanVyZS5q
cwpAQCAtMTgsNyArMTgsNyBAQAogCiBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNsb2p1cmUiLCBm
dW5jdGlvbiAob3B0aW9ucykgewogICAgIHZhciBCVUlMVElOID0gImJ1aWx0aW4iLCBDT01NRU5U
ID0gImNvbW1lbnQiLCBTVFJJTkcgPSAic3RyaW5nIiwgQ0hBUkFDVEVSID0gInN0cmluZy0yIiwK
LSAgICAgICAgQVRPTSA9ICJhdG9tIiwgTlVNQkVSID0gIm51bWJlciIsIEJSQUNLRVQgPSAiYnJh
Y2tldCIsIEtFWVdPUkQgPSAia2V5d29yZCI7CisgICAgICAgIEFUT00gPSAiYXRvbSIsIE5VTUJF
UiA9ICJudW1iZXIiLCBCUkFDS0VUID0gImJyYWNrZXQiLCBLRVlXT1JEID0gImtleXdvcmQiLCBW
QVIgPSAidmFyaWFibGUiOwogICAgIHZhciBJTkRFTlRfV09SRF9TS0lQID0gb3B0aW9ucy5pbmRl
bnRVbml0IHx8IDI7CiAgICAgdmFyIE5PUk1BTF9JTkRFTlRfVU5JVCA9IG9wdGlvbnMuaW5kZW50
VW5pdCB8fCAyOwogCkBAIC01OSw3ICs1OSw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY2xv
anVyZSIsIGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgIHNpZ246IC9bKy1dLywKICAgICAg
ICAgZXhwb25lbnQ6IC9lL2ksCiAgICAgICAgIGtleXdvcmRfY2hhcjogL1teXHNcKFxbXDtcKVxd
XS8sCi0gICAgICAgIHN5bWJvbDogL1tcdyorIVwtXC5fPzo8PlwvXS8KKyAgICAgICAgc3ltYm9s
OiAvW1x3KishXC1cLl8/Ojw+XC9ceGExLVx1ZmZmZl0vCiAgICAgfTsKIAogICAgIGZ1bmN0aW9u
IHN0YXRlU3RhY2soaW5kZW50LCB0eXBlLCBwcmV2KSB7IC8vIHJlcHJlc2VudHMgYSBzdGF0ZSBz
dGFjayBvYmplY3QKQEAgLTExNCw3ICsxMTQsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNs
b2p1cmUiLCBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgICB2YXIgZmlyc3QgPSBzdHJlYW0u
bmV4dCgpOwogICAgICAgICAvLyBSZWFkIHNwZWNpYWwgbGl0ZXJhbHM6IGJhY2tzcGFjZSwgbmV3
bGluZSwgc3BhY2UsIHJldHVybi4KICAgICAgICAgLy8gSnVzdCByZWFkIGFsbCBsb3dlcmNhc2Ug
bGV0dGVycy4KLSAgICAgICAgaWYgKGZpcnN0Lm1hdGNoKC9bYS16XS8pICYmIHN0cmVhbS5tYXRj
aCgvW2Etel0rLywgdHJ1ZSkpIHsKKyAgICAgICAgaWYgKGZpcnN0ICYmIGZpcnN0Lm1hdGNoKC9b
YS16XS8pICYmIHN0cmVhbS5tYXRjaCgvW2Etel0rLywgdHJ1ZSkpIHsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBSZWFkIHVuaWNvZGUgY2hhcmFjdGVyOiBcdTEw
MDAgXHVBMGExCkBAIC0yMjAsNyArMjIwLDkgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjbG9q
dXJlIiwgZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm5UeXBlID0gQlVJTFRJTjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
YXRvbXMgJiYgYXRvbXMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQVRPTTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSByZXR1cm5UeXBlID0gbnVsbDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUg
PSBWQVI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIApAQCAtMjMyLDYgKzIzNCw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9k
ZSgiY2xvanVyZSIsIGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGUuaW5kZW50U3RhY2suaW5kZW50OwogICAgICAgICB9LAogCisgICAgICAgIGNsb3NlQnJhY2tl
dHM6IHtwYWlyczogIigpW117fVwiXCIifSwKICAgICAgICAgbGluZUNvbW1lbnQ6ICI7OyIKICAg
ICB9OwogfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb3NlYnJhY2tldHMuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb3NlYnJhY2tldHMuanMK
b2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA4M2Q0MjI5ZjQ3YjQ0NjgyNGEz
OGIwZTljNjU4NzQ0YzVjZmFmN2QzLi43MDMwMjY4YjAzMmQ2MDQ0MzY3NTRiMGNhNWI5MGQ0NTdm
Zjc3MmVkCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFs
L0NvZGVNaXJyb3IvY2xvc2VicmFja2V0cy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2Nsb3NlYnJhY2tldHMuanMKQEAgLTks
MTM1ICs5LDE3NyBAQAogICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52CiAgICAgbW9kKENvZGVN
aXJyb3IpOwogfSkoZnVuY3Rpb24oQ29kZU1pcnJvcikgewotICB2YXIgREVGQVVMVF9CUkFDS0VU
UyA9ICIoKVtde30nJ1wiXCIiOwotICB2YXIgREVGQVVMVF9FWFBMT0RFX09OX0VOVEVSID0gIltd
e30iOwotICB2YXIgU1BBQ0VfQ0hBUl9SRUdFWCA9IC9ccy87CisgIHZhciBkZWZhdWx0cyA9IHsK
KyAgICBwYWlyczogIigpW117fScnXCJcIiIsCisgICAgdHJpcGxlczogIiIsCisgICAgZXhwbG9k
ZTogIltde30iCisgIH07CiAKICAgdmFyIFBvcyA9IENvZGVNaXJyb3IuUG9zOwogCiAgIENvZGVN
aXJyb3IuZGVmaW5lT3B0aW9uKCJhdXRvQ2xvc2VCcmFja2V0cyIsIGZhbHNlLCBmdW5jdGlvbihj
bSwgdmFsLCBvbGQpIHsKLSAgICBpZiAob2xkICE9IENvZGVNaXJyb3IuSW5pdCAmJiBvbGQpCi0g
ICAgICBjbS5yZW1vdmVLZXlNYXAoImF1dG9DbG9zZUJyYWNrZXRzIik7Ci0gICAgaWYgKCF2YWwp
IHJldHVybjsKLSAgICB2YXIgcGFpcnMgPSBERUZBVUxUX0JSQUNLRVRTLCBleHBsb2RlID0gREVG
QVVMVF9FWFBMT0RFX09OX0VOVEVSOwotICAgIGlmICh0eXBlb2YgdmFsID09ICJzdHJpbmciKSBw
YWlycyA9IHZhbDsKLSAgICBlbHNlIGlmICh0eXBlb2YgdmFsID09ICJvYmplY3QiKSB7Ci0gICAg
ICBpZiAodmFsLnBhaXJzICE9IG51bGwpIHBhaXJzID0gdmFsLnBhaXJzOwotICAgICAgaWYgKHZh
bC5leHBsb2RlICE9IG51bGwpIGV4cGxvZGUgPSB2YWwuZXhwbG9kZTsKKyAgICBpZiAob2xkICYm
IG9sZCAhPSBDb2RlTWlycm9yLkluaXQpIHsKKyAgICAgIGNtLnJlbW92ZUtleU1hcChrZXlNYXAp
OworICAgICAgY20uc3RhdGUuY2xvc2VCcmFja2V0cyA9IG51bGw7CisgICAgfQorICAgIGlmICh2
YWwpIHsKKyAgICAgIGNtLnN0YXRlLmNsb3NlQnJhY2tldHMgPSB2YWw7CisgICAgICBjbS5hZGRL
ZXlNYXAoa2V5TWFwKTsKICAgICB9Ci0gICAgdmFyIG1hcCA9IGJ1aWxkS2V5bWFwKHBhaXJzKTsK
LSAgICBpZiAoZXhwbG9kZSkgbWFwLkVudGVyID0gYnVpbGRFeHBsb2RlSGFuZGxlcihleHBsb2Rl
KTsKLSAgICBjbS5hZGRLZXlNYXAobWFwKTsKICAgfSk7CiAKLSAgZnVuY3Rpb24gY2hhcnNBcm91
bmQoY20sIHBvcykgewotICAgIHZhciBzdHIgPSBjbS5nZXRSYW5nZShQb3MocG9zLmxpbmUsIHBv
cy5jaCAtIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQb3MocG9zLmxpbmUsIHBvcy5j
aCArIDEpKTsKLSAgICByZXR1cm4gc3RyLmxlbmd0aCA9PSAyID8gc3RyIDogbnVsbDsKKyAgZnVu
Y3Rpb24gZ2V0T3B0aW9uKGNvbmYsIG5hbWUpIHsKKyAgICBpZiAobmFtZSA9PSAicGFpcnMiICYm
IHR5cGVvZiBjb25mID09ICJzdHJpbmciKSByZXR1cm4gY29uZjsKKyAgICBpZiAodHlwZW9mIGNv
bmYgPT0gIm9iamVjdCIgJiYgY29uZltuYW1lXSAhPSBudWxsKSByZXR1cm4gY29uZltuYW1lXTsK
KyAgICByZXR1cm4gZGVmYXVsdHNbbmFtZV07CiAgIH0KIAotICBmdW5jdGlvbiBidWlsZEtleW1h
cChwYWlycykgewotICAgIHZhciBtYXAgPSB7Ci0gICAgICBuYW1lIDogImF1dG9DbG9zZUJyYWNr
ZXRzIiwKLSAgICAgIEJhY2tzcGFjZTogZnVuY3Rpb24oY20pIHsKLSAgICAgICAgaWYgKGNtLmdl
dE9wdGlvbigiZGlzYWJsZUlucHV0IikpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0gICAgICAg
IHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpOwotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgIGlmICghcmFuZ2VzW2ldLmVt
cHR5KCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0gICAgICAgICAgdmFyIGFyb3VuZCA9IGNo
YXJzQXJvdW5kKGNtLCByYW5nZXNbaV0uaGVhZCk7Ci0gICAgICAgICAgaWYgKCFhcm91bmQgfHwg
cGFpcnMuaW5kZXhPZihhcm91bmQpICUgMiAhPSAwKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwot
ICAgICAgICB9Ci0gICAgICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAw
OyBpLS0pIHsKLSAgICAgICAgICB2YXIgY3VyID0gcmFuZ2VzW2ldLmhlYWQ7Ci0gICAgICAgICAg
Y20ucmVwbGFjZVJhbmdlKCIiLCBQb3MoY3VyLmxpbmUsIGN1ci5jaCAtIDEpLCBQb3MoY3VyLmxp
bmUsIGN1ci5jaCArIDEpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH07Ci0gICAgdmFyIGNs
b3NpbmdCcmFja2V0cyA9ICIiOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFpcnMubGVuZ3Ro
OyBpICs9IDIpIChmdW5jdGlvbihsZWZ0LCByaWdodCkgewotICAgICAgaWYgKGxlZnQgIT0gcmln
aHQpIGNsb3NpbmdCcmFja2V0cyArPSByaWdodDsKLSAgICAgIG1hcFsiJyIgKyBsZWZ0ICsgIici
XSA9IGZ1bmN0aW9uKGNtKSB7Ci0gICAgICAgIGlmIChjbS5nZXRPcHRpb24oImRpc2FibGVJbnB1
dCIpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwotICAgICAgICB2YXIgcmFuZ2VzID0gY20ubGlz
dFNlbGVjdGlvbnMoKSwgdHlwZSwgbmV4dDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBy
YW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV0sIGN1
ciA9IHJhbmdlLmhlYWQsIGN1clR5cGU7Ci0gICAgICAgICAgaWYgKGxlZnQgPT0gIiciICYmIGNt
LmdldFRva2VuVHlwZUF0KGN1cikgPT0gImNvbW1lbnQiKQotICAgICAgICAgICAgcmV0dXJuIENv
ZGVNaXJyb3IuUGFzczsKLSAgICAgICAgICB2YXIgbmV4dCA9IGNtLmdldFJhbmdlKGN1ciwgUG9z
KGN1ci5saW5lLCBjdXIuY2ggKyAxKSk7Ci0gICAgICAgICAgaWYgKCFyYW5nZS5lbXB0eSgpKQot
ICAgICAgICAgICAgY3VyVHlwZSA9ICJzdXJyb3VuZCI7Ci0gICAgICAgICAgZWxzZSBpZiAobGVm
dCA9PSByaWdodCAmJiBuZXh0ID09IHJpZ2h0KSB7Ci0gICAgICAgICAgICBpZiAoY20uZ2V0UmFu
Z2UoY3VyLCBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDMpKSA9PSBsZWZ0ICsgbGVmdCArIGxlZnQp
Ci0gICAgICAgICAgICAgIGN1clR5cGUgPSAic2tpcFRocmVlIjsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgY3VyVHlwZSA9ICJza2lwIjsKLSAgICAgICAgICB9IGVsc2UgaWYgKGxl
ZnQgPT0gcmlnaHQgJiYgY3VyLmNoID4gMSAmJgotICAgICAgICAgICAgICAgICAgICAgY20uZ2V0
UmFuZ2UoUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAyKSwgY3VyKSA9PSBsZWZ0ICsgbGVmdCAmJgot
ICAgICAgICAgICAgICAgICAgICAgKGN1ci5jaCA8PSAyIHx8IGNtLmdldFJhbmdlKFBvcyhjdXIu
bGluZSwgY3VyLmNoIC0gMyksIFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMikpICE9IGxlZnQpKQot
ICAgICAgICAgICAgY3VyVHlwZSA9ICJhZGRGb3VyIjsKLSAgICAgICAgICBlbHNlIGlmIChsZWZ0
ID09IHJpZ2h0ICYmIENvZGVNaXJyb3IuaXNXb3JkQ2hhcihuZXh0KSkKLSAgICAgICAgICAgIHJl
dHVybiBDb2RlTWlycm9yLlBhc3M7Ci0gICAgICAgICAgZWxzZSBpZiAoY20uZ2V0TGluZShjdXIu
bGluZSkubGVuZ3RoID09IGN1ci5jaCB8fCBjbG9zaW5nQnJhY2tldHMuaW5kZXhPZihuZXh0KSA+
PSAwIHx8IFNQQUNFX0NIQVJfUkVHRVgudGVzdChuZXh0KSkKLSAgICAgICAgICAgIGN1clR5cGUg
PSAiYm90aCI7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3Iu
UGFzczsKLSAgICAgICAgICBpZiAoIXR5cGUpIHR5cGUgPSBjdXJUeXBlOwotICAgICAgICAgIGVs
c2UgaWYgKHR5cGUgIT0gY3VyVHlwZSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKLSAgICAgICAg
fQotCi0gICAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKLSAgICAgICAgICBpZiAodHlw
ZSA9PSAic2tpcCIpIHsKLSAgICAgICAgICAgIGNtLmV4ZWNDb21tYW5kKCJnb0NoYXJSaWdodCIp
OwotICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAic2tpcFRocmVlIikgewotICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspCi0gICAgICAgICAgICAgIGNtLmV4ZWNDb21t
YW5kKCJnb0NoYXJSaWdodCIpOwotICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAic3Vycm91
bmQiKSB7Ci0gICAgICAgICAgICB2YXIgc2VscyA9IGNtLmdldFNlbGVjdGlvbnMoKTsKLSAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2Vscy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAg
ICAgc2Vsc1tpXSA9IGxlZnQgKyBzZWxzW2ldICsgcmlnaHQ7Ci0gICAgICAgICAgICBjbS5yZXBs
YWNlU2VsZWN0aW9ucyhzZWxzLCAiYXJvdW5kIik7Ci0gICAgICAgICAgfSBlbHNlIGlmICh0eXBl
ID09ICJib3RoIikgewotICAgICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbihsZWZ0ICsgcmln
aHQsIG51bGwpOwotICAgICAgICAgICAgY20uZXhlY0NvbW1hbmQoImdvQ2hhckxlZnQiKTsKLSAg
ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gImFkZEZvdXIiKSB7Ci0gICAgICAgICAgICBjbS5y
ZXBsYWNlU2VsZWN0aW9uKGxlZnQgKyBsZWZ0ICsgbGVmdCArIGxlZnQsICJiZWZvcmUiKTsKLSAg
ICAgICAgICAgIGNtLmV4ZWNDb21tYW5kKCJnb0NoYXJSaWdodCIpOwotICAgICAgICAgIH0KLSAg
ICAgICAgfSk7Ci0gICAgICB9OwotICAgICAgaWYgKGxlZnQgIT0gcmlnaHQpIG1hcFsiJyIgKyBy
aWdodCArICInIl0gPSBmdW5jdGlvbihjbSkgewotICAgICAgICB2YXIgcmFuZ2VzID0gY20ubGlz
dFNlbGVjdGlvbnMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07Ci0gICAgICAgICAgaWYg
KCFyYW5nZS5lbXB0eSgpIHx8Ci0gICAgICAgICAgICAgIGNtLmdldFJhbmdlKHJhbmdlLmhlYWQs
IFBvcyhyYW5nZS5oZWFkLmxpbmUsIHJhbmdlLmhlYWQuY2ggKyAxKSkgIT0gcmlnaHQpCi0gICAg
ICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwotICAgICAgICB9Ci0gICAgICAgIGNtLmV4
ZWNDb21tYW5kKCJnb0NoYXJSaWdodCIpOwotICAgICAgfTsKLSAgICB9KShwYWlycy5jaGFyQXQo
aSksIHBhaXJzLmNoYXJBdChpICsgMSkpOwotICAgIHJldHVybiBtYXA7CisgIHZhciBiaW5kID0g
ZGVmYXVsdHMucGFpcnMgKyAiYCI7CisgIHZhciBrZXlNYXAgPSB7QmFja3NwYWNlOiBoYW5kbGVC
YWNrc3BhY2UsIEVudGVyOiBoYW5kbGVFbnRlcn07CisgIGZvciAodmFyIGkgPSAwOyBpIDwgYmlu
ZC5sZW5ndGg7IGkrKykKKyAgICBrZXlNYXBbIiciICsgYmluZC5jaGFyQXQoaSkgKyAiJyJdID0g
aGFuZGxlcihiaW5kLmNoYXJBdChpKSk7CisKKyAgZnVuY3Rpb24gaGFuZGxlcihjaCkgeworICAg
IHJldHVybiBmdW5jdGlvbihjbSkgeyByZXR1cm4gaGFuZGxlQ2hhcihjbSwgY2gpOyB9OworICB9
CisKKyAgZnVuY3Rpb24gZ2V0Q29uZmlnKGNtKSB7CisgICAgdmFyIGRlZmx0ID0gY20uc3RhdGUu
Y2xvc2VCcmFja2V0czsKKyAgICBpZiAoIWRlZmx0KSByZXR1cm4gbnVsbDsKKyAgICB2YXIgbW9k
ZSA9IGNtLmdldE1vZGVBdChjbS5nZXRDdXJzb3IoKSk7CisgICAgcmV0dXJuIG1vZGUuY2xvc2VC
cmFja2V0cyB8fCBkZWZsdDsKICAgfQogCi0gIGZ1bmN0aW9uIGJ1aWxkRXhwbG9kZUhhbmRsZXIo
cGFpcnMpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oY20pIHsKLSAgICAgIGlmIChjbS5nZXRPcHRp
b24oImRpc2FibGVJbnB1dCIpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwotICAgICAgdmFyIHJh
bmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7CisgIGZ1bmN0aW9uIGhhbmRsZUJhY2tzcGFjZShj
bSkgeworICAgIHZhciBjb25mID0gZ2V0Q29uZmlnKGNtKTsKKyAgICBpZiAoIWNvbmYgfHwgY20u
Z2V0T3B0aW9uKCJkaXNhYmxlSW5wdXQiKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKworICAg
IHZhciBwYWlycyA9IGdldE9wdGlvbihjb25mLCAicGFpcnMiKTsKKyAgICB2YXIgcmFuZ2VzID0g
Y20ubGlzdFNlbGVjdGlvbnMoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5n
dGg7IGkrKykgeworICAgICAgaWYgKCFyYW5nZXNbaV0uZW1wdHkoKSkgcmV0dXJuIENvZGVNaXJy
b3IuUGFzczsKKyAgICAgIHZhciBhcm91bmQgPSBjaGFyc0Fyb3VuZChjbSwgcmFuZ2VzW2ldLmhl
YWQpOworICAgICAgaWYgKCFhcm91bmQgfHwgcGFpcnMuaW5kZXhPZihhcm91bmQpICUgMiAhPSAw
KSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOworICAgIH0KKyAgICBmb3IgKHZhciBpID0gcmFuZ2Vz
Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICB2YXIgY3VyID0gcmFuZ2VzW2ldLmhl
YWQ7CisgICAgICBjbS5yZXBsYWNlUmFuZ2UoIiIsIFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMSks
IFBvcyhjdXIubGluZSwgY3VyLmNoICsgMSkpOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIGhh
bmRsZUVudGVyKGNtKSB7CisgICAgdmFyIGNvbmYgPSBnZXRDb25maWcoY20pOworICAgIHZhciBl
eHBsb2RlID0gY29uZiAmJiBnZXRPcHRpb24oY29uZiwgImV4cGxvZGUiKTsKKyAgICBpZiAoIWV4
cGxvZGUgfHwgY20uZ2V0T3B0aW9uKCJkaXNhYmxlSW5wdXQiKSkgcmV0dXJuIENvZGVNaXJyb3Iu
UGFzczsKKworICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAoIXJhbmdlc1tp
XS5lbXB0eSgpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOworICAgICAgdmFyIGFyb3VuZCA9IGNo
YXJzQXJvdW5kKGNtLCByYW5nZXNbaV0uaGVhZCk7CisgICAgICBpZiAoIWFyb3VuZCB8fCBleHBs
b2RlLmluZGV4T2YoYXJvdW5kKSAlIDIgIT0gMCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAg
ICB9CisgICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgeworICAgICAgY20ucmVwbGFjZVNlbGVj
dGlvbigiXG5cbiIsIG51bGwpOworICAgICAgY20uZXhlY0NvbW1hbmQoImdvQ2hhckxlZnQiKTsK
KyAgICAgIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7CiAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoIXJhbmdlc1tpXS5lbXB0
eSgpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwotICAgICAgICB2YXIgYXJvdW5kID0gY2hhcnNB
cm91bmQoY20sIHJhbmdlc1tpXS5oZWFkKTsKLSAgICAgICAgaWYgKCFhcm91bmQgfHwgcGFpcnMu
aW5kZXhPZihhcm91bmQpICUgMiAhPSAwKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzOworICAgICAg
ICB2YXIgbGluZSA9IHJhbmdlc1tpXS5oZWFkLmxpbmU7CisgICAgICAgIGNtLmluZGVudExpbmUo
bGluZSwgbnVsbCwgdHJ1ZSk7CisgICAgICAgIGNtLmluZGVudExpbmUobGluZSArIDEsIG51bGws
IHRydWUpOwogICAgICAgfQotICAgICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgewotICAgICAg
ICBjbS5yZXBsYWNlU2VsZWN0aW9uKCJcblxuIiwgbnVsbCk7CisgICAgfSk7CisgIH0KKworICBm
dW5jdGlvbiBoYW5kbGVDaGFyKGNtLCBjaCkgeworICAgIHZhciBjb25mID0gZ2V0Q29uZmlnKGNt
KTsKKyAgICBpZiAoIWNvbmYgfHwgY20uZ2V0T3B0aW9uKCJkaXNhYmxlSW5wdXQiKSkgcmV0dXJu
IENvZGVNaXJyb3IuUGFzczsKKworICAgIHZhciBwYWlycyA9IGdldE9wdGlvbihjb25mLCAicGFp
cnMiKTsKKyAgICB2YXIgcG9zID0gcGFpcnMuaW5kZXhPZihjaCk7CisgICAgaWYgKHBvcyA9PSAt
MSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICB2YXIgdHJpcGxlcyA9IGdldE9wdGlvbihj
b25mLCAidHJpcGxlcyIpOworCisgICAgdmFyIGlkZW50aWNhbCA9IHBhaXJzLmNoYXJBdChwb3Mg
KyAxKSA9PSBjaDsKKyAgICB2YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKTsKKyAgICB2
YXIgb3BlbmluZyA9IHBvcyAlIDIgPT0gMDsKKworICAgIHZhciB0eXBlLCBuZXh0OworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgcmFuZ2Ug
PSByYW5nZXNbaV0sIGN1ciA9IHJhbmdlLmhlYWQsIGN1clR5cGU7CisgICAgICB2YXIgbmV4dCA9
IGNtLmdldFJhbmdlKGN1ciwgUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAxKSk7CisgICAgICBpZiAo
b3BlbmluZyAmJiAhcmFuZ2UuZW1wdHkoKSkgeworICAgICAgICBjdXJUeXBlID0gInN1cnJvdW5k
IjsKKyAgICAgIH0gZWxzZSBpZiAoKGlkZW50aWNhbCB8fCAhb3BlbmluZykgJiYgbmV4dCA9PSBj
aCkgeworICAgICAgICBpZiAodHJpcGxlcy5pbmRleE9mKGNoKSA+PSAwICYmIGNtLmdldFJhbmdl
KGN1ciwgUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAzKSkgPT0gY2ggKyBjaCArIGNoKQorICAgICAg
ICAgIGN1clR5cGUgPSAic2tpcFRocmVlIjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGN1clR5
cGUgPSAic2tpcCI7CisgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCAmJiBjdXIuY2ggPiAxICYm
IHRyaXBsZXMuaW5kZXhPZihjaCkgPj0gMCAmJgorICAgICAgICAgICAgICAgICBjbS5nZXRSYW5n
ZShQb3MoY3VyLmxpbmUsIGN1ci5jaCAtIDIpLCBjdXIpID09IGNoICsgY2ggJiYKKyAgICAgICAg
ICAgICAgICAgKGN1ci5jaCA8PSAyIHx8IGNtLmdldFJhbmdlKFBvcyhjdXIubGluZSwgY3VyLmNo
IC0gMyksIFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMikpICE9IGNoKSkgeworICAgICAgICBjdXJU
eXBlID0gImFkZEZvdXIiOworICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwpIHsKKyAgICAgICAg
aWYgKCFDb2RlTWlycm9yLmlzV29yZENoYXIobmV4dCkgJiYgZW50ZXJpbmdTdHJpbmcoY20sIGN1
ciwgY2gpKSBjdXJUeXBlID0gImJvdGgiOworICAgICAgICBlbHNlIHJldHVybiBDb2RlTWlycm9y
LlBhc3M7CisgICAgICB9IGVsc2UgaWYgKG9wZW5pbmcgJiYgKGNtLmdldExpbmUoY3VyLmxpbmUp
Lmxlbmd0aCA9PSBjdXIuY2ggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9z
aW5nQnJhY2tldChuZXh0LCBwYWlycykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
L1xzLy50ZXN0KG5leHQpKSkgeworICAgICAgICBjdXJUeXBlID0gImJvdGgiOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKKyAgICAgIH0KKyAgICAgIGlm
ICghdHlwZSkgdHlwZSA9IGN1clR5cGU7CisgICAgICBlbHNlIGlmICh0eXBlICE9IGN1clR5cGUp
IHJldHVybiBDb2RlTWlycm9yLlBhc3M7CisgICAgfQorCisgICAgdmFyIGxlZnQgPSBwb3MgJSAy
ID8gcGFpcnMuY2hhckF0KHBvcyAtIDEpIDogY2g7CisgICAgdmFyIHJpZ2h0ID0gcG9zICUgMiA/
IGNoIDogcGFpcnMuY2hhckF0KHBvcyArIDEpOworICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigp
IHsKKyAgICAgIGlmICh0eXBlID09ICJza2lwIikgeworICAgICAgICBjbS5leGVjQ29tbWFuZCgi
Z29DaGFyUmlnaHQiKTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAic2tpcFRocmVlIikgewor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAgICBjbS5leGVjQ29t
bWFuZCgiZ29DaGFyUmlnaHQiKTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAic3Vycm91bmQi
KSB7CisgICAgICAgIHZhciBzZWxzID0gY20uZ2V0U2VsZWN0aW9ucygpOworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHNlbHMubGVuZ3RoOyBpKyspCisgICAgICAgICAgc2Vsc1tpXSA9IGxl
ZnQgKyBzZWxzW2ldICsgcmlnaHQ7CisgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHNlbHMs
ICJhcm91bmQiKTsKKyAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiYm90aCIpIHsKKyAgICAgICAg
Y20ucmVwbGFjZVNlbGVjdGlvbihsZWZ0ICsgcmlnaHQsIG51bGwpOworICAgICAgICBjbS50cmln
Z2VyRWxlY3RyaWMobGVmdCArIHJpZ2h0KTsKICAgICAgICAgY20uZXhlY0NvbW1hbmQoImdvQ2hh
ckxlZnQiKTsKLSAgICAgICAgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICB2YXIg
bGluZSA9IHJhbmdlc1tpXS5oZWFkLmxpbmU7Ci0gICAgICAgICAgY20uaW5kZW50TGluZShsaW5l
LCBudWxsLCB0cnVlKTsKLSAgICAgICAgICBjbS5pbmRlbnRMaW5lKGxpbmUgKyAxLCBudWxsLCB0
cnVlKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfTsKKyAgICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSAiYWRkRm91ciIpIHsKKyAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbihsZWZ0ICsgbGVm
dCArIGxlZnQgKyBsZWZ0LCAiYmVmb3JlIik7CisgICAgICAgIGNtLmV4ZWNDb21tYW5kKCJnb0No
YXJSaWdodCIpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgZnVuY3Rpb24gaXNDbG9zaW5n
QnJhY2tldChjaCwgcGFpcnMpIHsKKyAgICB2YXIgcG9zID0gcGFpcnMubGFzdEluZGV4T2YoY2gp
OworICAgIHJldHVybiBwb3MgPiAtMSAmJiBwb3MgJSAyID09IDE7CisgIH0KKworICBmdW5jdGlv
biBjaGFyc0Fyb3VuZChjbSwgcG9zKSB7CisgICAgdmFyIHN0ciA9IGNtLmdldFJhbmdlKFBvcyhw
b3MubGluZSwgcG9zLmNoIC0gMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhwb3Mu
bGluZSwgcG9zLmNoICsgMSkpOworICAgIHJldHVybiBzdHIubGVuZ3RoID09IDIgPyBzdHIgOiBu
dWxsOworICB9CisKKyAgLy8gUHJvamVjdCB0aGUgdG9rZW4gdHlwZSB0aGF0IHdpbGwgZXhpc3Rz
IGFmdGVyIHRoZSBnaXZlbiBjaGFyIGlzCisgIC8vIHR5cGVkLCBhbmQgdXNlIGl0IHRvIGRldGVy
bWluZSB3aGV0aGVyIGl0IHdvdWxkIGNhdXNlIHRoZSBzdGFydAorICAvLyBvZiBhIHN0cmluZyB0
b2tlbi4KKyAgZnVuY3Rpb24gZW50ZXJpbmdTdHJpbmcoY20sIHBvcywgY2gpIHsKKyAgICB2YXIg
bGluZSA9IGNtLmdldExpbmUocG9zLmxpbmUpOworICAgIHZhciB0b2tlbiA9IGNtLmdldFRva2Vu
QXQocG9zKTsKKyAgICBpZiAoL1xic3RyaW5nMj9cYi8udGVzdCh0b2tlbi50eXBlKSkgcmV0dXJu
IGZhbHNlOworICAgIHZhciBzdHJlYW0gPSBuZXcgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0obGlu
ZS5zbGljZSgwLCBwb3MuY2gpICsgY2ggKyBsaW5lLnNsaWNlKHBvcy5jaCksIDQpOworICAgIHN0
cmVhbS5wb3MgPSBzdHJlYW0uc3RhcnQgPSB0b2tlbi5zdGFydDsKKyAgICBmb3IgKDs7KSB7Cisg
ICAgICB2YXIgdHlwZTEgPSBjbS5nZXRNb2RlKCkudG9rZW4oc3RyZWFtLCB0b2tlbi5zdGF0ZSk7
CisgICAgICBpZiAoc3RyZWFtLnBvcyA+PSBwb3MuY2ggKyAxKSByZXR1cm4gL1xic3RyaW5nMj9c
Yi8udGVzdCh0eXBlMSk7CisgICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOworICAgIH0K
ICAgfQogfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmNzcwpvbGQg
bW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDA5OGEzMTdhMjI5MDk4ZTJjMGRkOWI2
ZWFmOThmNzIzYmZjODc2YzguLjM1NDM1MjNlNjQ1Y2U1YThhNjgxOTg2ZDVmMjg5ZWVhNjU1MTRl
MzkKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29k
ZU1pcnJvci9jb2RlbWlycm9yLmNzcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzCkBAIC00LDEwICs0LDcg
QEAKICAgLyogU2V0IGhlaWdodCwgd2lkdGgsIGJvcmRlcnMsIGFuZCBnbG9iYWwgZm9udCBwcm9w
ZXJ0aWVzIGhlcmUgKi8KICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgaGVpZ2h0OiAzMDBw
eDsKLX0KLS5Db2RlTWlycm9yLXNjcm9sbCB7Ci0gIC8qIFNldCBzY3JvbGxpbmcgYmVoYXZpb3Vy
IGhlcmUgKi8KLSAgb3ZlcmZsb3c6IGF1dG87CisgIGNvbG9yOiBibGFjazsKIH0KIAogLyogUEFE
RElORyAqLwpAQCAtMzYsMjggKzMzLDYwIEBACiAgIG1pbi13aWR0aDogMjBweDsKICAgdGV4dC1h
bGlnbjogcmlnaHQ7CiAgIGNvbG9yOiAjOTk5OwotICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQt
Ym94OwotICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKyAgd2hpdGUtc3BhY2U6IG5vd3JhcDsK
IH0KIAorLkNvZGVNaXJyb3ItZ3V0dGVybWFya2VyIHsgY29sb3I6IGJsYWNrOyB9CisuQ29kZU1p
cnJvci1ndXR0ZXJtYXJrZXItc3VidGxlIHsgY29sb3I6ICM5OTk7IH0KKwogLyogQ1VSU09SICov
CiAKLS5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7CisuQ29kZU1pcnJvci1jdXJz
b3IgewogICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOworICBib3JkZXItcmlnaHQ6IG5v
bmU7CisgIHdpZHRoOiAwOwogfQogLyogU2hvd24gd2hlbiBtb3ZpbmcgaW4gYmktZGlyZWN0aW9u
YWwgdGV4dCAqLwogLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIHsK
ICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7CiB9Ci0uQ29kZU1pcnJvci5jbS1rZXlt
YXAtZmF0LWN1cnNvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IgeworLmNtLWZhdC1jdXJzb3IgLkNv
ZGVNaXJyb3ItY3Vyc29yIHsKICAgd2lkdGg6IGF1dG87CiAgIGJvcmRlcjogMDsKICAgYmFja2dy
b3VuZDogIzdlNzsKIH0KKy5jbS1mYXQtY3Vyc29yIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMgewor
ICB6LWluZGV4OiAxOworfQorCisuY20tYW5pbWF0ZS1mYXQtY3Vyc29yIHsKKyAgd2lkdGg6IGF1
dG87CisgIGJvcmRlcjogMDsKKyAgLXdlYmtpdC1hbmltYXRpb246IGJsaW5rIDEuMDZzIHN0ZXBz
KDEpIGluZmluaXRlOworICAtbW96LWFuaW1hdGlvbjogYmxpbmsgMS4wNnMgc3RlcHMoMSkgaW5m
aW5pdGU7CisgIGFuaW1hdGlvbjogYmxpbmsgMS4wNnMgc3RlcHMoMSkgaW5maW5pdGU7CisgIGJh
Y2tncm91bmQtY29sb3I6ICM3ZTc7Cit9CitALW1vei1rZXlmcmFtZXMgYmxpbmsgeworICAwJSB7
fQorICA1MCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfQorICAxMDAlIHt9Cit9
CitALXdlYmtpdC1rZXlmcmFtZXMgYmxpbmsgeworICAwJSB7fQorICA1MCUgeyBiYWNrZ3JvdW5k
LWNvbG9yOiB0cmFuc3BhcmVudDsgfQorICAxMDAlIHt9Cit9CitAa2V5ZnJhbWVzIGJsaW5rIHsK
KyAgMCUge30KKyAgNTAlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KKyAgMTAw
JSB7fQorfQorCiAvKiBDYW4gc3R5bGUgY3Vyc29yIGRpZmZlcmVudCBpbiBvdmVyd3JpdGUgKG5v
bi1pbnNlcnQpIG1vZGUgKi8KLWRpdi5Db2RlTWlycm9yLW92ZXJ3cml0ZSBkaXYuQ29kZU1pcnJv
ci1jdXJzb3Ige30KKy5Db2RlTWlycm9yLW92ZXJ3cml0ZSAuQ29kZU1pcnJvci1jdXJzb3Ige30K
IAotLmNtLXRhYiB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgfQorLmNtLXRhYiB7IGRpc3BsYXk6
IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0OyB9CiAKIC5Db2RlTWlycm9y
LXJ1bGVyIHsKICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwpAQCAtNjYsNiArOTUsMTUg
QEAgZGl2LkNvZGVNaXJyb3Itb3ZlcndyaXRlIGRpdi5Db2RlTWlycm9yLWN1cnNvciB7fQogCiAv
KiBERUZBVUxUIFRIRU1FICovCiAKKy5jbS1zLWRlZmF1bHQgLmNtLWhlYWRlciB7Y29sb3I6IGJs
dWU7fQorLmNtLXMtZGVmYXVsdCAuY20tcXVvdGUge2NvbG9yOiAjMDkwO30KKy5jbS1uZWdhdGl2
ZSB7Y29sb3I6ICNkNDQ7fQorLmNtLXBvc2l0aXZlIHtjb2xvcjogIzI5Mjt9CisuY20taGVhZGVy
LCAuY20tc3Ryb25nIHtmb250LXdlaWdodDogYm9sZDt9CisuY20tZW0ge2ZvbnQtc3R5bGU6IGl0
YWxpYzt9CisuY20tbGluayB7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fQorLmNtLXN0cmlr
ZXRocm91Z2gge3RleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO30KKwogLmNtLXMtZGVmYXVs
dCAuY20ta2V5d29yZCB7Y29sb3I6ICM3MDg7fQogLmNtLXMtZGVmYXVsdCAuY20tYXRvbSB7Y29s
b3I6ICMyMTk7fQogLmNtLXMtZGVmYXVsdCAuY20tbnVtYmVyIHtjb2xvcjogIzE2NDt9CkBAIC04
NSwyMiArMTIzLDE5IEBAIGRpdi5Db2RlTWlycm9yLW92ZXJ3cml0ZSBkaXYuQ29kZU1pcnJvci1j
dXJzb3Ige30KIC5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQge2NvbG9yOiAjOTk3O30KIC5jbS1z
LWRlZmF1bHQgLmNtLXRhZyB7Y29sb3I6ICMxNzA7fQogLmNtLXMtZGVmYXVsdCAuY20tYXR0cmli
dXRlIHtjb2xvcjogIzAwYzt9Ci0uY20tcy1kZWZhdWx0IC5jbS1oZWFkZXIge2NvbG9yOiBibHVl
O30KLS5jbS1zLWRlZmF1bHQgLmNtLXF1b3RlIHtjb2xvcjogIzA5MDt9CiAuY20tcy1kZWZhdWx0
IC5jbS1ociB7Y29sb3I6ICM5OTk7fQogLmNtLXMtZGVmYXVsdCAuY20tbGluayB7Y29sb3I6ICMw
MGM7fQogCi0uY20tbmVnYXRpdmUge2NvbG9yOiAjZDQ0O30KLS5jbS1wb3NpdGl2ZSB7Y29sb3I6
ICMyOTI7fQotLmNtLWhlYWRlciwgLmNtLXN0cm9uZyB7Zm9udC13ZWlnaHQ6IGJvbGQ7fQotLmNt
LWVtIHtmb250LXN0eWxlOiBpdGFsaWM7fQotLmNtLWxpbmsge3RleHQtZGVjb3JhdGlvbjogdW5k
ZXJsaW5lO30KLQogLmNtLXMtZGVmYXVsdCAuY20tZXJyb3Ige2NvbG9yOiAjZjAwO30KIC5jbS1p
bnZhbGlkY2hhciB7Y29sb3I6ICNmMDA7fQogCisuQ29kZU1pcnJvci1jb21wb3NpbmcgeyBib3Jk
ZXItYm90dG9tOiAycHggc29saWQ7IH0KKworLyogRGVmYXVsdCBzdHlsZXMgZm9yIGNvbW1vbiBh
ZGRvbnMgKi8KKwogZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tl
dCB7Y29sb3I6ICMwZjA7fQogZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW5vbm1hdGNo
aW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQorLkNvZGVNaXJyb3ItbWF0Y2hpbmd0YWcgeyBiYWNr
Z3JvdW5kOiByZ2JhKDI1NSwgMTUwLCAwLCAuMyk7IH0KIC5Db2RlTWlycm9yLWFjdGl2ZWxpbmUt
YmFja2dyb3VuZCB7YmFja2dyb3VuZDogI2U4ZjJmZjt9CiAKIC8qIFNUT1AgKi8KQEAgLTEwOSwx
NCArMTQ0LDEzIEBAIGRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2Jy
YWNrZXQge2NvbG9yOiAjZjIyO30KICAgIHRoZSBlZGl0b3IuIFlvdSBwcm9iYWJseSBzaG91bGRu
J3QgdG91Y2ggdGhlbS4gKi8KIAogLkNvZGVNaXJyb3IgewotICBsaW5lLWhlaWdodDogMTsKICAg
cG9zaXRpb246IHJlbGF0aXZlOwogICBvdmVyZmxvdzogaGlkZGVuOwogICBiYWNrZ3JvdW5kOiB3
aGl0ZTsKLSAgY29sb3I6IGJsYWNrOwogfQogCiAuQ29kZU1pcnJvci1zY3JvbGwgeworICBvdmVy
Zmxvdzogc2Nyb2xsICFpbXBvcnRhbnQ7IC8qIFRoaW5ncyB3aWxsIGJyZWFrIGlmIHRoaXMgaXMg
b3ZlcnJpZGRlbiAqLwogICAvKiAzMHB4IGlzIHRoZSBtYWdpYyBtYXJnaW4gdXNlZCB0byBoaWRl
IHRoZSBlbGVtZW50J3MgcmVhbCBzY3JvbGxiYXJzICovCiAgIC8qIFNlZSBvdmVyZmxvdzogaGlk
ZGVuIGluIC5Db2RlTWlycm9yICovCiAgIG1hcmdpbi1ib3R0b206IC0zMHB4OyBtYXJnaW4tcmln
aHQ6IC0zMHB4OwpAQCAtMTI0LDE0ICsxNTgsMTAgQEAgZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2Rl
TWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjI7fQogICBoZWlnaHQ6IDEwMCU7
CiAgIG91dGxpbmU6IG5vbmU7IC8qIFByZXZlbnQgZHJhZ2dpbmcgZnJvbSBoaWdobGlnaHRpbmcg
dGhlIGVsZW1lbnQgKi8KICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAtbW96LWJveC1zaXppbmc6
IGNvbnRlbnQtYm94OwotICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKIH0KIC5Db2RlTWlycm9y
LXNpemVyIHsKICAgcG9zaXRpb246IHJlbGF0aXZlOwogICBib3JkZXItcmlnaHQ6IDMwcHggc29s
aWQgdHJhbnNwYXJlbnQ7Ci0gIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7Ci0gIGJveC1z
aXppbmc6IGNvbnRlbnQtYm94OwogfQogCiAvKiBUaGUgZmFrZSwgdmlzaWJsZSBzY3JvbGxiYXJz
LiBVc2VkIHRvIGZvcmNlIHJlZHJhdyBkdXJpbmcgc2Nyb2xsaW5nCkBAIC0xNjEsMjkgKzE5MSw0
MiBAQCBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtj
b2xvcjogI2YyMjt9CiAKIC5Db2RlTWlycm9yLWd1dHRlcnMgewogICBwb3NpdGlvbjogYWJzb2x1
dGU7IGxlZnQ6IDA7IHRvcDogMDsKLSAgcGFkZGluZy1ib3R0b206IDMwcHg7CiAgIHotaW5kZXg6
IDM7CiB9CiAuQ29kZU1pcnJvci1ndXR0ZXIgewogICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICBo
ZWlnaHQ6IDEwMCU7Ci0gIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7Ci0gIGJveC1zaXpp
bmc6IGNvbnRlbnQtYm94OwotICBwYWRkaW5nLWJvdHRvbTogMzBweDsKLSAgbWFyZ2luLWJvdHRv
bTogLTMycHg7CiAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgbWFyZ2luLWJvdHRvbTogLTMw
cHg7CiAgIC8qIEhhY2sgdG8gbWFrZSBJRTcgYmVoYXZlICovCiAgICp6b29tOjE7CiAgICpkaXNw
bGF5OmlubGluZTsKIH0KKy5Db2RlTWlycm9yLWd1dHRlci13cmFwcGVyIHsKKyAgcG9zaXRpb246
IGFic29sdXRlOworICB6LWluZGV4OiA0OworICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7
CisgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OworfQorLkNvZGVNaXJyb3ItZ3V0dGVyLWJhY2tn
cm91bmQgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMDsgYm90dG9tOiAwOworICB6
LWluZGV4OiA0OworfQogLkNvZGVNaXJyb3ItZ3V0dGVyLWVsdCB7CiAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKICAgY3Vyc29yOiBkZWZhdWx0OwogICB6LWluZGV4OiA0OwogfQorLkNvZGVNaXJyb3It
Z3V0dGVyLXdyYXBwZXIgeworICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworICAtbW96LXVz
ZXItc2VsZWN0OiBub25lOworICB1c2VyLXNlbGVjdDogbm9uZTsKK30KIAogLkNvZGVNaXJyb3It
bGluZXMgewogICBjdXJzb3I6IHRleHQ7CisgIG1pbi1oZWlnaHQ6IDFweDsgLyogcHJldmVudHMg
Y29sbGFwc2luZyBiZWZvcmUgZmlyc3QgZHJhdyAqLwogfQogLkNvZGVNaXJyb3IgcHJlIHsKICAg
LyogUmVzZXQgc29tZSBzdHlsZXMgdGhhdCB0aGUgcmVzdCBvZiB0aGUgcGFnZSBtaWdodCBoYXZl
IHNldCAqLwpAQCAtMjAwLDYgKzI0Myw3IEBAIGRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJv
ci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30KICAgei1pbmRleDogMjsKICAgcG9z
aXRpb246IHJlbGF0aXZlOwogICBvdmVyZmxvdzogdmlzaWJsZTsKKyAgLXdlYmtpdC10YXAtaGln
aGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKIH0KIC5Db2RlTWlycm9yLXdyYXAgcHJlIHsKICAg
d29yZC13cmFwOiBicmVhay13b3JkOwpAQCAtMjIxLDggKzI2NSwxOCBAQCBkaXYuQ29kZU1pcnJv
ciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMjt9CiAKIC5D
b2RlTWlycm9yLXdpZGdldCB7fQogCi0uQ29kZU1pcnJvci13cmFwIC5Db2RlTWlycm9yLXNjcm9s
bCB7Ci0gIG92ZXJmbG93LXg6IGhpZGRlbjsKKy5Db2RlTWlycm9yLWNvZGUgeworICBvdXRsaW5l
OiBub25lOworfQorCisvKiBGb3JjZSBjb250ZW50LWJveCBzaXppbmcgZm9yIHRoZSBlbGVtZW50
cyB3aGVyZSB3ZSBleHBlY3QgaXQgKi8KKy5Db2RlTWlycm9yLXNjcm9sbCwKKy5Db2RlTWlycm9y
LXNpemVyLAorLkNvZGVNaXJyb3ItZ3V0dGVyLAorLkNvZGVNaXJyb3ItZ3V0dGVycywKKy5Db2Rl
TWlycm9yLWxpbmVudW1iZXIgeworICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OworICBi
b3gtc2l6aW5nOiBjb250ZW50LWJveDsKIH0KIAogLkNvZGVNaXJyb3ItbWVhc3VyZSB7CkBAIC0y
MzIsMTkgKzI4NiwxOSBAQCBkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hp
bmdicmFja2V0IHtjb2xvcjogI2YyMjt9CiAgIG92ZXJmbG93OiBoaWRkZW47CiAgIHZpc2liaWxp
dHk6IGhpZGRlbjsKIH0KLS5Db2RlTWlycm9yLW1lYXN1cmUgcHJlIHsgcG9zaXRpb246IHN0YXRp
YzsgfQogCi0uQ29kZU1pcnJvciBkaXYuQ29kZU1pcnJvci1jdXJzb3IgewotICBwb3NpdGlvbjog
YWJzb2x1dGU7Ci0gIGJvcmRlci1yaWdodDogbm9uZTsKLSAgd2lkdGg6IDA7Ci19CisuQ29kZU1p
cnJvci1jdXJzb3IgeyBwb3NpdGlvbjogYWJzb2x1dGU7IH0KKy5Db2RlTWlycm9yLW1lYXN1cmUg
cHJlIHsgcG9zaXRpb246IHN0YXRpYzsgfQogCiBkaXYuQ29kZU1pcnJvci1jdXJzb3JzIHsKICAg
dmlzaWJpbGl0eTogaGlkZGVuOwogICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gIHotaW5kZXg6IDE7
CisgIHotaW5kZXg6IDM7CiB9CitkaXYuQ29kZU1pcnJvci1kcmFnY3Vyc29ycyB7CisgIHZpc2li
aWxpdHk6IHZpc2libGU7Cit9CisKIC5Db2RlTWlycm9yLWZvY3VzZWQgZGl2LkNvZGVNaXJyb3It
Y3Vyc29ycyB7CiAgIHZpc2liaWxpdHk6IHZpc2libGU7CiB9CkBAIC0yNTIsNiArMzA2LDggQEAg
ZGl2LkNvZGVNaXJyb3ItY3Vyc29ycyB7CiAuQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91
bmQ6ICNkOWQ5ZDk7IH0KIC5Db2RlTWlycm9yLWZvY3VzZWQgLkNvZGVNaXJyb3Itc2VsZWN0ZWQg
eyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9CiAuQ29kZU1pcnJvci1jcm9zc2hhaXIgeyBjdXJzb3I6
IGNyb3NzaGFpcjsgfQorLkNvZGVNaXJyb3ItbGluZTo6c2VsZWN0aW9uLCAuQ29kZU1pcnJvci1s
aW5lID4gc3Bhbjo6c2VsZWN0aW9uLCAuQ29kZU1pcnJvci1saW5lID4gc3BhbiA+IHNwYW46OnNl
bGVjdGlvbiB7IGJhY2tncm91bmQ6ICNkN2Q0ZjA7IH0KKy5Db2RlTWlycm9yLWxpbmU6Oi1tb3ot
c2VsZWN0aW9uLCAuQ29kZU1pcnJvci1saW5lID4gc3Bhbjo6LW1vei1zZWxlY3Rpb24sIC5Db2Rl
TWlycm9yLWxpbmUgPiBzcGFuID4gc3Bhbjo6LW1vei1zZWxlY3Rpb24geyBiYWNrZ3JvdW5kOiAj
ZDdkNGYwOyB9CiAKIC5jbS1zZWFyY2hpbmcgewogICBiYWNrZ3JvdW5kOiAjZmZhOwpAQCAtMjcw
LDMgKzMyNiw5IEBAIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMgewogICAgIHZpc2liaWxpdHk6IGhp
ZGRlbjsKICAgfQogfQorCisvKiBTZWUgaXNzdWUgIzI5MDEgKi8KKy5jbS10YWItd3JhcC1oYWNr
OmFmdGVyIHsgY29udGVudDogJyc7IH0KKworLyogSGVscCB1c2VycyB1c2UgbWFya3NlbGVjdGlv
biB0byBzYWZlbHkgc3R5bGUgdGV4dCBiYWNrZ3JvdW5kICovCitzcGFuLkNvZGVNaXJyb3Itc2Vs
ZWN0ZWR0ZXh0IHsgYmFja2dyb3VuZDogbm9uZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmpz
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJv
ci9jb2RlbWlycm9yLmpzCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggODYx
MmVkODEzMTZhYzQ5NDZkNjhkNzE1OGJiMTk0MzNmZWQ0ZWJhZi4uODBhNzA5Njc1ZDU3MjNlNWRl
NTM3YmYxNDViMWNlOTNhZmU0NzYyOAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuanMKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9y
LmpzCkBAIC0yMywxOSArMjMsMTUgQEAKICAgLy8gZGV0ZWN0ZWQgYXJlIGVuYWJsZWQgYmFzZWQg
b24gdXNlckFnZW50IGV0YyBzbmlmZmluZy4KIAogICB2YXIgZ2Vja28gPSAvZ2Vja29cL1xkL2ku
dGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAgLy8gaWVfdXB0b04gbWVhbnMgSW50ZXJuZXQg
RXhwbG9yZXIgdmVyc2lvbiBOIG9yIGxvd2VyCiAgIHZhciBpZV91cHRvMTAgPSAvTVNJRSBcZC8u
dGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKLSAgdmFyIGllX3VwdG83ID0gaWVfdXB0bzEwICYm
IChkb2N1bWVudC5kb2N1bWVudE1vZGUgPT0gbnVsbCB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUg
PCA4KTsKLSAgdmFyIGllX3VwdG84ID0gaWVfdXB0bzEwICYmIChkb2N1bWVudC5kb2N1bWVudE1v
ZGUgPT0gbnVsbCB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPCA5KTsKLSAgdmFyIGllX3VwdG85
ID0gaWVfdXB0bzEwICYmIChkb2N1bWVudC5kb2N1bWVudE1vZGUgPT0gbnVsbCB8fCBkb2N1bWVu
dC5kb2N1bWVudE1vZGUgPCAxMCk7Ci0gIHZhciBpZV8xMXVwID0gL1RyaWRlbnRcLyhbNy05XXxc
ZHsyLH0pXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CisgIHZhciBpZV8xMXVwID0gL1Ry
aWRlbnRcLyg/Ols3LTldfFxkezIsfSlcLi4qcnY6KFxkKykvLmV4ZWMobmF2aWdhdG9yLnVzZXJB
Z2VudCk7CiAgIHZhciBpZSA9IGllX3VwdG8xMCB8fCBpZV8xMXVwOworICB2YXIgaWVfdmVyc2lv
biA9IGllICYmIChpZV91cHRvMTAgPyBkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgNiA6IGllXzEx
dXBbMV0pOwogICB2YXIgd2Via2l0ID0gL1dlYktpdFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdl
bnQpOwogICB2YXIgcXR3ZWJraXQgPSB3ZWJraXQgJiYgL1F0XC9cZCtcLlxkKy8udGVzdChuYXZp
Z2F0b3IudXNlckFnZW50KTsKICAgdmFyIGNocm9tZSA9IC9DaHJvbWVcLy8udGVzdChuYXZpZ2F0
b3IudXNlckFnZW50KTsKICAgdmFyIHByZXN0byA9IC9PcGVyYVwvLy50ZXN0KG5hdmlnYXRvci51
c2VyQWdlbnQpOwogICB2YXIgc2FmYXJpID0gL0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRv
ci52ZW5kb3IpOwotICB2YXIga2h0bWwgPSAvS0hUTUxcLy8udGVzdChuYXZpZ2F0b3IudXNlckFn
ZW50KTsKICAgdmFyIG1hY19nZU1vdW50YWluTGlvbiA9IC9NYWMgT1MgWCAxXGRcRChbOC05XXxc
ZFxkKVxELy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogICB2YXIgcGhhbnRvbSA9IC9QaGFu
dG9tSlMvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAKQEAgLTUwLDcgKzQ2LDcgQEAKICAg
aWYgKHByZXN0b192ZXJzaW9uICYmIHByZXN0b192ZXJzaW9uID49IDE1KSB7IHByZXN0byA9IGZh
bHNlOyB3ZWJraXQgPSB0cnVlOyB9CiAgIC8vIFNvbWUgYnJvd3NlcnMgdXNlIHRoZSB3cm9uZyBl
dmVudCBwcm9wZXJ0aWVzIHRvIHNpZ25hbCBjbWQvY3RybCBvbiBPUyBYCiAgIHZhciBmbGlwQ3Ry
bENtZCA9IG1hYyAmJiAocXR3ZWJraXQgfHwgcHJlc3RvICYmIChwcmVzdG9fdmVyc2lvbiA9PSBu
dWxsIHx8IHByZXN0b192ZXJzaW9uIDwgMTIuMTEpKTsKLSAgdmFyIGNhcHR1cmVSaWdodENsaWNr
ID0gZ2Vja28gfHwgKGllICYmICFpZV91cHRvOCk7CisgIHZhciBjYXB0dXJlUmlnaHRDbGljayA9
IGdlY2tvIHx8IChpZSAmJiBpZV92ZXJzaW9uID49IDkpOwogCiAgIC8vIE9wdGltaXplIHNvbWUg
Y29kZSB3aGVuIHRoZXNlIGZlYXR1cmVzIGFyZSBub3QgdXNlZC4KICAgdmFyIHNhd1JlYWRPbmx5
U3BhbnMgPSBmYWxzZSwgc2F3Q29sbGFwc2VkU3BhbnMgPSBmYWxzZTsKQEAgLTYzLDU1ICs1OSw3
MCBAQAogICBmdW5jdGlvbiBDb2RlTWlycm9yKHBsYWNlLCBvcHRpb25zKSB7CiAgICAgaWYgKCEo
dGhpcyBpbnN0YW5jZW9mIENvZGVNaXJyb3IpKSByZXR1cm4gbmV3IENvZGVNaXJyb3IocGxhY2Us
IG9wdGlvbnMpOwogCi0gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IG9wdGlvbnMgfHwge307
CisgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IG9wdGlvbnMgPyBjb3B5T2JqKG9wdGlvbnMp
IDoge307CiAgICAgLy8gRGV0ZXJtaW5lIGVmZmVjdGl2ZSBvcHRpb25zIGJhc2VkIG9uIGdpdmVu
IHZhbHVlcyBhbmQgZGVmYXVsdHMuCiAgICAgY29weU9iaihkZWZhdWx0cywgb3B0aW9ucywgZmFs
c2UpOwogICAgIHNldEd1dHRlcnNGb3JMaW5lTnVtYmVycyhvcHRpb25zKTsKIAogICAgIHZhciBk
b2MgPSBvcHRpb25zLnZhbHVlOwotICAgIGlmICh0eXBlb2YgZG9jID09ICJzdHJpbmciKSBkb2Mg
PSBuZXcgRG9jKGRvYywgb3B0aW9ucy5tb2RlKTsKKyAgICBpZiAodHlwZW9mIGRvYyA9PSAic3Ry
aW5nIikgZG9jID0gbmV3IERvYyhkb2MsIG9wdGlvbnMubW9kZSwgbnVsbCwgb3B0aW9ucy5saW5l
U2VwYXJhdG9yKTsKICAgICB0aGlzLmRvYyA9IGRvYzsKIAotICAgIHZhciBkaXNwbGF5ID0gdGhp
cy5kaXNwbGF5ID0gbmV3IERpc3BsYXkocGxhY2UsIGRvYyk7CisgICAgdmFyIGlucHV0ID0gbmV3
IENvZGVNaXJyb3IuaW5wdXRTdHlsZXNbb3B0aW9ucy5pbnB1dFN0eWxlXSh0aGlzKTsKKyAgICB2
YXIgZGlzcGxheSA9IHRoaXMuZGlzcGxheSA9IG5ldyBEaXNwbGF5KHBsYWNlLCBkb2MsIGlucHV0
KTsKICAgICBkaXNwbGF5LndyYXBwZXIuQ29kZU1pcnJvciA9IHRoaXM7CiAgICAgdXBkYXRlR3V0
dGVycyh0aGlzKTsKICAgICB0aGVtZUNoYW5nZWQodGhpcyk7CiAgICAgaWYgKG9wdGlvbnMubGlu
ZVdyYXBwaW5nKQogICAgICAgdGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lICs9ICIgQ29k
ZU1pcnJvci13cmFwIjsKLSAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgJiYgIW1vYmlsZSkgZm9j
dXNJbnB1dCh0aGlzKTsKKyAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgJiYgIW1vYmlsZSkgZGlz
cGxheS5pbnB1dC5mb2N1cygpOworICAgIGluaXRTY3JvbGxiYXJzKHRoaXMpOwogCiAgICAgdGhp
cy5zdGF0ZSA9IHsKICAgICAgIGtleU1hcHM6IFtdLCAgLy8gc3RvcmVzIG1hcHMgYWRkZWQgYnkg
YWRkS2V5TWFwCiAgICAgICBvdmVybGF5czogW10sIC8vIGhpZ2hsaWdodGluZyBvdmVybGF5cywg
YXMgYWRkZWQgYnkgYWRkT3ZlcmxheQogICAgICAgbW9kZUdlbjogMCwgICAvLyBidW1wZWQgd2hl
biBtb2RlL292ZXJsYXkgY2hhbmdlcywgdXNlZCB0byBpbnZhbGlkYXRlIGhpZ2hsaWdodGluZyBp
bmZvCi0gICAgICBvdmVyd3JpdGU6IGZhbHNlLCBmb2N1c2VkOiBmYWxzZSwKKyAgICAgIG92ZXJ3
cml0ZTogZmFsc2UsCisgICAgICBkZWxheWluZ0JsdXJFdmVudDogZmFsc2UsCisgICAgICBmb2N1
c2VkOiBmYWxzZSwKICAgICAgIHN1cHByZXNzRWRpdHM6IGZhbHNlLCAvLyB1c2VkIHRvIGRpc2Fi
bGUgZWRpdGluZyBkdXJpbmcga2V5IGhhbmRsZXJzIHdoZW4gaW4gcmVhZE9ubHkgbW9kZQotICAg
ICAgcGFzdGVJbmNvbWluZzogZmFsc2UsIGN1dEluY29taW5nOiBmYWxzZSwgLy8gaGVscCByZWNv
Z25pemUgcGFzdGUvY3V0IGVkaXRzIGluIHJlYWRJbnB1dAorICAgICAgcGFzdGVJbmNvbWluZzog
ZmFsc2UsIGN1dEluY29taW5nOiBmYWxzZSwgLy8gaGVscCByZWNvZ25pemUgcGFzdGUvY3V0IGVk
aXRzIGluIGlucHV0LnBvbGwKKyAgICAgIHNlbGVjdGluZ1RleHQ6IGZhbHNlLAogICAgICAgZHJh
Z2dpbmdUZXh0OiBmYWxzZSwKLSAgICAgIGhpZ2hsaWdodDogbmV3IERlbGF5ZWQoKSAvLyBzdG9y
ZXMgaGlnaGxpZ2h0IHdvcmtlciB0aW1lb3V0CisgICAgICBoaWdobGlnaHQ6IG5ldyBEZWxheWVk
KCksIC8vIHN0b3JlcyBoaWdobGlnaHQgd29ya2VyIHRpbWVvdXQKKyAgICAgIGtleVNlcTogbnVs
bCwgIC8vIFVuZmluaXNoZWQga2V5IHNlcXVlbmNlCisgICAgICBzcGVjaWFsQ2hhcnM6IG51bGwK
ICAgICB9OwogCisgICAgdmFyIGNtID0gdGhpczsKKwogICAgIC8vIE92ZXJyaWRlIG1hZ2ljIHRl
eHRhcmVhIGNvbnRlbnQgcmVzdG9yZSB0aGF0IElFIHNvbWV0aW1lcyBkb2VzCiAgICAgLy8gb24g
b3VyIGhpZGRlbiB0ZXh0YXJlYSBvbiByZWxvYWQKLSAgICBpZiAoaWVfdXB0bzEwKSBzZXRUaW1l
b3V0KGJpbmQocmVzZXRJbnB1dCwgdGhpcywgdHJ1ZSksIDIwKTsKKyAgICBpZiAoaWUgJiYgaWVf
dmVyc2lvbiA8IDExKSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjbS5kaXNwbGF5LmlucHV0LnJl
c2V0KHRydWUpOyB9LCAyMCk7CiAKICAgICByZWdpc3RlckV2ZW50SGFuZGxlcnModGhpcyk7CiAg
ICAgZW5zdXJlR2xvYmFsSGFuZGxlcnMoKTsKIAotICAgIHZhciBjbSA9IHRoaXM7Ci0gICAgcnVu
SW5PcCh0aGlzLCBmdW5jdGlvbigpIHsKLSAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1
ZTsKLSAgICAgIGF0dGFjaERvYyhjbSwgZG9jKTsKKyAgICBzdGFydE9wZXJhdGlvbih0aGlzKTsK
KyAgICB0aGlzLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTsKKyAgICBhdHRhY2hEb2ModGhpcywg
ZG9jKTsKIAotICAgICAgaWYgKChvcHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxlKSB8fCBhY3Rp
dmVFbHQoKSA9PSBkaXNwbGF5LmlucHV0KQotICAgICAgICBzZXRUaW1lb3V0KGJpbmQob25Gb2N1
cywgY20pLCAyMCk7Ci0gICAgICBlbHNlCi0gICAgICAgIG9uQmx1cihjbSk7CisgICAgaWYgKChv
cHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxlKSB8fCBjbS5oYXNGb2N1cygpKQorICAgICAgc2V0
VGltZW91dChiaW5kKG9uRm9jdXMsIHRoaXMpLCAyMCk7CisgICAgZWxzZQorICAgICAgb25CbHVy
KHRoaXMpOwogCi0gICAgICBmb3IgKHZhciBvcHQgaW4gb3B0aW9uSGFuZGxlcnMpIGlmIChvcHRp
b25IYW5kbGVycy5oYXNPd25Qcm9wZXJ0eShvcHQpKQotICAgICAgICBvcHRpb25IYW5kbGVyc1tv
cHRdKGNtLCBvcHRpb25zW29wdF0sIEluaXQpOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBp
bml0SG9va3MubGVuZ3RoOyArK2kpIGluaXRIb29rc1tpXShjbSk7Ci0gICAgfSk7CisgICAgZm9y
ICh2YXIgb3B0IGluIG9wdGlvbkhhbmRsZXJzKSBpZiAob3B0aW9uSGFuZGxlcnMuaGFzT3duUHJv
cGVydHkob3B0KSkKKyAgICAgIG9wdGlvbkhhbmRsZXJzW29wdF0odGhpcywgb3B0aW9uc1tvcHRd
LCBJbml0KTsKKyAgICBtYXliZVVwZGF0ZUxpbmVOdW1iZXJXaWR0aCh0aGlzKTsKKyAgICBpZiAo
b3B0aW9ucy5maW5pc2hJbml0KSBvcHRpb25zLmZpbmlzaEluaXQodGhpcyk7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBpbml0SG9va3MubGVuZ3RoOyArK2kpIGluaXRIb29rc1tpXSh0aGlzKTsK
KyAgICBlbmRPcGVyYXRpb24odGhpcyk7CisgICAgLy8gU3VwcHJlc3Mgb3B0aW1pemVsZWdpYmls
aXR5IGluIFdlYmtpdCwgc2luY2UgaXQgYnJlYWtzIHRleHQKKyAgICAvLyBtZWFzdXJpbmcgb24g
bGluZSB3cmFwcGluZyBib3VuZGFyaWVzLgorICAgIGlmICh3ZWJraXQgJiYgb3B0aW9ucy5saW5l
V3JhcHBpbmcgJiYKKyAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkaXNwbGF5LmxpbmVEaXYpLnRl
eHRSZW5kZXJpbmcgPT0gIm9wdGltaXplbGVnaWJpbGl0eSIpCisgICAgICBkaXNwbGF5LmxpbmVE
aXYuc3R5bGUudGV4dFJlbmRlcmluZyA9ICJhdXRvIjsKICAgfQogCiAgIC8vIERJU1BMQVkgQ09O
U1RSVUNUT1IKQEAgLTEyMCwzMiArMTMxLDE3IEBACiAgIC8vIGFuZCBjb250ZW50IGRyYXdpbmcu
IEl0IGhvbGRzIHJlZmVyZW5jZXMgdG8gRE9NIG5vZGVzIGFuZAogICAvLyBkaXNwbGF5LXJlbGF0
ZWQgc3RhdGUuCiAKLSAgZnVuY3Rpb24gRGlzcGxheShwbGFjZSwgZG9jKSB7CisgIGZ1bmN0aW9u
IERpc3BsYXkocGxhY2UsIGRvYywgaW5wdXQpIHsKICAgICB2YXIgZCA9IHRoaXM7CisgICAgdGhp
cy5pbnB1dCA9IGlucHV0OwogCi0gICAgLy8gVGhlIHNlbWloaWRkZW4gdGV4dGFyZWEgdGhhdCBp
cyBmb2N1c2VkIHdoZW4gdGhlIGVkaXRvciBpcwotICAgIC8vIGZvY3VzZWQsIGFuZCByZWNlaXZl
cyBpbnB1dC4KLSAgICB2YXIgaW5wdXQgPSBkLmlucHV0ID0gZWx0KCJ0ZXh0YXJlYSIsIG51bGws
IG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAxcHg7IGhlaWdo
dDogMWVtOyBvdXRsaW5lOiBub25lIik7Ci0gICAgLy8gVGhlIHRleHRhcmVhIGlzIGtlcHQgcG9z
aXRpb25lZCBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCB0aGUKLSAgICAvLyBmYWN0IHRoYXQg
aXQnbGwgYmUgc2Nyb2xsZWQgaW50byB2aWV3IG9uIGlucHV0IGZyb20gc2Nyb2xsaW5nCi0gICAg
Ly8gb3VyIGZha2UgY3Vyc29yIG91dCBvZiB2aWV3LiBPbiB3ZWJraXQsIHdoZW4gd3JhcD1vZmYs
IHBhc3RlIGlzCi0gICAgLy8gdmVyeSBzbG93LiBTbyBtYWtlIHRoZSBhcmVhIHdpZGUgaW5zdGVh
ZC4KLSAgICBpZiAod2Via2l0KSBpbnB1dC5zdHlsZS53aWR0aCA9ICIxMDAwcHgiOwotICAgIGVs
c2UgaW5wdXQuc2V0QXR0cmlidXRlKCJ3cmFwIiwgIm9mZiIpOwotICAgIC8vIElmIGJvcmRlcjog
MDsgLS0gaU9TIGZhaWxzIHRvIG9wZW4ga2V5Ym9hcmQgKGlzc3VlICMxMjg3KQotICAgIGlmIChp
b3MpIGlucHV0LnN0eWxlLmJvcmRlciA9ICIxcHggc29saWQgYmxhY2siOwotICAgIGlucHV0LnNl
dEF0dHJpYnV0ZSgiYXV0b2NvcnJlY3QiLCAib2ZmIik7IGlucHV0LnNldEF0dHJpYnV0ZSgiYXV0
b2NhcGl0YWxpemUiLCAib2ZmIik7IGlucHV0LnNldEF0dHJpYnV0ZSgic3BlbGxjaGVjayIsICJm
YWxzZSIpOwotCi0gICAgLy8gV3JhcHMgYW5kIGhpZGVzIGlucHV0IHRleHRhcmVhCi0gICAgZC5p
bnB1dERpdiA9IGVsdCgiZGl2IiwgW2lucHV0XSwgbnVsbCwgIm92ZXJmbG93OiBoaWRkZW47IHBv
c2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Iik7Ci0gICAgLy8gVGhl
IGZha2Ugc2Nyb2xsYmFyIGVsZW1lbnRzLgotICAgIGQuc2Nyb2xsYmFySCA9IGVsdCgiZGl2Iiwg
W2VsdCgiZGl2IiwgbnVsbCwgbnVsbCwgImhlaWdodDogMTAwJTsgbWluLWhlaWdodDogMXB4Iild
LCAiQ29kZU1pcnJvci1oc2Nyb2xsYmFyIik7Ci0gICAgZC5zY3JvbGxiYXJWID0gZWx0KCJkaXYi
LCBbZWx0KCJkaXYiLCBudWxsLCBudWxsLCAibWluLXdpZHRoOiAxcHgiKV0sICJDb2RlTWlycm9y
LXZzY3JvbGxiYXIiKTsKICAgICAvLyBDb3ZlcnMgYm90dG9tLXJpZ2h0IHNxdWFyZSB3aGVuIGJv
dGggc2Nyb2xsYmFycyBhcmUgcHJlc2VudC4KICAgICBkLnNjcm9sbGJhckZpbGxlciA9IGVsdCgi
ZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3Itc2Nyb2xsYmFyLWZpbGxlciIpOworICAgIGQuc2Nyb2xs
YmFyRmlsbGVyLnNldEF0dHJpYnV0ZSgiY20tbm90LWNvbnRlbnQiLCAidHJ1ZSIpOwogICAgIC8v
IENvdmVycyBib3R0b20gb2YgZ3V0dGVyIHdoZW4gY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIg
aXMgb24KICAgICAvLyBhbmQgaCBzY3JvbGxiYXIgaXMgcHJlc2VudC4KICAgICBkLmd1dHRlckZp
bGxlciA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciIpOworICAg
IGQuZ3V0dGVyRmlsbGVyLnNldEF0dHJpYnV0ZSgiY20tbm90LWNvbnRlbnQiLCAidHJ1ZSIpOwog
ICAgIC8vIFdpbGwgY29udGFpbiB0aGUgYWN0dWFsIGNvZGUsIHBvc2l0aW9uZWQgdG8gY292ZXIg
dGhlIHZpZXdwb3J0LgogICAgIGQubGluZURpdiA9IGVsdCgiZGl2IiwgbnVsbCwgIkNvZGVNaXJy
b3ItY29kZSIpOwogICAgIC8vIEVsZW1lbnRzIGFyZSBhZGRlZCB0byB0aGVzZSB0byByZXByZXNl
bnQgc2VsZWN0aW9uIGFuZCBjdXJzb3JzLgpAQCAtMTYyLDEwICsxNTgsMTEgQEAKICAgICBkLm1v
dmVyID0gZWx0KCJkaXYiLCBbZWx0KCJkaXYiLCBbZC5saW5lU3BhY2VdLCAiQ29kZU1pcnJvci1s
aW5lcyIpXSwgbnVsbCwgInBvc2l0aW9uOiByZWxhdGl2ZSIpOwogICAgIC8vIFNldCB0byB0aGUg
aGVpZ2h0IG9mIHRoZSBkb2N1bWVudCwgYWxsb3dpbmcgc2Nyb2xsaW5nLgogICAgIGQuc2l6ZXIg
PSBlbHQoImRpdiIsIFtkLm1vdmVyXSwgIkNvZGVNaXJyb3Itc2l6ZXIiKTsKKyAgICBkLnNpemVy
V2lkdGggPSBudWxsOwogICAgIC8vIEJlaGF2aW9yIG9mIGVsdHMgd2l0aCBvdmVyZmxvdzogYXV0
byBhbmQgcGFkZGluZyBpcwogICAgIC8vIGluY29uc2lzdGVudCBhY3Jvc3MgYnJvd3NlcnMuIFRo
aXMgaXMgdXNlZCB0byBlbnN1cmUgdGhlCiAgICAgLy8gc2Nyb2xsYWJsZSBhcmVhIGlzIGJpZyBl
bm91Z2guCi0gICAgZC5oZWlnaHRGb3JjZXIgPSBlbHQoImRpdiIsIG51bGwsIG51bGwsICJwb3Np
dGlvbjogYWJzb2x1dGU7IGhlaWdodDogIiArIHNjcm9sbGVyQ3V0T2ZmICsgInB4OyB3aWR0aDog
MXB4OyIpOworICAgIGQuaGVpZ2h0Rm9yY2VyID0gZWx0KCJkaXYiLCBudWxsLCBudWxsLCAicG9z
aXRpb246IGFic29sdXRlOyBoZWlnaHQ6ICIgKyBzY3JvbGxlckdhcCArICJweDsgd2lkdGg6IDFw
eDsiKTsKICAgICAvLyBXaWxsIGNvbnRhaW4gdGhlIGd1dHRlcnMsIGlmIGFueS4KICAgICBkLmd1
dHRlcnMgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWd1dHRlcnMiKTsKICAgICBkLmxp
bmVHdXR0ZXIgPSBudWxsOwpAQCAtMTczLDU2ICsxNzAsNDQgQEAKICAgICBkLnNjcm9sbGVyID0g
ZWx0KCJkaXYiLCBbZC5zaXplciwgZC5oZWlnaHRGb3JjZXIsIGQuZ3V0dGVyc10sICJDb2RlTWly
cm9yLXNjcm9sbCIpOwogICAgIGQuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsICIt
MSIpOwogICAgIC8vIFRoZSBlbGVtZW50IGluIHdoaWNoIHRoZSBlZGl0b3IgbGl2ZXMuCi0gICAg
ZC53cmFwcGVyID0gZWx0KCJkaXYiLCBbZC5pbnB1dERpdiwgZC5zY3JvbGxiYXJILCBkLnNjcm9s
bGJhclYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zY3JvbGxiYXJGaWxsZXIsIGQu
Z3V0dGVyRmlsbGVyLCBkLnNjcm9sbGVyXSwgIkNvZGVNaXJyb3IiKTsKKyAgICBkLndyYXBwZXIg
PSBlbHQoImRpdiIsIFtkLnNjcm9sbGJhckZpbGxlciwgZC5ndXR0ZXJGaWxsZXIsIGQuc2Nyb2xs
ZXJdLCAiQ29kZU1pcnJvciIpOwogCiAgICAgLy8gV29yayBhcm91bmQgSUU3IHotaW5kZXggYnVn
IChub3QgcGVyZmVjdCwgaGVuY2UgSUU3IG5vdCByZWFsbHkgYmVpbmcgc3VwcG9ydGVkKQotICAg
IGlmIChpZV91cHRvNykgeyBkLmd1dHRlcnMuc3R5bGUuekluZGV4ID0gLTE7IGQuc2Nyb2xsZXIu
c3R5bGUucGFkZGluZ1JpZ2h0ID0gMDsgfQotICAgIC8vIE5lZWRlZCB0byBoaWRlIGJpZyBibHVl
IGJsaW5raW5nIGN1cnNvciBvbiBNb2JpbGUgU2FmYXJpCi0gICAgaWYgKGlvcykgaW5wdXQuc3R5
bGUud2lkdGggPSAiMHB4IjsKLSAgICBpZiAoIXdlYmtpdCkgZC5zY3JvbGxlci5kcmFnZ2FibGUg
PSB0cnVlOwotICAgIC8vIE5lZWRlZCB0byBoYW5kbGUgVGFiIGtleSBpbiBLSFRNTAotICAgIGlm
IChraHRtbCkgeyBkLmlucHV0RGl2LnN0eWxlLmhlaWdodCA9ICIxcHgiOyBkLmlucHV0RGl2LnN0
eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsgfQotICAgIC8vIE5lZWQgdG8gc2V0IGEgbWluaW11
bSB3aWR0aCB0byBzZWUgdGhlIHNjcm9sbGJhciBvbiBJRTcgKGJ1dCBtdXN0IG5vdCBzZXQgaXQg
b24gSUU4KS4KLSAgICBpZiAoaWVfdXB0bzcpIGQuc2Nyb2xsYmFySC5zdHlsZS5taW5IZWlnaHQg
PSBkLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGggPSAiMThweCI7CisgICAgaWYgKGllICYmIGll
X3ZlcnNpb24gPCA4KSB7IGQuZ3V0dGVycy5zdHlsZS56SW5kZXggPSAtMTsgZC5zY3JvbGxlci5z
dHlsZS5wYWRkaW5nUmlnaHQgPSAwOyB9CisgICAgaWYgKCF3ZWJraXQgJiYgIShnZWNrbyAmJiBt
b2JpbGUpKSBkLnNjcm9sbGVyLmRyYWdnYWJsZSA9IHRydWU7CiAKLSAgICBpZiAocGxhY2UuYXBw
ZW5kQ2hpbGQpIHBsYWNlLmFwcGVuZENoaWxkKGQud3JhcHBlcik7Ci0gICAgZWxzZSBwbGFjZShk
LndyYXBwZXIpOworICAgIGlmIChwbGFjZSkgeworICAgICAgaWYgKHBsYWNlLmFwcGVuZENoaWxk
KSBwbGFjZS5hcHBlbmRDaGlsZChkLndyYXBwZXIpOworICAgICAgZWxzZSBwbGFjZShkLndyYXBw
ZXIpOworICAgIH0KIAogICAgIC8vIEN1cnJlbnQgcmVuZGVyZWQgcmFuZ2UgKG1heSBiZSBiaWdn
ZXIgdGhhbiB0aGUgdmlldyB3aW5kb3cpLgogICAgIGQudmlld0Zyb20gPSBkLnZpZXdUbyA9IGRv
Yy5maXJzdDsKKyAgICBkLnJlcG9ydGVkVmlld0Zyb20gPSBkLnJlcG9ydGVkVmlld1RvID0gZG9j
LmZpcnN0OwogICAgIC8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSByZW5kZXJlZCBsaW5lcy4KICAg
ICBkLnZpZXcgPSBbXTsKKyAgICBkLnJlbmRlcmVkVmlldyA9IG51bGw7CiAgICAgLy8gSG9sZHMg
aW5mbyBhYm91dCBhIHNpbmdsZSByZW5kZXJlZCBsaW5lIHdoZW4gaXQgd2FzIHJlbmRlcmVkCiAg
ICAgLy8gZm9yIG1lYXN1cmVtZW50LCB3aGlsZSBub3QgaW4gdmlldy4KICAgICBkLmV4dGVybmFs
TWVhc3VyZWQgPSBudWxsOwogICAgIC8vIEVtcHR5IHNwYWNlIChpbiBwaXhlbHMpIGFib3ZlIHRo
ZSB2aWV3CiAgICAgZC52aWV3T2Zmc2V0ID0gMDsKLSAgICBkLmxhc3RTaXplQyA9IDA7CisgICAg
ZC5sYXN0V3JhcEhlaWdodCA9IGQubGFzdFdyYXBXaWR0aCA9IDA7CiAgICAgZC51cGRhdGVMaW5l
TnVtYmVycyA9IG51bGw7CiAKKyAgICBkLm5hdGl2ZUJhcldpZHRoID0gZC5iYXJIZWlnaHQgPSBk
LmJhcldpZHRoID0gMDsKKyAgICBkLnNjcm9sbGJhcnNDbGlwcGVkID0gZmFsc2U7CisKICAgICAv
LyBVc2VkIHRvIG9ubHkgcmVzaXplIHRoZSBsaW5lIG51bWJlciBndXR0ZXIgd2hlbiBuZWNlc3Nh
cnkgKHdoZW4KICAgICAvLyB0aGUgYW1vdW50IG9mIGxpbmVzIGNyb3NzZXMgYSBib3VuZGFyeSB0
aGF0IG1ha2VzIGl0cyB3aWR0aCBjaGFuZ2UpCiAgICAgZC5saW5lTnVtV2lkdGggPSBkLmxpbmVO
dW1Jbm5lcldpZHRoID0gZC5saW5lTnVtQ2hhcnMgPSBudWxsOwotICAgIC8vIFNlZSByZWFkSW5w
dXQgYW5kIHJlc2V0SW5wdXQKLSAgICBkLnByZXZJbnB1dCA9ICIiOwogICAgIC8vIFNldCB0byB0
cnVlIHdoZW4gYSBub24taG9yaXpvbnRhbC1zY3JvbGxpbmcgbGluZSB3aWRnZXQgaXMKICAgICAv
LyBhZGRlZC4gQXMgYW4gb3B0aW1pemF0aW9uLCBsaW5lIHdpZGdldCBhbGlnbmluZyBpcyBza2lw
cGVkIHdoZW4KICAgICAvLyB0aGlzIGlzIGZhbHNlLgogICAgIGQuYWxpZ25XaWRnZXRzID0gZmFs
c2U7Ci0gICAgLy8gRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlIGV4cGVjdCBpbnB1dCB0
byBhcHBlYXIgcmVhbCBzb29uCi0gICAgLy8gbm93IChhZnRlciBzb21lIGV2ZW50IGxpa2UgJ2tl
eXByZXNzJyBvciAnaW5wdXQnKSBhbmQgYXJlCi0gICAgLy8gcG9sbGluZyBpbnRlbnNpdmVseS4K
LSAgICBkLnBvbGxpbmdGYXN0ID0gZmFsc2U7Ci0gICAgLy8gU2VsZi1yZXNldHRpbmcgdGltZW91
dCBmb3IgdGhlIHBvbGxlcgotICAgIGQucG9sbCA9IG5ldyBEZWxheWVkKCk7CiAKICAgICBkLmNh
Y2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IGQuY2FjaGVkUGFkZGluZ0ggPSBu
dWxsOwogCi0gICAgLy8gVHJhY2tzIHdoZW4gcmVzZXRJbnB1dCBoYXMgcHVudGVkIHRvIGp1c3Qg
cHV0dGluZyBhIHNob3J0Ci0gICAgLy8gc3RyaW5nIGludG8gdGhlIHRleHRhcmVhIGluc3RlYWQg
b2YgdGhlIGZ1bGwgc2VsZWN0aW9uLgotICAgIGQuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IGZhbHNl
OwotCiAgICAgLy8gVHJhY2tzIHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIHNvIHRoYXQgdGhlIGhv
cml6b250YWwgc2Nyb2xsYmFyCiAgICAgLy8gY2FuIGJlIGtlcHQgc3RhdGljIHdoZW4gc2Nyb2xs
aW5nLgogICAgIGQubWF4TGluZSA9IG51bGw7CkBAIC0yMzgsNiArMjIzLDEwIEBACiAgICAgLy8g
VXNlZCB0byB0cmFjayB3aGV0aGVyIGFueXRoaW5nIGhhcHBlbmVkIHNpbmNlIHRoZSBjb250ZXh0
IG1lbnUKICAgICAvLyB3YXMgb3BlbmVkLgogICAgIGQuc2VsRm9yQ29udGV4dE1lbnUgPSBudWxs
OworCisgICAgZC5hY3RpdmVUb3VjaCA9IG51bGw7CisKKyAgICBpbnB1dC5pbml0KGQpOwogICB9
CiAKICAgLy8gU1RBVEUgVVBEQVRFUwpAQCAtMjY0LDYgKzI1Myw3IEBACiAgICAgaWYgKGNtLm9w
dGlvbnMubGluZVdyYXBwaW5nKSB7CiAgICAgICBhZGRDbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIs
ICJDb2RlTWlycm9yLXdyYXAiKTsKICAgICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lk
dGggPSAiIjsKKyAgICAgIGNtLmRpc3BsYXkuc2l6ZXJXaWR0aCA9IG51bGw7CiAgICAgfSBlbHNl
IHsKICAgICAgIHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCAiQ29kZU1pcnJvci13cmFwIik7
CiAgICAgICBmaW5kTWF4TGluZShjbSk7CkBAIC0zMDMsMTIgKzI5Myw2IEBACiAgICAgfSk7CiAg
IH0KIAotICBmdW5jdGlvbiBrZXlNYXBDaGFuZ2VkKGNtKSB7Ci0gICAgdmFyIG1hcCA9IGtleU1h
cFtjbS5vcHRpb25zLmtleU1hcF0sIHN0eWxlID0gbWFwLnN0eWxlOwotICAgIGNtLmRpc3BsYXku
d3JhcHBlci5jbGFzc05hbWUgPSBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2Uo
L1xzKmNtLWtleW1hcC1cUysvZywgIiIpICsKLSAgICAgIChzdHlsZSA/ICIgY20ta2V5bWFwLSIg
KyBzdHlsZSA6ICIiKTsKLSAgfQotCiAgIGZ1bmN0aW9uIHRoZW1lQ2hhbmdlZChjbSkgewogICAg
IGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgPSBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NO
YW1lLnJlcGxhY2UoL1xzKmNtLXMtXFMrL2csICIiKSArCiAgICAgICBjbS5vcHRpb25zLnRoZW1l
LnJlcGxhY2UoLyhefFxzKVxzKi9nLCAiIGNtLXMtIik7CkBAIC0zNDEsNyArMzI1LDYgQEAKICAg
ZnVuY3Rpb24gdXBkYXRlR3V0dGVyU3BhY2UoY20pIHsKICAgICB2YXIgd2lkdGggPSBjbS5kaXNw
bGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7CiAgICAgY20uZGlzcGxheS5zaXplci5zdHlsZS5tYXJn
aW5MZWZ0ID0gd2lkdGggKyAicHgiOwotICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFySC5zdHlsZS5s
ZWZ0ID0gY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IHdpZHRoICsgInB4IiA6IDA7CiAgIH0KIAog
ICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoIG9mIGEgbGluZSwgdGFraW5nIGludG8g
YWNjb3VudApAQCAtMzk3LDg3ICszODAsMTg2IEBACiAgIC8vIFByZXBhcmUgRE9NIHJlYWRzIG5l
ZWRlZCB0byB1cGRhdGUgdGhlIHNjcm9sbGJhcnMuIERvbmUgaW4gb25lCiAgIC8vIHNob3QgdG8g
bWluaW1pemUgdXBkYXRlL21lYXN1cmUgcm91bmR0cmlwcy4KICAgZnVuY3Rpb24gbWVhc3VyZUZv
clNjcm9sbGJhcnMoY20pIHsKLSAgICB2YXIgc2Nyb2xsID0gY20uZGlzcGxheS5zY3JvbGxlcjsK
KyAgICB2YXIgZCA9IGNtLmRpc3BsYXksIGd1dHRlclcgPSBkLmd1dHRlcnMub2Zmc2V0V2lkdGg7
CisgICAgdmFyIGRvY0ggPSBNYXRoLnJvdW5kKGNtLmRvYy5oZWlnaHQgKyBwYWRkaW5nVmVydChj
bS5kaXNwbGF5KSk7CiAgICAgcmV0dXJuIHsKLSAgICAgIGNsaWVudEhlaWdodDogc2Nyb2xsLmNs
aWVudEhlaWdodCwKLSAgICAgIGJhckhlaWdodDogY20uZGlzcGxheS5zY3JvbGxiYXJWLmNsaWVu
dEhlaWdodCwKLSAgICAgIHNjcm9sbFdpZHRoOiBzY3JvbGwuc2Nyb2xsV2lkdGgsIGNsaWVudFdp
ZHRoOiBzY3JvbGwuY2xpZW50V2lkdGgsCi0gICAgICBiYXJXaWR0aDogY20uZGlzcGxheS5zY3Jv
bGxiYXJILmNsaWVudFdpZHRoLAotICAgICAgZG9jSGVpZ2h0OiBNYXRoLnJvdW5kKGNtLmRvYy5o
ZWlnaHQgKyBwYWRkaW5nVmVydChjbS5kaXNwbGF5KSkKKyAgICAgIGNsaWVudEhlaWdodDogZC5z
Y3JvbGxlci5jbGllbnRIZWlnaHQsCisgICAgICB2aWV3SGVpZ2h0OiBkLndyYXBwZXIuY2xpZW50
SGVpZ2h0LAorICAgICAgc2Nyb2xsV2lkdGg6IGQuc2Nyb2xsZXIuc2Nyb2xsV2lkdGgsIGNsaWVu
dFdpZHRoOiBkLnNjcm9sbGVyLmNsaWVudFdpZHRoLAorICAgICAgdmlld1dpZHRoOiBkLndyYXBw
ZXIuY2xpZW50V2lkdGgsCisgICAgICBiYXJMZWZ0OiBjbS5vcHRpb25zLmZpeGVkR3V0dGVyID8g
Z3V0dGVyVyA6IDAsCisgICAgICBkb2NIZWlnaHQ6IGRvY0gsCisgICAgICBzY3JvbGxIZWlnaHQ6
IGRvY0ggKyBzY3JvbGxHYXAoY20pICsgZC5iYXJIZWlnaHQsCisgICAgICBuYXRpdmVCYXJXaWR0
aDogZC5uYXRpdmVCYXJXaWR0aCwKKyAgICAgIGd1dHRlcldpZHRoOiBndXR0ZXJXCiAgICAgfTsK
ICAgfQogCi0gIC8vIFJlLXN5bmNocm9uaXplIHRoZSBmYWtlIHNjcm9sbGJhcnMgd2l0aCB0aGUg
YWN0dWFsIHNpemUgb2YgdGhlCi0gIC8vIGNvbnRlbnQuCisgIGZ1bmN0aW9uIE5hdGl2ZVNjcm9s
bGJhcnMocGxhY2UsIHNjcm9sbCwgY20pIHsKKyAgICB0aGlzLmNtID0gY207CisgICAgdmFyIHZl
cnQgPSB0aGlzLnZlcnQgPSBlbHQoImRpdiIsIFtlbHQoImRpdiIsIG51bGwsIG51bGwsICJtaW4t
d2lkdGg6IDFweCIpXSwgIkNvZGVNaXJyb3ItdnNjcm9sbGJhciIpOworICAgIHZhciBob3JpeiA9
IHRoaXMuaG9yaXogPSBlbHQoImRpdiIsIFtlbHQoImRpdiIsIG51bGwsIG51bGwsICJoZWlnaHQ6
IDEwMCU7IG1pbi1oZWlnaHQ6IDFweCIpXSwgIkNvZGVNaXJyb3ItaHNjcm9sbGJhciIpOworICAg
IHBsYWNlKHZlcnQpOyBwbGFjZShob3Jpeik7CisKKyAgICBvbih2ZXJ0LCAic2Nyb2xsIiwgZnVu
Y3Rpb24oKSB7CisgICAgICBpZiAodmVydC5jbGllbnRIZWlnaHQpIHNjcm9sbCh2ZXJ0LnNjcm9s
bFRvcCwgInZlcnRpY2FsIik7CisgICAgfSk7CisgICAgb24oaG9yaXosICJzY3JvbGwiLCBmdW5j
dGlvbigpIHsKKyAgICAgIGlmIChob3Jpei5jbGllbnRXaWR0aCkgc2Nyb2xsKGhvcml6LnNjcm9s
bExlZnQsICJob3Jpem9udGFsIik7CisgICAgfSk7CisKKyAgICB0aGlzLmNoZWNrZWRPdmVybGF5
ID0gZmFsc2U7CisgICAgLy8gTmVlZCB0byBzZXQgYSBtaW5pbXVtIHdpZHRoIHRvIHNlZSB0aGUg
c2Nyb2xsYmFyIG9uIElFNyAoYnV0IG11c3Qgbm90IHNldCBpdCBvbiBJRTgpLgorICAgIGlmIChp
ZSAmJiBpZV92ZXJzaW9uIDwgOCkgdGhpcy5ob3Jpei5zdHlsZS5taW5IZWlnaHQgPSB0aGlzLnZl
cnQuc3R5bGUubWluV2lkdGggPSAiMThweCI7CisgIH0KKworICBOYXRpdmVTY3JvbGxiYXJzLnBy
b3RvdHlwZSA9IGNvcHlPYmooeworICAgIHVwZGF0ZTogZnVuY3Rpb24obWVhc3VyZSkgeworICAg
ICAgdmFyIG5lZWRzSCA9IG1lYXN1cmUuc2Nyb2xsV2lkdGggPiBtZWFzdXJlLmNsaWVudFdpZHRo
ICsgMTsKKyAgICAgIHZhciBuZWVkc1YgPSBtZWFzdXJlLnNjcm9sbEhlaWdodCA+IG1lYXN1cmUu
Y2xpZW50SGVpZ2h0ICsgMTsKKyAgICAgIHZhciBzV2lkdGggPSBtZWFzdXJlLm5hdGl2ZUJhcldp
ZHRoOworCisgICAgICBpZiAobmVlZHNWKSB7CisgICAgICAgIHRoaXMudmVydC5zdHlsZS5kaXNw
bGF5ID0gImJsb2NrIjsKKyAgICAgICAgdGhpcy52ZXJ0LnN0eWxlLmJvdHRvbSA9IG5lZWRzSCA/
IHNXaWR0aCArICJweCIgOiAiMCI7CisgICAgICAgIHZhciB0b3RhbEhlaWdodCA9IG1lYXN1cmUu
dmlld0hlaWdodCAtIChuZWVkc0ggPyBzV2lkdGggOiAwKTsKKyAgICAgICAgLy8gQSBidWcgaW4g
SUU4IGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIG5lZ2F0aXZlLCBzbyBndWFyZCBpdC4KKyAg
ICAgICAgdGhpcy52ZXJ0LmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0ID0KKyAgICAgICAgICBNYXRo
Lm1heCgwLCBtZWFzdXJlLnNjcm9sbEhlaWdodCAtIG1lYXN1cmUuY2xpZW50SGVpZ2h0ICsgdG90
YWxIZWlnaHQpICsgInB4IjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMudmVydC5zdHls
ZS5kaXNwbGF5ID0gIiI7CisgICAgICAgIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdo
dCA9ICIwIjsKKyAgICAgIH0KKworICAgICAgaWYgKG5lZWRzSCkgeworICAgICAgICB0aGlzLmhv
cml6LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOworICAgICAgICB0aGlzLmhvcml6LnN0eWxlLnJp
Z2h0ID0gbmVlZHNWID8gc1dpZHRoICsgInB4IiA6ICIwIjsKKyAgICAgICAgdGhpcy5ob3Jpei5z
dHlsZS5sZWZ0ID0gbWVhc3VyZS5iYXJMZWZ0ICsgInB4IjsKKyAgICAgICAgdmFyIHRvdGFsV2lk
dGggPSBtZWFzdXJlLnZpZXdXaWR0aCAtIG1lYXN1cmUuYmFyTGVmdCAtIChuZWVkc1YgPyBzV2lk
dGggOiAwKTsKKyAgICAgICAgdGhpcy5ob3Jpei5maXJzdENoaWxkLnN0eWxlLndpZHRoID0KKyAg
ICAgICAgICAobWVhc3VyZS5zY3JvbGxXaWR0aCAtIG1lYXN1cmUuY2xpZW50V2lkdGggKyB0b3Rh
bFdpZHRoKSArICJweCI7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLmhvcml6LnN0eWxl
LmRpc3BsYXkgPSAiIjsKKyAgICAgICAgdGhpcy5ob3Jpei5maXJzdENoaWxkLnN0eWxlLndpZHRo
ID0gIjAiOworICAgICAgfQorCisgICAgICBpZiAoIXRoaXMuY2hlY2tlZE92ZXJsYXkgJiYgbWVh
c3VyZS5jbGllbnRIZWlnaHQgPiAwKSB7CisgICAgICAgIGlmIChzV2lkdGggPT0gMCkgdGhpcy5v
dmVybGF5SGFjaygpOworICAgICAgICB0aGlzLmNoZWNrZWRPdmVybGF5ID0gdHJ1ZTsKKyAgICAg
IH0KKworICAgICAgcmV0dXJuIHtyaWdodDogbmVlZHNWID8gc1dpZHRoIDogMCwgYm90dG9tOiBu
ZWVkc0ggPyBzV2lkdGggOiAwfTsKKyAgICB9LAorICAgIHNldFNjcm9sbExlZnQ6IGZ1bmN0aW9u
KHBvcykgeworICAgICAgaWYgKHRoaXMuaG9yaXouc2Nyb2xsTGVmdCAhPSBwb3MpIHRoaXMuaG9y
aXouc2Nyb2xsTGVmdCA9IHBvczsKKyAgICB9LAorICAgIHNldFNjcm9sbFRvcDogZnVuY3Rpb24o
cG9zKSB7CisgICAgICBpZiAodGhpcy52ZXJ0LnNjcm9sbFRvcCAhPSBwb3MpIHRoaXMudmVydC5z
Y3JvbGxUb3AgPSBwb3M7CisgICAgfSwKKyAgICBvdmVybGF5SGFjazogZnVuY3Rpb24oKSB7Cisg
ICAgICB2YXIgdyA9IG1hYyAmJiAhbWFjX2dlTW91bnRhaW5MaW9uID8gIjEycHgiIDogIjE4cHgi
OworICAgICAgdGhpcy5ob3Jpei5zdHlsZS5taW5IZWlnaHQgPSB0aGlzLnZlcnQuc3R5bGUubWlu
V2lkdGggPSB3OworICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgdmFyIGJhck1vdXNlRG93
biA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKGVfdGFyZ2V0KGUpICE9IHNlbGYudmVydCAm
JiBlX3RhcmdldChlKSAhPSBzZWxmLmhvcml6KQorICAgICAgICAgIG9wZXJhdGlvbihzZWxmLmNt
LCBvbk1vdXNlRG93bikoZSk7CisgICAgICB9OworICAgICAgb24odGhpcy52ZXJ0LCAibW91c2Vk
b3duIiwgYmFyTW91c2VEb3duKTsKKyAgICAgIG9uKHRoaXMuaG9yaXosICJtb3VzZWRvd24iLCBi
YXJNb3VzZURvd24pOworICAgIH0sCisgICAgY2xlYXI6IGZ1bmN0aW9uKCkgeworICAgICAgdmFy
IHBhcmVudCA9IHRoaXMuaG9yaXoucGFyZW50Tm9kZTsKKyAgICAgIHBhcmVudC5yZW1vdmVDaGls
ZCh0aGlzLmhvcml6KTsKKyAgICAgIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLnZlcnQpOworICAg
IH0KKyAgfSwgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUpOworCisgIGZ1bmN0aW9uIE51bGxT
Y3JvbGxiYXJzKCkge30KKworICBOdWxsU2Nyb2xsYmFycy5wcm90b3R5cGUgPSBjb3B5T2JqKHsK
KyAgICB1cGRhdGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4ge2JvdHRvbTogMCwgcmlnaHQ6IDB9OyB9
LAorICAgIHNldFNjcm9sbExlZnQ6IGZ1bmN0aW9uKCkge30sCisgICAgc2V0U2Nyb2xsVG9wOiBm
dW5jdGlvbigpIHt9LAorICAgIGNsZWFyOiBmdW5jdGlvbigpIHt9CisgIH0sIE51bGxTY3JvbGxi
YXJzLnByb3RvdHlwZSk7CisKKyAgQ29kZU1pcnJvci5zY3JvbGxiYXJNb2RlbCA9IHsibmF0aXZl
IjogTmF0aXZlU2Nyb2xsYmFycywgIm51bGwiOiBOdWxsU2Nyb2xsYmFyc307CisKKyAgZnVuY3Rp
b24gaW5pdFNjcm9sbGJhcnMoY20pIHsKKyAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJzKSB7
CisgICAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuY2xlYXIoKTsKKyAgICAgIGlmIChjbS5kaXNw
bGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpCisgICAgICAgIHJtQ2xhc3MoY20uZGlzcGxheS53cmFw
cGVyLCBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpOworICAgIH0KKworICAgIGNtLmRp
c3BsYXkuc2Nyb2xsYmFycyA9IG5ldyBDb2RlTWlycm9yLnNjcm9sbGJhck1vZGVsW2NtLm9wdGlv
bnMuc2Nyb2xsYmFyU3R5bGVdKGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgIGNtLmRpc3BsYXkud3Jh
cHBlci5pbnNlcnRCZWZvcmUobm9kZSwgY20uZGlzcGxheS5zY3JvbGxiYXJGaWxsZXIpOworICAg
ICAgLy8gUHJldmVudCBjbGlja3MgaW4gdGhlIHNjcm9sbGJhcnMgZnJvbSBraWxsaW5nIGZvY3Vz
CisgICAgICBvbihub2RlLCAibW91c2Vkb3duIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmIChj
bS5zdGF0ZS5mb2N1c2VkKSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjbS5kaXNwbGF5LmlucHV0
LmZvY3VzKCk7IH0sIDApOworICAgICAgfSk7CisgICAgICBub2RlLnNldEF0dHJpYnV0ZSgiY20t
bm90LWNvbnRlbnQiLCAidHJ1ZSIpOworICAgIH0sIGZ1bmN0aW9uKHBvcywgYXhpcykgeworICAg
ICAgaWYgKGF4aXMgPT0gImhvcml6b250YWwiKSBzZXRTY3JvbGxMZWZ0KGNtLCBwb3MpOworICAg
ICAgZWxzZSBzZXRTY3JvbGxUb3AoY20sIHBvcyk7CisgICAgfSwgY20pOworICAgIGlmIChjbS5k
aXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpCisgICAgICBhZGRDbGFzcyhjbS5kaXNwbGF5Lndy
YXBwZXIsIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyk7CisgIH0KKwogICBmdW5jdGlv
biB1cGRhdGVTY3JvbGxiYXJzKGNtLCBtZWFzdXJlKSB7CiAgICAgaWYgKCFtZWFzdXJlKSBtZWFz
dXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pOwotICAgIHZhciBkID0gY20uZGlzcGxheTsK
LSAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gbWVhc3VyZS5kb2NIZWlnaHQgKyBzY3JvbGxlckN1dE9m
ZjsKLSAgICB2YXIgbmVlZHNIID0gbWVhc3VyZS5zY3JvbGxXaWR0aCA+IG1lYXN1cmUuY2xpZW50
V2lkdGg7Ci0gICAgdmFyIG5lZWRzViA9IHNjcm9sbEhlaWdodCA+IG1lYXN1cmUuY2xpZW50SGVp
Z2h0OwotICAgIGlmIChuZWVkc1YpIHsKLSAgICAgIGQuc2Nyb2xsYmFyVi5zdHlsZS5kaXNwbGF5
ID0gImJsb2NrIjsKLSAgICAgIGQuc2Nyb2xsYmFyVi5zdHlsZS5ib3R0b20gPSBuZWVkc0ggPyBz
Y3JvbGxiYXJXaWR0aChkLm1lYXN1cmUpICsgInB4IiA6ICIwIjsKLSAgICAgIC8vIEEgYnVnIGlu
IElFOCBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBuZWdhdGl2ZSwgc28gZ3VhcmQgaXQuCi0g
ICAgICBkLnNjcm9sbGJhclYuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQgPQotICAgICAgICBNYXRo
Lm1heCgwLCBzY3JvbGxIZWlnaHQgLSBtZWFzdXJlLmNsaWVudEhlaWdodCArIChtZWFzdXJlLmJh
ckhlaWdodCB8fCBkLnNjcm9sbGJhclYuY2xpZW50SGVpZ2h0KSkgKyAicHgiOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBkLnNjcm9sbGJhclYuc3R5bGUuZGlzcGxheSA9ICIiOwotICAgICAgZC5zY3Jv
bGxiYXJWLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0ID0gIjAiOwotICAgIH0KLSAgICBpZiAobmVl
ZHNIKSB7Ci0gICAgICBkLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheSA9ICJibG9jayI7Ci0gICAg
ICBkLnNjcm9sbGJhckguc3R5bGUucmlnaHQgPSBuZWVkc1YgPyBzY3JvbGxiYXJXaWR0aChkLm1l
YXN1cmUpICsgInB4IiA6ICIwIjsKLSAgICAgIGQuc2Nyb2xsYmFySC5maXJzdENoaWxkLnN0eWxl
LndpZHRoID0KLSAgICAgICAgKG1lYXN1cmUuc2Nyb2xsV2lkdGggLSBtZWFzdXJlLmNsaWVudFdp
ZHRoICsgKG1lYXN1cmUuYmFyV2lkdGggfHwgZC5zY3JvbGxiYXJILmNsaWVudFdpZHRoKSkgKyAi
cHgiOwotICAgIH0gZWxzZSB7Ci0gICAgICBkLnNjcm9sbGJhckguc3R5bGUuZGlzcGxheSA9ICIi
OwotICAgICAgZC5zY3JvbGxiYXJILmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPSAiMCI7CisgICAg
dmFyIHN0YXJ0V2lkdGggPSBjbS5kaXNwbGF5LmJhcldpZHRoLCBzdGFydEhlaWdodCA9IGNtLmRp
c3BsYXkuYmFySGVpZ2h0OworICAgIHVwZGF0ZVNjcm9sbGJhcnNJbm5lcihjbSwgbWVhc3VyZSk7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0ICYmIHN0YXJ0V2lkdGggIT0gY20uZGlzcGxheS5i
YXJXaWR0aCB8fCBzdGFydEhlaWdodCAhPSBjbS5kaXNwbGF5LmJhckhlaWdodDsgaSsrKSB7Cisg
ICAgICBpZiAoc3RhcnRXaWR0aCAhPSBjbS5kaXNwbGF5LmJhcldpZHRoICYmIGNtLm9wdGlvbnMu
bGluZVdyYXBwaW5nKQorICAgICAgICB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7CisgICAg
ICB1cGRhdGVTY3JvbGxiYXJzSW5uZXIoY20sIG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKSk7Cisg
ICAgICBzdGFydFdpZHRoID0gY20uZGlzcGxheS5iYXJXaWR0aDsgc3RhcnRIZWlnaHQgPSBjbS5k
aXNwbGF5LmJhckhlaWdodDsKICAgICB9Ci0gICAgaWYgKG5lZWRzSCAmJiBuZWVkc1YpIHsKKyAg
fQorCisgIC8vIFJlLXN5bmNocm9uaXplIHRoZSBmYWtlIHNjcm9sbGJhcnMgd2l0aCB0aGUgYWN0
dWFsIHNpemUgb2YgdGhlCisgIC8vIGNvbnRlbnQuCisgIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbGJh
cnNJbm5lcihjbSwgbWVhc3VyZSkgeworICAgIHZhciBkID0gY20uZGlzcGxheTsKKyAgICB2YXIg
c2l6ZXMgPSBkLnNjcm9sbGJhcnMudXBkYXRlKG1lYXN1cmUpOworCisgICAgZC5zaXplci5zdHls
ZS5wYWRkaW5nUmlnaHQgPSAoZC5iYXJXaWR0aCA9IHNpemVzLnJpZ2h0KSArICJweCI7CisgICAg
ZC5zaXplci5zdHlsZS5wYWRkaW5nQm90dG9tID0gKGQuYmFySGVpZ2h0ID0gc2l6ZXMuYm90dG9t
KSArICJweCI7CisKKyAgICBpZiAoc2l6ZXMucmlnaHQgJiYgc2l6ZXMuYm90dG9tKSB7CiAgICAg
ICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICAgIGQuc2Ny
b2xsYmFyRmlsbGVyLnN0eWxlLmhlaWdodCA9IGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLndpZHRo
ID0gc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJlKSArICJweCI7CisgICAgICBkLnNjcm9sbGJhckZp
bGxlci5zdHlsZS5oZWlnaHQgPSBzaXplcy5ib3R0b20gKyAicHgiOworICAgICAgZC5zY3JvbGxi
YXJGaWxsZXIuc3R5bGUud2lkdGggPSBzaXplcy5yaWdodCArICJweCI7CiAgICAgfSBlbHNlIGQu
c2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICBpZiAobmVlZHNIICYmIGNt
Lm9wdGlvbnMuY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIgJiYgY20ub3B0aW9ucy5maXhlZEd1
dHRlcikgeworICAgIGlmIChzaXplcy5ib3R0b20gJiYgY20ub3B0aW9ucy5jb3Zlckd1dHRlck5l
eHRUb1Njcm9sbGJhciAmJiBjbS5vcHRpb25zLmZpeGVkR3V0dGVyKSB7CiAgICAgICBkLmd1dHRl
ckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICAgIGQuZ3V0dGVyRmlsbGVyLnN0
eWxlLmhlaWdodCA9IHNjcm9sbGJhcldpZHRoKGQubWVhc3VyZSkgKyAicHgiOwotICAgICAgZC5n
dXR0ZXJGaWxsZXIuc3R5bGUud2lkdGggPSBkLmd1dHRlcnMub2Zmc2V0V2lkdGggKyAicHgiOwor
ICAgICAgZC5ndXR0ZXJGaWxsZXIuc3R5bGUuaGVpZ2h0ID0gc2l6ZXMuYm90dG9tICsgInB4IjsK
KyAgICAgIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLndpZHRoID0gbWVhc3VyZS5ndXR0ZXJXaWR0aCAr
ICJweCI7CiAgICAgfSBlbHNlIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKLQot
ICAgIGlmICghY20uc3RhdGUuY2hlY2tlZE92ZXJsYXlTY3JvbGxiYXIgJiYgbWVhc3VyZS5jbGll
bnRIZWlnaHQgPiAwKSB7Ci0gICAgICBpZiAoc2Nyb2xsYmFyV2lkdGgoZC5tZWFzdXJlKSA9PT0g
MCkgewotICAgICAgICB2YXIgdyA9IG1hYyAmJiAhbWFjX2dlTW91bnRhaW5MaW9uID8gIjEycHgi
IDogIjE4cHgiOwotICAgICAgICBkLnNjcm9sbGJhclYuc3R5bGUubWluV2lkdGggPSBkLnNjcm9s
bGJhckguc3R5bGUubWluSGVpZ2h0ID0gdzsKLSAgICAgICAgdmFyIGJhck1vdXNlRG93biA9IGZ1
bmN0aW9uKGUpIHsKLSAgICAgICAgICBpZiAoZV90YXJnZXQoZSkgIT0gZC5zY3JvbGxiYXJWICYm
IGVfdGFyZ2V0KGUpICE9IGQuc2Nyb2xsYmFySCkKLSAgICAgICAgICAgIG9wZXJhdGlvbihjbSwg
b25Nb3VzZURvd24pKGUpOwotICAgICAgICB9OwotICAgICAgICBvbihkLnNjcm9sbGJhclYsICJt
b3VzZWRvd24iLCBiYXJNb3VzZURvd24pOwotICAgICAgICBvbihkLnNjcm9sbGJhckgsICJtb3Vz
ZWRvd24iLCBiYXJNb3VzZURvd24pOwotICAgICAgfQotICAgICAgY20uc3RhdGUuY2hlY2tlZE92
ZXJsYXlTY3JvbGxiYXIgPSB0cnVlOwotICAgIH0KICAgfQogCiAgIC8vIENvbXB1dGUgdGhlIGxp
bmVzIHRoYXQgYXJlIHZpc2libGUgaW4gYSBnaXZlbiB2aWV3cG9ydCAoZGVmYXVsdHMKLSAgLy8g
dGhlIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbikuIHZpZXdQb3J0IG1heSBjb250YWluIHRv
cCwKKyAgLy8gdGhlIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbikuIHZpZXdwb3J0IG1heSBj
b250YWluIHRvcCwKICAgLy8gaGVpZ2h0LCBhbmQgZW5zdXJlIChzZWUgb3Auc2Nyb2xsVG9Qb3Mp
IHByb3BlcnRpZXMuCi0gIGZ1bmN0aW9uIHZpc2libGVMaW5lcyhkaXNwbGF5LCBkb2MsIHZpZXdQ
b3J0KSB7Ci0gICAgdmFyIHRvcCA9IHZpZXdQb3J0ICYmIHZpZXdQb3J0LnRvcCAhPSBudWxsID8g
TWF0aC5tYXgoMCwgdmlld1BvcnQudG9wKSA6IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wOwor
ICBmdW5jdGlvbiB2aXNpYmxlTGluZXMoZGlzcGxheSwgZG9jLCB2aWV3cG9ydCkgeworICAgIHZh
ciB0b3AgPSB2aWV3cG9ydCAmJiB2aWV3cG9ydC50b3AgIT0gbnVsbCA/IE1hdGgubWF4KDAsIHZp
ZXdwb3J0LnRvcCkgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDsKICAgICB0b3AgPSBNYXRo
LmZsb29yKHRvcCAtIHBhZGRpbmdUb3AoZGlzcGxheSkpOwotICAgIHZhciBib3R0b20gPSB2aWV3
UG9ydCAmJiB2aWV3UG9ydC5ib3R0b20gIT0gbnVsbCA/IHZpZXdQb3J0LmJvdHRvbSA6IHRvcCAr
IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7CisgICAgdmFyIGJvdHRvbSA9IHZpZXdwb3J0
ICYmIHZpZXdwb3J0LmJvdHRvbSAhPSBudWxsID8gdmlld3BvcnQuYm90dG9tIDogdG9wICsgZGlz
cGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKIAogICAgIHZhciBmcm9tID0gbGluZUF0SGVpZ2h0
KGRvYywgdG9wKSwgdG8gPSBsaW5lQXRIZWlnaHQoZG9jLCBib3R0b20pOwogICAgIC8vIEVuc3Vy
ZSBpcyBhIHtmcm9tOiB7bGluZSwgY2h9LCB0bzoge2xpbmUsIGNofX0gb2JqZWN0LCBhbmQKICAg
ICAvLyBmb3JjZXMgdGhvc2UgbGluZXMgaW50byB0aGUgdmlld3BvcnQgKGlmIHBvc3NpYmxlKS4K
LSAgICBpZiAodmlld1BvcnQgJiYgdmlld1BvcnQuZW5zdXJlKSB7Ci0gICAgICB2YXIgZW5zdXJl
RnJvbSA9IHZpZXdQb3J0LmVuc3VyZS5mcm9tLmxpbmUsIGVuc3VyZVRvID0gdmlld1BvcnQuZW5z
dXJlLnRvLmxpbmU7Ci0gICAgICBpZiAoZW5zdXJlRnJvbSA8IGZyb20pCi0gICAgICAgIHJldHVy
biB7ZnJvbTogZW5zdXJlRnJvbSwKLSAgICAgICAgICAgICAgICB0bzogbGluZUF0SGVpZ2h0KGRv
YywgaGVpZ2h0QXRMaW5lKGdldExpbmUoZG9jLCBlbnN1cmVGcm9tKSkgKyBkaXNwbGF5LndyYXBw
ZXIuY2xpZW50SGVpZ2h0KX07Ci0gICAgICBpZiAoTWF0aC5taW4oZW5zdXJlVG8sIGRvYy5sYXN0
TGluZSgpKSA+PSB0bykKLSAgICAgICAgcmV0dXJuIHtmcm9tOiBsaW5lQXRIZWlnaHQoZG9jLCBo
ZWlnaHRBdExpbmUoZ2V0TGluZShkb2MsIGVuc3VyZVRvKSkgLSBkaXNwbGF5LndyYXBwZXIuY2xp
ZW50SGVpZ2h0KSwKLSAgICAgICAgICAgICAgICB0bzogZW5zdXJlVG99OworICAgIGlmICh2aWV3
cG9ydCAmJiB2aWV3cG9ydC5lbnN1cmUpIHsKKyAgICAgIHZhciBlbnN1cmVGcm9tID0gdmlld3Bv
cnQuZW5zdXJlLmZyb20ubGluZSwgZW5zdXJlVG8gPSB2aWV3cG9ydC5lbnN1cmUudG8ubGluZTsK
KyAgICAgIGlmIChlbnN1cmVGcm9tIDwgZnJvbSkgeworICAgICAgICBmcm9tID0gZW5zdXJlRnJv
bTsKKyAgICAgICAgdG8gPSBsaW5lQXRIZWlnaHQoZG9jLCBoZWlnaHRBdExpbmUoZ2V0TGluZShk
b2MsIGVuc3VyZUZyb20pKSArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQpOworICAgICAg
fSBlbHNlIGlmIChNYXRoLm1pbihlbnN1cmVUbywgZG9jLmxhc3RMaW5lKCkpID49IHRvKSB7Cisg
ICAgICAgIGZyb20gPSBsaW5lQXRIZWlnaHQoZG9jLCBoZWlnaHRBdExpbmUoZ2V0TGluZShkb2Ms
IGVuc3VyZVRvKSkgLSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0KTsKKyAgICAgICAgdG8g
PSBlbnN1cmVUbzsKKyAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHtmcm9tOiBmcm9tLCB0bzog
TWF0aC5tYXgodG8sIGZyb20gKyAxKX07CiAgIH0KQEAgLTUxMyw3ICs1OTUsNyBAQAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb2RlTWlycm9yLWxp
bmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0IikpOwogICAgICAgdmFyIGlubmVyVyA9IHRl
c3QuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCwgcGFkZGluZyA9IHRlc3Qub2Zmc2V0V2lkdGggLSBp
bm5lclc7CiAgICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGggPSAiIjsKLSAgICAg
IGRpc3BsYXkubGluZU51bUlubmVyV2lkdGggPSBNYXRoLm1heChpbm5lclcsIGRpc3BsYXkubGlu
ZUd1dHRlci5vZmZzZXRXaWR0aCAtIHBhZGRpbmcpOworICAgICAgZGlzcGxheS5saW5lTnVtSW5u
ZXJXaWR0aCA9IE1hdGgubWF4KGlubmVyVywgZGlzcGxheS5saW5lR3V0dGVyLm9mZnNldFdpZHRo
IC0gcGFkZGluZykgKyAxOwogICAgICAgZGlzcGxheS5saW5lTnVtV2lkdGggPSBkaXNwbGF5Lmxp
bmVOdW1Jbm5lcldpZHRoICsgcGFkZGluZzsKICAgICAgIGRpc3BsYXkubGluZU51bUNoYXJzID0g
ZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCA/IGxhc3QubGVuZ3RoIDogLTE7CiAgICAgICBkaXNw
bGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGggPSBkaXNwbGF5LmxpbmVOdW1XaWR0aCArICJweCI7
CkBAIC01MzYsNzggKzYxOCw2OCBAQAogCiAgIC8vIERJU1BMQVkgRFJBV0lORwogCi0gIC8vIFVw
ZGF0ZXMgdGhlIGRpc3BsYXksIHNlbGVjdGlvbiwgYW5kIHNjcm9sbGJhcnMsIHVzaW5nIHRoZQot
ICAvLyBpbmZvcm1hdGlvbiBpbiBkaXNwbGF5LnZpZXcgdG8gZmluZCBvdXQgd2hpY2ggbm9kZXMg
YXJlIG5vIGxvbmdlcgotICAvLyB1cC10by1kYXRlLiBUcmllcyB0byBiYWlsIG91dCBlYXJseSB3
aGVuIG5vIGNoYW5nZXMgYXJlIG5lZWRlZCwKLSAgLy8gdW5sZXNzIGZvcmNlZCBpcyB0cnVlLgot
ICAvLyBSZXR1cm5zIHRydWUgaWYgYW4gYWN0dWFsIHVwZGF0ZSBoYXBwZW5lZCwgZmFsc2Ugb3Ro
ZXJ3aXNlLgotICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5KGNtLCB2aWV3UG9ydCwgZm9yY2VkKSB7
Ci0gICAgdmFyIG9sZEZyb20gPSBjbS5kaXNwbGF5LnZpZXdGcm9tLCBvbGRUbyA9IGNtLmRpc3Bs
YXkudmlld1RvLCB1cGRhdGVkOwotICAgIHZhciB2aXNpYmxlID0gdmlzaWJsZUxpbmVzKGNtLmRp
c3BsYXksIGNtLmRvYywgdmlld1BvcnQpOwotICAgIGZvciAodmFyIGZpcnN0ID0gdHJ1ZTs7IGZp
cnN0ID0gZmFsc2UpIHsKLSAgICAgIHZhciBvbGRXaWR0aCA9IGNtLmRpc3BsYXkuc2Nyb2xsZXIu
Y2xpZW50V2lkdGg7Ci0gICAgICBpZiAoIXVwZGF0ZURpc3BsYXlJbm5lcihjbSwgdmlzaWJsZSwg
Zm9yY2VkKSkgYnJlYWs7Ci0gICAgICB1cGRhdGVkID0gdHJ1ZTsKLQotICAgICAgLy8gSWYgdGhl
IG1heCBsaW5lIGNoYW5nZWQgc2luY2UgaXQgd2FzIGxhc3QgbWVhc3VyZWQsIG1lYXN1cmUgaXQs
Ci0gICAgICAvLyBhbmQgZW5zdXJlIHRoZSBkb2N1bWVudCdzIHdpZHRoIG1hdGNoZXMgaXQuCi0g
ICAgICBpZiAoY20uZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCAmJiAhY20ub3B0aW9ucy5saW5lV3Jh
cHBpbmcpCi0gICAgICAgIGFkanVzdENvbnRlbnRXaWR0aChjbSk7Ci0KLSAgICAgIHZhciBiYXJN
ZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pOwotICAgICAgdXBkYXRlU2VsZWN0aW9u
KGNtKTsKLSAgICAgIHNldERvY3VtZW50SGVpZ2h0KGNtLCBiYXJNZWFzdXJlKTsKLSAgICAgIHVw
ZGF0ZVNjcm9sbGJhcnMoY20sIGJhck1lYXN1cmUpOwotICAgICAgaWYgKHdlYmtpdCAmJiBjbS5v
cHRpb25zLmxpbmVXcmFwcGluZykKLSAgICAgICAgY2hlY2tGb3JXZWJraXRXaWR0aEJ1ZyhjbSwg
YmFyTWVhc3VyZSk7IC8vIChJc3N1ZSAjMjQyMCkKLSAgICAgIGlmIChmaXJzdCAmJiBjbS5vcHRp
b25zLmxpbmVXcmFwcGluZyAmJiBvbGRXaWR0aCAhPSBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVu
dFdpZHRoKSB7Ci0gICAgICAgIGZvcmNlZCA9IHRydWU7Ci0gICAgICAgIGNvbnRpbnVlOwotICAg
ICAgfQotICAgICAgZm9yY2VkID0gZmFsc2U7CisgIGZ1bmN0aW9uIERpc3BsYXlVcGRhdGUoY20s
IHZpZXdwb3J0LCBmb3JjZSkgeworICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKIAotICAg
ICAgLy8gQ2xpcCBmb3JjZWQgdmlld3BvcnQgdG8gYWN0dWFsIHNjcm9sbGFibGUgYXJlYS4KLSAg
ICAgIGlmICh2aWV3UG9ydCAmJiB2aWV3UG9ydC50b3AgIT0gbnVsbCkKLSAgICAgICAgdmlld1Bv
cnQgPSB7dG9wOiBNYXRoLm1pbihiYXJNZWFzdXJlLmRvY0hlaWdodCAtIHNjcm9sbGVyQ3V0T2Zm
IC0gYmFyTWVhc3VyZS5jbGllbnRIZWlnaHQsIHZpZXdQb3J0LnRvcCl9OwotICAgICAgLy8gVXBk
YXRlZCBsaW5lIGhlaWdodHMgbWlnaHQgcmVzdWx0IGluIHRoZSBkcmF3biBhcmVhIG5vdAotICAg
ICAgLy8gYWN0dWFsbHkgY292ZXJpbmcgdGhlIHZpZXdwb3J0LiBLZWVwIGxvb3BpbmcgdW50aWwg
aXQgZG9lcy4KLSAgICAgIHZpc2libGUgPSB2aXNpYmxlTGluZXMoY20uZGlzcGxheSwgY20uZG9j
LCB2aWV3UG9ydCk7Ci0gICAgICBpZiAodmlzaWJsZS5mcm9tID49IGNtLmRpc3BsYXkudmlld0Zy
b20gJiYgdmlzaWJsZS50byA8PSBjbS5kaXNwbGF5LnZpZXdUbykKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQorICAgIHRoaXMudmlld3BvcnQgPSB2aWV3cG9ydDsKKyAgICAvLyBTdG9yZSBzb21lIHZh
bHVlcyB0aGF0IHdlJ2xsIG5lZWQgbGF0ZXIgKGJ1dCBkb24ndCB3YW50IHRvIGZvcmNlIGEgcmVs
YXlvdXQgZm9yKQorICAgIHRoaXMudmlzaWJsZSA9IHZpc2libGVMaW5lcyhkaXNwbGF5LCBjbS5k
b2MsIHZpZXdwb3J0KTsKKyAgICB0aGlzLmVkaXRvcklzSGlkZGVuID0gIWRpc3BsYXkud3JhcHBl
ci5vZmZzZXRXaWR0aDsKKyAgICB0aGlzLndyYXBwZXJIZWlnaHQgPSBkaXNwbGF5LndyYXBwZXIu
Y2xpZW50SGVpZ2h0OworICAgIHRoaXMud3JhcHBlcldpZHRoID0gZGlzcGxheS53cmFwcGVyLmNs
aWVudFdpZHRoOworICAgIHRoaXMub2xkRGlzcGxheVdpZHRoID0gZGlzcGxheVdpZHRoKGNtKTsK
KyAgICB0aGlzLmZvcmNlID0gZm9yY2U7CisgICAgdGhpcy5kaW1zID0gZ2V0RGltZW5zaW9ucyhj
bSk7CisgICAgdGhpcy5ldmVudHMgPSBbXTsKKyAgfQorCisgIERpc3BsYXlVcGRhdGUucHJvdG90
eXBlLnNpZ25hbCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHsKKyAgICBpZiAoaGFzSGFuZGxl
cihlbWl0dGVyLCB0eXBlKSkKKyAgICAgIHRoaXMuZXZlbnRzLnB1c2goYXJndW1lbnRzKTsKKyAg
fTsKKyAgRGlzcGxheVVwZGF0ZS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmV2ZW50cy5sZW5ndGg7IGkrKykKKyAgICAgIHNpZ25h
bC5hcHBseShudWxsLCB0aGlzLmV2ZW50c1tpXSk7CisgIH07CiAKLSAgICBjbS5kaXNwbGF5LnVw
ZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDsKLSAgICBpZiAodXBkYXRlZCkgewotICAgICAgc2lnbmFs
TGF0ZXIoY20sICJ1cGRhdGUiLCBjbSk7Ci0gICAgICBpZiAoY20uZGlzcGxheS52aWV3RnJvbSAh
PSBvbGRGcm9tIHx8IGNtLmRpc3BsYXkudmlld1RvICE9IG9sZFRvKQotICAgICAgICBzaWduYWxM
YXRlcihjbSwgInZpZXdwb3J0Q2hhbmdlIiwgY20sIGNtLmRpc3BsYXkudmlld0Zyb20sIGNtLmRp
c3BsYXkudmlld1RvKTsKKyAgZnVuY3Rpb24gbWF5YmVDbGlwU2Nyb2xsYmFycyhjbSkgeworICAg
IHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTsKKyAgICBpZiAoIWRpc3BsYXkuc2Nyb2xsYmFyc0Ns
aXBwZWQgJiYgZGlzcGxheS5zY3JvbGxlci5vZmZzZXRXaWR0aCkgeworICAgICAgZGlzcGxheS5u
YXRpdmVCYXJXaWR0aCA9IGRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0V2lkdGggLSBkaXNwbGF5LnNj
cm9sbGVyLmNsaWVudFdpZHRoOworICAgICAgZGlzcGxheS5oZWlnaHRGb3JjZXIuc3R5bGUuaGVp
Z2h0ID0gc2Nyb2xsR2FwKGNtKSArICJweCI7CisgICAgICBkaXNwbGF5LnNpemVyLnN0eWxlLm1h
cmdpbkJvdHRvbSA9IC1kaXNwbGF5Lm5hdGl2ZUJhcldpZHRoICsgInB4IjsKKyAgICAgIGRpc3Bs
YXkuc2l6ZXIuc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCA9IHNjcm9sbEdhcChjbSkgKyAicHgiOwor
ICAgICAgZGlzcGxheS5zY3JvbGxiYXJzQ2xpcHBlZCA9IHRydWU7CiAgICAgfQotICAgIHJldHVy
biB1cGRhdGVkOwogICB9CiAKICAgLy8gRG9lcyB0aGUgYWN0dWFsIHVwZGF0aW5nIG9mIHRoZSBs
aW5lIGRpc3BsYXkuIEJhaWxzIG91dAogICAvLyAocmV0dXJuaW5nIGZhbHNlKSB3aGVuIHRoZXJl
IGlzIG5vdGhpbmcgdG8gYmUgZG9uZSBhbmQgZm9yY2VkIGlzCiAgIC8vIGZhbHNlLgotICBmdW5j
dGlvbiB1cGRhdGVEaXNwbGF5SW5uZXIoY20sIHZpc2libGUsIGZvcmNlZCkgeworICBmdW5jdGlv
biB1cGRhdGVEaXNwbGF5SWZOZWVkZWQoY20sIHVwZGF0ZSkgewogICAgIHZhciBkaXNwbGF5ID0g
Y20uZGlzcGxheSwgZG9jID0gY20uZG9jOwotICAgIGlmICghZGlzcGxheS53cmFwcGVyLm9mZnNl
dFdpZHRoKSB7CisKKyAgICBpZiAodXBkYXRlLmVkaXRvcklzSGlkZGVuKSB7CiAgICAgICByZXNl
dFZpZXcoY20pOwotICAgICAgcmV0dXJuOworICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAog
ICAgIC8vIEJhaWwgb3V0IGlmIHRoZSB2aXNpYmxlIGFyZWEgaXMgYWxyZWFkeSByZW5kZXJlZCBh
bmQgbm90aGluZyBjaGFuZ2VkLgotICAgIGlmICghZm9yY2VkICYmIHZpc2libGUuZnJvbSA+PSBk
aXNwbGF5LnZpZXdGcm9tICYmIHZpc2libGUudG8gPD0gZGlzcGxheS52aWV3VG8gJiYKLSAgICAg
ICAgY291bnREaXJ0eVZpZXcoY20pID09IDApCi0gICAgICByZXR1cm47CisgICAgaWYgKCF1cGRh
dGUuZm9yY2UgJiYKKyAgICAgICAgdXBkYXRlLnZpc2libGUuZnJvbSA+PSBkaXNwbGF5LnZpZXdG
cm9tICYmIHVwZGF0ZS52aXNpYmxlLnRvIDw9IGRpc3BsYXkudmlld1RvICYmCisgICAgICAgIChk
aXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID09IG51bGwgfHwgZGlzcGxheS51cGRhdGVMaW5lTnVt
YmVycyA+PSBkaXNwbGF5LnZpZXdUbykgJiYKKyAgICAgICAgZGlzcGxheS5yZW5kZXJlZFZpZXcg
PT0gZGlzcGxheS52aWV3ICYmIGNvdW50RGlydHlWaWV3KGNtKSA9PSAwKQorICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKG1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoKGNtKSkKKyAgICBp
ZiAobWF5YmVVcGRhdGVMaW5lTnVtYmVyV2lkdGgoY20pKSB7CiAgICAgICByZXNldFZpZXcoY20p
OwotICAgIHZhciBkaW1zID0gZ2V0RGltZW5zaW9ucyhjbSk7CisgICAgICB1cGRhdGUuZGltcyA9
IGdldERpbWVuc2lvbnMoY20pOworICAgIH0KIAogICAgIC8vIENvbXB1dGUgYSBzdWl0YWJsZSBu
ZXcgdmlld3BvcnQgKGZyb20gJiB0bykKICAgICB2YXIgZW5kID0gZG9jLmZpcnN0ICsgZG9jLnNp
emU7Ci0gICAgdmFyIGZyb20gPSBNYXRoLm1heCh2aXNpYmxlLmZyb20gLSBjbS5vcHRpb25zLnZp
ZXdwb3J0TWFyZ2luLCBkb2MuZmlyc3QpOwotICAgIHZhciB0byA9IE1hdGgubWluKGVuZCwgdmlz
aWJsZS50byArIGNtLm9wdGlvbnMudmlld3BvcnRNYXJnaW4pOworICAgIHZhciBmcm9tID0gTWF0
aC5tYXgodXBkYXRlLnZpc2libGUuZnJvbSAtIGNtLm9wdGlvbnMudmlld3BvcnRNYXJnaW4sIGRv
Yy5maXJzdCk7CisgICAgdmFyIHRvID0gTWF0aC5taW4oZW5kLCB1cGRhdGUudmlzaWJsZS50byAr
IGNtLm9wdGlvbnMudmlld3BvcnRNYXJnaW4pOwogICAgIGlmIChkaXNwbGF5LnZpZXdGcm9tIDwg
ZnJvbSAmJiBmcm9tIC0gZGlzcGxheS52aWV3RnJvbSA8IDIwKSBmcm9tID0gTWF0aC5tYXgoZG9j
LmZpcnN0LCBkaXNwbGF5LnZpZXdGcm9tKTsKICAgICBpZiAoZGlzcGxheS52aWV3VG8gPiB0byAm
JiBkaXNwbGF5LnZpZXdUbyAtIHRvIDwgMjApIHRvID0gTWF0aC5taW4oZW5kLCBkaXNwbGF5LnZp
ZXdUbyk7CiAgICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zKSB7CkBAIC02MTYsNyArNjg4LDcgQEAK
ICAgICB9CiAKICAgICB2YXIgZGlmZmVyZW50ID0gZnJvbSAhPSBkaXNwbGF5LnZpZXdGcm9tIHx8
IHRvICE9IGRpc3BsYXkudmlld1RvIHx8Ci0gICAgICBkaXNwbGF5Lmxhc3RTaXplQyAhPSBkaXNw
bGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OworICAgICAgZGlzcGxheS5sYXN0V3JhcEhlaWdodCAh
PSB1cGRhdGUud3JhcHBlckhlaWdodCB8fCBkaXNwbGF5Lmxhc3RXcmFwV2lkdGggIT0gdXBkYXRl
LndyYXBwZXJXaWR0aDsKICAgICBhZGp1c3RWaWV3KGNtLCBmcm9tLCB0byk7CiAKICAgICBkaXNw
bGF5LnZpZXdPZmZzZXQgPSBoZWlnaHRBdExpbmUoZ2V0TGluZShjbS5kb2MsIGRpc3BsYXkudmll
d0Zyb20pKTsKQEAgLTYyNCw1OCArNjk2LDg2IEBACiAgICAgY20uZGlzcGxheS5tb3Zlci5zdHls
ZS50b3AgPSBkaXNwbGF5LnZpZXdPZmZzZXQgKyAicHgiOwogCiAgICAgdmFyIHRvVXBkYXRlID0g
Y291bnREaXJ0eVZpZXcoY20pOwotICAgIGlmICghZGlmZmVyZW50ICYmIHRvVXBkYXRlID09IDAg
JiYgIWZvcmNlZCkgcmV0dXJuOworICAgIGlmICghZGlmZmVyZW50ICYmIHRvVXBkYXRlID09IDAg
JiYgIXVwZGF0ZS5mb3JjZSAmJiBkaXNwbGF5LnJlbmRlcmVkVmlldyA9PSBkaXNwbGF5LnZpZXcg
JiYKKyAgICAgICAgKGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPT0gbnVsbCB8fCBkaXNwbGF5
LnVwZGF0ZUxpbmVOdW1iZXJzID49IGRpc3BsYXkudmlld1RvKSkKKyAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIC8vIEZvciBiaWcgY2hhbmdlcywgd2UgaGlkZSB0aGUgZW5jbG9zaW5nIGVsZW1l
bnQgZHVyaW5nIHRoZQogICAgIC8vIHVwZGF0ZSwgc2luY2UgdGhhdCBzcGVlZHMgdXAgdGhlIG9w
ZXJhdGlvbnMgb24gbW9zdCBicm93c2Vycy4KICAgICB2YXIgZm9jdXNlZCA9IGFjdGl2ZUVsdCgp
OwogICAgIGlmICh0b1VwZGF0ZSA+IDQpIGRpc3BsYXkubGluZURpdi5zdHlsZS5kaXNwbGF5ID0g
Im5vbmUiOwotICAgIHBhdGNoRGlzcGxheShjbSwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycywg
ZGltcyk7CisgICAgcGF0Y2hEaXNwbGF5KGNtLCBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzLCB1
cGRhdGUuZGltcyk7CiAgICAgaWYgKHRvVXBkYXRlID4gNCkgZGlzcGxheS5saW5lRGl2LnN0eWxl
LmRpc3BsYXkgPSAiIjsKKyAgICBkaXNwbGF5LnJlbmRlcmVkVmlldyA9IGRpc3BsYXkudmlldzsK
ICAgICAvLyBUaGVyZSBtaWdodCBoYXZlIGJlZW4gYSB3aWRnZXQgd2l0aCBhIGZvY3VzZWQgZWxl
bWVudCB0aGF0IGdvdAogICAgIC8vIGhpZGRlbiBvciB1cGRhdGVkLCBpZiBzbyByZS1mb2N1cyBp
dC4KICAgICBpZiAoZm9jdXNlZCAmJiBhY3RpdmVFbHQoKSAhPSBmb2N1c2VkICYmIGZvY3VzZWQu
b2Zmc2V0SGVpZ2h0KSBmb2N1c2VkLmZvY3VzKCk7CiAKICAgICAvLyBQcmV2ZW50IHNlbGVjdGlv
biBhbmQgY3Vyc29ycyBmcm9tIGludGVyZmVyaW5nIHdpdGggdGhlIHNjcm9sbAotICAgIC8vIHdp
ZHRoLgorICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQuCiAgICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxh
eS5jdXJzb3JEaXYpOwogICAgIHJlbW92ZUNoaWxkcmVuKGRpc3BsYXkuc2VsZWN0aW9uRGl2KTsK
KyAgICBkaXNwbGF5Lmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0gZGlzcGxheS5zaXplci5zdHlsZS5t
aW5IZWlnaHQgPSAwOwogCiAgICAgaWYgKGRpZmZlcmVudCkgewotICAgICAgZGlzcGxheS5sYXN0
U2l6ZUMgPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0OworICAgICAgZGlzcGxheS5sYXN0
V3JhcEhlaWdodCA9IHVwZGF0ZS53cmFwcGVySGVpZ2h0OworICAgICAgZGlzcGxheS5sYXN0V3Jh
cFdpZHRoID0gdXBkYXRlLndyYXBwZXJXaWR0aDsKICAgICAgIHN0YXJ0V29ya2VyKGNtLCA0MDAp
OwogICAgIH0KIAotICAgIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNtKTsKKyAgICBkaXNwbGF5
LnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDsKIAogICAgIHJldHVybiB0cnVlOwogICB9CiAKLSAg
ZnVuY3Rpb24gYWRqdXN0Q29udGVudFdpZHRoKGNtKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5k
aXNwbGF5OwotICAgIHZhciB3aWR0aCA9IG1lYXN1cmVDaGFyKGNtLCBkaXNwbGF5Lm1heExpbmUs
IGRpc3BsYXkubWF4TGluZS50ZXh0Lmxlbmd0aCkubGVmdDsKLSAgICBkaXNwbGF5Lm1heExpbmVD
aGFuZ2VkID0gZmFsc2U7Ci0gICAgdmFyIG1pbldpZHRoID0gTWF0aC5tYXgoMCwgd2lkdGggKyAz
KTsKLSAgICB2YXIgbWF4U2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIGRpc3BsYXkuc2l6ZXIub2Zm
c2V0TGVmdCArIG1pbldpZHRoICsgc2Nyb2xsZXJDdXRPZmYgLSBkaXNwbGF5LnNjcm9sbGVyLmNs
aWVudFdpZHRoKTsKLSAgICBkaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gbWluV2lkdGgg
KyAicHgiOwotICAgIGlmIChtYXhTY3JvbGxMZWZ0IDwgY20uZG9jLnNjcm9sbExlZnQpCi0gICAg
ICBzZXRTY3JvbGxMZWZ0KGNtLCBNYXRoLm1pbihkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQs
IG1heFNjcm9sbExlZnQpLCB0cnVlKTsKLSAgfQorICBmdW5jdGlvbiBwb3N0VXBkYXRlRGlzcGxh
eShjbSwgdXBkYXRlKSB7CisgICAgdmFyIHZpZXdwb3J0ID0gdXBkYXRlLnZpZXdwb3J0OworICAg
IGZvciAodmFyIGZpcnN0ID0gdHJ1ZTs7IGZpcnN0ID0gZmFsc2UpIHsKKyAgICAgIGlmICghZmly
c3QgfHwgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nIHx8IHVwZGF0ZS5vbGREaXNwbGF5V2lkdGgg
PT0gZGlzcGxheVdpZHRoKGNtKSkgeworICAgICAgICAvLyBDbGlwIGZvcmNlZCB2aWV3cG9ydCB0
byBhY3R1YWwgc2Nyb2xsYWJsZSBhcmVhLgorICAgICAgICBpZiAodmlld3BvcnQgJiYgdmlld3Bv
cnQudG9wICE9IG51bGwpCisgICAgICAgICAgdmlld3BvcnQgPSB7dG9wOiBNYXRoLm1pbihjbS5k
b2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoY20uZGlzcGxheSkgLSBkaXNwbGF5SGVpZ2h0KGNtKSwg
dmlld3BvcnQudG9wKX07CisgICAgICAgIC8vIFVwZGF0ZWQgbGluZSBoZWlnaHRzIG1pZ2h0IHJl
c3VsdCBpbiB0aGUgZHJhd24gYXJlYSBub3QKKyAgICAgICAgLy8gYWN0dWFsbHkgY292ZXJpbmcg
dGhlIHZpZXdwb3J0LiBLZWVwIGxvb3BpbmcgdW50aWwgaXQgZG9lcy4KKyAgICAgICAgdXBkYXRl
LnZpc2libGUgPSB2aXNpYmxlTGluZXMoY20uZGlzcGxheSwgY20uZG9jLCB2aWV3cG9ydCk7Cisg
ICAgICAgIGlmICh1cGRhdGUudmlzaWJsZS5mcm9tID49IGNtLmRpc3BsYXkudmlld0Zyb20gJiYg
dXBkYXRlLnZpc2libGUudG8gPD0gY20uZGlzcGxheS52aWV3VG8pCisgICAgICAgICAgYnJlYWs7
CisgICAgICB9CisgICAgICBpZiAoIXVwZGF0ZURpc3BsYXlJZk5lZWRlZChjbSwgdXBkYXRlKSkg
YnJlYWs7CisgICAgICB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7CisgICAgICB2YXIgYmFy
TWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTsKKyAgICAgIHVwZGF0ZVNlbGVjdGlv
bihjbSk7CisgICAgICBzZXREb2N1bWVudEhlaWdodChjbSwgYmFyTWVhc3VyZSk7CisgICAgICB1
cGRhdGVTY3JvbGxiYXJzKGNtLCBiYXJNZWFzdXJlKTsKKyAgICB9CiAKLSAgZnVuY3Rpb24gc2V0
RG9jdW1lbnRIZWlnaHQoY20sIG1lYXN1cmUpIHsKLSAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxl
Lm1pbkhlaWdodCA9IGNtLmRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcCA9IG1lYXN1cmUu
ZG9jSGVpZ2h0ICsgInB4IjsKLSAgICBjbS5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0g
TWF0aC5tYXgobWVhc3VyZS5kb2NIZWlnaHQsIG1lYXN1cmUuY2xpZW50SGVpZ2h0IC0gc2Nyb2xs
ZXJDdXRPZmYpICsgInB4IjsKKyAgICB1cGRhdGUuc2lnbmFsKGNtLCAidXBkYXRlIiwgY20pOwor
ICAgIGlmIChjbS5kaXNwbGF5LnZpZXdGcm9tICE9IGNtLmRpc3BsYXkucmVwb3J0ZWRWaWV3RnJv
bSB8fCBjbS5kaXNwbGF5LnZpZXdUbyAhPSBjbS5kaXNwbGF5LnJlcG9ydGVkVmlld1RvKSB7Cisg
ICAgICB1cGRhdGUuc2lnbmFsKGNtLCAidmlld3BvcnRDaGFuZ2UiLCBjbSwgY20uZGlzcGxheS52
aWV3RnJvbSwgY20uZGlzcGxheS52aWV3VG8pOworICAgICAgY20uZGlzcGxheS5yZXBvcnRlZFZp
ZXdGcm9tID0gY20uZGlzcGxheS52aWV3RnJvbTsgY20uZGlzcGxheS5yZXBvcnRlZFZpZXdUbyA9
IGNtLmRpc3BsYXkudmlld1RvOworICAgIH0KICAgfQogCi0gIGZ1bmN0aW9uIGNoZWNrRm9yV2Vi
a2l0V2lkdGhCdWcoY20sIG1lYXN1cmUpIHsKLSAgICAvLyBXb3JrIGFyb3VuZCBXZWJraXQgYnVn
IHdoZXJlIGl0IHNvbWV0aW1lcyByZXNlcnZlcyBzcGFjZSBmb3IgYQotICAgIC8vIG5vbi1leGlz
dGluZyBwaGFudG9tIHNjcm9sbGJhciBpbiB0aGUgc2Nyb2xsZXIgKElzc3VlICMyNDIwKQotICAg
IGlmIChjbS5kaXNwbGF5LnNpemVyLm9mZnNldFdpZHRoICsgY20uZGlzcGxheS5ndXR0ZXJzLm9m
ZnNldFdpZHRoIDwgY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCAtIDEpIHsKLSAgICAg
IGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gY20uZGlzcGxheS5oZWlnaHRGb3Jj
ZXIuc3R5bGUudG9wID0gIjBweCI7Ci0gICAgICBjbS5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUuaGVp
Z2h0ID0gbWVhc3VyZS5kb2NIZWlnaHQgKyAicHgiOworICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5
U2ltcGxlKGNtLCB2aWV3cG9ydCkgeworICAgIHZhciB1cGRhdGUgPSBuZXcgRGlzcGxheVVwZGF0
ZShjbSwgdmlld3BvcnQpOworICAgIGlmICh1cGRhdGVEaXNwbGF5SWZOZWVkZWQoY20sIHVwZGF0
ZSkpIHsKKyAgICAgIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNtKTsKKyAgICAgIHBvc3RVcGRh
dGVEaXNwbGF5KGNtLCB1cGRhdGUpOworICAgICAgdmFyIGJhck1lYXN1cmUgPSBtZWFzdXJlRm9y
U2Nyb2xsYmFycyhjbSk7CisgICAgICB1cGRhdGVTZWxlY3Rpb24oY20pOworICAgICAgc2V0RG9j
dW1lbnRIZWlnaHQoY20sIGJhck1lYXN1cmUpOworICAgICAgdXBkYXRlU2Nyb2xsYmFycyhjbSwg
YmFyTWVhc3VyZSk7CisgICAgICB1cGRhdGUuZmluaXNoKCk7CiAgICAgfQogICB9CiAKKyAgZnVu
Y3Rpb24gc2V0RG9jdW1lbnRIZWlnaHQoY20sIG1lYXN1cmUpIHsKKyAgICBjbS5kaXNwbGF5LnNp
emVyLnN0eWxlLm1pbkhlaWdodCA9IG1lYXN1cmUuZG9jSGVpZ2h0ICsgInB4IjsKKyAgICB2YXIg
dG90YWwgPSBtZWFzdXJlLmRvY0hlaWdodCArIGNtLmRpc3BsYXkuYmFySGVpZ2h0OworICAgIGNt
LmRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcCA9IHRvdGFsICsgInB4IjsKKyAgICBjbS5k
aXNwbGF5Lmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0gTWF0aC5tYXgodG90YWwgKyBzY3JvbGxHYXAo
Y20pLCBtZWFzdXJlLmNsaWVudEhlaWdodCkgKyAicHgiOworICB9CisKICAgLy8gUmVhZCB0aGUg
YWN0dWFsIGhlaWdodHMgb2YgdGhlIHJlbmRlcmVkIGxpbmVzLCBhbmQgdXBkYXRlIHRoZWlyCiAg
IC8vIHN0b3JlZCBoZWlnaHRzIHRvIG1hdGNoLgogICBmdW5jdGlvbiB1cGRhdGVIZWlnaHRzSW5W
aWV3cG9ydChjbSkgewpAQCAtNjg0LDcgKzc4NCw3IEBACiAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBkaXNwbGF5LnZpZXcubGVuZ3RoOyBpKyspIHsKICAgICAgIHZhciBjdXIgPSBkaXNwbGF5LnZp
ZXdbaV0sIGhlaWdodDsKICAgICAgIGlmIChjdXIuaGlkZGVuKSBjb250aW51ZTsKLSAgICAgIGlm
IChpZV91cHRvNykgeworICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA4KSB7CiAgICAgICAg
IHZhciBib3QgPSBjdXIubm9kZS5vZmZzZXRUb3AgKyBjdXIubm9kZS5vZmZzZXRIZWlnaHQ7CiAg
ICAgICAgIGhlaWdodCA9IGJvdCAtIHByZXZCb3R0b207CiAgICAgICAgIHByZXZCb3R0b20gPSBi
b3Q7CkBAIC03MTQsOSArODE0LDEwIEBACiAgIC8vIHZpZXcsIHNvIHRoYXQgd2UgZG9uJ3QgaW50
ZXJsZWF2ZSByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZSBET00uCiAgIGZ1bmN0aW9uIGdldERp
bWVuc2lvbnMoY20pIHsKICAgICB2YXIgZCA9IGNtLmRpc3BsYXksIGxlZnQgPSB7fSwgd2lkdGgg
PSB7fTsKKyAgICB2YXIgZ3V0dGVyTGVmdCA9IGQuZ3V0dGVycy5jbGllbnRMZWZ0OwogICAgIGZv
ciAodmFyIG4gPSBkLmd1dHRlcnMuZmlyc3RDaGlsZCwgaSA9IDA7IG47IG4gPSBuLm5leHRTaWJs
aW5nLCArK2kpIHsKLSAgICAgIGxlZnRbY20ub3B0aW9ucy5ndXR0ZXJzW2ldXSA9IG4ub2Zmc2V0
TGVmdDsKLSAgICAgIHdpZHRoW2NtLm9wdGlvbnMuZ3V0dGVyc1tpXV0gPSBuLm9mZnNldFdpZHRo
OworICAgICAgbGVmdFtjbS5vcHRpb25zLmd1dHRlcnNbaV1dID0gbi5vZmZzZXRMZWZ0ICsgbi5j
bGllbnRMZWZ0ICsgZ3V0dGVyTGVmdDsKKyAgICAgIHdpZHRoW2NtLm9wdGlvbnMuZ3V0dGVyc1tp
XV0gPSBuLmNsaWVudFdpZHRoOwogICAgIH0KICAgICByZXR1cm4ge2ZpeGVkUG9zOiBjb21wZW5z
YXRlRm9ySFNjcm9sbChkKSwKICAgICAgICAgICAgIGd1dHRlclRvdGFsV2lkdGg6IGQuZ3V0dGVy
cy5vZmZzZXRXaWR0aCwKQEAgLTc0OSw3ICs4NTAsNyBAQAogICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdmlldy5sZW5ndGg7IGkrKykgewogICAgICAgdmFyIGxpbmVWaWV3ID0gdmlld1tpXTsKICAg
ICAgIGlmIChsaW5lVmlldy5oaWRkZW4pIHsKLSAgICAgIH0gZWxzZSBpZiAoIWxpbmVWaWV3Lm5v
ZGUpIHsgLy8gTm90IGRyYXduIHlldAorICAgICAgfSBlbHNlIGlmICghbGluZVZpZXcubm9kZSB8
fCBsaW5lVmlldy5ub2RlLnBhcmVudE5vZGUgIT0gY29udGFpbmVyKSB7IC8vIE5vdCBkcmF3biB5
ZXQKICAgICAgICAgdmFyIG5vZGUgPSBidWlsZExpbmVFbGVtZW50KGNtLCBsaW5lVmlldywgbGlu
ZU4sIGRpbXMpOwogICAgICAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKG5vZGUsIGN1cik7CiAg
ICAgICB9IGVsc2UgeyAvLyBBbHJlYWR5IGRyYXduCkBAIC03ODAsNyArODgxLDcgQEAKICAgICAg
IGlmICh0eXBlID09ICJ0ZXh0IikgdXBkYXRlTGluZVRleHQoY20sIGxpbmVWaWV3KTsKICAgICAg
IGVsc2UgaWYgKHR5cGUgPT0gImd1dHRlciIpIHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3
LCBsaW5lTiwgZGltcyk7CiAgICAgICBlbHNlIGlmICh0eXBlID09ICJjbGFzcyIpIHVwZGF0ZUxp
bmVDbGFzc2VzKGxpbmVWaWV3KTsKLSAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIndpZGdldCIpIHVw
ZGF0ZUxpbmVXaWRnZXRzKGxpbmVWaWV3LCBkaW1zKTsKKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0g
IndpZGdldCIpIHVwZGF0ZUxpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7CiAgICAgfQog
ICAgIGxpbmVWaWV3LmNoYW5nZXMgPSBudWxsOwogICB9CkBAIC03OTMsNyArODk0LDcgQEAKICAg
ICAgIGlmIChsaW5lVmlldy50ZXh0LnBhcmVudE5vZGUpCiAgICAgICAgIGxpbmVWaWV3LnRleHQu
cGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobGluZVZpZXcubm9kZSwgbGluZVZpZXcudGV4dCk7CiAg
ICAgICBsaW5lVmlldy5ub2RlLmFwcGVuZENoaWxkKGxpbmVWaWV3LnRleHQpOwotICAgICAgaWYg
KGllX3VwdG83KSBsaW5lVmlldy5ub2RlLnN0eWxlLnpJbmRleCA9IDI7CisgICAgICBpZiAoaWUg
JiYgaWVfdmVyc2lvbiA8IDgpIGxpbmVWaWV3Lm5vZGUuc3R5bGUuekluZGV4ID0gMjsKICAgICB9
CiAgICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGU7CiAgIH0KQEAgLTg1NSwxMyArOTU2LDI2IEBACiAg
ICAgICBsaW5lVmlldy5ub2RlLnJlbW92ZUNoaWxkKGxpbmVWaWV3Lmd1dHRlcik7CiAgICAgICBs
aW5lVmlldy5ndXR0ZXIgPSBudWxsOwogICAgIH0KKyAgICBpZiAobGluZVZpZXcuZ3V0dGVyQmFj
a2dyb3VuZCkgeworICAgICAgbGluZVZpZXcubm9kZS5yZW1vdmVDaGlsZChsaW5lVmlldy5ndXR0
ZXJCYWNrZ3JvdW5kKTsKKyAgICAgIGxpbmVWaWV3Lmd1dHRlckJhY2tncm91bmQgPSBudWxsOwor
ICAgIH0KKyAgICBpZiAobGluZVZpZXcubGluZS5ndXR0ZXJDbGFzcykgeworICAgICAgdmFyIHdy
YXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7CisgICAgICBsaW5lVmlldy5ndXR0ZXJC
YWNrZ3JvdW5kID0gZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1ndXR0ZXItYmFja2dyb3Vu
ZCAiICsgbGluZVZpZXcubGluZS5ndXR0ZXJDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImxlZnQ6ICIgKyAoY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGRpbXMu
Zml4ZWRQb3MgOiAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJweDsgd2lkdGg6ICIgKyBkaW1zLmd1dHRlclRvdGFsV2lkdGgg
KyAicHgiKTsKKyAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKGxpbmVWaWV3Lmd1dHRlckJhY2tncm91
bmQsIGxpbmVWaWV3LnRleHQpOworICAgIH0KICAgICB2YXIgbWFya2VycyA9IGxpbmVWaWV3Lmxp
bmUuZ3V0dGVyTWFya2VyczsKICAgICBpZiAoY20ub3B0aW9ucy5saW5lTnVtYmVycyB8fCBtYXJr
ZXJzKSB7CiAgICAgICB2YXIgd3JhcCA9IGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KTsKLSAg
ICAgIHZhciBndXR0ZXJXcmFwID0gbGluZVZpZXcuZ3V0dGVyID0KLSAgICAgICAgd3JhcC5pbnNl
cnRCZWZvcmUoZWx0KCJkaXYiLCBudWxsLCAiQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlciIsICJw
b3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBkaW1zLmZpeGVkUG9zIDogLWRpbXMuZ3V0dGVy
VG90YWxXaWR0aCkgKyAicHgiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZpZXcu
dGV4dCk7CisgICAgICB2YXIgZ3V0dGVyV3JhcCA9IGxpbmVWaWV3Lmd1dHRlciA9IGVsdCgiZGl2
IiwgbnVsbCwgIkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIiLCAibGVmdDogIiArCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY20ub3B0aW9ucy5maXhlZEd1
dHRlciA/IGRpbXMuZml4ZWRQb3MgOiAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArICJweCIpOwor
ICAgICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGd1dHRlcldyYXApOworICAgICAg
d3JhcC5pbnNlcnRCZWZvcmUoZ3V0dGVyV3JhcCwgbGluZVZpZXcudGV4dCk7CisgICAgICBpZiAo
bGluZVZpZXcubGluZS5ndXR0ZXJDbGFzcykKKyAgICAgICAgZ3V0dGVyV3JhcC5jbGFzc05hbWUg
Kz0gIiAiICsgbGluZVZpZXcubGluZS5ndXR0ZXJDbGFzczsKICAgICAgIGlmIChjbS5vcHRpb25z
LmxpbmVOdW1iZXJzICYmICghbWFya2VycyB8fCAhbWFya2Vyc1siQ29kZU1pcnJvci1saW5lbnVt
YmVycyJdKSkKICAgICAgICAgbGluZVZpZXcubGluZU51bWJlciA9IGd1dHRlcldyYXAuYXBwZW5k
Q2hpbGQoCiAgICAgICAgICAgZWx0KCJkaXYiLCBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxp
bmVOKSwKQEAgLTg3NywxNCArOTkxLDE0IEBACiAgICAgfQogICB9CiAKLSAgZnVuY3Rpb24gdXBk
YXRlTGluZVdpZGdldHMobGluZVZpZXcsIGRpbXMpIHsKKyAgZnVuY3Rpb24gdXBkYXRlTGluZVdp
ZGdldHMoY20sIGxpbmVWaWV3LCBkaW1zKSB7CiAgICAgaWYgKGxpbmVWaWV3LmFsaWduYWJsZSkg
bGluZVZpZXcuYWxpZ25hYmxlID0gbnVsbDsKICAgICBmb3IgKHZhciBub2RlID0gbGluZVZpZXcu
bm9kZS5maXJzdENoaWxkLCBuZXh0OyBub2RlOyBub2RlID0gbmV4dCkgewogICAgICAgdmFyIG5l
eHQgPSBub2RlLm5leHRTaWJsaW5nOwogICAgICAgaWYgKG5vZGUuY2xhc3NOYW1lID09ICJDb2Rl
TWlycm9yLWxpbmV3aWRnZXQiKQogICAgICAgICBsaW5lVmlldy5ub2RlLnJlbW92ZUNoaWxkKG5v
ZGUpOwogICAgIH0KLSAgICBpbnNlcnRMaW5lV2lkZ2V0cyhsaW5lVmlldywgZGltcyk7CisgICAg
aW5zZXJ0TGluZVdpZGdldHMoY20sIGxpbmVWaWV3LCBkaW1zKTsKICAgfQogCiAgIC8vIEJ1aWxk
IGEgbGluZSdzIERPTSByZXByZXNlbnRhdGlvbiBmcm9tIHNjcmF0Y2gKQEAgLTg5NiwyNSArMTAx
MCwyNiBAQAogCiAgICAgdXBkYXRlTGluZUNsYXNzZXMobGluZVZpZXcpOwogICAgIHVwZGF0ZUxp
bmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7Ci0gICAgaW5zZXJ0TGluZVdpZGdl
dHMobGluZVZpZXcsIGRpbXMpOworICAgIGluc2VydExpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywg
ZGltcyk7CiAgICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGU7CiAgIH0KIAogICAvLyBBIGxpbmVWaWV3
IG1heSBjb250YWluIG11bHRpcGxlIGxvZ2ljYWwgbGluZXMgKHdoZW4gbWVyZ2VkIGJ5CiAgIC8v
IGNvbGxhcHNlZCBzcGFucykuIFRoZSB3aWRnZXRzIGZvciBhbGwgb2YgdGhlbSBuZWVkIHRvIGJl
IGRyYXduLgotICBmdW5jdGlvbiBpbnNlcnRMaW5lV2lkZ2V0cyhsaW5lVmlldywgZGltcykgewot
ICAgIGluc2VydExpbmVXaWRnZXRzRm9yKGxpbmVWaWV3LmxpbmUsIGxpbmVWaWV3LCBkaW1zLCB0
cnVlKTsKKyAgZnVuY3Rpb24gaW5zZXJ0TGluZVdpZGdldHMoY20sIGxpbmVWaWV3LCBkaW1zKSB7
CisgICAgaW5zZXJ0TGluZVdpZGdldHNGb3IoY20sIGxpbmVWaWV3LmxpbmUsIGxpbmVWaWV3LCBk
aW1zLCB0cnVlKTsKICAgICBpZiAobGluZVZpZXcucmVzdCkgZm9yICh2YXIgaSA9IDA7IGkgPCBs
aW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKQotICAgICAgaW5zZXJ0TGluZVdpZGdldHNGb3IobGlu
ZVZpZXcucmVzdFtpXSwgbGluZVZpZXcsIGRpbXMsIGZhbHNlKTsKKyAgICAgIGluc2VydExpbmVX
aWRnZXRzRm9yKGNtLCBsaW5lVmlldy5yZXN0W2ldLCBsaW5lVmlldywgZGltcywgZmFsc2UpOwog
ICB9CiAKLSAgZnVuY3Rpb24gaW5zZXJ0TGluZVdpZGdldHNGb3IobGluZSwgbGluZVZpZXcsIGRp
bXMsIGFsbG93QWJvdmUpIHsKKyAgZnVuY3Rpb24gaW5zZXJ0TGluZVdpZGdldHNGb3IoY20sIGxp
bmUsIGxpbmVWaWV3LCBkaW1zLCBhbGxvd0Fib3ZlKSB7CiAgICAgaWYgKCFsaW5lLndpZGdldHMp
IHJldHVybjsKICAgICB2YXIgd3JhcCA9IGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KTsKICAg
ICBmb3IgKHZhciBpID0gMCwgd3MgPSBsaW5lLndpZGdldHM7IGkgPCB3cy5sZW5ndGg7ICsraSkg
ewogICAgICAgdmFyIHdpZGdldCA9IHdzW2ldLCBub2RlID0gZWx0KCJkaXYiLCBbd2lkZ2V0Lm5v
ZGVdLCAiQ29kZU1pcnJvci1saW5ld2lkZ2V0Iik7Ci0gICAgICBpZiAoIXdpZGdldC5oYW5kbGVN
b3VzZUV2ZW50cykgbm9kZS5pZ25vcmVFdmVudHMgPSB0cnVlOworICAgICAgaWYgKCF3aWRnZXQu
aGFuZGxlTW91c2VFdmVudHMpIG5vZGUuc2V0QXR0cmlidXRlKCJjbS1pZ25vcmUtZXZlbnRzIiwg
InRydWUiKTsKICAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3aWRnZXQsIG5vZGUsIGxpbmVWaWV3
LCBkaW1zKTsKKyAgICAgIGNtLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZShub2RlKTsKICAg
ICAgIGlmIChhbGxvd0Fib3ZlICYmIHdpZGdldC5hYm92ZSkKICAgICAgICAgd3JhcC5pbnNlcnRC
ZWZvcmUobm9kZSwgbGluZVZpZXcuZ3V0dGVyIHx8IGxpbmVWaWV3LnRleHQpOwogICAgICAgZWxz
ZQpAQCAtOTU3LDYgKzEwNzIsOTA1IEBACiAgIGZ1bmN0aW9uIG1heFBvcyhhLCBiKSB7IHJldHVy
biBjbXAoYSwgYikgPCAwID8gYiA6IGE7IH0KICAgZnVuY3Rpb24gbWluUG9zKGEsIGIpIHsgcmV0
dXJuIGNtcChhLCBiKSA8IDAgPyBhIDogYjsgfQogCisgIC8vIElOUFVUIEhBTkRMSU5HCisKKyAg
ZnVuY3Rpb24gZW5zdXJlRm9jdXMoY20pIHsKKyAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsg
Y20uZGlzcGxheS5pbnB1dC5mb2N1cygpOyBvbkZvY3VzKGNtKTsgfQorICB9CisKKyAgZnVuY3Rp
b24gaXNSZWFkT25seShjbSkgeworICAgIHJldHVybiBjbS5vcHRpb25zLnJlYWRPbmx5IHx8IGNt
LmRvYy5jYW50RWRpdDsKKyAgfQorCisgIC8vIFRoaXMgd2lsbCBiZSBzZXQgdG8gYW4gYXJyYXkg
b2Ygc3RyaW5ncyB3aGVuIGNvcHlpbmcsIHNvIHRoYXQsCisgIC8vIHdoZW4gcGFzdGluZywgd2Ug
a25vdyB3aGF0IGtpbmQgb2Ygc2VsZWN0aW9ucyB0aGUgY29waWVkIHRleHQKKyAgLy8gd2FzIG1h
ZGUgb3V0IG9mLgorICB2YXIgbGFzdENvcGllZCA9IG51bGw7CisKKyAgZnVuY3Rpb24gYXBwbHlU
ZXh0SW5wdXQoY20sIGluc2VydGVkLCBkZWxldGVkLCBzZWwsIG9yaWdpbikgeworICAgIHZhciBk
b2MgPSBjbS5kb2M7CisgICAgY20uZGlzcGxheS5zaGlmdCA9IGZhbHNlOworICAgIGlmICghc2Vs
KSBzZWwgPSBkb2Muc2VsOworCisgICAgdmFyIHBhc3RlID0gY20uc3RhdGUucGFzdGVJbmNvbWlu
ZyB8fCBvcmlnaW4gPT0gInBhc3RlIjsKKyAgICB2YXIgdGV4dExpbmVzID0gZG9jLnNwbGl0TGlu
ZXMoaW5zZXJ0ZWQpLCBtdWx0aVBhc3RlID0gbnVsbDsKKyAgICAvLyBXaGVuIHBhc2luZyBOIGxp
bmVzIGludG8gTiBzZWxlY3Rpb25zLCBpbnNlcnQgb25lIGxpbmUgcGVyIHNlbGVjdGlvbgorICAg
IGlmIChwYXN0ZSAmJiBzZWwucmFuZ2VzLmxlbmd0aCA+IDEpIHsKKyAgICAgIGlmIChsYXN0Q29w
aWVkICYmIGxhc3RDb3BpZWQuam9pbigiXG4iKSA9PSBpbnNlcnRlZCkgeworICAgICAgICBpZiAo
c2VsLnJhbmdlcy5sZW5ndGggJSBsYXN0Q29waWVkLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAg
bXVsdGlQYXN0ZSA9IFtdOworICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdENvcGll
ZC5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIG11bHRpUGFzdGUucHVzaChkb2Muc3BsaXRMaW5l
cyhsYXN0Q29waWVkW2ldKSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAodGV4dExpbmVz
Lmxlbmd0aCA9PSBzZWwucmFuZ2VzLmxlbmd0aCkgeworICAgICAgICBtdWx0aVBhc3RlID0gbWFw
KHRleHRMaW5lcywgZnVuY3Rpb24obCkgeyByZXR1cm4gW2xdOyB9KTsKKyAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBOb3JtYWwgYmVoYXZpb3IgaXMgdG8gaW5zZXJ0IHRoZSBuZXcgdGV4dCBpbnRv
IGV2ZXJ5IHNlbGVjdGlvbgorICAgIGZvciAodmFyIGkgPSBzZWwucmFuZ2VzLmxlbmd0aCAtIDE7
IGkgPj0gMDsgaS0tKSB7CisgICAgICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2ldOworICAgICAg
dmFyIGZyb20gPSByYW5nZS5mcm9tKCksIHRvID0gcmFuZ2UudG8oKTsKKyAgICAgIGlmIChyYW5n
ZS5lbXB0eSgpKSB7CisgICAgICAgIGlmIChkZWxldGVkICYmIGRlbGV0ZWQgPiAwKSAvLyBIYW5k
bGUgZGVsZXRpb24KKyAgICAgICAgICBmcm9tID0gUG9zKGZyb20ubGluZSwgZnJvbS5jaCAtIGRl
bGV0ZWQpOworICAgICAgICBlbHNlIGlmIChjbS5zdGF0ZS5vdmVyd3JpdGUgJiYgIXBhc3RlKSAv
LyBIYW5kbGUgb3ZlcndyaXRlCisgICAgICAgICAgdG8gPSBQb3ModG8ubGluZSwgTWF0aC5taW4o
Z2V0TGluZShkb2MsIHRvLmxpbmUpLnRleHQubGVuZ3RoLCB0by5jaCArIGxzdCh0ZXh0TGluZXMp
Lmxlbmd0aCkpOworICAgICAgfQorICAgICAgdmFyIHVwZGF0ZUlucHV0ID0gY20uY3VyT3AudXBk
YXRlSW5wdXQ7CisgICAgICB2YXIgY2hhbmdlRXZlbnQgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0
ZXh0OiBtdWx0aVBhc3RlID8gbXVsdGlQYXN0ZVtpICUgbXVsdGlQYXN0ZS5sZW5ndGhdIDogdGV4
dExpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogb3JpZ2luIHx8IChwYXN0
ZSA/ICJwYXN0ZSIgOiBjbS5zdGF0ZS5jdXRJbmNvbWluZyA/ICJjdXQiIDogIitpbnB1dCIpfTsK
KyAgICAgIG1ha2VDaGFuZ2UoY20uZG9jLCBjaGFuZ2VFdmVudCk7CisgICAgICBzaWduYWxMYXRl
cihjbSwgImlucHV0UmVhZCIsIGNtLCBjaGFuZ2VFdmVudCk7CisgICAgfQorICAgIGlmIChpbnNl
cnRlZCAmJiAhcGFzdGUpCisgICAgICB0cmlnZ2VyRWxlY3RyaWMoY20sIGluc2VydGVkKTsKKwor
ICAgIGVuc3VyZUN1cnNvclZpc2libGUoY20pOworICAgIGNtLmN1ck9wLnVwZGF0ZUlucHV0ID0g
dXBkYXRlSW5wdXQ7CisgICAgY20uY3VyT3AudHlwaW5nID0gdHJ1ZTsKKyAgICBjbS5zdGF0ZS5w
YXN0ZUluY29taW5nID0gY20uc3RhdGUuY3V0SW5jb21pbmcgPSBmYWxzZTsKKyAgfQorCisgIGZ1
bmN0aW9uIGhhbmRsZVBhc3RlKGUsIGNtKSB7CisgICAgdmFyIHBhc3RlZCA9IGUuY2xpcGJvYXJk
RGF0YSAmJiBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9wbGFpbiIpOworICAgIGlmIChw
YXN0ZWQpIHsKKyAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgIGlmICghaXNSZWFkT25s
eShjbSkgJiYgIWNtLm9wdGlvbnMuZGlzYWJsZUlucHV0KQorICAgICAgICBydW5Jbk9wKGNtLCBm
dW5jdGlvbigpIHsgYXBwbHlUZXh0SW5wdXQoY20sIHBhc3RlZCwgMCwgbnVsbCwgInBhc3RlIik7
IH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gdHJpZ2dl
ckVsZWN0cmljKGNtLCBpbnNlcnRlZCkgeworICAgIC8vIFdoZW4gYW4gJ2VsZWN0cmljJyBjaGFy
YWN0ZXIgaXMgaW5zZXJ0ZWQsIGltbWVkaWF0ZWx5IHRyaWdnZXIgYSByZWluZGVudAorICAgIGlm
ICghY20ub3B0aW9ucy5lbGVjdHJpY0NoYXJzIHx8ICFjbS5vcHRpb25zLnNtYXJ0SW5kZW50KSBy
ZXR1cm47CisgICAgdmFyIHNlbCA9IGNtLmRvYy5zZWw7CisKKyAgICBmb3IgKHZhciBpID0gc2Vs
LnJhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgdmFyIHJhbmdlID0gc2Vs
LnJhbmdlc1tpXTsKKyAgICAgIGlmIChyYW5nZS5oZWFkLmNoID4gMTAwIHx8IChpICYmIHNlbC5y
YW5nZXNbaSAtIDFdLmhlYWQubGluZSA9PSByYW5nZS5oZWFkLmxpbmUpKSBjb250aW51ZTsKKyAg
ICAgIHZhciBtb2RlID0gY20uZ2V0TW9kZUF0KHJhbmdlLmhlYWQpOworICAgICAgdmFyIGluZGVu
dGVkID0gZmFsc2U7CisgICAgICBpZiAobW9kZS5lbGVjdHJpY0NoYXJzKSB7CisgICAgICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgbW9kZS5lbGVjdHJpY0NoYXJzLmxlbmd0aDsgaisrKQorICAgICAg
ICAgIGlmIChpbnNlcnRlZC5pbmRleE9mKG1vZGUuZWxlY3RyaWNDaGFycy5jaGFyQXQoaikpID4g
LTEpIHsKKyAgICAgICAgICAgIGluZGVudGVkID0gaW5kZW50TGluZShjbSwgcmFuZ2UuaGVhZC5s
aW5lLCAic21hcnQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgIH0g
ZWxzZSBpZiAobW9kZS5lbGVjdHJpY0lucHV0KSB7CisgICAgICAgIGlmIChtb2RlLmVsZWN0cmlj
SW5wdXQudGVzdChnZXRMaW5lKGNtLmRvYywgcmFuZ2UuaGVhZC5saW5lKS50ZXh0LnNsaWNlKDAs
IHJhbmdlLmhlYWQuY2gpKSkKKyAgICAgICAgICBpbmRlbnRlZCA9IGluZGVudExpbmUoY20sIHJh
bmdlLmhlYWQubGluZSwgInNtYXJ0Iik7CisgICAgICB9CisgICAgICBpZiAoaW5kZW50ZWQpIHNp
Z25hbExhdGVyKGNtLCAiZWxlY3RyaWNJbnB1dCIsIGNtLCByYW5nZS5oZWFkLmxpbmUpOworICAg
IH0KKyAgfQorCisgIGZ1bmN0aW9uIGNvcHlhYmxlUmFuZ2VzKGNtKSB7CisgICAgdmFyIHRleHQg
PSBbXSwgcmFuZ2VzID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5kb2Muc2VsLnJh
bmdlcy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIGxpbmUgPSBjbS5kb2Muc2VsLnJhbmdlc1tp
XS5oZWFkLmxpbmU7CisgICAgICB2YXIgbGluZVJhbmdlID0ge2FuY2hvcjogUG9zKGxpbmUsIDAp
LCBoZWFkOiBQb3MobGluZSArIDEsIDApfTsKKyAgICAgIHJhbmdlcy5wdXNoKGxpbmVSYW5nZSk7
CisgICAgICB0ZXh0LnB1c2goY20uZ2V0UmFuZ2UobGluZVJhbmdlLmFuY2hvciwgbGluZVJhbmdl
LmhlYWQpKTsKKyAgICB9CisgICAgcmV0dXJuIHt0ZXh0OiB0ZXh0LCByYW5nZXM6IHJhbmdlc307
CisgIH0KKworICBmdW5jdGlvbiBkaXNhYmxlQnJvd3Nlck1hZ2ljKGZpZWxkKSB7CisgICAgZmll
bGQuc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsICJvZmYiKTsKKyAgICBmaWVsZC5zZXRBdHRy
aWJ1dGUoImF1dG9jYXBpdGFsaXplIiwgIm9mZiIpOworICAgIGZpZWxkLnNldEF0dHJpYnV0ZSgi
c3BlbGxjaGVjayIsICJmYWxzZSIpOworICB9CisKKyAgLy8gVEVYVEFSRUEgSU5QVVQgU1RZTEUK
KworICBmdW5jdGlvbiBUZXh0YXJlYUlucHV0KGNtKSB7CisgICAgdGhpcy5jbSA9IGNtOworICAg
IC8vIFNlZSBpbnB1dC5wb2xsIGFuZCBpbnB1dC5yZXNldAorICAgIHRoaXMucHJldklucHV0ID0g
IiI7CisKKyAgICAvLyBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgd2UgZXhwZWN0IGlucHV0
IHRvIGFwcGVhciByZWFsIHNvb24KKyAgICAvLyBub3cgKGFmdGVyIHNvbWUgZXZlbnQgbGlrZSAn
a2V5cHJlc3MnIG9yICdpbnB1dCcpIGFuZCBhcmUKKyAgICAvLyBwb2xsaW5nIGludGVuc2l2ZWx5
LgorICAgIHRoaXMucG9sbGluZ0Zhc3QgPSBmYWxzZTsKKyAgICAvLyBTZWxmLXJlc2V0dGluZyB0
aW1lb3V0IGZvciB0aGUgcG9sbGVyCisgICAgdGhpcy5wb2xsaW5nID0gbmV3IERlbGF5ZWQoKTsK
KyAgICAvLyBUcmFja3Mgd2hlbiBpbnB1dC5yZXNldCBoYXMgcHVudGVkIHRvIGp1c3QgcHV0dGlu
ZyBhIHNob3J0CisgICAgLy8gc3RyaW5nIGludG8gdGhlIHRleHRhcmVhIGluc3RlYWQgb2YgdGhl
IGZ1bGwgc2VsZWN0aW9uLgorICAgIHRoaXMuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IGZhbHNlOwor
ICAgIC8vIFVzZWQgdG8gd29yayBhcm91bmQgSUUgaXNzdWUgd2l0aCBzZWxlY3Rpb24gYmVpbmcg
Zm9yZ290dGVuIHdoZW4gZm9jdXMgbW92ZXMgYXdheSBmcm9tIHRleHRhcmVhCisgICAgdGhpcy5o
YXNTZWxlY3Rpb24gPSBmYWxzZTsKKyAgICB0aGlzLmNvbXBvc2luZyA9IG51bGw7CisgIH07CisK
KyAgZnVuY3Rpb24gaGlkZGVuVGV4dGFyZWEoKSB7CisgICAgdmFyIHRlID0gZWx0KCJ0ZXh0YXJl
YSIsIG51bGwsIG51bGwsICJwb3NpdGlvbjogYWJzb2x1dGU7IHBhZGRpbmc6IDA7IHdpZHRoOiAx
cHg7IGhlaWdodDogMWVtOyBvdXRsaW5lOiBub25lIik7CisgICAgdmFyIGRpdiA9IGVsdCgiZGl2
IiwgW3RlXSwgbnVsbCwgIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lk
dGg6IDNweDsgaGVpZ2h0OiAwcHg7Iik7CisgICAgLy8gVGhlIHRleHRhcmVhIGlzIGtlcHQgcG9z
aXRpb25lZCBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCB0aGUKKyAgICAvLyBmYWN0IHRoYXQg
aXQnbGwgYmUgc2Nyb2xsZWQgaW50byB2aWV3IG9uIGlucHV0IGZyb20gc2Nyb2xsaW5nCisgICAg
Ly8gb3VyIGZha2UgY3Vyc29yIG91dCBvZiB2aWV3LiBPbiB3ZWJraXQsIHdoZW4gd3JhcD1vZmYs
IHBhc3RlIGlzCisgICAgLy8gdmVyeSBzbG93LiBTbyBtYWtlIHRoZSBhcmVhIHdpZGUgaW5zdGVh
ZC4KKyAgICBpZiAod2Via2l0KSB0ZS5zdHlsZS53aWR0aCA9ICIxMDAwcHgiOworICAgIGVsc2Ug
dGUuc2V0QXR0cmlidXRlKCJ3cmFwIiwgIm9mZiIpOworICAgIC8vIElmIGJvcmRlcjogMDsgLS0g
aU9TIGZhaWxzIHRvIG9wZW4ga2V5Ym9hcmQgKGlzc3VlICMxMjg3KQorICAgIGlmIChpb3MpIHRl
LnN0eWxlLmJvcmRlciA9ICIxcHggc29saWQgYmxhY2siOworICAgIGRpc2FibGVCcm93c2VyTWFn
aWModGUpOworICAgIHJldHVybiBkaXY7CisgIH0KKworICBUZXh0YXJlYUlucHV0LnByb3RvdHlw
ZSA9IGNvcHlPYmooeworICAgIGluaXQ6IGZ1bmN0aW9uKGRpc3BsYXkpIHsKKyAgICAgIHZhciBp
bnB1dCA9IHRoaXMsIGNtID0gdGhpcy5jbTsKKworICAgICAgLy8gV3JhcHMgYW5kIGhpZGVzIGlu
cHV0IHRleHRhcmVhCisgICAgICB2YXIgZGl2ID0gdGhpcy53cmFwcGVyID0gaGlkZGVuVGV4dGFy
ZWEoKTsKKyAgICAgIC8vIFRoZSBzZW1paGlkZGVuIHRleHRhcmVhIHRoYXQgaXMgZm9jdXNlZCB3
aGVuIHRoZSBlZGl0b3IgaXMKKyAgICAgIC8vIGZvY3VzZWQsIGFuZCByZWNlaXZlcyBpbnB1dC4K
KyAgICAgIHZhciB0ZSA9IHRoaXMudGV4dGFyZWEgPSBkaXYuZmlyc3RDaGlsZDsKKyAgICAgIGRp
c3BsYXkud3JhcHBlci5pbnNlcnRCZWZvcmUoZGl2LCBkaXNwbGF5LndyYXBwZXIuZmlyc3RDaGls
ZCk7CisKKyAgICAgIC8vIE5lZWRlZCB0byBoaWRlIGJpZyBibHVlIGJsaW5raW5nIGN1cnNvciBv
biBNb2JpbGUgU2FmYXJpIChkb2Vzbid0IHNlZW0gdG8gd29yayBpbiBpT1MgOCBhbnltb3JlKQor
ICAgICAgaWYgKGlvcykgdGUuc3R5bGUud2lkdGggPSAiMHB4IjsKKworICAgICAgb24odGUsICJp
bnB1dCIsIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5ICYm
IGlucHV0Lmhhc1NlbGVjdGlvbikgaW5wdXQuaGFzU2VsZWN0aW9uID0gbnVsbDsKKyAgICAgICAg
aW5wdXQucG9sbCgpOworICAgICAgfSk7CisKKyAgICAgIG9uKHRlLCAicGFzdGUiLCBmdW5jdGlv
bihlKSB7CisgICAgICAgIGlmIChoYW5kbGVQYXN0ZShlLCBjbSkpIHJldHVybiB0cnVlOworCisg
ICAgICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlOworICAgICAgICBpbnB1dC5mYXN0
UG9sbCgpOworICAgICAgfSk7CisKKyAgICAgIGZ1bmN0aW9uIHByZXBhcmVDb3B5Q3V0KGUpIHsK
KyAgICAgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsKKyAgICAgICAgICBsYXN0Q29w
aWVkID0gY20uZ2V0U2VsZWN0aW9ucygpOworICAgICAgICAgIGlmIChpbnB1dC5pbmFjY3VyYXRl
U2VsZWN0aW9uKSB7CisgICAgICAgICAgICBpbnB1dC5wcmV2SW5wdXQgPSAiIjsKKyAgICAgICAg
ICAgIGlucHV0LmluYWNjdXJhdGVTZWxlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIHRlLnZh
bHVlID0gbGFzdENvcGllZC5qb2luKCJcbiIpOworICAgICAgICAgICAgc2VsZWN0SW5wdXQodGUp
OworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghY20ub3B0aW9ucy5saW5lV2lzZUNv
cHlDdXQpIHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
dmFyIHJhbmdlcyA9IGNvcHlhYmxlUmFuZ2VzKGNtKTsKKyAgICAgICAgICBsYXN0Q29waWVkID0g
cmFuZ2VzLnRleHQ7CisgICAgICAgICAgaWYgKGUudHlwZSA9PSAiY3V0IikgeworICAgICAgICAg
ICAgY20uc2V0U2VsZWN0aW9ucyhyYW5nZXMucmFuZ2VzLCBudWxsLCBzZWxfZG9udFNjcm9sbCk7
CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlucHV0LnByZXZJbnB1dCA9ICIiOwor
ICAgICAgICAgICAgdGUudmFsdWUgPSByYW5nZXMudGV4dC5qb2luKCJcbiIpOworICAgICAgICAg
ICAgc2VsZWN0SW5wdXQodGUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAo
ZS50eXBlID09ICJjdXQiKSBjbS5zdGF0ZS5jdXRJbmNvbWluZyA9IHRydWU7CisgICAgICB9Cisg
ICAgICBvbih0ZSwgImN1dCIsIHByZXBhcmVDb3B5Q3V0KTsKKyAgICAgIG9uKHRlLCAiY29weSIs
IHByZXBhcmVDb3B5Q3V0KTsKKworICAgICAgb24oZGlzcGxheS5zY3JvbGxlciwgInBhc3RlIiwg
ZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSkgcmV0
dXJuOworICAgICAgICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0gdHJ1ZTsKKyAgICAgICAgaW5w
dXQuZm9jdXMoKTsKKyAgICAgIH0pOworCisgICAgICAvLyBQcmV2ZW50IG5vcm1hbCBzZWxlY3Rp
b24gaW4gdGhlIGVkaXRvciAod2UgaGFuZGxlIG91ciBvd24pCisgICAgICBvbihkaXNwbGF5Lmxp
bmVTcGFjZSwgInNlbGVjdHN0YXJ0IiwgZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoIWV2ZW50
SW5XaWRnZXQoZGlzcGxheSwgZSkpIGVfcHJldmVudERlZmF1bHQoZSk7CisgICAgICB9KTsKKwor
ICAgICAgb24odGUsICJjb21wb3NpdGlvbnN0YXJ0IiwgZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciBzdGFydCA9IGNtLmdldEN1cnNvcigiZnJvbSIpOworICAgICAgICBpbnB1dC5jb21wb3Npbmcg
PSB7CisgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgIHJhbmdlOiBjbS5tYXJrVGV4
dChzdGFydCwgY20uZ2V0Q3Vyc29yKCJ0byIpLCB7Y2xhc3NOYW1lOiAiQ29kZU1pcnJvci1jb21w
b3NpbmcifSkKKyAgICAgICAgfTsKKyAgICAgIH0pOworICAgICAgb24odGUsICJjb21wb3NpdGlv
bmVuZCIsIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoaW5wdXQuY29tcG9zaW5nKSB7CisgICAg
ICAgICAgaW5wdXQucG9sbCgpOworICAgICAgICAgIGlucHV0LmNvbXBvc2luZy5yYW5nZS5jbGVh
cigpOworICAgICAgICAgIGlucHV0LmNvbXBvc2luZyA9IG51bGw7CisgICAgICAgIH0KKyAgICAg
IH0pOworICAgIH0sCisKKyAgICBwcmVwYXJlU2VsZWN0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAg
IC8vIFJlZHJhdyB0aGUgc2VsZWN0aW9uIGFuZC9vciBjdXJzb3IKKyAgICAgIHZhciBjbSA9IHRo
aXMuY20sIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7CisgICAgICB2YXIgcmVz
dWx0ID0gcHJlcGFyZVNlbGVjdGlvbihjbSk7CisKKyAgICAgIC8vIE1vdmUgdGhlIGhpZGRlbiB0
ZXh0YXJlYSBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCBzY3JvbGxpbmcgYXJ0aWZhY3RzCisg
ICAgICBpZiAoY20ub3B0aW9ucy5tb3ZlSW5wdXRXaXRoQ3Vyc29yKSB7CisgICAgICAgIHZhciBo
ZWFkUG9zID0gY3Vyc29yQ29vcmRzKGNtLCBkb2Muc2VsLnByaW1hcnkoKS5oZWFkLCAiZGl2Iik7
CisgICAgICAgIHZhciB3cmFwT2ZmID0gZGlzcGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpLCBsaW5lT2ZmID0gZGlzcGxheS5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OworICAgICAgICByZXN1bHQudGVUb3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5Lndy
YXBwZXIuY2xpZW50SGVpZ2h0IC0gMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlYWRQb3MudG9wICsgbGluZU9mZi50b3AgLSB3cmFwT2ZmLnRvcCkpOwor
ICAgICAgICByZXN1bHQudGVMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS53cmFw
cGVyLmNsaWVudFdpZHRoIC0gMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWFkUG9zLmxlZnQgKyBsaW5lT2ZmLmxlZnQgLSB3cmFwT2ZmLmxlZnQpKTsK
KyAgICAgIH0KKworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCisgICAgc2hvd1NlbGVj
dGlvbjogZnVuY3Rpb24oZHJhd24pIHsKKyAgICAgIHZhciBjbSA9IHRoaXMuY20sIGRpc3BsYXkg
PSBjbS5kaXNwbGF5OworICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5jdXJzb3JE
aXYsIGRyYXduLmN1cnNvcnMpOworICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5z
ZWxlY3Rpb25EaXYsIGRyYXduLnNlbGVjdGlvbik7CisgICAgICBpZiAoZHJhd24udGVUb3AgIT0g
bnVsbCkgeworICAgICAgICB0aGlzLndyYXBwZXIuc3R5bGUudG9wID0gZHJhd24udGVUb3AgKyAi
cHgiOworICAgICAgICB0aGlzLndyYXBwZXIuc3R5bGUubGVmdCA9IGRyYXduLnRlTGVmdCArICJw
eCI7CisgICAgICB9CisgICAgfSwKKworICAgIC8vIFJlc2V0IHRoZSBpbnB1dCB0byBjb3JyZXNw
b25kIHRvIHRoZSBzZWxlY3Rpb24gKG9yIHRvIGJlIGVtcHR5LAorICAgIC8vIHdoZW4gbm90IHR5
cGluZyBhbmQgbm90aGluZyBpcyBzZWxlY3RlZCkKKyAgICByZXNldDogZnVuY3Rpb24odHlwaW5n
KSB7CisgICAgICBpZiAodGhpcy5jb250ZXh0TWVudVBlbmRpbmcpIHJldHVybjsKKyAgICAgIHZh
ciBtaW5pbWFsLCBzZWxlY3RlZCwgY20gPSB0aGlzLmNtLCBkb2MgPSBjbS5kb2M7CisgICAgICBp
ZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgeworICAgICAgICB0aGlzLnByZXZJbnB1dCA9ICIi
OworICAgICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnByaW1hcnkoKTsKKyAgICAgICAgbWluaW1h
bCA9IGhhc0NvcHlFdmVudCAmJgorICAgICAgICAgIChyYW5nZS50bygpLmxpbmUgLSByYW5nZS5m
cm9tKCkubGluZSA+IDEwMCB8fCAoc2VsZWN0ZWQgPSBjbS5nZXRTZWxlY3Rpb24oKSkubGVuZ3Ro
ID4gMTAwMCk7CisgICAgICAgIHZhciBjb250ZW50ID0gbWluaW1hbCA/ICItIiA6IHNlbGVjdGVk
IHx8IGNtLmdldFNlbGVjdGlvbigpOworICAgICAgICB0aGlzLnRleHRhcmVhLnZhbHVlID0gY29u
dGVudDsKKyAgICAgICAgaWYgKGNtLnN0YXRlLmZvY3VzZWQpIHNlbGVjdElucHV0KHRoaXMudGV4
dGFyZWEpOworICAgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB0aGlzLmhhc1NlbGVj
dGlvbiA9IGNvbnRlbnQ7CisgICAgICB9IGVsc2UgaWYgKCF0eXBpbmcpIHsKKyAgICAgICAgdGhp
cy5wcmV2SW5wdXQgPSB0aGlzLnRleHRhcmVhLnZhbHVlID0gIiI7CisgICAgICAgIGlmIChpZSAm
JiBpZV92ZXJzaW9uID49IDkpIHRoaXMuaGFzU2VsZWN0aW9uID0gbnVsbDsKKyAgICAgIH0KKyAg
ICAgIHRoaXMuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IG1pbmltYWw7CisgICAgfSwKKworICAgIGdl
dEZpZWxkOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMudGV4dGFyZWE7IH0sCisKKyAgICBzdXBw
b3J0c1RvdWNoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9LAorCisgICAgZm9jdXM6IGZ1
bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuY20ub3B0aW9ucy5yZWFkT25seSAhPSAibm9jdXJz
b3IiICYmICghbW9iaWxlIHx8IGFjdGl2ZUVsdCgpICE9IHRoaXMudGV4dGFyZWEpKSB7CisgICAg
ICAgIHRyeSB7IHRoaXMudGV4dGFyZWEuZm9jdXMoKTsgfQorICAgICAgICBjYXRjaCAoZSkge30g
Ly8gSUU4IHdpbGwgdGhyb3cgaWYgdGhlIHRleHRhcmVhIGlzIGRpc3BsYXk6IG5vbmUgb3Igbm90
IGluIERPTQorICAgICAgfQorICAgIH0sCisKKyAgICBibHVyOiBmdW5jdGlvbigpIHsgdGhpcy50
ZXh0YXJlYS5ibHVyKCk7IH0sCisKKyAgICByZXNldFBvc2l0aW9uOiBmdW5jdGlvbigpIHsKKyAg
ICAgIHRoaXMud3JhcHBlci5zdHlsZS50b3AgPSB0aGlzLndyYXBwZXIuc3R5bGUubGVmdCA9IDA7
CisgICAgfSwKKworICAgIHJlY2VpdmVkRm9jdXM6IGZ1bmN0aW9uKCkgeyB0aGlzLnNsb3dQb2xs
KCk7IH0sCisKKyAgICAvLyBQb2xsIGZvciBpbnB1dCBjaGFuZ2VzLCB1c2luZyB0aGUgbm9ybWFs
IHJhdGUgb2YgcG9sbGluZy4gVGhpcworICAgIC8vIHJ1bnMgYXMgbG9uZyBhcyB0aGUgZWRpdG9y
IGlzIGZvY3VzZWQuCisgICAgc2xvd1BvbGw6IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGlucHV0
ID0gdGhpczsKKyAgICAgIGlmIChpbnB1dC5wb2xsaW5nRmFzdCkgcmV0dXJuOworICAgICAgaW5w
dXQucG9sbGluZy5zZXQodGhpcy5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgZnVuY3Rpb24oKSB7
CisgICAgICAgIGlucHV0LnBvbGwoKTsKKyAgICAgICAgaWYgKGlucHV0LmNtLnN0YXRlLmZvY3Vz
ZWQpIGlucHV0LnNsb3dQb2xsKCk7CisgICAgICB9KTsKKyAgICB9LAorCisgICAgLy8gV2hlbiBh
biBldmVudCBoYXMganVzdCBjb21lIGluIHRoYXQgaXMgbGlrZWx5IHRvIGFkZCBvciBjaGFuZ2UK
KyAgICAvLyBzb21ldGhpbmcgaW4gdGhlIGlucHV0IHRleHRhcmVhLCB3ZSBwb2xsIGZhc3Rlciwg
dG8gZW5zdXJlIHRoYXQKKyAgICAvLyB0aGUgY2hhbmdlIGFwcGVhcnMgb24gdGhlIHNjcmVlbiBx
dWlja2x5LgorICAgIGZhc3RQb2xsOiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBtaXNzZWQgPSBm
YWxzZSwgaW5wdXQgPSB0aGlzOworICAgICAgaW5wdXQucG9sbGluZ0Zhc3QgPSB0cnVlOworICAg
ICAgZnVuY3Rpb24gcCgpIHsKKyAgICAgICAgdmFyIGNoYW5nZWQgPSBpbnB1dC5wb2xsKCk7Cisg
ICAgICAgIGlmICghY2hhbmdlZCAmJiAhbWlzc2VkKSB7bWlzc2VkID0gdHJ1ZTsgaW5wdXQucG9s
bGluZy5zZXQoNjAsIHApO30KKyAgICAgICAgZWxzZSB7aW5wdXQucG9sbGluZ0Zhc3QgPSBmYWxz
ZTsgaW5wdXQuc2xvd1BvbGwoKTt9CisgICAgICB9CisgICAgICBpbnB1dC5wb2xsaW5nLnNldCgy
MCwgcCk7CisgICAgfSwKKworICAgIC8vIFJlYWQgaW5wdXQgZnJvbSB0aGUgdGV4dGFyZWEsIGFu
ZCB1cGRhdGUgdGhlIGRvY3VtZW50IHRvIG1hdGNoLgorICAgIC8vIFdoZW4gc29tZXRoaW5nIGlz
IHNlbGVjdGVkLCBpdCBpcyBwcmVzZW50IGluIHRoZSB0ZXh0YXJlYSwgYW5kCisgICAgLy8gc2Vs
ZWN0ZWQgKHVubGVzcyBpdCBpcyBodWdlLCBpbiB3aGljaCBjYXNlIGEgcGxhY2Vob2xkZXIgaXMK
KyAgICAvLyB1c2VkKS4gV2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkLCB0aGUgY3Vyc29yIHNpdHMg
YWZ0ZXIgcHJldmlvdXNseQorICAgIC8vIHNlZW4gdGV4dCAoY2FuIGJlIGVtcHR5KSwgd2hpY2gg
aXMgc3RvcmVkIGluIHByZXZJbnB1dCAod2UgbXVzdAorICAgIC8vIG5vdCByZXNldCB0aGUgdGV4
dGFyZWEgd2hlbiB0eXBpbmcsIGJlY2F1c2UgdGhhdCBicmVha3MgSU1FKS4KKyAgICBwb2xsOiBm
dW5jdGlvbigpIHsKKyAgICAgIHZhciBjbSA9IHRoaXMuY20sIGlucHV0ID0gdGhpcy50ZXh0YXJl
YSwgcHJldklucHV0ID0gdGhpcy5wcmV2SW5wdXQ7CisgICAgICAvLyBTaW5jZSB0aGlzIGlzIGNh
bGxlZCBhICpsb3QqLCB0cnkgdG8gYmFpbCBvdXQgYXMgY2hlYXBseSBhcworICAgICAgLy8gcG9z
c2libGUgd2hlbiBpdCBpcyBjbGVhciB0aGF0IG5vdGhpbmcgaGFwcGVuZWQuIGhhc1NlbGVjdGlv
bgorICAgICAgLy8gd2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIGEgbG90IG9mIHRleHQg
aW4gdGhlIHRleHRhcmVhLAorICAgICAgLy8gaW4gd2hpY2ggY2FzZSByZWFkaW5nIGl0cyB2YWx1
ZSB3b3VsZCBiZSBleHBlbnNpdmUuCisgICAgICBpZiAodGhpcy5jb250ZXh0TWVudVBlbmRpbmcg
fHwgIWNtLnN0YXRlLmZvY3VzZWQgfHwKKyAgICAgICAgICAoaGFzU2VsZWN0aW9uKGlucHV0KSAm
JiAhcHJldklucHV0ICYmICF0aGlzLmNvbXBvc2luZykgfHwKKyAgICAgICAgICBpc1JlYWRPbmx5
KGNtKSB8fCBjbS5vcHRpb25zLmRpc2FibGVJbnB1dCB8fCBjbS5zdGF0ZS5rZXlTZXEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgdmFyIHRleHQgPSBpbnB1dC52YWx1ZTsKKyAgICAg
IC8vIElmIG5vdGhpbmcgY2hhbmdlZCwgYmFpbC4KKyAgICAgIGlmICh0ZXh0ID09IHByZXZJbnB1
dCAmJiAhY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgcmV0dXJuIGZhbHNlOworICAgICAgLy8gV29y
ayBhcm91bmQgbm9uc2Vuc2ljYWwgc2VsZWN0aW9uIHJlc2V0dGluZyBpbiBJRTkvMTAsIGFuZAor
ICAgICAgLy8gaW5leHBsaWNhYmxlIGFwcGVhcmFuY2Ugb2YgcHJpdmF0ZSBhcmVhIHVuaWNvZGUg
Y2hhcmFjdGVycyBvbgorICAgICAgLy8gc29tZSBrZXkgY29tYm9zIGluIE1hYyAoIzI2ODkpLgor
ICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSAmJiB0aGlzLmhhc1NlbGVjdGlvbiA9PT0g
dGV4dCB8fAorICAgICAgICAgIG1hYyAmJiAvW1x1ZjcwMC1cdWY3ZmZdLy50ZXN0KHRleHQpKSB7
CisgICAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgfQorCisgICAgICBpZiAoY20uZG9jLnNlbCA9PSBjbS5kaXNwbGF5LnNlbEZvckNv
bnRleHRNZW51KSB7CisgICAgICAgIHZhciBmaXJzdCA9IHRleHQuY2hhckNvZGVBdCgwKTsKKyAg
ICAgICAgaWYgKGZpcnN0ID09IDB4MjAwYiAmJiAhcHJldklucHV0KSBwcmV2SW5wdXQgPSAiXHUy
MDBiIjsKKyAgICAgICAgaWYgKGZpcnN0ID09IDB4MjFkYSkgeyB0aGlzLnJlc2V0KCk7IHJldHVy
biB0aGlzLmNtLmV4ZWNDb21tYW5kKCJ1bmRvIik7IH0KKyAgICAgIH0KKyAgICAgIC8vIEZpbmQg
dGhlIHBhcnQgb2YgdGhlIGlucHV0IHRoYXQgaXMgYWN0dWFsbHkgbmV3CisgICAgICB2YXIgc2Ft
ZSA9IDAsIGwgPSBNYXRoLm1pbihwcmV2SW5wdXQubGVuZ3RoLCB0ZXh0Lmxlbmd0aCk7CisgICAg
ICB3aGlsZSAoc2FtZSA8IGwgJiYgcHJldklucHV0LmNoYXJDb2RlQXQoc2FtZSkgPT0gdGV4dC5j
aGFyQ29kZUF0KHNhbWUpKSArK3NhbWU7CisKKyAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAg
IHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgeworICAgICAgICBhcHBseVRleHRJbnB1dChjbSwgdGV4
dC5zbGljZShzYW1lKSwgcHJldklucHV0Lmxlbmd0aCAtIHNhbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgIG51bGwsIHNlbGYuY29tcG9zaW5nID8gIipjb21wb3NlIiA6IG51bGwpOworCisgICAg
ICAgIC8vIERvbid0IGxlYXZlIGxvbmcgdGV4dCBpbiB0aGUgdGV4dGFyZWEsIHNpbmNlIGl0IG1h
a2VzIGZ1cnRoZXIgcG9sbGluZyBzbG93CisgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDEwMDAg
fHwgdGV4dC5pbmRleE9mKCJcbiIpID4gLTEpIGlucHV0LnZhbHVlID0gc2VsZi5wcmV2SW5wdXQg
PSAiIjsKKyAgICAgICAgZWxzZSBzZWxmLnByZXZJbnB1dCA9IHRleHQ7CisKKyAgICAgICAgaWYg
KHNlbGYuY29tcG9zaW5nKSB7CisgICAgICAgICAgc2VsZi5jb21wb3NpbmcucmFuZ2UuY2xlYXIo
KTsKKyAgICAgICAgICBzZWxmLmNvbXBvc2luZy5yYW5nZSA9IGNtLm1hcmtUZXh0KHNlbGYuY29t
cG9zaW5nLnN0YXJ0LCBjbS5nZXRDdXJzb3IoInRvIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiAiQ29kZU1pcnJvci1jb21wb3Npbmci
fSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfSwKKwor
ICAgIGVuc3VyZVBvbGxlZDogZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy5wb2xsaW5nRmFz
dCAmJiB0aGlzLnBvbGwoKSkgdGhpcy5wb2xsaW5nRmFzdCA9IGZhbHNlOworICAgIH0sCisKKyAg
ICBvbktleVByZXNzOiBmdW5jdGlvbigpIHsKKyAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49
IDkpIHRoaXMuaGFzU2VsZWN0aW9uID0gbnVsbDsKKyAgICAgIHRoaXMuZmFzdFBvbGwoKTsKKyAg
ICB9LAorCisgICAgb25Db250ZXh0TWVudTogZnVuY3Rpb24oZSkgeworICAgICAgdmFyIGlucHV0
ID0gdGhpcywgY20gPSBpbnB1dC5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXksIHRlID0gaW5wdXQu
dGV4dGFyZWE7CisgICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKSwgc2Nyb2xsUG9z
ID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7CisgICAgICBpZiAoIXBvcyB8fCBwcmVzdG8p
IHJldHVybjsgLy8gT3BlcmEgaXMgZGlmZmljdWx0LgorCisgICAgICAvLyBSZXNldCB0aGUgY3Vy
cmVudCB0ZXh0IHNlbGVjdGlvbiBvbmx5IGlmIHRoZSBjbGljayBpcyBkb25lIG91dHNpZGUgb2Yg
dGhlIHNlbGVjdGlvbgorICAgICAgLy8gYW5kICdyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUn
IG9wdGlvbiBpcyB0cnVlLgorICAgICAgdmFyIHJlc2V0ID0gY20ub3B0aW9ucy5yZXNldFNlbGVj
dGlvbk9uQ29udGV4dE1lbnU7CisgICAgICBpZiAocmVzZXQgJiYgY20uZG9jLnNlbC5jb250YWlu
cyhwb3MpID09IC0xKQorICAgICAgICBvcGVyYXRpb24oY20sIHNldFNlbGVjdGlvbikoY20uZG9j
LCBzaW1wbGVTZWxlY3Rpb24ocG9zKSwgc2VsX2RvbnRTY3JvbGwpOworCisgICAgICB2YXIgb2xk
Q1NTID0gdGUuc3R5bGUuY3NzVGV4dDsKKyAgICAgIGlucHV0LndyYXBwZXIuc3R5bGUucG9zaXRp
b24gPSAiYWJzb2x1dGUiOworICAgICAgdGUuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogZml4
ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIiArIChlLmNsaWVudFkgLSA1KSAr
CisgICAgICAgICJweDsgbGVmdDogIiArIChlLmNsaWVudFggLSA1KSArICJweDsgei1pbmRleDog
MTAwMDsgYmFja2dyb3VuZDogIiArCisgICAgICAgIChpZSA/ICJyZ2JhKDI1NSwgMjU1LCAyNTUs
IC4wNSkiIDogInRyYW5zcGFyZW50IikgKworICAgICAgICAiOyBvdXRsaW5lOiBub25lOyBib3Jk
ZXItd2lkdGg6IDA7IG91dGxpbmU6IG5vbmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4w
NTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUpOyI7CisgICAgICBpZiAod2Via2l0KSB2YXIgb2xk
U2Nyb2xsWSA9IHdpbmRvdy5zY3JvbGxZOyAvLyBXb3JrIGFyb3VuZCBDaHJvbWUgaXNzdWUgKCMy
NzEyKQorICAgICAgZGlzcGxheS5pbnB1dC5mb2N1cygpOworICAgICAgaWYgKHdlYmtpdCkgd2lu
ZG93LnNjcm9sbFRvKG51bGwsIG9sZFNjcm9sbFkpOworICAgICAgZGlzcGxheS5pbnB1dC5yZXNl
dCgpOworICAgICAgLy8gQWRkcyAiU2VsZWN0IGFsbCIgdG8gY29udGV4dCBtZW51IGluIEZGCisg
ICAgICBpZiAoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHRlLnZhbHVlID0gaW5wdXQucHJldklu
cHV0ID0gIiAiOworICAgICAgaW5wdXQuY29udGV4dE1lbnVQZW5kaW5nID0gdHJ1ZTsKKyAgICAg
IGRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBjbS5kb2Muc2VsOworICAgICAgY2xlYXJUaW1l
b3V0KGRpc3BsYXkuZGV0ZWN0aW5nU2VsZWN0QWxsKTsKKworICAgICAgLy8gU2VsZWN0LWFsbCB3
aWxsIGJlIGdyZXllZCBvdXQgaWYgdGhlcmUncyBub3RoaW5nIHRvIHNlbGVjdCwgc28KKyAgICAg
IC8vIHRoaXMgYWRkcyBhIHplcm8td2lkdGggc3BhY2Ugc28gdGhhdCB3ZSBjYW4gbGF0ZXIgY2hl
Y2sgd2hldGhlcgorICAgICAgLy8gaXQgZ290IHNlbGVjdGVkLgorICAgICAgZnVuY3Rpb24gcHJl
cGFyZVNlbGVjdEFsbEhhY2soKSB7CisgICAgICAgIGlmICh0ZS5zZWxlY3Rpb25TdGFydCAhPSBu
dWxsKSB7CisgICAgICAgICAgdmFyIHNlbGVjdGVkID0gY20uc29tZXRoaW5nU2VsZWN0ZWQoKTsK
KyAgICAgICAgICB2YXIgZXh0dmFsID0gIlx1MjAwYiIgKyAoc2VsZWN0ZWQgPyB0ZS52YWx1ZSA6
ICIiKTsKKyAgICAgICAgICB0ZS52YWx1ZSA9ICJcdTIxZGEiOyAvLyBVc2VkIHRvIGNhdGNoIGNv
bnRleHQtbWVudSB1bmRvCisgICAgICAgICAgdGUudmFsdWUgPSBleHR2YWw7CisgICAgICAgICAg
aW5wdXQucHJldklucHV0ID0gc2VsZWN0ZWQgPyAiIiA6ICJcdTIwMGIiOworICAgICAgICAgIHRl
LnNlbGVjdGlvblN0YXJ0ID0gMTsgdGUuc2VsZWN0aW9uRW5kID0gZXh0dmFsLmxlbmd0aDsKKyAg
ICAgICAgICAvLyBSZS1zZXQgdGhpcywgaW4gY2FzZSBzb21lIG90aGVyIGhhbmRsZXIgdG91Y2hl
ZCB0aGUKKyAgICAgICAgICAvLyBzZWxlY3Rpb24gaW4gdGhlIG1lYW50aW1lLgorICAgICAgICAg
IGRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBjbS5kb2Muc2VsOworICAgICAgICB9CisgICAg
ICB9CisgICAgICBmdW5jdGlvbiByZWhpZGUoKSB7CisgICAgICAgIGlucHV0LmNvbnRleHRNZW51
UGVuZGluZyA9IGZhbHNlOworICAgICAgICBpbnB1dC53cmFwcGVyLnN0eWxlLnBvc2l0aW9uID0g
InJlbGF0aXZlIjsKKyAgICAgICAgdGUuc3R5bGUuY3NzVGV4dCA9IG9sZENTUzsKKyAgICAgICAg
aWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSBkaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9w
KGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zKTsKKworICAgICAgICAvLyBU
cnkgdG8gZGV0ZWN0IHRoZSB1c2VyIGNob29zaW5nIHNlbGVjdC1hbGwKKyAgICAgICAgaWYgKHRl
LnNlbGVjdGlvblN0YXJ0ICE9IG51bGwpIHsKKyAgICAgICAgICBpZiAoIWllIHx8IChpZSAmJiBp
ZV92ZXJzaW9uIDwgOSkpIHByZXBhcmVTZWxlY3RBbGxIYWNrKCk7CisgICAgICAgICAgdmFyIGkg
PSAwLCBwb2xsID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoZGlzcGxheS5zZWxGb3JD
b250ZXh0TWVudSA9PSBjbS5kb2Muc2VsICYmIHRlLnNlbGVjdGlvblN0YXJ0ID09IDAgJiYKKyAg
ICAgICAgICAgICAgICB0ZS5zZWxlY3Rpb25FbmQgPiAwICYmIGlucHV0LnByZXZJbnB1dCA9PSAi
XHUyMDBiIikKKyAgICAgICAgICAgICAgb3BlcmF0aW9uKGNtLCBjb21tYW5kcy5zZWxlY3RBbGwp
KGNtKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGkrKyA8IDEwKSBkaXNwbGF5LmRldGVjdGluZ1Nl
bGVjdEFsbCA9IHNldFRpbWVvdXQocG9sbCwgNTAwKTsKKyAgICAgICAgICAgIGVsc2UgZGlzcGxh
eS5pbnB1dC5yZXNldCgpOworICAgICAgICAgIH07CisgICAgICAgICAgZGlzcGxheS5kZXRlY3Rp
bmdTZWxlY3RBbGwgPSBzZXRUaW1lb3V0KHBvbGwsIDIwMCk7CisgICAgICAgIH0KKyAgICAgIH0K
KworICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSkgcHJlcGFyZVNlbGVjdEFsbEhhY2so
KTsKKyAgICAgIGlmIChjYXB0dXJlUmlnaHRDbGljaykgeworICAgICAgICBlX3N0b3AoZSk7Cisg
ICAgICAgIHZhciBtb3VzZXVwID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgb2ZmKHdpbmRvdywg
Im1vdXNldXAiLCBtb3VzZXVwKTsKKyAgICAgICAgICBzZXRUaW1lb3V0KHJlaGlkZSwgMjApOwor
ICAgICAgICB9OworICAgICAgICBvbih3aW5kb3csICJtb3VzZXVwIiwgbW91c2V1cCk7CisgICAg
ICB9IGVsc2UgeworICAgICAgICBzZXRUaW1lb3V0KHJlaGlkZSwgNTApOworICAgICAgfQorICAg
IH0sCisKKyAgICBzZXRVbmVkaXRhYmxlOiBub3RoaW5nLAorCisgICAgbmVlZHNDb250ZW50QXR0
cmlidXRlOiBmYWxzZQorICB9LCBUZXh0YXJlYUlucHV0LnByb3RvdHlwZSk7CisKKyAgLy8gQ09O
VEVOVEVESVRBQkxFIElOUFVUIFNUWUxFCisKKyAgZnVuY3Rpb24gQ29udGVudEVkaXRhYmxlSW5w
dXQoY20pIHsKKyAgICB0aGlzLmNtID0gY207CisgICAgdGhpcy5sYXN0QW5jaG9yTm9kZSA9IHRo
aXMubGFzdEFuY2hvck9mZnNldCA9IHRoaXMubGFzdEZvY3VzTm9kZSA9IHRoaXMubGFzdEZvY3Vz
T2Zmc2V0ID0gbnVsbDsKKyAgICB0aGlzLnBvbGxpbmcgPSBuZXcgRGVsYXllZCgpOworICAgIHRo
aXMuZ3JhY2VQZXJpb2QgPSBmYWxzZTsKKyAgfQorCisgIENvbnRlbnRFZGl0YWJsZUlucHV0LnBy
b3RvdHlwZSA9IGNvcHlPYmooeworICAgIGluaXQ6IGZ1bmN0aW9uKGRpc3BsYXkpIHsKKyAgICAg
IHZhciBpbnB1dCA9IHRoaXMsIGNtID0gaW5wdXQuY207CisgICAgICB2YXIgZGl2ID0gaW5wdXQu
ZGl2ID0gZGlzcGxheS5saW5lRGl2OworICAgICAgZGl2LmNvbnRlbnRFZGl0YWJsZSA9ICJ0cnVl
IjsKKyAgICAgIGRpc2FibGVCcm93c2VyTWFnaWMoZGl2KTsKKworICAgICAgb24oZGl2LCAicGFz
dGUiLCBmdW5jdGlvbihlKSB7IGhhbmRsZVBhc3RlKGUsIGNtKTsgfSkKKworICAgICAgb24oZGl2
LCAiY29tcG9zaXRpb25zdGFydCIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIGRhdGEgPSBl
LmRhdGE7CisgICAgICAgIGlucHV0LmNvbXBvc2luZyA9IHtzZWw6IGNtLmRvYy5zZWwsIGRhdGE6
IGRhdGEsIHN0YXJ0RGF0YTogZGF0YX07CisgICAgICAgIGlmICghZGF0YSkgcmV0dXJuOworICAg
ICAgICB2YXIgcHJpbSA9IGNtLmRvYy5zZWwucHJpbWFyeSgpOworICAgICAgICB2YXIgbGluZSA9
IGNtLmdldExpbmUocHJpbS5oZWFkLmxpbmUpOworICAgICAgICB2YXIgZm91bmQgPSBsaW5lLmlu
ZGV4T2YoZGF0YSwgTWF0aC5tYXgoMCwgcHJpbS5oZWFkLmNoIC0gZGF0YS5sZW5ndGgpKTsKKyAg
ICAgICAgaWYgKGZvdW5kID4gLTEgJiYgZm91bmQgPD0gcHJpbS5oZWFkLmNoKQorICAgICAgICAg
IGlucHV0LmNvbXBvc2luZy5zZWwgPSBzaW1wbGVTZWxlY3Rpb24oUG9zKHByaW0uaGVhZC5saW5l
LCBmb3VuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQb3MocHJpbS5oZWFkLmxpbmUsIGZvdW5kICsgZGF0YS5sZW5ndGgpKTsKKyAgICAgIH0pOwor
ICAgICAgb24oZGl2LCAiY29tcG9zaXRpb251cGRhdGUiLCBmdW5jdGlvbihlKSB7CisgICAgICAg
IGlucHV0LmNvbXBvc2luZy5kYXRhID0gZS5kYXRhOworICAgICAgfSk7CisgICAgICBvbihkaXYs
ICJjb21wb3NpdGlvbmVuZCIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdmFyIG91cnMgPSBpbnB1
dC5jb21wb3Npbmc7CisgICAgICAgIGlmICghb3VycykgcmV0dXJuOworICAgICAgICBpZiAoZS5k
YXRhICE9IG91cnMuc3RhcnREYXRhICYmICEvXHUyMDBiLy50ZXN0KGUuZGF0YSkpCisgICAgICAg
ICAgb3Vycy5kYXRhID0gZS5kYXRhOworICAgICAgICAvLyBOZWVkIGEgc21hbGwgZGVsYXkgdG8g
cHJldmVudCBvdGhlciBjb2RlIChpbnB1dCBldmVudCwKKyAgICAgICAgLy8gc2VsZWN0aW9uIHBv
bGxpbmcpIGZyb20gZG9pbmcgZGFtYWdlIHdoZW4gZmlyZWQgcmlnaHQgYWZ0ZXIKKyAgICAgICAg
Ly8gY29tcG9zaXRpb25lbmQuCisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgaWYgKCFvdXJzLmhhbmRsZWQpCisgICAgICAgICAgICBpbnB1dC5hcHBseUNvbXBvc2l0
aW9uKG91cnMpOworICAgICAgICAgIGlmIChpbnB1dC5jb21wb3NpbmcgPT0gb3VycykKKyAgICAg
ICAgICAgIGlucHV0LmNvbXBvc2luZyA9IG51bGw7CisgICAgICAgIH0sIDUwKTsKKyAgICAgIH0p
OworCisgICAgICBvbihkaXYsICJ0b3VjaHN0YXJ0IiwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlu
cHV0LmZvcmNlQ29tcG9zaXRpb25FbmQoKTsKKyAgICAgIH0pOworCisgICAgICBvbihkaXYsICJp
bnB1dCIsIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoaW5wdXQuY29tcG9zaW5nKSByZXR1cm47
CisgICAgICAgIGlmICghaW5wdXQucG9sbENvbnRlbnQoKSkKKyAgICAgICAgICBydW5Jbk9wKGlu
cHV0LmNtLCBmdW5jdGlvbigpIHtyZWdDaGFuZ2UoY20pO30pOworICAgICAgfSk7CisKKyAgICAg
IGZ1bmN0aW9uIG9uQ29weUN1dChlKSB7CisgICAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3Rl
ZCgpKSB7CisgICAgICAgICAgbGFzdENvcGllZCA9IGNtLmdldFNlbGVjdGlvbnMoKTsKKyAgICAg
ICAgICBpZiAoZS50eXBlID09ICJjdXQiKSBjbS5yZXBsYWNlU2VsZWN0aW9uKCIiLCBudWxsLCAi
Y3V0Iik7CisgICAgICAgIH0gZWxzZSBpZiAoIWNtLm9wdGlvbnMubGluZVdpc2VDb3B5Q3V0KSB7
CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHZhciByYW5n
ZXMgPSBjb3B5YWJsZVJhbmdlcyhjbSk7CisgICAgICAgICAgbGFzdENvcGllZCA9IHJhbmdlcy50
ZXh0OworICAgICAgICAgIGlmIChlLnR5cGUgPT0gImN1dCIpIHsKKyAgICAgICAgICAgIGNtLm9w
ZXJhdGlvbihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgY20uc2V0U2VsZWN0aW9ucyhyYW5n
ZXMucmFuZ2VzLCAwLCBzZWxfZG9udFNjcm9sbCk7CisgICAgICAgICAgICAgIGNtLnJlcGxhY2VT
ZWxlY3Rpb24oIiIsIG51bGwsICJjdXQiKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAvLyBpT1MgZXhwb3NlcyB0aGUgY2xpcGJvYXJkIEFQSSwgYnV0
IHNlZW1zIHRvIGRpc2NhcmQgY29udGVudCBpbnNlcnRlZCBpbnRvIGl0CisgICAgICAgIGlmIChl
LmNsaXBib2FyZERhdGEgJiYgIWlvcykgeworICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsK
KyAgICAgICAgICBlLmNsaXBib2FyZERhdGEuY2xlYXJEYXRhKCk7CisgICAgICAgICAgZS5jbGlw
Ym9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLCBsYXN0Q29waWVkLmpvaW4oIlxuIikpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIE9sZC1mYXNoaW9uZWQgYnJpZWZseS1mb2N1
cy1hLXRleHRhcmVhIGhhY2sKKyAgICAgICAgICB2YXIga2x1ZGdlID0gaGlkZGVuVGV4dGFyZWEo
KSwgdGUgPSBrbHVkZ2UuZmlyc3RDaGlsZDsKKyAgICAgICAgICBjbS5kaXNwbGF5LmxpbmVTcGFj
ZS5pbnNlcnRCZWZvcmUoa2x1ZGdlLCBjbS5kaXNwbGF5LmxpbmVTcGFjZS5maXJzdENoaWxkKTsK
KyAgICAgICAgICB0ZS52YWx1ZSA9IGxhc3RDb3BpZWQuam9pbigiXG4iKTsKKyAgICAgICAgICB2
YXIgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50OworICAgICAgICAgIHNlbGVjdElu
cHV0KHRlKTsKKyAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
Y20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoa2x1ZGdlKTsKKyAgICAgICAgICAgIGhh
ZEZvY3VzLmZvY3VzKCk7CisgICAgICAgICAgfSwgNTApOworICAgICAgICB9CisgICAgICB9Cisg
ICAgICBvbihkaXYsICJjb3B5Iiwgb25Db3B5Q3V0KTsKKyAgICAgIG9uKGRpdiwgImN1dCIsIG9u
Q29weUN1dCk7CisgICAgfSwKKworICAgIHByZXBhcmVTZWxlY3Rpb246IGZ1bmN0aW9uKCkgewor
ICAgICAgdmFyIHJlc3VsdCA9IHByZXBhcmVTZWxlY3Rpb24odGhpcy5jbSwgZmFsc2UpOworICAg
ICAgcmVzdWx0LmZvY3VzID0gdGhpcy5jbS5zdGF0ZS5mb2N1c2VkOworICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9LAorCisgICAgc2hvd1NlbGVjdGlvbjogZnVuY3Rpb24oaW5mbykgeworICAg
ICAgaWYgKCFpbmZvIHx8ICF0aGlzLmNtLmRpc3BsYXkudmlldy5sZW5ndGgpIHJldHVybjsKKyAg
ICAgIGlmIChpbmZvLmZvY3VzKSB0aGlzLnNob3dQcmltYXJ5U2VsZWN0aW9uKCk7CisgICAgICB0
aGlzLnNob3dNdWx0aXBsZVNlbGVjdGlvbnMoaW5mbyk7CisgICAgfSwKKworICAgIHNob3dQcmlt
YXJ5U2VsZWN0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCksIHByaW0gPSB0aGlzLmNtLmRvYy5zZWwucHJpbWFyeSgpOworICAgICAgdmFyIGN1
ckFuY2hvciA9IGRvbVRvUG9zKHRoaXMuY20sIHNlbC5hbmNob3JOb2RlLCBzZWwuYW5jaG9yT2Zm
c2V0KTsKKyAgICAgIHZhciBjdXJGb2N1cyA9IGRvbVRvUG9zKHRoaXMuY20sIHNlbC5mb2N1c05v
ZGUsIHNlbC5mb2N1c09mZnNldCk7CisgICAgICBpZiAoY3VyQW5jaG9yICYmICFjdXJBbmNob3Iu
YmFkICYmIGN1ckZvY3VzICYmICFjdXJGb2N1cy5iYWQgJiYKKyAgICAgICAgICBjbXAobWluUG9z
KGN1ckFuY2hvciwgY3VyRm9jdXMpLCBwcmltLmZyb20oKSkgPT0gMCAmJgorICAgICAgICAgIGNt
cChtYXhQb3MoY3VyQW5jaG9yLCBjdXJGb2N1cyksIHByaW0udG8oKSkgPT0gMCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgICB2YXIgc3RhcnQgPSBwb3NUb0RPTSh0aGlzLmNtLCBwcmltLmZyb20o
KSk7CisgICAgICB2YXIgZW5kID0gcG9zVG9ET00odGhpcy5jbSwgcHJpbS50bygpKTsKKyAgICAg
IGlmICghc3RhcnQgJiYgIWVuZCkgcmV0dXJuOworCisgICAgICB2YXIgdmlldyA9IHRoaXMuY20u
ZGlzcGxheS52aWV3OworICAgICAgdmFyIG9sZCA9IHNlbC5yYW5nZUNvdW50ICYmIHNlbC5nZXRS
YW5nZUF0KDApOworICAgICAgaWYgKCFzdGFydCkgeworICAgICAgICBzdGFydCA9IHtub2RlOiB2
aWV3WzBdLm1lYXN1cmUubWFwWzJdLCBvZmZzZXQ6IDB9OworICAgICAgfSBlbHNlIGlmICghZW5k
KSB7IC8vIEZJWE1FIGRhbmdlcm91c2x5IGhhY2t5CisgICAgICAgIHZhciBtZWFzdXJlID0gdmll
d1t2aWV3Lmxlbmd0aCAtIDFdLm1lYXN1cmU7CisgICAgICAgIHZhciBtYXAgPSBtZWFzdXJlLm1h
cHMgPyBtZWFzdXJlLm1hcHNbbWVhc3VyZS5tYXBzLmxlbmd0aCAtIDFdIDogbWVhc3VyZS5tYXA7
CisgICAgICAgIGVuZCA9IHtub2RlOiBtYXBbbWFwLmxlbmd0aCAtIDFdLCBvZmZzZXQ6IG1hcFtt
YXAubGVuZ3RoIC0gMl0gLSBtYXBbbWFwLmxlbmd0aCAtIDNdfTsKKyAgICAgIH0KKworICAgICAg
dHJ5IHsgdmFyIHJuZyA9IHJhbmdlKHN0YXJ0Lm5vZGUsIHN0YXJ0Lm9mZnNldCwgZW5kLm9mZnNl
dCwgZW5kLm5vZGUpOyB9CisgICAgICBjYXRjaChlKSB7fSAvLyBPdXIgbW9kZWwgb2YgdGhlIERP
TSBtaWdodCBiZSBvdXRkYXRlZCwgaW4gd2hpY2ggY2FzZSB0aGUgcmFuZ2Ugd2UgdHJ5IHRvIHNl
dCBjYW4gYmUgaW1wb3NzaWJsZQorICAgICAgaWYgKHJuZykgeworICAgICAgICBzZWwucmVtb3Zl
QWxsUmFuZ2VzKCk7CisgICAgICAgIHNlbC5hZGRSYW5nZShybmcpOworICAgICAgICBpZiAob2xk
ICYmIHNlbC5hbmNob3JOb2RlID09IG51bGwpIHNlbC5hZGRSYW5nZShvbGQpOworICAgICAgICBl
bHNlIGlmIChnZWNrbykgdGhpcy5zdGFydEdyYWNlUGVyaW9kKCk7CisgICAgICB9CisgICAgICB0
aGlzLnJlbWVtYmVyU2VsZWN0aW9uKCk7CisgICAgfSwKKworICAgIHN0YXJ0R3JhY2VQZXJpb2Q6
IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGlucHV0ID0gdGhpczsKKyAgICAgIGNsZWFyVGltZW91
dCh0aGlzLmdyYWNlUGVyaW9kKTsKKyAgICAgIHRoaXMuZ3JhY2VQZXJpb2QgPSBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgICBpbnB1dC5ncmFjZVBlcmlvZCA9IGZhbHNlOworICAgICAg
ICBpZiAoaW5wdXQuc2VsZWN0aW9uQ2hhbmdlZCgpKQorICAgICAgICAgIGlucHV0LmNtLm9wZXJh
dGlvbihmdW5jdGlvbigpIHsgaW5wdXQuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7
IH0pOworICAgICAgfSwgMjApOworICAgIH0sCisKKyAgICBzaG93TXVsdGlwbGVTZWxlY3Rpb25z
OiBmdW5jdGlvbihpbmZvKSB7CisgICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZCh0aGlzLmNtLmRp
c3BsYXkuY3Vyc29yRGl2LCBpbmZvLmN1cnNvcnMpOworICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRB
ZGQodGhpcy5jbS5kaXNwbGF5LnNlbGVjdGlvbkRpdiwgaW5mby5zZWxlY3Rpb24pOworICAgIH0s
CisKKyAgICByZW1lbWJlclNlbGVjdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgc2VsID0g
d2luZG93LmdldFNlbGVjdGlvbigpOworICAgICAgdGhpcy5sYXN0QW5jaG9yTm9kZSA9IHNlbC5h
bmNob3JOb2RlOyB0aGlzLmxhc3RBbmNob3JPZmZzZXQgPSBzZWwuYW5jaG9yT2Zmc2V0OworICAg
ICAgdGhpcy5sYXN0Rm9jdXNOb2RlID0gc2VsLmZvY3VzTm9kZTsgdGhpcy5sYXN0Rm9jdXNPZmZz
ZXQgPSBzZWwuZm9jdXNPZmZzZXQ7CisgICAgfSwKKworICAgIHNlbGVjdGlvbkluRWRpdG9yOiBm
dW5jdGlvbigpIHsKKyAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAg
ICBpZiAoIXNlbC5yYW5nZUNvdW50KSByZXR1cm4gZmFsc2U7CisgICAgICB2YXIgbm9kZSA9IHNl
bC5nZXRSYW5nZUF0KDApLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOworICAgICAgcmV0dXJuIGNv
bnRhaW5zKHRoaXMuZGl2LCBub2RlKTsKKyAgICB9LAorCisgICAgZm9jdXM6IGZ1bmN0aW9uKCkg
eworICAgICAgaWYgKHRoaXMuY20ub3B0aW9ucy5yZWFkT25seSAhPSAibm9jdXJzb3IiKSB0aGlz
LmRpdi5mb2N1cygpOworICAgIH0sCisgICAgYmx1cjogZnVuY3Rpb24oKSB7IHRoaXMuZGl2LmJs
dXIoKTsgfSwKKyAgICBnZXRGaWVsZDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmRpdjsgfSwK
KworICAgIHN1cHBvcnRzVG91Y2g6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSwKKworICAg
IHJlY2VpdmVkRm9jdXM6IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGlucHV0ID0gdGhpczsKKyAg
ICAgIGlmICh0aGlzLnNlbGVjdGlvbkluRWRpdG9yKCkpCisgICAgICAgIHRoaXMucG9sbFNlbGVj
dGlvbigpOworICAgICAgZWxzZQorICAgICAgICBydW5Jbk9wKHRoaXMuY20sIGZ1bmN0aW9uKCkg
eyBpbnB1dC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsgfSk7CisKKyAgICAgIGZ1
bmN0aW9uIHBvbGwoKSB7CisgICAgICAgIGlmIChpbnB1dC5jbS5zdGF0ZS5mb2N1c2VkKSB7Cisg
ICAgICAgICAgaW5wdXQucG9sbFNlbGVjdGlvbigpOworICAgICAgICAgIGlucHV0LnBvbGxpbmcu
c2V0KGlucHV0LmNtLm9wdGlvbnMucG9sbEludGVydmFsLCBwb2xsKTsKKyAgICAgICAgfQorICAg
ICAgfQorICAgICAgdGhpcy5wb2xsaW5nLnNldCh0aGlzLmNtLm9wdGlvbnMucG9sbEludGVydmFs
LCBwb2xsKTsKKyAgICB9LAorCisgICAgc2VsZWN0aW9uQ2hhbmdlZDogZnVuY3Rpb24oKSB7Cisg
ICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOworICAgICAgcmV0dXJuIHNlbC5h
bmNob3JOb2RlICE9IHRoaXMubGFzdEFuY2hvck5vZGUgfHwgc2VsLmFuY2hvck9mZnNldCAhPSB0
aGlzLmxhc3RBbmNob3JPZmZzZXQgfHwKKyAgICAgICAgc2VsLmZvY3VzTm9kZSAhPSB0aGlzLmxh
c3RGb2N1c05vZGUgfHwgc2VsLmZvY3VzT2Zmc2V0ICE9IHRoaXMubGFzdEZvY3VzT2Zmc2V0Owor
ICAgIH0sCisKKyAgICBwb2xsU2VsZWN0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgIGlmICghdGhp
cy5jb21wb3NpbmcgJiYgIXRoaXMuZ3JhY2VQZXJpb2QgJiYgdGhpcy5zZWxlY3Rpb25DaGFuZ2Vk
KCkpIHsKKyAgICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSwgY20gPSB0aGlz
LmNtOworICAgICAgICB0aGlzLnJlbWVtYmVyU2VsZWN0aW9uKCk7CisgICAgICAgIHZhciBhbmNo
b3IgPSBkb21Ub1BvcyhjbSwgc2VsLmFuY2hvck5vZGUsIHNlbC5hbmNob3JPZmZzZXQpOworICAg
ICAgICB2YXIgaGVhZCA9IGRvbVRvUG9zKGNtLCBzZWwuZm9jdXNOb2RlLCBzZWwuZm9jdXNPZmZz
ZXQpOworICAgICAgICBpZiAoYW5jaG9yICYmIGhlYWQpIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkg
eworICAgICAgICAgIHNldFNlbGVjdGlvbihjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihhbmNob3Is
IGhlYWQpLCBzZWxfZG9udFNjcm9sbCk7CisgICAgICAgICAgaWYgKGFuY2hvci5iYWQgfHwgaGVh
ZC5iYWQpIGNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOworICAgICAgICB9KTsKKyAg
ICAgIH0KKyAgICB9LAorCisgICAgcG9sbENvbnRlbnQ6IGZ1bmN0aW9uKCkgeworICAgICAgdmFy
IGNtID0gdGhpcy5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNlbCA9IGNtLmRvYy5zZWwucHJp
bWFyeSgpOworICAgICAgdmFyIGZyb20gPSBzZWwuZnJvbSgpLCB0byA9IHNlbC50bygpOworICAg
ICAgaWYgKGZyb20ubGluZSA8IGRpc3BsYXkudmlld0Zyb20gfHwgdG8ubGluZSA+IGRpc3BsYXku
dmlld1RvIC0gMSkgcmV0dXJuIGZhbHNlOworCisgICAgICB2YXIgZnJvbUluZGV4OworICAgICAg
aWYgKGZyb20ubGluZSA9PSBkaXNwbGF5LnZpZXdGcm9tIHx8IChmcm9tSW5kZXggPSBmaW5kVmll
d0luZGV4KGNtLCBmcm9tLmxpbmUpKSA9PSAwKSB7CisgICAgICAgIHZhciBmcm9tTGluZSA9IGxp
bmVObyhkaXNwbGF5LnZpZXdbMF0ubGluZSk7CisgICAgICAgIHZhciBmcm9tTm9kZSA9IGRpc3Bs
YXkudmlld1swXS5ub2RlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIGZyb21MaW5lID0g
bGluZU5vKGRpc3BsYXkudmlld1tmcm9tSW5kZXhdLmxpbmUpOworICAgICAgICB2YXIgZnJvbU5v
ZGUgPSBkaXNwbGF5LnZpZXdbZnJvbUluZGV4IC0gMV0ubm9kZS5uZXh0U2libGluZzsKKyAgICAg
IH0KKyAgICAgIHZhciB0b0luZGV4ID0gZmluZFZpZXdJbmRleChjbSwgdG8ubGluZSk7CisgICAg
ICBpZiAodG9JbmRleCA9PSBkaXNwbGF5LnZpZXcubGVuZ3RoIC0gMSkgeworICAgICAgICB2YXIg
dG9MaW5lID0gZGlzcGxheS52aWV3VG8gLSAxOworICAgICAgICB2YXIgdG9Ob2RlID0gZGlzcGxh
eS5saW5lRGl2Lmxhc3RDaGlsZDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciB0b0xpbmUg
PSBsaW5lTm8oZGlzcGxheS52aWV3W3RvSW5kZXggKyAxXS5saW5lKSAtIDE7CisgICAgICAgIHZh
ciB0b05vZGUgPSBkaXNwbGF5LnZpZXdbdG9JbmRleCArIDFdLm5vZGUucHJldmlvdXNTaWJsaW5n
OworICAgICAgfQorCisgICAgICB2YXIgbmV3VGV4dCA9IGNtLmRvYy5zcGxpdExpbmVzKGRvbVRl
eHRCZXR3ZWVuKGNtLCBmcm9tTm9kZSwgdG9Ob2RlLCBmcm9tTGluZSwgdG9MaW5lKSk7CisgICAg
ICB2YXIgb2xkVGV4dCA9IGdldEJldHdlZW4oY20uZG9jLCBQb3MoZnJvbUxpbmUsIDApLCBQb3Mo
dG9MaW5lLCBnZXRMaW5lKGNtLmRvYywgdG9MaW5lKS50ZXh0Lmxlbmd0aCkpOworICAgICAgd2hp
bGUgKG5ld1RleHQubGVuZ3RoID4gMSAmJiBvbGRUZXh0Lmxlbmd0aCA+IDEpIHsKKyAgICAgICAg
aWYgKGxzdChuZXdUZXh0KSA9PSBsc3Qob2xkVGV4dCkpIHsgbmV3VGV4dC5wb3AoKTsgb2xkVGV4
dC5wb3AoKTsgdG9MaW5lLS07IH0KKyAgICAgICAgZWxzZSBpZiAobmV3VGV4dFswXSA9PSBvbGRU
ZXh0WzBdKSB7IG5ld1RleHQuc2hpZnQoKTsgb2xkVGV4dC5zaGlmdCgpOyBmcm9tTGluZSsrOyB9
CisgICAgICAgIGVsc2UgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHZhciBjdXRGcm9udCA9IDAs
IGN1dEVuZCA9IDA7CisgICAgICB2YXIgbmV3VG9wID0gbmV3VGV4dFswXSwgb2xkVG9wID0gb2xk
VGV4dFswXSwgbWF4Q3V0RnJvbnQgPSBNYXRoLm1pbihuZXdUb3AubGVuZ3RoLCBvbGRUb3AubGVu
Z3RoKTsKKyAgICAgIHdoaWxlIChjdXRGcm9udCA8IG1heEN1dEZyb250ICYmIG5ld1RvcC5jaGFy
Q29kZUF0KGN1dEZyb250KSA9PSBvbGRUb3AuY2hhckNvZGVBdChjdXRGcm9udCkpCisgICAgICAg
ICsrY3V0RnJvbnQ7CisgICAgICB2YXIgbmV3Qm90ID0gbHN0KG5ld1RleHQpLCBvbGRCb3QgPSBs
c3Qob2xkVGV4dCk7CisgICAgICB2YXIgbWF4Q3V0RW5kID0gTWF0aC5taW4obmV3Qm90Lmxlbmd0
aCAtIChuZXdUZXh0Lmxlbmd0aCA9PSAxID8gY3V0RnJvbnQgOiAwKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvbGRCb3QubGVuZ3RoIC0gKG9sZFRleHQubGVuZ3RoID09IDEgPyBj
dXRGcm9udCA6IDApKTsKKyAgICAgIHdoaWxlIChjdXRFbmQgPCBtYXhDdXRFbmQgJiYKKyAgICAg
ICAgICAgICBuZXdCb3QuY2hhckNvZGVBdChuZXdCb3QubGVuZ3RoIC0gY3V0RW5kIC0gMSkgPT0g
b2xkQm90LmNoYXJDb2RlQXQob2xkQm90Lmxlbmd0aCAtIGN1dEVuZCAtIDEpKQorICAgICAgICAr
K2N1dEVuZDsKKworICAgICAgbmV3VGV4dFtuZXdUZXh0Lmxlbmd0aCAtIDFdID0gbmV3Qm90LnNs
aWNlKDAsIG5ld0JvdC5sZW5ndGggLSBjdXRFbmQpOworICAgICAgbmV3VGV4dFswXSA9IG5ld1Rl
eHRbMF0uc2xpY2UoY3V0RnJvbnQpOworCisgICAgICB2YXIgY2hGcm9tID0gUG9zKGZyb21MaW5l
LCBjdXRGcm9udCk7CisgICAgICB2YXIgY2hUbyA9IFBvcyh0b0xpbmUsIG9sZFRleHQubGVuZ3Ro
ID8gbHN0KG9sZFRleHQpLmxlbmd0aCAtIGN1dEVuZCA6IDApOworICAgICAgaWYgKG5ld1RleHQu
bGVuZ3RoID4gMSB8fCBuZXdUZXh0WzBdIHx8IGNtcChjaEZyb20sIGNoVG8pKSB7CisgICAgICAg
IHJlcGxhY2VSYW5nZShjbS5kb2MsIG5ld1RleHQsIGNoRnJvbSwgY2hUbywgIitpbnB1dCIpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgZW5zdXJlUG9sbGVk
OiBmdW5jdGlvbigpIHsKKyAgICAgIHRoaXMuZm9yY2VDb21wb3NpdGlvbkVuZCgpOworICAgIH0s
CisgICAgcmVzZXQ6IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy5mb3JjZUNvbXBvc2l0aW9uRW5k
KCk7CisgICAgfSwKKyAgICBmb3JjZUNvbXBvc2l0aW9uRW5kOiBmdW5jdGlvbigpIHsKKyAgICAg
IGlmICghdGhpcy5jb21wb3NpbmcgfHwgdGhpcy5jb21wb3NpbmcuaGFuZGxlZCkgcmV0dXJuOwor
ICAgICAgdGhpcy5hcHBseUNvbXBvc2l0aW9uKHRoaXMuY29tcG9zaW5nKTsKKyAgICAgIHRoaXMu
Y29tcG9zaW5nLmhhbmRsZWQgPSB0cnVlOworICAgICAgdGhpcy5kaXYuYmx1cigpOworICAgICAg
dGhpcy5kaXYuZm9jdXMoKTsKKyAgICB9LAorICAgIGFwcGx5Q29tcG9zaXRpb246IGZ1bmN0aW9u
KGNvbXBvc2luZykgeworICAgICAgaWYgKGNvbXBvc2luZy5kYXRhICYmIGNvbXBvc2luZy5kYXRh
ICE9IGNvbXBvc2luZy5zdGFydERhdGEpCisgICAgICAgIG9wZXJhdGlvbih0aGlzLmNtLCBhcHBs
eVRleHRJbnB1dCkodGhpcy5jbSwgY29tcG9zaW5nLmRhdGEsIDAsIGNvbXBvc2luZy5zZWwpOwor
ICAgIH0sCisKKyAgICBzZXRVbmVkaXRhYmxlOiBmdW5jdGlvbihub2RlKSB7CisgICAgICBub2Rl
LnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgImZhbHNlIik7CisgICAgfSwKKworICAg
IG9uS2V5UHJlc3M6IGZ1bmN0aW9uKGUpIHsKKyAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAg
ICAgIG9wZXJhdGlvbih0aGlzLmNtLCBhcHBseVRleHRJbnB1dCkodGhpcy5jbSwgU3RyaW5nLmZy
b21DaGFyQ29kZShlLmNoYXJDb2RlID09IG51bGwgPyBlLmtleUNvZGUgOiBlLmNoYXJDb2RlKSwg
MCk7CisgICAgfSwKKworICAgIG9uQ29udGV4dE1lbnU6IG5vdGhpbmcsCisgICAgcmVzZXRQb3Np
dGlvbjogbm90aGluZywKKworICAgIG5lZWRzQ29udGVudEF0dHJpYnV0ZTogdHJ1ZQorICB9LCBD
b250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUpOworCisgIGZ1bmN0aW9uIHBvc1RvRE9NKGNt
LCBwb3MpIHsKKyAgICB2YXIgdmlldyA9IGZpbmRWaWV3Rm9yTGluZShjbSwgcG9zLmxpbmUpOwor
ICAgIGlmICghdmlldyB8fCB2aWV3LmhpZGRlbikgcmV0dXJuIG51bGw7CisgICAgdmFyIGxpbmUg
PSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOworICAgIHZhciBpbmZvID0gbWFwRnJvbUxpbmVW
aWV3KHZpZXcsIGxpbmUsIHBvcy5saW5lKTsKKworICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxp
bmUpLCBzaWRlID0gImxlZnQiOworICAgIGlmIChvcmRlcikgeworICAgICAgdmFyIHBhcnRQb3Mg
PSBnZXRCaWRpUGFydEF0KG9yZGVyLCBwb3MuY2gpOworICAgICAgc2lkZSA9IHBhcnRQb3MgJSAy
ID8gInJpZ2h0IiA6ICJsZWZ0IjsKKyAgICB9CisgICAgdmFyIHJlc3VsdCA9IG5vZGVBbmRPZmZz
ZXRJbkxpbmVNYXAoaW5mby5tYXAsIHBvcy5jaCwgc2lkZSk7CisgICAgcmVzdWx0Lm9mZnNldCA9
IHJlc3VsdC5jb2xsYXBzZSA9PSAicmlnaHQiID8gcmVzdWx0LmVuZCA6IHJlc3VsdC5zdGFydDsK
KyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgZnVuY3Rpb24gYmFkUG9zKHBvcywgYmFkKSB7
IGlmIChiYWQpIHBvcy5iYWQgPSB0cnVlOyByZXR1cm4gcG9zOyB9CisKKyAgZnVuY3Rpb24gZG9t
VG9Qb3MoY20sIG5vZGUsIG9mZnNldCkgeworICAgIHZhciBsaW5lTm9kZTsKKyAgICBpZiAobm9k
ZSA9PSBjbS5kaXNwbGF5LmxpbmVEaXYpIHsKKyAgICAgIGxpbmVOb2RlID0gY20uZGlzcGxheS5s
aW5lRGl2LmNoaWxkTm9kZXNbb2Zmc2V0XTsKKyAgICAgIGlmICghbGluZU5vZGUpIHJldHVybiBi
YWRQb3MoY20uY2xpcFBvcyhQb3MoY20uZGlzcGxheS52aWV3VG8gLSAxKSksIHRydWUpOworICAg
ICAgbm9kZSA9IG51bGw7IG9mZnNldCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgIGZvciAobGlu
ZU5vZGUgPSBub2RlOzsgbGluZU5vZGUgPSBsaW5lTm9kZS5wYXJlbnROb2RlKSB7CisgICAgICAg
IGlmICghbGluZU5vZGUgfHwgbGluZU5vZGUgPT0gY20uZGlzcGxheS5saW5lRGl2KSByZXR1cm4g
bnVsbDsKKyAgICAgICAgaWYgKGxpbmVOb2RlLnBhcmVudE5vZGUgJiYgbGluZU5vZGUucGFyZW50
Tm9kZSA9PSBjbS5kaXNwbGF5LmxpbmVEaXYpIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGNtLmRpc3BsYXkudmlldy5sZW5ndGg7IGkrKykgeworICAgICAg
dmFyIGxpbmVWaWV3ID0gY20uZGlzcGxheS52aWV3W2ldOworICAgICAgaWYgKGxpbmVWaWV3Lm5v
ZGUgPT0gbGluZU5vZGUpCisgICAgICAgIHJldHVybiBsb2NhdGVOb2RlSW5MaW5lVmlldyhsaW5l
Vmlldywgbm9kZSwgb2Zmc2V0KTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBsb2NhdGVOb2Rl
SW5MaW5lVmlldyhsaW5lVmlldywgbm9kZSwgb2Zmc2V0KSB7CisgICAgdmFyIHdyYXBwZXIgPSBs
aW5lVmlldy50ZXh0LmZpcnN0Q2hpbGQsIGJhZCA9IGZhbHNlOworICAgIGlmICghbm9kZSB8fCAh
Y29udGFpbnMod3JhcHBlciwgbm9kZSkpIHJldHVybiBiYWRQb3MoUG9zKGxpbmVObyhsaW5lVmll
dy5saW5lKSwgMCksIHRydWUpOworICAgIGlmIChub2RlID09IHdyYXBwZXIpIHsKKyAgICAgIGJh
ZCA9IHRydWU7CisgICAgICBub2RlID0gd3JhcHBlci5jaGlsZE5vZGVzW29mZnNldF07CisgICAg
ICBvZmZzZXQgPSAwOworICAgICAgaWYgKCFub2RlKSB7CisgICAgICAgIHZhciBsaW5lID0gbGlu
ZVZpZXcucmVzdCA/IGxzdChsaW5lVmlldy5yZXN0KSA6IGxpbmVWaWV3LmxpbmU7CisgICAgICAg
IHJldHVybiBiYWRQb3MoUG9zKGxpbmVObyhsaW5lKSwgbGluZS50ZXh0Lmxlbmd0aCksIGJhZCk7
CisgICAgICB9CisgICAgfQorCisgICAgdmFyIHRleHROb2RlID0gbm9kZS5ub2RlVHlwZSA9PSAz
ID8gbm9kZSA6IG51bGwsIHRvcE5vZGUgPSBub2RlOworICAgIGlmICghdGV4dE5vZGUgJiYgbm9k
ZS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxICYmIG5vZGUuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PSAz
KSB7CisgICAgICB0ZXh0Tm9kZSA9IG5vZGUuZmlyc3RDaGlsZDsKKyAgICAgIGlmIChvZmZzZXQp
IG9mZnNldCA9IHRleHROb2RlLm5vZGVWYWx1ZS5sZW5ndGg7CisgICAgfQorICAgIHdoaWxlICh0
b3BOb2RlLnBhcmVudE5vZGUgIT0gd3JhcHBlcikgdG9wTm9kZSA9IHRvcE5vZGUucGFyZW50Tm9k
ZTsKKyAgICB2YXIgbWVhc3VyZSA9IGxpbmVWaWV3Lm1lYXN1cmUsIG1hcHMgPSBtZWFzdXJlLm1h
cHM7CisKKyAgICBmdW5jdGlvbiBmaW5kKHRleHROb2RlLCB0b3BOb2RlLCBvZmZzZXQpIHsKKyAg
ICAgIGZvciAodmFyIGkgPSAtMTsgaSA8IChtYXBzID8gbWFwcy5sZW5ndGggOiAwKTsgaSsrKSB7
CisgICAgICAgIHZhciBtYXAgPSBpIDwgMCA/IG1lYXN1cmUubWFwIDogbWFwc1tpXTsKKyAgICAg
ICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXAubGVuZ3RoOyBqICs9IDMpIHsKKyAgICAgICAgICB2
YXIgY3VyTm9kZSA9IG1hcFtqICsgMl07CisgICAgICAgICAgaWYgKGN1ck5vZGUgPT0gdGV4dE5v
ZGUgfHwgY3VyTm9kZSA9PSB0b3BOb2RlKSB7CisgICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVO
byhpIDwgMCA/IGxpbmVWaWV3LmxpbmUgOiBsaW5lVmlldy5yZXN0W2ldKTsKKyAgICAgICAgICAg
IHZhciBjaCA9IG1hcFtqXSArIG9mZnNldDsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwIHx8
IGN1ck5vZGUgIT0gdGV4dE5vZGUpIGNoID0gbWFwW2ogKyAob2Zmc2V0ID8gMSA6IDApXTsKKyAg
ICAgICAgICAgIHJldHVybiBQb3MobGluZSwgY2gpOworICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgfQorICAgIH0KKyAgICB2YXIgZm91bmQgPSBmaW5kKHRleHROb2RlLCB0b3BOb2RlLCBv
ZmZzZXQpOworICAgIGlmIChmb3VuZCkgcmV0dXJuIGJhZFBvcyhmb3VuZCwgYmFkKTsKKworICAg
IC8vIEZJWE1FIHRoaXMgaXMgYWxsIHJlYWxseSBzaGFreS4gbWlnaHQgaGFuZGxlIHRoZSBmZXcg
Y2FzZXMgaXQgbmVlZHMgdG8gaGFuZGxlLCBidXQgbGlrZWx5IHRvIGNhdXNlIHByb2JsZW1zCisg
ICAgZm9yICh2YXIgYWZ0ZXIgPSB0b3BOb2RlLm5leHRTaWJsaW5nLCBkaXN0ID0gdGV4dE5vZGUg
PyB0ZXh0Tm9kZS5ub2RlVmFsdWUubGVuZ3RoIC0gb2Zmc2V0IDogMDsgYWZ0ZXI7IGFmdGVyID0g
YWZ0ZXIubmV4dFNpYmxpbmcpIHsKKyAgICAgIGZvdW5kID0gZmluZChhZnRlciwgYWZ0ZXIuZmly
c3RDaGlsZCwgMCk7CisgICAgICBpZiAoZm91bmQpCisgICAgICAgIHJldHVybiBiYWRQb3MoUG9z
KGZvdW5kLmxpbmUsIGZvdW5kLmNoIC0gZGlzdCksIGJhZCk7CisgICAgICBlbHNlCisgICAgICAg
IGRpc3QgKz0gYWZ0ZXIudGV4dENvbnRlbnQubGVuZ3RoOworICAgIH0KKyAgICBmb3IgKHZhciBi
ZWZvcmUgPSB0b3BOb2RlLnByZXZpb3VzU2libGluZywgZGlzdCA9IG9mZnNldDsgYmVmb3JlOyBi
ZWZvcmUgPSBiZWZvcmUucHJldmlvdXNTaWJsaW5nKSB7CisgICAgICBmb3VuZCA9IGZpbmQoYmVm
b3JlLCBiZWZvcmUuZmlyc3RDaGlsZCwgLTEpOworICAgICAgaWYgKGZvdW5kKQorICAgICAgICBy
ZXR1cm4gYmFkUG9zKFBvcyhmb3VuZC5saW5lLCBmb3VuZC5jaCArIGRpc3QpLCBiYWQpOworICAg
ICAgZWxzZQorICAgICAgICBkaXN0ICs9IGFmdGVyLnRleHRDb250ZW50Lmxlbmd0aDsKKyAgICB9
CisgIH0KKworICBmdW5jdGlvbiBkb21UZXh0QmV0d2VlbihjbSwgZnJvbSwgdG8sIGZyb21MaW5l
LCB0b0xpbmUpIHsKKyAgICB2YXIgdGV4dCA9ICIiLCBjbG9zaW5nID0gZmFsc2UsIGxpbmVTZXAg
PSBjbS5kb2MubGluZVNlcGFyYXRvcigpOworICAgIGZ1bmN0aW9uIHJlY29nbml6ZU1hcmtlcihp
ZCkgeyByZXR1cm4gZnVuY3Rpb24obWFya2VyKSB7IHJldHVybiBtYXJrZXIuaWQgPT0gaWQ7IH07
IH0KKyAgICBmdW5jdGlvbiB3YWxrKG5vZGUpIHsKKyAgICAgIGlmIChub2RlLm5vZGVUeXBlID09
IDEpIHsKKyAgICAgICAgdmFyIGNtVGV4dCA9IG5vZGUuZ2V0QXR0cmlidXRlKCJjbS10ZXh0Iik7
CisgICAgICAgIGlmIChjbVRleHQgIT0gbnVsbCkgeworICAgICAgICAgIGlmIChjbVRleHQgPT0g
IiIpIGNtVGV4dCA9IG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSgvXHUyMDBiL2csICIiKTsKKyAg
ICAgICAgICB0ZXh0ICs9IGNtVGV4dDsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIG1hcmtlcklEID0gbm9kZS5nZXRBdHRyaWJ1dGUoImNtLW1hcmtlciIpLCByYW5n
ZTsKKyAgICAgICAgaWYgKG1hcmtlcklEKSB7CisgICAgICAgICAgdmFyIGZvdW5kID0gY20uZmlu
ZE1hcmtzKFBvcyhmcm9tTGluZSwgMCksIFBvcyh0b0xpbmUgKyAxLCAwKSwgcmVjb2duaXplTWFy
a2VyKCttYXJrZXJJRCkpOworICAgICAgICAgIGlmIChmb3VuZC5sZW5ndGggJiYgKHJhbmdlID0g
Zm91bmRbMF0uZmluZCgpKSkKKyAgICAgICAgICAgIHRleHQgKz0gZ2V0QmV0d2VlbihjbS5kb2Ms
IHJhbmdlLmZyb20sIHJhbmdlLnRvKS5qb2luKGxpbmVTZXApOworICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJs
ZSIpID09ICJmYWxzZSIpIHJldHVybjsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rl
LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgd2Fsayhub2RlLmNoaWxkTm9kZXNb
aV0pOworICAgICAgICBpZiAoL14ocHJlfGRpdnxwKSQvaS50ZXN0KG5vZGUubm9kZU5hbWUpKQor
ICAgICAgICAgIGNsb3NpbmcgPSB0cnVlOworICAgICAgfSBlbHNlIGlmIChub2RlLm5vZGVUeXBl
ID09IDMpIHsKKyAgICAgICAgdmFyIHZhbCA9IG5vZGUubm9kZVZhbHVlOworICAgICAgICBpZiAo
IXZhbCkgcmV0dXJuOworICAgICAgICBpZiAoY2xvc2luZykgeworICAgICAgICAgIHRleHQgKz0g
bGluZVNlcDsKKyAgICAgICAgICBjbG9zaW5nID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
dGV4dCArPSB2YWw7CisgICAgICB9CisgICAgfQorICAgIGZvciAoOzspIHsKKyAgICAgIHdhbGso
ZnJvbSk7CisgICAgICBpZiAoZnJvbSA9PSB0bykgYnJlYWs7CisgICAgICBmcm9tID0gZnJvbS5u
ZXh0U2libGluZzsKKyAgICB9CisgICAgcmV0dXJuIHRleHQ7CisgIH0KKworICBDb2RlTWlycm9y
LmlucHV0U3R5bGVzID0geyJ0ZXh0YXJlYSI6IFRleHRhcmVhSW5wdXQsICJjb250ZW50ZWRpdGFi
bGUiOiBDb250ZW50RWRpdGFibGVJbnB1dH07CisKICAgLy8gU0VMRUNUSU9OIC8gQ1VSU09SCiAK
ICAgLy8gU2VsZWN0aW9uIG9iamVjdHMgYXJlIGltbXV0YWJsZS4gQSBuZXcgb25lIGlzIGNyZWF0
ZWQgZXZlcnkgdGltZQpAQCAtMTI0NCw0MCArMjI1OCwzMCBAQAogCiAgIC8vIFNFTEVDVElPTiBE
UkFXSU5HCiAKLSAgLy8gUmVkcmF3IHRoZSBzZWxlY3Rpb24gYW5kL29yIGN1cnNvcgogICBmdW5j
dGlvbiB1cGRhdGVTZWxlY3Rpb24oY20pIHsKLSAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXks
IGRvYyA9IGNtLmRvYzsKLSAgICB2YXIgY3VyRnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1
bWVudEZyYWdtZW50KCk7Ci0gICAgdmFyIHNlbEZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9j
dW1lbnRGcmFnbWVudCgpOworICAgIGNtLmRpc3BsYXkuaW5wdXQuc2hvd1NlbGVjdGlvbihjbS5k
aXNwbGF5LmlucHV0LnByZXBhcmVTZWxlY3Rpb24oKSk7CisgIH0KKworICBmdW5jdGlvbiBwcmVw
YXJlU2VsZWN0aW9uKGNtLCBwcmltYXJ5KSB7CisgICAgdmFyIGRvYyA9IGNtLmRvYywgcmVzdWx0
ID0ge307CisgICAgdmFyIGN1ckZyYWdtZW50ID0gcmVzdWx0LmN1cnNvcnMgPSBkb2N1bWVudC5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisgICAgdmFyIHNlbEZyYWdtZW50ID0gcmVzdWx0LnNl
bGVjdGlvbiA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKIAogICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmIChw
cmltYXJ5ID09PSBmYWxzZSAmJiBpID09IGRvYy5zZWwucHJpbUluZGV4KSBjb250aW51ZTsKICAg
ICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2ldOwogICAgICAgdmFyIGNvbGxhcHNlZCA9
IHJhbmdlLmVtcHR5KCk7CiAgICAgICBpZiAoY29sbGFwc2VkIHx8IGNtLm9wdGlvbnMuc2hvd0N1
cnNvcldoZW5TZWxlY3RpbmcpCi0gICAgICAgIGRyYXdTZWxlY3Rpb25DdXJzb3IoY20sIHJhbmdl
LCBjdXJGcmFnbWVudCk7CisgICAgICAgIGRyYXdTZWxlY3Rpb25DdXJzb3IoY20sIHJhbmdlLmhl
YWQsIGN1ckZyYWdtZW50KTsKICAgICAgIGlmICghY29sbGFwc2VkKQogICAgICAgICBkcmF3U2Vs
ZWN0aW9uUmFuZ2UoY20sIHJhbmdlLCBzZWxGcmFnbWVudCk7CiAgICAgfQotCi0gICAgLy8gTW92
ZSB0aGUgaGlkZGVuIHRleHRhcmVhIG5lYXIgdGhlIGN1cnNvciB0byBwcmV2ZW50IHNjcm9sbGlu
ZyBhcnRpZmFjdHMKLSAgICBpZiAoY20ub3B0aW9ucy5tb3ZlSW5wdXRXaXRoQ3Vyc29yKSB7Ci0g
ICAgICB2YXIgaGVhZFBvcyA9IGN1cnNvckNvb3JkcyhjbSwgZG9jLnNlbC5wcmltYXJ5KCkuaGVh
ZCwgImRpdiIpOwotICAgICAgdmFyIHdyYXBPZmYgPSBkaXNwbGF5LndyYXBwZXIuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCksIGxpbmVPZmYgPSBkaXNwbGF5LmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7Ci0gICAgICB2YXIgdG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS53
cmFwcGVyLmNsaWVudEhlaWdodCAtIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlYWRQb3MudG9wICsgbGluZU9mZi50b3AgLSB3cmFwT2ZmLnRvcCkpOwotICAgICAg
dmFyIGxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xpZW50V2lk
dGggLSAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFBvcy5s
ZWZ0ICsgbGluZU9mZi5sZWZ0IC0gd3JhcE9mZi5sZWZ0KSk7Ci0gICAgICBkaXNwbGF5LmlucHV0
RGl2LnN0eWxlLnRvcCA9IHRvcCArICJweCI7Ci0gICAgICBkaXNwbGF5LmlucHV0RGl2LnN0eWxl
LmxlZnQgPSBsZWZ0ICsgInB4IjsKLSAgICB9Ci0KLSAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChk
aXNwbGF5LmN1cnNvckRpdiwgY3VyRnJhZ21lbnQpOwotICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRk
KGRpc3BsYXkuc2VsZWN0aW9uRGl2LCBzZWxGcmFnbWVudCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
ICAgfQogCiAgIC8vIERyYXdzIGEgY3Vyc29yIGZvciB0aGUgZ2l2ZW4gcmFuZ2UKLSAgZnVuY3Rp
b24gZHJhd1NlbGVjdGlvbkN1cnNvcihjbSwgcmFuZ2UsIG91dHB1dCkgewotICAgIHZhciBwb3Mg
PSBjdXJzb3JDb29yZHMoY20sIHJhbmdlLmhlYWQsICJkaXYiKTsKKyAgZnVuY3Rpb24gZHJhd1Nl
bGVjdGlvbkN1cnNvcihjbSwgaGVhZCwgb3V0cHV0KSB7CisgICAgdmFyIHBvcyA9IGN1cnNvckNv
b3JkcyhjbSwgaGVhZCwgImRpdiIsIG51bGwsIG51bGwsICFjbS5vcHRpb25zLnNpbmdsZUN1cnNv
ckhlaWdodFBlckxpbmUpOwogCiAgICAgdmFyIGN1cnNvciA9IG91dHB1dC5hcHBlbmRDaGlsZChl
bHQoImRpdiIsICJcdTAwYTAiLCAiQ29kZU1pcnJvci1jdXJzb3IiKSk7CiAgICAgY3Vyc29yLnN0
eWxlLmxlZnQgPSBwb3MubGVmdCArICJweCI7CkBAIC0xMjk4LDcgKzIzMDIsOCBAQAogICBmdW5j
dGlvbiBkcmF3U2VsZWN0aW9uUmFuZ2UoY20sIHJhbmdlLCBvdXRwdXQpIHsKICAgICB2YXIgZGlz
cGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYzsKICAgICB2YXIgZnJhZ21lbnQgPSBkb2N1
bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgdmFyIHBhZGRpbmcgPSBwYWRkaW5n
SChjbS5kaXNwbGF5KSwgbGVmdFNpZGUgPSBwYWRkaW5nLmxlZnQsIHJpZ2h0U2lkZSA9IGRpc3Bs
YXkubGluZVNwYWNlLm9mZnNldFdpZHRoIC0gcGFkZGluZy5yaWdodDsKKyAgICB2YXIgcGFkZGlu
ZyA9IHBhZGRpbmdIKGNtLmRpc3BsYXkpLCBsZWZ0U2lkZSA9IHBhZGRpbmcubGVmdDsKKyAgICB2
YXIgcmlnaHRTaWRlID0gTWF0aC5tYXgoZGlzcGxheS5zaXplcldpZHRoLCBkaXNwbGF5V2lkdGgo
Y20pIC0gZGlzcGxheS5zaXplci5vZmZzZXRMZWZ0KSAtIHBhZGRpbmcucmlnaHQ7CiAKICAgICBm
dW5jdGlvbiBhZGQobGVmdCwgdG9wLCB3aWR0aCwgYm90dG9tKSB7CiAgICAgICBpZiAodG9wIDwg
MCkgdG9wID0gMDsKQEAgLTEzNzksNiArMjM4NCw4IEBACiAgICAgICBkaXNwbGF5LmJsaW5rZXIg
PSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICAgZGlzcGxheS5jdXJzb3JEaXYuc3R5
bGUudmlzaWJpbGl0eSA9IChvbiA9ICFvbikgPyAiIiA6ICJoaWRkZW4iOwogICAgICAgfSwgY20u
b3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpOworICAgIGVsc2UgaWYgKGNtLm9wdGlvbnMuY3Vyc29y
QmxpbmtSYXRlIDwgMCkKKyAgICAgIGRpc3BsYXkuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHkg
PSAiaGlkZGVuIjsKICAgfQogCiAgIC8vIEhJR0hMSUdIVCBXT1JLRVIKQEAgLTEzOTQsMTggKzI0
MDEsMjAgQEAKICAgICBpZiAoZG9jLmZyb250aWVyID49IGNtLmRpc3BsYXkudmlld1RvKSByZXR1
cm47CiAgICAgdmFyIGVuZCA9ICtuZXcgRGF0ZSArIGNtLm9wdGlvbnMud29ya1RpbWU7CiAgICAg
dmFyIHN0YXRlID0gY29weVN0YXRlKGRvYy5tb2RlLCBnZXRTdGF0ZUJlZm9yZShjbSwgZG9jLmZy
b250aWVyKSk7CisgICAgdmFyIGNoYW5nZWRMaW5lcyA9IFtdOwogCi0gICAgcnVuSW5PcChjbSwg
ZnVuY3Rpb24oKSB7CiAgICAgZG9jLml0ZXIoZG9jLmZyb250aWVyLCBNYXRoLm1pbihkb2MuZmly
c3QgKyBkb2Muc2l6ZSwgY20uZGlzcGxheS52aWV3VG8gKyA1MDApLCBmdW5jdGlvbihsaW5lKSB7
CiAgICAgICBpZiAoZG9jLmZyb250aWVyID49IGNtLmRpc3BsYXkudmlld0Zyb20pIHsgLy8gVmlz
aWJsZQogICAgICAgICB2YXIgb2xkU3R5bGVzID0gbGluZS5zdHlsZXM7CiAgICAgICAgIHZhciBo
aWdobGlnaHRlZCA9IGhpZ2hsaWdodExpbmUoY20sIGxpbmUsIHN0YXRlLCB0cnVlKTsKICAgICAg
ICAgbGluZS5zdHlsZXMgPSBoaWdobGlnaHRlZC5zdHlsZXM7Ci0gICAgICAgIGlmIChoaWdobGln
aHRlZC5jbGFzc2VzKSBsaW5lLnN0eWxlQ2xhc3NlcyA9IGhpZ2hsaWdodGVkLmNsYXNzZXM7Ci0g
ICAgICAgIGVsc2UgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSBsaW5lLnN0eWxlQ2xhc3NlcyA9IG51
bGw7Ci0gICAgICAgIHZhciBpc2NoYW5nZSA9ICFvbGRTdHlsZXMgfHwgb2xkU3R5bGVzLmxlbmd0
aCAhPSBsaW5lLnN0eWxlcy5sZW5ndGg7CisgICAgICAgIHZhciBvbGRDbHMgPSBsaW5lLnN0eWxl
Q2xhc3NlcywgbmV3Q2xzID0gaGlnaGxpZ2h0ZWQuY2xhc3NlczsKKyAgICAgICAgaWYgKG5ld0Ns
cykgbGluZS5zdHlsZUNsYXNzZXMgPSBuZXdDbHM7CisgICAgICAgIGVsc2UgaWYgKG9sZENscykg
bGluZS5zdHlsZUNsYXNzZXMgPSBudWxsOworICAgICAgICB2YXIgaXNjaGFuZ2UgPSAhb2xkU3R5
bGVzIHx8IG9sZFN0eWxlcy5sZW5ndGggIT0gbGluZS5zdHlsZXMubGVuZ3RoIHx8CisgICAgICAg
ICAgb2xkQ2xzICE9IG5ld0NscyAmJiAoIW9sZENscyB8fCAhbmV3Q2xzIHx8IG9sZENscy5iZ0Ns
YXNzICE9IG5ld0Nscy5iZ0NsYXNzIHx8IG9sZENscy50ZXh0Q2xhc3MgIT0gbmV3Q2xzLnRleHRD
bGFzcyk7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyAhaXNjaGFuZ2UgJiYgaSA8IG9sZFN0eWxl
cy5sZW5ndGg7ICsraSkgaXNjaGFuZ2UgPSBvbGRTdHlsZXNbaV0gIT0gbGluZS5zdHlsZXNbaV07
Ci0gICAgICAgIGlmIChpc2NoYW5nZSkgcmVnTGluZUNoYW5nZShjbSwgZG9jLmZyb250aWVyLCAi
dGV4dCIpOworICAgICAgICBpZiAoaXNjaGFuZ2UpIGNoYW5nZWRMaW5lcy5wdXNoKGRvYy5mcm9u
dGllcik7CiAgICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGNvcHlTdGF0ZShkb2MubW9kZSwgc3Rh
dGUpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgcHJvY2Vzc0xpbmUoY20sIGxpbmUudGV4dCwg
c3RhdGUpOwpAQCAtMTQxNyw2ICsyNDI2LDkgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICB9CiAgICAgfSk7CisgICAgaWYgKGNoYW5nZWRMaW5lcy5sZW5ndGgpIHJ1bkluT3AoY20sIGZ1
bmN0aW9uKCkgeworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VkTGluZXMubGVuZ3Ro
OyBpKyspCisgICAgICAgIHJlZ0xpbmVDaGFuZ2UoY20sIGNoYW5nZWRMaW5lc1tpXSwgInRleHQi
KTsKICAgICB9KTsKICAgfQogCkBAIC0xNDcwLDEzICsyNDgyLDIxIEBACiAgICAgcmV0dXJuIGRh
dGE7CiAgIH0KIAorICBmdW5jdGlvbiBzY3JvbGxHYXAoY20pIHsgcmV0dXJuIHNjcm9sbGVyR2Fw
IC0gY20uZGlzcGxheS5uYXRpdmVCYXJXaWR0aDsgfQorICBmdW5jdGlvbiBkaXNwbGF5V2lkdGgo
Y20pIHsKKyAgICByZXR1cm4gY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCAtIHNjcm9s
bEdhcChjbSkgLSBjbS5kaXNwbGF5LmJhcldpZHRoOworICB9CisgIGZ1bmN0aW9uIGRpc3BsYXlI
ZWlnaHQoY20pIHsKKyAgICByZXR1cm4gY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQg
LSBzY3JvbGxHYXAoY20pIC0gY20uZGlzcGxheS5iYXJIZWlnaHQ7CisgIH0KKwogICAvLyBFbnN1
cmUgdGhlIGxpbmVWaWV3LndyYXBwaW5nLmhlaWdodHMgYXJyYXkgaXMgcG9wdWxhdGVkLiBUaGlz
IGlzCiAgIC8vIGFuIGFycmF5IG9mIGJvdHRvbSBvZmZzZXRzIGZvciB0aGUgbGluZXMgdGhhdCBt
YWtlIHVwIGEgZHJhd24KICAgLy8gbGluZS4gV2hlbiBsaW5lV3JhcHBpbmcgaXMgb24sIHRoZXJl
IG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmUKICAgLy8gaGVpZ2h0LgogICBmdW5jdGlvbiBlbnN1cmVM
aW5lSGVpZ2h0cyhjbSwgbGluZVZpZXcsIHJlY3QpIHsKICAgICB2YXIgd3JhcHBpbmcgPSBjbS5v
cHRpb25zLmxpbmVXcmFwcGluZzsKLSAgICB2YXIgY3VyV2lkdGggPSB3cmFwcGluZyAmJiBjbS5k
aXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoOworICAgIHZhciBjdXJXaWR0aCA9IHdyYXBwaW5n
ICYmIGRpc3BsYXlXaWR0aChjbSk7CiAgICAgaWYgKCFsaW5lVmlldy5tZWFzdXJlLmhlaWdodHMg
fHwgd3JhcHBpbmcgJiYgbGluZVZpZXcubWVhc3VyZS53aWR0aCAhPSBjdXJXaWR0aCkgewogICAg
ICAgdmFyIGhlaWdodHMgPSBsaW5lVmlldy5tZWFzdXJlLmhlaWdodHMgPSBbXTsKICAgICAgIGlm
ICh3cmFwcGluZykgewpAQCAtMTU0MiwxMCArMjU2MiwxMiBAQAogICBmdW5jdGlvbiBwcmVwYXJl
TWVhc3VyZUZvckxpbmUoY20sIGxpbmUpIHsKICAgICB2YXIgbGluZU4gPSBsaW5lTm8obGluZSk7
CiAgICAgdmFyIHZpZXcgPSBmaW5kVmlld0ZvckxpbmUoY20sIGxpbmVOKTsKLSAgICBpZiAodmll
dyAmJiAhdmlldy50ZXh0KQorICAgIGlmICh2aWV3ICYmICF2aWV3LnRleHQpIHsKICAgICAgIHZp
ZXcgPSBudWxsOwotICAgIGVsc2UgaWYgKHZpZXcgJiYgdmlldy5jaGFuZ2VzKQorICAgIH0gZWxz
ZSBpZiAodmlldyAmJiB2aWV3LmNoYW5nZXMpIHsKICAgICAgIHVwZGF0ZUxpbmVGb3JDaGFuZ2Vz
KGNtLCB2aWV3LCBsaW5lTiwgZ2V0RGltZW5zaW9ucyhjbSkpOworICAgICAgY20uY3VyT3AuZm9y
Y2VVcGRhdGUgPSB0cnVlOworICAgIH0KICAgICBpZiAoIXZpZXcpCiAgICAgICB2aWV3ID0gdXBk
YXRlRXh0ZXJuYWxNZWFzdXJlbWVudChjbSwgbGluZSk7CiAKQEAgLTE1NTksNyArMjU4MSw3IEBA
CiAKICAgLy8gR2l2ZW4gYSBwcmVwYXJlZCBtZWFzdXJlbWVudCBvYmplY3QsIG1lYXN1cmVzIHRo
ZSBwb3NpdGlvbiBvZiBhbgogICAvLyBhY3R1YWwgY2hhcmFjdGVyIChvciBmZXRjaGVzIGl0IGZy
b20gdGhlIGNhY2hlKS4KLSAgZnVuY3Rpb24gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFy
ZWQsIGNoLCBiaWFzKSB7CisgIGZ1bmN0aW9uIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBh
cmVkLCBjaCwgYmlhcywgdmFySGVpZ2h0KSB7CiAgICAgaWYgKHByZXBhcmVkLmJlZm9yZSkgY2gg
PSAtMTsKICAgICB2YXIga2V5ID0gY2ggKyAoYmlhcyB8fCAiIiksIGZvdW5kOwogICAgIGlmIChw
cmVwYXJlZC5jYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CkBAIC0xNTc0LDE0ICsyNTk2LDE0
IEBACiAgICAgICBmb3VuZCA9IG1lYXN1cmVDaGFySW5uZXIoY20sIHByZXBhcmVkLCBjaCwgYmlh
cyk7CiAgICAgICBpZiAoIWZvdW5kLmJvZ3VzKSBwcmVwYXJlZC5jYWNoZVtrZXldID0gZm91bmQ7
CiAgICAgfQotICAgIHJldHVybiB7bGVmdDogZm91bmQubGVmdCwgcmlnaHQ6IGZvdW5kLnJpZ2h0
LCB0b3A6IGZvdW5kLnRvcCwgYm90dG9tOiBmb3VuZC5ib3R0b219OworICAgIHJldHVybiB7bGVm
dDogZm91bmQubGVmdCwgcmlnaHQ6IGZvdW5kLnJpZ2h0LAorICAgICAgICAgICAgdG9wOiB2YXJI
ZWlnaHQgPyBmb3VuZC5ydG9wIDogZm91bmQudG9wLAorICAgICAgICAgICAgYm90dG9tOiB2YXJI
ZWlnaHQgPyBmb3VuZC5yYm90dG9tIDogZm91bmQuYm90dG9tfTsKICAgfQogCiAgIHZhciBudWxs
UmVjdCA9IHtsZWZ0OiAwLCByaWdodDogMCwgdG9wOiAwLCBib3R0b206IDB9OwogCi0gIGZ1bmN0
aW9uIG1lYXN1cmVDaGFySW5uZXIoY20sIHByZXBhcmVkLCBjaCwgYmlhcykgewotICAgIHZhciBt
YXAgPSBwcmVwYXJlZC5tYXA7Ci0KKyAgZnVuY3Rpb24gbm9kZUFuZE9mZnNldEluTGluZU1hcCht
YXAsIGNoLCBiaWFzKSB7CiAgICAgdmFyIG5vZGUsIHN0YXJ0LCBlbmQsIGNvbGxhcHNlOwogICAg
IC8vIEZpcnN0LCBzZWFyY2ggdGhlIGxpbmUgbWFwIGZvciB0aGUgdGV4dCBub2RlIGNvcnJlc3Bv
bmRpbmcgdG8sCiAgICAgLy8gb3IgY2xvc2VzdCB0bywgdGhlIHRhcmdldCBjaGFyYWN0ZXIuCkBA
IC0xNjE1LDIyICsyNjM3LDM1IEBACiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIH0KKyAg
ICByZXR1cm4ge25vZGU6IG5vZGUsIHN0YXJ0OiBzdGFydCwgZW5kOiBlbmQsIGNvbGxhcHNlOiBj
b2xsYXBzZSwgY292ZXJTdGFydDogbVN0YXJ0LCBjb3ZlckVuZDogbUVuZH07CisgIH0KKworICBm
dW5jdGlvbiBtZWFzdXJlQ2hhcklubmVyKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMpIHsKKyAgICB2
YXIgcGxhY2UgPSBub2RlQW5kT2Zmc2V0SW5MaW5lTWFwKHByZXBhcmVkLm1hcCwgY2gsIGJpYXMp
OworICAgIHZhciBub2RlID0gcGxhY2Uubm9kZSwgc3RhcnQgPSBwbGFjZS5zdGFydCwgZW5kID0g
cGxhY2UuZW5kLCBjb2xsYXBzZSA9IHBsYWNlLmNvbGxhcHNlOwogCiAgICAgdmFyIHJlY3Q7CiAg
ICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMykgeyAvLyBJZiBpdCBpcyBhIHRleHQgbm9kZSwgdXNl
IGEgcmFuZ2UgdG8gcmV0cmlldmUgdGhlIGNvb3JkaW5hdGVzLgotICAgICAgd2hpbGUgKHN0YXJ0
ICYmIGlzRXh0ZW5kaW5nQ2hhcihwcmVwYXJlZC5saW5lLnRleHQuY2hhckF0KG1TdGFydCArIHN0
YXJ0KSkpIC0tc3RhcnQ7Ci0gICAgICB3aGlsZSAobVN0YXJ0ICsgZW5kIDwgbUVuZCAmJiBpc0V4
dGVuZGluZ0NoYXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChtU3RhcnQgKyBlbmQpKSkgKytl
bmQ7Ci0gICAgICBpZiAoaWVfdXB0bzggJiYgc3RhcnQgPT0gMCAmJiBlbmQgPT0gbUVuZCAtIG1T
dGFydCkgewotICAgICAgICByZWN0ID0gbm9kZS5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpOwotICAgICAgfSBlbHNlIGlmIChpZSAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZykg
ewotICAgICAgICB2YXIgcmVjdHMgPSByYW5nZShub2RlLCBzdGFydCwgZW5kKS5nZXRDbGllbnRS
ZWN0cygpOwotICAgICAgICBpZiAocmVjdHMubGVuZ3RoKQotICAgICAgICAgIHJlY3QgPSByZWN0
c1tiaWFzID09ICJyaWdodCIgPyByZWN0cy5sZW5ndGggLSAxIDogMF07Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICByZWN0ID0gbnVsbFJlY3Q7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZWN0
ID0gcmFuZ2Uobm9kZSwgc3RhcnQsIGVuZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgfHwgbnVs
bFJlY3Q7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykgeyAvLyBSZXRyeSBhIG1h
eGltdW0gb2YgNCB0aW1lcyB3aGVuIG5vbnNlbnNlIHJlY3RhbmdsZXMgYXJlIHJldHVybmVkCisg
ICAgICAgIHdoaWxlIChzdGFydCAmJiBpc0V4dGVuZGluZ0NoYXIocHJlcGFyZWQubGluZS50ZXh0
LmNoYXJBdChwbGFjZS5jb3ZlclN0YXJ0ICsgc3RhcnQpKSkgLS1zdGFydDsKKyAgICAgICAgd2hp
bGUgKHBsYWNlLmNvdmVyU3RhcnQgKyBlbmQgPCBwbGFjZS5jb3ZlckVuZCAmJiBpc0V4dGVuZGlu
Z0NoYXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChwbGFjZS5jb3ZlclN0YXJ0ICsgZW5kKSkp
ICsrZW5kOworICAgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkgJiYgc3RhcnQgPT0gMCAm
JiBlbmQgPT0gcGxhY2UuY292ZXJFbmQgLSBwbGFjZS5jb3ZlclN0YXJ0KSB7CisgICAgICAgICAg
cmVjdCA9IG5vZGUucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAg
fSBlbHNlIGlmIChpZSAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgeworICAgICAgICAgIHZh
ciByZWN0cyA9IHJhbmdlKG5vZGUsIHN0YXJ0LCBlbmQpLmdldENsaWVudFJlY3RzKCk7CisgICAg
ICAgICAgaWYgKHJlY3RzLmxlbmd0aCkKKyAgICAgICAgICAgIHJlY3QgPSByZWN0c1tiaWFzID09
ICJyaWdodCIgPyByZWN0cy5sZW5ndGggLSAxIDogMF07CisgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmVjdCA9IG51bGxSZWN0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJlY3Qg
PSByYW5nZShub2RlLCBzdGFydCwgZW5kKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB8fCBudWxs
UmVjdDsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVjdC5sZWZ0IHx8IHJlY3QucmlnaHQgfHwg
c3RhcnQgPT0gMCkgYnJlYWs7CisgICAgICAgIGVuZCA9IHN0YXJ0OworICAgICAgICBzdGFydCA9
IHN0YXJ0IC0gMTsKKyAgICAgICAgY29sbGFwc2UgPSAicmlnaHQiOwogICAgICAgfQorICAgICAg
aWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSkgcmVjdCA9IG1heWJlVXBkYXRlUmVjdEZvclpvb21p
bmcoY20uZGlzcGxheS5tZWFzdXJlLCByZWN0KTsKICAgICB9IGVsc2UgeyAvLyBJZiBpdCBpcyBh
IHdpZGdldCwgc2ltcGx5IGdldCB0aGUgYm94IGZvciB0aGUgd2hvbGUgd2lkZ2V0LgogICAgICAg
aWYgKHN0YXJ0ID4gMCkgY29sbGFwc2UgPSBiaWFzID0gInJpZ2h0IjsKICAgICAgIHZhciByZWN0
czsKQEAgLTE2MzksNyArMjY3NCw3IEBACiAgICAgICBlbHNlCiAgICAgICAgIHJlY3QgPSBub2Rl
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgIH0KLSAgICBpZiAoaWVfdXB0bzggJiYgIXN0
YXJ0ICYmICghcmVjdCB8fCAhcmVjdC5sZWZ0ICYmICFyZWN0LnJpZ2h0KSkgeworICAgIGlmIChp
ZSAmJiBpZV92ZXJzaW9uIDwgOSAmJiAhc3RhcnQgJiYgKCFyZWN0IHx8ICFyZWN0LmxlZnQgJiYg
IXJlY3QucmlnaHQpKSB7CiAgICAgICB2YXIgclNwYW4gPSBub2RlLnBhcmVudE5vZGUuZ2V0Q2xp
ZW50UmVjdHMoKVswXTsKICAgICAgIGlmIChyU3BhbikKICAgICAgICAgcmVjdCA9IHtsZWZ0OiBy
U3Bhbi5sZWZ0LCByaWdodDogclNwYW4ubGVmdCArIGNoYXJXaWR0aChjbS5kaXNwbGF5KSwgdG9w
OiByU3Bhbi50b3AsIGJvdHRvbTogclNwYW4uYm90dG9tfTsKQEAgLTE2NDcsMTggKzI2ODIsMzMg
QEAKICAgICAgICAgcmVjdCA9IG51bGxSZWN0OwogICAgIH0KIAotICAgIHZhciB0b3AsIGJvdCA9
IChyZWN0LmJvdHRvbSArIHJlY3QudG9wKSAvIDIgLSBwcmVwYXJlZC5yZWN0LnRvcDsKKyAgICB2
YXIgcnRvcCA9IHJlY3QudG9wIC0gcHJlcGFyZWQucmVjdC50b3AsIHJib3QgPSByZWN0LmJvdHRv
bSAtIHByZXBhcmVkLnJlY3QudG9wOworICAgIHZhciBtaWQgPSAocnRvcCArIHJib3QpIC8gMjsK
ICAgICB2YXIgaGVpZ2h0cyA9IHByZXBhcmVkLnZpZXcubWVhc3VyZS5oZWlnaHRzOwogICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgaGVpZ2h0cy5sZW5ndGggLSAxOyBpKyspCi0gICAgICBpZiAoYm90
IDwgaGVpZ2h0c1tpXSkgYnJlYWs7Ci0gICAgdG9wID0gaSA/IGhlaWdodHNbaSAtIDFdIDogMDsg
Ym90ID0gaGVpZ2h0c1tpXTsKKyAgICAgIGlmIChtaWQgPCBoZWlnaHRzW2ldKSBicmVhazsKKyAg
ICB2YXIgdG9wID0gaSA/IGhlaWdodHNbaSAtIDFdIDogMCwgYm90ID0gaGVpZ2h0c1tpXTsKICAg
ICB2YXIgcmVzdWx0ID0ge2xlZnQ6IChjb2xsYXBzZSA9PSAicmlnaHQiID8gcmVjdC5yaWdodCA6
IHJlY3QubGVmdCkgLSBwcmVwYXJlZC5yZWN0LmxlZnQsCiAgICAgICAgICAgICAgICAgICByaWdo
dDogKGNvbGxhcHNlID09ICJsZWZ0IiA/IHJlY3QubGVmdCA6IHJlY3QucmlnaHQpIC0gcHJlcGFy
ZWQucmVjdC5sZWZ0LAogICAgICAgICAgICAgICAgICAgdG9wOiB0b3AsIGJvdHRvbTogYm90fTsK
ICAgICBpZiAoIXJlY3QubGVmdCAmJiAhcmVjdC5yaWdodCkgcmVzdWx0LmJvZ3VzID0gdHJ1ZTsK
KyAgICBpZiAoIWNtLm9wdGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSkgeyByZXN1bHQu
cnRvcCA9IHJ0b3A7IHJlc3VsdC5yYm90dG9tID0gcmJvdDsgfQorCiAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgfQogCisgIC8vIFdvcmsgYXJvdW5kIHByb2JsZW0gd2l0aCBib3VuZGluZyBjbGllbnQg
cmVjdHMgb24gcmFuZ2VzIGJlaW5nCisgIC8vIHJldHVybmVkIGluY29ycmVjdGx5IHdoZW4gem9v
bWVkIG9uIElFMTAgYW5kIGJlbG93LgorICBmdW5jdGlvbiBtYXliZVVwZGF0ZVJlY3RGb3Jab29t
aW5nKG1lYXN1cmUsIHJlY3QpIHsKKyAgICBpZiAoIXdpbmRvdy5zY3JlZW4gfHwgc2NyZWVuLmxv
Z2ljYWxYRFBJID09IG51bGwgfHwKKyAgICAgICAgc2NyZWVuLmxvZ2ljYWxYRFBJID09IHNjcmVl
bi5kZXZpY2VYRFBJIHx8ICFoYXNCYWRab29tZWRSZWN0cyhtZWFzdXJlKSkKKyAgICAgIHJldHVy
biByZWN0OworICAgIHZhciBzY2FsZVggPSBzY3JlZW4ubG9naWNhbFhEUEkgLyBzY3JlZW4uZGV2
aWNlWERQSTsKKyAgICB2YXIgc2NhbGVZID0gc2NyZWVuLmxvZ2ljYWxZRFBJIC8gc2NyZWVuLmRl
dmljZVlEUEk7CisgICAgcmV0dXJuIHtsZWZ0OiByZWN0LmxlZnQgKiBzY2FsZVgsIHJpZ2h0OiBy
ZWN0LnJpZ2h0ICogc2NhbGVYLAorICAgICAgICAgICAgdG9wOiByZWN0LnRvcCAqIHNjYWxlWSwg
Ym90dG9tOiByZWN0LmJvdHRvbSAqIHNjYWxlWX07CisgIH0KKwogICBmdW5jdGlvbiBjbGVhckxp
bmVNZWFzdXJlbWVudENhY2hlRm9yKGxpbmVWaWV3KSB7CiAgICAgaWYgKGxpbmVWaWV3Lm1lYXN1
cmUpIHsKICAgICAgIGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGUgPSB7fTsKQEAgLTE2ODcsNyArMjcz
Nyw4IEBACiAKICAgLy8gQ29udmVydHMgYSB7dG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0fSBib3gg
ZnJvbSBsaW5lLWxvY2FsCiAgIC8vIGNvb3JkaW5hdGVzIGludG8gYW5vdGhlciBjb29yZGluYXRl
IHN5c3RlbS4gQ29udGV4dCBtYXkgYmUgb25lIG9mCi0gIC8vICJsaW5lIiwgImRpdiIgKGRpc3Bs
YXkubGluZURpdiksICJsb2NhbCIvbnVsbCAoZWRpdG9yKSwgb3IgInBhZ2UiLgorICAvLyAibGlu
ZSIsICJkaXYiIChkaXNwbGF5LmxpbmVEaXYpLCAibG9jYWwiL251bGwgKGVkaXRvciksICJ3aW5k
b3ciLAorICAvLyBvciAicGFnZSIuCiAgIGZ1bmN0aW9uIGludG9Db29yZFN5c3RlbShjbSwgbGlu
ZU9iaiwgcmVjdCwgY29udGV4dCkgewogICAgIGlmIChsaW5lT2JqLndpZGdldHMpIGZvciAodmFy
IGkgPSAwOyBpIDwgbGluZU9iai53aWRnZXRzLmxlbmd0aDsgKytpKSBpZiAobGluZU9iai53aWRn
ZXRzW2ldLmFib3ZlKSB7CiAgICAgICB2YXIgc2l6ZSA9IHdpZGdldEhlaWdodChsaW5lT2JqLndp
ZGdldHNbaV0pOwpAQCAtMTczNSwxMSArMjc4NiwxMSBAQAogICAvLyBSZXR1cm5zIGEgYm94IGZv
ciBhIGdpdmVuIGN1cnNvciBwb3NpdGlvbiwgd2hpY2ggbWF5IGhhdmUgYW4KICAgLy8gJ290aGVy
JyBwcm9wZXJ0eSBjb250YWluaW5nIHRoZSBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kYXJ5IGN1cnNv
cgogICAvLyBvbiBhIGJpZGkgYm91bmRhcnkuCi0gIGZ1bmN0aW9uIGN1cnNvckNvb3JkcyhjbSwg
cG9zLCBjb250ZXh0LCBsaW5lT2JqLCBwcmVwYXJlZE1lYXN1cmUpIHsKKyAgZnVuY3Rpb24gY3Vy
c29yQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSwgdmFy
SGVpZ2h0KSB7CiAgICAgbGluZU9iaiA9IGxpbmVPYmogfHwgZ2V0TGluZShjbS5kb2MsIHBvcy5s
aW5lKTsKICAgICBpZiAoIXByZXBhcmVkTWVhc3VyZSkgcHJlcGFyZWRNZWFzdXJlID0gcHJlcGFy
ZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lT2JqKTsKICAgICBmdW5jdGlvbiBnZXQoY2gsIHJpZ2h0
KSB7Ci0gICAgICB2YXIgbSA9IG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3Vy
ZSwgY2gsIHJpZ2h0ID8gInJpZ2h0IiA6ICJsZWZ0Iik7CisgICAgICB2YXIgbSA9IG1lYXN1cmVD
aGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgY2gsIHJpZ2h0ID8gInJpZ2h0IiA6ICJs
ZWZ0IiwgdmFySGVpZ2h0KTsKICAgICAgIGlmIChyaWdodCkgbS5sZWZ0ID0gbS5yaWdodDsgZWxz
ZSBtLnJpZ2h0ID0gbS5sZWZ0OwogICAgICAgcmV0dXJuIGludG9Db29yZFN5c3RlbShjbSwgbGlu
ZU9iaiwgbSwgY29udGV4dCk7CiAgICAgfQpAQCAtMTg5MSwxMCArMjk0MiwxMyBAQAogICAvLyBl
cnJvci1wcm9uZSkuIEluc3RlYWQsIGRpc3BsYXkgdXBkYXRlcyBhcmUgYmF0Y2hlZCBhbmQgdGhl
biBhbGwKICAgLy8gY29tYmluZWQgYW5kIGV4ZWN1dGVkIGF0IG9uY2UuCiAKKyAgdmFyIG9wZXJh
dGlvbkdyb3VwID0gbnVsbDsKKwogICB2YXIgbmV4dE9wSWQgPSAwOwogICAvLyBTdGFydCBhIG5l
dyBvcGVyYXRpb24uCiAgIGZ1bmN0aW9uIHN0YXJ0T3BlcmF0aW9uKGNtKSB7CiAgICAgY20uY3Vy
T3AgPSB7CisgICAgICBjbTogY20sCiAgICAgICB2aWV3Q2hhbmdlZDogZmFsc2UsICAgICAgLy8g
RmxhZyB0aGF0IGluZGljYXRlcyB0aGF0IGxpbmVzIG1pZ2h0IG5lZWQgdG8gYmUgcmVkcmF3bgog
ICAgICAgc3RhcnRIZWlnaHQ6IGNtLmRvYy5oZWlnaHQsIC8vIFVzZWQgdG8gZGV0ZWN0IG5lZWQg
dG8gdXBkYXRlIHNjcm9sbGJhcgogICAgICAgZm9yY2VVcGRhdGU6IGZhbHNlLCAgICAgIC8vIFVz
ZWQgdG8gZm9yY2UgYSByZWRyYXcKQEAgLTE5MDIsNjAgKzI5NTYsMTYwIEBACiAgICAgICB0eXBp
bmc6IGZhbHNlLCAgICAgICAgICAgLy8gV2hldGhlciB0aGlzIHJlc2V0IHNob3VsZCBiZSBjYXJl
ZnVsIHRvIGxlYXZlIGV4aXN0aW5nIHRleHQgKGZvciBjb21wb3NpdGluZykKICAgICAgIGNoYW5n
ZU9ianM6IG51bGwsICAgICAgICAvLyBBY2N1bXVsYXRlZCBjaGFuZ2VzLCBmb3IgZmlyaW5nIGNo
YW5nZSBldmVudHMKICAgICAgIGN1cnNvckFjdGl2aXR5SGFuZGxlcnM6IG51bGwsIC8vIFNldCBv
ZiBoYW5kbGVycyB0byBmaXJlIGN1cnNvckFjdGl2aXR5IG9uCisgICAgICBjdXJzb3JBY3Rpdml0
eUNhbGxlZDogMCwgLy8gVHJhY2tzIHdoaWNoIGN1cnNvckFjdGl2aXR5IGhhbmRsZXJzIGhhdmUg
YmVlbiBjYWxsZWQgYWxyZWFkeQogICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogZmFsc2UsIC8vIFdo
ZXRoZXIgdGhlIHNlbGVjdGlvbiBuZWVkcyB0byBiZSByZWRyYXduCiAgICAgICB1cGRhdGVNYXhM
aW5lOiBmYWxzZSwgICAgLy8gU2V0IHdoZW4gdGhlIHdpZGVzdCBsaW5lIG5lZWRzIHRvIGJlIGRl
dGVybWluZWQgYW5ldwogICAgICAgc2Nyb2xsTGVmdDogbnVsbCwgc2Nyb2xsVG9wOiBudWxsLCAv
LyBJbnRlcm1lZGlhdGUgc2Nyb2xsIHBvc2l0aW9uLCBub3QgcHVzaGVkIHRvIERPTSB5ZXQKICAg
ICAgIHNjcm9sbFRvUG9zOiBudWxsLCAgICAgICAvLyBVc2VkIHRvIHNjcm9sbCB0byBhIHNwZWNp
ZmljIHBvc2l0aW9uCisgICAgICBmb2N1czogZmFsc2UsCiAgICAgICBpZDogKytuZXh0T3BJZCAg
ICAgICAgICAgLy8gVW5pcXVlIElECiAgICAgfTsKLSAgICBpZiAoIWRlbGF5ZWRDYWxsYmFja0Rl
cHRoKyspIGRlbGF5ZWRDYWxsYmFja3MgPSBbXTsKKyAgICBpZiAob3BlcmF0aW9uR3JvdXApIHsK
KyAgICAgIG9wZXJhdGlvbkdyb3VwLm9wcy5wdXNoKGNtLmN1ck9wKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgY20uY3VyT3Aub3duc0dyb3VwID0gb3BlcmF0aW9uR3JvdXAgPSB7CisgICAgICAgIG9w
czogW2NtLmN1ck9wXSwKKyAgICAgICAgZGVsYXllZENhbGxiYWNrczogW10KKyAgICAgIH07Cisg
ICAgfQorICB9CisKKyAgZnVuY3Rpb24gZmlyZUNhbGxiYWNrc0Zvck9wcyhncm91cCkgeworICAg
IC8vIENhbGxzIGRlbGF5ZWQgY2FsbGJhY2tzIGFuZCBjdXJzb3JBY3Rpdml0eSBoYW5kbGVycyB1
bnRpbCBubworICAgIC8vIG5ldyBvbmVzIGFwcGVhcgorICAgIHZhciBjYWxsYmFja3MgPSBncm91
cC5kZWxheWVkQ2FsbGJhY2tzLCBpID0gMDsKKyAgICBkbyB7CisgICAgICBmb3IgKDsgaSA8IGNh
bGxiYWNrcy5sZW5ndGg7IGkrKykKKyAgICAgICAgY2FsbGJhY2tzW2ldLmNhbGwobnVsbCk7Cisg
ICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLm9wcy5sZW5ndGg7IGorKykgeworICAgICAg
ICB2YXIgb3AgPSBncm91cC5vcHNbal07CisgICAgICAgIGlmIChvcC5jdXJzb3JBY3Rpdml0eUhh
bmRsZXJzKQorICAgICAgICAgIHdoaWxlIChvcC5jdXJzb3JBY3Rpdml0eUNhbGxlZCA8IG9wLmN1
cnNvckFjdGl2aXR5SGFuZGxlcnMubGVuZ3RoKQorICAgICAgICAgICAgb3AuY3Vyc29yQWN0aXZp
dHlIYW5kbGVyc1tvcC5jdXJzb3JBY3Rpdml0eUNhbGxlZCsrXS5jYWxsKG51bGwsIG9wLmNtKTsK
KyAgICAgIH0KKyAgICB9IHdoaWxlIChpIDwgY2FsbGJhY2tzLmxlbmd0aCk7CiAgIH0KIAogICAv
LyBGaW5pc2ggYW4gb3BlcmF0aW9uLCB1cGRhdGluZyB0aGUgZGlzcGxheSBhbmQgc2lnbmFsbGlu
ZyBkZWxheWVkIGV2ZW50cwogICBmdW5jdGlvbiBlbmRPcGVyYXRpb24oY20pIHsKLSAgICB2YXIg
b3AgPSBjbS5jdXJPcCwgZG9jID0gY20uZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheTsKLSAgICBj
bS5jdXJPcCA9IG51bGw7Ci0KKyAgICB2YXIgb3AgPSBjbS5jdXJPcCwgZ3JvdXAgPSBvcC5vd25z
R3JvdXA7CisgICAgaWYgKCFncm91cCkgcmV0dXJuOworCisgICAgdHJ5IHsgZmlyZUNhbGxiYWNr
c0Zvck9wcyhncm91cCk7IH0KKyAgICBmaW5hbGx5IHsKKyAgICAgIG9wZXJhdGlvbkdyb3VwID0g
bnVsbDsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAub3BzLmxlbmd0aDsgaSsrKQor
ICAgICAgICBncm91cC5vcHNbaV0uY20uY3VyT3AgPSBudWxsOworICAgICAgZW5kT3BlcmF0aW9u
cyhncm91cCk7CisgICAgfQorICB9CisKKyAgLy8gVGhlIERPTSB1cGRhdGVzIGRvbmUgd2hlbiBh
biBvcGVyYXRpb24gZmluaXNoZXMgYXJlIGJhdGNoZWQgc28KKyAgLy8gdGhhdCB0aGUgbWluaW11
bSBudW1iZXIgb2YgcmVsYXlvdXRzIGFyZSByZXF1aXJlZC4KKyAgZnVuY3Rpb24gZW5kT3BlcmF0
aW9ucyhncm91cCkgeworICAgIHZhciBvcHMgPSBncm91cC5vcHM7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIC8vIFJlYWQgRE9NCisgICAgICBlbmRPcGVyYXRpb25f
UjEob3BzW2ldKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgLy8g
V3JpdGUgRE9NIChtYXliZSkKKyAgICAgIGVuZE9wZXJhdGlvbl9XMShvcHNbaV0pOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSAvLyBSZWFkIERPTQorICAgICAgZW5k
T3BlcmF0aW9uX1IyKG9wc1tpXSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHMubGVuZ3Ro
OyBpKyspIC8vIFdyaXRlIERPTSAobWF5YmUpCisgICAgICBlbmRPcGVyYXRpb25fVzIob3BzW2ld
KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgLy8gUmVhZCBET00K
KyAgICAgIGVuZE9wZXJhdGlvbl9maW5pc2gob3BzW2ldKTsKKyAgfQorCisgIGZ1bmN0aW9uIGVu
ZE9wZXJhdGlvbl9SMShvcCkgeworICAgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlz
cGxheTsKKyAgICBtYXliZUNsaXBTY3JvbGxiYXJzKGNtKTsKICAgICBpZiAob3AudXBkYXRlTWF4
TGluZSkgZmluZE1heExpbmUoY20pOwogCi0gICAgLy8gSWYgaXQgbG9va3MgbGlrZSBhbiB1cGRh
dGUgbWlnaHQgYmUgbmVlZGVkLCBjYWxsIHVwZGF0ZURpc3BsYXkKLSAgICBpZiAob3Audmlld0No
YW5nZWQgfHwgb3AuZm9yY2VVcGRhdGUgfHwgb3Auc2Nyb2xsVG9wICE9IG51bGwgfHwKLSAgICAg
ICAgb3Auc2Nyb2xsVG9Qb3MgJiYgKG9wLnNjcm9sbFRvUG9zLmZyb20ubGluZSA8IGRpc3BsYXku
dmlld0Zyb20gfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLnNjcm9sbFRvUG9zLnRv
LmxpbmUgPj0gZGlzcGxheS52aWV3VG8pIHx8Ci0gICAgICAgIGRpc3BsYXkubWF4TGluZUNoYW5n
ZWQgJiYgY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsKLSAgICAgIHZhciB1cGRhdGVkID0gdXBk
YXRlRGlzcGxheShjbSwge3RvcDogb3Auc2Nyb2xsVG9wLCBlbnN1cmU6IG9wLnNjcm9sbFRvUG9z
fSwgb3AuZm9yY2VVcGRhdGUpOwotICAgICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0
SGVpZ2h0KSBjbS5kb2Muc2Nyb2xsVG9wID0gY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7
CisgICAgb3AubXVzdFVwZGF0ZSA9IG9wLnZpZXdDaGFuZ2VkIHx8IG9wLmZvcmNlVXBkYXRlIHx8
IG9wLnNjcm9sbFRvcCAhPSBudWxsIHx8CisgICAgICBvcC5zY3JvbGxUb1BvcyAmJiAob3Auc2Ny
b2xsVG9Qb3MuZnJvbS5saW5lIDwgZGlzcGxheS52aWV3RnJvbSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wLnNjcm9sbFRvUG9zLnRvLmxpbmUgPj0gZGlzcGxheS52aWV3VG8pIHx8Cisg
ICAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkICYmIGNtLm9wdGlvbnMubGluZVdyYXBwaW5nOwor
ICAgIG9wLnVwZGF0ZSA9IG9wLm11c3RVcGRhdGUgJiYKKyAgICAgIG5ldyBEaXNwbGF5VXBkYXRl
KGNtLCBvcC5tdXN0VXBkYXRlICYmIHt0b3A6IG9wLnNjcm9sbFRvcCwgZW5zdXJlOiBvcC5zY3Jv
bGxUb1Bvc30sIG9wLmZvcmNlVXBkYXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGVuZE9wZXJhdGlv
bl9XMShvcCkgeworICAgIG9wLnVwZGF0ZWREaXNwbGF5ID0gb3AubXVzdFVwZGF0ZSAmJiB1cGRh
dGVEaXNwbGF5SWZOZWVkZWQob3AuY20sIG9wLnVwZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBl
bmRPcGVyYXRpb25fUjIob3ApIHsKKyAgICB2YXIgY20gPSBvcC5jbSwgZGlzcGxheSA9IGNtLmRp
c3BsYXk7CisgICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KSB1cGRhdGVIZWlnaHRzSW5WaWV3cG9y
dChjbSk7CisKKyAgICBvcC5iYXJNZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pOwor
CisgICAgLy8gSWYgdGhlIG1heCBsaW5lIGNoYW5nZWQgc2luY2UgaXQgd2FzIGxhc3QgbWVhc3Vy
ZWQsIG1lYXN1cmUgaXQsCisgICAgLy8gYW5kIGVuc3VyZSB0aGUgZG9jdW1lbnQncyB3aWR0aCBt
YXRjaGVzIGl0LgorICAgIC8vIHVwZGF0ZURpc3BsYXlfVzIgd2lsbCB1c2UgdGhlc2UgcHJvcGVy
dGllcyB0byBkbyB0aGUgYWN0dWFsIHJlc2l6aW5nCisgICAgaWYgKGRpc3BsYXkubWF4TGluZUNo
YW5nZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7CisgICAgICBvcC5hZGp1c3RXaWR0
aFRvID0gbWVhc3VyZUNoYXIoY20sIGRpc3BsYXkubWF4TGluZSwgZGlzcGxheS5tYXhMaW5lLnRl
eHQubGVuZ3RoKS5sZWZ0ICsgMzsKKyAgICAgIGNtLmRpc3BsYXkuc2l6ZXJXaWR0aCA9IG9wLmFk
anVzdFdpZHRoVG87CisgICAgICBvcC5iYXJNZWFzdXJlLnNjcm9sbFdpZHRoID0KKyAgICAgICAg
TWF0aC5tYXgoZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwgZGlzcGxheS5zaXplci5vZmZz
ZXRMZWZ0ICsgb3AuYWRqdXN0V2lkdGhUbyArIHNjcm9sbEdhcChjbSkgKyBjbS5kaXNwbGF5LmJh
cldpZHRoKTsKKyAgICAgIG9wLm1heFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBkaXNwbGF5LnNp
emVyLm9mZnNldExlZnQgKyBvcC5hZGp1c3RXaWR0aFRvIC0gZGlzcGxheVdpZHRoKGNtKSk7Cisg
ICAgfQorCisgICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5IHx8IG9wLnNlbGVjdGlvbkNoYW5nZWQp
CisgICAgICBvcC5wcmVwYXJlZFNlbGVjdGlvbiA9IGRpc3BsYXkuaW5wdXQucHJlcGFyZVNlbGVj
dGlvbigpOworICB9CisKKyAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uX1cyKG9wKSB7CisgICAgdmFy
IGNtID0gb3AuY207CisKKyAgICBpZiAob3AuYWRqdXN0V2lkdGhUbyAhPSBudWxsKSB7CisgICAg
ICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gb3AuYWRqdXN0V2lkdGhUbyArICJw
eCI7CisgICAgICBpZiAob3AubWF4U2Nyb2xsTGVmdCA8IGNtLmRvYy5zY3JvbGxMZWZ0KQorICAg
ICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBNYXRoLm1pbihjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9s
bExlZnQsIG9wLm1heFNjcm9sbExlZnQpLCB0cnVlKTsKKyAgICAgIGNtLmRpc3BsYXkubWF4TGlu
ZUNoYW5nZWQgPSBmYWxzZTsKICAgICB9Ci0gICAgLy8gSWYgbm8gdXBkYXRlIHdhcyBydW4sIGJ1
dCB0aGUgc2VsZWN0aW9uIGNoYW5nZWQsIHJlZHJhdyB0aGF0LgotICAgIGlmICghdXBkYXRlZCAm
JiBvcC5zZWxlY3Rpb25DaGFuZ2VkKSB1cGRhdGVTZWxlY3Rpb24oY20pOwotICAgIGlmICghdXBk
YXRlZCAmJiBvcC5zdGFydEhlaWdodCAhPSBjbS5kb2MuaGVpZ2h0KSB1cGRhdGVTY3JvbGxiYXJz
KGNtKTsKKworICAgIGlmIChvcC5wcmVwYXJlZFNlbGVjdGlvbikKKyAgICAgIGNtLmRpc3BsYXku
aW5wdXQuc2hvd1NlbGVjdGlvbihvcC5wcmVwYXJlZFNlbGVjdGlvbik7CisgICAgaWYgKG9wLnVw
ZGF0ZWREaXNwbGF5KQorICAgICAgc2V0RG9jdW1lbnRIZWlnaHQoY20sIG9wLmJhck1lYXN1cmUp
OworICAgIGlmIChvcC51cGRhdGVkRGlzcGxheSB8fCBvcC5zdGFydEhlaWdodCAhPSBjbS5kb2Mu
aGVpZ2h0KQorICAgICAgdXBkYXRlU2Nyb2xsYmFycyhjbSwgb3AuYmFyTWVhc3VyZSk7CisKKyAg
ICBpZiAob3Auc2VsZWN0aW9uQ2hhbmdlZCkgcmVzdGFydEJsaW5rKGNtKTsKKworICAgIGlmIChj
bS5zdGF0ZS5mb2N1c2VkICYmIG9wLnVwZGF0ZUlucHV0KQorICAgICAgY20uZGlzcGxheS5pbnB1
dC5yZXNldChvcC50eXBpbmcpOworICAgIGlmIChvcC5mb2N1cyAmJiBvcC5mb2N1cyA9PSBhY3Rp
dmVFbHQoKSkgZW5zdXJlRm9jdXMob3AuY20pOworICB9CisKKyAgZnVuY3Rpb24gZW5kT3BlcmF0
aW9uX2ZpbmlzaChvcCkgeworICAgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxh
eSwgZG9jID0gY20uZG9jOworCisgICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KSBwb3N0VXBkYXRl
RGlzcGxheShjbSwgb3AudXBkYXRlKTsKIAogICAgIC8vIEFib3J0IG1vdXNlIHdoZWVsIGRlbHRh
IG1lYXN1cmVtZW50LCB3aGVuIHNjcm9sbGluZyBleHBsaWNpdGx5CiAgICAgaWYgKGRpc3BsYXku
d2hlZWxTdGFydFggIT0gbnVsbCAmJiAob3Auc2Nyb2xsVG9wICE9IG51bGwgfHwgb3Auc2Nyb2xs
TGVmdCAhPSBudWxsIHx8IG9wLnNjcm9sbFRvUG9zKSkKICAgICAgIGRpc3BsYXkud2hlZWxTdGFy
dFggPSBkaXNwbGF5LndoZWVsU3RhcnRZID0gbnVsbDsKIAogICAgIC8vIFByb3BhZ2F0ZSB0aGUg
c2Nyb2xsIHBvc2l0aW9uIHRvIHRoZSBhY3R1YWwgRE9NIHNjcm9sbGVyCi0gICAgaWYgKG9wLnNj
cm9sbFRvcCAhPSBudWxsICYmIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IG9wLnNjcm9s
bFRvcCkgewotICAgICAgdmFyIHRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRpc3BsYXkuc2Ny
b2xsZXIuc2Nyb2xsSGVpZ2h0IC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIG9wLnNj
cm9sbFRvcCkpOwotICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSBkaXNwbGF5LnNj
cm9sbGJhclYuc2Nyb2xsVG9wID0gZG9jLnNjcm9sbFRvcCA9IHRvcDsKLSAgICB9Ci0gICAgaWYg
KG9wLnNjcm9sbExlZnQgIT0gbnVsbCAmJiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgIT0g
b3Auc2Nyb2xsTGVmdCkgewotICAgICAgdmFyIGxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihk
aXNwbGF5LnNjcm9sbGVyLnNjcm9sbFdpZHRoIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0
aCwgb3Auc2Nyb2xsTGVmdCkpOwotICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ID0g
ZGlzcGxheS5zY3JvbGxiYXJILnNjcm9sbExlZnQgPSBkb2Muc2Nyb2xsTGVmdCA9IGxlZnQ7Cisg
ICAgaWYgKG9wLnNjcm9sbFRvcCAhPSBudWxsICYmIChkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRv
cCAhPSBvcC5zY3JvbGxUb3AgfHwgb3AuZm9yY2VTY3JvbGwpKSB7CisgICAgICBkb2Muc2Nyb2xs
VG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQg
LSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCwgb3Auc2Nyb2xsVG9wKSk7CisgICAgICBk
aXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKGRvYy5zY3JvbGxUb3ApOworICAgICAgZGlz
cGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSBkb2Muc2Nyb2xsVG9wOworICAgIH0KKyAgICBpZiAo
b3Auc2Nyb2xsTGVmdCAhPSBudWxsICYmIChkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgIT0g
b3Auc2Nyb2xsTGVmdCB8fCBvcC5mb3JjZVNjcm9sbCkpIHsKKyAgICAgIGRvYy5zY3JvbGxMZWZ0
ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aCAtIGRp
c3BsYXlXaWR0aChjbSksIG9wLnNjcm9sbExlZnQpKTsKKyAgICAgIGRpc3BsYXkuc2Nyb2xsYmFy
cy5zZXRTY3JvbGxMZWZ0KGRvYy5zY3JvbGxMZWZ0KTsKKyAgICAgIGRpc3BsYXkuc2Nyb2xsZXIu
c2Nyb2xsTGVmdCA9IGRvYy5zY3JvbGxMZWZ0OwogICAgICAgYWxpZ25Ib3Jpem9udGFsbHkoY20p
OwogICAgIH0KICAgICAvLyBJZiB3ZSBuZWVkIHRvIHNjcm9sbCBhIHNwZWNpZmljIHBvc2l0aW9u
IGludG8gdmlldywgZG8gc28uCiAgICAgaWYgKG9wLnNjcm9sbFRvUG9zKSB7Ci0gICAgICB2YXIg
Y29vcmRzID0gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIGNsaXBQb3MoY20uZG9jLCBvcC5zY3JvbGxU
b1Bvcy5mcm9tKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUG9z
KGNtLmRvYywgb3Auc2Nyb2xsVG9Qb3MudG8pLCBvcC5zY3JvbGxUb1Bvcy5tYXJnaW4pOworICAg
ICAgdmFyIGNvb3JkcyA9IHNjcm9sbFBvc0ludG9WaWV3KGNtLCBjbGlwUG9zKGRvYywgb3Auc2Ny
b2xsVG9Qb3MuZnJvbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xp
cFBvcyhkb2MsIG9wLnNjcm9sbFRvUG9zLnRvKSwgb3Auc2Nyb2xsVG9Qb3MubWFyZ2luKTsKICAg
ICAgIGlmIChvcC5zY3JvbGxUb1Bvcy5pc0N1cnNvciAmJiBjbS5zdGF0ZS5mb2N1c2VkKSBtYXli
ZVNjcm9sbFdpbmRvdyhjbSwgY29vcmRzKTsKICAgICB9CiAKLSAgICBpZiAob3Auc2VsZWN0aW9u
Q2hhbmdlZCkgcmVzdGFydEJsaW5rKGNtKTsKLQotICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkICYm
IG9wLnVwZGF0ZUlucHV0KQotICAgICAgcmVzZXRJbnB1dChjbSwgb3AudHlwaW5nKTsKLQogICAg
IC8vIEZpcmUgZXZlbnRzIGZvciBtYXJrZXJzIHRoYXQgYXJlIGhpZGRlbi91bmlkZGVuIGJ5IGVk
aXRpbmcgb3IKICAgICAvLyB1bmRvaW5nCiAgICAgdmFyIGhpZGRlbiA9IG9wLm1heWJlSGlkZGVu
TWFya2VycywgdW5oaWRkZW4gPSBvcC5tYXliZVVuaGlkZGVuTWFya2VyczsKQEAgLTE5NjQsMTgg
KzMxMTgsMTQgQEAKICAgICBpZiAodW5oaWRkZW4pIGZvciAodmFyIGkgPSAwOyBpIDwgdW5oaWRk
ZW4ubGVuZ3RoOyArK2kpCiAgICAgICBpZiAodW5oaWRkZW5baV0ubGluZXMubGVuZ3RoKSBzaWdu
YWwodW5oaWRkZW5baV0sICJ1bmhpZGUiKTsKIAotICAgIHZhciBkZWxheWVkOwotICAgIGlmICgh
LS1kZWxheWVkQ2FsbGJhY2tEZXB0aCkgewotICAgICAgZGVsYXllZCA9IGRlbGF5ZWRDYWxsYmFj
a3M7Ci0gICAgICBkZWxheWVkQ2FsbGJhY2tzID0gbnVsbDsKLSAgICB9CisgICAgaWYgKGRpc3Bs
YXkud3JhcHBlci5vZmZzZXRIZWlnaHQpCisgICAgICBkb2Muc2Nyb2xsVG9wID0gY20uZGlzcGxh
eS5zY3JvbGxlci5zY3JvbGxUb3A7CisKICAgICAvLyBGaXJlIGNoYW5nZSBldmVudHMsIGFuZCBk
ZWxheWVkIGV2ZW50IGhhbmRsZXJzCiAgICAgaWYgKG9wLmNoYW5nZU9ianMpCiAgICAgICBzaWdu
YWwoY20sICJjaGFuZ2VzIiwgY20sIG9wLmNoYW5nZU9ianMpOwotICAgIGlmIChkZWxheWVkKSBm
b3IgKHZhciBpID0gMDsgaSA8IGRlbGF5ZWQubGVuZ3RoOyArK2kpIGRlbGF5ZWRbaV0oKTsKLSAg
ICBpZiAob3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycykKLSAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgb3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycy5sZW5ndGg7IGkrKykKLSAgICAgICAgb3AuY3Vy
c29yQWN0aXZpdHlIYW5kbGVyc1tpXShjbSk7CisgICAgaWYgKG9wLnVwZGF0ZSkKKyAgICAgIG9w
LnVwZGF0ZS5maW5pc2goKTsKICAgfQogCiAgIC8vIFJ1biB0aGUgZ2l2ZW4gZnVuY3Rpb24gaW4g
YW4gb3BlcmF0aW9uCkBAIC0yMjAxLDE1MiArMzM1MSw2IEBACiAgICAgcmV0dXJuIGRpcnR5Owog
ICB9CiAKLSAgLy8gSU5QVVQgSEFORExJTkcKLQotICAvLyBQb2xsIGZvciBpbnB1dCBjaGFuZ2Vz
LCB1c2luZyB0aGUgbm9ybWFsIHJhdGUgb2YgcG9sbGluZy4gVGhpcwotICAvLyBydW5zIGFzIGxv
bmcgYXMgdGhlIGVkaXRvciBpcyBmb2N1c2VkLgotICBmdW5jdGlvbiBzbG93UG9sbChjbSkgewot
ICAgIGlmIChjbS5kaXNwbGF5LnBvbGxpbmdGYXN0KSByZXR1cm47Ci0gICAgY20uZGlzcGxheS5w
b2xsLnNldChjbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgZnVuY3Rpb24oKSB7Ci0gICAgICByZWFk
SW5wdXQoY20pOwotICAgICAgaWYgKGNtLnN0YXRlLmZvY3VzZWQpIHNsb3dQb2xsKGNtKTsKLSAg
ICB9KTsKLSAgfQotCi0gIC8vIFdoZW4gYW4gZXZlbnQgaGFzIGp1c3QgY29tZSBpbiB0aGF0IGlz
IGxpa2VseSB0byBhZGQgb3IgY2hhbmdlCi0gIC8vIHNvbWV0aGluZyBpbiB0aGUgaW5wdXQgdGV4
dGFyZWEsIHdlIHBvbGwgZmFzdGVyLCB0byBlbnN1cmUgdGhhdAotICAvLyB0aGUgY2hhbmdlIGFw
cGVhcnMgb24gdGhlIHNjcmVlbiBxdWlja2x5LgotICBmdW5jdGlvbiBmYXN0UG9sbChjbSkgewot
ICAgIHZhciBtaXNzZWQgPSBmYWxzZTsKLSAgICBjbS5kaXNwbGF5LnBvbGxpbmdGYXN0ID0gdHJ1
ZTsKLSAgICBmdW5jdGlvbiBwKCkgewotICAgICAgdmFyIGNoYW5nZWQgPSByZWFkSW5wdXQoY20p
OwotICAgICAgaWYgKCFjaGFuZ2VkICYmICFtaXNzZWQpIHttaXNzZWQgPSB0cnVlOyBjbS5kaXNw
bGF5LnBvbGwuc2V0KDYwLCBwKTt9Ci0gICAgICBlbHNlIHtjbS5kaXNwbGF5LnBvbGxpbmdGYXN0
ID0gZmFsc2U7IHNsb3dQb2xsKGNtKTt9Ci0gICAgfQotICAgIGNtLmRpc3BsYXkucG9sbC5zZXQo
MjAsIHApOwotICB9Ci0KLSAgLy8gUmVhZCBpbnB1dCBmcm9tIHRoZSB0ZXh0YXJlYSwgYW5kIHVw
ZGF0ZSB0aGUgZG9jdW1lbnQgdG8gbWF0Y2guCi0gIC8vIFdoZW4gc29tZXRoaW5nIGlzIHNlbGVj
dGVkLCBpdCBpcyBwcmVzZW50IGluIHRoZSB0ZXh0YXJlYSwgYW5kCi0gIC8vIHNlbGVjdGVkICh1
bmxlc3MgaXQgaXMgaHVnZSwgaW4gd2hpY2ggY2FzZSBhIHBsYWNlaG9sZGVyIGlzCi0gIC8vIHVz
ZWQpLiBXaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIHRoZSBjdXJzb3Igc2l0cyBhZnRlciBwcmV2
aW91c2x5Ci0gIC8vIHNlZW4gdGV4dCAoY2FuIGJlIGVtcHR5KSwgd2hpY2ggaXMgc3RvcmVkIGlu
IHByZXZJbnB1dCAod2UgbXVzdAotICAvLyBub3QgcmVzZXQgdGhlIHRleHRhcmVhIHdoZW4gdHlw
aW5nLCBiZWNhdXNlIHRoYXQgYnJlYWtzIElNRSkuCi0gIGZ1bmN0aW9uIHJlYWRJbnB1dChjbSkg
ewotICAgIHZhciBpbnB1dCA9IGNtLmRpc3BsYXkuaW5wdXQsIHByZXZJbnB1dCA9IGNtLmRpc3Bs
YXkucHJldklucHV0LCBkb2MgPSBjbS5kb2M7Ci0gICAgLy8gU2luY2UgdGhpcyBpcyBjYWxsZWQg
YSAqbG90KiwgdHJ5IHRvIGJhaWwgb3V0IGFzIGNoZWFwbHkgYXMKLSAgICAvLyBwb3NzaWJsZSB3
aGVuIGl0IGlzIGNsZWFyIHRoYXQgbm90aGluZyBoYXBwZW5lZC4gaGFzU2VsZWN0aW9uCi0gICAg
Ly8gd2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIGEgbG90IG9mIHRleHQgaW4gdGhlIHRl
eHRhcmVhLAotICAgIC8vIGluIHdoaWNoIGNhc2UgcmVhZGluZyBpdHMgdmFsdWUgd291bGQgYmUg
ZXhwZW5zaXZlLgotICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCB8fCAoaGFzU2VsZWN0aW9uKGlu
cHV0KSAmJiAhcHJldklucHV0KSB8fCBpc1JlYWRPbmx5KGNtKSB8fCBjbS5vcHRpb25zLmRpc2Fi
bGVJbnB1dCkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBTZWUgcGFzdGUgaGFuZGxlciBm
b3IgbW9yZSBvbiB0aGUgZmFrZWRMYXN0Q2hhciBrbHVkZ2UKLSAgICBpZiAoY20uc3RhdGUucGFz
dGVJbmNvbWluZyAmJiBjbS5zdGF0ZS5mYWtlZExhc3RDaGFyKSB7Ci0gICAgICBpbnB1dC52YWx1
ZSA9IGlucHV0LnZhbHVlLnN1YnN0cmluZygwLCBpbnB1dC52YWx1ZS5sZW5ndGggLSAxKTsKLSAg
ICAgIGNtLnN0YXRlLmZha2VkTGFzdENoYXIgPSBmYWxzZTsKLSAgICB9Ci0gICAgdmFyIHRleHQg
PSBpbnB1dC52YWx1ZTsKLSAgICAvLyBJZiBub3RoaW5nIGNoYW5nZWQsIGJhaWwuCi0gICAgaWYg
KHRleHQgPT0gcHJldklucHV0ICYmICFjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSByZXR1cm4gZmFs
c2U7Ci0gICAgLy8gV29yayBhcm91bmQgbm9uc2Vuc2ljYWwgc2VsZWN0aW9uIHJlc2V0dGluZyBp
biBJRTkvMTAKLSAgICBpZiAoaWUgJiYgIWllX3VwdG84ICYmIGNtLmRpc3BsYXkuaW5wdXRIYXNT
ZWxlY3Rpb24gPT09IHRleHQpIHsKLSAgICAgIHJlc2V0SW5wdXQoY20pOwotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHZhciB3aXRoT3AgPSAhY20uY3VyT3A7Ci0gICAgaWYgKHdp
dGhPcCkgc3RhcnRPcGVyYXRpb24oY20pOwotICAgIGNtLmRpc3BsYXkuc2hpZnQgPSBmYWxzZTsK
LQotICAgIGlmICh0ZXh0LmNoYXJDb2RlQXQoMCkgPT0gMHgyMDBiICYmIGRvYy5zZWwgPT0gY20u
ZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSAmJiAhcHJldklucHV0KQotICAgICAgcHJldklucHV0
ID0gIlx1MjAwYiI7Ci0gICAgLy8gRmluZCB0aGUgcGFydCBvZiB0aGUgaW5wdXQgdGhhdCBpcyBh
Y3R1YWxseSBuZXcKLSAgICB2YXIgc2FtZSA9IDAsIGwgPSBNYXRoLm1pbihwcmV2SW5wdXQubGVu
Z3RoLCB0ZXh0Lmxlbmd0aCk7Ci0gICAgd2hpbGUgKHNhbWUgPCBsICYmIHByZXZJbnB1dC5jaGFy
Q29kZUF0KHNhbWUpID09IHRleHQuY2hhckNvZGVBdChzYW1lKSkgKytzYW1lOwotICAgIHZhciBp
bnNlcnRlZCA9IHRleHQuc2xpY2Uoc2FtZSksIHRleHRMaW5lcyA9IHNwbGl0TGluZXMoaW5zZXJ0
ZWQpOwotCi0gICAgLy8gV2hlbiBwYXNpbmcgTiBsaW5lcyBpbnRvIE4gc2VsZWN0aW9ucywgaW5z
ZXJ0IG9uZSBsaW5lIHBlciBzZWxlY3Rpb24KLSAgICB2YXIgbXVsdGlQYXN0ZSA9IGNtLnN0YXRl
LnBhc3RlSW5jb21pbmcgJiYgdGV4dExpbmVzLmxlbmd0aCA+IDEgJiYgZG9jLnNlbC5yYW5nZXMu
bGVuZ3RoID09IHRleHRMaW5lcy5sZW5ndGg7Ci0KLSAgICAvLyBOb3JtYWwgYmVoYXZpb3IgaXMg
dG8gaW5zZXJ0IHRoZSBuZXcgdGV4dCBpbnRvIGV2ZXJ5IHNlbGVjdGlvbgotICAgIGZvciAodmFy
IGkgPSBkb2Muc2VsLnJhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewotICAgICAgdmFy
IHJhbmdlID0gZG9jLnNlbC5yYW5nZXNbaV07Ci0gICAgICB2YXIgZnJvbSA9IHJhbmdlLmZyb20o
KSwgdG8gPSByYW5nZS50bygpOwotICAgICAgLy8gSGFuZGxlIGRlbGV0aW9uCi0gICAgICBpZiAo
c2FtZSA8IHByZXZJbnB1dC5sZW5ndGgpCi0gICAgICAgIGZyb20gPSBQb3MoZnJvbS5saW5lLCBm
cm9tLmNoIC0gKHByZXZJbnB1dC5sZW5ndGggLSBzYW1lKSk7Ci0gICAgICAvLyBIYW5kbGUgb3Zl
cndyaXRlCi0gICAgICBlbHNlIGlmIChjbS5zdGF0ZS5vdmVyd3JpdGUgJiYgcmFuZ2UuZW1wdHko
KSAmJiAhY20uc3RhdGUucGFzdGVJbmNvbWluZykKLSAgICAgICAgdG8gPSBQb3ModG8ubGluZSwg
TWF0aC5taW4oZ2V0TGluZShkb2MsIHRvLmxpbmUpLnRleHQubGVuZ3RoLCB0by5jaCArIGxzdCh0
ZXh0TGluZXMpLmxlbmd0aCkpOwotICAgICAgdmFyIHVwZGF0ZUlucHV0ID0gY20uY3VyT3AudXBk
YXRlSW5wdXQ7Ci0gICAgICB2YXIgY2hhbmdlRXZlbnQgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0
ZXh0OiBtdWx0aVBhc3RlID8gW3RleHRMaW5lc1tpXV0gOiB0ZXh0TGluZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgb3JpZ2luOiBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID8gInBhc3RlIiA6
IGNtLnN0YXRlLmN1dEluY29taW5nID8gImN1dCIgOiAiK2lucHV0In07Ci0gICAgICBtYWtlQ2hh
bmdlKGNtLmRvYywgY2hhbmdlRXZlbnQpOwotICAgICAgc2lnbmFsTGF0ZXIoY20sICJpbnB1dFJl
YWQiLCBjbSwgY2hhbmdlRXZlbnQpOwotICAgICAgLy8gV2hlbiBhbiAnZWxlY3RyaWMnIGNoYXJh
Y3RlciBpcyBpbnNlcnRlZCwgaW1tZWRpYXRlbHkgdHJpZ2dlciBhIHJlaW5kZW50Ci0gICAgICBp
ZiAoaW5zZXJ0ZWQgJiYgIWNtLnN0YXRlLnBhc3RlSW5jb21pbmcgJiYgY20ub3B0aW9ucy5lbGVj
dHJpY0NoYXJzICYmCi0gICAgICAgICAgY20ub3B0aW9ucy5zbWFydEluZGVudCAmJiByYW5nZS5o
ZWFkLmNoIDwgMTAwICYmCi0gICAgICAgICAgKCFpIHx8IGRvYy5zZWwucmFuZ2VzW2kgLSAxXS5o
ZWFkLmxpbmUgIT0gcmFuZ2UuaGVhZC5saW5lKSkgewotICAgICAgICB2YXIgbW9kZSA9IGNtLmdl
dE1vZGVBdChyYW5nZS5oZWFkKTsKLSAgICAgICAgaWYgKG1vZGUuZWxlY3RyaWNDaGFycykgewot
ICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbW9kZS5lbGVjdHJpY0NoYXJzLmxlbmd0aDsg
aisrKQotICAgICAgICAgICAgaWYgKGluc2VydGVkLmluZGV4T2YobW9kZS5lbGVjdHJpY0NoYXJz
LmNoYXJBdChqKSkgPiAtMSkgewotICAgICAgICAgICAgICBpbmRlbnRMaW5lKGNtLCByYW5nZS5o
ZWFkLmxpbmUsICJzbWFydCIpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIGlmIChtb2RlLmVsZWN0cmljSW5wdXQpIHsKLSAgICAgICAgICB2YXIg
ZW5kID0gY2hhbmdlRW5kKGNoYW5nZUV2ZW50KTsKLSAgICAgICAgICBpZiAobW9kZS5lbGVjdHJp
Y0lucHV0LnRlc3QoZ2V0TGluZShkb2MsIGVuZC5saW5lKS50ZXh0LnNsaWNlKDAsIGVuZC5jaCkp
KQotICAgICAgICAgICAgaW5kZW50TGluZShjbSwgcmFuZ2UuaGVhZC5saW5lLCAic21hcnQiKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKTsK
LSAgICBjbS5jdXJPcC51cGRhdGVJbnB1dCA9IHVwZGF0ZUlucHV0OwotICAgIGNtLmN1ck9wLnR5
cGluZyA9IHRydWU7Ci0KLSAgICAvLyBEb24ndCBsZWF2ZSBsb25nIHRleHQgaW4gdGhlIHRleHRh
cmVhLCBzaW5jZSBpdCBtYWtlcyBmdXJ0aGVyIHBvbGxpbmcgc2xvdwotICAgIGlmICh0ZXh0Lmxl
bmd0aCA+IDEwMDAgfHwgdGV4dC5pbmRleE9mKCJcbiIpID4gLTEpIGlucHV0LnZhbHVlID0gY20u
ZGlzcGxheS5wcmV2SW5wdXQgPSAiIjsKLSAgICBlbHNlIGNtLmRpc3BsYXkucHJldklucHV0ID0g
dGV4dDsKLSAgICBpZiAod2l0aE9wKSBlbmRPcGVyYXRpb24oY20pOwotICAgIGNtLnN0YXRlLnBh
c3RlSW5jb21pbmcgPSBjbS5zdGF0ZS5jdXRJbmNvbWluZyA9IGZhbHNlOwotICAgIHJldHVybiB0
cnVlOwotICB9Ci0KLSAgLy8gUmVzZXQgdGhlIGlucHV0IHRvIGNvcnJlc3BvbmQgdG8gdGhlIHNl
bGVjdGlvbiAob3IgdG8gYmUgZW1wdHksCi0gIC8vIHdoZW4gbm90IHR5cGluZyBhbmQgbm90aGlu
ZyBpcyBzZWxlY3RlZCkKLSAgZnVuY3Rpb24gcmVzZXRJbnB1dChjbSwgdHlwaW5nKSB7Ci0gICAg
dmFyIG1pbmltYWwsIHNlbGVjdGVkLCBkb2MgPSBjbS5kb2M7Ci0gICAgaWYgKGNtLnNvbWV0aGlu
Z1NlbGVjdGVkKCkpIHsKLSAgICAgIGNtLmRpc3BsYXkucHJldklucHV0ID0gIiI7Ci0gICAgICB2
YXIgcmFuZ2UgPSBkb2Muc2VsLnByaW1hcnkoKTsKLSAgICAgIG1pbmltYWwgPSBoYXNDb3B5RXZl
bnQgJiYKLSAgICAgICAgKHJhbmdlLnRvKCkubGluZSAtIHJhbmdlLmZyb20oKS5saW5lID4gMTAw
IHx8IChzZWxlY3RlZCA9IGNtLmdldFNlbGVjdGlvbigpKS5sZW5ndGggPiAxMDAwKTsKLSAgICAg
IHZhciBjb250ZW50ID0gbWluaW1hbCA/ICItIiA6IHNlbGVjdGVkIHx8IGNtLmdldFNlbGVjdGlv
bigpOwotICAgICAgY20uZGlzcGxheS5pbnB1dC52YWx1ZSA9IGNvbnRlbnQ7Ci0gICAgICBpZiAo
Y20uc3RhdGUuZm9jdXNlZCkgc2VsZWN0SW5wdXQoY20uZGlzcGxheS5pbnB1dCk7Ci0gICAgICBp
ZiAoaWUgJiYgIWllX3VwdG84KSBjbS5kaXNwbGF5LmlucHV0SGFzU2VsZWN0aW9uID0gY29udGVu
dDsKLSAgICB9IGVsc2UgaWYgKCF0eXBpbmcpIHsKLSAgICAgIGNtLmRpc3BsYXkucHJldklucHV0
ID0gY20uZGlzcGxheS5pbnB1dC52YWx1ZSA9ICIiOwotICAgICAgaWYgKGllICYmICFpZV91cHRv
OCkgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9IG51bGw7Ci0gICAgfQotICAgIGNtLmRp
c3BsYXkuaW5hY2N1cmF0ZVNlbGVjdGlvbiA9IG1pbmltYWw7Ci0gIH0KLQotICBmdW5jdGlvbiBm
b2N1c0lucHV0KGNtKSB7Ci0gICAgaWYgKGNtLm9wdGlvbnMucmVhZE9ubHkgIT0gIm5vY3Vyc29y
IiAmJiAoIW1vYmlsZSB8fCBhY3RpdmVFbHQoKSAhPSBjbS5kaXNwbGF5LmlucHV0KSkKLSAgICAg
IGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGVuc3VyZUZvY3Vz
KGNtKSB7Ci0gICAgaWYgKCFjbS5zdGF0ZS5mb2N1c2VkKSB7IGZvY3VzSW5wdXQoY20pOyBvbkZv
Y3VzKGNtKTsgfQotICB9Ci0KLSAgZnVuY3Rpb24gaXNSZWFkT25seShjbSkgewotICAgIHJldHVy
biBjbS5vcHRpb25zLnJlYWRPbmx5IHx8IGNtLmRvYy5jYW50RWRpdDsKLSAgfQotCiAgIC8vIEVW
RU5UIEhBTkRMRVJTCiAKICAgLy8gQXR0YWNoIHRoZSBuZWNlc3NhcnkgZXZlbnQgaGFuZGxlcnMg
d2hlbiBpbml0aWFsaXppbmcgdGhlIGVkaXRvcgpAQCAtMjM1NCwyNiArMzM1OCw3NSBAQAogICAg
IHZhciBkID0gY20uZGlzcGxheTsKICAgICBvbihkLnNjcm9sbGVyLCAibW91c2Vkb3duIiwgb3Bl
cmF0aW9uKGNtLCBvbk1vdXNlRG93bikpOwogICAgIC8vIE9sZGVyIElFJ3Mgd2lsbCBub3QgZmly
ZSBhIHNlY29uZCBtb3VzZWRvd24gZm9yIGEgZG91YmxlIGNsaWNrCi0gICAgaWYgKGllX3VwdG8x
MCkKKyAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDExKQogICAgICAgb24oZC5zY3JvbGxlciwg
ImRibGNsaWNrIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlKSB7CiAgICAgICAgIGlmIChzaWdu
YWxET01FdmVudChjbSwgZSkpIHJldHVybjsKICAgICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3Vz
ZShjbSwgZSk7CiAgICAgICAgIGlmICghcG9zIHx8IGNsaWNrSW5HdXR0ZXIoY20sIGUpIHx8IGV2
ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHJldHVybjsKICAgICAgICAgZV9wcmV2ZW50RGVm
YXVsdChlKTsKLSAgICAgICAgdmFyIHdvcmQgPSBmaW5kV29yZEF0KGNtLCBwb3MpOworICAgICAg
ICB2YXIgd29yZCA9IGNtLmZpbmRXb3JkQXQocG9zKTsKICAgICAgICAgZXh0ZW5kU2VsZWN0aW9u
KGNtLmRvYywgd29yZC5hbmNob3IsIHdvcmQuaGVhZCk7CiAgICAgICB9KSk7CiAgICAgZWxzZQog
ICAgICAgb24oZC5zY3JvbGxlciwgImRibGNsaWNrIiwgZnVuY3Rpb24oZSkgeyBzaWduYWxET01F
dmVudChjbSwgZSkgfHwgZV9wcmV2ZW50RGVmYXVsdChlKTsgfSk7Ci0gICAgLy8gUHJldmVudCBu
b3JtYWwgc2VsZWN0aW9uIGluIHRoZSBlZGl0b3IgKHdlIGhhbmRsZSBvdXIgb3duKQotICAgIG9u
KGQubGluZVNwYWNlLCAic2VsZWN0c3RhcnQiLCBmdW5jdGlvbihlKSB7Ci0gICAgICBpZiAoIWV2
ZW50SW5XaWRnZXQoZCwgZSkpIGVfcHJldmVudERlZmF1bHQoZSk7Ci0gICAgfSk7CiAgICAgLy8g
U29tZSBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICphZnRlciogb3BlbmluZyB0aGUgbWVudSwg
YXQKICAgICAvLyB3aGljaCBwb2ludCB3ZSBjYW4ndCBtZXNzIHdpdGggaXQgYW55bW9yZS4gQ29u
dGV4dCBtZW51IGlzCiAgICAgLy8gaGFuZGxlZCBpbiBvbk1vdXNlRG93biBmb3IgdGhlc2UgYnJv
d3NlcnMuCiAgICAgaWYgKCFjYXB0dXJlUmlnaHRDbGljaykgb24oZC5zY3JvbGxlciwgImNvbnRl
eHRtZW51IiwgZnVuY3Rpb24oZSkge29uQ29udGV4dE1lbnUoY20sIGUpO30pOwogCisgICAgLy8g
VXNlZCB0byBzdXBwcmVzcyBtb3VzZSBldmVudCBoYW5kbGluZyB3aGVuIGEgdG91Y2ggaGFwcGVu
cworICAgIHZhciB0b3VjaEZpbmlzaGVkLCBwcmV2VG91Y2ggPSB7ZW5kOiAwfTsKKyAgICBmdW5j
dGlvbiBmaW5pc2hUb3VjaCgpIHsKKyAgICAgIGlmIChkLmFjdGl2ZVRvdWNoKSB7CisgICAgICAg
IHRvdWNoRmluaXNoZWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2QuYWN0aXZlVG91Y2ggPSBu
dWxsO30sIDEwMDApOworICAgICAgICBwcmV2VG91Y2ggPSBkLmFjdGl2ZVRvdWNoOworICAgICAg
ICBwcmV2VG91Y2guZW5kID0gK25ldyBEYXRlOworICAgICAgfQorICAgIH07CisgICAgZnVuY3Rp
b24gaXNNb3VzZUxpa2VUb3VjaEV2ZW50KGUpIHsKKyAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3Ro
ICE9IDEpIHJldHVybiBmYWxzZTsKKyAgICAgIHZhciB0b3VjaCA9IGUudG91Y2hlc1swXTsKKyAg
ICAgIHJldHVybiB0b3VjaC5yYWRpdXNYIDw9IDEgJiYgdG91Y2gucmFkaXVzWSA8PSAxOworICAg
IH0KKyAgICBmdW5jdGlvbiBmYXJBd2F5KHRvdWNoLCBvdGhlcikgeworICAgICAgaWYgKG90aGVy
LmxlZnQgPT0gbnVsbCkgcmV0dXJuIHRydWU7CisgICAgICB2YXIgZHggPSBvdGhlci5sZWZ0IC0g
dG91Y2gubGVmdCwgZHkgPSBvdGhlci50b3AgLSB0b3VjaC50b3A7CisgICAgICByZXR1cm4gZHgg
KiBkeCArIGR5ICogZHkgPiAyMCAqIDIwOworICAgIH0KKyAgICBvbihkLnNjcm9sbGVyLCAidG91
Y2hzdGFydCIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgIGlmICghaXNNb3VzZUxpa2VUb3VjaEV2ZW50
KGUpKSB7CisgICAgICAgIGNsZWFyVGltZW91dCh0b3VjaEZpbmlzaGVkKTsKKyAgICAgICAgdmFy
IG5vdyA9ICtuZXcgRGF0ZTsKKyAgICAgICAgZC5hY3RpdmVUb3VjaCA9IHtzdGFydDogbm93LCBt
b3ZlZDogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJldjogbm93IC0gcHJldlRv
dWNoLmVuZCA8PSAzMDAgPyBwcmV2VG91Y2ggOiBudWxsfTsKKyAgICAgICAgaWYgKGUudG91Y2hl
cy5sZW5ndGggPT0gMSkgeworICAgICAgICAgIGQuYWN0aXZlVG91Y2gubGVmdCA9IGUudG91Y2hl
c1swXS5wYWdlWDsKKyAgICAgICAgICBkLmFjdGl2ZVRvdWNoLnRvcCA9IGUudG91Y2hlc1swXS5w
YWdlWTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworICAgIG9uKGQuc2Nyb2xsZXIsICJ0
b3VjaG1vdmUiLCBmdW5jdGlvbigpIHsKKyAgICAgIGlmIChkLmFjdGl2ZVRvdWNoKSBkLmFjdGl2
ZVRvdWNoLm1vdmVkID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBvbihkLnNjcm9sbGVyLCAidG91Y2hl
bmQiLCBmdW5jdGlvbihlKSB7CisgICAgICB2YXIgdG91Y2ggPSBkLmFjdGl2ZVRvdWNoOworICAg
ICAgaWYgKHRvdWNoICYmICFldmVudEluV2lkZ2V0KGQsIGUpICYmIHRvdWNoLmxlZnQgIT0gbnVs
bCAmJgorICAgICAgICAgICF0b3VjaC5tb3ZlZCAmJiBuZXcgRGF0ZSAtIHRvdWNoLnN0YXJ0IDwg
MzAwKSB7CisgICAgICAgIHZhciBwb3MgPSBjbS5jb29yZHNDaGFyKGQuYWN0aXZlVG91Y2gsICJw
YWdlIiksIHJhbmdlOworICAgICAgICBpZiAoIXRvdWNoLnByZXYgfHwgZmFyQXdheSh0b3VjaCwg
dG91Y2gucHJldikpIC8vIFNpbmdsZSB0YXAKKyAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZShw
b3MsIHBvcyk7CisgICAgICAgIGVsc2UgaWYgKCF0b3VjaC5wcmV2LnByZXYgfHwgZmFyQXdheSh0
b3VjaCwgdG91Y2gucHJldi5wcmV2KSkgLy8gRG91YmxlIHRhcAorICAgICAgICAgIHJhbmdlID0g
Y20uZmluZFdvcmRBdChwb3MpOworICAgICAgICBlbHNlIC8vIFRyaXBsZSB0YXAKKyAgICAgICAg
ICByYW5nZSA9IG5ldyBSYW5nZShQb3MocG9zLmxpbmUsIDApLCBjbGlwUG9zKGNtLmRvYywgUG9z
KHBvcy5saW5lICsgMSwgMCkpKTsKKyAgICAgICAgY20uc2V0U2VsZWN0aW9uKHJhbmdlLmFuY2hv
ciwgcmFuZ2UuaGVhZCk7CisgICAgICAgIGNtLmZvY3VzKCk7CisgICAgICAgIGVfcHJldmVudERl
ZmF1bHQoZSk7CisgICAgICB9CisgICAgICBmaW5pc2hUb3VjaCgpOworICAgIH0pOworICAgIG9u
KGQuc2Nyb2xsZXIsICJ0b3VjaGNhbmNlbCIsIGZpbmlzaFRvdWNoKTsKKwogICAgIC8vIFN5bmMg
c2Nyb2xsaW5nIGJldHdlZW4gZmFrZSBzY3JvbGxiYXJzIGFuZCByZWFsIHNjcm9sbGFibGUKICAg
ICAvLyBhcmVhLCBlbnN1cmUgdmlld3BvcnQgaXMgdXBkYXRlZCB3aGVuIHNjcm9sbGluZy4KICAg
ICBvbihkLnNjcm9sbGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7CkBAIC0yMzgzLDEwNSArMzQz
Niw1MSBAQAogICAgICAgICBzaWduYWwoY20sICJzY3JvbGwiLCBjbSk7CiAgICAgICB9CiAgICAg
fSk7Ci0gICAgb24oZC5zY3JvbGxiYXJWLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7Ci0gICAgICBp
ZiAoZC5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHNldFNjcm9sbFRvcChjbSwgZC5zY3JvbGxiYXJW
LnNjcm9sbFRvcCk7Ci0gICAgfSk7Ci0gICAgb24oZC5zY3JvbGxiYXJILCAic2Nyb2xsIiwgZnVu
Y3Rpb24oKSB7Ci0gICAgICBpZiAoZC5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHNldFNjcm9sbExl
ZnQoY20sIGQuc2Nyb2xsYmFySC5zY3JvbGxMZWZ0KTsKLSAgICB9KTsKIAogICAgIC8vIExpc3Rl
biB0byB3aGVlbCBldmVudHMgaW4gb3JkZXIgdG8gdHJ5IGFuZCB1cGRhdGUgdGhlIHZpZXdwb3J0
IG9uIHRpbWUuCiAgICAgb24oZC5zY3JvbGxlciwgIm1vdXNld2hlZWwiLCBmdW5jdGlvbihlKXtv
blNjcm9sbFdoZWVsKGNtLCBlKTt9KTsKICAgICBvbihkLnNjcm9sbGVyLCAiRE9NTW91c2VTY3Jv
bGwiLCBmdW5jdGlvbihlKXtvblNjcm9sbFdoZWVsKGNtLCBlKTt9KTsKIAotICAgIC8vIFByZXZl
bnQgY2xpY2tzIGluIHRoZSBzY3JvbGxiYXJzIGZyb20ga2lsbGluZyBmb2N1cwotICAgIGZ1bmN0
aW9uIHJlRm9jdXMoKSB7IGlmIChjbS5zdGF0ZS5mb2N1c2VkKSBzZXRUaW1lb3V0KGJpbmQoZm9j
dXNJbnB1dCwgY20pLCAwKTsgfQotICAgIG9uKGQuc2Nyb2xsYmFySCwgIm1vdXNlZG93biIsIHJl
Rm9jdXMpOwotICAgIG9uKGQuc2Nyb2xsYmFyViwgIm1vdXNlZG93biIsIHJlRm9jdXMpOwogICAg
IC8vIFByZXZlbnQgd3JhcHBlciBmcm9tIGV2ZXIgc2Nyb2xsaW5nCiAgICAgb24oZC53cmFwcGVy
LCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7IGQud3JhcHBlci5zY3JvbGxUb3AgPSBkLndyYXBwZXIu
c2Nyb2xsTGVmdCA9IDA7IH0pOwogCi0gICAgb24oZC5pbnB1dCwgImtleXVwIiwgb3BlcmF0aW9u
KGNtLCBvbktleVVwKSk7Ci0gICAgb24oZC5pbnB1dCwgImlucHV0IiwgZnVuY3Rpb24oKSB7Ci0g
ICAgICBpZiAoaWUgJiYgIWllX3VwdG84ICYmIGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24p
IGNtLmRpc3BsYXkuaW5wdXRIYXNTZWxlY3Rpb24gPSBudWxsOwotICAgICAgZmFzdFBvbGwoY20p
OwotICAgIH0pOwotICAgIG9uKGQuaW5wdXQsICJrZXlkb3duIiwgb3BlcmF0aW9uKGNtLCBvbktl
eURvd24pKTsKLSAgICBvbihkLmlucHV0LCAia2V5cHJlc3MiLCBvcGVyYXRpb24oY20sIG9uS2V5
UHJlc3MpKTsKLSAgICBvbihkLmlucHV0LCAiZm9jdXMiLCBiaW5kKG9uRm9jdXMsIGNtKSk7Ci0g
ICAgb24oZC5pbnB1dCwgImJsdXIiLCBiaW5kKG9uQmx1ciwgY20pKTsKLQotICAgIGZ1bmN0aW9u
IGRyYWdfKGUpIHsKLSAgICAgIGlmICghc2lnbmFsRE9NRXZlbnQoY20sIGUpKSBlX3N0b3AoZSk7
Ci0gICAgfQotICAgIGlmIChjbS5vcHRpb25zLmRyYWdEcm9wKSB7Ci0gICAgICBvbihkLnNjcm9s
bGVyLCAiZHJhZ3N0YXJ0IiwgZnVuY3Rpb24oZSl7b25EcmFnU3RhcnQoY20sIGUpO30pOwotICAg
ICAgb24oZC5zY3JvbGxlciwgImRyYWdlbnRlciIsIGRyYWdfKTsKLSAgICAgIG9uKGQuc2Nyb2xs
ZXIsICJkcmFnb3ZlciIsIGRyYWdfKTsKLSAgICAgIG9uKGQuc2Nyb2xsZXIsICJkcm9wIiwgb3Bl
cmF0aW9uKGNtLCBvbkRyb3ApKTsKLSAgICB9Ci0gICAgb24oZC5zY3JvbGxlciwgInBhc3RlIiwg
ZnVuY3Rpb24oZSkgewotICAgICAgaWYgKGV2ZW50SW5XaWRnZXQoZCwgZSkpIHJldHVybjsKLSAg
ICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlOwotICAgICAgZm9jdXNJbnB1dChjbSk7
Ci0gICAgICBmYXN0UG9sbChjbSk7Ci0gICAgfSk7Ci0gICAgb24oZC5pbnB1dCwgInBhc3RlIiwg
ZnVuY3Rpb24oKSB7Ci0gICAgICAvLyBXb3JrYXJvdW5kIGZvciB3ZWJraXQgYnVnIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDIwNgotICAgICAgLy8gQWRkIGEgY2hh
ciB0byB0aGUgZW5kIG9mIHRleHRhcmVhIGJlZm9yZSBwYXN0ZSBvY2N1ciBzbyB0aGF0Ci0gICAg
ICAvLyBzZWxlY3Rpb24gZG9lc24ndCBzcGFuIHRvIHRoZSBlbmQgb2YgdGV4dGFyZWEuCi0gICAg
ICBpZiAod2Via2l0ICYmICFjbS5zdGF0ZS5mYWtlZExhc3RDaGFyICYmICEobmV3IERhdGUgLSBj
bS5zdGF0ZS5sYXN0TWlkZGxlRG93biA8IDIwMCkpIHsKLSAgICAgICAgdmFyIHN0YXJ0ID0gZC5p
bnB1dC5zZWxlY3Rpb25TdGFydCwgZW5kID0gZC5pbnB1dC5zZWxlY3Rpb25FbmQ7Ci0gICAgICAg
IGQuaW5wdXQudmFsdWUgKz0gIiQiOwotICAgICAgICBkLmlucHV0LnNlbGVjdGlvblN0YXJ0ID0g
c3RhcnQ7Ci0gICAgICAgIGQuaW5wdXQuc2VsZWN0aW9uRW5kID0gZW5kOwotICAgICAgICBjbS5z
dGF0ZS5mYWtlZExhc3RDaGFyID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGNtLnN0YXRlLnBhc3Rl
SW5jb21pbmcgPSB0cnVlOwotICAgICAgZmFzdFBvbGwoY20pOwotICAgIH0pOworICAgIGQuZHJh
Z0Z1bmN0aW9ucyA9IHsKKyAgICAgIGVudGVyOiBmdW5jdGlvbihlKSB7aWYgKCFzaWduYWxET01F
dmVudChjbSwgZSkpIGVfc3RvcChlKTt9LAorICAgICAgb3ZlcjogZnVuY3Rpb24oZSkge2lmICgh
c2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IG9uRHJhZ092ZXIoY20sIGUpOyBlX3N0b3AoZSk7IH19
LAorICAgICAgc3RhcnQ6IGZ1bmN0aW9uKGUpe29uRHJhZ1N0YXJ0KGNtLCBlKTt9LAorICAgICAg
ZHJvcDogb3BlcmF0aW9uKGNtLCBvbkRyb3ApLAorICAgICAgbGVhdmU6IGZ1bmN0aW9uKCkge2Ns
ZWFyRHJhZ0N1cnNvcihjbSk7fQorICAgIH07CiAKLSAgICBmdW5jdGlvbiBwcmVwYXJlQ29weUN1
dChlKSB7Ci0gICAgICBpZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgewotICAgICAgICBpZiAo
ZC5pbmFjY3VyYXRlU2VsZWN0aW9uKSB7Ci0gICAgICAgICAgZC5wcmV2SW5wdXQgPSAiIjsKLSAg
ICAgICAgICBkLmluYWNjdXJhdGVTZWxlY3Rpb24gPSBmYWxzZTsKLSAgICAgICAgICBkLmlucHV0
LnZhbHVlID0gY20uZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgICAgc2VsZWN0SW5wdXQoZC5pbnB1
dCk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciB0ZXh0ID0gIiIsIHJh
bmdlcyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLmRvYy5zZWwucmFuZ2Vz
Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgdmFyIGxpbmUgPSBjbS5kb2Muc2VsLnJhbmdlc1tp
XS5oZWFkLmxpbmU7Ci0gICAgICAgICAgdmFyIGxpbmVSYW5nZSA9IHthbmNob3I6IFBvcyhsaW5l
LCAwKSwgaGVhZDogUG9zKGxpbmUgKyAxLCAwKX07Ci0gICAgICAgICAgcmFuZ2VzLnB1c2gobGlu
ZVJhbmdlKTsKLSAgICAgICAgICB0ZXh0ICs9IGNtLmdldFJhbmdlKGxpbmVSYW5nZS5hbmNob3Is
IGxpbmVSYW5nZS5oZWFkKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZS50eXBlID09ICJjdXQi
KSB7Ci0gICAgICAgICAgY20uc2V0U2VsZWN0aW9ucyhyYW5nZXMsIG51bGwsIHNlbF9kb250U2Ny
b2xsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBkLnByZXZJbnB1dCA9ICIiOwotICAg
ICAgICAgIGQuaW5wdXQudmFsdWUgPSB0ZXh0OwotICAgICAgICAgIHNlbGVjdElucHV0KGQuaW5w
dXQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoZS50eXBlID09ICJjdXQiKSBjbS5z
dGF0ZS5jdXRJbmNvbWluZyA9IHRydWU7Ci0gICAgfQotICAgIG9uKGQuaW5wdXQsICJjdXQiLCBw
cmVwYXJlQ29weUN1dCk7Ci0gICAgb24oZC5pbnB1dCwgImNvcHkiLCBwcmVwYXJlQ29weUN1dCk7
CisgICAgdmFyIGlucCA9IGQuaW5wdXQuZ2V0RmllbGQoKTsKKyAgICBvbihpbnAsICJrZXl1cCIs
IGZ1bmN0aW9uKGUpIHsgb25LZXlVcC5jYWxsKGNtLCBlKTsgfSk7CisgICAgb24oaW5wLCAia2V5
ZG93biIsIG9wZXJhdGlvbihjbSwgb25LZXlEb3duKSk7CisgICAgb24oaW5wLCAia2V5cHJlc3Mi
LCBvcGVyYXRpb24oY20sIG9uS2V5UHJlc3MpKTsKKyAgICBvbihpbnAsICJmb2N1cyIsIGJpbmQo
b25Gb2N1cywgY20pKTsKKyAgICBvbihpbnAsICJibHVyIiwgYmluZChvbkJsdXIsIGNtKSk7Cisg
IH0KIAotICAgIC8vIE5lZWRlZCB0byBoYW5kbGUgVGFiIGtleSBpbiBLSFRNTAotICAgIGlmIChr
aHRtbCkgb24oZC5zaXplciwgIm1vdXNldXAiLCBmdW5jdGlvbigpIHsKLSAgICAgIGlmIChhY3Rp
dmVFbHQoKSA9PSBkLmlucHV0KSBkLmlucHV0LmJsdXIoKTsKLSAgICAgIGZvY3VzSW5wdXQoY20p
OwotICAgIH0pOworICBmdW5jdGlvbiBkcmFnRHJvcENoYW5nZWQoY20sIHZhbHVlLCBvbGQpIHsK
KyAgICB2YXIgd2FzT24gPSBvbGQgJiYgb2xkICE9IENvZGVNaXJyb3IuSW5pdDsKKyAgICBpZiAo
IXZhbHVlICE9ICF3YXNPbikgeworICAgICAgdmFyIGZ1bmNzID0gY20uZGlzcGxheS5kcmFnRnVu
Y3Rpb25zOworICAgICAgdmFyIHRvZ2dsZSA9IHZhbHVlID8gb24gOiBvZmY7CisgICAgICB0b2dn
bGUoY20uZGlzcGxheS5zY3JvbGxlciwgImRyYWdzdGFydCIsIGZ1bmNzLnN0YXJ0KTsKKyAgICAg
IHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCAiZHJhZ2VudGVyIiwgZnVuY3MuZW50ZXIpOwor
ICAgICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsICJkcmFnb3ZlciIsIGZ1bmNzLm92ZXIp
OworICAgICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsICJkcmFnbGVhdmUiLCBmdW5jcy5s
ZWF2ZSk7CisgICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgImRyb3AiLCBmdW5jcy5k
cm9wKTsKKyAgICB9CiAgIH0KIAogICAvLyBDYWxsZWQgd2hlbiB0aGUgd2luZG93IHJlc2l6ZXMK
ICAgZnVuY3Rpb24gb25SZXNpemUoY20pIHsKLSAgICAvLyBNaWdodCBiZSBhIHRleHQgc2NhbGlu
ZyBvcGVyYXRpb24sIGNsZWFyIHNpemUgY2FjaGVzLgogICAgIHZhciBkID0gY20uZGlzcGxheTsK
KyAgICBpZiAoZC5sYXN0V3JhcEhlaWdodCA9PSBkLndyYXBwZXIuY2xpZW50SGVpZ2h0ICYmIGQu
bGFzdFdyYXBXaWR0aCA9PSBkLndyYXBwZXIuY2xpZW50V2lkdGgpCisgICAgICByZXR1cm47Cisg
ICAgLy8gTWlnaHQgYmUgYSB0ZXh0IHNjYWxpbmcgb3BlcmF0aW9uLCBjbGVhciBzaXplIGNhY2hl
cy4KICAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IGQuY2FjaGVk
UGFkZGluZ0ggPSBudWxsOworICAgIGQuc2Nyb2xsYmFyc0NsaXBwZWQgPSBmYWxzZTsKICAgICBj
bS5zZXRTaXplKCk7CiAgIH0KIApAQCAtMjQ5MCw3ICszNDg5LDkgQEAKICAgLy8gUmV0dXJuIHRy
dWUgd2hlbiB0aGUgZ2l2ZW4gbW91c2UgZXZlbnQgaGFwcGVuZWQgaW4gYSB3aWRnZXQKICAgZnVu
Y3Rpb24gZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSB7CiAgICAgZm9yICh2YXIgbiA9IGVfdGFy
Z2V0KGUpOyBuICE9IGRpc3BsYXkud3JhcHBlcjsgbiA9IG4ucGFyZW50Tm9kZSkgewotICAgICAg
aWYgKCFuIHx8IG4uaWdub3JlRXZlbnRzIHx8IG4ucGFyZW50Tm9kZSA9PSBkaXNwbGF5LnNpemVy
ICYmIG4gIT0gZGlzcGxheS5tb3ZlcikgcmV0dXJuIHRydWU7CisgICAgICBpZiAoIW4gfHwgKG4u
bm9kZVR5cGUgPT0gMSAmJiBuLmdldEF0dHJpYnV0ZSgiY20taWdub3JlLWV2ZW50cyIpID09ICJ0
cnVlIikgfHwKKyAgICAgICAgICAobi5wYXJlbnROb2RlID09IGRpc3BsYXkuc2l6ZXIgJiYgbiAh
PSBkaXNwbGF5Lm1vdmVyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICB9CiAKQEAg
LTI1MDEsMTEgKzM1MDIsOCBAQAogICAvLyBjb29yZGluYXRlcyBiZXlvbmQgdGhlIHJpZ2h0IG9m
IHRoZSB0ZXh0LgogICBmdW5jdGlvbiBwb3NGcm9tTW91c2UoY20sIGUsIGxpYmVyYWwsIGZvclJl
Y3QpIHsKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7Ci0gICAgaWYgKCFsaWJlcmFsKSB7
Ci0gICAgICB2YXIgdGFyZ2V0ID0gZV90YXJnZXQoZSk7Ci0gICAgICBpZiAodGFyZ2V0ID09IGRp
c3BsYXkuc2Nyb2xsYmFySCB8fCB0YXJnZXQgPT0gZGlzcGxheS5zY3JvbGxiYXJWIHx8Ci0gICAg
ICAgICAgdGFyZ2V0ID09IGRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVyIHx8IHRhcmdldCA9PSBkaXNw
bGF5Lmd1dHRlckZpbGxlcikgcmV0dXJuIG51bGw7Ci0gICAgfQorICAgIGlmICghbGliZXJhbCAm
JiBlX3RhcmdldChlKS5nZXRBdHRyaWJ1dGUoImNtLW5vdC1jb250ZW50IikgPT0gInRydWUiKSBy
ZXR1cm4gbnVsbDsKKwogICAgIHZhciB4LCB5LCBzcGFjZSA9IGRpc3BsYXkubGluZVNwYWNlLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgIC8vIEZhaWxzIHVucHJlZGljdGFibHkgb24gSUVb
NjddIHdoZW4gbW91c2UgaXMgZHJhZ2dlZCBhcm91bmQgcXVpY2tseS4KICAgICB0cnkgeyB4ID0g
ZS5jbGllbnRYIC0gc3BhY2UubGVmdDsgeSA9IGUuY2xpZW50WSAtIHNwYWNlLnRvcDsgfQpAQCAt
MjUyNCw4ICszNTIyLDggQEAKICAgLy8gbWlkZGxlLWNsaWNrLXBhc3RlLiBPciBpdCBtaWdodCBi
ZSBhIGNsaWNrIG9uIHNvbWV0aGluZyB3ZSBzaG91bGQKICAgLy8gbm90IGludGVyZmVyZSB3aXRo
LCBzdWNoIGFzIGEgc2Nyb2xsYmFyIG9yIHdpZGdldC4KICAgZnVuY3Rpb24gb25Nb3VzZURvd24o
ZSkgewotICAgIGlmIChzaWduYWxET01FdmVudCh0aGlzLCBlKSkgcmV0dXJuOwogICAgIHZhciBj
bSA9IHRoaXMsIGRpc3BsYXkgPSBjbS5kaXNwbGF5OworICAgIGlmIChkaXNwbGF5LmFjdGl2ZVRv
dWNoICYmIGRpc3BsYXkuaW5wdXQuc3VwcG9ydHNUb3VjaCgpIHx8IHNpZ25hbERPTUV2ZW50KGNt
LCBlKSkgcmV0dXJuOwogICAgIGRpc3BsYXkuc2hpZnQgPSBlLnNoaWZ0S2V5OwogCiAgICAgaWYg
KGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIHsKQEAgLTI1NDMsNyArMzU0MSwxMCBAQAogCiAg
ICAgc3dpdGNoIChlX2J1dHRvbihlKSkgewogICAgIGNhc2UgMToKLSAgICAgIGlmIChzdGFydCkK
KyAgICAgIC8vICMzMjYxOiBtYWtlIHN1cmUsIHRoYXQgd2UncmUgbm90IHN0YXJ0aW5nIGEgc2Vj
b25kIHNlbGVjdGlvbgorICAgICAgaWYgKGNtLnN0YXRlLnNlbGVjdGluZ1RleHQpCisgICAgICAg
IGNtLnN0YXRlLnNlbGVjdGluZ1RleHQoZSk7CisgICAgICBlbHNlIGlmIChzdGFydCkKICAgICAg
ICAgbGVmdEJ1dHRvbkRvd24oY20sIGUsIHN0YXJ0KTsKICAgICAgIGVsc2UgaWYgKGVfdGFyZ2V0
KGUpID09IGRpc3BsYXkuc2Nyb2xsZXIpCiAgICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CkBA
IC0yNTUxLDE4ICszNTUyLDIwIEBACiAgICAgY2FzZSAyOgogICAgICAgaWYgKHdlYmtpdCkgY20u
c3RhdGUubGFzdE1pZGRsZURvd24gPSArbmV3IERhdGU7CiAgICAgICBpZiAoc3RhcnQpIGV4dGVu
ZFNlbGVjdGlvbihjbS5kb2MsIHN0YXJ0KTsKLSAgICAgIHNldFRpbWVvdXQoYmluZChmb2N1c0lu
cHV0LCBjbSksIDIwKTsKKyAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7ZGlzcGxheS5pbnB1
dC5mb2N1cygpO30sIDIwKTsKICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICAgICBicmVh
azsKICAgICBjYXNlIDM6CiAgICAgICBpZiAoY2FwdHVyZVJpZ2h0Q2xpY2spIG9uQ29udGV4dE1l
bnUoY20sIGUpOworICAgICAgZWxzZSBkZWxheUJsdXJFdmVudChjbSk7CiAgICAgICBicmVhazsK
ICAgICB9CiAgIH0KIAogICB2YXIgbGFzdENsaWNrLCBsYXN0RG91YmxlQ2xpY2s7CiAgIGZ1bmN0
aW9uIGxlZnRCdXR0b25Eb3duKGNtLCBlLCBzdGFydCkgewotICAgIHNldFRpbWVvdXQoYmluZChl
bnN1cmVGb2N1cywgY20pLCAwKTsKKyAgICBpZiAoaWUpIHNldFRpbWVvdXQoYmluZChlbnN1cmVG
b2N1cywgY20pLCAwKTsKKyAgICBlbHNlIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0KCk7CiAK
ICAgICB2YXIgbm93ID0gK25ldyBEYXRlLCB0eXBlOwogICAgIGlmIChsYXN0RG91YmxlQ2xpY2sg
JiYgbGFzdERvdWJsZUNsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgY21wKGxhc3REb3VibGVDbGlj
ay5wb3MsIHN0YXJ0KSA9PSAwKSB7CkBAIC0yNTc1LDkgKzM1NzgsMTEgQEAKICAgICAgIGxhc3RD
bGljayA9IHt0aW1lOiBub3csIHBvczogc3RhcnR9OwogICAgIH0KIAotICAgIHZhciBzZWwgPSBj
bS5kb2Muc2VsLCBtb2RpZmllciA9IG1hYyA/IGUubWV0YUtleSA6IGUuY3RybEtleTsKKyAgICB2
YXIgc2VsID0gY20uZG9jLnNlbCwgbW9kaWZpZXIgPSBtYWMgPyBlLm1ldGFLZXkgOiBlLmN0cmxL
ZXksIGNvbnRhaW5lZDsKICAgICBpZiAoY20ub3B0aW9ucy5kcmFnRHJvcCAmJiBkcmFnQW5kRHJv
cCAmJiAhaXNSZWFkT25seShjbSkgJiYKLSAgICAgICAgdHlwZSA9PSAic2luZ2xlIiAmJiBzZWwu
Y29udGFpbnMoc3RhcnQpID4gLTEgJiYgc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCkpCisgICAgICAg
IHR5cGUgPT0gInNpbmdsZSIgJiYgKGNvbnRhaW5lZCA9IHNlbC5jb250YWlucyhzdGFydCkpID4g
LTEgJiYKKyAgICAgICAgKGNtcCgoY29udGFpbmVkID0gc2VsLnJhbmdlc1tjb250YWluZWRdKS5m
cm9tKCksIHN0YXJ0KSA8IDAgfHwgc3RhcnQueFJlbCA+IDApICYmCisgICAgICAgIChjbXAoY29u
dGFpbmVkLnRvKCksIHN0YXJ0KSA+IDAgfHwgc3RhcnQueFJlbCA8IDApKQogICAgICAgbGVmdEJ1
dHRvblN0YXJ0RHJhZyhjbSwgZSwgc3RhcnQsIG1vZGlmaWVyKTsKICAgICBlbHNlCiAgICAgICBs
ZWZ0QnV0dG9uU2VsZWN0KGNtLCBlLCBzdGFydCwgdHlwZSwgbW9kaWZpZXIpOwpAQCAtMjU4Niw3
ICszNTkxLDcgQEAKICAgLy8gU3RhcnQgYSB0ZXh0IGRyYWcuIFdoZW4gaXQgZW5kcywgc2VlIGlm
IGFueSBkcmFnZ2luZyBhY3R1YWxseQogICAvLyBoYXBwZW4sIGFuZCB0cmVhdCBhcyBhIGNsaWNr
IGlmIGl0IGRpZG4ndC4KICAgZnVuY3Rpb24gbGVmdEJ1dHRvblN0YXJ0RHJhZyhjbSwgZSwgc3Rh
cnQsIG1vZGlmaWVyKSB7Ci0gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5OworICAgIHZhciBk
aXNwbGF5ID0gY20uZGlzcGxheSwgc3RhcnRUaW1lID0gK25ldyBEYXRlOwogICAgIHZhciBkcmFn
RW5kID0gb3BlcmF0aW9uKGNtLCBmdW5jdGlvbihlMikgewogICAgICAgaWYgKHdlYmtpdCkgZGlz
cGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSBmYWxzZTsKICAgICAgIGNtLnN0YXRlLmRyYWdnaW5n
VGV4dCA9IGZhbHNlOwpAQCAtMjU5NCwxMiArMzU5OSwxMyBAQAogICAgICAgb2ZmKGRpc3BsYXku
c2Nyb2xsZXIsICJkcm9wIiwgZHJhZ0VuZCk7CiAgICAgICBpZiAoTWF0aC5hYnMoZS5jbGllbnRY
IC0gZTIuY2xpZW50WCkgKyBNYXRoLmFicyhlLmNsaWVudFkgLSBlMi5jbGllbnRZKSA8IDEwKSB7
CiAgICAgICAgIGVfcHJldmVudERlZmF1bHQoZTIpOwotICAgICAgICBpZiAoIW1vZGlmaWVyKQor
ICAgICAgICBpZiAoIW1vZGlmaWVyICYmICtuZXcgRGF0ZSAtIDIwMCA8IHN0YXJ0VGltZSkKICAg
ICAgICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBzdGFydCk7Ci0gICAgICAgIGZvY3VzSW5w
dXQoY20pOwotICAgICAgICAvLyBXb3JrIGFyb3VuZCB1bmV4cGxhaW5hYmxlIGZvY3VzIHByb2Js
ZW0gaW4gSUU5ICgjMjEyNykKLSAgICAgICAgaWYgKGllX3VwdG8xMCAmJiAhaWVfdXB0bzgpCi0g
ICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtkb2N1bWVudC5ib2R5LmZvY3VzKCk7IGZv
Y3VzSW5wdXQoY20pO30sIDIwKTsKKyAgICAgICAgLy8gV29yayBhcm91bmQgdW5leHBsYWluYWJs
ZSBmb2N1cyBwcm9ibGVtIGluIElFOSAoIzIxMjcpIGFuZCBDaHJvbWUgKCMzMDgxKQorICAgICAg
ICBpZiAod2Via2l0IHx8IGllICYmIGllX3ZlcnNpb24gPT0gOSkKKyAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkge2RvY3VtZW50LmJvZHkuZm9jdXMoKTsgZGlzcGxheS5pbnB1dC5mb2N1
cygpO30sIDIwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRpc3BsYXkuaW5wdXQuZm9jdXMo
KTsKICAgICAgIH0KICAgICB9KTsKICAgICAvLyBMZXQgdGhlIGRyYWcgaGFuZGxlciBoYW5kbGUg
dGhpcy4KQEAgLTI2MTYsMTUgKzM2MjIsMTYgQEAKICAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3Bs
YXksIGRvYyA9IGNtLmRvYzsKICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogCi0gICAgdmFyIG91
clJhbmdlLCBvdXJJbmRleCwgc3RhcnRTZWwgPSBkb2Muc2VsOworICAgIHZhciBvdXJSYW5nZSwg
b3VySW5kZXgsIHN0YXJ0U2VsID0gZG9jLnNlbCwgcmFuZ2VzID0gc3RhcnRTZWwucmFuZ2VzOwog
ICAgIGlmIChhZGROZXcgJiYgIWUuc2hpZnRLZXkpIHsKICAgICAgIG91ckluZGV4ID0gZG9jLnNl
bC5jb250YWlucyhzdGFydCk7CiAgICAgICBpZiAob3VySW5kZXggPiAtMSkKLSAgICAgICAgb3Vy
UmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tvdXJJbmRleF07CisgICAgICAgIG91clJhbmdlID0gcmFu
Z2VzW291ckluZGV4XTsKICAgICAgIGVsc2UKICAgICAgICAgb3VyUmFuZ2UgPSBuZXcgUmFuZ2Uo
c3RhcnQsIHN0YXJ0KTsKICAgICB9IGVsc2UgewogICAgICAgb3VyUmFuZ2UgPSBkb2Muc2VsLnBy
aW1hcnkoKTsKKyAgICAgIG91ckluZGV4ID0gZG9jLnNlbC5wcmltSW5kZXg7CiAgICAgfQogCiAg
ICAgaWYgKGUuYWx0S2V5KSB7CkBAIC0yNjMzLDcgKzM2NDAsNyBAQAogICAgICAgc3RhcnQgPSBw
b3NGcm9tTW91c2UoY20sIGUsIHRydWUsIHRydWUpOwogICAgICAgb3VySW5kZXggPSAtMTsKICAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gImRvdWJsZSIpIHsKLSAgICAgIHZhciB3b3JkID0gZmluZFdv
cmRBdChjbSwgc3RhcnQpOworICAgICAgdmFyIHdvcmQgPSBjbS5maW5kV29yZEF0KHN0YXJ0KTsK
ICAgICAgIGlmIChjbS5kaXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRlbmQpCiAgICAgICAgIG91clJh
bmdlID0gZXh0ZW5kUmFuZ2UoZG9jLCBvdXJSYW5nZSwgd29yZC5hbmNob3IsIHdvcmQuaGVhZCk7
CiAgICAgICBlbHNlCkBAIC0yNjUyLDEyICszNjU5LDE1IEBACiAgICAgICBvdXJJbmRleCA9IDA7
CiAgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBuZXcgU2VsZWN0aW9uKFtvdXJSYW5nZV0sIDApLCBz
ZWxfbW91c2UpOwogICAgICAgc3RhcnRTZWwgPSBkb2Muc2VsOwotICAgIH0gZWxzZSBpZiAob3Vy
SW5kZXggPiAtMSkgewotICAgICAgcmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIG91ckluZGV4LCBv
dXJSYW5nZSwgc2VsX21vdXNlKTsKLSAgICB9IGVsc2UgewotICAgICAgb3VySW5kZXggPSBkb2Mu
c2VsLnJhbmdlcy5sZW5ndGg7Ci0gICAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxl
Y3Rpb24oZG9jLnNlbC5yYW5nZXMuY29uY2F0KFtvdXJSYW5nZV0pLCBvdXJJbmRleCksCisgICAg
fSBlbHNlIGlmIChvdXJJbmRleCA9PSAtMSkgeworICAgICAgb3VySW5kZXggPSByYW5nZXMubGVu
Z3RoOworICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKHJhbmdlcy5j
b25jYXQoW291clJhbmdlXSksIG91ckluZGV4KSwKICAgICAgICAgICAgICAgICAgICB7c2Nyb2xs
OiBmYWxzZSwgb3JpZ2luOiAiKm1vdXNlIn0pOworICAgIH0gZWxzZSBpZiAocmFuZ2VzLmxlbmd0
aCA+IDEgJiYgcmFuZ2VzW291ckluZGV4XS5lbXB0eSgpICYmIHR5cGUgPT0gInNpbmdsZSIgJiYg
IWUuc2hpZnRLZXkpIHsKKyAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlv
bihyYW5nZXMuc2xpY2UoMCwgb3VySW5kZXgpLmNvbmNhdChyYW5nZXMuc2xpY2Uob3VySW5kZXgg
KyAxKSksIDApKTsKKyAgICAgIHN0YXJ0U2VsID0gZG9jLnNlbDsKKyAgICB9IGVsc2UgeworICAg
ICAgcmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIG91ckluZGV4LCBvdXJSYW5nZSwgc2VsX21vdXNl
KTsKICAgICB9CiAKICAgICB2YXIgbGFzdFBvcyA9IHN0YXJ0OwpAQCAtMjY4Nyw3ICszNjk3LDcg
QEAKICAgICAgICAgdmFyIGFuY2hvciA9IG9sZFJhbmdlLmFuY2hvciwgaGVhZCA9IHBvczsKICAg
ICAgICAgaWYgKHR5cGUgIT0gInNpbmdsZSIpIHsKICAgICAgICAgICBpZiAodHlwZSA9PSAiZG91
YmxlIikKLSAgICAgICAgICAgIHZhciByYW5nZSA9IGZpbmRXb3JkQXQoY20sIHBvcyk7CisgICAg
ICAgICAgICB2YXIgcmFuZ2UgPSBjbS5maW5kV29yZEF0KHBvcyk7CiAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgMCksIGNsaXBQ
b3MoZG9jLCBQb3MocG9zLmxpbmUgKyAxLCAwKSkpOwogICAgICAgICAgIGlmIChjbXAocmFuZ2Uu
YW5jaG9yLCBhbmNob3IpID4gMCkgewpAQCAtMjcxNiw3ICszNzI2LDcgQEAKICAgICAgIHZhciBj
dXIgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUsIHR5cGUgPT0gInJlY3QiKTsKICAgICAgIGlm
ICghY3VyKSByZXR1cm47CiAgICAgICBpZiAoY21wKGN1ciwgbGFzdFBvcykgIT0gMCkgewotICAg
ICAgICBlbnN1cmVGb2N1cyhjbSk7CisgICAgICAgIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0
KCk7CiAgICAgICAgIGV4dGVuZFRvKGN1cik7CiAgICAgICAgIHZhciB2aXNpYmxlID0gdmlzaWJs
ZUxpbmVzKGRpc3BsYXksIGRvYyk7CiAgICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRv
IHx8IGN1ci5saW5lIDwgdmlzaWJsZS5mcm9tKQpAQCAtMjczMiwxOSArMzc0MiwyMSBAQAogICAg
IH0KIAogICAgIGZ1bmN0aW9uIGRvbmUoZSkgeworICAgICAgY20uc3RhdGUuc2VsZWN0aW5nVGV4
dCA9IGZhbHNlOwogICAgICAgY291bnRlciA9IEluZmluaXR5OwogICAgICAgZV9wcmV2ZW50RGVm
YXVsdChlKTsKLSAgICAgIGZvY3VzSW5wdXQoY20pOworICAgICAgZGlzcGxheS5pbnB1dC5mb2N1
cygpOwogICAgICAgb2ZmKGRvY3VtZW50LCAibW91c2Vtb3ZlIiwgbW92ZSk7CiAgICAgICBvZmYo
ZG9jdW1lbnQsICJtb3VzZXVwIiwgdXApOwogICAgICAgZG9jLmhpc3RvcnkubGFzdFNlbE9yaWdp
biA9IG51bGw7CiAgICAgfQogCiAgICAgdmFyIG1vdmUgPSBvcGVyYXRpb24oY20sIGZ1bmN0aW9u
KGUpIHsKLSAgICAgIGlmICgoaWUgJiYgIWllX3VwdG85KSA/ICAhZS5idXR0b25zIDogIWVfYnV0
dG9uKGUpKSBkb25lKGUpOworICAgICAgaWYgKCFlX2J1dHRvbihlKSkgZG9uZShlKTsKICAgICAg
IGVsc2UgZXh0ZW5kKGUpOwogICAgIH0pOwogICAgIHZhciB1cCA9IG9wZXJhdGlvbihjbSwgZG9u
ZSk7CisgICAgY20uc3RhdGUuc2VsZWN0aW5nVGV4dCA9IHVwOwogICAgIG9uKGRvY3VtZW50LCAi
bW91c2Vtb3ZlIiwgbW92ZSk7CiAgICAgb24oZG9jdW1lbnQsICJtb3VzZXVwIiwgdXApOwogICB9
CkBAIC0yNzg0LDYgKzM3OTYsNyBAQAogCiAgIGZ1bmN0aW9uIG9uRHJvcChlKSB7CiAgICAgdmFy
IGNtID0gdGhpczsKKyAgICBjbGVhckRyYWdDdXJzb3IoY20pOwogICAgIGlmIChzaWduYWxET01F
dmVudChjbSwgZSkgfHwgZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSkKICAgICAgIHJldHVy
bjsKICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwpAQCAtMjgwMCw3ICszODEzLDkgQEAKICAgICAg
ICAgICB0ZXh0W2ldID0gcmVhZGVyLnJlc3VsdDsKICAgICAgICAgICBpZiAoKytyZWFkID09IG4p
IHsKICAgICAgICAgICAgIHBvcyA9IGNsaXBQb3MoY20uZG9jLCBwb3MpOwotICAgICAgICAgICAg
dmFyIGNoYW5nZSA9IHtmcm9tOiBwb3MsIHRvOiBwb3MsIHRleHQ6IHNwbGl0TGluZXModGV4dC5q
b2luKCJcbiIpKSwgb3JpZ2luOiAicGFzdGUifTsKKyAgICAgICAgICAgIHZhciBjaGFuZ2UgPSB7
ZnJvbTogcG9zLCB0bzogcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjbS5k
b2Muc3BsaXRMaW5lcyh0ZXh0LmpvaW4oY20uZG9jLmxpbmVTZXBhcmF0b3IoKSkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcmlnaW46ICJwYXN0ZSJ9OwogICAgICAgICAgICAgbWFrZUNo
YW5nZShjbS5kb2MsIGNoYW5nZSk7CiAgICAgICAgICAgICBzZXRTZWxlY3Rpb25SZXBsYWNlSGlz
dG9yeShjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MsIGNoYW5nZUVuZChjaGFuZ2UpKSk7CiAg
ICAgICAgICAgfQpAQCAtMjgxMywxOSArMzgyOCwxOSBAQAogICAgICAgaWYgKGNtLnN0YXRlLmRy
YWdnaW5nVGV4dCAmJiBjbS5kb2Muc2VsLmNvbnRhaW5zKHBvcykgPiAtMSkgewogICAgICAgICBj
bS5zdGF0ZS5kcmFnZ2luZ1RleHQoZSk7CiAgICAgICAgIC8vIEVuc3VyZSB0aGUgZWRpdG9yIGlz
IHJlLWZvY3VzZWQKLSAgICAgICAgc2V0VGltZW91dChiaW5kKGZvY3VzSW5wdXQsIGNtKSwgMjAp
OworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2NtLmRpc3BsYXkuaW5wdXQuZm9jdXMo
KTt9LCAyMCk7CiAgICAgICAgIHJldHVybjsKICAgICAgIH0KICAgICAgIHRyeSB7CiAgICAgICAg
IHZhciB0ZXh0ID0gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgiVGV4dCIpOwogICAgICAgICBpZiAo
dGV4dCkgewotICAgICAgICAgIGlmIChjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgJiYgIShtYWMgPyBl
Lm1ldGFLZXkgOiBlLmN0cmxLZXkpKQorICAgICAgICAgIGlmIChjbS5zdGF0ZS5kcmFnZ2luZ1Rl
eHQgJiYgIShtYWMgPyBlLmFsdEtleSA6IGUuY3RybEtleSkpCiAgICAgICAgICAgICB2YXIgc2Vs
ZWN0ZWQgPSBjbS5saXN0U2VsZWN0aW9ucygpOwogICAgICAgICAgIHNldFNlbGVjdGlvbk5vVW5k
byhjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MsIHBvcykpOwogICAgICAgICAgIGlmIChzZWxl
Y3RlZCkgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZC5sZW5ndGg7ICsraSkKICAgICAgICAg
ICAgIHJlcGxhY2VSYW5nZShjbS5kb2MsICIiLCBzZWxlY3RlZFtpXS5hbmNob3IsIHNlbGVjdGVk
W2ldLmhlYWQsICJkcmFnIik7CiAgICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbih0ZXh0LCAi
YXJvdW5kIiwgInBhc3RlIik7Ci0gICAgICAgICAgZm9jdXNJbnB1dChjbSk7CisgICAgICAgICAg
Y20uZGlzcGxheS5pbnB1dC5mb2N1cygpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgICBjYXRj
aChlKXt9CkBAIC0yODU0LDYgKzM4NjksMjUgQEAKICAgICB9CiAgIH0KIAorICBmdW5jdGlvbiBv
bkRyYWdPdmVyKGNtLCBlKSB7CisgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7Cisg
ICAgaWYgKCFwb3MpIHJldHVybjsKKyAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKTsKKyAgICBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNtLCBwb3MsIGZyYWcpOwor
ICAgIGlmICghY20uZGlzcGxheS5kcmFnQ3Vyc29yKSB7CisgICAgICBjbS5kaXNwbGF5LmRyYWdD
dXJzb3IgPSBlbHQoImRpdiIsIG51bGwsICJDb2RlTWlycm9yLWN1cnNvcnMgQ29kZU1pcnJvci1k
cmFnY3Vyc29ycyIpOworICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UuaW5zZXJ0QmVmb3JlKGNt
LmRpc3BsYXkuZHJhZ0N1cnNvciwgY20uZGlzcGxheS5jdXJzb3JEaXYpOworICAgIH0KKyAgICBy
ZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5LmRyYWdDdXJzb3IsIGZyYWcpOworICB9CisK
KyAgZnVuY3Rpb24gY2xlYXJEcmFnQ3Vyc29yKGNtKSB7CisgICAgaWYgKGNtLmRpc3BsYXkuZHJh
Z0N1cnNvcikgeworICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoY20uZGlz
cGxheS5kcmFnQ3Vyc29yKTsKKyAgICAgIGNtLmRpc3BsYXkuZHJhZ0N1cnNvciA9IG51bGw7Cisg
ICAgfQorICB9CisKICAgLy8gU0NST0xMIEVWRU5UUwogCiAgIC8vIFN5bmMgdGhlIHNjcm9sbGFi
bGUgYXJlYSBhbmQgc2Nyb2xsYmFycywgZW5zdXJlIHRoZSB2aWV3cG9ydApAQCAtMjg2MSwxMCAr
Mzg5NSwxMCBAQAogICBmdW5jdGlvbiBzZXRTY3JvbGxUb3AoY20sIHZhbCkgewogICAgIGlmIChN
YXRoLmFicyhjbS5kb2Muc2Nyb2xsVG9wIC0gdmFsKSA8IDIpIHJldHVybjsKICAgICBjbS5kb2Mu
c2Nyb2xsVG9wID0gdmFsOwotICAgIGlmICghZ2Vja28pIHVwZGF0ZURpc3BsYXkoY20sIHt0b3A6
IHZhbH0pOworICAgIGlmICghZ2Vja28pIHVwZGF0ZURpc3BsYXlTaW1wbGUoY20sIHt0b3A6IHZh
bH0pOwogICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCAhPSB2YWwpIGNtLmRp
c3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gdmFsOwotICAgIGlmIChjbS5kaXNwbGF5LnNjcm9s
bGJhclYuc2Nyb2xsVG9wICE9IHZhbCkgY20uZGlzcGxheS5zY3JvbGxiYXJWLnNjcm9sbFRvcCA9
IHZhbDsKLSAgICBpZiAoZ2Vja28pIHVwZGF0ZURpc3BsYXkoY20pOworICAgIGNtLmRpc3BsYXku
c2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AodmFsKTsKKyAgICBpZiAoZ2Vja28pIHVwZGF0ZURpc3Bs
YXlTaW1wbGUoY20pOwogICAgIHN0YXJ0V29ya2VyKGNtLCAxMDApOwogICB9CiAgIC8vIFN5bmMg
c2Nyb2xsZXIgYW5kIHNjcm9sbGJhciwgZW5zdXJlIHRoZSBndXR0ZXIgZWxlbWVudHMgYXJlCkBA
IC0yODc1LDcgKzM5MDksNyBAQAogICAgIGNtLmRvYy5zY3JvbGxMZWZ0ID0gdmFsOwogICAgIGFs
aWduSG9yaXpvbnRhbGx5KGNtKTsKICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxM
ZWZ0ICE9IHZhbCkgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ID0gdmFsOwotICAgIGlm
IChjbS5kaXNwbGF5LnNjcm9sbGJhckguc2Nyb2xsTGVmdCAhPSB2YWwpIGNtLmRpc3BsYXkuc2Ny
b2xsYmFySC5zY3JvbGxMZWZ0ID0gdmFsOworICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRT
Y3JvbGxMZWZ0KHZhbCk7CiAgIH0KIAogICAvLyBTaW5jZSB0aGUgZGVsdGEgdmFsdWVzIHJlcG9y
dGVkIG9uIG1vdXNlIHdoZWVsIGV2ZW50cyBhcmUKQEAgLTI4OTksMTEgKzM5MzMsMjIgQEAKICAg
ZWxzZSBpZiAoY2hyb21lKSB3aGVlbFBpeGVsc1BlclVuaXQgPSAtLjc7CiAgIGVsc2UgaWYgKHNh
ZmFyaSkgd2hlZWxQaXhlbHNQZXJVbml0ID0gLTEvMzsKIAotICBmdW5jdGlvbiBvblNjcm9sbFdo
ZWVsKGNtLCBlKSB7CisgIHZhciB3aGVlbEV2ZW50RGVsdGEgPSBmdW5jdGlvbihlKSB7CiAgICAg
dmFyIGR4ID0gZS53aGVlbERlbHRhWCwgZHkgPSBlLndoZWVsRGVsdGFZOwogICAgIGlmIChkeCA9
PSBudWxsICYmIGUuZGV0YWlsICYmIGUuYXhpcyA9PSBlLkhPUklaT05UQUxfQVhJUykgZHggPSBl
LmRldGFpbDsKICAgICBpZiAoZHkgPT0gbnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMgPT0gZS5W
RVJUSUNBTF9BWElTKSBkeSA9IGUuZGV0YWlsOwogICAgIGVsc2UgaWYgKGR5ID09IG51bGwpIGR5
ID0gZS53aGVlbERlbHRhOworICAgIHJldHVybiB7eDogZHgsIHk6IGR5fTsKKyAgfTsKKyAgQ29k
ZU1pcnJvci53aGVlbEV2ZW50UGl4ZWxzID0gZnVuY3Rpb24oZSkgeworICAgIHZhciBkZWx0YSA9
IHdoZWVsRXZlbnREZWx0YShlKTsKKyAgICBkZWx0YS54ICo9IHdoZWVsUGl4ZWxzUGVyVW5pdDsK
KyAgICBkZWx0YS55ICo9IHdoZWVsUGl4ZWxzUGVyVW5pdDsKKyAgICByZXR1cm4gZGVsdGE7Cisg
IH07CisKKyAgZnVuY3Rpb24gb25TY3JvbGxXaGVlbChjbSwgZSkgeworICAgIHZhciBkZWx0YSA9
IHdoZWVsRXZlbnREZWx0YShlKSwgZHggPSBkZWx0YS54LCBkeSA9IGRlbHRhLnk7CiAKICAgICB2
YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNjcm9sbCA9IGRpc3BsYXkuc2Nyb2xsZXI7CiAgICAg
Ly8gUXVpdCBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gc2Nyb2xsIGhlcmUKQEAgLTI5NDcsNyArMzk5
Miw3IEBACiAgICAgICB2YXIgdG9wID0gY20uZG9jLnNjcm9sbFRvcCwgYm90ID0gdG9wICsgZGlz
cGxheS53cmFwcGVyLmNsaWVudEhlaWdodDsKICAgICAgIGlmIChwaXhlbHMgPCAwKSB0b3AgPSBN
YXRoLm1heCgwLCB0b3AgKyBwaXhlbHMgLSA1MCk7CiAgICAgICBlbHNlIGJvdCA9IE1hdGgubWlu
KGNtLmRvYy5oZWlnaHQsIGJvdCArIHBpeGVscyArIDUwKTsKLSAgICAgIHVwZGF0ZURpc3BsYXko
Y20sIHt0b3A6IHRvcCwgYm90dG9tOiBib3R9KTsKKyAgICAgIHVwZGF0ZURpc3BsYXlTaW1wbGUo
Y20sIHt0b3A6IHRvcCwgYm90dG9tOiBib3R9KTsKICAgICB9CiAKICAgICBpZiAod2hlZWxTYW1w
bGVzIDwgMjApIHsKQEAgLTI5ODEsNyArNDAyNiw3IEBACiAgICAgfQogICAgIC8vIEVuc3VyZSBw
cmV2aW91cyBpbnB1dCBoYXMgYmVlbiByZWFkLCBzbyB0aGF0IHRoZSBoYW5kbGVyIHNlZXMgYQog
ICAgIC8vIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgZG9jdW1lbnQKLSAgICBpZiAoY20uZGlzcGxh
eS5wb2xsaW5nRmFzdCAmJiByZWFkSW5wdXQoY20pKSBjbS5kaXNwbGF5LnBvbGxpbmdGYXN0ID0g
ZmFsc2U7CisgICAgY20uZGlzcGxheS5pbnB1dC5lbnN1cmVQb2xsZWQoKTsKICAgICB2YXIgcHJl
dlNoaWZ0ID0gY20uZGlzcGxheS5zaGlmdCwgZG9uZSA9IGZhbHNlOwogICAgIHRyeSB7CiAgICAg
ICBpZiAoaXNSZWFkT25seShjbSkpIGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSB0cnVlOwpAQCAt
Mjk5NCw3MSArNDAzOSw3OSBAQAogICAgIHJldHVybiBkb25lOwogICB9CiAKLSAgLy8gQ29sbGVj
dCB0aGUgY3VycmVudGx5IGFjdGl2ZSBrZXltYXBzLgotICBmdW5jdGlvbiBhbGxLZXlNYXBzKGNt
KSB7Ci0gICAgdmFyIG1hcHMgPSBjbS5zdGF0ZS5rZXlNYXBzLnNsaWNlKDApOwotICAgIGlmIChj
bS5vcHRpb25zLmV4dHJhS2V5cykgbWFwcy5wdXNoKGNtLm9wdGlvbnMuZXh0cmFLZXlzKTsKLSAg
ICBtYXBzLnB1c2goY20ub3B0aW9ucy5rZXlNYXApOwotICAgIHJldHVybiBtYXBzOworICBmdW5j
dGlvbiBsb29rdXBLZXlGb3JFZGl0b3IoY20sIG5hbWUsIGhhbmRsZSkgeworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgY20uc3RhdGUua2V5TWFwcy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIHJl
c3VsdCA9IGxvb2t1cEtleShuYW1lLCBjbS5zdGF0ZS5rZXlNYXBzW2ldLCBoYW5kbGUsIGNtKTsK
KyAgICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiAoY20u
b3B0aW9ucy5leHRyYUtleXMgJiYgbG9va3VwS2V5KG5hbWUsIGNtLm9wdGlvbnMuZXh0cmFLZXlz
LCBoYW5kbGUsIGNtKSkKKyAgICAgIHx8IGxvb2t1cEtleShuYW1lLCBjbS5vcHRpb25zLmtleU1h
cCwgaGFuZGxlLCBjbSk7CisgIH0KKworICB2YXIgc3RvcFNlcSA9IG5ldyBEZWxheWVkOworICBm
dW5jdGlvbiBkaXNwYXRjaEtleShjbSwgbmFtZSwgZSwgaGFuZGxlKSB7CisgICAgdmFyIHNlcSA9
IGNtLnN0YXRlLmtleVNlcTsKKyAgICBpZiAoc2VxKSB7CisgICAgICBpZiAoaXNNb2RpZmllcktl
eShuYW1lKSkgcmV0dXJuICJoYW5kbGVkIjsKKyAgICAgIHN0b3BTZXEuc2V0KDUwLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgaWYgKGNtLnN0YXRlLmtleVNlcSA9PSBzZXEpIHsKKyAgICAgICAgICBj
bS5zdGF0ZS5rZXlTZXEgPSBudWxsOworICAgICAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQo
KTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBuYW1lID0gc2VxICsgIiAiICsgbmFtZTsK
KyAgICB9CisgICAgdmFyIHJlc3VsdCA9IGxvb2t1cEtleUZvckVkaXRvcihjbSwgbmFtZSwgaGFu
ZGxlKTsKKworICAgIGlmIChyZXN1bHQgPT0gIm11bHRpIikKKyAgICAgIGNtLnN0YXRlLmtleVNl
cSA9IG5hbWU7CisgICAgaWYgKHJlc3VsdCA9PSAiaGFuZGxlZCIpCisgICAgICBzaWduYWxMYXRl
cihjbSwgImtleUhhbmRsZWQiLCBjbSwgbmFtZSwgZSk7CisKKyAgICBpZiAocmVzdWx0ID09ICJo
YW5kbGVkIiB8fCByZXN1bHQgPT0gIm11bHRpIikgeworICAgICAgZV9wcmV2ZW50RGVmYXVsdChl
KTsKKyAgICAgIHJlc3RhcnRCbGluayhjbSk7CisgICAgfQorCisgICAgaWYgKHNlcSAmJiAhcmVz
dWx0ICYmIC9cJyQvLnRlc3QobmFtZSkpIHsKKyAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuICEhcmVzdWx0OwogICB9CiAKLSAg
dmFyIG1heWJlVHJhbnNpdGlvbjsKICAgLy8gSGFuZGxlIGEga2V5IGZyb20gdGhlIGtleWRvd24g
ZXZlbnQuCiAgIGZ1bmN0aW9uIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpIHsKLSAgICAvLyBIYW5k
bGUgYXV0b21hdGljIGtleW1hcCB0cmFuc2l0aW9ucwotICAgIHZhciBzdGFydE1hcCA9IGdldEtl
eU1hcChjbS5vcHRpb25zLmtleU1hcCksIG5leHQgPSBzdGFydE1hcC5hdXRvOwotICAgIGNsZWFy
VGltZW91dChtYXliZVRyYW5zaXRpb24pOwotICAgIGlmIChuZXh0ICYmICFpc01vZGlmaWVyS2V5
KGUpKSBtYXliZVRyYW5zaXRpb24gPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgaWYg
KGdldEtleU1hcChjbS5vcHRpb25zLmtleU1hcCkgPT0gc3RhcnRNYXApIHsKLSAgICAgICAgY20u
b3B0aW9ucy5rZXlNYXAgPSAobmV4dC5jYWxsID8gbmV4dC5jYWxsKG51bGwsIGNtKSA6IG5leHQp
OwotICAgICAgICBrZXlNYXBDaGFuZ2VkKGNtKTsKLSAgICAgIH0KLSAgICB9LCA1MCk7Ci0KLSAg
ICB2YXIgbmFtZSA9IGtleU5hbWUoZSwgdHJ1ZSksIGhhbmRsZWQgPSBmYWxzZTsKKyAgICB2YXIg
bmFtZSA9IGtleU5hbWUoZSwgdHJ1ZSk7CiAgICAgaWYgKCFuYW1lKSByZXR1cm4gZmFsc2U7Ci0g
ICAgdmFyIGtleW1hcHMgPSBhbGxLZXlNYXBzKGNtKTsKIAotICAgIGlmIChlLnNoaWZ0S2V5KSB7
CisgICAgaWYgKGUuc2hpZnRLZXkgJiYgIWNtLnN0YXRlLmtleVNlcSkgewogICAgICAgLy8gRmly
c3QgdHJ5IHRvIHJlc29sdmUgZnVsbCBuYW1lIChpbmNsdWRpbmcgJ1NoaWZ0LScpLiBGYWlsaW5n
CiAgICAgICAvLyB0aGF0LCBzZWUgaWYgdGhlcmUgaXMgYSBjdXJzb3ItbW90aW9uIGNvbW1hbmQg
KHN0YXJ0aW5nIHdpdGgKICAgICAgIC8vICdnbycpIGJvdW5kIHRvIHRoZSBrZXluYW1lIHdpdGhv
dXQgJ1NoaWZ0LScuCi0gICAgICBoYW5kbGVkID0gbG9va3VwS2V5KCJTaGlmdC0iICsgbmFtZSwg
a2V5bWFwcywgZnVuY3Rpb24oYikge3JldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUp
O30pCi0gICAgICAgICAgICAgfHwgbG9va3VwS2V5KG5hbWUsIGtleW1hcHMsIGZ1bmN0aW9uKGIp
IHsKLSAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYiA9PSAic3RyaW5nIiA/IC9eZ29bQS1a
XS8udGVzdChiKSA6IGIubW90aW9uKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9IYW5k
bGVCaW5kaW5nKGNtLCBiKTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgIHJldHVybiBkaXNw
YXRjaEtleShjbSwgIlNoaWZ0LSIgKyBuYW1lLCBlLCBmdW5jdGlvbihiKSB7cmV0dXJuIGRvSGFu
ZGxlQmluZGluZyhjbSwgYiwgdHJ1ZSk7fSkKKyAgICAgICAgICB8fCBkaXNwYXRjaEtleShjbSwg
bmFtZSwgZSwgZnVuY3Rpb24oYikgeworICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiID09ICJz
dHJpbmciID8gL15nb1tBLVpdLy50ZXN0KGIpIDogYi5tb3Rpb24pCisgICAgICAgICAgICAgICAg
IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIpOworICAgICAgICAgICAgIH0pOwogICAgIH0g
ZWxzZSB7Ci0gICAgICBoYW5kbGVkID0gbG9va3VwS2V5KG5hbWUsIGtleW1hcHMsIGZ1bmN0aW9u
KGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYik7IH0pOwotICAgIH0KLQotICAgIGlm
IChoYW5kbGVkKSB7Ci0gICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwotICAgICAgcmVzdGFydEJs
aW5rKGNtKTsKLSAgICAgIHNpZ25hbExhdGVyKGNtLCAia2V5SGFuZGxlZCIsIGNtLCBuYW1lLCBl
KTsKKyAgICAgIHJldHVybiBkaXNwYXRjaEtleShjbSwgbmFtZSwgZSwgZnVuY3Rpb24oYikgeyBy
ZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiKTsgfSk7CiAgICAgfQotICAgIHJldHVybiBoYW5k
bGVkOwogICB9CiAKICAgLy8gSGFuZGxlIGEga2V5IGZyb20gdGhlIGtleXByZXNzIGV2ZW50CiAg
IGZ1bmN0aW9uIGhhbmRsZUNoYXJCaW5kaW5nKGNtLCBlLCBjaCkgewotICAgIHZhciBoYW5kbGVk
ID0gbG9va3VwS2V5KCInIiArIGNoICsgIiciLCBhbGxLZXlNYXBzKGNtKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbihiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20s
IGIsIHRydWUpOyB9KTsKLSAgICBpZiAoaGFuZGxlZCkgewotICAgICAgZV9wcmV2ZW50RGVmYXVs
dChlKTsKLSAgICAgIHJlc3RhcnRCbGluayhjbSk7Ci0gICAgICBzaWduYWxMYXRlcihjbSwgImtl
eUhhbmRsZWQiLCBjbSwgIiciICsgY2ggKyAiJyIsIGUpOwotICAgIH0KLSAgICByZXR1cm4gaGFu
ZGxlZDsKKyAgICByZXR1cm4gZGlzcGF0Y2hLZXkoY20sICInIiArIGNoICsgIiciLCBlLAorICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmco
Y20sIGIsIHRydWUpOyB9KTsKICAgfQogCiAgIHZhciBsYXN0U3RvcHBlZEtleSA9IG51bGw7CiAg
IGZ1bmN0aW9uIG9uS2V5RG93bihlKSB7CiAgICAgdmFyIGNtID0gdGhpczsKLSAgICBlbnN1cmVG
b2N1cyhjbSk7CisgICAgY20uY3VyT3AuZm9jdXMgPSBhY3RpdmVFbHQoKTsKICAgICBpZiAoc2ln
bmFsRE9NRXZlbnQoY20sIGUpKSByZXR1cm47CiAgICAgLy8gSUUgZG9lcyBzdHJhbmdlIHRoaW5n
cyB3aXRoIGVzY2FwZS4KLSAgICBpZiAoaWVfdXB0bzEwICYmIGUua2V5Q29kZSA9PSAyNykgZS5y
ZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgMTEgJiYgZS5r
ZXlDb2RlID09IDI3KSBlLnJldHVyblZhbHVlID0gZmFsc2U7CiAgICAgdmFyIGNvZGUgPSBlLmtl
eUNvZGU7CiAgICAgY20uZGlzcGxheS5zaGlmdCA9IGNvZGUgPT0gMTYgfHwgZS5zaGlmdEtleTsK
ICAgICB2YXIgaGFuZGxlZCA9IGhhbmRsZUtleUJpbmRpbmcoY20sIGUpOwpAQCAtMzA5MCw0MiAr
NDE0Myw1NSBAQAogICB9CiAKICAgZnVuY3Rpb24gb25LZXlVcChlKSB7Ci0gICAgaWYgKHNpZ25h
bERPTUV2ZW50KHRoaXMsIGUpKSByZXR1cm47CiAgICAgaWYgKGUua2V5Q29kZSA9PSAxNikgdGhp
cy5kb2Muc2VsLnNoaWZ0ID0gZmFsc2U7CisgICAgc2lnbmFsRE9NRXZlbnQodGhpcywgZSk7CiAg
IH0KIAogICBmdW5jdGlvbiBvbktleVByZXNzKGUpIHsKICAgICB2YXIgY20gPSB0aGlzOwotICAg
IGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHJldHVybjsKKyAgICBpZiAoZXZlbnRJbldpZGdl
dChjbS5kaXNwbGF5LCBlKSB8fCBzaWduYWxET01FdmVudChjbSwgZSkgfHwgZS5jdHJsS2V5ICYm
ICFlLmFsdEtleSB8fCBtYWMgJiYgZS5tZXRhS2V5KSByZXR1cm47CiAgICAgdmFyIGtleUNvZGUg
PSBlLmtleUNvZGUsIGNoYXJDb2RlID0gZS5jaGFyQ29kZTsKICAgICBpZiAocHJlc3RvICYmIGtl
eUNvZGUgPT0gbGFzdFN0b3BwZWRLZXkpIHtsYXN0U3RvcHBlZEtleSA9IG51bGw7IGVfcHJldmVu
dERlZmF1bHQoZSk7IHJldHVybjt9Ci0gICAgaWYgKCgocHJlc3RvICYmICghZS53aGljaCB8fCBl
LndoaWNoIDwgMTApKSB8fCBraHRtbCkgJiYgaGFuZGxlS2V5QmluZGluZyhjbSwgZSkpIHJldHVy
bjsKKyAgICBpZiAoKHByZXN0byAmJiAoIWUud2hpY2ggfHwgZS53aGljaCA8IDEwKSkgJiYgaGFu
ZGxlS2V5QmluZGluZyhjbSwgZSkpIHJldHVybjsKICAgICB2YXIgY2ggPSBTdHJpbmcuZnJvbUNo
YXJDb2RlKGNoYXJDb2RlID09IG51bGwgPyBrZXlDb2RlIDogY2hhckNvZGUpOwogICAgIGlmICho
YW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpKSByZXR1cm47Ci0gICAgaWYgKGllICYmICFpZV91
cHRvOCkgY20uZGlzcGxheS5pbnB1dEhhc1NlbGVjdGlvbiA9IG51bGw7Ci0gICAgZmFzdFBvbGwo
Y20pOworICAgIGNtLmRpc3BsYXkuaW5wdXQub25LZXlQcmVzcyhlKTsKICAgfQogCiAgIC8vIEZP
Q1VTL0JMVVIgRVZFTlRTCiAKKyAgZnVuY3Rpb24gZGVsYXlCbHVyRXZlbnQoY20pIHsKKyAgICBj
bS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IHRydWU7CisgICAgc2V0VGltZW91dChmdW5jdGlv
bigpIHsKKyAgICAgIGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkgeworICAgICAgICBj
bS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IGZhbHNlOworICAgICAgICBvbkJsdXIoY20pOwor
ICAgICAgfQorICAgIH0sIDEwMCk7CisgIH0KKwogICBmdW5jdGlvbiBvbkZvY3VzKGNtKSB7Cisg
ICAgaWYgKGNtLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50KSBjbS5zdGF0ZS5kZWxheWluZ0JsdXJF
dmVudCA9IGZhbHNlOworCiAgICAgaWYgKGNtLm9wdGlvbnMucmVhZE9ubHkgPT0gIm5vY3Vyc29y
IikgcmV0dXJuOwogICAgIGlmICghY20uc3RhdGUuZm9jdXNlZCkgewogICAgICAgc2lnbmFsKGNt
LCAiZm9jdXMiLCBjbSk7CiAgICAgICBjbS5zdGF0ZS5mb2N1c2VkID0gdHJ1ZTsKICAgICAgIGFk
ZENsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgIkNvZGVNaXJyb3ItZm9jdXNlZCIpOwotICAgICAg
Ly8gVGhlIHByZXZJbnB1dCB0ZXN0IHByZXZlbnRzIHRoaXMgZnJvbSBmaXJpbmcgd2hlbiBhIGNv
bnRleHQKLSAgICAgIC8vIG1lbnUgaXMgY2xvc2VkIChzaW5jZSB0aGUgcmVzZXRJbnB1dCB3b3Vs
ZCBraWxsIHRoZQorICAgICAgLy8gVGhpcyB0ZXN0IHByZXZlbnRzIHRoaXMgZnJvbSBmaXJpbmcg
d2hlbiBhIGNvbnRleHQKKyAgICAgIC8vIG1lbnUgaXMgY2xvc2VkIChzaW5jZSB0aGUgaW5wdXQg
cmVzZXQgd291bGQga2lsbCB0aGUKICAgICAgIC8vIHNlbGVjdC1hbGwgZGV0ZWN0aW9uIGhhY2sp
CiAgICAgICBpZiAoIWNtLmN1ck9wICYmIGNtLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgIT0g
Y20uZG9jLnNlbCkgewotICAgICAgICByZXNldElucHV0KGNtKTsKLSAgICAgICAgaWYgKHdlYmtp
dCkgc2V0VGltZW91dChiaW5kKHJlc2V0SW5wdXQsIGNtLCB0cnVlKSwgMCk7IC8vIElzc3VlICMx
NzMwCisgICAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTsKKyAgICAgICAgaWYgKHdlYmtp
dCkgc2V0VGltZW91dChmdW5jdGlvbigpIHsgY20uZGlzcGxheS5pbnB1dC5yZXNldCh0cnVlKTsg
fSwgMjApOyAvLyBJc3N1ZSAjMTczMAogICAgICAgfQorICAgICAgY20uZGlzcGxheS5pbnB1dC5y
ZWNlaXZlZEZvY3VzKCk7CiAgICAgfQotICAgIHNsb3dQb2xsKGNtKTsKICAgICByZXN0YXJ0Qmxp
bmsoY20pOwogICB9CiAgIGZ1bmN0aW9uIG9uQmx1cihjbSkgeworICAgIGlmIChjbS5zdGF0ZS5k
ZWxheWluZ0JsdXJFdmVudCkgcmV0dXJuOworCiAgICAgaWYgKGNtLnN0YXRlLmZvY3VzZWQpIHsK
ICAgICAgIHNpZ25hbChjbSwgImJsdXIiLCBjbSk7CiAgICAgICBjbS5zdGF0ZS5mb2N1c2VkID0g
ZmFsc2U7CkBAIC0zMTQxLDc2ICs0MjA3LDggQEAKICAgLy8gdGV4dGFyZWEgKG1ha2luZyBpdCBh
cyB1bm9idHJ1c2l2ZSBhcyBwb3NzaWJsZSkgdG8gbGV0IHRoZQogICAvLyByaWdodC1jbGljayB0
YWtlIGVmZmVjdCBvbiBpdC4KICAgZnVuY3Rpb24gb25Db250ZXh0TWVudShjbSwgZSkgewotICAg
IGlmIChzaWduYWxET01FdmVudChjbSwgZSwgImNvbnRleHRtZW51IikpIHJldHVybjsKLSAgICB2
YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7Ci0gICAgaWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxheSwg
ZSkgfHwgY29udGV4dE1lbnVJbkd1dHRlcihjbSwgZSkpIHJldHVybjsKLQotICAgIHZhciBwb3Mg
PSBwb3NGcm9tTW91c2UoY20sIGUpLCBzY3JvbGxQb3MgPSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9s
bFRvcDsKLSAgICBpZiAoIXBvcyB8fCBwcmVzdG8pIHJldHVybjsgLy8gT3BlcmEgaXMgZGlmZmlj
dWx0LgotCi0gICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgdGV4dCBzZWxlY3Rpb24gb25seSBpZiB0
aGUgY2xpY2sgaXMgZG9uZSBvdXRzaWRlIG9mIHRoZSBzZWxlY3Rpb24KLSAgICAvLyBhbmQgJ3Jl
c2V0U2VsZWN0aW9uT25Db250ZXh0TWVudScgb3B0aW9uIGlzIHRydWUuCi0gICAgdmFyIHJlc2V0
ID0gY20ub3B0aW9ucy5yZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnU7Ci0gICAgaWYgKHJlc2V0
ICYmIGNtLmRvYy5zZWwuY29udGFpbnMocG9zKSA9PSAtMSkKLSAgICAgIG9wZXJhdGlvbihjbSwg
c2V0U2VsZWN0aW9uKShjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MpLCBzZWxfZG9udFNjcm9s
bCk7Ci0KLSAgICB2YXIgb2xkQ1NTID0gZGlzcGxheS5pbnB1dC5zdHlsZS5jc3NUZXh0OwotICAg
IGRpc3BsYXkuaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwotICAgIGRpc3Bs
YXkuaW5wdXQuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBo
ZWlnaHQ6IDMwcHg7IHRvcDogIiArIChlLmNsaWVudFkgLSA1KSArCi0gICAgICAicHg7IGxlZnQ6
ICIgKyAoZS5jbGllbnRYIC0gNSkgKyAicHg7IHotaW5kZXg6IDEwMDA7IGJhY2tncm91bmQ6ICIg
KwotICAgICAgKGllID8gInJnYmEoMjU1LCAyNTUsIDI1NSwgLjA1KSIgOiAidHJhbnNwYXJlbnQi
KSArCi0gICAgICAiOyBvdXRsaW5lOiBub25lOyBib3JkZXItd2lkdGg6IDA7IG91dGxpbmU6IG5v
bmU7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IC4wNTsgZmlsdGVyOiBhbHBoYShvcGFjaXR5
PTUpOyI7Ci0gICAgZm9jdXNJbnB1dChjbSk7Ci0gICAgcmVzZXRJbnB1dChjbSk7Ci0gICAgLy8g
QWRkcyAiU2VsZWN0IGFsbCIgdG8gY29udGV4dCBtZW51IGluIEZGCi0gICAgaWYgKCFjbS5zb21l
dGhpbmdTZWxlY3RlZCgpKSBkaXNwbGF5LmlucHV0LnZhbHVlID0gZGlzcGxheS5wcmV2SW5wdXQg
PSAiICI7Ci0gICAgZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9IGNtLmRvYy5zZWw7Ci0gICAg
Y2xlYXJUaW1lb3V0KGRpc3BsYXkuZGV0ZWN0aW5nU2VsZWN0QWxsKTsKLQotICAgIC8vIFNlbGVj
dC1hbGwgd2lsbCBiZSBncmV5ZWQgb3V0IGlmIHRoZXJlJ3Mgbm90aGluZyB0byBzZWxlY3QsIHNv
Ci0gICAgLy8gdGhpcyBhZGRzIGEgemVyby13aWR0aCBzcGFjZSBzbyB0aGF0IHdlIGNhbiBsYXRl
ciBjaGVjayB3aGV0aGVyCi0gICAgLy8gaXQgZ290IHNlbGVjdGVkLgotICAgIGZ1bmN0aW9uIHBy
ZXBhcmVTZWxlY3RBbGxIYWNrKCkgewotICAgICAgaWYgKGRpc3BsYXkuaW5wdXQuc2VsZWN0aW9u
U3RhcnQgIT0gbnVsbCkgewotICAgICAgICB2YXIgc2VsZWN0ZWQgPSBjbS5zb21ldGhpbmdTZWxl
Y3RlZCgpOwotICAgICAgICB2YXIgZXh0dmFsID0gZGlzcGxheS5pbnB1dC52YWx1ZSA9ICJcdTIw
MGIiICsgKHNlbGVjdGVkID8gZGlzcGxheS5pbnB1dC52YWx1ZSA6ICIiKTsKLSAgICAgICAgZGlz
cGxheS5wcmV2SW5wdXQgPSBzZWxlY3RlZCA/ICIiIDogIlx1MjAwYiI7Ci0gICAgICAgIGRpc3Bs
YXkuaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSAxOyBkaXNwbGF5LmlucHV0LnNlbGVjdGlvbkVuZCA9
IGV4dHZhbC5sZW5ndGg7Ci0gICAgICAgIC8vIFJlLXNldCB0aGlzLCBpbiBjYXNlIHNvbWUgb3Ro
ZXIgaGFuZGxlciB0b3VjaGVkIHRoZQotICAgICAgICAvLyBzZWxlY3Rpb24gaW4gdGhlIG1lYW50
aW1lLgotICAgICAgICBkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID0gY20uZG9jLnNlbDsKLSAg
ICAgIH0KLSAgICB9Ci0gICAgZnVuY3Rpb24gcmVoaWRlKCkgewotICAgICAgZGlzcGxheS5pbnB1
dERpdi5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7Ci0gICAgICBkaXNwbGF5LmlucHV0LnN0
eWxlLmNzc1RleHQgPSBvbGRDU1M7Ci0gICAgICBpZiAoaWVfdXB0bzgpIGRpc3BsYXkuc2Nyb2xs
YmFyVi5zY3JvbGxUb3AgPSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHNjcm9sbFBvczsK
LSAgICAgIHNsb3dQb2xsKGNtKTsKLQotICAgICAgLy8gVHJ5IHRvIGRldGVjdCB0aGUgdXNlciBj
aG9vc2luZyBzZWxlY3QtYWxsCi0gICAgICBpZiAoZGlzcGxheS5pbnB1dC5zZWxlY3Rpb25TdGFy
dCAhPSBudWxsKSB7Ci0gICAgICAgIGlmICghaWUgfHwgaWVfdXB0bzgpIHByZXBhcmVTZWxlY3RB
bGxIYWNrKCk7Ci0gICAgICAgIHZhciBpID0gMCwgcG9sbCA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgIGlmIChkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID09IGNtLmRvYy5zZWwgJiYgZGlzcGxh
eS5pbnB1dC5zZWxlY3Rpb25TdGFydCA9PSAwKQotICAgICAgICAgICAgb3BlcmF0aW9uKGNtLCBj
b21tYW5kcy5zZWxlY3RBbGwpKGNtKTsKLSAgICAgICAgICBlbHNlIGlmIChpKysgPCAxMCkgZGlz
cGxheS5kZXRlY3RpbmdTZWxlY3RBbGwgPSBzZXRUaW1lb3V0KHBvbGwsIDUwMCk7Ci0gICAgICAg
ICAgZWxzZSByZXNldElucHV0KGNtKTsKLSAgICAgICAgfTsKLSAgICAgICAgZGlzcGxheS5kZXRl
Y3RpbmdTZWxlY3RBbGwgPSBzZXRUaW1lb3V0KHBvbGwsIDIwMCk7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKGllICYmICFpZV91cHRvOCkgcHJlcGFyZVNlbGVjdEFsbEhhY2soKTsKLSAgICBp
ZiAoY2FwdHVyZVJpZ2h0Q2xpY2spIHsKLSAgICAgIGVfc3RvcChlKTsKLSAgICAgIHZhciBtb3Vz
ZXVwID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIG9mZih3aW5kb3csICJtb3VzZXVwIiwgbW91c2V1
cCk7Ci0gICAgICAgIHNldFRpbWVvdXQocmVoaWRlLCAyMCk7Ci0gICAgICB9OwotICAgICAgb24o
d2luZG93LCAibW91c2V1cCIsIG1vdXNldXApOwotICAgIH0gZWxzZSB7Ci0gICAgICBzZXRUaW1l
b3V0KHJlaGlkZSwgNTApOwotICAgIH0KKyAgICBpZiAoZXZlbnRJbldpZGdldChjbS5kaXNwbGF5
LCBlKSB8fCBjb250ZXh0TWVudUluR3V0dGVyKGNtLCBlKSkgcmV0dXJuOworICAgIGNtLmRpc3Bs
YXkuaW5wdXQub25Db250ZXh0TWVudShlKTsKICAgfQogCiAgIGZ1bmN0aW9uIGNvbnRleHRNZW51
SW5HdXR0ZXIoY20sIGUpIHsKQEAgLTMzOTAsOSArNDM4OCw5IEBACiAKICAgICAgIGFudGlDaGFu
Z2VzLnB1c2goaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpKTsKIAotICAgICAg
dmFyIGFmdGVyID0gaSA/IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSwgbnVsbCkg
OiBsc3Qoc291cmNlKTsKKyAgICAgIHZhciBhZnRlciA9IGkgPyBjb21wdXRlU2VsQWZ0ZXJDaGFu
Z2UoZG9jLCBjaGFuZ2UpIDogbHN0KHNvdXJjZSk7CiAgICAgICBtYWtlQ2hhbmdlU2luZ2xlRG9j
KGRvYywgY2hhbmdlLCBhZnRlciwgbWVyZ2VPbGRTcGFucyhkb2MsIGNoYW5nZSkpOwotICAgICAg
aWYgKCFpICYmIGRvYy5jbSkgZG9jLmNtLnNjcm9sbEludG9WaWV3KGNoYW5nZSk7CisgICAgICBp
ZiAoIWkgJiYgZG9jLmNtKSBkb2MuY20uc2Nyb2xsSW50b1ZpZXcoe2Zyb206IGNoYW5nZS5mcm9t
LCB0bzogY2hhbmdlRW5kKGNoYW5nZSl9KTsKICAgICAgIHZhciByZWJhc2VkID0gW107CiAKICAg
ICAgIC8vIFByb3BhZ2F0ZSB0byB0aGUgbGlua2VkIGRvY3VtZW50cwpAQCAtMzQ0OSw3ICs0NDQ3
LDcgQEAKIAogICAgIGNoYW5nZS5yZW1vdmVkID0gZ2V0QmV0d2Vlbihkb2MsIGNoYW5nZS5mcm9t
LCBjaGFuZ2UudG8pOwogCi0gICAgaWYgKCFzZWxBZnRlcikgc2VsQWZ0ZXIgPSBjb21wdXRlU2Vs
QWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIG51bGwpOworICAgIGlmICghc2VsQWZ0ZXIpIHNlbEFm
dGVyID0gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlKTsKICAgICBpZiAoZG9jLmNt
KSBtYWtlQ2hhbmdlU2luZ2xlRG9jSW5FZGl0b3IoZG9jLmNtLCBjaGFuZ2UsIHNwYW5zKTsKICAg
ICBlbHNlIHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgc3BhbnMpOwogICAgIHNldFNlbGVjdGlvbk5v
VW5kbyhkb2MsIHNlbEFmdGVyLCBzZWxfZG9udFNjcm9sbCk7CkBAIC0zNDk1LDcgKzQ0OTMsOSBA
QAogCiAgICAgdmFyIGxlbmRpZmYgPSBjaGFuZ2UudGV4dC5sZW5ndGggLSAodG8ubGluZSAtIGZy
b20ubGluZSkgLSAxOwogICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhlc2UgbGluZXMgY2hhbmdlZCwg
Zm9yIHVwZGF0aW5nIHRoZSBkaXNwbGF5Ci0gICAgaWYgKGZyb20ubGluZSA9PSB0by5saW5lICYm
IGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxICYmICFpc1dob2xlTGluZVVwZGF0ZShjbS5kb2MsIGNo
YW5nZSkpCisgICAgaWYgKGNoYW5nZS5mdWxsKQorICAgICAgcmVnQ2hhbmdlKGNtKTsKKyAgICBl
bHNlIGlmIChmcm9tLmxpbmUgPT0gdG8ubGluZSAmJiBjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSAm
JiAhaXNXaG9sZUxpbmVVcGRhdGUoY20uZG9jLCBjaGFuZ2UpKQogICAgICAgcmVnTGluZUNoYW5n
ZShjbSwgZnJvbS5saW5lLCAidGV4dCIpOwogICAgIGVsc2UKICAgICAgIHJlZ0NoYW5nZShjbSwg
ZnJvbS5saW5lLCB0by5saW5lICsgMSwgbGVuZGlmZik7CkBAIC0zNTE3LDcgKzQ1MTcsNyBAQAog
ICBmdW5jdGlvbiByZXBsYWNlUmFuZ2UoZG9jLCBjb2RlLCBmcm9tLCB0bywgb3JpZ2luKSB7CiAg
ICAgaWYgKCF0bykgdG8gPSBmcm9tOwogICAgIGlmIChjbXAodG8sIGZyb20pIDwgMCkgeyB2YXIg
dG1wID0gdG87IHRvID0gZnJvbTsgZnJvbSA9IHRtcDsgfQotICAgIGlmICh0eXBlb2YgY29kZSA9
PSAic3RyaW5nIikgY29kZSA9IHNwbGl0TGluZXMoY29kZSk7CisgICAgaWYgKHR5cGVvZiBjb2Rl
ID09ICJzdHJpbmciKSBjb2RlID0gZG9jLnNwbGl0TGluZXMoY29kZSk7CiAgICAgbWFrZUNoYW5n
ZShkb2MsIHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IGNvZGUsIG9yaWdpbjogb3JpZ2lufSk7
CiAgIH0KIApAQCAtMzUzNCw3ICs0NTM0LDcgQEAKICAgICBpZiAoZG9TY3JvbGwgIT0gbnVsbCAm
JiAhcGhhbnRvbSkgewogICAgICAgdmFyIHNjcm9sbE5vZGUgPSBlbHQoImRpdiIsICJcdTIwMGIi
LCBudWxsLCAicG9zaXRpb246IGFic29sdXRlOyB0b3A6ICIgKwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGNvb3Jkcy50b3AgLSBkaXNwbGF5LnZpZXdPZmZzZXQgLSBwYWRkaW5nVG9wKGNt
LmRpc3BsYXkpKSArICJweDsgaGVpZ2h0OiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjb29yZHMuYm90dG9tIC0gY29vcmRzLnRvcCArIHNjcm9sbGVyQ3V0T2ZmKSArICJweDsgbGVm
dDogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29vcmRzLmJvdHRvbSAtIGNvb3Jk
cy50b3AgKyBzY3JvbGxHYXAoY20pICsgZGlzcGxheS5iYXJIZWlnaHQpICsgInB4OyBsZWZ0OiAi
ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5sZWZ0ICsgInB4OyB3aWR0aDog
MnB4OyIpOwogICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UuYXBwZW5kQ2hpbGQoc2Nyb2xsTm9k
ZSk7CiAgICAgICBzY3JvbGxOb2RlLnNjcm9sbEludG9WaWV3KGRvU2Nyb2xsKTsKQEAgLTM1NDcs
NyArNDU0Nyw3IEBACiAgIC8vIG1lYXN1cmVkLCB0aGUgcG9zaXRpb24gb2Ygc29tZXRoaW5nIG1h
eSAnZHJpZnQnIGR1cmluZyBkcmF3aW5nKS4KICAgZnVuY3Rpb24gc2Nyb2xsUG9zSW50b1ZpZXco
Y20sIHBvcywgZW5kLCBtYXJnaW4pIHsKICAgICBpZiAobWFyZ2luID09IG51bGwpIG1hcmdpbiA9
IDA7Ci0gICAgZm9yICg7OykgeworICAgIGZvciAodmFyIGxpbWl0ID0gMDsgbGltaXQgPCA1OyBs
aW1pdCsrKSB7CiAgICAgICB2YXIgY2hhbmdlZCA9IGZhbHNlLCBjb29yZHMgPSBjdXJzb3JDb29y
ZHMoY20sIHBvcyk7CiAgICAgICB2YXIgZW5kQ29vcmRzID0gIWVuZCB8fCBlbmQgPT0gcG9zID8g
Y29vcmRzIDogY3Vyc29yQ29vcmRzKGNtLCBlbmQpOwogICAgICAgdmFyIHNjcm9sbFBvcyA9IGNh
bGN1bGF0ZVNjcm9sbFBvcyhjbSwgTWF0aC5taW4oY29vcmRzLmxlZnQsIGVuZENvb3Jkcy5sZWZ0
KSwKQEAgLTM1NjMsOCArNDU2Myw5IEBACiAgICAgICAgIHNldFNjcm9sbExlZnQoY20sIHNjcm9s
bFBvcy5zY3JvbGxMZWZ0KTsKICAgICAgICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxMZWZ0
IC0gc3RhcnRMZWZ0KSA+IDEpIGNoYW5nZWQgPSB0cnVlOwogICAgICAgfQotICAgICAgaWYgKCFj
aGFuZ2VkKSByZXR1cm4gY29vcmRzOworICAgICAgaWYgKCFjaGFuZ2VkKSBicmVhazsKICAgICB9
CisgICAgcmV0dXJuIGNvb3JkczsKICAgfQogCiAgIC8vIFNjcm9sbCBhIGdpdmVuIHNldCBvZiBj
b29yZGluYXRlcyBpbnRvIHZpZXcgKGltbWVkaWF0ZWx5KS4KQEAgLTM1ODIsNyArNDU4Myw4IEBA
CiAgICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzbmFwTWFyZ2luID0gdGV4dEhlaWdodChj
bS5kaXNwbGF5KTsKICAgICBpZiAoeTEgPCAwKSB5MSA9IDA7CiAgICAgdmFyIHNjcmVlbnRvcCA9
IGNtLmN1ck9wICYmIGNtLmN1ck9wLnNjcm9sbFRvcCAhPSBudWxsID8gY20uY3VyT3Auc2Nyb2xs
VG9wIDogZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7Ci0gICAgdmFyIHNjcmVlbiA9IGRpc3Bs
YXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsZXJDdXRPZmYsIHJlc3VsdCA9IHt9Owor
ICAgIHZhciBzY3JlZW4gPSBkaXNwbGF5SGVpZ2h0KGNtKSwgcmVzdWx0ID0ge307CisgICAgaWYg
KHkyIC0geTEgPiBzY3JlZW4pIHkyID0geTEgKyBzY3JlZW47CiAgICAgdmFyIGRvY0JvdHRvbSA9
IGNtLmRvYy5oZWlnaHQgKyBwYWRkaW5nVmVydChkaXNwbGF5KTsKICAgICB2YXIgYXRUb3AgPSB5
MSA8IHNuYXBNYXJnaW4sIGF0Qm90dG9tID0geTIgPiBkb2NCb3R0b20gLSBzbmFwTWFyZ2luOwog
ICAgIGlmICh5MSA8IHNjcmVlbnRvcCkgewpAQCAtMzU5MywxNiArNDU5NSwxNSBAQAogICAgIH0K
IAogICAgIHZhciBzY3JlZW5sZWZ0ID0gY20uY3VyT3AgJiYgY20uY3VyT3Auc2Nyb2xsTGVmdCAh
PSBudWxsID8gY20uY3VyT3Auc2Nyb2xsTGVmdCA6IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVm
dDsKLSAgICB2YXIgc2NyZWVudyA9IGRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggLSBzY3Jv
bGxlckN1dE9mZjsKLSAgICB4MSArPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7IHgyICs9
IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aDsKLSAgICB2YXIgZ3V0dGVydyA9IGRpc3BsYXku
Z3V0dGVycy5vZmZzZXRXaWR0aDsKLSAgICB2YXIgYXRMZWZ0ID0geDEgPCBndXR0ZXJ3ICsgMTA7
Ci0gICAgaWYgKHgxIDwgc2NyZWVubGVmdCArIGd1dHRlcncgfHwgYXRMZWZ0KSB7Ci0gICAgICBp
ZiAoYXRMZWZ0KSB4MSA9IDA7Ci0gICAgICByZXN1bHQuc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAs
IHgxIC0gMTAgLSBndXR0ZXJ3KTsKLSAgICB9IGVsc2UgaWYgKHgyID4gc2NyZWVudyArIHNjcmVl
bmxlZnQgLSAzKSB7Ci0gICAgICByZXN1bHQuc2Nyb2xsTGVmdCA9IHgyICsgMTAgLSBzY3JlZW53
OwotICAgIH0KKyAgICB2YXIgc2NyZWVudyA9IGRpc3BsYXlXaWR0aChjbSkgLSAoY20ub3B0aW9u
cy5maXhlZEd1dHRlciA/IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCA6IDApOworICAgIHZh
ciB0b29XaWRlID0geDIgLSB4MSA+IHNjcmVlbnc7CisgICAgaWYgKHRvb1dpZGUpIHgyID0geDEg
KyBzY3JlZW53OworICAgIGlmICh4MSA8IDEwKQorICAgICAgcmVzdWx0LnNjcm9sbExlZnQgPSAw
OworICAgIGVsc2UgaWYgKHgxIDwgc2NyZWVubGVmdCkKKyAgICAgIHJlc3VsdC5zY3JvbGxMZWZ0
ID0gTWF0aC5tYXgoMCwgeDEgLSAodG9vV2lkZSA/IDAgOiAxMCkpOworICAgIGVsc2UgaWYgKHgy
ID4gc2NyZWVudyArIHNjcmVlbmxlZnQgLSAzKQorICAgICAgcmVzdWx0LnNjcm9sbExlZnQgPSB4
MiArICh0b29XaWRlID8gMCA6IDEwKSAtIHNjcmVlbnc7CiAgICAgcmV0dXJuIHJlc3VsdDsKICAg
fQogCkBAIC0zNjU4LDcgKzQ2NTksNyBAQAogICAgIGlmIChob3cgPT0gInNtYXJ0IikgewogICAg
ICAgLy8gRmFsbCBiYWNrIHRvICJwcmV2IiB3aGVuIHRoZSBtb2RlIGRvZXNuJ3QgaGF2ZSBhbiBp
bmRlbnRhdGlvbgogICAgICAgLy8gbWV0aG9kLgotICAgICAgaWYgKCFjbS5kb2MubW9kZS5pbmRl
bnQpIGhvdyA9ICJwcmV2IjsKKyAgICAgIGlmICghZG9jLm1vZGUuaW5kZW50KSBob3cgPSAicHJl
diI7CiAgICAgICBlbHNlIHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUoY20sIG4pOwogICAgIH0KIApA
QCAtMzY3MCw4ICs0NjcxLDggQEAKICAgICAgIGluZGVudGF0aW9uID0gMDsKICAgICAgIGhvdyA9
ICJub3QiOwogICAgIH0gZWxzZSBpZiAoaG93ID09ICJzbWFydCIpIHsKLSAgICAgIGluZGVudGF0
aW9uID0gY20uZG9jLm1vZGUuaW5kZW50KHN0YXRlLCBsaW5lLnRleHQuc2xpY2UoY3VyU3BhY2VT
dHJpbmcubGVuZ3RoKSwgbGluZS50ZXh0KTsKLSAgICAgIGlmIChpbmRlbnRhdGlvbiA9PSBQYXNz
KSB7CisgICAgICBpbmRlbnRhdGlvbiA9IGRvYy5tb2RlLmluZGVudChzdGF0ZSwgbGluZS50ZXh0
LnNsaWNlKGN1clNwYWNlU3RyaW5nLmxlbmd0aCksIGxpbmUudGV4dCk7CisgICAgICBpZiAoaW5k
ZW50YXRpb24gPT0gUGFzcyB8fCBpbmRlbnRhdGlvbiA+IDE1MCkgewogICAgICAgICBpZiAoIWFn
Z3Jlc3NpdmUpIHJldHVybjsKICAgICAgICAgaG93ID0gInByZXYiOwogICAgICAgfQpAQCAtMzY5
NCw3ICs0Njk1LDkgQEAKICAgICBpZiAocG9zIDwgaW5kZW50YXRpb24pIGluZGVudFN0cmluZyAr
PSBzcGFjZVN0cihpbmRlbnRhdGlvbiAtIHBvcyk7CiAKICAgICBpZiAoaW5kZW50U3RyaW5nICE9
IGN1clNwYWNlU3RyaW5nKSB7Ci0gICAgICByZXBsYWNlUmFuZ2UoY20uZG9jLCBpbmRlbnRTdHJp
bmcsIFBvcyhuLCAwKSwgUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCksICIraW5wdXQiKTsK
KyAgICAgIHJlcGxhY2VSYW5nZShkb2MsIGluZGVudFN0cmluZywgUG9zKG4sIDApLCBQb3Mobiwg
Y3VyU3BhY2VTdHJpbmcubGVuZ3RoKSwgIitpbnB1dCIpOworICAgICAgbGluZS5zdGF0ZUFmdGVy
ID0gbnVsbDsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAvLyBFbnN1
cmUgdGhhdCwgaWYgdGhlIGN1cnNvciB3YXMgaW4gdGhlIHdoaXRlc3BhY2UgYXQgdGhlIHN0YXJ0
CiAgICAgICAvLyBvZiB0aGUgbGluZSwgaXQgaXMgbW92ZWQgdG8gdGhlIGVuZCBvZiB0aGF0IHNw
YWNlLgpAQCAtMzcwNywxOCArNDcxMCwxNyBAQAogICAgICAgICB9CiAgICAgICB9CiAgICAgfQot
ICAgIGxpbmUuc3RhdGVBZnRlciA9IG51bGw7CiAgIH0KIAogICAvLyBVdGlsaXR5IGZvciBhcHBs
eWluZyBhIGNoYW5nZSB0byBhIGxpbmUgYnkgaGFuZGxlIG9yIG51bWJlciwKICAgLy8gcmV0dXJu
aW5nIHRoZSBudW1iZXIgYW5kIG9wdGlvbmFsbHkgcmVnaXN0ZXJpbmcgdGhlIGxpbmUgYXMKICAg
Ly8gY2hhbmdlZC4KLSAgZnVuY3Rpb24gY2hhbmdlTGluZShjbSwgaGFuZGxlLCBjaGFuZ2VUeXBl
LCBvcCkgewotICAgIHZhciBubyA9IGhhbmRsZSwgbGluZSA9IGhhbmRsZSwgZG9jID0gY20uZG9j
OworICBmdW5jdGlvbiBjaGFuZ2VMaW5lKGRvYywgaGFuZGxlLCBjaGFuZ2VUeXBlLCBvcCkgewor
ICAgIHZhciBubyA9IGhhbmRsZSwgbGluZSA9IGhhbmRsZTsKICAgICBpZiAodHlwZW9mIGhhbmRs
ZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUoZG9jLCBjbGlwTGluZShkb2MsIGhhbmRsZSkp
OwogICAgIGVsc2Ugbm8gPSBsaW5lTm8oaGFuZGxlKTsKICAgICBpZiAobm8gPT0gbnVsbCkgcmV0
dXJuIG51bGw7Ci0gICAgaWYgKG9wKGxpbmUsIG5vKSkgcmVnTGluZUNoYW5nZShjbSwgbm8sIGNo
YW5nZVR5cGUpOworICAgIGlmIChvcChsaW5lLCBubykgJiYgZG9jLmNtKSByZWdMaW5lQ2hhbmdl
KGRvYy5jbSwgbm8sIGNoYW5nZVR5cGUpOwogICAgIHJldHVybiBsaW5lOwogICB9CiAKQEAgLTM4
MjQsMjQgKzQ4MjYsNiBAQAogICAgIHJldHVybiB0YXJnZXQ7CiAgIH0KIAotICAvLyBGaW5kIHRo
ZSB3b3JkIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiAoYXMgcmV0dXJuZWQgYnkgY29vcmRzQ2hhciku
Ci0gIGZ1bmN0aW9uIGZpbmRXb3JkQXQoY20sIHBvcykgewotICAgIHZhciBkb2MgPSBjbS5kb2Ms
IGxpbmUgPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRleHQ7Ci0gICAgdmFyIHN0YXJ0ID0gcG9z
LmNoLCBlbmQgPSBwb3MuY2g7Ci0gICAgaWYgKGxpbmUpIHsKLSAgICAgIHZhciBoZWxwZXIgPSBj
bS5nZXRIZWxwZXIocG9zLCAid29yZENoYXJzIik7Ci0gICAgICBpZiAoKHBvcy54UmVsIDwgMCB8
fCBlbmQgPT0gbGluZS5sZW5ndGgpICYmIHN0YXJ0KSAtLXN0YXJ0OyBlbHNlICsrZW5kOwotICAg
ICAgdmFyIHN0YXJ0Q2hhciA9IGxpbmUuY2hhckF0KHN0YXJ0KTsKLSAgICAgIHZhciBjaGVjayA9
IGlzV29yZENoYXIoc3RhcnRDaGFyLCBoZWxwZXIpCi0gICAgICAgID8gZnVuY3Rpb24oY2gpIHsg
cmV0dXJuIGlzV29yZENoYXIoY2gsIGhlbHBlcik7IH0KLSAgICAgICAgOiAvXHMvLnRlc3Qoc3Rh
cnRDaGFyKSA/IGZ1bmN0aW9uKGNoKSB7cmV0dXJuIC9ccy8udGVzdChjaCk7fQotICAgICAgICA6
IGZ1bmN0aW9uKGNoKSB7cmV0dXJuICEvXHMvLnRlc3QoY2gpICYmICFpc1dvcmRDaGFyKGNoKTt9
OwotICAgICAgd2hpbGUgKHN0YXJ0ID4gMCAmJiBjaGVjayhsaW5lLmNoYXJBdChzdGFydCAtIDEp
KSkgLS1zdGFydDsKLSAgICAgIHdoaWxlIChlbmQgPCBsaW5lLmxlbmd0aCAmJiBjaGVjayhsaW5l
LmNoYXJBdChlbmQpKSkgKytlbmQ7Ci0gICAgfQotICAgIHJldHVybiBuZXcgUmFuZ2UoUG9zKHBv
cy5saW5lLCBzdGFydCksIFBvcyhwb3MubGluZSwgZW5kKSk7Ci0gIH0KLQogICAvLyBFRElUT1Ig
TUVUSE9EUwogCiAgIC8vIFRoZSBwdWJsaWNseSB2aXNpYmxlIEFQSS4gTm90ZSB0aGF0IG1ldGhv
ZE9wKGYpIG1lYW5zCkBAIC0zODU0LDcgKzQ4MzgsNyBAQAogCiAgIENvZGVNaXJyb3IucHJvdG90
eXBlID0gewogICAgIGNvbnN0cnVjdG9yOiBDb2RlTWlycm9yLAotICAgIGZvY3VzOiBmdW5jdGlv
bigpe3dpbmRvdy5mb2N1cygpOyBmb2N1c0lucHV0KHRoaXMpOyBmYXN0UG9sbCh0aGlzKTt9LAor
ICAgIGZvY3VzOiBmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpOyB0aGlzLmRpc3BsYXkuaW5wdXQu
Zm9jdXMoKTt9LAogCiAgICAgc2V0T3B0aW9uOiBmdW5jdGlvbihvcHRpb24sIHZhbHVlKSB7CiAg
ICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgb2xkID0gb3B0aW9uc1tvcHRpb25dOwpA
QCAtMzg2OCwxMiArNDg1MiwxMiBAQAogICAgIGdldERvYzogZnVuY3Rpb24oKSB7cmV0dXJuIHRo
aXMuZG9jO30sCiAKICAgICBhZGRLZXlNYXA6IGZ1bmN0aW9uKG1hcCwgYm90dG9tKSB7Ci0gICAg
ICB0aGlzLnN0YXRlLmtleU1hcHNbYm90dG9tID8gInB1c2giIDogInVuc2hpZnQiXShtYXApOwor
ICAgICAgdGhpcy5zdGF0ZS5rZXlNYXBzW2JvdHRvbSA/ICJwdXNoIiA6ICJ1bnNoaWZ0Il0oZ2V0
S2V5TWFwKG1hcCkpOwogICAgIH0sCiAgICAgcmVtb3ZlS2V5TWFwOiBmdW5jdGlvbihtYXApIHsK
ICAgICAgIHZhciBtYXBzID0gdGhpcy5zdGF0ZS5rZXlNYXBzOwogICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBtYXBzLmxlbmd0aDsgKytpKQotICAgICAgICBpZiAobWFwc1tpXSA9PSBtYXAgfHwg
KHR5cGVvZiBtYXBzW2ldICE9ICJzdHJpbmciICYmIG1hcHNbaV0ubmFtZSA9PSBtYXApKSB7Cisg
ICAgICAgIGlmIChtYXBzW2ldID09IG1hcCB8fCBtYXBzW2ldLm5hbWUgPT0gbWFwKSB7CiAgICAg
ICAgICAgbWFwcy5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KQEAgLTM5MTEsMTEgKzQ4OTUsMTQgQEAKICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFu
Z2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgIHZhciByYW5nZSA9IHJhbmdlc1tpXTsKICAgICAg
ICAgaWYgKCFyYW5nZS5lbXB0eSgpKSB7Ci0gICAgICAgICAgdmFyIHN0YXJ0ID0gTWF0aC5tYXgo
ZW5kLCByYW5nZS5mcm9tKCkubGluZSk7Ci0gICAgICAgICAgdmFyIHRvID0gcmFuZ2UudG8oKTsK
KyAgICAgICAgICB2YXIgZnJvbSA9IHJhbmdlLmZyb20oKSwgdG8gPSByYW5nZS50bygpOworICAg
ICAgICAgIHZhciBzdGFydCA9IE1hdGgubWF4KGVuZCwgZnJvbS5saW5lKTsKICAgICAgICAgICBl
bmQgPSBNYXRoLm1pbih0aGlzLmxhc3RMaW5lKCksIHRvLmxpbmUgLSAodG8uY2ggPyAwIDogMSkp
ICsgMTsKICAgICAgICAgICBmb3IgKHZhciBqID0gc3RhcnQ7IGogPCBlbmQ7ICsraikKICAgICAg
ICAgICAgIGluZGVudExpbmUodGhpcywgaiwgaG93KTsKKyAgICAgICAgICB2YXIgbmV3UmFuZ2Vz
ID0gdGhpcy5kb2Muc2VsLnJhbmdlczsKKyAgICAgICAgICBpZiAoZnJvbS5jaCA9PSAwICYmIHJh
bmdlcy5sZW5ndGggPT0gbmV3UmFuZ2VzLmxlbmd0aCAmJiBuZXdSYW5nZXNbaV0uZnJvbSgpLmNo
ID4gMCkKKyAgICAgICAgICAgIHJlcGxhY2VPbmVTZWxlY3Rpb24odGhpcy5kb2MsIGksIG5ldyBS
YW5nZShmcm9tLCBuZXdSYW5nZXNbaV0udG8oKSksIHNlbF9kb250U2Nyb2xsKTsKICAgICAgICAg
fSBlbHNlIGlmIChyYW5nZS5oZWFkLmxpbmUgPiBlbmQpIHsKICAgICAgICAgICBpbmRlbnRMaW5l
KHRoaXMsIHJhbmdlLmhlYWQubGluZSwgaG93LCB0cnVlKTsKICAgICAgICAgICBlbmQgPSByYW5n
ZS5oZWFkLmxpbmU7CkBAIC0zOTI3LDIwICs0OTE0LDExIEBACiAgICAgLy8gRmV0Y2ggdGhlIHBh
cnNlciB0b2tlbiBmb3IgYSBnaXZlbiBjaGFyYWN0ZXIuIFVzZWZ1bCBmb3IgaGFja3MKICAgICAv
LyB0aGF0IHdhbnQgdG8gaW5zcGVjdCB0aGUgbW9kZSBzdGF0ZSAoc2F5LCBmb3IgY29tcGxldGlv
bikuCiAgICAgZ2V0VG9rZW5BdDogZnVuY3Rpb24ocG9zLCBwcmVjaXNlKSB7Ci0gICAgICB2YXIg
ZG9jID0gdGhpcy5kb2M7Ci0gICAgICBwb3MgPSBjbGlwUG9zKGRvYywgcG9zKTsKLSAgICAgIHZh
ciBzdGF0ZSA9IGdldFN0YXRlQmVmb3JlKHRoaXMsIHBvcy5saW5lLCBwcmVjaXNlKSwgbW9kZSA9
IHRoaXMuZG9jLm1vZGU7Ci0gICAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBwb3MubGluZSk7
Ci0gICAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbShsaW5lLnRleHQsIHRoaXMub3B0
aW9ucy50YWJTaXplKTsKLSAgICAgIHdoaWxlIChzdHJlYW0ucG9zIDwgcG9zLmNoICYmICFzdHJl
YW0uZW9sKCkpIHsKLSAgICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsKLSAgICAgICAg
dmFyIHN0eWxlID0gcmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgc3RhdGUpOwotICAgICAgfQotICAg
ICAgcmV0dXJuIHtzdGFydDogc3RyZWFtLnN0YXJ0LAotICAgICAgICAgICAgICBlbmQ6IHN0cmVh
bS5wb3MsCi0gICAgICAgICAgICAgIHN0cmluZzogc3RyZWFtLmN1cnJlbnQoKSwKLSAgICAgICAg
ICAgICAgdHlwZTogc3R5bGUgfHwgbnVsbCwKLSAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlfTsK
KyAgICAgIHJldHVybiB0YWtlVG9rZW4odGhpcywgcG9zLCBwcmVjaXNlKTsKKyAgICB9LAorCisg
ICAgZ2V0TGluZVRva2VuczogZnVuY3Rpb24obGluZSwgcHJlY2lzZSkgeworICAgICAgcmV0dXJu
IHRha2VUb2tlbih0aGlzLCBQb3MobGluZSksIHByZWNpc2UsIHRydWUpOwogICAgIH0sCiAKICAg
ICBnZXRUb2tlblR5cGVBdDogZnVuY3Rpb24ocG9zKSB7CkBAIC0zOTcxLDcgKzQ5NDksNyBAQAog
CiAgICAgZ2V0SGVscGVyczogZnVuY3Rpb24ocG9zLCB0eXBlKSB7CiAgICAgICB2YXIgZm91bmQg
PSBbXTsKLSAgICAgIGlmICghaGVscGVycy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgcmV0dXJuIGhl
bHBlcnM7CisgICAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBm
b3VuZDsKICAgICAgIHZhciBoZWxwID0gaGVscGVyc1t0eXBlXSwgbW9kZSA9IHRoaXMuZ2V0TW9k
ZUF0KHBvcyk7CiAgICAgICBpZiAodHlwZW9mIG1vZGVbdHlwZV0gPT0gInN0cmluZyIpIHsKICAg
ICAgICAgaWYgKGhlbHBbbW9kZVt0eXBlXV0pIGZvdW5kLnB1c2goaGVscFttb2RlW3R5cGVdXSk7
CkBAIC00MDIxLDEwICs0OTk5LDE1IEBACiAgICAgICByZXR1cm4gbGluZUF0SGVpZ2h0KHRoaXMu
ZG9jLCBoZWlnaHQgKyB0aGlzLmRpc3BsYXkudmlld09mZnNldCk7CiAgICAgfSwKICAgICBoZWln
aHRBdExpbmU6IGZ1bmN0aW9uKGxpbmUsIG1vZGUpIHsKLSAgICAgIHZhciBlbmQgPSBmYWxzZSwg
bGFzdCA9IHRoaXMuZG9jLmZpcnN0ICsgdGhpcy5kb2Muc2l6ZSAtIDE7Ci0gICAgICBpZiAobGlu
ZSA8IHRoaXMuZG9jLmZpcnN0KSBsaW5lID0gdGhpcy5kb2MuZmlyc3Q7Ci0gICAgICBlbHNlIGlm
IChsaW5lID4gbGFzdCkgeyBsaW5lID0gbGFzdDsgZW5kID0gdHJ1ZTsgfQotICAgICAgdmFyIGxp
bmVPYmogPSBnZXRMaW5lKHRoaXMuZG9jLCBsaW5lKTsKKyAgICAgIHZhciBlbmQgPSBmYWxzZSwg
bGluZU9iajsKKyAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgeworICAgICAgICB2
YXIgbGFzdCA9IHRoaXMuZG9jLmZpcnN0ICsgdGhpcy5kb2Muc2l6ZSAtIDE7CisgICAgICAgIGlm
IChsaW5lIDwgdGhpcy5kb2MuZmlyc3QpIGxpbmUgPSB0aGlzLmRvYy5maXJzdDsKKyAgICAgICAg
ZWxzZSBpZiAobGluZSA+IGxhc3QpIHsgbGluZSA9IGxhc3Q7IGVuZCA9IHRydWU7IH0KKyAgICAg
ICAgbGluZU9iaiA9IGdldExpbmUodGhpcy5kb2MsIGxpbmUpOworICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgbGluZU9iaiA9IGxpbmU7CisgICAgICB9CiAgICAgICByZXR1cm4gaW50b0Nvb3JkU3lz
dGVtKHRoaXMsIGxpbmVPYmosIHt0b3A6IDAsIGxlZnQ6IDB9LCBtb2RlIHx8ICJwYWdlIikudG9w
ICsKICAgICAgICAgKGVuZCA/IHRoaXMuZG9jLmhlaWdodCAtIGhlaWdodEF0TGluZShsaW5lT2Jq
KSA6IDApOwogICAgIH0sCkBAIC00MDMzLDcgKzUwMTYsNyBAQAogICAgIGRlZmF1bHRDaGFyV2lk
dGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhcldpZHRoKHRoaXMuZGlzcGxheSk7IH0sCiAKICAg
ICBzZXRHdXR0ZXJNYXJrZXI6IG1ldGhvZE9wKGZ1bmN0aW9uKGxpbmUsIGd1dHRlcklELCB2YWx1
ZSkgewotICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgbGluZSwgImd1dHRlciIsIGZ1bmN0
aW9uKGxpbmUpIHsKKyAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMuZG9jLCBsaW5lLCAiZ3V0
dGVyIiwgZnVuY3Rpb24obGluZSkgewogICAgICAgICB2YXIgbWFya2VycyA9IGxpbmUuZ3V0dGVy
TWFya2VycyB8fCAobGluZS5ndXR0ZXJNYXJrZXJzID0ge30pOwogICAgICAgICBtYXJrZXJzW2d1
dHRlcklEXSA9IHZhbHVlOwogICAgICAgICBpZiAoIXZhbHVlICYmIGlzRW1wdHkobWFya2Vycykp
IGxpbmUuZ3V0dGVyTWFya2VycyA9IG51bGw7CkBAIC00MDUzLDM4ICs1MDM2LDYgQEAKICAgICAg
IH0pOwogICAgIH0pLAogCi0gICAgYWRkTGluZUNsYXNzOiBtZXRob2RPcChmdW5jdGlvbihoYW5k
bGUsIHdoZXJlLCBjbHMpIHsKLSAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwg
ImNsYXNzIiwgZnVuY3Rpb24obGluZSkgewotICAgICAgICB2YXIgcHJvcCA9IHdoZXJlID09ICJ0
ZXh0IiA/ICJ0ZXh0Q2xhc3MiIDogd2hlcmUgPT0gImJhY2tncm91bmQiID8gImJnQ2xhc3MiIDog
IndyYXBDbGFzcyI7Ci0gICAgICAgIGlmICghbGluZVtwcm9wXSkgbGluZVtwcm9wXSA9IGNsczsK
LSAgICAgICAgZWxzZSBpZiAobmV3IFJlZ0V4cCgiKD86XnxcXHMpIiArIGNscyArICIoPzokfFxc
cykiKS50ZXN0KGxpbmVbcHJvcF0pKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGVsc2UgbGluZVtw
cm9wXSArPSAiICIgKyBjbHM7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfSk7Ci0gICAg
fSksCi0KLSAgICByZW1vdmVMaW5lQ2xhc3M6IG1ldGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwgd2hl
cmUsIGNscykgewotICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCAiY2xhc3Mi
LCBmdW5jdGlvbihsaW5lKSB7Ci0gICAgICAgIHZhciBwcm9wID0gd2hlcmUgPT0gInRleHQiID8g
InRleHRDbGFzcyIgOiB3aGVyZSA9PSAiYmFja2dyb3VuZCIgPyAiYmdDbGFzcyIgOiAid3JhcENs
YXNzIjsKLSAgICAgICAgdmFyIGN1ciA9IGxpbmVbcHJvcF07Ci0gICAgICAgIGlmICghY3VyKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGVsc2UgaWYgKGNscyA9PSBudWxsKSBsaW5lW3Byb3BdID0g
bnVsbDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgdmFyIGZvdW5kID0gY3VyLm1hdGNoKG5l
dyBSZWdFeHAoIig/Ol58XFxzKykiICsgY2xzICsgIig/OiR8XFxzKykiKSk7Ci0gICAgICAgICAg
aWYgKCFmb3VuZCkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIHZhciBlbmQgPSBmb3VuZC5pbmRl
eCArIGZvdW5kWzBdLmxlbmd0aDsKLSAgICAgICAgICBsaW5lW3Byb3BdID0gY3VyLnNsaWNlKDAs
IGZvdW5kLmluZGV4KSArICghZm91bmQuaW5kZXggfHwgZW5kID09IGN1ci5sZW5ndGggPyAiIiA6
ICIgIikgKyBjdXIuc2xpY2UoZW5kKSB8fCBudWxsOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgfSk7Ci0gICAgfSksCi0KLSAgICBhZGRMaW5lV2lkZ2V0OiBtZXRob2RP
cChmdW5jdGlvbihoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHsKLSAgICAgIHJldHVybiBhZGRMaW5l
V2lkZ2V0KHRoaXMsIGhhbmRsZSwgbm9kZSwgb3B0aW9ucyk7Ci0gICAgfSksCi0KLSAgICByZW1v
dmVMaW5lV2lkZ2V0OiBmdW5jdGlvbih3aWRnZXQpIHsgd2lkZ2V0LmNsZWFyKCk7IH0sCi0KICAg
ICBsaW5lSW5mbzogZnVuY3Rpb24obGluZSkgewogICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJu
dW1iZXIiKSB7CiAgICAgICAgIGlmICghaXNMaW5lKHRoaXMuZG9jLCBsaW5lKSkgcmV0dXJuIG51
bGw7CkBAIC00MTA3LDYgKzUwNTgsOCBAQAogICAgICAgcG9zID0gY3Vyc29yQ29vcmRzKHRoaXMs
IGNsaXBQb3ModGhpcy5kb2MsIHBvcykpOwogICAgICAgdmFyIHRvcCA9IHBvcy5ib3R0b20sIGxl
ZnQgPSBwb3MubGVmdDsKICAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwor
ICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoImNtLWlnbm9yZS1ldmVudHMiLCAidHJ1ZSIpOworICAg
ICAgdGhpcy5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUobm9kZSk7CiAgICAgICBkaXNwbGF5
LnNpemVyLmFwcGVuZENoaWxkKG5vZGUpOwogICAgICAgaWYgKHZlcnQgPT0gIm92ZXIiKSB7CiAg
ICAgICAgIHRvcCA9IHBvcy50b3A7CkBAIC00MTM3LDEzICs1MDkwLDE1IEBACiAKICAgICB0cmln
Z2VyT25LZXlEb3duOiBtZXRob2RPcChvbktleURvd24pLAogICAgIHRyaWdnZXJPbktleVByZXNz
OiBtZXRob2RPcChvbktleVByZXNzKSwKLSAgICB0cmlnZ2VyT25LZXlVcDogbWV0aG9kT3Aob25L
ZXlVcCksCisgICAgdHJpZ2dlck9uS2V5VXA6IG9uS2V5VXAsCiAKICAgICBleGVjQ29tbWFuZDog
ZnVuY3Rpb24oY21kKSB7CiAgICAgICBpZiAoY29tbWFuZHMuaGFzT3duUHJvcGVydHkoY21kKSkK
LSAgICAgICAgcmV0dXJuIGNvbW1hbmRzW2NtZF0odGhpcyk7CisgICAgICAgIHJldHVybiBjb21t
YW5kc1tjbWRdLmNhbGwobnVsbCwgdGhpcyk7CiAgICAgfSwKIAorICAgIHRyaWdnZXJFbGVjdHJp
YzogbWV0aG9kT3AoZnVuY3Rpb24odGV4dCkgeyB0cmlnZ2VyRWxlY3RyaWModGhpcywgdGV4dCk7
IH0pLAorCiAgICAgZmluZFBvc0g6IGZ1bmN0aW9uKGZyb20sIGFtb3VudCwgdW5pdCwgdmlzdWFs
bHkpIHsKICAgICAgIHZhciBkaXIgPSAxOwogICAgICAgaWYgKGFtb3VudCA8IDApIHsgZGlyID0g
LTE7IGFtb3VudCA9IC1hbW91bnQ7IH0KQEAgLTQyMDYsNiArNTE2MSwyNCBAQAogICAgICAgICBk
b2Muc2VsLnJhbmdlc1tpXS5nb2FsQ29sdW1uID0gZ29hbHNbaV07CiAgICAgfSksCiAKKyAgICAv
LyBGaW5kIHRoZSB3b3JkIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiAoYXMgcmV0dXJuZWQgYnkgY29v
cmRzQ2hhcikuCisgICAgZmluZFdvcmRBdDogZnVuY3Rpb24ocG9zKSB7CisgICAgICB2YXIgZG9j
ID0gdGhpcy5kb2MsIGxpbmUgPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRleHQ7CisgICAgICB2
YXIgc3RhcnQgPSBwb3MuY2gsIGVuZCA9IHBvcy5jaDsKKyAgICAgIGlmIChsaW5lKSB7CisgICAg
ICAgIHZhciBoZWxwZXIgPSB0aGlzLmdldEhlbHBlcihwb3MsICJ3b3JkQ2hhcnMiKTsKKyAgICAg
ICAgaWYgKChwb3MueFJlbCA8IDAgfHwgZW5kID09IGxpbmUubGVuZ3RoKSAmJiBzdGFydCkgLS1z
dGFydDsgZWxzZSArK2VuZDsKKyAgICAgICAgdmFyIHN0YXJ0Q2hhciA9IGxpbmUuY2hhckF0KHN0
YXJ0KTsKKyAgICAgICAgdmFyIGNoZWNrID0gaXNXb3JkQ2hhcihzdGFydENoYXIsIGhlbHBlcikK
KyAgICAgICAgICA/IGZ1bmN0aW9uKGNoKSB7IHJldHVybiBpc1dvcmRDaGFyKGNoLCBoZWxwZXIp
OyB9CisgICAgICAgICAgOiAvXHMvLnRlc3Qoc3RhcnRDaGFyKSA/IGZ1bmN0aW9uKGNoKSB7cmV0
dXJuIC9ccy8udGVzdChjaCk7fQorICAgICAgICAgIDogZnVuY3Rpb24oY2gpIHtyZXR1cm4gIS9c
cy8udGVzdChjaCkgJiYgIWlzV29yZENoYXIoY2gpO307CisgICAgICAgIHdoaWxlIChzdGFydCA+
IDAgJiYgY2hlY2sobGluZS5jaGFyQXQoc3RhcnQgLSAxKSkpIC0tc3RhcnQ7CisgICAgICAgIHdo
aWxlIChlbmQgPCBsaW5lLmxlbmd0aCAmJiBjaGVjayhsaW5lLmNoYXJBdChlbmQpKSkgKytlbmQ7
CisgICAgICB9CisgICAgICByZXR1cm4gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgc3RhcnQpLCBQ
b3MocG9zLmxpbmUsIGVuZCkpOworICAgIH0sCisKICAgICB0b2dnbGVPdmVyd3JpdGU6IGZ1bmN0
aW9uKHZhbHVlKSB7CiAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA9PSB0aGlzLnN0
YXRlLm92ZXJ3cml0ZSkgcmV0dXJuOwogICAgICAgaWYgKHRoaXMuc3RhdGUub3ZlcndyaXRlID0g
IXRoaXMuc3RhdGUub3ZlcndyaXRlKQpAQCAtNDIxNSw3ICs1MTg4LDcgQEAKIAogICAgICAgc2ln
bmFsKHRoaXMsICJvdmVyd3JpdGVUb2dnbGUiLCB0aGlzLCB0aGlzLnN0YXRlLm92ZXJ3cml0ZSk7
CiAgICAgfSwKLSAgICBoYXNGb2N1czogZnVuY3Rpb24oKSB7IHJldHVybiBhY3RpdmVFbHQoKSA9
PSB0aGlzLmRpc3BsYXkuaW5wdXQ7IH0sCisgICAgaGFzRm9jdXM6IGZ1bmN0aW9uKCkgeyByZXR1
cm4gdGhpcy5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCkgPT0gYWN0aXZlRWx0KCk7IH0sCiAKICAg
ICBzY3JvbGxUbzogbWV0aG9kT3AoZnVuY3Rpb24oeCwgeSkgewogICAgICAgaWYgKHggIT0gbnVs
bCB8fCB5ICE9IG51bGwpIHJlc29sdmVTY3JvbGxUb1Bvcyh0aGlzKTsKQEAgLTQyMjMsMTAgKzUx
OTYsMTEgQEAKICAgICAgIGlmICh5ICE9IG51bGwpIHRoaXMuY3VyT3Auc2Nyb2xsVG9wID0geTsK
ICAgICB9KSwKICAgICBnZXRTY3JvbGxJbmZvOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBzY3Jv
bGxlciA9IHRoaXMuZGlzcGxheS5zY3JvbGxlciwgY28gPSBzY3JvbGxlckN1dE9mZjsKKyAgICAg
IHZhciBzY3JvbGxlciA9IHRoaXMuZGlzcGxheS5zY3JvbGxlcjsKICAgICAgIHJldHVybiB7bGVm
dDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgdG9wOiBzY3JvbGxlci5zY3JvbGxUb3AsCi0gICAgICAg
ICAgICAgIGhlaWdodDogc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gY28sIHdpZHRoOiBzY3JvbGxl
ci5zY3JvbGxXaWR0aCAtIGNvLAotICAgICAgICAgICAgICBjbGllbnRIZWlnaHQ6IHNjcm9sbGVy
LmNsaWVudEhlaWdodCAtIGNvLCBjbGllbnRXaWR0aDogc2Nyb2xsZXIuY2xpZW50V2lkdGggLSBj
b307CisgICAgICAgICAgICAgIGhlaWdodDogc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xs
R2FwKHRoaXMpIC0gdGhpcy5kaXNwbGF5LmJhckhlaWdodCwKKyAgICAgICAgICAgICAgd2lkdGg6
IHNjcm9sbGVyLnNjcm9sbFdpZHRoIC0gc2Nyb2xsR2FwKHRoaXMpIC0gdGhpcy5kaXNwbGF5LmJh
cldpZHRoLAorICAgICAgICAgICAgICBjbGllbnRIZWlnaHQ6IGRpc3BsYXlIZWlnaHQodGhpcyks
IGNsaWVudFdpZHRoOiBkaXNwbGF5V2lkdGgodGhpcyl9OwogICAgIH0sCiAKICAgICBzY3JvbGxJ
bnRvVmlldzogbWV0aG9kT3AoZnVuY3Rpb24ocmFuZ2UsIG1hcmdpbikgewpAQCAtNDI1NCwxNCAr
NTIyOCwyMSBAQAogICAgIH0pLAogCiAgICAgc2V0U2l6ZTogbWV0aG9kT3AoZnVuY3Rpb24od2lk
dGgsIGhlaWdodCkgeworICAgICAgdmFyIGNtID0gdGhpczsKICAgICAgIGZ1bmN0aW9uIGludGVy
cHJldCh2YWwpIHsKICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gIm51bWJlciIgfHwgL15c
ZCskLy50ZXN0KFN0cmluZyh2YWwpKSA/IHZhbCArICJweCIgOiB2YWw7CiAgICAgICB9Ci0gICAg
ICBpZiAod2lkdGggIT0gbnVsbCkgdGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUud2lkdGggPSBp
bnRlcnByZXQod2lkdGgpOwotICAgICAgaWYgKGhlaWdodCAhPSBudWxsKSB0aGlzLmRpc3BsYXku
d3JhcHBlci5zdHlsZS5oZWlnaHQgPSBpbnRlcnByZXQoaGVpZ2h0KTsKLSAgICAgIGlmICh0aGlz
Lm9wdGlvbnMubGluZVdyYXBwaW5nKSBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlKHRoaXMpOwot
ICAgICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7Ci0gICAgICBzaWduYWwodGhpcywg
InJlZnJlc2giLCB0aGlzKTsKKyAgICAgIGlmICh3aWR0aCAhPSBudWxsKSBjbS5kaXNwbGF5Lndy
YXBwZXIuc3R5bGUud2lkdGggPSBpbnRlcnByZXQod2lkdGgpOworICAgICAgaWYgKGhlaWdodCAh
PSBudWxsKSBjbS5kaXNwbGF5LndyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gaW50ZXJwcmV0KGhlaWdo
dCk7CisgICAgICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIGNsZWFyTGluZU1lYXN1cmVt
ZW50Q2FjaGUodGhpcyk7CisgICAgICB2YXIgbGluZU5vID0gY20uZGlzcGxheS52aWV3RnJvbTsK
KyAgICAgIGNtLmRvYy5pdGVyKGxpbmVObywgY20uZGlzcGxheS52aWV3VG8sIGZ1bmN0aW9uKGxp
bmUpIHsKKyAgICAgICAgaWYgKGxpbmUud2lkZ2V0cykgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5l
LndpZGdldHMubGVuZ3RoOyBpKyspCisgICAgICAgICAgaWYgKGxpbmUud2lkZ2V0c1tpXS5ub0hT
Y3JvbGwpIHsgcmVnTGluZUNoYW5nZShjbSwgbGluZU5vLCAid2lkZ2V0Iik7IGJyZWFrOyB9Cisg
ICAgICAgICsrbGluZU5vOworICAgICAgfSk7CisgICAgICBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9
IHRydWU7CisgICAgICBzaWduYWwoY20sICJyZWZyZXNoIiwgdGhpcyk7CiAgICAgfSksCiAKICAg
ICBvcGVyYXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBydW5Jbk9wKHRoaXMsIGYpO30sCkBAIC00
MjgzLDEzICs1MjY0LDE0IEBACiAgICAgICBvbGQuY20gPSBudWxsOwogICAgICAgYXR0YWNoRG9j
KHRoaXMsIGRvYyk7CiAgICAgICBjbGVhckNhY2hlcyh0aGlzKTsKLSAgICAgIHJlc2V0SW5wdXQo
dGhpcyk7CisgICAgICB0aGlzLmRpc3BsYXkuaW5wdXQucmVzZXQoKTsKICAgICAgIHRoaXMuc2Ny
b2xsVG8oZG9jLnNjcm9sbExlZnQsIGRvYy5zY3JvbGxUb3ApOworICAgICAgdGhpcy5jdXJPcC5m
b3JjZVNjcm9sbCA9IHRydWU7CiAgICAgICBzaWduYWxMYXRlcih0aGlzLCAic3dhcERvYyIsIHRo
aXMsIG9sZCk7CiAgICAgICByZXR1cm4gb2xkOwogICAgIH0pLAogCi0gICAgZ2V0SW5wdXRGaWVs
ZDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0O30sCisgICAgZ2V0SW5wdXRG
aWVsZDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCk7fSwK
ICAgICBnZXRXcmFwcGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5Lndy
YXBwZXI7fSwKICAgICBnZXRTY3JvbGxlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
ZGlzcGxheS5zY3JvbGxlcjt9LAogICAgIGdldEd1dHRlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMuZGlzcGxheS5ndXR0ZXJzO30KQEAgLTQzMzAsMTIgKzUzMTIsMzEgQEAKICAgICBj
bGVhckNhY2hlcyhjbSk7CiAgICAgcmVnQ2hhbmdlKGNtKTsKICAgfSwgdHJ1ZSk7Ci0gIG9wdGlv
bigic3BlY2lhbENoYXJzIiwgL1tcdFx1MDAwMC1cdTAwMTlcdTAwYWRcdTIwMGJcdTIwMjhcdTIw
MjlcdWZlZmZdL2csIGZ1bmN0aW9uKGNtLCB2YWwpIHsKLSAgICBjbS5vcHRpb25zLnNwZWNpYWxD
aGFycyA9IG5ldyBSZWdFeHAodmFsLnNvdXJjZSArICh2YWwudGVzdCgiXHQiKSA/ICIiIDogInxc
dCIpLCAiZyIpOwotICAgIGNtLnJlZnJlc2goKTsKLSAgfSwgdHJ1ZSk7CisgIG9wdGlvbigibGlu
ZVNlcGFyYXRvciIsIG51bGwsIGZ1bmN0aW9uKGNtLCB2YWwpIHsKKyAgICBjbS5kb2MubGluZVNl
cCA9IHZhbDsKKyAgICBpZiAoIXZhbCkgcmV0dXJuOworICAgIHZhciBuZXdCcmVha3MgPSBbXSwg
bGluZU5vID0gY20uZG9jLmZpcnN0OworICAgIGNtLmRvYy5pdGVyKGZ1bmN0aW9uKGxpbmUpIHsK
KyAgICAgIGZvciAodmFyIHBvcyA9IDA7OykgeworICAgICAgICB2YXIgZm91bmQgPSBsaW5lLnRl
eHQuaW5kZXhPZih2YWwsIHBvcyk7CisgICAgICAgIGlmIChmb3VuZCA9PSAtMSkgYnJlYWs7Cisg
ICAgICAgIHBvcyA9IGZvdW5kICsgdmFsLmxlbmd0aDsKKyAgICAgICAgbmV3QnJlYWtzLnB1c2go
UG9zKGxpbmVObywgZm91bmQpKTsKKyAgICAgIH0KKyAgICAgIGxpbmVObysrOworICAgIH0pOwor
ICAgIGZvciAodmFyIGkgPSBuZXdCcmVha3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pCisgICAg
ICByZXBsYWNlUmFuZ2UoY20uZG9jLCB2YWwsIG5ld0JyZWFrc1tpXSwgUG9zKG5ld0JyZWFrc1tp
XS5saW5lLCBuZXdCcmVha3NbaV0uY2ggKyB2YWwubGVuZ3RoKSkKKyAgfSk7CisgIG9wdGlvbigi
c3BlY2lhbENoYXJzIiwgL1tcdFx1MDAwMC1cdTAwMTlcdTAwYWRcdTIwMGItXHUyMDBmXHUyMDI4
XHUyMDI5XHVmZWZmXS9nLCBmdW5jdGlvbihjbSwgdmFsLCBvbGQpIHsKKyAgICBjbS5zdGF0ZS5z
cGVjaWFsQ2hhcnMgPSBuZXcgUmVnRXhwKHZhbC5zb3VyY2UgKyAodmFsLnRlc3QoIlx0IikgPyAi
IiA6ICJ8XHQiKSwgImciKTsKKyAgICBpZiAob2xkICE9IENvZGVNaXJyb3IuSW5pdCkgY20ucmVm
cmVzaCgpOworICB9KTsKICAgb3B0aW9uKCJzcGVjaWFsQ2hhclBsYWNlaG9sZGVyIiwgZGVmYXVs
dFNwZWNpYWxDaGFyUGxhY2Vob2xkZXIsIGZ1bmN0aW9uKGNtKSB7Y20ucmVmcmVzaCgpO30sIHRy
dWUpOwogICBvcHRpb24oImVsZWN0cmljQ2hhcnMiLCB0cnVlKTsKKyAgb3B0aW9uKCJpbnB1dFN0
eWxlIiwgbW9iaWxlID8gImNvbnRlbnRlZGl0YWJsZSIgOiAidGV4dGFyZWEiLCBmdW5jdGlvbigp
IHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoImlucHV0U3R5bGUgY2FuIG5vdCAoeWV0KSBiZSBjaGFu
Z2VkIGluIGEgcnVubmluZyBlZGl0b3IiKTsgLy8gRklYTUUKKyAgfSwgdHJ1ZSk7CiAgIG9wdGlv
bigicnRsTW92ZVZpc3VhbGx5IiwgIXdpbmRvd3MpOwogICBvcHRpb24oIndob2xlTGluZVVwZGF0
ZUJlZm9yZSIsIHRydWUpOwogCkBAIC00MzQzLDcgKzUzNDQsMTIgQEAKICAgICB0aGVtZUNoYW5n
ZWQoY20pOwogICAgIGd1dHRlcnNDaGFuZ2VkKGNtKTsKICAgfSwgdHJ1ZSk7Ci0gIG9wdGlvbigi
a2V5TWFwIiwgImRlZmF1bHQiLCBrZXlNYXBDaGFuZ2VkKTsKKyAgb3B0aW9uKCJrZXlNYXAiLCAi
ZGVmYXVsdCIsIGZ1bmN0aW9uKGNtLCB2YWwsIG9sZCkgeworICAgIHZhciBuZXh0ID0gZ2V0S2V5
TWFwKHZhbCk7CisgICAgdmFyIHByZXYgPSBvbGQgIT0gQ29kZU1pcnJvci5Jbml0ICYmIGdldEtl
eU1hcChvbGQpOworICAgIGlmIChwcmV2ICYmIHByZXYuZGV0YWNoKSBwcmV2LmRldGFjaChjbSwg
bmV4dCk7CisgICAgaWYgKG5leHQuYXR0YWNoKSBuZXh0LmF0dGFjaChjbSwgcHJldiB8fCBudWxs
KTsKKyAgfSk7CiAgIG9wdGlvbigiZXh0cmFLZXlzIiwgbnVsbCk7CiAKICAgb3B0aW9uKCJsaW5l
V3JhcHBpbmciLCBmYWxzZSwgd3JhcHBpbmdDaGFuZ2VkLCB0cnVlKTsKQEAgLTQzNTUsNyArNTM2
MSwxMyBAQAogICAgIGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0ID0gdmFsID8gY29tcGVu
c2F0ZUZvckhTY3JvbGwoY20uZGlzcGxheSkgKyAicHgiIDogIjAiOwogICAgIGNtLnJlZnJlc2go
KTsKICAgfSwgdHJ1ZSk7Ci0gIG9wdGlvbigiY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIiLCBm
YWxzZSwgdXBkYXRlU2Nyb2xsYmFycywgdHJ1ZSk7CisgIG9wdGlvbigiY292ZXJHdXR0ZXJOZXh0
VG9TY3JvbGxiYXIiLCBmYWxzZSwgZnVuY3Rpb24oY20pIHt1cGRhdGVTY3JvbGxiYXJzKGNtKTt9
LCB0cnVlKTsKKyAgb3B0aW9uKCJzY3JvbGxiYXJTdHlsZSIsICJuYXRpdmUiLCBmdW5jdGlvbihj
bSkgeworICAgIGluaXRTY3JvbGxiYXJzKGNtKTsKKyAgICB1cGRhdGVTY3JvbGxiYXJzKGNtKTsK
KyAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKGNtLmRvYy5zY3JvbGxUb3Ap
OworICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxMZWZ0KGNtLmRvYy5zY3JvbGxM
ZWZ0KTsKKyAgfSwgdHJ1ZSk7CiAgIG9wdGlvbigibGluZU51bWJlcnMiLCBmYWxzZSwgZnVuY3Rp
b24oY20pIHsKICAgICBzZXRHdXR0ZXJzRm9yTGluZU51bWJlcnMoY20ub3B0aW9ucyk7CiAgICAg
Z3V0dGVyc0NoYW5nZWQoY20pOwpAQCAtNDM2NSw2ICs1Mzc3LDcgQEAKICAgb3B0aW9uKCJzaG93
Q3Vyc29yV2hlblNlbGVjdGluZyIsIGZhbHNlLCB1cGRhdGVTZWxlY3Rpb24sIHRydWUpOwogCiAg
IG9wdGlvbigicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51IiwgdHJ1ZSk7CisgIG9wdGlvbigi
bGluZVdpc2VDb3B5Q3V0IiwgdHJ1ZSk7CiAKICAgb3B0aW9uKCJyZWFkT25seSIsIGZhbHNlLCBm
dW5jdGlvbihjbSwgdmFsKSB7CiAgICAgaWYgKHZhbCA9PSAibm9jdXJzb3IiKSB7CkBAIC00Mzcz
LDE1ICs1Mzg2LDE2IEBACiAgICAgICBjbS5kaXNwbGF5LmRpc2FibGVkID0gdHJ1ZTsKICAgICB9
IGVsc2UgewogICAgICAgY20uZGlzcGxheS5kaXNhYmxlZCA9IGZhbHNlOwotICAgICAgaWYgKCF2
YWwpIHJlc2V0SW5wdXQoY20pOworICAgICAgaWYgKCF2YWwpIGNtLmRpc3BsYXkuaW5wdXQucmVz
ZXQoKTsKICAgICB9CiAgIH0pOwotICBvcHRpb24oImRpc2FibGVJbnB1dCIsIGZhbHNlLCBmdW5j
dGlvbihjbSwgdmFsKSB7aWYgKCF2YWwpIHJlc2V0SW5wdXQoY20pO30sIHRydWUpOwotICBvcHRp
b24oImRyYWdEcm9wIiwgdHJ1ZSk7CisgIG9wdGlvbigiZGlzYWJsZUlucHV0IiwgZmFsc2UsIGZ1
bmN0aW9uKGNtLCB2YWwpIHtpZiAoIXZhbCkgY20uZGlzcGxheS5pbnB1dC5yZXNldCgpO30sIHRy
dWUpOworICBvcHRpb24oImRyYWdEcm9wIiwgdHJ1ZSwgZHJhZ0Ryb3BDaGFuZ2VkKTsKIAogICBv
cHRpb24oImN1cnNvckJsaW5rUmF0ZSIsIDUzMCk7CiAgIG9wdGlvbigiY3Vyc29yU2Nyb2xsTWFy
Z2luIiwgMCk7Ci0gIG9wdGlvbigiY3Vyc29ySGVpZ2h0IiwgMSk7CisgIG9wdGlvbigiY3Vyc29y
SGVpZ2h0IiwgMSwgdXBkYXRlU2VsZWN0aW9uLCB0cnVlKTsKKyAgb3B0aW9uKCJzaW5nbGVDdXJz
b3JIZWlnaHRQZXJMaW5lIiwgdHJ1ZSwgdXBkYXRlU2VsZWN0aW9uLCB0cnVlKTsKICAgb3B0aW9u
KCJ3b3JrVGltZSIsIDEwMCk7CiAgIG9wdGlvbigid29ya0RlbGF5IiwgMTAwKTsKICAgb3B0aW9u
KCJmbGF0dGVuU3BhbnMiLCB0cnVlLCByZXNldE1vZGVTdGF0ZSwgdHJ1ZSk7CkBAIC00MzkyLDEx
ICs1NDA2LDExIEBACiAgIG9wdGlvbigidmlld3BvcnRNYXJnaW4iLCAxMCwgZnVuY3Rpb24oY20p
e2NtLnJlZnJlc2goKTt9LCB0cnVlKTsKICAgb3B0aW9uKCJtYXhIaWdobGlnaHRMZW5ndGgiLCAx
MDAwMCwgcmVzZXRNb2RlU3RhdGUsIHRydWUpOwogICBvcHRpb24oIm1vdmVJbnB1dFdpdGhDdXJz
b3IiLCB0cnVlLCBmdW5jdGlvbihjbSwgdmFsKSB7Ci0gICAgaWYgKCF2YWwpIGNtLmRpc3BsYXku
aW5wdXREaXYuc3R5bGUudG9wID0gY20uZGlzcGxheS5pbnB1dERpdi5zdHlsZS5sZWZ0ID0gMDsK
KyAgICBpZiAoIXZhbCkgY20uZGlzcGxheS5pbnB1dC5yZXNldFBvc2l0aW9uKCk7CiAgIH0pOwog
CiAgIG9wdGlvbigidGFiaW5kZXgiLCBudWxsLCBmdW5jdGlvbihjbSwgdmFsKSB7Ci0gICAgY20u
ZGlzcGxheS5pbnB1dC50YWJJbmRleCA9IHZhbCB8fCAiIjsKKyAgICBjbS5kaXNwbGF5LmlucHV0
LmdldEZpZWxkKCkudGFiSW5kZXggPSB2YWwgfHwgIiI7CiAgIH0pOwogICBvcHRpb24oImF1dG9m
b2N1cyIsIG51bGwpOwogCkBAIC00NDEwLDEwICs1NDI0LDggQEAKICAgLy8gbG9hZCBhIG1vZGUu
IChQcmVmZXJyZWQgbWVjaGFuaXNtIGlzIHRoZSByZXF1aXJlL2RlZmluZSBjYWxscy4pCiAgIENv
ZGVNaXJyb3IuZGVmaW5lTW9kZSA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUpIHsKICAgICBpZiAoIUNv
ZGVNaXJyb3IuZGVmYXVsdHMubW9kZSAmJiBuYW1lICE9ICJudWxsIikgQ29kZU1pcnJvci5kZWZh
dWx0cy5tb2RlID0gbmFtZTsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHsKLSAgICAg
IG1vZGUuZGVwZW5kZW5jaWVzID0gW107Ci0gICAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3Vt
ZW50cy5sZW5ndGg7ICsraSkgbW9kZS5kZXBlbmRlbmNpZXMucHVzaChhcmd1bWVudHNbaV0pOwot
ICAgIH0KKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpCisgICAgICBtb2RlLmRlcGVuZGVu
Y2llcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7CiAgICAgbW9k
ZXNbbmFtZV0gPSBtb2RlOwogICB9OwogCkBAIC00NTY0LDYgKzU1NzYsMjAgQEAKICAgICAgICAg
cmV0dXJuIHtmcm9tOiBQb3MocmFuZ2UuZnJvbSgpLmxpbmUsIDApLCB0bzogcmFuZ2UuZnJvbSgp
fTsKICAgICAgIH0pOwogICAgIH0sCisgICAgZGVsV3JhcHBlZExpbmVMZWZ0OiBmdW5jdGlvbihj
bSkgeworICAgICAgZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgZnVuY3Rpb24ocmFuZ2UpIHsKKyAg
ICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgImRpdiIpLnRvcCArIDU7
CisgICAgICAgIHZhciBsZWZ0UG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9
LCAiZGl2Iik7CisgICAgICAgIHJldHVybiB7ZnJvbTogbGVmdFBvcywgdG86IHJhbmdlLmZyb20o
KX07CisgICAgICB9KTsKKyAgICB9LAorICAgIGRlbFdyYXBwZWRMaW5lUmlnaHQ6IGZ1bmN0aW9u
KGNtKSB7CisgICAgICBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5jdGlvbihyYW5nZSkgewor
ICAgICAgICB2YXIgdG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5oZWFkLCAiZGl2IikudG9wICsg
NTsKKyAgICAgICAgdmFyIHJpZ2h0UG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogY20uZGlzcGxh
eS5saW5lRGl2Lm9mZnNldFdpZHRoICsgMTAwLCB0b3A6IHRvcH0sICJkaXYiKTsKKyAgICAgICAg
cmV0dXJuIHtmcm9tOiByYW5nZS5mcm9tKCksIHRvOiByaWdodFBvcyB9OworICAgICAgfSk7Cisg
ICAgfSwKICAgICB1bmRvOiBmdW5jdGlvbihjbSkge2NtLnVuZG8oKTt9LAogICAgIHJlZG86IGZ1
bmN0aW9uKGNtKSB7Y20ucmVkbygpO30sCiAgICAgdW5kb1NlbGVjdGlvbjogZnVuY3Rpb24oY20p
IHtjbS51bmRvU2VsZWN0aW9uKCk7fSwKQEAgLTQ1NzEsMjMgKzU1OTcsMTcgQEAKICAgICBnb0Rv
Y1N0YXJ0OiBmdW5jdGlvbihjbSkge2NtLmV4dGVuZFNlbGVjdGlvbihQb3MoY20uZmlyc3RMaW5l
KCksIDApKTt9LAogICAgIGdvRG9jRW5kOiBmdW5jdGlvbihjbSkge2NtLmV4dGVuZFNlbGVjdGlv
bihQb3MoY20ubGFzdExpbmUoKSkpO30sCiAgICAgZ29MaW5lU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7
Ci0gICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2UpIHsgcmV0dXJuIGxp
bmVTdGFydChjbSwgcmFuZ2UuaGVhZC5saW5lKTsgfSwgc2VsX21vdmUpOworICAgICAgY20uZXh0
ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7IHJldHVybiBsaW5lU3RhcnQoY20sIHJh
bmdlLmhlYWQubGluZSk7IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge29yaWdpbjog
Iittb3ZlIiwgYmlhczogMX0pOwogICAgIH0sCiAgICAgZ29MaW5lU3RhcnRTbWFydDogZnVuY3Rp
b24oY20pIHsKICAgICAgIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbihyYW5nZSkgewot
ICAgICAgICB2YXIgc3RhcnQgPSBsaW5lU3RhcnQoY20sIHJhbmdlLmhlYWQubGluZSk7Ci0gICAg
ICAgIHZhciBsaW5lID0gY20uZ2V0TGluZUhhbmRsZShzdGFydC5saW5lKTsKLSAgICAgICAgdmFy
IG9yZGVyID0gZ2V0T3JkZXIobGluZSk7Ci0gICAgICAgIGlmICghb3JkZXIgfHwgb3JkZXJbMF0u
bGV2ZWwgPT0gMCkgewotICAgICAgICAgIHZhciBmaXJzdE5vbldTID0gTWF0aC5tYXgoMCwgbGlu
ZS50ZXh0LnNlYXJjaCgvXFMvKSk7Ci0gICAgICAgICAgdmFyIGluV1MgPSByYW5nZS5oZWFkLmxp
bmUgPT0gc3RhcnQubGluZSAmJiByYW5nZS5oZWFkLmNoIDw9IGZpcnN0Tm9uV1MgJiYgcmFuZ2Uu
aGVhZC5jaDsKLSAgICAgICAgICByZXR1cm4gUG9zKHN0YXJ0LmxpbmUsIGluV1MgPyAwIDogZmly
c3ROb25XUyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0YXJ0OwotICAgICAgfSwgc2Vs
X21vdmUpOworICAgICAgICByZXR1cm4gbGluZVN0YXJ0U21hcnQoY20sIHJhbmdlLmhlYWQpOwor
ICAgICAgfSwge29yaWdpbjogIittb3ZlIiwgYmlhczogMX0pOwogICAgIH0sCiAgICAgZ29MaW5l
RW5kOiBmdW5jdGlvbihjbSkgewotICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9u
KHJhbmdlKSB7IHJldHVybiBsaW5lRW5kKGNtLCByYW5nZS5oZWFkLmxpbmUpOyB9LCBzZWxfbW92
ZSk7CisgICAgICBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24ocmFuZ2UpIHsgcmV0dXJu
IGxpbmVFbmQoY20sIHJhbmdlLmhlYWQubGluZSk7IH0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAge29yaWdpbjogIittb3ZlIiwgYmlhczogLTF9KTsKICAgICB9LAogICAgIGdvTGluZVJp
Z2h0OiBmdW5jdGlvbihjbSkgewogICAgICAgY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9u
KHJhbmdlKSB7CkBAIC00NjAxLDYgKzU2MjEsMTQgQEAKICAgICAgICAgcmV0dXJuIGNtLmNvb3Jk
c0NoYXIoe2xlZnQ6IDAsIHRvcDogdG9wfSwgImRpdiIpOwogICAgICAgfSwgc2VsX21vdmUpOwog
ICAgIH0sCisgICAgZ29MaW5lTGVmdFNtYXJ0OiBmdW5jdGlvbihjbSkgeworICAgICAgY20uZXh0
ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uKHJhbmdlKSB7CisgICAgICAgIHZhciB0b3AgPSBjbS5j
aGFyQ29vcmRzKHJhbmdlLmhlYWQsICJkaXYiKS50b3AgKyA1OworICAgICAgICB2YXIgcG9zID0g
Y20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCAiZGl2Iik7CisgICAgICAgIGlmIChw
b3MuY2ggPCBjbS5nZXRMaW5lKHBvcy5saW5lKS5zZWFyY2goL1xTLykpIHJldHVybiBsaW5lU3Rh
cnRTbWFydChjbSwgcmFuZ2UuaGVhZCk7CisgICAgICAgIHJldHVybiBwb3M7CisgICAgICB9LCBz
ZWxfbW92ZSk7CisgICAgfSwKICAgICBnb0xpbmVVcDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigt
MSwgImxpbmUiKTt9LAogICAgIGdvTGluZURvd246IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZVYoMSwg
ImxpbmUiKTt9LAogICAgIGdvUGFnZVVwOiBmdW5jdGlvbihjbSkge2NtLm1vdmVWKC0xLCAicGFn
ZSIpO30sCkBAIC00NjUwLDcgKzU2NzgsOCBAQAogICAgICAgICAgICAgfSBlbHNlIGlmIChjdXIu
bGluZSA+IGNtLmRvYy5maXJzdCkgewogICAgICAgICAgICAgICB2YXIgcHJldiA9IGdldExpbmUo
Y20uZG9jLCBjdXIubGluZSAtIDEpLnRleHQ7CiAgICAgICAgICAgICAgIGlmIChwcmV2KQotICAg
ICAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShsaW5lLmNoYXJBdCgwKSArICJcbiIgKyBwcmV2
LmNoYXJBdChwcmV2Lmxlbmd0aCAtIDEpLAorICAgICAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5n
ZShsaW5lLmNoYXJBdCgwKSArIGNtLmRvYy5saW5lU2VwYXJhdG9yKCkgKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcmV2LmNoYXJBdChwcmV2Lmxlbmd0aCAtIDEpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQb3MoY3VyLmxpbmUgLSAxLCBwcmV2Lmxlbmd0aCAt
IDEpLCBQb3MoY3VyLmxpbmUsIDEpLCAiK3RyYW5zcG9zZSIpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgIH0KQEAgLTQ2NjQsNyArNTY5Myw3IEBACiAgICAgICAgIHZhciBsZW4gPSBjbS5saXN0
U2VsZWN0aW9ucygpLmxlbmd0aDsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkr
KykgewogICAgICAgICAgIHZhciByYW5nZSA9IGNtLmxpc3RTZWxlY3Rpb25zKClbaV07Ci0gICAg
ICAgICAgY20ucmVwbGFjZVJhbmdlKCJcbiIsIHJhbmdlLmFuY2hvciwgcmFuZ2UuaGVhZCwgIitp
bnB1dCIpOworICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShjbS5kb2MubGluZVNlcGFyYXRvcigp
LCByYW5nZS5hbmNob3IsIHJhbmdlLmhlYWQsICIraW5wdXQiKTsKICAgICAgICAgICBjbS5pbmRl
bnRMaW5lKHJhbmdlLmZyb20oKS5saW5lICsgMSwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgZW5z
dXJlQ3Vyc29yVmlzaWJsZShjbSk7CiAgICAgICAgIH0KQEAgLTQ2NzMsOSArNTcwMiwxMSBAQAog
ICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24oY20pIHtjbS50b2dnbGVPdmVyd3JpdGUoKTt9
CiAgIH07CiAKKwogICAvLyBTVEFOREFSRCBLRVlNQVBTCiAKICAgdmFyIGtleU1hcCA9IENvZGVN
aXJyb3Iua2V5TWFwID0ge307CisKICAga2V5TWFwLmJhc2ljID0gewogICAgICJMZWZ0IjogImdv
Q2hhckxlZnQiLCAiUmlnaHQiOiAiZ29DaGFyUmlnaHQiLCAiVXAiOiAiZ29MaW5lVXAiLCAiRG93
biI6ICJnb0xpbmVEb3duIiwKICAgICAiRW5kIjogImdvTGluZUVuZCIsICJIb21lIjogImdvTGlu
ZVN0YXJ0U21hcnQiLCAiUGFnZVVwIjogImdvUGFnZVVwIiwgIlBhZ2VEb3duIjogImdvUGFnZURv
d24iLApAQCAtNDY4OSw3ICs1NzIwLDcgQEAKICAgLy8gYXJlIHNpbXBseSBpZ25vcmVkLgogICBr
ZXlNYXAucGNEZWZhdWx0ID0gewogICAgICJDdHJsLUEiOiAic2VsZWN0QWxsIiwgIkN0cmwtRCI6
ICJkZWxldGVMaW5lIiwgIkN0cmwtWiI6ICJ1bmRvIiwgIlNoaWZ0LUN0cmwtWiI6ICJyZWRvIiwg
IkN0cmwtWSI6ICJyZWRvIiwKLSAgICAiQ3RybC1Ib21lIjogImdvRG9jU3RhcnQiLCAiQ3RybC1V
cCI6ICJnb0RvY1N0YXJ0IiwgIkN0cmwtRW5kIjogImdvRG9jRW5kIiwgIkN0cmwtRG93biI6ICJn
b0RvY0VuZCIsCisgICAgIkN0cmwtSG9tZSI6ICJnb0RvY1N0YXJ0IiwgIkN0cmwtRW5kIjogImdv
RG9jRW5kIiwgIkN0cmwtVXAiOiAiZ29MaW5lVXAiLCAiQ3RybC1Eb3duIjogImdvTGluZURvd24i
LAogICAgICJDdHJsLUxlZnQiOiAiZ29Hcm91cExlZnQiLCAiQ3RybC1SaWdodCI6ICJnb0dyb3Vw
UmlnaHQiLCAiQWx0LUxlZnQiOiAiZ29MaW5lU3RhcnQiLCAiQWx0LVJpZ2h0IjogImdvTGluZUVu
ZCIsCiAgICAgIkN0cmwtQmFja3NwYWNlIjogImRlbEdyb3VwQmVmb3JlIiwgIkN0cmwtRGVsZXRl
IjogImRlbEdyb3VwQWZ0ZXIiLCAiQ3RybC1TIjogInNhdmUiLCAiQ3RybC1GIjogImZpbmQiLAog
ICAgICJDdHJsLUciOiAiZmluZE5leHQiLCAiU2hpZnQtQ3RybC1HIjogImZpbmRQcmV2IiwgIlNo
aWZ0LUN0cmwtRiI6ICJyZXBsYWNlIiwgIlNoaWZ0LUN0cmwtUiI6ICJyZXBsYWNlQWxsIiwKQEAg
LTQ2OTcsMTYgKzU3MjgsNiBAQAogICAgICJDdHJsLVUiOiAidW5kb1NlbGVjdGlvbiIsICJTaGlm
dC1DdHJsLVUiOiAicmVkb1NlbGVjdGlvbiIsICJBbHQtVSI6ICJyZWRvU2VsZWN0aW9uIiwKICAg
ICBmYWxsdGhyb3VnaDogImJhc2ljIgogICB9OwotICBrZXlNYXAubWFjRGVmYXVsdCA9IHsKLSAg
ICAiQ21kLUEiOiAic2VsZWN0QWxsIiwgIkNtZC1EIjogImRlbGV0ZUxpbmUiLCAiQ21kLVoiOiAi
dW5kbyIsICJTaGlmdC1DbWQtWiI6ICJyZWRvIiwgIkNtZC1ZIjogInJlZG8iLAotICAgICJDbWQt
VXAiOiAiZ29Eb2NTdGFydCIsICJDbWQtRW5kIjogImdvRG9jRW5kIiwgIkNtZC1Eb3duIjogImdv
RG9jRW5kIiwgIkFsdC1MZWZ0IjogImdvR3JvdXBMZWZ0IiwKLSAgICAiQWx0LVJpZ2h0IjogImdv
R3JvdXBSaWdodCIsICJDbWQtTGVmdCI6ICJnb0xpbmVTdGFydCIsICJDbWQtUmlnaHQiOiAiZ29M
aW5lRW5kIiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsR3JvdXBCZWZvcmUiLAotICAgICJDdHJsLUFs
dC1CYWNrc3BhY2UiOiAiZGVsR3JvdXBBZnRlciIsICJBbHQtRGVsZXRlIjogImRlbEdyb3VwQWZ0
ZXIiLCAiQ21kLVMiOiAic2F2ZSIsICJDbWQtRiI6ICJmaW5kIiwKLSAgICAiQ21kLUciOiAiZmlu
ZE5leHQiLCAiU2hpZnQtQ21kLUciOiAiZmluZFByZXYiLCAiQ21kLUFsdC1GIjogInJlcGxhY2Ui
LCAiU2hpZnQtQ21kLUFsdC1GIjogInJlcGxhY2VBbGwiLAotICAgICJDbWQtWyI6ICJpbmRlbnRM
ZXNzIiwgIkNtZC1dIjogImluZGVudE1vcmUiLCAiQ21kLUJhY2tzcGFjZSI6ICJkZWxMaW5lTGVm
dCIsCi0gICAgIkNtZC1VIjogInVuZG9TZWxlY3Rpb24iLCAiU2hpZnQtQ21kLVUiOiAicmVkb1Nl
bGVjdGlvbiIsCi0gICAgZmFsbHRocm91Z2g6IFsiYmFzaWMiLCAiZW1hY3N5Il0KLSAgfTsKICAg
Ly8gVmVyeSBiYXNpYyByZWFkbGluZS9lbWFjcy1zdHlsZSBiaW5kaW5ncywgd2hpY2ggYXJlIHN0
YW5kYXJkIG9uIE1hYy4KICAga2V5TWFwLmVtYWNzeSA9IHsKICAgICAiQ3RybC1GIjogImdvQ2hh
clJpZ2h0IiwgIkN0cmwtQiI6ICJnb0NoYXJMZWZ0IiwgIkN0cmwtUCI6ICJnb0xpbmVVcCIsICJD
dHJsLU4iOiAiZ29MaW5lRG93biIsCkBAIC00NzE0LDcwICs1NzM1LDExNyBAQAogICAgICJDdHJs
LVYiOiAiZ29QYWdlRG93biIsICJTaGlmdC1DdHJsLVYiOiAiZ29QYWdlVXAiLCAiQ3RybC1EIjog
ImRlbENoYXJBZnRlciIsICJDdHJsLUgiOiAiZGVsQ2hhckJlZm9yZSIsCiAgICAgIkFsdC1EIjog
ImRlbFdvcmRBZnRlciIsICJBbHQtQmFja3NwYWNlIjogImRlbFdvcmRCZWZvcmUiLCAiQ3RybC1L
IjogImtpbGxMaW5lIiwgIkN0cmwtVCI6ICJ0cmFuc3Bvc2VDaGFycyIKICAgfTsKKyAga2V5TWFw
Lm1hY0RlZmF1bHQgPSB7CisgICAgIkNtZC1BIjogInNlbGVjdEFsbCIsICJDbWQtRCI6ICJkZWxl
dGVMaW5lIiwgIkNtZC1aIjogInVuZG8iLCAiU2hpZnQtQ21kLVoiOiAicmVkbyIsICJDbWQtWSI6
ICJyZWRvIiwKKyAgICAiQ21kLUhvbWUiOiAiZ29Eb2NTdGFydCIsICJDbWQtVXAiOiAiZ29Eb2NT
dGFydCIsICJDbWQtRW5kIjogImdvRG9jRW5kIiwgIkNtZC1Eb3duIjogImdvRG9jRW5kIiwgIkFs
dC1MZWZ0IjogImdvR3JvdXBMZWZ0IiwKKyAgICAiQWx0LVJpZ2h0IjogImdvR3JvdXBSaWdodCIs
ICJDbWQtTGVmdCI6ICJnb0xpbmVMZWZ0IiwgIkNtZC1SaWdodCI6ICJnb0xpbmVSaWdodCIsICJB
bHQtQmFja3NwYWNlIjogImRlbEdyb3VwQmVmb3JlIiwKKyAgICAiQ3RybC1BbHQtQmFja3NwYWNl
IjogImRlbEdyb3VwQWZ0ZXIiLCAiQWx0LURlbGV0ZSI6ICJkZWxHcm91cEFmdGVyIiwgIkNtZC1T
IjogInNhdmUiLCAiQ21kLUYiOiAiZmluZCIsCisgICAgIkNtZC1HIjogImZpbmROZXh0IiwgIlNo
aWZ0LUNtZC1HIjogImZpbmRQcmV2IiwgIkNtZC1BbHQtRiI6ICJyZXBsYWNlIiwgIlNoaWZ0LUNt
ZC1BbHQtRiI6ICJyZXBsYWNlQWxsIiwKKyAgICAiQ21kLVsiOiAiaW5kZW50TGVzcyIsICJDbWQt
XSI6ICJpbmRlbnRNb3JlIiwgIkNtZC1CYWNrc3BhY2UiOiAiZGVsV3JhcHBlZExpbmVMZWZ0Iiwg
IkNtZC1EZWxldGUiOiAiZGVsV3JhcHBlZExpbmVSaWdodCIsCisgICAgIkNtZC1VIjogInVuZG9T
ZWxlY3Rpb24iLCAiU2hpZnQtQ21kLVUiOiAicmVkb1NlbGVjdGlvbiIsICJDdHJsLVVwIjogImdv
RG9jU3RhcnQiLCAiQ3RybC1Eb3duIjogImdvRG9jRW5kIiwKKyAgICBmYWxsdGhyb3VnaDogWyJi
YXNpYyIsICJlbWFjc3kiXQorICB9OwogICBrZXlNYXBbImRlZmF1bHQiXSA9IG1hYyA/IGtleU1h
cC5tYWNEZWZhdWx0IDoga2V5TWFwLnBjRGVmYXVsdDsKIAogICAvLyBLRVlNQVAgRElTUEFUQ0gK
IAotICBmdW5jdGlvbiBnZXRLZXlNYXAodmFsKSB7Ci0gICAgaWYgKHR5cGVvZiB2YWwgPT0gInN0
cmluZyIpIHJldHVybiBrZXlNYXBbdmFsXTsKLSAgICBlbHNlIHJldHVybiB2YWw7Ci0gIH0KLQot
ICAvLyBHaXZlbiBhbiBhcnJheSBvZiBrZXltYXBzIGFuZCBhIGtleSBuYW1lLCBjYWxsIGhhbmRs
ZSBvbiBhbnkKLSAgLy8gYmluZGluZ3MgZm91bmQsIHVudGlsIHRoYXQgcmV0dXJucyBhIHRydXRo
eSB2YWx1ZSwgYXQgd2hpY2ggcG9pbnQKLSAgLy8gd2UgY29uc2lkZXIgdGhlIGtleSBoYW5kbGVk
LiBJbXBsZW1lbnRzIHRoaW5ncyBsaWtlIGJpbmRpbmcgYSBrZXkKLSAgLy8gdG8gZmFsc2Ugc3Rv
cHBpbmcgZnVydGhlciBoYW5kbGluZyBhbmQga2V5bWFwIGZhbGx0aHJvdWdoLgotICB2YXIgbG9v
a3VwS2V5ID0gQ29kZU1pcnJvci5sb29rdXBLZXkgPSBmdW5jdGlvbihuYW1lLCBtYXBzLCBoYW5k
bGUpIHsKLSAgICBmdW5jdGlvbiBsb29rdXAobWFwKSB7Ci0gICAgICBtYXAgPSBnZXRLZXlNYXAo
bWFwKTsKLSAgICAgIHZhciBmb3VuZCA9IG1hcFtuYW1lXTsKLSAgICAgIGlmIChmb3VuZCA9PT0g
ZmFsc2UpIHJldHVybiAic3RvcCI7Ci0gICAgICBpZiAoZm91bmQgIT0gbnVsbCAmJiBoYW5kbGUo
Zm91bmQpKSByZXR1cm4gdHJ1ZTsKLSAgICAgIGlmIChtYXAubm9mYWxsdGhyb3VnaCkgcmV0dXJu
ICJzdG9wIjsKLQotICAgICAgdmFyIGZhbGx0aHJvdWdoID0gbWFwLmZhbGx0aHJvdWdoOwotICAg
ICAgaWYgKGZhbGx0aHJvdWdoID09IG51bGwpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChPYmpl
Y3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZmFsbHRocm91Z2gpICE9ICJbb2JqZWN0IEFycmF5
XSIpCi0gICAgICAgIHJldHVybiBsb29rdXAoZmFsbHRocm91Z2gpOwotICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBmYWxsdGhyb3VnaC5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgZG9uZSA9
IGxvb2t1cChmYWxsdGhyb3VnaFtpXSk7Ci0gICAgICAgIGlmIChkb25lKSByZXR1cm4gZG9uZTsK
KyAgZnVuY3Rpb24gbm9ybWFsaXplS2V5TmFtZShuYW1lKSB7CisgICAgdmFyIHBhcnRzID0gbmFt
ZS5zcGxpdCgvLSg/ISQpLyksIG5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKKyAgICB2
YXIgYWx0LCBjdHJsLCBzaGlmdCwgY21kOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMu
bGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgICB2YXIgbW9kID0gcGFydHNbaV07CisgICAgICBpZiAo
L14oY21kfG1ldGF8bSkkL2kudGVzdChtb2QpKSBjbWQgPSB0cnVlOworICAgICAgZWxzZSBpZiAo
L15hKGx0KT8kL2kudGVzdChtb2QpKSBhbHQgPSB0cnVlOworICAgICAgZWxzZSBpZiAoL14oY3xj
dHJsfGNvbnRyb2wpJC9pLnRlc3QobW9kKSkgY3RybCA9IHRydWU7CisgICAgICBlbHNlIGlmICgv
XnMoaGlmdCkkL2kudGVzdChtb2QpKSBzaGlmdCA9IHRydWU7CisgICAgICBlbHNlIHRocm93IG5l
dyBFcnJvcigiVW5yZWNvZ25pemVkIG1vZGlmaWVyIG5hbWU6ICIgKyBtb2QpOworICAgIH0KKyAg
ICBpZiAoYWx0KSBuYW1lID0gIkFsdC0iICsgbmFtZTsKKyAgICBpZiAoY3RybCkgbmFtZSA9ICJD
dHJsLSIgKyBuYW1lOworICAgIGlmIChjbWQpIG5hbWUgPSAiQ21kLSIgKyBuYW1lOworICAgIGlm
IChzaGlmdCkgbmFtZSA9ICJTaGlmdC0iICsgbmFtZTsKKyAgICByZXR1cm4gbmFtZTsKKyAgfQor
CisgIC8vIFRoaXMgaXMgYSBrbHVkZ2UgdG8ga2VlcCBrZXltYXBzIG1vc3RseSB3b3JraW5nIGFz
IHJhdyBvYmplY3RzCisgIC8vIChiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSkgd2hpbGUgYXQgdGhl
IHNhbWUgdGltZSBzdXBwb3J0IGZlYXR1cmVzCisgIC8vIGxpa2Ugbm9ybWFsaXphdGlvbiBhbmQg
bXVsdGktc3Ryb2tlIGtleSBiaW5kaW5ncy4gSXQgY29tcGlsZXMgYQorICAvLyBuZXcgbm9ybWFs
aXplZCBrZXltYXAsIGFuZCB0aGVuIHVwZGF0ZXMgdGhlIG9sZCBvYmplY3QgdG8gcmVmbGVjdAor
ICAvLyB0aGlzLgorICBDb2RlTWlycm9yLm5vcm1hbGl6ZUtleU1hcCA9IGZ1bmN0aW9uKGtleW1h
cCkgeworICAgIHZhciBjb3B5ID0ge307CisgICAgZm9yICh2YXIga2V5bmFtZSBpbiBrZXltYXAp
IGlmIChrZXltYXAuaGFzT3duUHJvcGVydHkoa2V5bmFtZSkpIHsKKyAgICAgIHZhciB2YWx1ZSA9
IGtleW1hcFtrZXluYW1lXTsKKyAgICAgIGlmICgvXihuYW1lfGZhbGx0aHJvdWdofChkZXxhdCl0
YWNoKSQvLnRlc3Qoa2V5bmFtZSkpIGNvbnRpbnVlOworICAgICAgaWYgKHZhbHVlID09ICIuLi4i
KSB7IGRlbGV0ZSBrZXltYXBba2V5bmFtZV07IGNvbnRpbnVlOyB9CisKKyAgICAgIHZhciBrZXlz
ID0gbWFwKGtleW5hbWUuc3BsaXQoIiAiKSwgbm9ybWFsaXplS2V5TmFtZSk7CisgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHZhbCwgbmFt
ZTsKKyAgICAgICAgaWYgKGkgPT0ga2V5cy5sZW5ndGggLSAxKSB7CisgICAgICAgICAgbmFtZSA9
IGtleXMuam9pbigiICIpOworICAgICAgICAgIHZhbCA9IHZhbHVlOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgIG5hbWUgPSBrZXlzLnNsaWNlKDAsIGkgKyAxKS5qb2luKCIgIik7CisgICAg
ICAgICAgdmFsID0gIi4uLiI7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHByZXYgPSBjb3B5W25h
bWVdOworICAgICAgICBpZiAoIXByZXYpIGNvcHlbbmFtZV0gPSB2YWw7CisgICAgICAgIGVsc2Ug
aWYgKHByZXYgIT0gdmFsKSB0aHJvdyBuZXcgRXJyb3IoIkluY29uc2lzdGVudCBiaW5kaW5ncyBm
b3IgIiArIG5hbWUpOwogICAgICAgfQotICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVsZXRl
IGtleW1hcFtrZXluYW1lXTsKICAgICB9CisgICAgZm9yICh2YXIgcHJvcCBpbiBjb3B5KSBrZXlt
YXBbcHJvcF0gPSBjb3B5W3Byb3BdOworICAgIHJldHVybiBrZXltYXA7CisgIH07CiAKLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG1hcHMubGVuZ3RoOyArK2kpIHsKLSAgICAgIHZhciBkb25lID0g
bG9va3VwKG1hcHNbaV0pOwotICAgICAgaWYgKGRvbmUpIHJldHVybiBkb25lICE9ICJzdG9wIjsK
KyAgdmFyIGxvb2t1cEtleSA9IENvZGVNaXJyb3IubG9va3VwS2V5ID0gZnVuY3Rpb24oa2V5LCBt
YXAsIGhhbmRsZSwgY29udGV4dCkgeworICAgIG1hcCA9IGdldEtleU1hcChtYXApOworICAgIHZh
ciBmb3VuZCA9IG1hcC5jYWxsID8gbWFwLmNhbGwoa2V5LCBjb250ZXh0KSA6IG1hcFtrZXldOwor
ICAgIGlmIChmb3VuZCA9PT0gZmFsc2UpIHJldHVybiAibm90aGluZyI7CisgICAgaWYgKGZvdW5k
ID09PSAiLi4uIikgcmV0dXJuICJtdWx0aSI7CisgICAgaWYgKGZvdW5kICE9IG51bGwgJiYgaGFu
ZGxlKGZvdW5kKSkgcmV0dXJuICJoYW5kbGVkIjsKKworICAgIGlmIChtYXAuZmFsbHRocm91Z2gp
IHsKKyAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWFwLmZhbGx0aHJv
dWdoKSAhPSAiW29iamVjdCBBcnJheV0iKQorICAgICAgICByZXR1cm4gbG9va3VwS2V5KGtleSwg
bWFwLmZhbGx0aHJvdWdoLCBoYW5kbGUsIGNvbnRleHQpOworICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBtYXAuZmFsbHRocm91Z2gubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9
IGxvb2t1cEtleShrZXksIG1hcC5mYWxsdGhyb3VnaFtpXSwgaGFuZGxlLCBjb250ZXh0KTsKKyAg
ICAgICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KICAgICB9CiAgIH07CiAK
ICAgLy8gTW9kaWZpZXIga2V5IHByZXNzZXMgZG9uJ3QgY291bnQgYXMgJ3JlYWwnIGtleSBwcmVz
c2VzIGZvciB0aGUKICAgLy8gcHVycG9zZSBvZiBrZXltYXAgZmFsbHRocm91Z2guCi0gIHZhciBp
c01vZGlmaWVyS2V5ID0gQ29kZU1pcnJvci5pc01vZGlmaWVyS2V5ID0gZnVuY3Rpb24oZXZlbnQp
IHsKLSAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2V2ZW50LmtleUNvZGVdOworICB2YXIgaXNNb2Rp
ZmllcktleSA9IENvZGVNaXJyb3IuaXNNb2RpZmllcktleSA9IGZ1bmN0aW9uKHZhbHVlKSB7Cisg
ICAgdmFyIG5hbWUgPSB0eXBlb2YgdmFsdWUgPT0gInN0cmluZyIgPyB2YWx1ZSA6IGtleU5hbWVz
W3ZhbHVlLmtleUNvZGVdOwogICAgIHJldHVybiBuYW1lID09ICJDdHJsIiB8fCBuYW1lID09ICJB
bHQiIHx8IG5hbWUgPT0gIlNoaWZ0IiB8fCBuYW1lID09ICJNb2QiOwogICB9OwogCiAgIC8vIExv
b2sgdXAgdGhlIG5hbWUgb2YgYSBrZXkgYXMgaW5kaWNhdGVkIGJ5IGFuIGV2ZW50IG9iamVjdC4K
ICAgdmFyIGtleU5hbWUgPSBDb2RlTWlycm9yLmtleU5hbWUgPSBmdW5jdGlvbihldmVudCwgbm9T
aGlmdCkgewogICAgIGlmIChwcmVzdG8gJiYgZXZlbnQua2V5Q29kZSA9PSAzNCAmJiBldmVudFsi
Y2hhciJdKSByZXR1cm4gZmFsc2U7Ci0gICAgdmFyIG5hbWUgPSBrZXlOYW1lc1tldmVudC5rZXlD
b2RlXTsKKyAgICB2YXIgYmFzZSA9IGtleU5hbWVzW2V2ZW50LmtleUNvZGVdLCBuYW1lID0gYmFz
ZTsKICAgICBpZiAobmFtZSA9PSBudWxsIHx8IGV2ZW50LmFsdEdyYXBoS2V5KSByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKGV2ZW50LmFsdEtleSkgbmFtZSA9ICJBbHQtIiArIG5hbWU7Ci0gICAgaWYg
KGZsaXBDdHJsQ21kID8gZXZlbnQubWV0YUtleSA6IGV2ZW50LmN0cmxLZXkpIG5hbWUgPSAiQ3Ry
bC0iICsgbmFtZTsKLSAgICBpZiAoZmxpcEN0cmxDbWQgPyBldmVudC5jdHJsS2V5IDogZXZlbnQu
bWV0YUtleSkgbmFtZSA9ICJDbWQtIiArIG5hbWU7Ci0gICAgaWYgKCFub1NoaWZ0ICYmIGV2ZW50
LnNoaWZ0S2V5KSBuYW1lID0gIlNoaWZ0LSIgKyBuYW1lOworICAgIGlmIChldmVudC5hbHRLZXkg
JiYgYmFzZSAhPSAiQWx0IikgbmFtZSA9ICJBbHQtIiArIG5hbWU7CisgICAgaWYgKChmbGlwQ3Ry
bENtZCA/IGV2ZW50Lm1ldGFLZXkgOiBldmVudC5jdHJsS2V5KSAmJiBiYXNlICE9ICJDdHJsIikg
bmFtZSA9ICJDdHJsLSIgKyBuYW1lOworICAgIGlmICgoZmxpcEN0cmxDbWQgPyBldmVudC5jdHJs
S2V5IDogZXZlbnQubWV0YUtleSkgJiYgYmFzZSAhPSAiQ21kIikgbmFtZSA9ICJDbWQtIiArIG5h
bWU7CisgICAgaWYgKCFub1NoaWZ0ICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGJhc2UgIT0gIlNoaWZ0
IikgbmFtZSA9ICJTaGlmdC0iICsgbmFtZTsKICAgICByZXR1cm4gbmFtZTsKICAgfTsKIAorICBm
dW5jdGlvbiBnZXRLZXlNYXAodmFsKSB7CisgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gInN0cmlu
ZyIgPyBrZXlNYXBbdmFsXSA6IHZhbDsKKyAgfQorCiAgIC8vIEZST01URVhUQVJFQQogCiAgIENv
ZGVNaXJyb3IuZnJvbVRleHRBcmVhID0gZnVuY3Rpb24odGV4dGFyZWEsIG9wdGlvbnMpIHsKLSAg
ICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTsKKyAgICBvcHRpb25zID0gb3B0aW9ucyA/IGNv
cHlPYmoob3B0aW9ucykgOiB7fTsKICAgICBvcHRpb25zLnZhbHVlID0gdGV4dGFyZWEudmFsdWU7
Ci0gICAgaWYgKCFvcHRpb25zLnRhYmluZGV4ICYmIHRleHRhcmVhLnRhYmluZGV4KQotICAgICAg
b3B0aW9ucy50YWJpbmRleCA9IHRleHRhcmVhLnRhYmluZGV4OworICAgIGlmICghb3B0aW9ucy50
YWJpbmRleCAmJiB0ZXh0YXJlYS50YWJJbmRleCkKKyAgICAgIG9wdGlvbnMudGFiaW5kZXggPSB0
ZXh0YXJlYS50YWJJbmRleDsKICAgICBpZiAoIW9wdGlvbnMucGxhY2Vob2xkZXIgJiYgdGV4dGFy
ZWEucGxhY2Vob2xkZXIpCiAgICAgICBvcHRpb25zLnBsYWNlaG9sZGVyID0gdGV4dGFyZWEucGxh
Y2Vob2xkZXI7CiAgICAgLy8gU2V0IGF1dG9mb2N1cyB0byB0cnVlIGlmIHRoaXMgdGV4dGFyZWEg
aXMgZm9jdXNlZCwgb3IgaWYgaXQgaGFzCkBAIC00ODA1LDIyICs1ODczLDI2IEBACiAgICAgICB9
CiAgICAgfQogCisgICAgb3B0aW9ucy5maW5pc2hJbml0ID0gZnVuY3Rpb24oY20pIHsKKyAgICAg
IGNtLnNhdmUgPSBzYXZlOworICAgICAgY20uZ2V0VGV4dEFyZWEgPSBmdW5jdGlvbigpIHsgcmV0
dXJuIHRleHRhcmVhOyB9OworICAgICAgY20udG9UZXh0QXJlYSA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICBjbS50b1RleHRBcmVhID0gaXNOYU47IC8vIFByZXZlbnQgdGhpcyBmcm9tIGJlaW5nIHJh
biB0d2ljZQorICAgICAgICBzYXZlKCk7CisgICAgICAgIHRleHRhcmVhLnBhcmVudE5vZGUucmVt
b3ZlQ2hpbGQoY20uZ2V0V3JhcHBlckVsZW1lbnQoKSk7CisgICAgICAgIHRleHRhcmVhLnN0eWxl
LmRpc3BsYXkgPSAiIjsKKyAgICAgICAgaWYgKHRleHRhcmVhLmZvcm0pIHsKKyAgICAgICAgICBv
ZmYodGV4dGFyZWEuZm9ybSwgInN1Ym1pdCIsIHNhdmUpOworICAgICAgICAgIGlmICh0eXBlb2Yg
dGV4dGFyZWEuZm9ybS5zdWJtaXQgPT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgIHRleHRhcmVh
LmZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDsKKyAgICAgICAgfQorICAgICAgfTsKKyAgICB9Owor
CiAgICAgdGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICB2YXIgY20gPSBDb2Rl
TWlycm9yKGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgIHRleHRhcmVhLnBhcmVudE5vZGUuaW5zZXJ0
QmVmb3JlKG5vZGUsIHRleHRhcmVhLm5leHRTaWJsaW5nKTsKICAgICB9LCBvcHRpb25zKTsKLSAg
ICBjbS5zYXZlID0gc2F2ZTsKLSAgICBjbS5nZXRUZXh0QXJlYSA9IGZ1bmN0aW9uKCkgeyByZXR1
cm4gdGV4dGFyZWE7IH07Ci0gICAgY20udG9UZXh0QXJlYSA9IGZ1bmN0aW9uKCkgewotICAgICAg
c2F2ZSgpOwotICAgICAgdGV4dGFyZWEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjbS5nZXRXcmFw
cGVyRWxlbWVudCgpKTsKLSAgICAgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAg
IGlmICh0ZXh0YXJlYS5mb3JtKSB7Ci0gICAgICAgIG9mZih0ZXh0YXJlYS5mb3JtLCAic3VibWl0
Iiwgc2F2ZSk7Ci0gICAgICAgIGlmICh0eXBlb2YgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPT0gImZ1
bmN0aW9uIikKLSAgICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQ7Ci0g
ICAgICB9Ci0gICAgfTsKICAgICByZXR1cm4gY207CiAgIH07CiAKQEAgLTQ5MTMsMTAgKzU5ODUs
MTMgQEAKICAgLy8gbWFya2VyIGNvbnRpbnVlcyBiZXlvbmQgdGhlIHN0YXJ0L2VuZCBvZiB0aGUg
bGluZS4gTWFya2VycyBoYXZlCiAgIC8vIGxpbmtzIGJhY2sgdG8gdGhlIGxpbmVzIHRoZXkgY3Vy
cmVudGx5IHRvdWNoLgogCisgIHZhciBuZXh0TWFya2VySWQgPSAwOworCiAgIHZhciBUZXh0TWFy
a2VyID0gQ29kZU1pcnJvci5UZXh0TWFya2VyID0gZnVuY3Rpb24oZG9jLCB0eXBlKSB7CiAgICAg
dGhpcy5saW5lcyA9IFtdOwogICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICAgdGhpcy5kb2MgPSBk
b2M7CisgICAgdGhpcy5pZCA9ICsrbmV4dE1hcmtlcklkOwogICB9OwogICBldmVudE1peGluKFRl
eHRNYXJrZXIpOwogCkBAIC01MDQ4LDcgKzYxMjMsNyBAQAogICAgICAgLy8gU2hvd2luZyB1cCBh
cyBhIHdpZGdldCBpbXBsaWVzIGNvbGxhcHNlZCAod2lkZ2V0IHJlcGxhY2VzIHRleHQpCiAgICAg
ICBtYXJrZXIuY29sbGFwc2VkID0gdHJ1ZTsKICAgICAgIG1hcmtlci53aWRnZXROb2RlID0gZWx0
KCJzcGFuIiwgW21hcmtlci5yZXBsYWNlZFdpdGhdLCAiQ29kZU1pcnJvci13aWRnZXQiKTsKLSAg
ICAgIGlmICghb3B0aW9ucy5oYW5kbGVNb3VzZUV2ZW50cykgbWFya2VyLndpZGdldE5vZGUuaWdu
b3JlRXZlbnRzID0gdHJ1ZTsKKyAgICAgIGlmICghb3B0aW9ucy5oYW5kbGVNb3VzZUV2ZW50cykg
bWFya2VyLndpZGdldE5vZGUuc2V0QXR0cmlidXRlKCJjbS1pZ25vcmUtZXZlbnRzIiwgInRydWUi
KTsKICAgICAgIGlmIChvcHRpb25zLmluc2VydExlZnQpIG1hcmtlci53aWRnZXROb2RlLmluc2Vy
dExlZnQgPSB0cnVlOwogICAgIH0KICAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkgewpAQCAtNTA5
Miw3ICs2MTY3LDcgQEAKICAgICAgIGlmICh1cGRhdGVNYXhMaW5lKSBjbS5jdXJPcC51cGRhdGVN
YXhMaW5lID0gdHJ1ZTsKICAgICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKQogICAgICAgICByZWdD
aGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEpOwotICAgICAgZWxzZSBpZiAobWFya2Vy
LmNsYXNzTmFtZSB8fCBtYXJrZXIudGl0bGUgfHwgbWFya2VyLnN0YXJ0U3R5bGUgfHwgbWFya2Vy
LmVuZFN0eWxlKQorICAgICAgZWxzZSBpZiAobWFya2VyLmNsYXNzTmFtZSB8fCBtYXJrZXIudGl0
bGUgfHwgbWFya2VyLnN0YXJ0U3R5bGUgfHwgbWFya2VyLmVuZFN0eWxlIHx8IG1hcmtlci5jc3Mp
CiAgICAgICAgIGZvciAodmFyIGkgPSBmcm9tLmxpbmU7IGkgPD0gdG8ubGluZTsgaSsrKSByZWdM
aW5lQ2hhbmdlKGNtLCBpLCAidGV4dCIpOwogICAgICAgaWYgKG1hcmtlci5hdG9taWMpIHJlQ2hl
Y2tTZWxlY3Rpb24oY20uZG9jKTsKICAgICAgIHNpZ25hbExhdGVyKGNtLCAibWFya2VyQWRkZWQi
LCBjbSwgbWFya2VyKTsKQEAgLTUyMzIsNiArNjMwNyw3IEBACiAgIC8vIHNwYW5zIHBhcnRpYWxs
eSB3aXRoaW4gdGhlIGNoYW5nZS4gUmV0dXJucyBhbiBhcnJheSBvZiBzcGFuCiAgIC8vIGFycmF5
cyB3aXRoIG9uZSBlbGVtZW50IGZvciBlYWNoIGxpbmUgaW4gKGFmdGVyKSB0aGUgY2hhbmdlLgog
ICBmdW5jdGlvbiBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKSB7CisgICAgaWYg
KGNoYW5nZS5mdWxsKSByZXR1cm4gbnVsbDsKICAgICB2YXIgb2xkRmlyc3QgPSBpc0xpbmUoZG9j
LCBjaGFuZ2UuZnJvbS5saW5lKSAmJiBnZXRMaW5lKGRvYywgY2hhbmdlLmZyb20ubGluZSkubWFy
a2VkU3BhbnM7CiAgICAgdmFyIG9sZExhc3QgPSBpc0xpbmUoZG9jLCBjaGFuZ2UudG8ubGluZSkg
JiYgZ2V0TGluZShkb2MsIGNoYW5nZS50by5saW5lKS5tYXJrZWRTcGFuczsKICAgICBpZiAoIW9s
ZEZpcnN0ICYmICFvbGRMYXN0KSByZXR1cm4gbnVsbDsKQEAgLTU0MTksOCArNjQ5NSw4IEBACiAg
ICAgICB2YXIgZnJvbUNtcCA9IGNtcChmb3VuZC5mcm9tLCBmcm9tKSB8fCBleHRyYUxlZnQoc3Au
bWFya2VyKSAtIGV4dHJhTGVmdChtYXJrZXIpOwogICAgICAgdmFyIHRvQ21wID0gY21wKGZvdW5k
LnRvLCB0bykgfHwgZXh0cmFSaWdodChzcC5tYXJrZXIpIC0gZXh0cmFSaWdodChtYXJrZXIpOwog
ICAgICAgaWYgKGZyb21DbXAgPj0gMCAmJiB0b0NtcCA8PSAwIHx8IGZyb21DbXAgPD0gMCAmJiB0
b0NtcCA+PSAwKSBjb250aW51ZTsKLSAgICAgIGlmIChmcm9tQ21wIDw9IDAgJiYgKGNtcChmb3Vu
ZC50bywgZnJvbSkgfHwgZXh0cmFSaWdodChzcC5tYXJrZXIpIC0gZXh0cmFMZWZ0KG1hcmtlcikp
ID4gMCB8fAotICAgICAgICAgIGZyb21DbXAgPj0gMCAmJiAoY21wKGZvdW5kLmZyb20sIHRvKSB8
fCBleHRyYUxlZnQoc3AubWFya2VyKSAtIGV4dHJhUmlnaHQobWFya2VyKSkgPCAwKQorICAgICAg
aWYgKGZyb21DbXAgPD0gMCAmJiAoY21wKGZvdW5kLnRvLCBmcm9tKSA+IDAgfHwgKHNwLm1hcmtl
ci5pbmNsdXNpdmVSaWdodCAmJiBtYXJrZXIuaW5jbHVzaXZlTGVmdCkpIHx8CisgICAgICAgICAg
ZnJvbUNtcCA+PSAwICYmIChjbXAoZm91bmQuZnJvbSwgdG8pIDwgMCB8fCAoc3AubWFya2VyLmlu
Y2x1c2l2ZUxlZnQgJiYgbWFya2VyLmluY2x1c2l2ZVJpZ2h0KSkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgfQpAQCAtNTQ5OSwxMCArNjU3NSwxMCBAQAogCiAgIC8vIExpbmUgd2lk
Z2V0cyBhcmUgYmxvY2sgZWxlbWVudHMgZGlzcGxheWVkIGFib3ZlIG9yIGJlbG93IGEgbGluZS4K
IAotICB2YXIgTGluZVdpZGdldCA9IENvZGVNaXJyb3IuTGluZVdpZGdldCA9IGZ1bmN0aW9uKGNt
LCBub2RlLCBvcHRpb25zKSB7CisgIHZhciBMaW5lV2lkZ2V0ID0gQ29kZU1pcnJvci5MaW5lV2lk
Z2V0ID0gZnVuY3Rpb24oZG9jLCBub2RlLCBvcHRpb25zKSB7CiAgICAgaWYgKG9wdGlvbnMpIGZv
ciAodmFyIG9wdCBpbiBvcHRpb25zKSBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpKQog
ICAgICAgdGhpc1tvcHRdID0gb3B0aW9uc1tvcHRdOwotICAgIHRoaXMuY20gPSBjbTsKKyAgICB0
aGlzLmRvYyA9IGRvYzsKICAgICB0aGlzLm5vZGUgPSBub2RlOwogICB9OwogICBldmVudE1peGlu
KExpbmVXaWRnZXQpOwpAQCAtNTUxMyw0NiArNjU4OSw1NSBAQAogICB9CiAKICAgTGluZVdpZGdl
dC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgY20gPSB0aGlzLmNtLCB3
cyA9IHRoaXMubGluZS53aWRnZXRzLCBsaW5lID0gdGhpcy5saW5lLCBubyA9IGxpbmVObyhsaW5l
KTsKKyAgICB2YXIgY20gPSB0aGlzLmRvYy5jbSwgd3MgPSB0aGlzLmxpbmUud2lkZ2V0cywgbGlu
ZSA9IHRoaXMubGluZSwgbm8gPSBsaW5lTm8obGluZSk7CiAgICAgaWYgKG5vID09IG51bGwgfHwg
IXdzKSByZXR1cm47CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3cy5sZW5ndGg7ICsraSkgaWYg
KHdzW2ldID09IHRoaXMpIHdzLnNwbGljZShpLS0sIDEpOwogICAgIGlmICghd3MubGVuZ3RoKSBs
aW5lLndpZGdldHMgPSBudWxsOwogICAgIHZhciBoZWlnaHQgPSB3aWRnZXRIZWlnaHQodGhpcyk7
Ci0gICAgcnVuSW5PcChjbSwgZnVuY3Rpb24oKSB7CisgICAgdXBkYXRlTGluZUhlaWdodChsaW5l
LCBNYXRoLm1heCgwLCBsaW5lLmhlaWdodCAtIGhlaWdodCkpOworICAgIGlmIChjbSkgcnVuSW5P
cChjbSwgZnVuY3Rpb24oKSB7CiAgICAgICBhZGp1c3RTY3JvbGxXaGVuQWJvdmVWaXNpYmxlKGNt
LCBsaW5lLCAtaGVpZ2h0KTsKICAgICAgIHJlZ0xpbmVDaGFuZ2UoY20sIG5vLCAid2lkZ2V0Iik7
Ci0gICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIE1hdGgubWF4KDAsIGxpbmUuaGVpZ2h0IC0g
aGVpZ2h0KSk7CiAgICAgfSk7CiAgIH07CiAgIExpbmVXaWRnZXQucHJvdG90eXBlLmNoYW5nZWQg
PSBmdW5jdGlvbigpIHsKLSAgICB2YXIgb2xkSCA9IHRoaXMuaGVpZ2h0LCBjbSA9IHRoaXMuY20s
IGxpbmUgPSB0aGlzLmxpbmU7CisgICAgdmFyIG9sZEggPSB0aGlzLmhlaWdodCwgY20gPSB0aGlz
LmRvYy5jbSwgbGluZSA9IHRoaXMubGluZTsKICAgICB0aGlzLmhlaWdodCA9IG51bGw7CiAgICAg
dmFyIGRpZmYgPSB3aWRnZXRIZWlnaHQodGhpcykgLSBvbGRIOwogICAgIGlmICghZGlmZikgcmV0
dXJuOwotICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uKCkgeworICAgIHVwZGF0ZUxpbmVIZWlnaHQo
bGluZSwgbGluZS5oZWlnaHQgKyBkaWZmKTsKKyAgICBpZiAoY20pIHJ1bkluT3AoY20sIGZ1bmN0
aW9uKCkgewogICAgICAgY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlOwogICAgICAgYWRqdXN0
U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZik7Ci0gICAgICB1cGRhdGVMaW5l
SGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgZGlmZik7CiAgICAgfSk7CiAgIH07CiAKICAgZnVu
Y3Rpb24gd2lkZ2V0SGVpZ2h0KHdpZGdldCkgewogICAgIGlmICh3aWRnZXQuaGVpZ2h0ICE9IG51
bGwpIHJldHVybiB3aWRnZXQuaGVpZ2h0OwotICAgIGlmICghY29udGFpbnMoZG9jdW1lbnQuYm9k
eSwgd2lkZ2V0Lm5vZGUpKQotICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQod2lkZ2V0LmNtLmRp
c3BsYXkubWVhc3VyZSwgZWx0KCJkaXYiLCBbd2lkZ2V0Lm5vZGVdLCBudWxsLCAicG9zaXRpb246
IHJlbGF0aXZlIikpOworICAgIHZhciBjbSA9IHdpZGdldC5kb2MuY207CisgICAgaWYgKCFjbSkg
cmV0dXJuIDA7CisgICAgaWYgKCFjb250YWlucyhkb2N1bWVudC5ib2R5LCB3aWRnZXQubm9kZSkp
IHsKKyAgICAgIHZhciBwYXJlbnRTdHlsZSA9ICJwb3NpdGlvbjogcmVsYXRpdmU7IjsKKyAgICAg
IGlmICh3aWRnZXQuY292ZXJHdXR0ZXIpCisgICAgICAgIHBhcmVudFN0eWxlICs9ICJtYXJnaW4t
bGVmdDogLSIgKyBjbS5kaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGggKyAicHg7IjsKKyAgICAg
IGlmICh3aWRnZXQubm9IU2Nyb2xsKQorICAgICAgICBwYXJlbnRTdHlsZSArPSAid2lkdGg6ICIg
KyBjbS5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggKyAicHg7IjsKKyAgICAgIHJlbW92ZUNo
aWxkcmVuQW5kQWRkKGNtLmRpc3BsYXkubWVhc3VyZSwgZWx0KCJkaXYiLCBbd2lkZ2V0Lm5vZGVd
LCBudWxsLCBwYXJlbnRTdHlsZSkpOworICAgIH0KICAgICByZXR1cm4gd2lkZ2V0LmhlaWdodCA9
IHdpZGdldC5ub2RlLm9mZnNldEhlaWdodDsKICAgfQogCi0gIGZ1bmN0aW9uIGFkZExpbmVXaWRn
ZXQoY20sIGhhbmRsZSwgbm9kZSwgb3B0aW9ucykgewotICAgIHZhciB3aWRnZXQgPSBuZXcgTGlu
ZVdpZGdldChjbSwgbm9kZSwgb3B0aW9ucyk7Ci0gICAgaWYgKHdpZGdldC5ub0hTY3JvbGwpIGNt
LmRpc3BsYXkuYWxpZ25XaWRnZXRzID0gdHJ1ZTsKLSAgICBjaGFuZ2VMaW5lKGNtLCBoYW5kbGUs
ICJ3aWRnZXQiLCBmdW5jdGlvbihsaW5lKSB7CisgIGZ1bmN0aW9uIGFkZExpbmVXaWRnZXQoZG9j
LCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHsKKyAgICB2YXIgd2lkZ2V0ID0gbmV3IExpbmVXaWRn
ZXQoZG9jLCBub2RlLCBvcHRpb25zKTsKKyAgICB2YXIgY20gPSBkb2MuY207CisgICAgaWYgKGNt
ICYmIHdpZGdldC5ub0hTY3JvbGwpIGNtLmRpc3BsYXkuYWxpZ25XaWRnZXRzID0gdHJ1ZTsKKyAg
ICBjaGFuZ2VMaW5lKGRvYywgaGFuZGxlLCAid2lkZ2V0IiwgZnVuY3Rpb24obGluZSkgewogICAg
ICAgdmFyIHdpZGdldHMgPSBsaW5lLndpZGdldHMgfHwgKGxpbmUud2lkZ2V0cyA9IFtdKTsKICAg
ICAgIGlmICh3aWRnZXQuaW5zZXJ0QXQgPT0gbnVsbCkgd2lkZ2V0cy5wdXNoKHdpZGdldCk7CiAg
ICAgICBlbHNlIHdpZGdldHMuc3BsaWNlKE1hdGgubWluKHdpZGdldHMubGVuZ3RoIC0gMSwgTWF0
aC5tYXgoMCwgd2lkZ2V0Lmluc2VydEF0KSksIDAsIHdpZGdldCk7CiAgICAgICB3aWRnZXQubGlu
ZSA9IGxpbmU7Ci0gICAgICBpZiAoIWxpbmVJc0hpZGRlbihjbS5kb2MsIGxpbmUpKSB7Ci0gICAg
ICAgIHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExpbmUobGluZSkgPCBjbS5kb2Muc2Nyb2xs
VG9wOworICAgICAgaWYgKGNtICYmICFsaW5lSXNIaWRkZW4oZG9jLCBsaW5lKSkgeworICAgICAg
ICB2YXIgYWJvdmVWaXNpYmxlID0gaGVpZ2h0QXRMaW5lKGxpbmUpIDwgZG9jLnNjcm9sbFRvcDsK
ICAgICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBsaW5lLmhlaWdodCArIHdpZGdldEhlaWdo
dCh3aWRnZXQpKTsKICAgICAgICAgaWYgKGFib3ZlVmlzaWJsZSkgYWRkVG9TY3JvbGxQb3MoY20s
IG51bGwsIHdpZGdldC5oZWlnaHQpOwogICAgICAgICBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRy
dWU7CkBAIC01NjE1LDIwICs2NzAwLDQ0IEBACiAgICAgaWYgKGlubmVyLm1vZGUuYmxhbmtMaW5l
KSByZXR1cm4gaW5uZXIubW9kZS5ibGFua0xpbmUoaW5uZXIuc3RhdGUpOwogICB9CiAKLSAgZnVu
Y3Rpb24gcmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgZnVuY3Rpb24gcmVhZFRv
a2VuKG1vZGUsIHN0cmVhbSwgc3RhdGUsIGlubmVyKSB7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDsgaSsrKSB7CisgICAgICBpZiAoaW5uZXIpIGlubmVyWzBdID0gQ29kZU1pcnJvci5pbm5l
ck1vZGUobW9kZSwgc3RhdGUpLm1vZGU7CiAgICAgICB2YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0
cmVhbSwgc3RhdGUpOwogICAgICAgaWYgKHN0cmVhbS5wb3MgPiBzdHJlYW0uc3RhcnQpIHJldHVy
biBzdHlsZTsKICAgICB9CiAgICAgdGhyb3cgbmV3IEVycm9yKCJNb2RlICIgKyBtb2RlLm5hbWUg
KyAiIGZhaWxlZCB0byBhZHZhbmNlIHN0cmVhbS4iKTsKICAgfQogCisgIC8vIFV0aWxpdHkgZm9y
IGdldFRva2VuQXQgYW5kIGdldExpbmVUb2tlbnMKKyAgZnVuY3Rpb24gdGFrZVRva2VuKGNtLCBw
b3MsIHByZWNpc2UsIGFzQXJyYXkpIHsKKyAgICBmdW5jdGlvbiBnZXRPYmooY29weSkgeworICAg
ICAgcmV0dXJuIHtzdGFydDogc3RyZWFtLnN0YXJ0LCBlbmQ6IHN0cmVhbS5wb3MsCisgICAgICAg
ICAgICAgIHN0cmluZzogc3RyZWFtLmN1cnJlbnQoKSwKKyAgICAgICAgICAgICAgdHlwZTogc3R5
bGUgfHwgbnVsbCwKKyAgICAgICAgICAgICAgc3RhdGU6IGNvcHkgPyBjb3B5U3RhdGUoZG9jLm1v
ZGUsIHN0YXRlKSA6IHN0YXRlfTsKKyAgICB9CisKKyAgICB2YXIgZG9jID0gY20uZG9jLCBtb2Rl
ID0gZG9jLm1vZGUsIHN0eWxlOworICAgIHBvcyA9IGNsaXBQb3MoZG9jLCBwb3MpOworICAgIHZh
ciBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKSwgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZShj
bSwgcG9zLmxpbmUsIHByZWNpc2UpOworICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFt
KGxpbmUudGV4dCwgY20ub3B0aW9ucy50YWJTaXplKSwgdG9rZW5zOworICAgIGlmIChhc0FycmF5
KSB0b2tlbnMgPSBbXTsKKyAgICB3aGlsZSAoKGFzQXJyYXkgfHwgc3RyZWFtLnBvcyA8IHBvcy5j
aCkgJiYgIXN0cmVhbS5lb2woKSkgeworICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsK
KyAgICAgIHN0eWxlID0gcmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgc3RhdGUpOworICAgICAgaWYg
KGFzQXJyYXkpIHRva2Vucy5wdXNoKGdldE9iaih0cnVlKSk7CisgICAgfQorICAgIHJldHVybiBh
c0FycmF5ID8gdG9rZW5zIDogZ2V0T2JqKCk7CisgIH0KKwogICAvLyBSdW4gdGhlIGdpdmVuIG1v
ZGUncyBwYXJzZXIgb3ZlciBhIGxpbmUsIGNhbGxpbmcgZiBmb3IgZWFjaCB0b2tlbi4KICAgZnVu
Y3Rpb24gcnVuTW9kZShjbSwgdGV4dCwgbW9kZSwgc3RhdGUsIGYsIGxpbmVDbGFzc2VzLCBmb3Jj
ZVRvRW5kKSB7CiAgICAgdmFyIGZsYXR0ZW5TcGFucyA9IG1vZGUuZmxhdHRlblNwYW5zOwogICAg
IGlmIChmbGF0dGVuU3BhbnMgPT0gbnVsbCkgZmxhdHRlblNwYW5zID0gY20ub3B0aW9ucy5mbGF0
dGVuU3BhbnM7CiAgICAgdmFyIGN1clN0YXJ0ID0gMCwgY3VyU3R5bGUgPSBudWxsOwogICAgIHZh
ciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKHRleHQsIGNtLm9wdGlvbnMudGFiU2l6ZSksIHN0
eWxlOworICAgIHZhciBpbm5lciA9IGNtLm9wdGlvbnMuYWRkTW9kZUNsYXNzICYmIFtudWxsXTsK
ICAgICBpZiAodGV4dCA9PSAiIikgZXh0cmFjdExpbmVDbGFzc2VzKGNhbGxCbGFua0xpbmUobW9k
ZSwgc3RhdGUpLCBsaW5lQ2xhc3Nlcyk7CiAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAg
ICAgIGlmIChzdHJlYW0ucG9zID4gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgpIHsKQEAg
LTU2MzcsMTUgKzY3NDYsMTggQEAKICAgICAgICAgc3RyZWFtLnBvcyA9IHRleHQubGVuZ3RoOwog
ICAgICAgICBzdHlsZSA9IG51bGw7CiAgICAgICB9IGVsc2UgewotICAgICAgICBzdHlsZSA9IGV4
dHJhY3RMaW5lQ2xhc3NlcyhyZWFkVG9rZW4obW9kZSwgc3RyZWFtLCBzdGF0ZSksIGxpbmVDbGFz
c2VzKTsKKyAgICAgICAgc3R5bGUgPSBleHRyYWN0TGluZUNsYXNzZXMocmVhZFRva2VuKG1vZGUs
IHN0cmVhbSwgc3RhdGUsIGlubmVyKSwgbGluZUNsYXNzZXMpOwogICAgICAgfQotICAgICAgaWYg
KGNtLm9wdGlvbnMuYWRkTW9kZUNsYXNzKSB7Ci0gICAgICAgIHZhciBtTmFtZSA9IENvZGVNaXJy
b3IuaW5uZXJNb2RlKG1vZGUsIHN0YXRlKS5tb2RlLm5hbWU7CisgICAgICBpZiAoaW5uZXIpIHsK
KyAgICAgICAgdmFyIG1OYW1lID0gaW5uZXJbMF0ubmFtZTsKICAgICAgICAgaWYgKG1OYW1lKSBz
dHlsZSA9ICJtLSIgKyAoc3R5bGUgPyBtTmFtZSArICIgIiArIHN0eWxlIDogbU5hbWUpOwogICAg
ICAgfQogICAgICAgaWYgKCFmbGF0dGVuU3BhbnMgfHwgY3VyU3R5bGUgIT0gc3R5bGUpIHsKLSAg
ICAgICAgaWYgKGN1clN0YXJ0IDwgc3RyZWFtLnN0YXJ0KSBmKHN0cmVhbS5zdGFydCwgY3VyU3R5
bGUpOwotICAgICAgICBjdXJTdGFydCA9IHN0cmVhbS5zdGFydDsgY3VyU3R5bGUgPSBzdHlsZTsK
KyAgICAgICAgd2hpbGUgKGN1clN0YXJ0IDwgc3RyZWFtLnN0YXJ0KSB7CisgICAgICAgICAgY3Vy
U3RhcnQgPSBNYXRoLm1pbihzdHJlYW0uc3RhcnQsIGN1clN0YXJ0ICsgNTAwMDApOworICAgICAg
ICAgIGYoY3VyU3RhcnQsIGN1clN0eWxlKTsKKyAgICAgICAgfQorICAgICAgICBjdXJTdHlsZSA9
IHN0eWxlOwogICAgICAgfQogICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsKICAgICB9
CkBAIC01Njk5LDEyICs2ODExLDEzIEBACiAgICAgcmV0dXJuIHtzdHlsZXM6IHN0LCBjbGFzc2Vz
OiBsaW5lQ2xhc3Nlcy5iZ0NsYXNzIHx8IGxpbmVDbGFzc2VzLnRleHRDbGFzcyA/IGxpbmVDbGFz
c2VzIDogbnVsbH07CiAgIH0KIAotICBmdW5jdGlvbiBnZXRMaW5lU3R5bGVzKGNtLCBsaW5lKSB7
CisgIGZ1bmN0aW9uIGdldExpbmVTdHlsZXMoY20sIGxpbmUsIHVwZGF0ZUZyb250aWVyKSB7CiAg
ICAgaWYgKCFsaW5lLnN0eWxlcyB8fCBsaW5lLnN0eWxlc1swXSAhPSBjbS5zdGF0ZS5tb2RlR2Vu
KSB7CiAgICAgICB2YXIgcmVzdWx0ID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgbGluZS5zdGF0
ZUFmdGVyID0gZ2V0U3RhdGVCZWZvcmUoY20sIGxpbmVObyhsaW5lKSkpOwogICAgICAgbGluZS5z
dHlsZXMgPSByZXN1bHQuc3R5bGVzOwogICAgICAgaWYgKHJlc3VsdC5jbGFzc2VzKSBsaW5lLnN0
eWxlQ2xhc3NlcyA9IHJlc3VsdC5jbGFzc2VzOwogICAgICAgZWxzZSBpZiAobGluZS5zdHlsZUNs
YXNzZXMpIGxpbmUuc3R5bGVDbGFzc2VzID0gbnVsbDsKKyAgICAgIGlmICh1cGRhdGVGcm9udGll
ciA9PT0gY20uZG9jLmZyb250aWVyKSBjbS5kb2MuZnJvbnRpZXIrKzsKICAgICB9CiAgICAgcmV0
dXJuIGxpbmUuc3R5bGVzOwogICB9CkBAIC01NzQ0LDcgKzY4NTcsOSBAQAogICAgIC8vIGlzIG5l
ZWRlZCBvbiBXZWJraXQgdG8gYmUgYWJsZSB0byBnZXQgbGluZS1sZXZlbCBib3VuZGluZwogICAg
IC8vIHJlY3RhbmdsZXMgZm9yIGl0IChpbiBtZWFzdXJlQ2hhcikuCiAgICAgdmFyIGNvbnRlbnQg
PSBlbHQoInNwYW4iLCBudWxsLCBudWxsLCB3ZWJraXQgPyAicGFkZGluZy1yaWdodDogLjFweCIg
OiBudWxsKTsKLSAgICB2YXIgYnVpbGRlciA9IHtwcmU6IGVsdCgicHJlIiwgW2NvbnRlbnRdKSwg
Y29udGVudDogY29udGVudCwgY29sOiAwLCBwb3M6IDAsIGNtOiBjbX07CisgICAgdmFyIGJ1aWxk
ZXIgPSB7cHJlOiBlbHQoInByZSIsIFtjb250ZW50XSwgIkNvZGVNaXJyb3ItbGluZSIpLCBjb250
ZW50OiBjb250ZW50LAorICAgICAgICAgICAgICAgICAgIGNvbDogMCwgcG9zOiAwLCBjbTogY20s
CisgICAgICAgICAgICAgICAgICAgc3BsaXRTcGFjZXM6IChpZSB8fCB3ZWJraXQpICYmIGNtLmdl
dE9wdGlvbigibGluZVdyYXBwaW5nIil9OwogICAgIGxpbmVWaWV3Lm1lYXN1cmUgPSB7fTsKIAog
ICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgbG9naWNhbCBsaW5lcyB0aGF0IG1ha2UgdXAgdGhpcyB2
aXN1YWwgbGluZS4KQEAgLTU3NTQsMTIgKzY4NjksMTEgQEAKICAgICAgIGJ1aWxkZXIuYWRkVG9r
ZW4gPSBidWlsZFRva2VuOwogICAgICAgLy8gT3B0aW9uYWxseSB3aXJlIGluIHNvbWUgaGFja3Mg
aW50byB0aGUgdG9rZW4tcmVuZGVyaW5nCiAgICAgICAvLyBhbGdvcml0aG0sIHRvIGRlYWwgd2l0
aCBicm93c2VyIHF1aXJrcy4KLSAgICAgIGlmICgoaWUgfHwgd2Via2l0KSAmJiBjbS5nZXRPcHRp
b24oImxpbmVXcmFwcGluZyIpKQotICAgICAgICBidWlsZGVyLmFkZFRva2VuID0gYnVpbGRUb2tl
blNwbGl0U3BhY2VzKGJ1aWxkZXIuYWRkVG9rZW4pOwogICAgICAgaWYgKGhhc0JhZEJpZGlSZWN0
cyhjbS5kaXNwbGF5Lm1lYXN1cmUpICYmIChvcmRlciA9IGdldE9yZGVyKGxpbmUpKSkKICAgICAg
ICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW5CYWRCaWRpKGJ1aWxkZXIuYWRkVG9rZW4s
IG9yZGVyKTsKICAgICAgIGJ1aWxkZXIubWFwID0gW107Ci0gICAgICBpbnNlcnRMaW5lQ29udGVu
dChsaW5lLCBidWlsZGVyLCBnZXRMaW5lU3R5bGVzKGNtLCBsaW5lKSk7CisgICAgICB2YXIgYWxs
b3dGcm9udGllclVwZGF0ZSA9IGxpbmVWaWV3ICE9IGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJl
ZCAmJiBsaW5lTm8obGluZSk7CisgICAgICBpbnNlcnRMaW5lQ29udGVudChsaW5lLCBidWlsZGVy
LCBnZXRMaW5lU3R5bGVzKGNtLCBsaW5lLCBhbGxvd0Zyb250aWVyVXBkYXRlKSk7CiAgICAgICBp
ZiAobGluZS5zdHlsZUNsYXNzZXMpIHsKICAgICAgICAgaWYgKGxpbmUuc3R5bGVDbGFzc2VzLmJn
Q2xhc3MpCiAgICAgICAgICAgYnVpbGRlci5iZ0NsYXNzID0gam9pbkNsYXNzZXMobGluZS5zdHls
ZUNsYXNzZXMuYmdDbGFzcywgYnVpbGRlci5iZ0NsYXNzIHx8ICIiKTsKQEAgLTU3ODEsMjggKzY4
OTUsMzUgQEAKICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBTZWUgaXNzdWUgIzI5MDEKKyAgICBp
ZiAod2Via2l0ICYmIC9cYmNtLXRhYlxiLy50ZXN0KGJ1aWxkZXIuY29udGVudC5sYXN0Q2hpbGQu
Y2xhc3NOYW1lKSkKKyAgICAgIGJ1aWxkZXIuY29udGVudC5jbGFzc05hbWUgPSAiY20tdGFiLXdy
YXAtaGFjayI7CisKICAgICBzaWduYWwoY20sICJyZW5kZXJMaW5lIiwgY20sIGxpbmVWaWV3Lmxp
bmUsIGJ1aWxkZXIucHJlKTsKICAgICBpZiAoYnVpbGRlci5wcmUuY2xhc3NOYW1lKQogICAgICAg
YnVpbGRlci50ZXh0Q2xhc3MgPSBqb2luQ2xhc3NlcyhidWlsZGVyLnByZS5jbGFzc05hbWUsIGJ1
aWxkZXIudGV4dENsYXNzIHx8ICIiKTsKKwogICAgIHJldHVybiBidWlsZGVyOwogICB9CiAKICAg
ZnVuY3Rpb24gZGVmYXVsdFNwZWNpYWxDaGFyUGxhY2Vob2xkZXIoY2gpIHsKICAgICB2YXIgdG9r
ZW4gPSBlbHQoInNwYW4iLCAiXHUyMDIyIiwgImNtLWludmFsaWRjaGFyIik7CiAgICAgdG9rZW4u
dGl0bGUgPSAiXFx1IiArIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpOworICAgIHRva2Vu
LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIHRva2VuLnRpdGxlKTsKICAgICByZXR1cm4gdG9r
ZW47CiAgIH0KIAogICAvLyBCdWlsZCB1cCB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIGZvciBhIHNp
bmdsZSB0b2tlbiwgYW5kIGFkZCBpdCB0bwogICAvLyB0aGUgbGluZSBtYXAuIFRha2VzIGNhcmUg
dG8gcmVuZGVyIHNwZWNpYWwgY2hhcmFjdGVycyBzZXBhcmF0ZWx5LgotICBmdW5jdGlvbiBidWls
ZFRva2VuKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUp
IHsKKyAgZnVuY3Rpb24gYnVpbGRUb2tlbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHls
ZSwgZW5kU3R5bGUsIHRpdGxlLCBjc3MpIHsKICAgICBpZiAoIXRleHQpIHJldHVybjsKLSAgICB2
YXIgc3BlY2lhbCA9IGJ1aWxkZXIuY20ub3B0aW9ucy5zcGVjaWFsQ2hhcnMsIG11c3RXcmFwID0g
ZmFsc2U7CisgICAgdmFyIGRpc3BsYXlUZXh0ID0gYnVpbGRlci5zcGxpdFNwYWNlcyA/IHRleHQu
cmVwbGFjZSgvIHszLH0vZywgc3BsaXRTcGFjZXMpIDogdGV4dDsKKyAgICB2YXIgc3BlY2lhbCA9
IGJ1aWxkZXIuY20uc3RhdGUuc3BlY2lhbENoYXJzLCBtdXN0V3JhcCA9IGZhbHNlOwogICAgIGlm
ICghc3BlY2lhbC50ZXN0KHRleHQpKSB7CiAgICAgICBidWlsZGVyLmNvbCArPSB0ZXh0Lmxlbmd0
aDsKLSAgICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7Cisg
ICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRpc3BsYXlUZXh0KTsK
ICAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgdGV4dC5s
ZW5ndGgsIGNvbnRlbnQpOwotICAgICAgaWYgKGllX3VwdG84KSBtdXN0V3JhcCA9IHRydWU7Cisg
ICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkpIG11c3RXcmFwID0gdHJ1ZTsKICAgICAgIGJ1
aWxkZXIucG9zICs9IHRleHQubGVuZ3RoOwogICAgIH0gZWxzZSB7CiAgICAgICB2YXIgY29udGVu
dCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgcG9zID0gMDsKQEAgLTU4MTEs
OCArNjkzMiw4IEBACiAgICAgICAgIHZhciBtID0gc3BlY2lhbC5leGVjKHRleHQpOwogICAgICAg
ICB2YXIgc2tpcHBlZCA9IG0gPyBtLmluZGV4IC0gcG9zIDogdGV4dC5sZW5ndGggLSBwb3M7CiAg
ICAgICAgIGlmIChza2lwcGVkKSB7Ci0gICAgICAgICAgdmFyIHR4dCA9IGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKHRleHQuc2xpY2UocG9zLCBwb3MgKyBza2lwcGVkKSk7Ci0gICAgICAgICAgaWYg
KGllX3VwdG84KSBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIFt0eHRdKSk7CisgICAg
ICAgICAgdmFyIHR4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRpc3BsYXlUZXh0LnNsaWNl
KHBvcywgcG9zICsgc2tpcHBlZCkpOworICAgICAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwg
OSkgY29udGVudC5hcHBlbmRDaGlsZChlbHQoInNwYW4iLCBbdHh0XSkpOwogICAgICAgICAgIGVs
c2UgY29udGVudC5hcHBlbmRDaGlsZCh0eHQpOwogICAgICAgICAgIGJ1aWxkZXIubWFwLnB1c2go
YnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgc2tpcHBlZCwgdHh0KTsKICAgICAgICAgICBidWls
ZGVyLmNvbCArPSBza2lwcGVkOwpAQCAtNTgyMywxMCArNjk0NCwxNyBAQAogICAgICAgICBpZiAo
bVswXSA9PSAiXHQiKSB7CiAgICAgICAgICAgdmFyIHRhYlNpemUgPSBidWlsZGVyLmNtLm9wdGlv
bnMudGFiU2l6ZSwgdGFiV2lkdGggPSB0YWJTaXplIC0gYnVpbGRlci5jb2wgJSB0YWJTaXplOwog
ICAgICAgICAgIHZhciB0eHQgPSBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIHNwYWNl
U3RyKHRhYldpZHRoKSwgImNtLXRhYiIpKTsKKyAgICAgICAgICB0eHQuc2V0QXR0cmlidXRlKCJy
b2xlIiwgInByZXNlbnRhdGlvbiIpOworICAgICAgICAgIHR4dC5zZXRBdHRyaWJ1dGUoImNtLXRl
eHQiLCAiXHQiKTsKICAgICAgICAgICBidWlsZGVyLmNvbCArPSB0YWJXaWR0aDsKKyAgICAgICAg
fSBlbHNlIGlmIChtWzBdID09ICJcciIgfHwgbVswXSA9PSAiXG4iKSB7CisgICAgICAgICAgdmFy
IHR4dCA9IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgbVswXSA9PSAiXHIiID8gIuKQ
jSIgOiAi4pCkIiwgImNtLWludmFsaWRjaGFyIikpOworICAgICAgICAgIHR4dC5zZXRBdHRyaWJ1
dGUoImNtLXRleHQiLCBtWzBdKTsKKyAgICAgICAgICBidWlsZGVyLmNvbCArPSAxOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgIHZhciB0eHQgPSBidWlsZGVyLmNtLm9wdGlvbnMuc3BlY2lh
bENoYXJQbGFjZWhvbGRlcihtWzBdKTsKLSAgICAgICAgICBpZiAoaWVfdXB0bzgpIGNvbnRlbnQu
YXBwZW5kQ2hpbGQoZWx0KCJzcGFuIiwgW3R4dF0pKTsKKyAgICAgICAgICB0eHQuc2V0QXR0cmli
dXRlKCJjbS10ZXh0IiwgbVswXSk7CisgICAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5
KSBjb250ZW50LmFwcGVuZENoaWxkKGVsdCgic3BhbiIsIFt0eHRdKSk7CiAgICAgICAgICAgZWxz
ZSBjb250ZW50LmFwcGVuZENoaWxkKHR4dCk7CiAgICAgICAgICAgYnVpbGRlci5jb2wgKz0gMTsK
ICAgICAgICAgfQpAQCAtNTgzNCwzMyArNjk2MiwyOCBAQAogICAgICAgICBidWlsZGVyLnBvcysr
OwogICAgICAgfQogICAgIH0KLSAgICBpZiAoc3R5bGUgfHwgc3RhcnRTdHlsZSB8fCBlbmRTdHls
ZSB8fCBtdXN0V3JhcCkgeworICAgIGlmIChzdHlsZSB8fCBzdGFydFN0eWxlIHx8IGVuZFN0eWxl
IHx8IG11c3RXcmFwIHx8IGNzcykgewogICAgICAgdmFyIGZ1bGxTdHlsZSA9IHN0eWxlIHx8ICIi
OwogICAgICAgaWYgKHN0YXJ0U3R5bGUpIGZ1bGxTdHlsZSArPSBzdGFydFN0eWxlOwogICAgICAg
aWYgKGVuZFN0eWxlKSBmdWxsU3R5bGUgKz0gZW5kU3R5bGU7Ci0gICAgICB2YXIgdG9rZW4gPSBl
bHQoInNwYW4iLCBbY29udGVudF0sIGZ1bGxTdHlsZSk7CisgICAgICB2YXIgdG9rZW4gPSBlbHQo
InNwYW4iLCBbY29udGVudF0sIGZ1bGxTdHlsZSwgY3NzKTsKICAgICAgIGlmICh0aXRsZSkgdG9r
ZW4udGl0bGUgPSB0aXRsZTsKICAgICAgIHJldHVybiBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hp
bGQodG9rZW4pOwogICAgIH0KICAgICBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoY29udGVu
dCk7CiAgIH0KIAotICBmdW5jdGlvbiBidWlsZFRva2VuU3BsaXRTcGFjZXMoaW5uZXIpIHsKLSAg
ICBmdW5jdGlvbiBzcGxpdChvbGQpIHsKLSAgICAgIHZhciBvdXQgPSAiICI7Ci0gICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG9sZC5sZW5ndGggLSAyOyArK2kpIG91dCArPSBpICUgMiA/ICIgIiA6
ICJcdTAwYTAiOwotICAgICAgb3V0ICs9ICIgIjsKLSAgICAgIHJldHVybiBvdXQ7Ci0gICAgfQot
ICAgIHJldHVybiBmdW5jdGlvbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5k
U3R5bGUsIHRpdGxlKSB7Ci0gICAgICBpbm5lcihidWlsZGVyLCB0ZXh0LnJlcGxhY2UoLyB7Myx9
L2csIHNwbGl0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSk7Ci0gICAgfTsK
KyAgZnVuY3Rpb24gc3BsaXRTcGFjZXMob2xkKSB7CisgICAgdmFyIG91dCA9ICIgIjsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG9sZC5sZW5ndGggLSAyOyArK2kpIG91dCArPSBpICUgMiA/ICIg
IiA6ICJcdTAwYTAiOworICAgIG91dCArPSAiICI7CisgICAgcmV0dXJuIG91dDsKICAgfQogCiAg
IC8vIFdvcmsgYXJvdW5kIG5vbnNlbnNlIGRpbWVuc2lvbnMgYmVpbmcgcmVwb3J0ZWQgZm9yIHN0
cmV0Y2hlcyBvZgogICAvLyByaWdodC10by1sZWZ0IHRleHQuCiAgIGZ1bmN0aW9uIGJ1aWxkVG9r
ZW5CYWRCaWRpKGlubmVyLCBvcmRlcikgewotICAgIHJldHVybiBmdW5jdGlvbihidWlsZGVyLCB0
ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxlKSB7CisgICAgcmV0dXJuIGZ1
bmN0aW9uKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUs
IGNzcykgewogICAgICAgc3R5bGUgPSBzdHlsZSA/IHN0eWxlICsgIiBjbS1mb3JjZS1ib3JkZXIi
IDogImNtLWZvcmNlLWJvcmRlciI7CiAgICAgICB2YXIgc3RhcnQgPSBidWlsZGVyLnBvcywgZW5k
ID0gc3RhcnQgKyB0ZXh0Lmxlbmd0aDsKICAgICAgIGZvciAoOzspIHsKQEAgLTU4NjksOCArNjk5
Miw4IEBACiAgICAgICAgICAgdmFyIHBhcnQgPSBvcmRlcltpXTsKICAgICAgICAgICBpZiAocGFy
dC50byA+IHN0YXJ0ICYmIHBhcnQuZnJvbSA8PSBzdGFydCkgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKHBhcnQudG8gPj0gZW5kKSByZXR1cm4gaW5uZXIoYnVpbGRlciwgdGV4dCwgc3R5
bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSk7Ci0gICAgICAgIGlubmVyKGJ1aWxkZXIs
IHRleHQuc2xpY2UoMCwgcGFydC50byAtIHN0YXJ0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIG51bGws
IHRpdGxlKTsKKyAgICAgICAgaWYgKHBhcnQudG8gPj0gZW5kKSByZXR1cm4gaW5uZXIoYnVpbGRl
ciwgdGV4dCwgc3R5bGUsIHN0YXJ0U3R5bGUsIGVuZFN0eWxlLCB0aXRsZSwgY3NzKTsKKyAgICAg
ICAgaW5uZXIoYnVpbGRlciwgdGV4dC5zbGljZSgwLCBwYXJ0LnRvIC0gc3RhcnQpLCBzdHlsZSwg
c3RhcnRTdHlsZSwgbnVsbCwgdGl0bGUsIGNzcyk7CiAgICAgICAgIHN0YXJ0U3R5bGUgPSBudWxs
OwogICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZShwYXJ0LnRvIC0gc3RhcnQpOwogICAgICAgICBz
dGFydCA9IHBhcnQudG87CkBAIC01ODgwLDggKzcwMDMsMTQgQEAKIAogICBmdW5jdGlvbiBidWls
ZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgc2l6ZSwgbWFya2VyLCBpZ25vcmVXaWRnZXQpIHsKICAg
ICB2YXIgd2lkZ2V0ID0gIWlnbm9yZVdpZGdldCAmJiBtYXJrZXIud2lkZ2V0Tm9kZTsKKyAgICBp
ZiAod2lkZ2V0KSBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyArIHNp
emUsIHdpZGdldCk7CisgICAgaWYgKCFpZ25vcmVXaWRnZXQgJiYgYnVpbGRlci5jbS5kaXNwbGF5
LmlucHV0Lm5lZWRzQ29udGVudEF0dHJpYnV0ZSkgeworICAgICAgaWYgKCF3aWRnZXQpCisgICAg
ICAgIHdpZGdldCA9IGJ1aWxkZXIuY29udGVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIikpOworICAgICAgd2lkZ2V0LnNldEF0dHJpYnV0ZSgiY20tbWFya2VyIiwg
bWFya2VyLmlkKTsKKyAgICB9CiAgICAgaWYgKHdpZGdldCkgewotICAgICAgYnVpbGRlci5tYXAu
cHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyBzaXplLCB3aWRnZXQpOworICAgICAgYnVp
bGRlci5jbS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUod2lkZ2V0KTsKICAgICAgIGJ1aWxk
ZXIuY29udGVudC5hcHBlbmRDaGlsZCh3aWRnZXQpOwogICAgIH0KICAgICBidWlsZGVyLnBvcyAr
PSBzaXplOwpAQCAtNTg5NywxOCArNzAyNiwyNCBAQAogICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIHZhciBsZW4gPSBhbGxUZXh0Lmxlbmd0aCwgcG9zID0gMCwgaSA9IDEsIHRleHQgPSAiIiwg
c3R5bGU7CisgICAgdmFyIGxlbiA9IGFsbFRleHQubGVuZ3RoLCBwb3MgPSAwLCBpID0gMSwgdGV4
dCA9ICIiLCBzdHlsZSwgY3NzOwogICAgIHZhciBuZXh0Q2hhbmdlID0gMCwgc3BhblN0eWxlLCBz
cGFuRW5kU3R5bGUsIHNwYW5TdGFydFN0eWxlLCB0aXRsZSwgY29sbGFwc2VkOwogICAgIGZvciAo
OzspIHsKICAgICAgIGlmIChuZXh0Q2hhbmdlID09IHBvcykgeyAvLyBVcGRhdGUgY3VycmVudCBt
YXJrZXIgc2V0Ci0gICAgICAgIHNwYW5TdHlsZSA9IHNwYW5FbmRTdHlsZSA9IHNwYW5TdGFydFN0
eWxlID0gdGl0bGUgPSAiIjsKKyAgICAgICAgc3BhblN0eWxlID0gc3BhbkVuZFN0eWxlID0gc3Bh
blN0YXJ0U3R5bGUgPSB0aXRsZSA9IGNzcyA9ICIiOwogICAgICAgICBjb2xsYXBzZWQgPSBudWxs
OyBuZXh0Q2hhbmdlID0gSW5maW5pdHk7CiAgICAgICAgIHZhciBmb3VuZEJvb2ttYXJrcyA9IFtd
OwogICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNwYW5zLmxlbmd0aDsgKytqKSB7CiAgICAg
ICAgICAgdmFyIHNwID0gc3BhbnNbal0sIG0gPSBzcC5tYXJrZXI7Ci0gICAgICAgICAgaWYgKHNw
LmZyb20gPD0gcG9zICYmIChzcC50byA9PSBudWxsIHx8IHNwLnRvID4gcG9zKSkgewotICAgICAg
ICAgICAgaWYgKHNwLnRvICE9IG51bGwgJiYgbmV4dENoYW5nZSA+IHNwLnRvKSB7IG5leHRDaGFu
Z2UgPSBzcC50bzsgc3BhbkVuZFN0eWxlID0gIiI7IH0KKyAgICAgICAgICBpZiAobS50eXBlID09
ICJib29rbWFyayIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS53aWRnZXROb2RlKSB7CisgICAgICAg
ICAgICBmb3VuZEJvb2ttYXJrcy5wdXNoKG0pOworICAgICAgICAgIH0gZWxzZSBpZiAoc3AuZnJv
bSA8PSBwb3MgJiYgKHNwLnRvID09IG51bGwgfHwgc3AudG8gPiBwb3MgfHwgbS5jb2xsYXBzZWQg
JiYgc3AudG8gPT0gcG9zICYmIHNwLmZyb20gPT0gcG9zKSkgeworICAgICAgICAgICAgaWYgKHNw
LnRvICE9IG51bGwgJiYgc3AudG8gIT0gcG9zICYmIG5leHRDaGFuZ2UgPiBzcC50bykgeworICAg
ICAgICAgICAgICBuZXh0Q2hhbmdlID0gc3AudG87CisgICAgICAgICAgICAgIHNwYW5FbmRTdHls
ZSA9ICIiOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG0uY2xhc3NOYW1lKSBzcGFu
U3R5bGUgKz0gIiAiICsgbS5jbGFzc05hbWU7CisgICAgICAgICAgICBpZiAobS5jc3MpIGNzcyA9
IG0uY3NzOwogICAgICAgICAgICAgaWYgKG0uc3RhcnRTdHlsZSAmJiBzcC5mcm9tID09IHBvcykg
c3BhblN0YXJ0U3R5bGUgKz0gIiAiICsgbS5zdGFydFN0eWxlOwogICAgICAgICAgICAgaWYgKG0u
ZW5kU3R5bGUgJiYgc3AudG8gPT0gbmV4dENoYW5nZSkgc3BhbkVuZFN0eWxlICs9ICIgIiArIG0u
ZW5kU3R5bGU7CiAgICAgICAgICAgICBpZiAobS50aXRsZSAmJiAhdGl0bGUpIHRpdGxlID0gbS50
aXRsZTsKQEAgLTU5MTcsMTIgKzcwNTIsMTIgQEAKICAgICAgICAgICB9IGVsc2UgaWYgKHNwLmZy
b20gPiBwb3MgJiYgbmV4dENoYW5nZSA+IHNwLmZyb20pIHsKICAgICAgICAgICAgIG5leHRDaGFu
Z2UgPSBzcC5mcm9tOwogICAgICAgICAgIH0KLSAgICAgICAgICBpZiAobS50eXBlID09ICJib29r
bWFyayIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS53aWRnZXROb2RlKSBmb3VuZEJvb2ttYXJrcy5w
dXNoKG0pOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb2xsYXBzZWQgJiYgKGNvbGxhcHNlZC5m
cm9tIHx8IDApID09IHBvcykgewogICAgICAgICAgIGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVy
LCAoY29sbGFwc2VkLnRvID09IG51bGwgPyBsZW4gKyAxIDogY29sbGFwc2VkLnRvKSAtIHBvcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkLm1hcmtlciwgY29sbGFwc2Vk
LmZyb20gPT0gbnVsbCk7CiAgICAgICAgICAgaWYgKGNvbGxhcHNlZC50byA9PSBudWxsKSByZXR1
cm47CisgICAgICAgICAgaWYgKGNvbGxhcHNlZC50byA9PSBwb3MpIGNvbGxhcHNlZCA9IGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIGlmICghY29sbGFwc2VkICYmIGZvdW5kQm9va21hcmtzLmxl
bmd0aCkgZm9yICh2YXIgaiA9IDA7IGogPCBmb3VuZEJvb2ttYXJrcy5sZW5ndGg7ICsraikKICAg
ICAgICAgICBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgMCwgZm91bmRCb29rbWFya3Nbal0p
OwpAQCAtNTkzNiw3ICs3MDcxLDcgQEAKICAgICAgICAgICBpZiAoIWNvbGxhcHNlZCkgewogICAg
ICAgICAgICAgdmFyIHRva2VuVGV4dCA9IGVuZCA+IHVwdG8gPyB0ZXh0LnNsaWNlKDAsIHVwdG8g
LSBwb3MpIDogdGV4dDsKICAgICAgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgdG9r
ZW5UZXh0LCBzdHlsZSA/IHN0eWxlICsgc3BhblN0eWxlIDogc3BhblN0eWxlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzcGFuU3RhcnRTdHlsZSwgcG9zICsgdG9rZW5UZXh0Lmxlbmd0
aCA9PSBuZXh0Q2hhbmdlID8gc3BhbkVuZFN0eWxlIDogIiIsIHRpdGxlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3BhblN0YXJ0U3R5bGUsIHBvcyArIHRva2VuVGV4dC5sZW5ndGgg
PT0gbmV4dENoYW5nZSA/IHNwYW5FbmRTdHlsZSA6ICIiLCB0aXRsZSwgY3NzKTsKICAgICAgICAg
ICB9CiAgICAgICAgICAgaWYgKGVuZCA+PSB1cHRvKSB7dGV4dCA9IHRleHQuc2xpY2UodXB0byAt
IHBvcyk7IHBvcyA9IHVwdG87IGJyZWFrO30KICAgICAgICAgICBwb3MgPSBlbmQ7CkBAIC01OTY1
LDE3ICs3MTAwLDI0IEBACiAgICAgICB1cGRhdGVMaW5lKGxpbmUsIHRleHQsIHNwYW5zLCBlc3Rp
bWF0ZUhlaWdodCk7CiAgICAgICBzaWduYWxMYXRlcihsaW5lLCAiY2hhbmdlIiwgbGluZSwgY2hh
bmdlKTsKICAgICB9CisgICAgZnVuY3Rpb24gbGluZXNGb3Ioc3RhcnQsIGVuZCkgeworICAgICAg
Zm9yICh2YXIgaSA9IHN0YXJ0LCByZXN1bHQgPSBbXTsgaSA8IGVuZDsgKytpKQorICAgICAgICBy
ZXN1bHQucHVzaChuZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1hdGVIZWlnaHQp
KTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCiAgICAgdmFyIGZyb20gPSBjaGFuZ2Uu
ZnJvbSwgdG8gPSBjaGFuZ2UudG8sIHRleHQgPSBjaGFuZ2UudGV4dDsKICAgICB2YXIgZmlyc3RM
aW5lID0gZ2V0TGluZShkb2MsIGZyb20ubGluZSksIGxhc3RMaW5lID0gZ2V0TGluZShkb2MsIHRv
LmxpbmUpOwogICAgIHZhciBsYXN0VGV4dCA9IGxzdCh0ZXh0KSwgbGFzdFNwYW5zID0gc3BhbnNG
b3IodGV4dC5sZW5ndGggLSAxKSwgbmxpbmVzID0gdG8ubGluZSAtIGZyb20ubGluZTsKIAogICAg
IC8vIEFkanVzdCB0aGUgbGluZSBzdHJ1Y3R1cmUKLSAgICBpZiAoaXNXaG9sZUxpbmVVcGRhdGUo
ZG9jLCBjaGFuZ2UpKSB7CisgICAgaWYgKGNoYW5nZS5mdWxsKSB7CisgICAgICBkb2MuaW5zZXJ0
KDAsIGxpbmVzRm9yKDAsIHRleHQubGVuZ3RoKSk7CisgICAgICBkb2MucmVtb3ZlKHRleHQubGVu
Z3RoLCBkb2Muc2l6ZSAtIHRleHQubGVuZ3RoKTsKKyAgICB9IGVsc2UgaWYgKGlzV2hvbGVMaW5l
VXBkYXRlKGRvYywgY2hhbmdlKSkgewogICAgICAgLy8gVGhpcyBpcyBhIHdob2xlLWxpbmUgcmVw
bGFjZS4gVHJlYXRlZCBzcGVjaWFsbHkgdG8gbWFrZQogICAgICAgLy8gc3VyZSBsaW5lIG9iamVj
dHMgbW92ZSB0aGUgd2F5IHRoZXkgYXJlIHN1cHBvc2VkIHRvLgotICAgICAgZm9yICh2YXIgaSA9
IDAsIGFkZGVkID0gW107IGkgPCB0ZXh0Lmxlbmd0aCAtIDE7ICsraSkKLSAgICAgICAgYWRkZWQu
cHVzaChuZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1hdGVIZWlnaHQpKTsKKyAg
ICAgIHZhciBhZGRlZCA9IGxpbmVzRm9yKDAsIHRleHQubGVuZ3RoIC0gMSk7CiAgICAgICB1cGRh
dGUobGFzdExpbmUsIGxhc3RMaW5lLnRleHQsIGxhc3RTcGFucyk7CiAgICAgICBpZiAobmxpbmVz
KSBkb2MucmVtb3ZlKGZyb20ubGluZSwgbmxpbmVzKTsKICAgICAgIGlmIChhZGRlZC5sZW5ndGgp
IGRvYy5pbnNlcnQoZnJvbS5saW5lLCBhZGRlZCk7CkBAIC01OTgzLDggKzcxMjUsNyBAQAogICAg
ICAgaWYgKHRleHQubGVuZ3RoID09IDEpIHsKICAgICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmly
c3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyBsYXN0VGV4dCArIGZpcnN0TGluZS50ZXh0
LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAo
dmFyIGFkZGVkID0gW10sIGkgPSAxOyBpIDwgdGV4dC5sZW5ndGggLSAxOyArK2kpCi0gICAgICAg
ICAgYWRkZWQucHVzaChuZXcgTGluZSh0ZXh0W2ldLCBzcGFuc0ZvcihpKSwgZXN0aW1hdGVIZWln
aHQpKTsKKyAgICAgICAgdmFyIGFkZGVkID0gbGluZXNGb3IoMSwgdGV4dC5sZW5ndGggLSAxKTsK
ICAgICAgICAgYWRkZWQucHVzaChuZXcgTGluZShsYXN0VGV4dCArIGZpcnN0TGluZS50ZXh0LnNs
aWNlKHRvLmNoKSwgbGFzdFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkpOwogICAgICAgICB1cGRhdGUo
Zmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIHRleHRbMF0sIHNw
YW5zRm9yKDApKTsKICAgICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCk7CkBA
IC01OTk1LDggKzcxMzYsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICB1cGRhdGUoZmlyc3RMaW5l
LCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIHRleHRbMF0sIHNwYW5zRm9yKDAp
KTsKICAgICAgIHVwZGF0ZShsYXN0TGluZSwgbGFzdFRleHQgKyBsYXN0TGluZS50ZXh0LnNsaWNl
KHRvLmNoKSwgbGFzdFNwYW5zKTsKLSAgICAgIGZvciAodmFyIGkgPSAxLCBhZGRlZCA9IFtdOyBp
IDwgdGV4dC5sZW5ndGggLSAxOyArK2kpCi0gICAgICAgIGFkZGVkLnB1c2gobmV3IExpbmUodGV4
dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7CisgICAgICB2YXIgYWRkZWQgPSBs
aW5lc0ZvcigxLCB0ZXh0Lmxlbmd0aCAtIDEpOwogICAgICAgaWYgKG5saW5lcyA+IDEpIGRvYy5y
ZW1vdmUoZnJvbS5saW5lICsgMSwgbmxpbmVzIC0gMSk7CiAgICAgICBkb2MuaW5zZXJ0KGZyb20u
bGluZSArIDEsIGFkZGVkKTsKICAgICB9CkBAIC02MTU2LDggKzcyOTYsOCBAQAogICB9OwogCiAg
IHZhciBuZXh0RG9jSWQgPSAwOwotICB2YXIgRG9jID0gQ29kZU1pcnJvci5Eb2MgPSBmdW5jdGlv
bih0ZXh0LCBtb2RlLCBmaXJzdExpbmUpIHsKLSAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRG9j
KSkgcmV0dXJuIG5ldyBEb2ModGV4dCwgbW9kZSwgZmlyc3RMaW5lKTsKKyAgdmFyIERvYyA9IENv
ZGVNaXJyb3IuRG9jID0gZnVuY3Rpb24odGV4dCwgbW9kZSwgZmlyc3RMaW5lLCBsaW5lU2VwKSB7
CisgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERvYykpIHJldHVybiBuZXcgRG9jKHRleHQsIG1v
ZGUsIGZpcnN0TGluZSwgbGluZVNlcCk7CiAgICAgaWYgKGZpcnN0TGluZSA9PSBudWxsKSBmaXJz
dExpbmUgPSAwOwogCiAgICAgQnJhbmNoQ2h1bmsuY2FsbCh0aGlzLCBbbmV3IExlYWZDaHVuayhb
bmV3IExpbmUoIiIsIG51bGwpXSldKTsKQEAgLTYxNzEsOCArNzMxMSw5IEBACiAgICAgdGhpcy5o
aXN0b3J5ID0gbmV3IEhpc3RvcnkobnVsbCk7CiAgICAgdGhpcy5pZCA9ICsrbmV4dERvY0lkOwog
ICAgIHRoaXMubW9kZU9wdGlvbiA9IG1vZGU7CisgICAgdGhpcy5saW5lU2VwID0gbGluZVNlcDsK
IAotICAgIGlmICh0eXBlb2YgdGV4dCA9PSAic3RyaW5nIikgdGV4dCA9IHNwbGl0TGluZXModGV4
dCk7CisgICAgaWYgKHR5cGVvZiB0ZXh0ID09ICJzdHJpbmciKSB0ZXh0ID0gdGhpcy5zcGxpdExp
bmVzKHRleHQpOwogICAgIHVwZGF0ZURvYyh0aGlzLCB7ZnJvbTogc3RhcnQsIHRvOiBzdGFydCwg
dGV4dDogdGV4dH0pOwogICAgIHNldFNlbGVjdGlvbih0aGlzLCBzaW1wbGVTZWxlY3Rpb24oc3Rh
cnQpLCBzZWxfZG9udFNjcm9sbCk7CiAgIH07CkBAIC02MjAyLDEyICs3MzQzLDEyIEBACiAgICAg
Z2V0VmFsdWU6IGZ1bmN0aW9uKGxpbmVTZXApIHsKICAgICAgIHZhciBsaW5lcyA9IGdldExpbmVz
KHRoaXMsIHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUpOwogICAgICAgaWYgKGxp
bmVTZXAgPT09IGZhbHNlKSByZXR1cm4gbGluZXM7Ci0gICAgICByZXR1cm4gbGluZXMuam9pbihs
aW5lU2VwIHx8ICJcbiIpOworICAgICAgcmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCB0aGlz
LmxpbmVTZXBhcmF0b3IoKSk7CiAgICAgfSwKICAgICBzZXRWYWx1ZTogZG9jTWV0aG9kT3AoZnVu
Y3Rpb24oY29kZSkgewogICAgICAgdmFyIHRvcCA9IFBvcyh0aGlzLmZpcnN0LCAwKSwgbGFzdCA9
IHRoaXMuZmlyc3QgKyB0aGlzLnNpemUgLSAxOwogICAgICAgbWFrZUNoYW5nZSh0aGlzLCB7ZnJv
bTogdG9wLCB0bzogUG9zKGxhc3QsIGdldExpbmUodGhpcywgbGFzdCkudGV4dC5sZW5ndGgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3BsaXRMaW5lcyhjb2RlKSwgb3JpZ2luOiAi
c2V0VmFsdWUifSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnNw
bGl0TGluZXMoY29kZSksIG9yaWdpbjogInNldFZhbHVlIiwgZnVsbDogdHJ1ZX0sIHRydWUpOwog
ICAgICAgc2V0U2VsZWN0aW9uKHRoaXMsIHNpbXBsZVNlbGVjdGlvbih0b3ApKTsKICAgICB9KSwK
ICAgICByZXBsYWNlUmFuZ2U6IGZ1bmN0aW9uKGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pIHsKQEAg
LTYyMTgsNyArNzM1OSw3IEBACiAgICAgZ2V0UmFuZ2U6IGZ1bmN0aW9uKGZyb20sIHRvLCBsaW5l
U2VwKSB7CiAgICAgICB2YXIgbGluZXMgPSBnZXRCZXR3ZWVuKHRoaXMsIGNsaXBQb3ModGhpcywg
ZnJvbSksIGNsaXBQb3ModGhpcywgdG8pKTsKICAgICAgIGlmIChsaW5lU2VwID09PSBmYWxzZSkg
cmV0dXJuIGxpbmVzOwotICAgICAgcmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCAiXG4iKTsK
KyAgICAgIHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkp
OwogICAgIH0sCiAKICAgICBnZXRMaW5lOiBmdW5jdGlvbihsaW5lKSB7dmFyIGwgPSB0aGlzLmdl
dExpbmVIYW5kbGUobGluZSk7IHJldHVybiBsICYmIGwudGV4dDt9LApAQCAtNjI4NCwxMyArNzQy
NSwxMyBAQAogICAgICAgICBsaW5lcyA9IGxpbmVzID8gbGluZXMuY29uY2F0KHNlbCkgOiBzZWw7
CiAgICAgICB9CiAgICAgICBpZiAobGluZVNlcCA9PT0gZmFsc2UpIHJldHVybiBsaW5lczsKLSAg
ICAgIGVsc2UgcmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCAiXG4iKTsKKyAgICAgIGVsc2Ug
cmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCB0aGlzLmxpbmVTZXBhcmF0b3IoKSk7CiAgICAg
fSwKICAgICBnZXRTZWxlY3Rpb25zOiBmdW5jdGlvbihsaW5lU2VwKSB7CiAgICAgICB2YXIgcGFy
dHMgPSBbXSwgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzOwogICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgdmFyIHNlbCA9IGdldEJldHdlZW4o
dGhpcywgcmFuZ2VzW2ldLmZyb20oKSwgcmFuZ2VzW2ldLnRvKCkpOwotICAgICAgICBpZiAobGlu
ZVNlcCAhPT0gZmFsc2UpIHNlbCA9IHNlbC5qb2luKGxpbmVTZXAgfHwgIlxuIik7CisgICAgICAg
IGlmIChsaW5lU2VwICE9PSBmYWxzZSkgc2VsID0gc2VsLmpvaW4obGluZVNlcCB8fCB0aGlzLmxp
bmVTZXBhcmF0b3IoKSk7CiAgICAgICAgIHBhcnRzW2ldID0gc2VsOwogICAgICAgfQogICAgICAg
cmV0dXJuIHBhcnRzOwpAQCAtNjMwNSw3ICs3NDQ2LDcgQEAKICAgICAgIHZhciBjaGFuZ2VzID0g
W10sIHNlbCA9IHRoaXMuc2VsOwogICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWwucmFuZ2Vz
Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgIHZhciByYW5nZSA9IHNlbC5yYW5nZXNbaV07Ci0gICAg
ICAgIGNoYW5nZXNbaV0gPSB7ZnJvbTogcmFuZ2UuZnJvbSgpLCB0bzogcmFuZ2UudG8oKSwgdGV4
dDogc3BsaXRMaW5lcyhjb2RlW2ldKSwgb3JpZ2luOiBvcmlnaW59OworICAgICAgICBjaGFuZ2Vz
W2ldID0ge2Zyb206IHJhbmdlLmZyb20oKSwgdG86IHJhbmdlLnRvKCksIHRleHQ6IHRoaXMuc3Bs
aXRMaW5lcyhjb2RlW2ldKSwgb3JpZ2luOiBvcmlnaW59OwogICAgICAgfQogICAgICAgdmFyIG5l
d1NlbCA9IGNvbGxhcHNlICYmIGNvbGxhcHNlICE9ICJlbmQiICYmIGNvbXB1dGVSZXBsYWNlZFNl
bCh0aGlzLCBjaGFuZ2VzLCBjb2xsYXBzZSk7CiAgICAgICBmb3IgKHZhciBpID0gY2hhbmdlcy5s
ZW5ndGggLSAxOyBpID49IDA7IGktLSkKQEAgLTYzMzQsNyArNzQ3NSw3IEBACiAgICAgfSwKICAg
ICBjaGFuZ2VHZW5lcmF0aW9uOiBmdW5jdGlvbihmb3JjZVNwbGl0KSB7CiAgICAgICBpZiAoZm9y
Y2VTcGxpdCkKLSAgICAgICAgdGhpcy5oaXN0b3J5Lmxhc3RPcCA9IHRoaXMuaGlzdG9yeS5sYXN0
T3JpZ2luID0gbnVsbDsKKyAgICAgICAgdGhpcy5oaXN0b3J5Lmxhc3RPcCA9IHRoaXMuaGlzdG9y
eS5sYXN0U2VsT3AgPSB0aGlzLmhpc3RvcnkubGFzdE9yaWdpbiA9IG51bGw7CiAgICAgICByZXR1
cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb247CiAgICAgfSwKICAgICBpc0NsZWFuOiBmdW5jdGlv
biAoZ2VuKSB7CkBAIC02MzUxLDEzICs3NDkyLDQ4IEBACiAgICAgICBoaXN0LnVuZG9uZSA9IGNv
cHlIaXN0b3J5QXJyYXkoaGlzdERhdGEudW5kb25lLnNsaWNlKDApLCBudWxsLCB0cnVlKTsKICAg
ICB9LAogCisgICAgYWRkTGluZUNsYXNzOiBkb2NNZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIHdo
ZXJlLCBjbHMpIHsKKyAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwgd2hlcmUg
PT0gImd1dHRlciIgPyAiZ3V0dGVyIiA6ICJjbGFzcyIsIGZ1bmN0aW9uKGxpbmUpIHsKKyAgICAg
ICAgdmFyIHByb3AgPSB3aGVyZSA9PSAidGV4dCIgPyAidGV4dENsYXNzIgorICAgICAgICAgICAg
ICAgICA6IHdoZXJlID09ICJiYWNrZ3JvdW5kIiA/ICJiZ0NsYXNzIgorICAgICAgICAgICAgICAg
ICA6IHdoZXJlID09ICJndXR0ZXIiID8gImd1dHRlckNsYXNzIiA6ICJ3cmFwQ2xhc3MiOworICAg
ICAgICBpZiAoIWxpbmVbcHJvcF0pIGxpbmVbcHJvcF0gPSBjbHM7CisgICAgICAgIGVsc2UgaWYg
KGNsYXNzVGVzdChjbHMpLnRlc3QobGluZVtwcm9wXSkpIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ZWxzZSBsaW5lW3Byb3BdICs9ICIgIiArIGNsczsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICB9KTsKKyAgICB9KSwKKyAgICByZW1vdmVMaW5lQ2xhc3M6IGRvY01ldGhvZE9wKGZ1bmN0aW9u
KGhhbmRsZSwgd2hlcmUsIGNscykgeworICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFu
ZGxlLCB3aGVyZSA9PSAiZ3V0dGVyIiA/ICJndXR0ZXIiIDogImNsYXNzIiwgZnVuY3Rpb24obGlu
ZSkgeworICAgICAgICB2YXIgcHJvcCA9IHdoZXJlID09ICJ0ZXh0IiA/ICJ0ZXh0Q2xhc3MiCisg
ICAgICAgICAgICAgICAgIDogd2hlcmUgPT0gImJhY2tncm91bmQiID8gImJnQ2xhc3MiCisgICAg
ICAgICAgICAgICAgIDogd2hlcmUgPT0gImd1dHRlciIgPyAiZ3V0dGVyQ2xhc3MiIDogIndyYXBD
bGFzcyI7CisgICAgICAgIHZhciBjdXIgPSBsaW5lW3Byb3BdOworICAgICAgICBpZiAoIWN1cikg
cmV0dXJuIGZhbHNlOworICAgICAgICBlbHNlIGlmIChjbHMgPT0gbnVsbCkgbGluZVtwcm9wXSA9
IG51bGw7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHZhciBmb3VuZCA9IGN1ci5tYXRjaChj
bGFzc1Rlc3QoY2xzKSk7CisgICAgICAgICAgaWYgKCFmb3VuZCkgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgIHZhciBlbmQgPSBmb3VuZC5pbmRleCArIGZvdW5kWzBdLmxlbmd0aDsKKyAgICAgICAg
ICBsaW5lW3Byb3BdID0gY3VyLnNsaWNlKDAsIGZvdW5kLmluZGV4KSArICghZm91bmQuaW5kZXgg
fHwgZW5kID09IGN1ci5sZW5ndGggPyAiIiA6ICIgIikgKyBjdXIuc2xpY2UoZW5kKSB8fCBudWxs
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfSk7CisgICAgfSksCisK
KyAgICBhZGRMaW5lV2lkZ2V0OiBkb2NNZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIG5vZGUsIG9w
dGlvbnMpIHsKKyAgICAgIHJldHVybiBhZGRMaW5lV2lkZ2V0KHRoaXMsIGhhbmRsZSwgbm9kZSwg
b3B0aW9ucyk7CisgICAgfSksCisgICAgcmVtb3ZlTGluZVdpZGdldDogZnVuY3Rpb24od2lkZ2V0
KSB7IHdpZGdldC5jbGVhcigpOyB9LAorCiAgICAgbWFya1RleHQ6IGZ1bmN0aW9uKGZyb20sIHRv
LCBvcHRpb25zKSB7CiAgICAgICByZXR1cm4gbWFya1RleHQodGhpcywgY2xpcFBvcyh0aGlzLCBm
cm9tKSwgY2xpcFBvcyh0aGlzLCB0byksIG9wdGlvbnMsICJyYW5nZSIpOwogICAgIH0sCiAgICAg
c2V0Qm9va21hcms6IGZ1bmN0aW9uKHBvcywgb3B0aW9ucykgewogICAgICAgdmFyIHJlYWxPcHRz
ID0ge3JlcGxhY2VkV2l0aDogb3B0aW9ucyAmJiAob3B0aW9ucy5ub2RlVHlwZSA9PSBudWxsID8g
b3B0aW9ucy53aWRnZXQgOiBvcHRpb25zKSwKICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRM
ZWZ0OiBvcHRpb25zICYmIG9wdGlvbnMuaW5zZXJ0TGVmdCwKLSAgICAgICAgICAgICAgICAgICAg
ICBjbGVhcldoZW5FbXB0eTogZmFsc2UsIHNoYXJlZDogb3B0aW9ucyAmJiBvcHRpb25zLnNoYXJl
ZH07CisgICAgICAgICAgICAgICAgICAgICAgY2xlYXJXaGVuRW1wdHk6IGZhbHNlLCBzaGFyZWQ6
IG9wdGlvbnMgJiYgb3B0aW9ucy5zaGFyZWQsCisgICAgICAgICAgICAgICAgICAgICAgaGFuZGxl
TW91c2VFdmVudHM6IG9wdGlvbnMgJiYgb3B0aW9ucy5oYW5kbGVNb3VzZUV2ZW50c307CiAgICAg
ICBwb3MgPSBjbGlwUG9zKHRoaXMsIHBvcyk7CiAgICAgICByZXR1cm4gbWFya1RleHQodGhpcywg
cG9zLCBwb3MsIHJlYWxPcHRzLCAiYm9va21hcmsiKTsKICAgICB9LApAQCAtNjQyMCw3ICs3NTk2
LDggQEAKICAgICB9LAogCiAgICAgY29weTogZnVuY3Rpb24oY29weUhpc3RvcnkpIHsKLSAgICAg
IHZhciBkb2MgPSBuZXcgRG9jKGdldExpbmVzKHRoaXMsIHRoaXMuZmlyc3QsIHRoaXMuZmlyc3Qg
KyB0aGlzLnNpemUpLCB0aGlzLm1vZGVPcHRpb24sIHRoaXMuZmlyc3QpOworICAgICAgdmFyIGRv
YyA9IG5ldyBEb2MoZ2V0TGluZXModGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMu
c2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVPcHRpb24sIHRoaXMuZmly
c3QsIHRoaXMubGluZVNlcCk7CiAgICAgICBkb2Muc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxUb3A7
IGRvYy5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0OwogICAgICAgZG9jLnNlbCA9IHRoaXMu
c2VsOwogICAgICAgZG9jLmV4dGVuZCA9IGZhbHNlOwpAQCAtNjQzNiw3ICs3NjEzLDcgQEAKICAg
ICAgIHZhciBmcm9tID0gdGhpcy5maXJzdCwgdG8gPSB0aGlzLmZpcnN0ICsgdGhpcy5zaXplOwog
ICAgICAgaWYgKG9wdGlvbnMuZnJvbSAhPSBudWxsICYmIG9wdGlvbnMuZnJvbSA+IGZyb20pIGZy
b20gPSBvcHRpb25zLmZyb207CiAgICAgICBpZiAob3B0aW9ucy50byAhPSBudWxsICYmIG9wdGlv
bnMudG8gPCB0bykgdG8gPSBvcHRpb25zLnRvOwotICAgICAgdmFyIGNvcHkgPSBuZXcgRG9jKGdl
dExpbmVzKHRoaXMsIGZyb20sIHRvKSwgb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZU9wdGlvbiwg
ZnJvbSk7CisgICAgICB2YXIgY29weSA9IG5ldyBEb2MoZ2V0TGluZXModGhpcywgZnJvbSwgdG8p
LCBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlT3B0aW9uLCBmcm9tLCB0aGlzLmxpbmVTZXApOwog
ICAgICAgaWYgKG9wdGlvbnMuc2hhcmVkSGlzdCkgY29weS5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5
OwogICAgICAgKHRoaXMubGlua2VkIHx8ICh0aGlzLmxpbmtlZCA9IFtdKSkucHVzaCh7ZG9jOiBj
b3B5LCBzaGFyZWRIaXN0OiBvcHRpb25zLnNoYXJlZEhpc3R9KTsKICAgICAgIGNvcHkubGlua2Vk
ID0gW3tkb2M6IHRoaXMsIGlzUGFyZW50OiB0cnVlLCBzaGFyZWRIaXN0OiBvcHRpb25zLnNoYXJl
ZEhpc3R9XTsKQEAgLTY0NjUsMTQgKzc2NDIsMjAgQEAKICAgICBpdGVyTGlua2VkRG9jczogZnVu
Y3Rpb24oZikge2xpbmtlZERvY3ModGhpcywgZik7fSwKIAogICAgIGdldE1vZGU6IGZ1bmN0aW9u
KCkge3JldHVybiB0aGlzLm1vZGU7fSwKLSAgICBnZXRFZGl0b3I6IGZ1bmN0aW9uKCkge3JldHVy
biB0aGlzLmNtO30KKyAgICBnZXRFZGl0b3I6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmNtO30s
CisKKyAgICBzcGxpdExpbmVzOiBmdW5jdGlvbihzdHIpIHsKKyAgICAgIGlmICh0aGlzLmxpbmVT
ZXApIHJldHVybiBzdHIuc3BsaXQodGhpcy5saW5lU2VwKTsKKyAgICAgIHJldHVybiBzcGxpdExp
bmVzQXV0byhzdHIpOworICAgIH0sCisgICAgbGluZVNlcGFyYXRvcjogZnVuY3Rpb24oKSB7IHJl
dHVybiB0aGlzLmxpbmVTZXAgfHwgIlxuIjsgfQogICB9KTsKIAogICAvLyBQdWJsaWMgYWxpYXMu
CiAgIERvYy5wcm90b3R5cGUuZWFjaExpbmUgPSBEb2MucHJvdG90eXBlLml0ZXI7CiAKICAgLy8g
U2V0IHVwIG1ldGhvZHMgb24gQ29kZU1pcnJvcidzIHByb3RvdHlwZSB0byByZWRpcmVjdCB0byB0
aGUgZWRpdG9yJ3MgZG9jdW1lbnQuCi0gIHZhciBkb250RGVsZWdhdGUgPSAiaXRlciBpbnNlcnQg
cmVtb3ZlIGNvcHkgZ2V0RWRpdG9yIi5zcGxpdCgiICIpOworICB2YXIgZG9udERlbGVnYXRlID0g
Iml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciBjb25zdHJ1Y3RvciIuc3BsaXQoIiAi
KTsKICAgZm9yICh2YXIgcHJvcCBpbiBEb2MucHJvdG90eXBlKSBpZiAoRG9jLnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eShwcm9wKSAmJiBpbmRleE9mKGRvbnREZWxlZ2F0ZSwgcHJvcCkgPCAwKQog
ICAgIENvZGVNaXJyb3IucHJvdG90eXBlW3Byb3BdID0gKGZ1bmN0aW9uKG1ldGhvZCkgewogICAg
ICAgcmV0dXJuIGZ1bmN0aW9uKCkge3JldHVybiBtZXRob2QuYXBwbHkodGhpcy5kb2MsIGFyZ3Vt
ZW50cyk7fTsKQEAgLTY2MjYsNyArNzgwOSw3IEBACiAgICAgLy8gVXNlZCB0byB0cmFjayB3aGVu
IGNoYW5nZXMgY2FuIGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIHVuZG8KICAgICAvLyBldmVudAog
ICAgIHRoaXMubGFzdE1vZFRpbWUgPSB0aGlzLmxhc3RTZWxUaW1lID0gMDsKLSAgICB0aGlzLmxh
c3RPcCA9IG51bGw7CisgICAgdGhpcy5sYXN0T3AgPSB0aGlzLmxhc3RTZWxPcCA9IG51bGw7CiAg
ICAgdGhpcy5sYXN0T3JpZ2luID0gdGhpcy5sYXN0U2VsT3JpZ2luID0gbnVsbDsKICAgICAvLyBV
c2VkIGJ5IHRoZSBpc0NsZWFuKCkgbWV0aG9kCiAgICAgdGhpcy5nZW5lcmF0aW9uID0gdGhpcy5t
YXhHZW5lcmF0aW9uID0gc3RhcnRHZW4gfHwgMTsKQEAgLTY3MDQsNyArNzg4Nyw3IEBACiAgICAg
aGlzdC5kb25lLnB1c2goc2VsQWZ0ZXIpOwogICAgIGhpc3QuZ2VuZXJhdGlvbiA9ICsraGlzdC5t
YXhHZW5lcmF0aW9uOwogICAgIGhpc3QubGFzdE1vZFRpbWUgPSBoaXN0Lmxhc3RTZWxUaW1lID0g
dGltZTsKLSAgICBoaXN0Lmxhc3RPcCA9IG9wSWQ7CisgICAgaGlzdC5sYXN0T3AgPSBoaXN0Lmxh
c3RTZWxPcCA9IG9wSWQ7CiAgICAgaGlzdC5sYXN0T3JpZ2luID0gaGlzdC5sYXN0U2VsT3JpZ2lu
ID0gY2hhbmdlLm9yaWdpbjsKIAogICAgIGlmICghbGFzdCkgc2lnbmFsKGRvYywgImhpc3RvcnlB
ZGRlZCIpOwpAQCAtNjczMCw3ICs3OTEzLDcgQEAKICAgICAvLyB0aGUgY3VycmVudCwgb3IgdGhl
IG9yaWdpbnMgZG9uJ3QgYWxsb3cgbWF0Y2hpbmcuIE9yaWdpbnMKICAgICAvLyBzdGFydGluZyB3
aXRoICogYXJlIGFsd2F5cyBtZXJnZWQsIHRob3NlIHN0YXJ0aW5nIHdpdGggKyBhcmUKICAgICAv
LyBtZXJnZWQgd2hlbiBzaW1pbGFyIGFuZCBjbG9zZSB0b2dldGhlciBpbiB0aW1lLgotICAgIGlm
IChvcElkID09IGhpc3QubGFzdE9wIHx8CisgICAgaWYgKG9wSWQgPT0gaGlzdC5sYXN0U2VsT3Ag
fHwKICAgICAgICAgKG9yaWdpbiAmJiBoaXN0Lmxhc3RTZWxPcmlnaW4gPT0gb3JpZ2luICYmCiAg
ICAgICAgICAoaGlzdC5sYXN0TW9kVGltZSA9PSBoaXN0Lmxhc3RTZWxUaW1lICYmIGhpc3QubGFz
dE9yaWdpbiA9PSBvcmlnaW4gfHwKICAgICAgICAgICBzZWxlY3Rpb25FdmVudENhbkJlTWVyZ2Vk
KGRvYywgb3JpZ2luLCBsc3QoaGlzdC5kb25lKSwgc2VsKSkpKQpAQCAtNjc0MCw3ICs3OTIzLDcg
QEAKIAogICAgIGhpc3QubGFzdFNlbFRpbWUgPSArbmV3IERhdGU7CiAgICAgaGlzdC5sYXN0U2Vs
T3JpZ2luID0gb3JpZ2luOwotICAgIGhpc3QubGFzdE9wID0gb3BJZDsKKyAgICBoaXN0Lmxhc3RT
ZWxPcCA9IG9wSWQ7CiAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jbGVhclJlZG8gIT09IGZh
bHNlKQogICAgICAgY2xlYXJTZWxlY3Rpb25FdmVudHMoaGlzdC51bmRvbmUpOwogICB9CkBAIC02
OTI1LDYgKzgxMDgsOCBAQAogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytp
KSBhcnJbaV0uYXBwbHkobnVsbCwgYXJncyk7CiAgIH07CiAKKyAgdmFyIG9ycGhhbkRlbGF5ZWRD
YWxsYmFja3MgPSBudWxsOworCiAgIC8vIE9mdGVuLCB3ZSB3YW50IHRvIHNpZ25hbCBldmVudHMg
YXQgYSBwb2ludCB3aGVyZSB3ZSBhcmUgaW4gdGhlCiAgIC8vIG1pZGRsZSBvZiBzb21lIHdvcmss
IGJ1dCBkb24ndCB3YW50IHRoZSBoYW5kbGVyIHRvIHN0YXJ0IGNhbGxpbmcKICAgLy8gb3RoZXIg
bWV0aG9kcyBvbiB0aGUgZWRpdG9yLCB3aGljaCBtaWdodCBiZSBpbiBhbiBpbmNvbnNpc3RlbnQK
QEAgLTY5MzIsMjUgKzgxMTcsMjYgQEAKICAgLy8gc2lnbmFsTGF0ZXIgbG9va3Mgd2hldGhlciB0
aGVyZSBhcmUgYW55IGhhbmRsZXJzLCBhbmQgc2NoZWR1bGVzCiAgIC8vIHRoZW0gdG8gYmUgZXhl
Y3V0ZWQgd2hlbiB0aGUgbGFzdCBvcGVyYXRpb24gZW5kcywgb3IsIGlmIG5vCiAgIC8vIG9wZXJh
dGlvbiBpcyBhY3RpdmUsIHdoZW4gYSB0aW1lb3V0IGZpcmVzLgotICB2YXIgZGVsYXllZENhbGxi
YWNrcywgZGVsYXllZENhbGxiYWNrRGVwdGggPSAwOwogICBmdW5jdGlvbiBzaWduYWxMYXRlcihl
bWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykgewogICAgIHZhciBhcnIgPSBlbWl0dGVyLl9o
YW5kbGVycyAmJiBlbWl0dGVyLl9oYW5kbGVyc1t0eXBlXTsKICAgICBpZiAoIWFycikgcmV0dXJu
OwotICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAy
KTsKLSAgICBpZiAoIWRlbGF5ZWRDYWxsYmFja3MpIHsKLSAgICAgICsrZGVsYXllZENhbGxiYWNr
RGVwdGg7Ci0gICAgICBkZWxheWVkQ2FsbGJhY2tzID0gW107Ci0gICAgICBzZXRUaW1lb3V0KGZp
cmVEZWxheWVkLCAwKTsKKyAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs
KGFyZ3VtZW50cywgMiksIGxpc3Q7CisgICAgaWYgKG9wZXJhdGlvbkdyb3VwKSB7CisgICAgICBs
aXN0ID0gb3BlcmF0aW9uR3JvdXAuZGVsYXllZENhbGxiYWNrczsKKyAgICB9IGVsc2UgaWYgKG9y
cGhhbkRlbGF5ZWRDYWxsYmFja3MpIHsKKyAgICAgIGxpc3QgPSBvcnBoYW5EZWxheWVkQ2FsbGJh
Y2tzOworICAgIH0gZWxzZSB7CisgICAgICBsaXN0ID0gb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9
IFtdOworICAgICAgc2V0VGltZW91dChmaXJlT3JwaGFuRGVsYXllZCwgMCk7CiAgICAgfQogICAg
IGZ1bmN0aW9uIGJuZChmKSB7cmV0dXJuIGZ1bmN0aW9uKCl7Zi5hcHBseShudWxsLCBhcmdzKTt9
O307CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpCi0gICAgICBkZWxh
eWVkQ2FsbGJhY2tzLnB1c2goYm5kKGFycltpXSkpOworICAgICAgbGlzdC5wdXNoKGJuZChhcnJb
aV0pKTsKICAgfQogCi0gIGZ1bmN0aW9uIGZpcmVEZWxheWVkKCkgewotICAgIC0tZGVsYXllZENh
bGxiYWNrRGVwdGg7Ci0gICAgdmFyIGRlbGF5ZWQgPSBkZWxheWVkQ2FsbGJhY2tzOwotICAgIGRl
bGF5ZWRDYWxsYmFja3MgPSBudWxsOworICBmdW5jdGlvbiBmaXJlT3JwaGFuRGVsYXllZCgpIHsK
KyAgICB2YXIgZGVsYXllZCA9IG9ycGhhbkRlbGF5ZWRDYWxsYmFja3M7CisgICAgb3JwaGFuRGVs
YXllZENhbGxiYWNrcyA9IG51bGw7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxheWVkLmxl
bmd0aDsgKytpKSBkZWxheWVkW2ldKCk7CiAgIH0KIApAQCAtNjk4Nyw3ICs4MTczLDcgQEAKICAg
Ly8gTUlTQyBVVElMSVRJRVMKIAogICAvLyBOdW1iZXIgb2YgcGl4ZWxzIGFkZGVkIHRvIHNjcm9s
bGVyIGFuZCBzaXplciB0byBoaWRlIHNjcm9sbGJhcgotICB2YXIgc2Nyb2xsZXJDdXRPZmYgPSAz
MDsKKyAgdmFyIHNjcm9sbGVyR2FwID0gMzA7CiAKICAgLy8gUmV0dXJuZWQgb3IgdGhyb3duIGJ5
IHZhcmlvdXMgcHJvdG9jb2xzIHRvIHNpZ25hbCAnSSdtIG5vdAogICAvLyBoYW5kbGluZyB0aGlz
Jy4KQEAgLTcwNTUsMjIgKzgyNDEsMjEgQEAKICAgICAgIGlmIChhcnJheVtpXSA9PSBlbHQpIHJl
dHVybiBpOwogICAgIHJldHVybiAtMTsKICAgfQotICBpZiAoW10uaW5kZXhPZikgaW5kZXhPZiA9
IGZ1bmN0aW9uKGFycmF5LCBlbHQpIHsgcmV0dXJuIGFycmF5LmluZGV4T2YoZWx0KTsgfTsKICAg
ZnVuY3Rpb24gbWFwKGFycmF5LCBmKSB7CiAgICAgdmFyIG91dCA9IFtdOwogICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIG91dFtpXSA9IGYoYXJyYXlbaV0sIGkpOwog
ICAgIHJldHVybiBvdXQ7CiAgIH0KLSAgaWYgKFtdLm1hcCkgbWFwID0gZnVuY3Rpb24oYXJyYXks
IGYpIHsgcmV0dXJuIGFycmF5Lm1hcChmKTsgfTsKKworICBmdW5jdGlvbiBub3RoaW5nKCkge30K
IAogICBmdW5jdGlvbiBjcmVhdGVPYmooYmFzZSwgcHJvcHMpIHsKICAgICB2YXIgaW5zdDsKICAg
ICBpZiAoT2JqZWN0LmNyZWF0ZSkgewogICAgICAgaW5zdCA9IE9iamVjdC5jcmVhdGUoYmFzZSk7
CiAgICAgfSBlbHNlIHsKLSAgICAgIHZhciBjdG9yID0gZnVuY3Rpb24oKSB7fTsKLSAgICAgIGN0
b3IucHJvdG90eXBlID0gYmFzZTsKLSAgICAgIGluc3QgPSBuZXcgY3RvcigpOworICAgICAgbm90
aGluZy5wcm90b3R5cGUgPSBiYXNlOworICAgICAgaW5zdCA9IG5ldyBub3RoaW5nKCk7CiAgICAg
fQogICAgIGlmIChwcm9wcykgY29weU9iaihwcm9wcywgaW5zdCk7CiAgICAgcmV0dXJuIGluc3Q7
CkBAIC03MDg5LDcgKzgyNzQsNyBAQAogICAgIHJldHVybiBmdW5jdGlvbigpe3JldHVybiBmLmFw
cGx5KG51bGwsIGFyZ3MpO307CiAgIH0KIAotICB2YXIgbm9uQVNDSUlTaW5nbGVDYXNlV29yZENo
YXIgPSAvW1x1MDBkZlx1MzA0MC1cdTMwOWZcdTMwYTAtXHUzMGZmXHUzNDAwLVx1NGRiNVx1NGUw
MC1cdTlmY2NcdWFjMDAtXHVkN2FmXS87CisgIHZhciBub25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hh
ciA9IC9bXHUwMGRmXHUwNTg3XHUwNTkwLVx1MDVmNFx1MDYwMC1cdTA2ZmZcdTMwNDAtXHUzMDlm
XHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhYzAwLVx1ZDdhZl0vOwog
ICB2YXIgaXNXb3JkQ2hhckJhc2ljID0gQ29kZU1pcnJvci5pc1dvcmRDaGFyID0gZnVuY3Rpb24o
Y2gpIHsKICAgICByZXR1cm4gL1x3Ly50ZXN0KGNoKSB8fCBjaCA+ICJceDgwIiAmJgogICAgICAg
KGNoLnRvVXBwZXJDYXNlKCkgIT0gY2gudG9Mb3dlckNhc2UoKSB8fCBub25BU0NJSVNpbmdsZUNh
c2VXb3JkQ2hhci50ZXN0KGNoKSk7CkBAIC03MTI1LDE1ICs4MzEwLDE2IEBACiAgIH0KIAogICB2
YXIgcmFuZ2U7Ci0gIGlmIChkb2N1bWVudC5jcmVhdGVSYW5nZSkgcmFuZ2UgPSBmdW5jdGlvbihu
b2RlLCBzdGFydCwgZW5kKSB7CisgIGlmIChkb2N1bWVudC5jcmVhdGVSYW5nZSkgcmFuZ2UgPSBm
dW5jdGlvbihub2RlLCBzdGFydCwgZW5kLCBlbmROb2RlKSB7CiAgICAgdmFyIHIgPSBkb2N1bWVu
dC5jcmVhdGVSYW5nZSgpOwotICAgIHIuc2V0RW5kKG5vZGUsIGVuZCk7CisgICAgci5zZXRFbmQo
ZW5kTm9kZSB8fCBub2RlLCBlbmQpOwogICAgIHIuc2V0U3RhcnQobm9kZSwgc3RhcnQpOwogICAg
IHJldHVybiByOwogICB9OwogICBlbHNlIHJhbmdlID0gZnVuY3Rpb24obm9kZSwgc3RhcnQsIGVu
ZCkgewogICAgIHZhciByID0gZG9jdW1lbnQuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTsKLSAgICBy
Lm1vdmVUb0VsZW1lbnRUZXh0KG5vZGUucGFyZW50Tm9kZSk7CisgICAgdHJ5IHsgci5tb3ZlVG9F
bGVtZW50VGV4dChub2RlLnBhcmVudE5vZGUpOyB9CisgICAgY2F0Y2goZSkgeyByZXR1cm4gcjsg
fQogICAgIHIuY29sbGFwc2UodHJ1ZSk7CiAgICAgci5tb3ZlRW5kKCJjaGFyYWN0ZXIiLCBlbmQp
OwogICAgIHIubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLCBzdGFydCk7CkBAIC03MTUwLDI5ICs4MzM2
LDQzIEBACiAgICAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKHBhcmVudCkuYXBwZW5kQ2hpbGQoZSk7
CiAgIH0KIAotICBmdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGNoaWxkKSB7CisgIHZhciBjb250
YWlucyA9IENvZGVNaXJyb3IuY29udGFpbnMgPSBmdW5jdGlvbihwYXJlbnQsIGNoaWxkKSB7Cisg
ICAgaWYgKGNoaWxkLm5vZGVUeXBlID09IDMpIC8vIEFuZHJvaWQgYnJvd3NlciBhbHdheXMgcmV0
dXJucyBmYWxzZSB3aGVuIGNoaWxkIGlzIGEgdGV4dG5vZGUKKyAgICAgIGNoaWxkID0gY2hpbGQu
cGFyZW50Tm9kZTsKICAgICBpZiAocGFyZW50LmNvbnRhaW5zKQogICAgICAgcmV0dXJuIHBhcmVu
dC5jb250YWlucyhjaGlsZCk7Ci0gICAgd2hpbGUgKGNoaWxkID0gY2hpbGQucGFyZW50Tm9kZSkK
KyAgICBkbyB7CisgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT0gMTEpIGNoaWxkID0gY2hpbGQu
aG9zdDsKICAgICAgIGlmIChjaGlsZCA9PSBwYXJlbnQpIHJldHVybiB0cnVlOwotICB9CisgICAg
fSB3aGlsZSAoY2hpbGQgPSBjaGlsZC5wYXJlbnROb2RlKTsKKyAgfTsKIAotICBmdW5jdGlvbiBh
Y3RpdmVFbHQoKSB7IHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50OyB9CisgIGZ1bmN0aW9u
IGFjdGl2ZUVsdCgpIHsKKyAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQ7CisgICAgd2hpbGUgKGFjdGl2ZUVsZW1lbnQgJiYgYWN0aXZlRWxlbWVudC5yb290ICYm
IGFjdGl2ZUVsZW1lbnQucm9vdC5hY3RpdmVFbGVtZW50KQorICAgICAgYWN0aXZlRWxlbWVudCA9
IGFjdGl2ZUVsZW1lbnQucm9vdC5hY3RpdmVFbGVtZW50OworICAgIHJldHVybiBhY3RpdmVFbGVt
ZW50OworICB9CiAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIElFIHRocm93cyB1bnNwZWNpZmllZCBl
cnJvciB3aGVuIHRvdWNoaW5nCiAgIC8vIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW4gc29tZSBj
YXNlcyAoZHVyaW5nIGxvYWRpbmcsIGluIGlmcmFtZSkKLSAgaWYgKGllX3VwdG8xMCkgYWN0aXZl
RWx0ID0gZnVuY3Rpb24oKSB7CisgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgMTEpIGFjdGl2ZUVs
dCA9IGZ1bmN0aW9uKCkgewogICAgIHRyeSB7IHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50
OyB9CiAgICAgY2F0Y2goZSkgeyByZXR1cm4gZG9jdW1lbnQuYm9keTsgfQogICB9OwogCi0gIGZ1
bmN0aW9uIGNsYXNzVGVzdChjbHMpIHsgcmV0dXJuIG5ldyBSZWdFeHAoIlxcYiIgKyBjbHMgKyAi
XFxiXFxzKiIpOyB9Ci0gIGZ1bmN0aW9uIHJtQ2xhc3Mobm9kZSwgY2xzKSB7Ci0gICAgdmFyIHRl
c3QgPSBjbGFzc1Rlc3QoY2xzKTsKLSAgICBpZiAodGVzdC50ZXN0KG5vZGUuY2xhc3NOYW1lKSkg
bm9kZS5jbGFzc05hbWUgPSBub2RlLmNsYXNzTmFtZS5yZXBsYWNlKHRlc3QsICIiKTsKLSAgfQot
ICBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCBjbHMpIHsKLSAgICBpZiAoIWNsYXNzVGVzdChjbHMp
LnRlc3Qobm9kZS5jbGFzc05hbWUpKSBub2RlLmNsYXNzTmFtZSArPSAiICIgKyBjbHM7Ci0gIH0K
KyAgZnVuY3Rpb24gY2xhc3NUZXN0KGNscykgeyByZXR1cm4gbmV3IFJlZ0V4cCgiKF58XFxzKSIg
KyBjbHMgKyAiKD86JHxcXHMpXFxzKiIpOyB9CisgIHZhciBybUNsYXNzID0gQ29kZU1pcnJvci5y
bUNsYXNzID0gZnVuY3Rpb24obm9kZSwgY2xzKSB7CisgICAgdmFyIGN1cnJlbnQgPSBub2RlLmNs
YXNzTmFtZTsKKyAgICB2YXIgbWF0Y2ggPSBjbGFzc1Rlc3QoY2xzKS5leGVjKGN1cnJlbnQpOwor
ICAgIGlmIChtYXRjaCkgeworICAgICAgdmFyIGFmdGVyID0gY3VycmVudC5zbGljZShtYXRjaC5p
bmRleCArIG1hdGNoWzBdLmxlbmd0aCk7CisgICAgICBub2RlLmNsYXNzTmFtZSA9IGN1cnJlbnQu
c2xpY2UoMCwgbWF0Y2guaW5kZXgpICsgKGFmdGVyID8gbWF0Y2hbMV0gKyBhZnRlciA6ICIiKTsK
KyAgICB9CisgIH07CisgIHZhciBhZGRDbGFzcyA9IENvZGVNaXJyb3IuYWRkQ2xhc3MgPSBmdW5j
dGlvbihub2RlLCBjbHMpIHsKKyAgICB2YXIgY3VycmVudCA9IG5vZGUuY2xhc3NOYW1lOworICAg
IGlmICghY2xhc3NUZXN0KGNscykudGVzdChjdXJyZW50KSkgbm9kZS5jbGFzc05hbWUgKz0gKGN1
cnJlbnQgPyAiICIgOiAiIikgKyBjbHM7CisgIH07CiAgIGZ1bmN0aW9uIGpvaW5DbGFzc2VzKGEs
IGIpIHsKICAgICB2YXIgYXMgPSBhLnNwbGl0KCIgIik7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBhcy5sZW5ndGg7IGkrKykKQEAgLTcyMDcsNyArODQwNyw2IEBACiAgICAgb24od2luZG93LCAi
cmVzaXplIiwgZnVuY3Rpb24oKSB7CiAgICAgICBpZiAocmVzaXplVGltZXIgPT0gbnVsbCkgcmVz
aXplVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICByZXNpemVUaW1lciA9
IG51bGw7Ci0gICAgICAgIGtub3duU2Nyb2xsYmFyV2lkdGggPSBudWxsOwogICAgICAgICBmb3JF
YWNoQ29kZU1pcnJvcihvblJlc2l6ZSk7CiAgICAgICB9LCAxMDApOwogICAgIH0pOwpAQCAtNzIy
MywzMSArODQyMiwyMyBAQAogICB2YXIgZHJhZ0FuZERyb3AgPSBmdW5jdGlvbigpIHsKICAgICAv
LyBUaGVyZSBpcyAqc29tZSoga2luZCBvZiBkcmFnLWFuZC1kcm9wIHN1cHBvcnQgaW4gSUU2LTgs
IGJ1dCBJCiAgICAgLy8gY291bGRuJ3QgZ2V0IGl0IHRvIHdvcmsgeWV0LgotICAgIGlmIChpZV91
cHRvOCkgcmV0dXJuIGZhbHNlOworICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSkgcmV0dXJu
IGZhbHNlOwogICAgIHZhciBkaXYgPSBlbHQoJ2RpdicpOwogICAgIHJldHVybiAiZHJhZ2dhYmxl
IiBpbiBkaXYgfHwgImRyYWdEcm9wIiBpbiBkaXY7CiAgIH0oKTsKIAotICB2YXIga25vd25TY3Jv
bGxiYXJXaWR0aDsKLSAgZnVuY3Rpb24gc2Nyb2xsYmFyV2lkdGgobWVhc3VyZSkgewotICAgIGlm
IChrbm93blNjcm9sbGJhcldpZHRoICE9IG51bGwpIHJldHVybiBrbm93blNjcm9sbGJhcldpZHRo
OwotICAgIHZhciB0ZXN0ID0gZWx0KCJkaXYiLCBudWxsLCBudWxsLCAid2lkdGg6IDUwcHg7IGhl
aWdodDogNTBweDsgb3ZlcmZsb3cteDogc2Nyb2xsIik7Ci0gICAgcmVtb3ZlQ2hpbGRyZW5BbmRB
ZGQobWVhc3VyZSwgdGVzdCk7Ci0gICAgaWYgKHRlc3Qub2Zmc2V0V2lkdGgpCi0gICAgICBrbm93
blNjcm9sbGJhcldpZHRoID0gdGVzdC5vZmZzZXRIZWlnaHQgLSB0ZXN0LmNsaWVudEhlaWdodDsK
LSAgICByZXR1cm4ga25vd25TY3JvbGxiYXJXaWR0aCB8fCAwOwotICB9Ci0KICAgdmFyIHp3c3BT
dXBwb3J0ZWQ7CiAgIGZ1bmN0aW9uIHplcm9XaWR0aEVsZW1lbnQobWVhc3VyZSkgewogICAgIGlm
ICh6d3NwU3VwcG9ydGVkID09IG51bGwpIHsKICAgICAgIHZhciB0ZXN0ID0gZWx0KCJzcGFuIiwg
Ilx1MjAwYiIpOwogICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3VyZSwgZWx0KCJzcGFu
IiwgW3Rlc3QsIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4IildKSk7CiAgICAgICBpZiAobWVh
c3VyZS5maXJzdENoaWxkLm9mZnNldEhlaWdodCAhPSAwKQotICAgICAgICB6d3NwU3VwcG9ydGVk
ID0gdGVzdC5vZmZzZXRXaWR0aCA8PSAxICYmIHRlc3Qub2Zmc2V0SGVpZ2h0ID4gMiAmJiAhaWVf
dXB0bzc7CisgICAgICAgIHp3c3BTdXBwb3J0ZWQgPSB0ZXN0Lm9mZnNldFdpZHRoIDw9IDEgJiYg
dGVzdC5vZmZzZXRIZWlnaHQgPiAyICYmICEoaWUgJiYgaWVfdmVyc2lvbiA8IDgpOwogICAgIH0K
LSAgICBpZiAoendzcFN1cHBvcnRlZCkgcmV0dXJuIGVsdCgic3BhbiIsICJcdTIwMGIiKTsKLSAg
ICBlbHNlIHJldHVybiBlbHQoInNwYW4iLCAiXHUwMGEwIiwgbnVsbCwgImRpc3BsYXk6IGlubGlu
ZS1ibG9jazsgd2lkdGg6IDFweDsgbWFyZ2luLXJpZ2h0OiAtMXB4Iik7CisgICAgdmFyIG5vZGUg
PSB6d3NwU3VwcG9ydGVkID8gZWx0KCJzcGFuIiwgIlx1MjAwYiIpIDoKKyAgICAgIGVsdCgic3Bh
biIsICJcdTAwYTAiLCBudWxsLCAiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBt
YXJnaW4tcmlnaHQ6IC0xcHgiKTsKKyAgICBub2RlLnNldEF0dHJpYnV0ZSgiY20tdGV4dCIsICIi
KTsKKyAgICByZXR1cm4gbm9kZTsKICAgfQogCiAgIC8vIEZlYXR1cmUtZGV0ZWN0IElFJ3MgY3J1
bW15IGNsaWVudCByZWN0IHJlcG9ydGluZyBmb3IgYmlkaSB0ZXh0CkBAIC03MjU2LDE0ICs4NDQ3
LDE0IEBACiAgICAgaWYgKGJhZEJpZGlSZWN0cyAhPSBudWxsKSByZXR1cm4gYmFkQmlkaVJlY3Rz
OwogICAgIHZhciB0eHQgPSByZW1vdmVDaGlsZHJlbkFuZEFkZChtZWFzdXJlLCBkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSgiQVx1MDYyZUEiKSk7CiAgICAgdmFyIHIwID0gcmFuZ2UodHh0LCAwLCAx
KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICBpZiAocjAubGVmdCA9PSByMC5yaWdodCkg
cmV0dXJuIGZhbHNlOworICAgIGlmICghcjAgfHwgcjAubGVmdCA9PSByMC5yaWdodCkgcmV0dXJu
IGZhbHNlOyAvLyBTYWZhcmkgcmV0dXJucyBudWxsIGluIHNvbWUgY2FzZXMgKCMyNzgwKQogICAg
IHZhciByMSA9IHJhbmdlKHR4dCwgMSwgMikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAg
cmV0dXJuIGJhZEJpZGlSZWN0cyA9IChyMS5yaWdodCAtIHIwLnJpZ2h0IDwgMyk7CiAgIH0KIAog
ICAvLyBTZWUgaWYgIiIuc3BsaXQgaXMgdGhlIGJyb2tlbiBJRSB2ZXJzaW9uLCBpZiBzbywgcHJv
dmlkZSBhbgogICAvLyBhbHRlcm5hdGl2ZSB3YXkgdG8gc3BsaXQgbGluZXMuCi0gIHZhciBzcGxp
dExpbmVzID0gQ29kZU1pcnJvci5zcGxpdExpbmVzID0gIlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5n
dGggIT0gMyA/IGZ1bmN0aW9uKHN0cmluZykgeworICB2YXIgc3BsaXRMaW5lc0F1dG8gPSBDb2Rl
TWlycm9yLnNwbGl0TGluZXMgPSAiXG5cbmIiLnNwbGl0KC9cbi8pLmxlbmd0aCAhPSAzID8gZnVu
Y3Rpb24oc3RyaW5nKSB7CiAgICAgdmFyIHBvcyA9IDAsIHJlc3VsdCA9IFtdLCBsID0gc3RyaW5n
Lmxlbmd0aDsKICAgICB3aGlsZSAocG9zIDw9IGwpIHsKICAgICAgIHZhciBubCA9IHN0cmluZy5p
bmRleE9mKCJcbiIsIHBvcyk7CkBAIC03Mjk4LDYgKzg0ODksMTUgQEAKICAgICByZXR1cm4gdHlw
ZW9mIGUub25jb3B5ID09ICJmdW5jdGlvbiI7CiAgIH0pKCk7CiAKKyAgdmFyIGJhZFpvb21lZFJl
Y3RzID0gbnVsbDsKKyAgZnVuY3Rpb24gaGFzQmFkWm9vbWVkUmVjdHMobWVhc3VyZSkgeworICAg
IGlmIChiYWRab29tZWRSZWN0cyAhPSBudWxsKSByZXR1cm4gYmFkWm9vbWVkUmVjdHM7CisgICAg
dmFyIG5vZGUgPSByZW1vdmVDaGlsZHJlbkFuZEFkZChtZWFzdXJlLCBlbHQoInNwYW4iLCAieCIp
KTsKKyAgICB2YXIgbm9ybWFsID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICB2
YXIgZnJvbVJhbmdlID0gcmFuZ2Uobm9kZSwgMCwgMSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7
CisgICAgcmV0dXJuIGJhZFpvb21lZFJlY3RzID0gTWF0aC5hYnMobm9ybWFsLmxlZnQgLSBmcm9t
UmFuZ2UubGVmdCkgPiAxOworICB9CisKICAgLy8gS0VZIE5BTUVTCiAKICAgdmFyIGtleU5hbWVz
ID0gezM6ICJFbnRlciIsIDg6ICJCYWNrc3BhY2UiLCA5OiAiVGFiIiwgMTM6ICJFbnRlciIsIDE2
OiAiU2hpZnQiLCAxNzogIkN0cmwiLCAxODogIkFsdCIsCkBAIC03MzYwLDYgKzg1NjAsMTcgQEAK
ICAgICB2YXIgY2ggPSAhb3JkZXIgPyBsaW5lLnRleHQubGVuZ3RoIDogb3JkZXJbMF0ubGV2ZWwg
JSAyID8gbGluZUxlZnQobGluZSkgOiBsaW5lUmlnaHQobGluZSk7CiAgICAgcmV0dXJuIFBvcyhs
aW5lTiA9PSBudWxsID8gbGluZU5vKGxpbmUpIDogbGluZU4sIGNoKTsKICAgfQorICBmdW5jdGlv
biBsaW5lU3RhcnRTbWFydChjbSwgcG9zKSB7CisgICAgdmFyIHN0YXJ0ID0gbGluZVN0YXJ0KGNt
LCBwb3MubGluZSk7CisgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgc3RhcnQubGluZSk7
CisgICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSk7CisgICAgaWYgKCFvcmRlciB8fCBvcmRl
clswXS5sZXZlbCA9PSAwKSB7CisgICAgICB2YXIgZmlyc3ROb25XUyA9IE1hdGgubWF4KDAsIGxp
bmUudGV4dC5zZWFyY2goL1xTLykpOworICAgICAgdmFyIGluV1MgPSBwb3MubGluZSA9PSBzdGFy
dC5saW5lICYmIHBvcy5jaCA8PSBmaXJzdE5vbldTICYmIHBvcy5jaDsKKyAgICAgIHJldHVybiBQ
b3Moc3RhcnQubGluZSwgaW5XUyA/IDAgOiBmaXJzdE5vbldTKTsKKyAgICB9CisgICAgcmV0dXJu
IHN0YXJ0OworICB9CiAKICAgZnVuY3Rpb24gY29tcGFyZUJpZGlMZXZlbChvcmRlciwgYSwgYikg
ewogICAgIHZhciBsaW5lZGlyID0gb3JkZXJbMF0ubGV2ZWw7CkBAIC03NTkwLDYgKzg4MDEsOCBA
QAogICAgICAgICBsc3Qob3JkZXIpLnRvIC09IG1bMF0ubGVuZ3RoOwogICAgICAgICBvcmRlci5w
dXNoKG5ldyBCaWRpU3BhbigwLCBsZW4gLSBtWzBdLmxlbmd0aCwgbGVuKSk7CiAgICAgICB9Cisg
ICAgICBpZiAob3JkZXJbMF0ubGV2ZWwgPT0gMikKKyAgICAgICAgb3JkZXIudW5zaGlmdChuZXcg
QmlkaVNwYW4oMSwgb3JkZXJbMF0udG8sIG9yZGVyWzBdLnRvKSk7CiAgICAgICBpZiAob3JkZXJb
MF0ubGV2ZWwgIT0gbHN0KG9yZGVyKS5sZXZlbCkKICAgICAgICAgb3JkZXIucHVzaChuZXcgQmlk
aVNwYW4ob3JkZXJbMF0ubGV2ZWwsIGxlbiwgbGVuKSk7CiAKQEAgLTc1OTksNyArODgxMiw3IEBA
CiAKICAgLy8gVEhFIEVORAogCi0gIENvZGVNaXJyb3IudmVyc2lvbiA9ICI0LjIuMCI7CisgIENv
ZGVNaXJyb3IudmVyc2lvbiA9ICI1LjUuMSI7CiAKICAgcmV0dXJuIENvZGVNaXJyb3I7CiB9KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFs
L0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2ZmZWVzY3JpcHQuanMKb2xkIG1vZGUgMTAw
NjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAxNjk1NjUwMTI2MjgzOWRhZjliZGZjNTdmMzJkY2Ji
ZGE2NGM2MGYwLi5kYTBlYjJkNTE4MGEyYzg5NjVhMWUxMGIxOTgwYzYxNTNlOGE5ZmZjCi0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3Iv
Y29mZmVlc2NyaXB0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IvY29mZmVlc2NyaXB0LmpzCkBAIC0xNSwxNCArMTUsMTQgQEAK
IH0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHsKICJ1c2Ugc3RyaWN0IjsKIAotQ29kZU1pcnJvci5k
ZWZpbmVNb2RlKCJjb2ZmZWVzY3JpcHQiLCBmdW5jdGlvbihjb25mKSB7CitDb2RlTWlycm9yLmRl
ZmluZU1vZGUoImNvZmZlZXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmYsIHBhcnNlckNvbmYpIHsKICAg
dmFyIEVSUk9SQ0xBU1MgPSAiZXJyb3IiOwogCiAgIGZ1bmN0aW9uIHdvcmRSZWdleHAod29yZHMp
IHsKICAgICByZXR1cm4gbmV3IFJlZ0V4cCgiXigoIiArIHdvcmRzLmpvaW4oIil8KCIpICsgIikp
XFxiIik7CiAgIH0KIAotICB2YXIgb3BlcmF0b3JzID0gL14oPzotPnw9PnxcK1srPV0/fC1bXC09
XT98XCpbXCo9XT98XC9bXC89XT98Wz0hXT18PFs+PF0/PT98Pj4/PT98JT0/fCY9P3xcfD0/fFxe
PT98XH58IXxcPykvOworICB2YXIgb3BlcmF0b3JzID0gL14oPzotPnw9PnxcK1srPV0/fC1bXC09
XT98XCpbXCo9XT98XC9bXC89XT98Wz0hXT18PFs+PF0/PT98Pj4/PT98JT0/fCY9P3xcfD0/fFxe
PT98XH58IXxcP3wob3J8YW5kfFx8XHx8JiZ8XD8pPSkvOwogICB2YXIgZGVsaW1pdGVycyA9IC9e
KD86WygpXFtcXXt9LDpgPTtdfFwuXC4/XC4/KS87CiAgIHZhciBpZGVudGlmaWVycyA9IC9eW19B
LVphLXokXVtfQS1aYS16JDAtOV0qLzsKICAgdmFyIHByb3BlcnRpZXMgPSAvXihAfHRoaXNcLilb
X0EtWmEteiRdW19BLVphLXokMC05XSovOwpAQCAtMzQsNyArMzQsNyBAQCBDb2RlTWlycm9yLmRl
ZmluZU1vZGUoImNvZmZlZXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmYpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICJzd2l0Y2giLCAidHJ5IiwgImNhdGNoIiwgImZpbmFsbHkiLCAiY2xhc3MiXTsK
ICAgdmFyIGNvbW1vbktleXdvcmRzID0gWyJicmVhayIsICJieSIsICJjb250aW51ZSIsICJkZWJ1
Z2dlciIsICJkZWxldGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgImRvIiwgImluIiwgIm9m
IiwgIm5ldyIsICJyZXR1cm4iLCAidGhlbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAidGhp
cyIsICJ0aHJvdyIsICJ3aGVuIiwgInVudGlsIl07CisgICAgICAgICAgICAgICAgICAgICAgICAi
dGhpcyIsICJAIiwgInRocm93IiwgIndoZW4iLCAidW50aWwiLCAiZXh0ZW5kcyJdOwogCiAgIHZh
ciBrZXl3b3JkcyA9IHdvcmRSZWdleHAoaW5kZW50S2V5d29yZHMuY29uY2F0KGNvbW1vbktleXdv
cmRzKSk7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNvZmZl
ZXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmYpIHsKICAgICAgICAgfQogICAgICAgfQogICAgICAgaWYg
KHNpbmdsZWxpbmUpIHsKLSAgICAgICAgaWYgKGNvbmYubW9kZS5zaW5nbGVMaW5lU3RyaW5nRXJy
b3JzKSB7CisgICAgICAgIGlmIChwYXJzZXJDb25mLnNpbmdsZUxpbmVTdHJpbmdFcnJvcnMpIHsK
ICAgICAgICAgICBvdXRjbGFzcyA9IEVSUk9SQ0xBU1M7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CkBAIC0yMTcsNyArMjE3LDcgQEAgQ29k
ZU1pcnJvci5kZWZpbmVNb2RlKCJjb2ZmZWVzY3JpcHQiLCBmdW5jdGlvbihjb25mKSB7CiAgICAg
dHlwZSA9IHR5cGUgfHwgImNvZmZlZSI7CiAgICAgdmFyIG9mZnNldCA9IDAsIGFsaWduID0gZmFs
c2UsIGFsaWduT2Zmc2V0ID0gbnVsbDsKICAgICBmb3IgKHZhciBzY29wZSA9IHN0YXRlLnNjb3Bl
OyBzY29wZTsgc2NvcGUgPSBzY29wZS5wcmV2KSB7Ci0gICAgICBpZiAoc2NvcGUudHlwZSA9PT0g
ImNvZmZlZSIpIHsKKyAgICAgIGlmIChzY29wZS50eXBlID09PSAiY29mZmVlIiB8fCBzY29wZS50
eXBlID09ICJ9IikgewogICAgICAgICBvZmZzZXQgPSBzY29wZS5vZmZzZXQgKyBjb25mLmluZGVu
dFVuaXQ7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQpAQCAtMjc4LDcgKzI3OCw3IEBAIENvZGVN
aXJyb3IuZGVmaW5lTW9kZSgiY29mZmVlc2NyaXB0IiwgZnVuY3Rpb24oY29uZikgewogCiAgICAg
Ly8gSGFuZGxlIHNjb3BlIGNoYW5nZXMuCiAgICAgaWYgKGN1cnJlbnQgPT09ICJyZXR1cm4iKSB7
Ci0gICAgICBzdGF0ZS5kZWRlbnQgKz0gMTsKKyAgICAgIHN0YXRlLmRlZGVudCA9IHRydWU7CiAg
ICAgfQogICAgIGlmICgoKGN1cnJlbnQgPT09ICItPiIgfHwgY3VycmVudCA9PT0gIj0+IikgJiYK
ICAgICAgICAgICFzdGF0ZS5sYW1iZGEgJiYKQEAgLTMxMCw5ICszMTAsMTAgQEAgQ29kZU1pcnJv
ci5kZWZpbmVNb2RlKCJjb2ZmZWVzY3JpcHQiLCBmdW5jdGlvbihjb25mKSB7CiAgICAgICBpZiAo
c3RhdGUuc2NvcGUudHlwZSA9PSBjdXJyZW50KQogICAgICAgICBzdGF0ZS5zY29wZSA9IHN0YXRl
LnNjb3BlLnByZXY7CiAgICAgfQotICAgIGlmIChzdGF0ZS5kZWRlbnQgPiAwICYmIHN0cmVhbS5l
b2woKSAmJiBzdGF0ZS5zY29wZS50eXBlID09ICJjb2ZmZWUiKSB7Ci0gICAgICBpZiAoc3RhdGUu
c2NvcGUucHJldikgc3RhdGUuc2NvcGUgPSBzdGF0ZS5zY29wZS5wcmV2OwotICAgICAgc3RhdGUu
ZGVkZW50IC09IDE7CisgICAgaWYgKHN0YXRlLmRlZGVudCAmJiBzdHJlYW0uZW9sKCkpIHsKKyAg
ICAgIGlmIChzdGF0ZS5zY29wZS50eXBlID09ICJjb2ZmZWUiICYmIHN0YXRlLnNjb3BlLnByZXYp
CisgICAgICAgIHN0YXRlLnNjb3BlID0gc3RhdGUuc2NvcGUucHJldjsKKyAgICAgIHN0YXRlLmRl
ZGVudCA9IGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiBzdHlsZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29t
bWVudC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0Nv
ZGVNaXJyb3IvY29tbWVudC5qcwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4
IDNhYzQ3NjQ1MmRkODY3N2U5MjAxYTdmZWE5NjFhNzgxNDNiYjQ5NTcuLjJkZDExNGQzMzJkYzli
MWUwYjE5Y2ZmZjNmYzYwMDYxYzdjYjlmYmUKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jb21tZW50LmpzCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY29tbWVudC5q
cwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJ1bmNv
bW1lbnQiLCBmdW5jdGlvbihmcm9tLCB0bywgb3B0aW9ucykgewogICAgIGlmICghb3B0aW9ucykg
b3B0aW9ucyA9IG5vT3B0aW9uczsKICAgICB2YXIgc2VsZiA9IHRoaXMsIG1vZGUgPSBzZWxmLmdl
dE1vZGVBdChmcm9tKTsKLSAgICB2YXIgZW5kID0gTWF0aC5taW4odG8ubGluZSwgc2VsZi5sYXN0
TGluZSgpKSwgc3RhcnQgPSBNYXRoLm1pbihmcm9tLmxpbmUsIGVuZCk7CisgICAgdmFyIGVuZCA9
IE1hdGgubWluKHRvLmNoICE9IDAgfHwgdG8ubGluZSA9PSBmcm9tLmxpbmUgPyB0by5saW5lIDog
dG8ubGluZSAtIDEsIHNlbGYubGFzdExpbmUoKSksIHN0YXJ0ID0gTWF0aC5taW4oZnJvbS5saW5l
LCBlbmQpOwogCiAgICAgLy8gVHJ5IGZpbmRpbmcgbGluZSBjb21tZW50cwogICAgIHZhciBsaW5l
U3RyaW5nID0gb3B0aW9ucy5saW5lQ29tbWVudCB8fCBtb2RlLmxpbmVDb21tZW50LCBsaW5lcyA9
IFtdOwpAQCAtMTUzLDYgKzE1MywxNyBAQAogICAgICAgICAhL2NvbW1lbnQvLnRlc3Qoc2VsZi5n
ZXRUb2tlblR5cGVBdChQb3MoZW5kLCBjbG9zZSArIDEpKSkpCiAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyAgICAvLyBBdm9pZCBraWxsaW5nIGJsb2NrIGNvbW1lbnRzIGNvbXBsZXRlbHkgb3V0c2lk
ZSB0aGUgc2VsZWN0aW9uLgorICAgIC8vIFBvc2l0aW9ucyBvZiB0aGUgbGFzdCBzdGFydFN0cmlu
ZyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBzZWxlY3Rpb24sIGFuZCB0aGUgZmlyc3QgZW5kU3Ry
aW5nIGFmdGVyIGl0LgorICAgIHZhciBsYXN0U3RhcnQgPSBzdGFydExpbmUubGFzdEluZGV4T2Yo
c3RhcnRTdHJpbmcsIGZyb20uY2gpOworICAgIHZhciBmaXJzdEVuZCA9IGxhc3RTdGFydCA9PSAt
MSA/IC0xIDogc3RhcnRMaW5lLnNsaWNlKDAsIGZyb20uY2gpLmluZGV4T2YoZW5kU3RyaW5nLCBs
YXN0U3RhcnQgKyBzdGFydFN0cmluZy5sZW5ndGgpOworICAgIGlmIChsYXN0U3RhcnQgIT0gLTEg
JiYgZmlyc3RFbmQgIT0gLTEgJiYgZmlyc3RFbmQgKyBlbmRTdHJpbmcubGVuZ3RoICE9IGZyb20u
Y2gpIHJldHVybiBmYWxzZTsKKyAgICAvLyBQb3NpdGlvbnMgb2YgdGhlIGZpcnN0IGVuZFN0cmlu
ZyBhZnRlciB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIGFuZCB0aGUgbGFzdCBzdGFydFN0cmlu
ZyBiZWZvcmUgaXQuCisgICAgZmlyc3RFbmQgPSBlbmRMaW5lLmluZGV4T2YoZW5kU3RyaW5nLCB0
by5jaCk7CisgICAgdmFyIGFsbW9zdExhc3RTdGFydCA9IGVuZExpbmUuc2xpY2UodG8uY2gpLmxh
c3RJbmRleE9mKHN0YXJ0U3RyaW5nLCBmaXJzdEVuZCAtIHRvLmNoKTsKKyAgICBsYXN0U3RhcnQg
PSAoZmlyc3RFbmQgPT0gLTEgfHwgYWxtb3N0TGFzdFN0YXJ0ID09IC0xKSA/IC0xIDogdG8uY2gg
KyBhbG1vc3RMYXN0U3RhcnQ7CisgICAgaWYgKGZpcnN0RW5kICE9IC0xICYmIGxhc3RTdGFydCAh
PSAtMSAmJiBsYXN0U3RhcnQgIT0gdG8uY2gpIHJldHVybiBmYWxzZTsKKwogICAgIHNlbGYub3Bl
cmF0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgc2VsZi5yZXBsYWNlUmFuZ2UoIiIsIFBvcyhlbmQs
IGNsb3NlIC0gKHBhZCAmJiBlbmRMaW5lLnNsaWNlKGNsb3NlIC0gcGFkLmxlbmd0aCwgY2xvc2Up
ID09IHBhZCA/IHBhZC5sZW5ndGggOiAwKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBQb3Mo
ZW5kLCBjbG9zZSArIGVuZFN0cmluZy5sZW5ndGgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY3NzLmpzIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9jc3Mu
anMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBhYWZkZGI2YzY3NjM4Y2Y2
ZTc0Mzc0NWUxMWM5MjMzYjIzZWE4YmU5Li5mNjdjZDIxNjFiOTU0ZWNiZDJjZTEzODRkOTQzNDll
NWQ3NTU0OWQ3Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3IvY3NzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvY3NzLmpzCkBAIC0xMiwxNyArMTIsMjIgQEAKICJ1
c2Ugc3RyaWN0IjsKIAogQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25m
aWcsIHBhcnNlckNvbmZpZykgeworICB2YXIgcHJvdmlkZWQgPSBwYXJzZXJDb25maWc7CiAgIGlm
ICghcGFyc2VyQ29uZmlnLnByb3BlcnR5S2V5d29yZHMpIHBhcnNlckNvbmZpZyA9IENvZGVNaXJy
b3IucmVzb2x2ZU1vZGUoInRleHQvY3NzIik7CisgIHBhcnNlckNvbmZpZy5pbmxpbmUgPSBwcm92
aWRlZC5pbmxpbmU7CiAKICAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCwKICAg
ICAgIHRva2VuSG9va3MgPSBwYXJzZXJDb25maWcudG9rZW5Ib29rcywKKyAgICAgIGRvY3VtZW50
VHlwZXMgPSBwYXJzZXJDb25maWcuZG9jdW1lbnRUeXBlcyB8fCB7fSwKICAgICAgIG1lZGlhVHlw
ZXMgPSBwYXJzZXJDb25maWcubWVkaWFUeXBlcyB8fCB7fSwKICAgICAgIG1lZGlhRmVhdHVyZXMg
PSBwYXJzZXJDb25maWcubWVkaWFGZWF0dXJlcyB8fCB7fSwKKyAgICAgIG1lZGlhVmFsdWVLZXl3
b3JkcyA9IHBhcnNlckNvbmZpZy5tZWRpYVZhbHVlS2V5d29yZHMgfHwge30sCiAgICAgICBwcm9w
ZXJ0eUtleXdvcmRzID0gcGFyc2VyQ29uZmlnLnByb3BlcnR5S2V5d29yZHMgfHwge30sCiAgICAg
ICBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMgPSBwYXJzZXJDb25maWcubm9uU3RhbmRhcmRQ
cm9wZXJ0eUtleXdvcmRzIHx8IHt9LAorICAgICAgZm9udFByb3BlcnRpZXMgPSBwYXJzZXJDb25m
aWcuZm9udFByb3BlcnRpZXMgfHwge30sCisgICAgICBjb3VudGVyRGVzY3JpcHRvcnMgPSBwYXJz
ZXJDb25maWcuY291bnRlckRlc2NyaXB0b3JzIHx8IHt9LAogICAgICAgY29sb3JLZXl3b3JkcyA9
IHBhcnNlckNvbmZpZy5jb2xvcktleXdvcmRzIHx8IHt9LAogICAgICAgdmFsdWVLZXl3b3JkcyA9
IHBhcnNlckNvbmZpZy52YWx1ZUtleXdvcmRzIHx8IHt9LAotICAgICAgZm9udFByb3BlcnRpZXMg
PSBwYXJzZXJDb25maWcuZm9udFByb3BlcnRpZXMgfHwge30sCiAgICAgICBhbGxvd05lc3RlZCA9
IHBhcnNlckNvbmZpZy5hbGxvd05lc3RlZDsKIAogICB2YXIgdHlwZSwgb3ZlcnJpZGU7CkBAIC01
Nyw2ICs2MiwxMSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICBpZiAoL1tcZC5dLy50ZXN0KHN0cmVhbS5wZWVrKCkp
KSB7CiAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LiVdLyk7CiAgICAgICAgIHJldHVybiBy
ZXQoIm51bWJlciIsICJ1bml0Iik7CisgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXi1b
XHdcXFwtXSsvKSkgeworICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xcXC1dLyk7CisgICAg
ICAgIGlmIChzdHJlYW0ubWF0Y2goL15ccyo6LywgZmFsc2UpKQorICAgICAgICAgIHJldHVybiBy
ZXQoInZhcmlhYmxlLTIiLCAidmFyaWFibGUtZGVmaW5pdGlvbiIpOworICAgICAgICByZXR1cm4g
cmV0KCJ2YXJpYWJsZS0yIiwgInZhcmlhYmxlIik7CiAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5t
YXRjaCgvXlx3Ky0vKSkgewogICAgICAgICByZXR1cm4gcmV0KCJtZXRhIiwgIm1ldGEiKTsKICAg
ICAgIH0KQEAgLTY2LDcgKzc2LDkgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgcmV0dXJuIHJldCgicXVhbGlmaWVy
IiwgInF1YWxpZmllciIpOwogICAgIH0gZWxzZSBpZiAoL1s6O3t9XFtcXVwoXCldLy50ZXN0KGNo
KSkgewogICAgICAgcmV0dXJuIHJldChudWxsLCBjaCk7Ci0gICAgfSBlbHNlIGlmIChjaCA9PSAi
dSIgJiYgc3RyZWFtLm1hdGNoKCJybCgiKSkgeworICAgIH0gZWxzZSBpZiAoKGNoID09ICJ1IiAm
JiBzdHJlYW0ubWF0Y2goL3JsKC1wcmVmaXgpP1woLykpIHx8CisgICAgICAgICAgICAgICAoY2gg
PT0gImQiICYmIHN0cmVhbS5tYXRjaCgib21haW4oIikpIHx8CisgICAgICAgICAgICAgICAoY2gg
PT0gInIiICYmIHN0cmVhbS5tYXRjaCgiZWdleHAoIikpKSB7CiAgICAgICBzdHJlYW0uYmFja1Vw
KDEpOwogICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblBhcmVudGhlc2l6ZWQ7CiAgICAgICBy
ZXR1cm4gcmV0KCJwcm9wZXJ0eSIsICJ3b3JkIik7CkBAIC0xNDgsMTAgKzE2MCwxMSBAQCBDb2Rl
TWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CiAgICAgICByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgImJsb2NrIik7CiAgICAg
fSBlbHNlIGlmICh0eXBlID09ICJ9IiAmJiBzdGF0ZS5jb250ZXh0LnByZXYpIHsKICAgICAgIHJl
dHVybiBwb3BDb250ZXh0KHN0YXRlKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gIkBtZWRpYSIp
IHsKLSAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAibWVkaWEiKTsKLSAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gIkBmb250LWZhY2UiKSB7Ci0gICAgICByZXR1cm4gImZvbnRf
ZmFjZV9iZWZvcmUiOworICAgIH0gZWxzZSBpZiAoL0AobWVkaWF8c3VwcG9ydHN8KC1tb3otKT9k
b2N1bWVudCkvLnRlc3QodHlwZSkpIHsKKyAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwg
c3RyZWFtLCAiYXRCbG9jayIpOworICAgIH0gZWxzZSBpZiAoL0AoZm9udC1mYWNlfGNvdW50ZXIt
c3R5bGUpLy50ZXN0KHR5cGUpKSB7CisgICAgICBzdGF0ZS5zdGF0ZUFyZyA9IHR5cGU7CisgICAg
ICByZXR1cm4gInJlc3RyaWN0ZWRfYXRCbG9ja19iZWZvcmUiOwogICAgIH0gZWxzZSBpZiAoL15A
KC0obW96fG1zfG98d2Via2l0KS0pP2tleWZyYW1lcyQvLnRlc3QodHlwZSkpIHsKICAgICAgIHJl
dHVybiAia2V5ZnJhbWVzIjsKICAgICB9IGVsc2UgaWYgKHR5cGUgJiYgdHlwZS5jaGFyQXQoMCkg
PT0gIkAiKSB7CkBAIC0xODIsNyArMTk1LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3Mi
LCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgICBvdmVycmlkZSA9ICJz
dHJpbmctMiI7CiAgICAgICAgIHJldHVybiAibWF5YmVwcm9wIjsKICAgICAgIH0gZWxzZSBpZiAo
YWxsb3dOZXN0ZWQpIHsKLSAgICAgICAgb3ZlcnJpZGUgPSBzdHJlYW0ubWF0Y2goL15ccyo6Lywg
ZmFsc2UpID8gInByb3BlcnR5IiA6ICJ0YWciOworICAgICAgICBvdmVycmlkZSA9IHN0cmVhbS5t
YXRjaCgvXlxzKjooPzpcc3wkKS8sIGZhbHNlKSA/ICJwcm9wZXJ0eSIgOiAidGFnIjsKICAgICAg
ICAgcmV0dXJuICJibG9jayI7CiAgICAgICB9IGVsc2UgewogICAgICAgICBvdmVycmlkZSArPSAi
IGVycm9yIjsKQEAgLTIyOSw2ICsyNDIsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIs
IGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgaWYgKHR5cGUgPT0gInsiIHx8
IHR5cGUgPT0gIn0iKSByZXR1cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKICAg
ICBpZiAodHlwZSA9PSAiKSIpIHJldHVybiBwb3BDb250ZXh0KHN0YXRlKTsKICAgICBpZiAodHlw
ZSA9PSAiKCIpIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAicGFyZW5zIik7Cisg
ICAgaWYgKHR5cGUgPT0gImludGVycG9sYXRpb24iKSByZXR1cm4gcHVzaENvbnRleHQoc3RhdGUs
IHN0cmVhbSwgImludGVycG9sYXRpb24iKTsKICAgICBpZiAodHlwZSA9PSAid29yZCIpIHdvcmRB
c1ZhbHVlKHN0cmVhbSk7CiAgICAgcmV0dXJuICJwYXJlbnMiOwogICB9OwpAQCAtMjQxLDQ3ICsy
NTUsNjcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBh
cnNlckNvbmZpZykgewogICAgIHJldHVybiBwYXNzKHR5cGUsIHN0cmVhbSwgc3RhdGUpOwogICB9
OwogCi0gIHN0YXRlcy5tZWRpYSA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKLSAg
ICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAibWVk
aWFfcGFyZW5zIik7CisgIHN0YXRlcy5hdEJsb2NrID0gZnVuY3Rpb24odHlwZSwgc3RyZWFtLCBz
dGF0ZSkgeworICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBz
dHJlYW0sICJhdEJsb2NrX3BhcmVucyIpOwogICAgIGlmICh0eXBlID09ICJ9IikgcmV0dXJuIHBv
cEFuZFBhc3ModHlwZSwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgaWYgKHR5cGUgPT0gInsiKSByZXR1
cm4gcG9wQ29udGV4dChzdGF0ZSkgJiYgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbSwgYWxsb3dO
ZXN0ZWQgPyAiYmxvY2siIDogInRvcCIpOwogCiAgICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7CiAg
ICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKTsKLSAgICAgIGlm
ICh3b3JkID09ICJvbmx5IiB8fCB3b3JkID09ICJub3QiIHx8IHdvcmQgPT0gImFuZCIpCisgICAg
ICBpZiAod29yZCA9PSAib25seSIgfHwgd29yZCA9PSAibm90IiB8fCB3b3JkID09ICJhbmQiIHx8
IHdvcmQgPT0gIm9yIikKICAgICAgICAgb3ZlcnJpZGUgPSAia2V5d29yZCI7CisgICAgICBlbHNl
IGlmIChkb2N1bWVudFR5cGVzLmhhc093blByb3BlcnR5KHdvcmQpKQorICAgICAgICBvdmVycmlk
ZSA9ICJ0YWciOwogICAgICAgZWxzZSBpZiAobWVkaWFUeXBlcy5oYXNPd25Qcm9wZXJ0eSh3b3Jk
KSkKICAgICAgICAgb3ZlcnJpZGUgPSAiYXR0cmlidXRlIjsKICAgICAgIGVsc2UgaWYgKG1lZGlh
RmVhdHVyZXMuaGFzT3duUHJvcGVydHkod29yZCkpCiAgICAgICAgIG92ZXJyaWRlID0gInByb3Bl
cnR5IjsKKyAgICAgIGVsc2UgaWYgKG1lZGlhVmFsdWVLZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh3
b3JkKSkKKyAgICAgICAgb3ZlcnJpZGUgPSAia2V5d29yZCI7CisgICAgICBlbHNlIGlmIChwcm9w
ZXJ0eUtleXdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpKQorICAgICAgICBvdmVycmlkZSA9ICJw
cm9wZXJ0eSI7CisgICAgICBlbHNlIGlmIChub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMuaGFz
T3duUHJvcGVydHkod29yZCkpCisgICAgICAgIG92ZXJyaWRlID0gInN0cmluZy0yIjsKKyAgICAg
IGVsc2UgaWYgKHZhbHVlS2V5d29yZHMuaGFzT3duUHJvcGVydHkod29yZCkpCisgICAgICAgIG92
ZXJyaWRlID0gImF0b20iOworICAgICAgZWxzZSBpZiAoY29sb3JLZXl3b3Jkcy5oYXNPd25Qcm9w
ZXJ0eSh3b3JkKSkKKyAgICAgICAgb3ZlcnJpZGUgPSAia2V5d29yZCI7CiAgICAgICBlbHNlCiAg
ICAgICAgIG92ZXJyaWRlID0gImVycm9yIjsKICAgICB9CiAgICAgcmV0dXJuIHN0YXRlLmNvbnRl
eHQudHlwZTsKICAgfTsKIAotICBzdGF0ZXMubWVkaWFfcGFyZW5zID0gZnVuY3Rpb24odHlwZSwg
c3RyZWFtLCBzdGF0ZSkgeworICBzdGF0ZXMuYXRCbG9ja19wYXJlbnMgPSBmdW5jdGlvbih0eXBl
LCBzdHJlYW0sIHN0YXRlKSB7CiAgICAgaWYgKHR5cGUgPT0gIikiKSByZXR1cm4gcG9wQ29udGV4
dChzdGF0ZSk7CiAgICAgaWYgKHR5cGUgPT0gInsiIHx8IHR5cGUgPT0gIn0iKSByZXR1cm4gcG9w
QW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlLCAyKTsKLSAgICByZXR1cm4gc3RhdGVzLm1lZGlh
KHR5cGUsIHN0cmVhbSwgc3RhdGUpOworICAgIHJldHVybiBzdGF0ZXMuYXRCbG9jayh0eXBlLCBz
dHJlYW0sIHN0YXRlKTsKICAgfTsKIAotICBzdGF0ZXMuZm9udF9mYWNlX2JlZm9yZSA9IGZ1bmN0
aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKKyAgc3RhdGVzLnJlc3RyaWN0ZWRfYXRCbG9ja19i
ZWZvcmUgPSBmdW5jdGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CiAgICAgaWYgKHR5cGUgPT0g
InsiKQotICAgICAgcmV0dXJuIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0sICJmb250X2ZhY2Ui
KTsKKyAgICAgIHJldHVybiBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLCAicmVzdHJpY3RlZF9h
dEJsb2NrIik7CisgICAgaWYgKHR5cGUgPT0gIndvcmQiICYmIHN0YXRlLnN0YXRlQXJnID09ICJA
Y291bnRlci1zdHlsZSIpIHsKKyAgICAgIG92ZXJyaWRlID0gInZhcmlhYmxlIjsKKyAgICAgIHJl
dHVybiAicmVzdHJpY3RlZF9hdEJsb2NrX2JlZm9yZSI7CisgICAgfQogICAgIHJldHVybiBwYXNz
KHR5cGUsIHN0cmVhbSwgc3RhdGUpOwogICB9OwogCi0gIHN0YXRlcy5mb250X2ZhY2UgPSBmdW5j
dGlvbih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7Ci0gICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4g
cG9wQ29udGV4dChzdGF0ZSk7CisgIHN0YXRlcy5yZXN0cmljdGVkX2F0QmxvY2sgPSBmdW5jdGlv
bih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHR5cGUgPT0gIn0iKSB7CisgICAgICBz
dGF0ZS5zdGF0ZUFyZyA9IG51bGw7CisgICAgICByZXR1cm4gcG9wQ29udGV4dChzdGF0ZSk7Cisg
ICAgfQogICAgIGlmICh0eXBlID09ICJ3b3JkIikgewotICAgICAgaWYgKCFmb250UHJvcGVydGll
cy5oYXNPd25Qcm9wZXJ0eShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKQorICAgICAg
aWYgKChzdGF0ZS5zdGF0ZUFyZyA9PSAiQGZvbnQtZmFjZSIgJiYgIWZvbnRQcm9wZXJ0aWVzLmhh
c093blByb3BlcnR5KHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKSkpIHx8CisgICAgICAg
ICAgKHN0YXRlLnN0YXRlQXJnID09ICJAY291bnRlci1zdHlsZSIgJiYgIWNvdW50ZXJEZXNjcmlw
dG9ycy5oYXNPd25Qcm9wZXJ0eShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSkKICAg
ICAgICAgb3ZlcnJpZGUgPSAiZXJyb3IiOwogICAgICAgZWxzZQogICAgICAgICBvdmVycmlkZSA9
ICJwcm9wZXJ0eSI7CiAgICAgICByZXR1cm4gIm1heWJlcHJvcCI7CiAgICAgfQotICAgIHJldHVy
biAiZm9udF9mYWNlIjsKKyAgICByZXR1cm4gInJlc3RyaWN0ZWRfYXRCbG9jayI7CiAgIH07CiAK
ICAgc3RhdGVzLmtleWZyYW1lcyA9IGZ1bmN0aW9uKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHsKQEAg
LTMwMSwxNSArMzM1LDE3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgc3RhdGVzLmludGVycG9sYXRpb24gPSBmdW5jdGlv
bih0eXBlLCBzdHJlYW0sIHN0YXRlKSB7CiAgICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gcG9w
Q29udGV4dChzdGF0ZSk7CiAgICAgaWYgKHR5cGUgPT0gInsiIHx8IHR5cGUgPT0gIjsiKSByZXR1
cm4gcG9wQW5kUGFzcyh0eXBlLCBzdHJlYW0sIHN0YXRlKTsKLSAgICBpZiAodHlwZSAhPSAidmFy
aWFibGUiKSBvdmVycmlkZSA9ICJlcnJvciI7CisgICAgaWYgKHR5cGUgPT0gIndvcmQiKSBvdmVy
cmlkZSA9ICJ2YXJpYWJsZSI7CisgICAgZWxzZSBpZiAodHlwZSAhPSAidmFyaWFibGUiICYmIHR5
cGUgIT0gIigiICYmIHR5cGUgIT0gIikiKSBvdmVycmlkZSA9ICJlcnJvciI7CiAgICAgcmV0dXJu
ICJpbnRlcnBvbGF0aW9uIjsKICAgfTsKIAogICByZXR1cm4gewogICAgIHN0YXJ0U3RhdGU6IGZ1
bmN0aW9uKGJhc2UpIHsKICAgICAgIHJldHVybiB7dG9rZW5pemU6IG51bGwsCi0gICAgICAgICAg
ICAgIHN0YXRlOiAidG9wIiwKLSAgICAgICAgICAgICAgY29udGV4dDogbmV3IENvbnRleHQoInRv
cCIsIGJhc2UgfHwgMCwgbnVsbCl9OworICAgICAgICAgICAgICBzdGF0ZTogcGFyc2VyQ29uZmln
LmlubGluZSA/ICJibG9jayIgOiAidG9wIiwKKyAgICAgICAgICAgICAgc3RhdGVBcmc6IG51bGws
CisgICAgICAgICAgICAgIGNvbnRleHQ6IG5ldyBDb250ZXh0KHBhcnNlckNvbmZpZy5pbmxpbmUg
PyAiYmxvY2siIDogInRvcCIsIGJhc2UgfHwgMCwgbnVsbCl9OwogICAgIH0sCiAKICAgICB0b2tl
bjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewpAQCAtMzI5LDkgKzM2NSw5IEBAIENvZGVNaXJy
b3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAg
ICAgIHZhciBpbmRlbnQgPSBjeC5pbmRlbnQ7CiAgICAgICBpZiAoY3gudHlwZSA9PSAicHJvcCIg
JiYgKGNoID09ICJ9IiB8fCBjaCA9PSAiKSIpKSBjeCA9IGN4LnByZXY7CiAgICAgICBpZiAoY3gu
cHJldiAmJgotICAgICAgICAgIChjaCA9PSAifSIgJiYgKGN4LnR5cGUgPT0gImJsb2NrIiB8fCBj
eC50eXBlID09ICJ0b3AiIHx8IGN4LnR5cGUgPT0gImludGVycG9sYXRpb24iIHx8IGN4LnR5cGUg
PT0gImZvbnRfZmFjZSIpIHx8Ci0gICAgICAgICAgIGNoID09ICIpIiAmJiAoY3gudHlwZSA9PSAi
cGFyZW5zIiB8fCBjeC50eXBlID09ICJtZWRpYV9wYXJlbnMiKSB8fAotICAgICAgICAgICBjaCA9
PSAieyIgJiYgKGN4LnR5cGUgPT0gImF0IiB8fCBjeC50eXBlID09ICJtZWRpYSIpKSkgeworICAg
ICAgICAgIChjaCA9PSAifSIgJiYgKGN4LnR5cGUgPT0gImJsb2NrIiB8fCBjeC50eXBlID09ICJ0
b3AiIHx8IGN4LnR5cGUgPT0gImludGVycG9sYXRpb24iIHx8IGN4LnR5cGUgPT0gInJlc3RyaWN0
ZWRfYXRCbG9jayIpIHx8CisgICAgICAgICAgIGNoID09ICIpIiAmJiAoY3gudHlwZSA9PSAicGFy
ZW5zIiB8fCBjeC50eXBlID09ICJhdEJsb2NrX3BhcmVucyIpIHx8CisgICAgICAgICAgIGNoID09
ICJ7IiAmJiAoY3gudHlwZSA9PSAiYXQiIHx8IGN4LnR5cGUgPT0gImF0QmxvY2siKSkpIHsKICAg
ICAgICAgaW5kZW50ID0gY3guaW5kZW50IC0gaW5kZW50VW5pdDsKICAgICAgICAgY3ggPSBjeC5w
cmV2OwogICAgICAgfQpAQCAtMzUzLDYgKzM4OSwxMCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUo
ImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgcmV0dXJuIGtleXM7
CiAgIH0KIAorICB2YXIgZG9jdW1lbnRUeXBlc18gPSBbCisgICAgImRvbWFpbiIsICJyZWdleHAi
LCAidXJsIiwgInVybC1wcmVmaXgiCisgIF0sIGRvY3VtZW50VHlwZXMgPSBrZXlTZXQoZG9jdW1l
bnRUeXBlc18pOworCiAgIHZhciBtZWRpYVR5cGVzXyA9IFsKICAgICAiYWxsIiwgImF1cmFsIiwg
ImJyYWlsbGUiLCAiaGFuZGhlbGQiLCAicHJpbnQiLCAicHJvamVjdGlvbiIsICJzY3JlZW4iLAog
ICAgICJ0dHkiLCAidHYiLCAiZW1ib3NzZWQiCkBAIC0zNjYsOSArNDA2LDE2IEBAIENvZGVNaXJy
b3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAg
ICAibWluLWRldmljZS1hc3BlY3QtcmF0aW8iLCAibWF4LWRldmljZS1hc3BlY3QtcmF0aW8iLCAi
Y29sb3IiLCAibWluLWNvbG9yIiwKICAgICAibWF4LWNvbG9yIiwgImNvbG9yLWluZGV4IiwgIm1p
bi1jb2xvci1pbmRleCIsICJtYXgtY29sb3ItaW5kZXgiLAogICAgICJtb25vY2hyb21lIiwgIm1p
bi1tb25vY2hyb21lIiwgIm1heC1tb25vY2hyb21lIiwgInJlc29sdXRpb24iLAotICAgICJtaW4t
cmVzb2x1dGlvbiIsICJtYXgtcmVzb2x1dGlvbiIsICJzY2FuIiwgImdyaWQiCisgICAgIm1pbi1y
ZXNvbHV0aW9uIiwgIm1heC1yZXNvbHV0aW9uIiwgInNjYW4iLCAiZ3JpZCIsICJvcmllbnRhdGlv
biIsCisgICAgImRldmljZS1waXhlbC1yYXRpbyIsICJtaW4tZGV2aWNlLXBpeGVsLXJhdGlvIiwg
Im1heC1kZXZpY2UtcGl4ZWwtcmF0aW8iLAorICAgICJwb2ludGVyIiwgImFueS1wb2ludGVyIiwg
ImhvdmVyIiwgImFueS1ob3ZlciIKICAgXSwgbWVkaWFGZWF0dXJlcyA9IGtleVNldChtZWRpYUZl
YXR1cmVzXyk7CiAKKyAgdmFyIG1lZGlhVmFsdWVLZXl3b3Jkc18gPSBbCisgICAgImxhbmRzY2Fw
ZSIsICJwb3J0cmFpdCIsICJub25lIiwgImNvYXJzZSIsICJmaW5lIiwgIm9uLWRlbWFuZCIsICJo
b3ZlciIsCisgICAgImludGVybGFjZSIsICJwcm9ncmVzc2l2ZSIKKyAgXSwgbWVkaWFWYWx1ZUtl
eXdvcmRzID0ga2V5U2V0KG1lZGlhVmFsdWVLZXl3b3Jkc18pOworCiAgIHZhciBwcm9wZXJ0eUtl
eXdvcmRzXyA9IFsKICAgICAiYWxpZ24tY29udGVudCIsICJhbGlnbi1pdGVtcyIsICJhbGlnbi1z
ZWxmIiwgImFsaWdubWVudC1hZGp1c3QiLAogICAgICJhbGlnbm1lbnQtYmFzZWxpbmUiLCAiYW5j
aG9yLXBvaW50IiwgImFuaW1hdGlvbiIsICJhbmltYXRpb24tZGVsYXkiLApAQCAtNDYxLDEzICs1
MDgsMjMgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBh
cnNlckNvbmZpZykgewogICAgICJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCIsICJ0ZXh0LWFu
Y2hvciIsICJ3cml0aW5nLW1vZGUiCiAgIF0sIHByb3BlcnR5S2V5d29yZHMgPSBrZXlTZXQocHJv
cGVydHlLZXl3b3Jkc18pOwogCi0gIHZhciBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMgPSBb
CisgIHZhciBub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHNfID0gWwogICAgICJzY3JvbGxiYXIt
YXJyb3ctY29sb3IiLCAic2Nyb2xsYmFyLWJhc2UtY29sb3IiLCAic2Nyb2xsYmFyLWRhcmstc2hh
ZG93LWNvbG9yIiwKICAgICAic2Nyb2xsYmFyLWZhY2UtY29sb3IiLCAic2Nyb2xsYmFyLWhpZ2hs
aWdodC1jb2xvciIsICJzY3JvbGxiYXItc2hhZG93LWNvbG9yIiwKICAgICAic2Nyb2xsYmFyLTNk
LWxpZ2h0LWNvbG9yIiwgInNjcm9sbGJhci10cmFjay1jb2xvciIsICJzaGFwZS1pbnNpZGUiLAog
ICAgICJzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uIiwgInNlYXJjaGZpZWxkLWRlY29yYXRpb24i
LCAic2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b24iLAogICAgICJzZWFyY2hmaWVsZC1yZXN1bHRz
LWRlY29yYXRpb24iLCAiem9vbSIKLSAgXSwgbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzID0g
a2V5U2V0KG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkcyk7CisgIF0sIG5vblN0YW5kYXJkUHJv
cGVydHlLZXl3b3JkcyA9IGtleVNldChub25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHNfKTsKKwor
ICB2YXIgZm9udFByb3BlcnRpZXNfID0gWworICAgICJmb250LWZhbWlseSIsICJzcmMiLCAidW5p
Y29kZS1yYW5nZSIsICJmb250LXZhcmlhbnQiLCAiZm9udC1mZWF0dXJlLXNldHRpbmdzIiwKKyAg
ICAiZm9udC1zdHJldGNoIiwgImZvbnQtd2VpZ2h0IiwgImZvbnQtc3R5bGUiCisgIF0sIGZvbnRQ
cm9wZXJ0aWVzID0ga2V5U2V0KGZvbnRQcm9wZXJ0aWVzXyk7CisKKyAgdmFyIGNvdW50ZXJEZXNj
cmlwdG9yc18gPSBbCisgICAgImFkZGl0aXZlLXN5bWJvbHMiLCAiZmFsbGJhY2siLCAibmVnYXRp
dmUiLCAicGFkIiwgInByZWZpeCIsICJyYW5nZSIsCisgICAgInNwZWFrLWFzIiwgInN1ZmZpeCIs
ICJzeW1ib2xzIiwgInN5c3RlbSIKKyAgXSwgY291bnRlckRlc2NyaXB0b3JzID0ga2V5U2V0KGNv
dW50ZXJEZXNjcmlwdG9yc18pOwogCiAgIHZhciBjb2xvcktleXdvcmRzXyA9IFsKICAgICAiYWxp
Y2VibHVlIiwgImFudGlxdWV3aGl0ZSIsICJhcXVhIiwgImFxdWFtYXJpbmUiLCAiYXp1cmUiLCAi
YmVpZ2UiLApAQCAtNDkxLDU0ICs1NDgsNTcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3Mi
LCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICJuYXZham93aGl0ZSIsICJu
YXZ5IiwgIm9sZGxhY2UiLCAib2xpdmUiLCAib2xpdmVkcmFiIiwgIm9yYW5nZSIsICJvcmFuZ2Vy
ZWQiLAogICAgICJvcmNoaWQiLCAicGFsZWdvbGRlbnJvZCIsICJwYWxlZ3JlZW4iLCAicGFsZXR1
cnF1b2lzZSIsICJwYWxldmlvbGV0cmVkIiwKICAgICAicGFwYXlhd2hpcCIsICJwZWFjaHB1ZmYi
LCAicGVydSIsICJwaW5rIiwgInBsdW0iLCAicG93ZGVyYmx1ZSIsCi0gICAgInB1cnBsZSIsICJy
ZWJlY2NhcHVycGxlIiwgInJlZCIsICJyb3N5YnJvd24iLCAicm95YWxibHVlIiwgInNhZGRsZWJy
b3duIiwgInNhbG1vbiIsCi0gICAgInNhbmR5YnJvd24iLCAic2VhZ3JlZW4iLCAic2Vhc2hlbGwi
LCAic2llbm5hIiwgInNpbHZlciIsICJza3libHVlIiwKKyAgICAicHVycGxlIiwgInJlYmVjY2Fw
dXJwbGUiLCAicmVkIiwgInJvc3licm93biIsICJyb3lhbGJsdWUiLCAic2FkZGxlYnJvd24iLAor
ICAgICJzYWxtb24iLCAic2FuZHlicm93biIsICJzZWFncmVlbiIsICJzZWFzaGVsbCIsICJzaWVu
bmEiLCAic2lsdmVyIiwgInNreWJsdWUiLAogICAgICJzbGF0ZWJsdWUiLCAic2xhdGVncmF5Iiwg
InNub3ciLCAic3ByaW5nZ3JlZW4iLCAic3RlZWxibHVlIiwgInRhbiIsCiAgICAgInRlYWwiLCAi
dGhpc3RsZSIsICJ0b21hdG8iLCAidHVycXVvaXNlIiwgInZpb2xldCIsICJ3aGVhdCIsICJ3aGl0
ZSIsCiAgICAgIndoaXRlc21va2UiLCAieWVsbG93IiwgInllbGxvd2dyZWVuIgogICBdLCBjb2xv
cktleXdvcmRzID0ga2V5U2V0KGNvbG9yS2V5d29yZHNfKTsKIAogICB2YXIgdmFsdWVLZXl3b3Jk
c18gPSBbCi0gICAgImFib3ZlIiwgImFic29sdXRlIiwgImFjdGl2ZWJvcmRlciIsICJhY3RpdmVj
YXB0aW9uIiwgImFmYXIiLAotICAgICJhZnRlci13aGl0ZS1zcGFjZSIsICJhaGVhZCIsICJhbGlh
cyIsICJhbGwiLCAiYWxsLXNjcm9sbCIsICJhbHRlcm5hdGUiLAorICAgICJhYm92ZSIsICJhYnNv
bHV0ZSIsICJhY3RpdmVib3JkZXIiLCAiYWRkaXRpdmUiLCAiYWN0aXZlY2FwdGlvbiIsICJhZmFy
IiwKKyAgICAiYWZ0ZXItd2hpdGUtc3BhY2UiLCAiYWhlYWQiLCAiYWxpYXMiLCAiYWxsIiwgImFs
bC1zY3JvbGwiLCAiYWxwaGFiZXRpYyIsICJhbHRlcm5hdGUiLAogICAgICJhbHdheXMiLCAiYW1o
YXJpYyIsICJhbWhhcmljLWFiZWdlZGUiLCAiYW50aWFsaWFzZWQiLCAiYXBwd29ya3NwYWNlIiwK
LSAgICAiYXJhYmljLWluZGljIiwgImFybWVuaWFuIiwgImFzdGVyaXNrcyIsICJhdXRvIiwgImF2
b2lkIiwgImF2b2lkLWNvbHVtbiIsICJhdm9pZC1wYWdlIiwKKyAgICAiYXJhYmljLWluZGljIiwg
ImFybWVuaWFuIiwgImFzdGVyaXNrcyIsICJhdHRyIiwgImF1dG8iLCAiYXZvaWQiLCAiYXZvaWQt
Y29sdW1uIiwgImF2b2lkLXBhZ2UiLAogICAgICJhdm9pZC1yZWdpb24iLCAiYmFja2dyb3VuZCIs
ICJiYWNrd2FyZHMiLCAiYmFzZWxpbmUiLCAiYmVsb3ciLCAiYmlkaS1vdmVycmlkZSIsICJiaW5h
cnkiLAogICAgICJiZW5nYWxpIiwgImJsaW5rIiwgImJsb2NrIiwgImJsb2NrLWF4aXMiLCAiYm9s
ZCIsICJib2xkZXIiLCAiYm9yZGVyIiwgImJvcmRlci1ib3giLAotICAgICJib3RoIiwgImJvdHRv
bSIsICJicmVhayIsICJicmVhay1hbGwiLCAiYnJlYWstd29yZCIsICJidXR0b24iLCAiYnV0dG9u
LWJldmVsIiwKLSAgICAiYnV0dG9uZmFjZSIsICJidXR0b25oaWdobGlnaHQiLCAiYnV0dG9uc2hh
ZG93IiwgImJ1dHRvbnRleHQiLCAiY2FtYm9kaWFuIiwKKyAgICAiYm90aCIsICJib3R0b20iLCAi
YnJlYWsiLCAiYnJlYWstYWxsIiwgImJyZWFrLXdvcmQiLCAiYnVsbGV0cyIsICJidXR0b24iLCAi
YnV0dG9uLWJldmVsIiwKKyAgICAiYnV0dG9uZmFjZSIsICJidXR0b25oaWdobGlnaHQiLCAiYnV0
dG9uc2hhZG93IiwgImJ1dHRvbnRleHQiLCAiY2FsYyIsICJjYW1ib2RpYW4iLAogICAgICJjYXBp
dGFsaXplIiwgImNhcHMtbG9jay1pbmRpY2F0b3IiLCAiY2FwdGlvbiIsICJjYXB0aW9udGV4dCIs
ICJjYXJldCIsCi0gICAgImNlbGwiLCAiY2VudGVyIiwgImNoZWNrYm94IiwgImNpcmNsZSIsICJj
amstZWFydGhseS1icmFuY2giLAorICAgICJjZWxsIiwgImNlbnRlciIsICJjaGVja2JveCIsICJj
aXJjbGUiLCAiY2prLWRlY2ltYWwiLCAiY2prLWVhcnRobHktYnJhbmNoIiwKICAgICAiY2prLWhl
YXZlbmx5LXN0ZW0iLCAiY2prLWlkZW9ncmFwaGljIiwgImNsZWFyIiwgImNsaXAiLCAiY2xvc2Ut
cXVvdGUiLAotICAgICJjb2wtcmVzaXplIiwgImNvbGxhcHNlIiwgImNvbHVtbiIsICJjb21wYWN0
IiwgImNvbmRlbnNlZCIsICJjb250YWluIiwgImNvbnRlbnQiLAotICAgICJjb250ZW50LWJveCIs
ICJjb250ZXh0LW1lbnUiLCAiY29udGludW91cyIsICJjb3B5IiwgImNvdmVyIiwgImNyb3AiLAot
ICAgICJjcm9zcyIsICJjcm9zc2hhaXIiLCAiY3VycmVudGNvbG9yIiwgImN1cnNpdmUiLCAiZGFz
aGVkIiwgImRlY2ltYWwiLAorICAgICJjb2wtcmVzaXplIiwgImNvbGxhcHNlIiwgImNvbHVtbiIs
ICJjb2x1bW4tcmV2ZXJzZSIsICJjb21wYWN0IiwgImNvbmRlbnNlZCIsICJjb250YWluIiwgImNv
bnRlbnQiLAorICAgICJjb250ZW50LWJveCIsICJjb250ZXh0LW1lbnUiLCAiY29udGludW91cyIs
ICJjb3B5IiwgImNvdW50ZXIiLCAiY291bnRlcnMiLCAiY292ZXIiLCAiY3JvcCIsCisgICAgImNy
b3NzIiwgImNyb3NzaGFpciIsICJjdXJyZW50Y29sb3IiLCAiY3Vyc2l2ZSIsICJjeWNsaWMiLCAi
ZGFzaGVkIiwgImRlY2ltYWwiLAogICAgICJkZWNpbWFsLWxlYWRpbmctemVybyIsICJkZWZhdWx0
IiwgImRlZmF1bHQtYnV0dG9uIiwgImRlc3RpbmF0aW9uLWF0b3AiLAogICAgICJkZXN0aW5hdGlv
bi1pbiIsICJkZXN0aW5hdGlvbi1vdXQiLCAiZGVzdGluYXRpb24tb3ZlciIsICJkZXZhbmFnYXJp
IiwKLSAgICAiZGlzYyIsICJkaXNjYXJkIiwgImRvY3VtZW50IiwgImRvdC1kYXNoIiwgImRvdC1k
b3QtZGFzaCIsICJkb3R0ZWQiLAotICAgICJkb3VibGUiLCAiZG93biIsICJlLXJlc2l6ZSIsICJl
YXNlIiwgImVhc2UtaW4iLCAiZWFzZS1pbi1vdXQiLCAiZWFzZS1vdXQiLAorICAgICJkaXNjIiwg
ImRpc2NhcmQiLCAiZGlzY2xvc3VyZS1jbG9zZWQiLCAiZGlzY2xvc3VyZS1vcGVuIiwgImRvY3Vt
ZW50IiwKKyAgICAiZG90LWRhc2giLCAiZG90LWRvdC1kYXNoIiwKKyAgICAiZG90dGVkIiwgImRv
dWJsZSIsICJkb3duIiwgImUtcmVzaXplIiwgImVhc2UiLCAiZWFzZS1pbiIsICJlYXNlLWluLW91
dCIsICJlYXNlLW91dCIsCiAgICAgImVsZW1lbnQiLCAiZWxsaXBzZSIsICJlbGxpcHNpcyIsICJl
bWJlZCIsICJlbmQiLCAiZXRoaW9waWMiLCAiZXRoaW9waWMtYWJlZ2VkZSIsCiAgICAgImV0aGlv
cGljLWFiZWdlZGUtYW0tZXQiLCAiZXRoaW9waWMtYWJlZ2VkZS1nZXoiLCAiZXRoaW9waWMtYWJl
Z2VkZS10aS1lciIsCiAgICAgImV0aGlvcGljLWFiZWdlZGUtdGktZXQiLCAiZXRoaW9waWMtaGFs
ZWhhbWUtYWEtZXIiLAogICAgICJldGhpb3BpYy1oYWxlaGFtZS1hYS1ldCIsICJldGhpb3BpYy1o
YWxlaGFtZS1hbS1ldCIsCiAgICAgImV0aGlvcGljLWhhbGVoYW1lLWdleiIsICJldGhpb3BpYy1o
YWxlaGFtZS1vbS1ldCIsCiAgICAgImV0aGlvcGljLWhhbGVoYW1lLXNpZC1ldCIsICJldGhpb3Bp
Yy1oYWxlaGFtZS1zby1ldCIsCi0gICAgImV0aGlvcGljLWhhbGVoYW1lLXRpLWVyIiwgImV0aGlv
cGljLWhhbGVoYW1lLXRpLWV0IiwKLSAgICAiZXRoaW9waWMtaGFsZWhhbWUtdGlnIiwgImV3LXJl
c2l6ZSIsICJleHBhbmRlZCIsICJleHRyYS1jb25kZW5zZWQiLAotICAgICJleHRyYS1leHBhbmRl
ZCIsICJmYW50YXN5IiwgImZhc3QiLCAiZmlsbCIsICJmaXhlZCIsICJmbGF0IiwgImZvb3Rub3Rl
cyIsCisgICAgImV0aGlvcGljLWhhbGVoYW1lLXRpLWVyIiwgImV0aGlvcGljLWhhbGVoYW1lLXRp
LWV0IiwgImV0aGlvcGljLWhhbGVoYW1lLXRpZyIsCisgICAgImV0aGlvcGljLW51bWVyaWMiLCAi
ZXctcmVzaXplIiwgImV4cGFuZGVkIiwgImV4dGVuZHMiLCAiZXh0cmEtY29uZGVuc2VkIiwKKyAg
ICAiZXh0cmEtZXhwYW5kZWQiLCAiZmFudGFzeSIsICJmYXN0IiwgImZpbGwiLCAiZml4ZWQiLCAi
ZmxhdCIsICJmbGV4IiwgImZvb3Rub3RlcyIsCiAgICAgImZvcndhcmRzIiwgImZyb20iLCAiZ2Vv
bWV0cmljUHJlY2lzaW9uIiwgImdlb3JnaWFuIiwgImdyYXl0ZXh0IiwgImdyb292ZSIsCiAgICAg
Imd1amFyYXRpIiwgImd1cm11a2hpIiwgImhhbmQiLCAiaGFuZ3VsIiwgImhhbmd1bC1jb25zb25h
bnQiLCAiaGVicmV3IiwKICAgICAiaGVscCIsICJoaWRkZW4iLCAiaGlkZSIsICJoaWdoZXIiLCAi
aGlnaGxpZ2h0IiwgImhpZ2hsaWdodHRleHQiLAogICAgICJoaXJhZ2FuYSIsICJoaXJhZ2FuYS1p
cm9oYSIsICJob3Jpem9udGFsIiwgImhzbCIsICJoc2xhIiwgImljb24iLCAiaWdub3JlIiwKICAg
ICAiaW5hY3RpdmVib3JkZXIiLCAiaW5hY3RpdmVjYXB0aW9uIiwgImluYWN0aXZlY2FwdGlvbnRl
eHQiLCAiaW5maW5pdGUiLAogICAgICJpbmZvYmFja2dyb3VuZCIsICJpbmZvdGV4dCIsICJpbmhl
cml0IiwgImluaXRpYWwiLCAiaW5saW5lIiwgImlubGluZS1heGlzIiwKLSAgICAiaW5saW5lLWJs
b2NrIiwgImlubGluZS10YWJsZSIsICJpbnNldCIsICJpbnNpZGUiLCAiaW50cmluc2ljIiwgImlu
dmVydCIsCi0gICAgIml0YWxpYyIsICJqdXN0aWZ5IiwgImthbm5hZGEiLCAia2F0YWthbmEiLCAi
a2F0YWthbmEtaXJvaGEiLCAia2VlcC1hbGwiLCAia2htZXIiLAorICAgICJpbmxpbmUtYmxvY2si
LCAiaW5saW5lLWZsZXgiLCAiaW5saW5lLXRhYmxlIiwgImluc2V0IiwgImluc2lkZSIsICJpbnRy
aW5zaWMiLCAiaW52ZXJ0IiwKKyAgICAiaXRhbGljIiwgImphcGFuZXNlLWZvcm1hbCIsICJqYXBh
bmVzZS1pbmZvcm1hbCIsICJqdXN0aWZ5IiwgImthbm5hZGEiLAorICAgICJrYXRha2FuYSIsICJr
YXRha2FuYS1pcm9oYSIsICJrZWVwLWFsbCIsICJraG1lciIsCisgICAgImtvcmVhbi1oYW5ndWwt
Zm9ybWFsIiwgImtvcmVhbi1oYW5qYS1mb3JtYWwiLCAia29yZWFuLWhhbmphLWluZm9ybWFsIiwK
ICAgICAibGFuZHNjYXBlIiwgImxhbyIsICJsYXJnZSIsICJsYXJnZXIiLCAibGVmdCIsICJsZXZl
bCIsICJsaWdodGVyIiwKLSAgICAibGluZS10aHJvdWdoIiwgImxpbmVhciIsICJsaW5lcyIsICJs
aXN0LWl0ZW0iLCAibGlzdGJveCIsICJsaXN0aXRlbSIsCisgICAgImxpbmUtdGhyb3VnaCIsICJs
aW5lYXIiLCAibGluZWFyLWdyYWRpZW50IiwgImxpbmVzIiwgImxpc3QtaXRlbSIsICJsaXN0Ym94
IiwgImxpc3RpdGVtIiwKICAgICAibG9jYWwiLCAibG9naWNhbCIsICJsb3VkIiwgImxvd2VyIiwg
Imxvd2VyLWFscGhhIiwgImxvd2VyLWFybWVuaWFuIiwKICAgICAibG93ZXItZ3JlZWsiLCAibG93
ZXItaGV4YWRlY2ltYWwiLCAibG93ZXItbGF0aW4iLCAibG93ZXItbm9yd2VnaWFuIiwKLSAgICAi
bG93ZXItcm9tYW4iLCAibG93ZXJjYXNlIiwgImx0ciIsICJtYWxheWFsYW0iLCAibWF0Y2giLAor
ICAgICJsb3dlci1yb21hbiIsICJsb3dlcmNhc2UiLCAibHRyIiwgIm1hbGF5YWxhbSIsICJtYXRj
aCIsICJtYXRyaXgiLCAibWF0cml4M2QiLAogICAgICJtZWRpYS1jb250cm9scy1iYWNrZ3JvdW5k
IiwgIm1lZGlhLWN1cnJlbnQtdGltZS1kaXNwbGF5IiwKICAgICAibWVkaWEtZnVsbHNjcmVlbi1i
dXR0b24iLCAibWVkaWEtbXV0ZS1idXR0b24iLCAibWVkaWEtcGxheS1idXR0b24iLAogICAgICJt
ZWRpYS1yZXR1cm4tdG8tcmVhbHRpbWUtYnV0dG9uIiwgIm1lZGlhLXJld2luZC1idXR0b24iLApA
QCAtNTUwLDQ2ICs2MTAsNTAgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlv
bihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICJtaXgiLCAibW9uZ29saWFuIiwgIm1vbm9z
cGFjZSIsICJtb3ZlIiwgIm11bHRpcGxlIiwgIm15YW5tYXIiLCAibi1yZXNpemUiLAogICAgICJu
YXJyb3dlciIsICJuZS1yZXNpemUiLCAibmVzdy1yZXNpemUiLCAibm8tY2xvc2UtcXVvdGUiLCAi
bm8tZHJvcCIsCiAgICAgIm5vLW9wZW4tcXVvdGUiLCAibm8tcmVwZWF0IiwgIm5vbmUiLCAibm9y
bWFsIiwgIm5vdC1hbGxvd2VkIiwgIm5vd3JhcCIsCi0gICAgIm5zLXJlc2l6ZSIsICJudy1yZXNp
emUiLCAibndzZS1yZXNpemUiLCAib2JsaXF1ZSIsICJvY3RhbCIsICJvcGVuLXF1b3RlIiwKKyAg
ICAibnMtcmVzaXplIiwgIm51bWJlcnMiLCAibnVtZXJpYyIsICJudy1yZXNpemUiLCAibndzZS1y
ZXNpemUiLCAib2JsaXF1ZSIsICJvY3RhbCIsICJvcGVuLXF1b3RlIiwKICAgICAib3B0aW1pemVM
ZWdpYmlsaXR5IiwgIm9wdGltaXplU3BlZWQiLCAib3JpeWEiLCAib3JvbW8iLCAib3V0c2V0IiwK
ICAgICAib3V0c2lkZSIsICJvdXRzaWRlLXNoYXBlIiwgIm92ZXJsYXkiLCAib3ZlcmxpbmUiLCAi
cGFkZGluZyIsICJwYWRkaW5nLWJveCIsCi0gICAgInBhaW50ZWQiLCAicGFnZSIsICJwYXVzZWQi
LCAicGVyc2lhbiIsICJwbHVzLWRhcmtlciIsICJwbHVzLWxpZ2h0ZXIiLCAicG9pbnRlciIsCi0g
ICAgInBvbHlnb24iLCAicG9ydHJhaXQiLCAicHJlIiwgInByZS1saW5lIiwgInByZS13cmFwIiwg
InByZXNlcnZlLTNkIiwgInByb2dyZXNzIiwgInB1c2gtYnV0dG9uIiwKLSAgICAicmFkaW8iLCAi
cmVhZC1vbmx5IiwgInJlYWQtd3JpdGUiLCAicmVhZC13cml0ZS1wbGFpbnRleHQtb25seSIsICJy
ZWN0YW5nbGUiLCAicmVnaW9uIiwKLSAgICAicmVsYXRpdmUiLCAicmVwZWF0IiwgInJlcGVhdC14
IiwgInJlcGVhdC15IiwgInJlc2V0IiwgInJldmVyc2UiLCAicmdiIiwgInJnYmEiLAotICAgICJy
aWRnZSIsICJyaWdodCIsICJyb3VuZCIsICJyb3ctcmVzaXplIiwgInJ0bCIsICJydW4taW4iLCAi
cnVubmluZyIsCi0gICAgInMtcmVzaXplIiwgInNhbnMtc2VyaWYiLCAic2Nyb2xsIiwgInNjcm9s
bGJhciIsICJzZS1yZXNpemUiLCAic2VhcmNoZmllbGQiLAorICAgICJwYWludGVkIiwgInBhZ2Ui
LCAicGF1c2VkIiwgInBlcnNpYW4iLCAicGVyc3BlY3RpdmUiLCAicGx1cy1kYXJrZXIiLCAicGx1
cy1saWdodGVyIiwKKyAgICAicG9pbnRlciIsICJwb2x5Z29uIiwgInBvcnRyYWl0IiwgInByZSIs
ICJwcmUtbGluZSIsICJwcmUtd3JhcCIsICJwcmVzZXJ2ZS0zZCIsCisgICAgInByb2dyZXNzIiwg
InB1c2gtYnV0dG9uIiwgInJhZGlhbC1ncmFkaWVudCIsICJyYWRpbyIsICJyZWFkLW9ubHkiLAor
ICAgICJyZWFkLXdyaXRlIiwgInJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHkiLCAicmVjdGFuZ2xl
IiwgInJlZ2lvbiIsCisgICAgInJlbGF0aXZlIiwgInJlcGVhdCIsICJyZXBlYXRpbmctbGluZWFy
LWdyYWRpZW50IiwKKyAgICAicmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudCIsICJyZXBlYXQteCIs
ICJyZXBlYXQteSIsICJyZXNldCIsICJyZXZlcnNlIiwKKyAgICAicmdiIiwgInJnYmEiLCAicmlk
Z2UiLCAicmlnaHQiLCAicm90YXRlIiwgInJvdGF0ZTNkIiwgInJvdGF0ZVgiLCAicm90YXRlWSIs
CisgICAgInJvdGF0ZVoiLCAicm91bmQiLCAicm93IiwgInJvdy1yZXNpemUiLCAicm93LXJldmVy
c2UiLCAicnRsIiwgInJ1bi1pbiIsICJydW5uaW5nIiwKKyAgICAicy1yZXNpemUiLCAic2Fucy1z
ZXJpZiIsICJzY2FsZSIsICJzY2FsZTNkIiwgInNjYWxlWCIsICJzY2FsZVkiLCAic2NhbGVaIiwK
KyAgICAic2Nyb2xsIiwgInNjcm9sbGJhciIsICJzZS1yZXNpemUiLCAic2VhcmNoZmllbGQiLAog
ICAgICJzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uIiwgInNlYXJjaGZpZWxkLWRlY29yYXRpb24i
LAogICAgICJzZWFyY2hmaWVsZC1yZXN1bHRzLWJ1dHRvbiIsICJzZWFyY2hmaWVsZC1yZXN1bHRz
LWRlY29yYXRpb24iLAogICAgICJzZW1pLWNvbmRlbnNlZCIsICJzZW1pLWV4cGFuZGVkIiwgInNl
cGFyYXRlIiwgInNlcmlmIiwgInNob3ciLCAic2lkYW1hIiwKLSAgICAic2luZ2xlIiwgInNraXAt
d2hpdGUtc3BhY2UiLCAic2xpZGUiLCAic2xpZGVyLWhvcml6b250YWwiLAorICAgICJzaW1wLWNo
aW5lc2UtZm9ybWFsIiwgInNpbXAtY2hpbmVzZS1pbmZvcm1hbCIsICJzaW5nbGUiLAorICAgICJz
a2V3IiwgInNrZXdYIiwgInNrZXdZIiwgInNraXAtd2hpdGUtc3BhY2UiLCAic2xpZGUiLCAic2xp
ZGVyLWhvcml6b250YWwiLAogICAgICJzbGlkZXItdmVydGljYWwiLCAic2xpZGVydGh1bWItaG9y
aXpvbnRhbCIsICJzbGlkZXJ0aHVtYi12ZXJ0aWNhbCIsICJzbG93IiwKICAgICAic21hbGwiLCAi
c21hbGwtY2FwcyIsICJzbWFsbC1jYXB0aW9uIiwgInNtYWxsZXIiLCAic29saWQiLCAic29tYWxp
IiwKLSAgICAic291cmNlLWF0b3AiLCAic291cmNlLWluIiwgInNvdXJjZS1vdXQiLCAic291cmNl
LW92ZXIiLCAic3BhY2UiLCAic3F1YXJlIiwKLSAgICAic3F1YXJlLWJ1dHRvbiIsICJzdGFydCIs
ICJzdGF0aWMiLCAic3RhdHVzLWJhciIsICJzdHJldGNoIiwgInN0cm9rZSIsCi0gICAgInN1YiIs
ICJzdWJwaXhlbC1hbnRpYWxpYXNlZCIsICJzdXBlciIsICJzdy1yZXNpemUiLCAidGFibGUiLAor
ICAgICJzb3VyY2UtYXRvcCIsICJzb3VyY2UtaW4iLCAic291cmNlLW91dCIsICJzb3VyY2Utb3Zl
ciIsICJzcGFjZSIsICJzcGVsbC1vdXQiLCAic3F1YXJlIiwKKyAgICAic3F1YXJlLWJ1dHRvbiIs
ICJzdGFydCIsICJzdGF0aWMiLCAic3RhdHVzLWJhciIsICJzdHJldGNoIiwgInN0cm9rZSIsICJz
dWIiLAorICAgICJzdWJwaXhlbC1hbnRpYWxpYXNlZCIsICJzdXBlciIsICJzdy1yZXNpemUiLCAi
c3ltYm9saWMiLCAic3ltYm9scyIsICJ0YWJsZSIsCiAgICAgInRhYmxlLWNhcHRpb24iLCAidGFi
bGUtY2VsbCIsICJ0YWJsZS1jb2x1bW4iLCAidGFibGUtY29sdW1uLWdyb3VwIiwKICAgICAidGFi
bGUtZm9vdGVyLWdyb3VwIiwgInRhYmxlLWhlYWRlci1ncm91cCIsICJ0YWJsZS1yb3ciLCAidGFi
bGUtcm93LWdyb3VwIiwKKyAgICAidGFtaWwiLAogICAgICJ0ZWx1Z3UiLCAidGV4dCIsICJ0ZXh0
LWJvdHRvbSIsICJ0ZXh0LXRvcCIsICJ0ZXh0YXJlYSIsICJ0ZXh0ZmllbGQiLCAidGhhaSIsCiAg
ICAgInRoaWNrIiwgInRoaW4iLCAidGhyZWVkZGFya3NoYWRvdyIsICJ0aHJlZWRmYWNlIiwgInRo
cmVlZGhpZ2hsaWdodCIsCiAgICAgInRocmVlZGxpZ2h0c2hhZG93IiwgInRocmVlZHNoYWRvdyIs
ICJ0aWJldGFuIiwgInRpZ3JlIiwgInRpZ3JpbnlhLWVyIiwKICAgICAidGlncmlueWEtZXItYWJl
Z2VkZSIsICJ0aWdyaW55YS1ldCIsICJ0aWdyaW55YS1ldC1hYmVnZWRlIiwgInRvIiwgInRvcCIs
CisgICAgInRyYWQtY2hpbmVzZS1mb3JtYWwiLCAidHJhZC1jaGluZXNlLWluZm9ybWFsIiwKKyAg
ICAidHJhbnNsYXRlIiwgInRyYW5zbGF0ZTNkIiwgInRyYW5zbGF0ZVgiLCAidHJhbnNsYXRlWSIs
ICJ0cmFuc2xhdGVaIiwKICAgICAidHJhbnNwYXJlbnQiLCAidWx0cmEtY29uZGVuc2VkIiwgInVs
dHJhLWV4cGFuZGVkIiwgInVuZGVybGluZSIsICJ1cCIsCiAgICAgInVwcGVyLWFscGhhIiwgInVw
cGVyLWFybWVuaWFuIiwgInVwcGVyLWdyZWVrIiwgInVwcGVyLWhleGFkZWNpbWFsIiwKICAgICAi
dXBwZXItbGF0aW4iLCAidXBwZXItbm9yd2VnaWFuIiwgInVwcGVyLXJvbWFuIiwgInVwcGVyY2Fz
ZSIsICJ1cmR1IiwgInVybCIsCi0gICAgInZlcnRpY2FsIiwgInZlcnRpY2FsLXRleHQiLCAidmlz
aWJsZSIsICJ2aXNpYmxlRmlsbCIsICJ2aXNpYmxlUGFpbnRlZCIsCisgICAgInZhciIsICJ2ZXJ0
aWNhbCIsICJ2ZXJ0aWNhbC10ZXh0IiwgInZpc2libGUiLCAidmlzaWJsZUZpbGwiLCAidmlzaWJs
ZVBhaW50ZWQiLAogICAgICJ2aXNpYmxlU3Ryb2tlIiwgInZpc3VhbCIsICJ3LXJlc2l6ZSIsICJ3
YWl0IiwgIndhdmUiLCAid2lkZXIiLAotICAgICJ3aW5kb3ciLCAid2luZG93ZnJhbWUiLCAid2lu
ZG93dGV4dCIsICJ4LWxhcmdlIiwgIngtc21hbGwiLCAieG9yIiwKKyAgICAid2luZG93IiwgIndp
bmRvd2ZyYW1lIiwgIndpbmRvd3RleHQiLCAid29yZHMiLCAieC1sYXJnZSIsICJ4LXNtYWxsIiwg
InhvciIsCiAgICAgInh4LWxhcmdlIiwgInh4LXNtYWxsIgogICBdLCB2YWx1ZUtleXdvcmRzID0g
a2V5U2V0KHZhbHVlS2V5d29yZHNfKTsKIAotICB2YXIgZm9udFByb3BlcnRpZXNfID0gWwotICAg
ICJmb250LWZhbWlseSIsICJzcmMiLCAidW5pY29kZS1yYW5nZSIsICJmb250LXZhcmlhbnQiLCAi
Zm9udC1mZWF0dXJlLXNldHRpbmdzIiwKLSAgICAiZm9udC1zdHJldGNoIiwgImZvbnQtd2VpZ2h0
IiwgImZvbnQtc3R5bGUiCi0gIF0sIGZvbnRQcm9wZXJ0aWVzID0ga2V5U2V0KGZvbnRQcm9wZXJ0
aWVzXyk7Ci0KLSAgdmFyIGFsbFdvcmRzID0gbWVkaWFUeXBlc18uY29uY2F0KG1lZGlhRmVhdHVy
ZXNfKS5jb25jYXQocHJvcGVydHlLZXl3b3Jkc18pCi0gICAgLmNvbmNhdChub25TdGFuZGFyZFBy
b3BlcnR5S2V5d29yZHMpLmNvbmNhdChjb2xvcktleXdvcmRzXykuY29uY2F0KHZhbHVlS2V5d29y
ZHNfKTsKKyAgdmFyIGFsbFdvcmRzID0gZG9jdW1lbnRUeXBlc18uY29uY2F0KG1lZGlhVHlwZXNf
KS5jb25jYXQobWVkaWFGZWF0dXJlc18pLmNvbmNhdChtZWRpYVZhbHVlS2V5d29yZHNfKQorICAg
IC5jb25jYXQocHJvcGVydHlLZXl3b3Jkc18pLmNvbmNhdChub25TdGFuZGFyZFByb3BlcnR5S2V5
d29yZHNfKS5jb25jYXQoY29sb3JLZXl3b3Jkc18pCisgICAgLmNvbmNhdCh2YWx1ZUtleXdvcmRz
Xyk7CiAgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoImhpbnRXb3JkcyIsICJjc3MiLCBhbGxX
b3Jkcyk7CiAKICAgZnVuY3Rpb24gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CkBAIC02
MDQsMzAgKzY2OCwxOCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNv
bmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgcmV0dXJuIFsiY29tbWVudCIsICJjb21tZW50Il07
CiAgIH0KIAotICBmdW5jdGlvbiB0b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKLSAg
ICBpZiAoc3RyZWFtLnNraXBUbygiLS0+IikpIHsKLSAgICAgIHN0cmVhbS5tYXRjaCgiLS0+Iik7
Ci0gICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN0cmVh
bS5za2lwVG9FbmQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFsiY29tbWVudCIsICJjb21tZW50Il07
Ci0gIH0KLQogICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvY3NzIiwgeworICAgIGRvY3Vt
ZW50VHlwZXM6IGRvY3VtZW50VHlwZXMsCiAgICAgbWVkaWFUeXBlczogbWVkaWFUeXBlcywKICAg
ICBtZWRpYUZlYXR1cmVzOiBtZWRpYUZlYXR1cmVzLAorICAgIG1lZGlhVmFsdWVLZXl3b3Jkczog
bWVkaWFWYWx1ZUtleXdvcmRzLAogICAgIHByb3BlcnR5S2V5d29yZHM6IHByb3BlcnR5S2V5d29y
ZHMsCiAgICAgbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzOiBub25TdGFuZGFyZFByb3BlcnR5
S2V5d29yZHMsCisgICAgZm9udFByb3BlcnRpZXM6IGZvbnRQcm9wZXJ0aWVzLAorICAgIGNvdW50
ZXJEZXNjcmlwdG9yczogY291bnRlckRlc2NyaXB0b3JzLAogICAgIGNvbG9yS2V5d29yZHM6IGNv
bG9yS2V5d29yZHMsCiAgICAgdmFsdWVLZXl3b3JkczogdmFsdWVLZXl3b3JkcywKLSAgICBmb250
UHJvcGVydGllczogZm9udFByb3BlcnRpZXMsCiAgICAgdG9rZW5Ib29rczogewotICAgICAgIjwi
OiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7Ci0gICAgICAgIGlmICghc3RyZWFtLm1hdGNoKCIh
LS0iKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU0dNTENv
bW1lbnQ7Ci0gICAgICAgIHJldHVybiB0b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpOwot
ICAgICAgfSwKICAgICAgICIvIjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICBp
ZiAoIXN0cmVhbS5lYXQoIioiKSkgcmV0dXJuIGZhbHNlOwogICAgICAgICBzdGF0ZS50b2tlbml6
ZSA9IHRva2VuQ0NvbW1lbnQ7CkBAIC02NDAsNiArNjkyLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICBDb2RlTWlycm9y
LmRlZmluZU1JTUUoInRleHQveC1zY3NzIiwgewogICAgIG1lZGlhVHlwZXM6IG1lZGlhVHlwZXMs
CiAgICAgbWVkaWFGZWF0dXJlczogbWVkaWFGZWF0dXJlcywKKyAgICBtZWRpYVZhbHVlS2V5d29y
ZHM6IG1lZGlhVmFsdWVLZXl3b3JkcywKICAgICBwcm9wZXJ0eUtleXdvcmRzOiBwcm9wZXJ0eUtl
eXdvcmRzLAogICAgIG5vblN0YW5kYXJkUHJvcGVydHlLZXl3b3Jkczogbm9uU3RhbmRhcmRQcm9w
ZXJ0eUtleXdvcmRzLAogICAgIGNvbG9yS2V5d29yZHM6IGNvbG9yS2V5d29yZHMsCkBAIC02NTks
NyArNzEyLDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcs
IHBhcnNlckNvbmZpZykgewogICAgICAgICB9CiAgICAgICB9LAogICAgICAgIjoiOiBmdW5jdGlv
bihzdHJlYW0pIHsKLSAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXHMqey8pKQorICAgICAgICBp
ZiAoc3RyZWFtLm1hdGNoKC9ccypcey8pKQogICAgICAgICAgIHJldHVybiBbbnVsbCwgInsiXTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfSwKQEAgLTY4MSw2ICs3MzQsNyBAQCBDb2Rl
TWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CiAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWxlc3MiLCB7CiAgICAgbWVkaWFUeXBl
czogbWVkaWFUeXBlcywKICAgICBtZWRpYUZlYXR1cmVzOiBtZWRpYUZlYXR1cmVzLAorICAgIG1l
ZGlhVmFsdWVLZXl3b3JkczogbWVkaWFWYWx1ZUtleXdvcmRzLAogICAgIHByb3BlcnR5S2V5d29y
ZHM6IHByb3BlcnR5S2V5d29yZHMsCiAgICAgbm9uU3RhbmRhcmRQcm9wZXJ0eUtleXdvcmRzOiBu
b25TdGFuZGFyZFByb3BlcnR5S2V5d29yZHMsCiAgICAgY29sb3JLZXl3b3JkczogY29sb3JLZXl3
b3JkcywKQEAgLTcwMCw2ICs3NTQsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImNzcyIsIGZ1
bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgICAgIH0KICAgICAgIH0sCiAgICAg
ICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSkgeworICAgICAgICBpZiAoc3RyZWFtLmVhdCgieyIpKSBy
ZXR1cm4gW251bGwsICJpbnRlcnBvbGF0aW9uIl07CiAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2go
L14oY2hhcnNldHxkb2N1bWVudHxmb250LWZhY2V8aW1wb3J0fCgtKG1venxtc3xvfHdlYmtpdCkt
KT9rZXlmcmFtZXN8bWVkaWF8bmFtZXNwYWNlfHBhZ2V8c3VwcG9ydHMpXGIvLCBmYWxzZSkpIHJl
dHVybiBmYWxzZTsKICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOwogICAgICAg
ICBpZiAoc3RyZWFtLm1hdGNoKC9eXHMqOi8sIGZhbHNlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvaHRtbG1peGVk
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1p
cnJvci9odG1sbWl4ZWQuanMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBk
YzQ4OTc4ZWIyZTg5YmZmOWJlZDAwZGFjMjA3YTQwMzFiODEzZjRiLi4yNDU1MmUyZDgwNjE2N2Ri
ZWQ1ODFhNTVhNGJkNDM4ODA1ZTI5M2Q2Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvaHRtbG1peGVkLmpzCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvaHRtbG1peGVk
LmpzCkBAIC0zMCw2ICszMCw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiaHRtbG1peGVkIiwg
ZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKIAogICBmdW5jdGlvbiBodG1sKHN0cmVh
bSwgc3RhdGUpIHsKICAgICB2YXIgdGFnTmFtZSA9IHN0YXRlLmh0bWxTdGF0ZS50YWdOYW1lOwor
ICAgIGlmICh0YWdOYW1lKSB0YWdOYW1lID0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgIHZh
ciBzdHlsZSA9IGh0bWxNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuaHRtbFN0YXRlKTsKICAgICBp
ZiAodGFnTmFtZSA9PSAic2NyaXB0IiAmJiAvXGJ0YWdcYi8udGVzdChzdHlsZSkgJiYgc3RyZWFt
LmN1cnJlbnQoKSA9PSAiPiIpIHsKICAgICAgIC8vIFNjcmlwdCBibG9jazogbW9kZSB0byBjaGFu
Z2UgdG8gZGVwZW5kcyBvbiB0eXBlIGF0dHJpYnV0ZQpAQCAtNTYsOSArNTcsOSBAQCBDb2RlTWly
cm9yLmRlZmluZU1vZGUoImh0bWxtaXhlZCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmln
KSB7CiAgIH0KICAgZnVuY3Rpb24gbWF5YmVCYWNrdXAoc3RyZWFtLCBwYXQsIHN0eWxlKSB7CiAg
ICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7Ci0gICAgdmFyIGNsb3NlID0gY3VyLnNlYXJj
aChwYXQpLCBtOworICAgIHZhciBjbG9zZSA9IGN1ci5zZWFyY2gocGF0KTsKICAgICBpZiAoY2xv
c2UgPiAtMSkgc3RyZWFtLmJhY2tVcChjdXIubGVuZ3RoIC0gY2xvc2UpOwotICAgIGVsc2UgaWYg
KG0gPSBjdXIubWF0Y2goLzxcLz8kLykpIHsKKyAgICBlbHNlIGlmIChjdXIubWF0Y2goLzxcLz8k
LykpIHsKICAgICAgIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCk7CiAgICAgICBpZiAoIXN0cmVh
bS5tYXRjaChwYXQsIGZhbHNlKSkgc3RyZWFtLm1hdGNoKGN1cik7CiAgICAgfQpAQCAtNjgsNyAr
NjksNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImh0bWxtaXhlZCIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXjxcL1xzKnNjcmlwdFxz
Kj4vaSwgZmFsc2UpKSB7CiAgICAgICBzdGF0ZS50b2tlbiA9IGh0bWw7CiAgICAgICBzdGF0ZS5s
b2NhbFN0YXRlID0gc3RhdGUubG9jYWxNb2RlID0gbnVsbDsKLSAgICAgIHJldHVybiBodG1sKHN0
cmVhbSwgc3RhdGUpOworICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogICAgIHJldHVybiBtYXli
ZUJhY2t1cChzdHJlYW0sIC88XC9ccypzY3JpcHRccyo+LywKICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUubG9jYWxNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUubG9jYWxTdGF0ZSkpOwpAQCAt
NzcsNyArNzgsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImh0bWxtaXhlZCIsIGZ1bmN0aW9u
KGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXjxcL1xzKnN0
eWxlXHMqPi9pLCBmYWxzZSkpIHsKICAgICAgIHN0YXRlLnRva2VuID0gaHRtbDsKICAgICAgIHN0
YXRlLmxvY2FsU3RhdGUgPSBzdGF0ZS5sb2NhbE1vZGUgPSBudWxsOwotICAgICAgcmV0dXJuIGh0
bWwoc3RyZWFtLCBzdGF0ZSk7CisgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAgICAgcmV0dXJu
IG1heWJlQmFja3VwKHN0cmVhbSwgLzxcL1xzKnN0eWxlXHMqPi8sCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNzc01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2NhbFN0YXRlKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWly
cm9yL2phdmFzY3JpcHQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Db2RlTWlycm9yL2phdmFzY3JpcHQuanMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2Rl
IDEwMDc1NQppbmRleCBiNTIyZWM0ODMxZjg4MzhmNDgyZTVkZWQyZGJlMmNkMWU2OTU0MDFkLi5j
ODZmNDllMWY2MGE5ZDg1NTliYWU0MjYzOTUzNGIxZjIzZWRkYmUyCi0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvamF2YXNjcmlwdC5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2Rl
TWlycm9yL2phdmFzY3JpcHQuanMKQEAgLTE5LDYgKzE5LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVN
b2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgdmFy
IGpzb25sZE1vZGUgPSBwYXJzZXJDb25maWcuanNvbmxkOwogICB2YXIganNvbk1vZGUgPSBwYXJz
ZXJDb25maWcuanNvbiB8fCBqc29ubGRNb2RlOwogICB2YXIgaXNUUyA9IHBhcnNlckNvbmZpZy50
eXBlc2NyaXB0OworICB2YXIgd29yZFJFID0gcGFyc2VyQ29uZmlnLndvcmRDaGFyYWN0ZXJzIHx8
IC9bXHckXHhhMS1cdWZmZmZdLzsKIAogICAvLyBUb2tlbml6ZXIKIApAQCAtMTE3LDcgKzExOCw3
IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywg
cGFyc2VyQ29uZmlnKSB7CiAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxhc3RUeXBlID09ICJvcGVy
YXRvciIgfHwgc3RhdGUubGFzdFR5cGUgPT0gImtleXdvcmQgYyIgfHwKICAgICAgICAgICAgICAg
IHN0YXRlLmxhc3RUeXBlID09ICJzb2YiIHx8IC9eW1xbe31cKCw7Ol0kLy50ZXN0KHN0YXRlLmxh
c3RUeXBlKSkgewogICAgICAgICByZWFkUmVnZXhwKHN0cmVhbSk7Ci0gICAgICAgIHN0cmVhbS5l
YXRXaGlsZSgvW2dpbXldLyk7IC8vICd5JyBpcyAic3RpY2t5IiBvcHRpb24gaW4gTW96aWxsYQor
ICAgICAgICBzdHJlYW0ubWF0Y2goL15cYigoW2dpbXl1XSkoPyFbZ2lteXVdKlwyKSkrXGIvKTsK
ICAgICAgICAgcmV0dXJuIHJldCgicmVnZXhwIiwgInN0cmluZy0yIik7CiAgICAgICB9IGVsc2Ug
ewogICAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwpAQCAtMTMyLDggKzEz
Myw4IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZp
ZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNo
KSkgewogICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTsKICAgICAgIHJldHVy
biByZXQoIm9wZXJhdG9yIiwgIm9wZXJhdG9yIiwgc3RyZWFtLmN1cnJlbnQoKSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOworICAgIH0gZWxzZSBpZiAo
d29yZFJFLnRlc3QoY2gpKSB7CisgICAgICBzdHJlYW0uZWF0V2hpbGUod29yZFJFKTsKICAgICAg
IHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKSwga25vd24gPSBrZXl3b3Jkcy5wcm9wZXJ0eUlz
RW51bWVyYWJsZSh3b3JkKSAmJiBrZXl3b3Jkc1t3b3JkXTsKICAgICAgIHJldHVybiAoa25vd24g
JiYgc3RhdGUubGFzdFR5cGUgIT0gIi4iKSA/IHJldChrbm93bi50eXBlLCBrbm93bi5zdHlsZSwg
d29yZCkgOgogICAgICAgICAgICAgICAgICAgICAgcmV0KCJ2YXJpYWJsZSIsICJ2YXJpYWJsZSIs
IHdvcmQpOwpAQCAtMjAyLDggKzIwMywxMCBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFz
Y3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgICAgICBpZiAoLS1k
ZXB0aCA9PSAwKSBicmVhazsKICAgICAgIH0gZWxzZSBpZiAoYnJhY2tldCA+PSAzICYmIGJyYWNr
ZXQgPCA2KSB7CiAgICAgICAgICsrZGVwdGg7Ci0gICAgICB9IGVsc2UgaWYgKC9bJFx3XS8udGVz
dChjaCkpIHsKKyAgICAgIH0gZWxzZSBpZiAod29yZFJFLnRlc3QoY2gpKSB7CiAgICAgICAgIHNh
d1NvbWV0aGluZyA9IHRydWU7CisgICAgICB9IGVsc2UgaWYgKC9bIidcL10vLnRlc3QoY2gpKSB7
CisgICAgICAgIHJldHVybjsKICAgICAgIH0gZWxzZSBpZiAoc2F3U29tZXRoaW5nICYmICFkZXB0
aCkgewogICAgICAgICArK3BvczsKICAgICAgICAgYnJlYWs7CkBAIC0yMzgsNyArMjQxLDcgQEAg
Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJz
ZXJDb25maWcpIHsKICAgICB2YXIgY2MgPSBzdGF0ZS5jYzsKICAgICAvLyBDb21tdW5pY2F0ZSBv
dXIgY29udGV4dCB0byB0aGUgY29tYmluYXRvcnMuCiAgICAgLy8gKExlc3Mgd2FzdGVmdWwgdGhh
biBjb25zaW5nIHVwIGEgaHVuZHJlZCBjbG9zdXJlcyBvbiBldmVyeSBjYWxsLikKLSAgICBjeC5z
dGF0ZSA9IHN0YXRlOyBjeC5zdHJlYW0gPSBzdHJlYW07IGN4Lm1hcmtlZCA9IG51bGwsIGN4LmNj
ID0gY2M7CisgICAgY3guc3RhdGUgPSBzdGF0ZTsgY3guc3RyZWFtID0gc3RyZWFtOyBjeC5tYXJr
ZWQgPSBudWxsLCBjeC5jYyA9IGNjOyBjeC5zdHlsZSA9IHN0eWxlOwogCiAgICAgaWYgKCFzdGF0
ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KCJhbGlnbiIpKQogICAgICAgc3RhdGUubGV4aWNhbC5h
bGlnbiA9IHRydWU7CkBAIC0yOTgsNiArMzAxLDggQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJq
YXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICB2YXIgcmVz
dWx0ID0gZnVuY3Rpb24oKSB7CiAgICAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZSwgaW5kZW50ID0g
c3RhdGUuaW5kZW50ZWQ7CiAgICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09ICJzdGF0Iikg
aW5kZW50ID0gc3RhdGUubGV4aWNhbC5pbmRlbnRlZDsKKyAgICAgIGVsc2UgZm9yICh2YXIgb3V0
ZXIgPSBzdGF0ZS5sZXhpY2FsOyBvdXRlciAmJiBvdXRlci50eXBlID09ICIpIiAmJiBvdXRlci5h
bGlnbjsgb3V0ZXIgPSBvdXRlci5wcmV2KQorICAgICAgICBpbmRlbnQgPSBvdXRlci5pbmRlbnRl
ZDsKICAgICAgIHN0YXRlLmxleGljYWwgPSBuZXcgSlNMZXhpY2FsKGluZGVudCwgY3guc3RyZWFt
LmNvbHVtbigpLCB0eXBlLCBudWxsLCBzdGF0ZS5sZXhpY2FsLCBpbmZvKTsKICAgICB9OwogICAg
IHJlc3VsdC5sZXggPSB0cnVlOwpAQCAtMzQzLDcgKzM0OCw3IEBAIENvZGVNaXJyb3IuZGVmaW5l
TW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAg
aWYgKHR5cGUgPT0gImNhdGNoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBwdXNoY29u
dGV4dCwgZXhwZWN0KCIoIiksIGZ1bmFyZywgZXhwZWN0KCIpIiksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LCBwb3BsZXgsIHBvcGNvbnRleHQpOwogICAg
IGlmICh0eXBlID09ICJtb2R1bGUiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHB1c2hj
b250ZXh0LCBhZnRlck1vZHVsZSwgcG9wY29udGV4dCwgcG9wbGV4KTsKLSAgICBpZiAodHlwZSA9
PSAiY2xhc3MiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGNsYXNzTmFtZSwgb2JqbGl0
LCBwb3BsZXgpOworICAgIGlmICh0eXBlID09ICJjbGFzcyIpIHJldHVybiBjb250KHB1c2hsZXgo
ImZvcm0iKSwgY2xhc3NOYW1lLCBwb3BsZXgpOwogICAgIGlmICh0eXBlID09ICJleHBvcnQiKSBy
ZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGFmdGVyRXhwb3J0LCBwb3BsZXgpOwogICAgIGlm
ICh0eXBlID09ICJpbXBvcnQiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGFmdGVySW1w
b3J0LCBwb3BsZXgpOwogICAgIHJldHVybiBwYXNzKHB1c2hsZXgoInN0YXQiKSwgZXhwcmVzc2lv
biwgZXhwZWN0KCI7IiksIHBvcGxleCk7CkBAIC0zODgsNyArMzkzLDcgQEAgQ29kZU1pcnJvci5k
ZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsK
ICAgZnVuY3Rpb24gbWF5YmVvcGVyYXRvck5vQ29tbWEodHlwZSwgdmFsdWUsIG5vQ29tbWEpIHsK
ICAgICB2YXIgbWUgPSBub0NvbW1hID09IGZhbHNlID8gbWF5YmVvcGVyYXRvckNvbW1hIDogbWF5
YmVvcGVyYXRvck5vQ29tbWE7CiAgICAgdmFyIGV4cHIgPSBub0NvbW1hID09IGZhbHNlID8gZXhw
cmVzc2lvbiA6IGV4cHJlc3Npb25Ob0NvbW1hOwotICAgIGlmICh2YWx1ZSA9PSAiPT4iKSByZXR1
cm4gY29udChwdXNoY29udGV4dCwgbm9Db21tYSA/IGFycm93Qm9keU5vQ29tbWEgOiBhcnJvd0Jv
ZHksIHBvcGNvbnRleHQpOworICAgIGlmICh0eXBlID09ICI9PiIpIHJldHVybiBjb250KHB1c2hj
b250ZXh0LCBub0NvbW1hID8gYXJyb3dCb2R5Tm9Db21tYSA6IGFycm93Qm9keSwgcG9wY29udGV4
dCk7CiAgICAgaWYgKHR5cGUgPT0gIm9wZXJhdG9yIikgewogICAgICAgaWYgKC9cK1wrfC0tLy50
ZXN0KHZhbHVlKSkgcmV0dXJuIGNvbnQobWUpOwogICAgICAgaWYgKHZhbHVlID09ICI/IikgcmV0
dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KCI6IiksIGV4cHIpOwpAQCAtNDE0LDEzICs0MTks
MTEgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmln
LCBwYXJzZXJDb25maWcpIHsKICAgfQogICBmdW5jdGlvbiBhcnJvd0JvZHkodHlwZSkgewogICAg
IGZpbmRGYXRBcnJvdyhjeC5zdHJlYW0sIGN4LnN0YXRlKTsKLSAgICBpZiAodHlwZSA9PSAieyIp
IHJldHVybiBwYXNzKHN0YXRlbWVudCk7Ci0gICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbik7Cisg
ICAgcmV0dXJuIHBhc3ModHlwZSA9PSAieyIgPyBzdGF0ZW1lbnQgOiBleHByZXNzaW9uKTsKICAg
fQogICBmdW5jdGlvbiBhcnJvd0JvZHlOb0NvbW1hKHR5cGUpIHsKICAgICBmaW5kRmF0QXJyb3co
Y3guc3RyZWFtLCBjeC5zdGF0ZSk7Ci0gICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gcGFzcyhz
dGF0ZW1lbnQpOwotICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb25Ob0NvbW1hKTsKKyAgICByZXR1
cm4gcGFzcyh0eXBlID09ICJ7IiA/IHN0YXRlbWVudCA6IGV4cHJlc3Npb25Ob0NvbW1hKTsKICAg
fQogICBmdW5jdGlvbiBtYXliZWxhYmVsKHR5cGUpIHsKICAgICBpZiAodHlwZSA9PSAiOiIpIHJl
dHVybiBjb250KHBvcGxleCwgc3RhdGVtZW50KTsKQEAgLTQzMCwxNSArNDMzLDE4IEBAIENvZGVN
aXJyb3IuZGVmaW5lTW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29u
ZmlnKSB7CiAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikge2N4Lm1hcmtlZCA9ICJwcm9wZXJ0
eSI7IHJldHVybiBjb250KCk7fQogICB9CiAgIGZ1bmN0aW9uIG9ianByb3AodHlwZSwgdmFsdWUp
IHsKLSAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7CisgICAgaWYgKHR5cGUgPT0gInZhcmlh
YmxlIiB8fCBjeC5zdHlsZSA9PSAia2V5d29yZCIpIHsKICAgICAgIGN4Lm1hcmtlZCA9ICJwcm9w
ZXJ0eSI7CiAgICAgICBpZiAodmFsdWUgPT0gImdldCIgfHwgdmFsdWUgPT0gInNldCIpIHJldHVy
biBjb250KGdldHRlclNldHRlcik7CisgICAgICByZXR1cm4gY29udChhZnRlcnByb3ApOwogICAg
IH0gZWxzZSBpZiAodHlwZSA9PSAibnVtYmVyIiB8fCB0eXBlID09ICJzdHJpbmciKSB7Ci0gICAg
ICBjeC5tYXJrZWQgPSBqc29ubGRNb2RlID8gInByb3BlcnR5IiA6ICh0eXBlICsgIiBwcm9wZXJ0
eSIpOworICAgICAgY3gubWFya2VkID0ganNvbmxkTW9kZSA/ICJwcm9wZXJ0eSIgOiAoY3guc3R5
bGUgKyAiIHByb3BlcnR5Iik7CisgICAgICByZXR1cm4gY29udChhZnRlcnByb3ApOworICAgIH0g
ZWxzZSBpZiAodHlwZSA9PSAianNvbmxkLWtleXdvcmQiKSB7CisgICAgICByZXR1cm4gY29udChh
ZnRlcnByb3ApOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiWyIpIHsKICAgICAgIHJldHVybiBj
b250KGV4cHJlc3Npb24sIGV4cGVjdCgiXSIpLCBhZnRlcnByb3ApOwogICAgIH0KLSAgICBpZiAo
YXRvbWljVHlwZXMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBjb250KGFmdGVycHJvcCk7
CiAgIH0KICAgZnVuY3Rpb24gZ2V0dGVyU2V0dGVyKHR5cGUpIHsKICAgICBpZiAodHlwZSAhPSAi
dmFyaWFibGUiKSByZXR1cm4gcGFzcyhhZnRlcnByb3ApOwpAQCAtNDc2LDggKzQ4MiwxMSBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICBmdW5jdGlvbiBtYXliZXR5cGUodHlwZSkgewogICAgIGlmIChpc1RTICYm
IHR5cGUgPT0gIjoiKSByZXR1cm4gY29udCh0eXBlZGVmKTsKICAgfQorICBmdW5jdGlvbiBtYXli
ZWRlZmF1bHQoXywgdmFsdWUpIHsKKyAgICBpZiAodmFsdWUgPT0gIj0iKSByZXR1cm4gY29udChl
eHByZXNzaW9uTm9Db21tYSk7CisgIH0KICAgZnVuY3Rpb24gdHlwZWRlZih0eXBlKSB7Ci0gICAg
aWYgKHR5cGUgPT0gInZhcmlhYmxlIil7Y3gubWFya2VkID0gInZhcmlhYmxlLTMiOyByZXR1cm4g
Y29udCgpO30KKyAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7Y3gubWFya2VkID0gInZhcmlh
YmxlLTMiOyByZXR1cm4gY29udCgpO30KICAgfQogICBmdW5jdGlvbiB2YXJkZWYoKSB7CiAgICAg
cmV0dXJuIHBhc3MocGF0dGVybiwgbWF5YmV0eXBlLCBtYXliZUFzc2lnbiwgdmFyZGVmQ29udCk7
CkBAIC01MzIsMTYgKzU0MSwzNiBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQi
LCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICB9CiAgIGZ1bmN0aW9uIGZ1bmFy
Zyh0eXBlKSB7CiAgICAgaWYgKHR5cGUgPT0gInNwcmVhZCIpIHJldHVybiBjb250KGZ1bmFyZyk7
Ci0gICAgcmV0dXJuIHBhc3MocGF0dGVybiwgbWF5YmV0eXBlKTsKKyAgICByZXR1cm4gcGFzcyhw
YXR0ZXJuLCBtYXliZXR5cGUsIG1heWJlZGVmYXVsdCk7CiAgIH0KICAgZnVuY3Rpb24gY2xhc3NO
YW1lKHR5cGUsIHZhbHVlKSB7CiAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikge3JlZ2lzdGVy
KHZhbHVlKTsgcmV0dXJuIGNvbnQoY2xhc3NOYW1lQWZ0ZXIpO30KICAgfQotICBmdW5jdGlvbiBj
bGFzc05hbWVBZnRlcihfdHlwZSwgdmFsdWUpIHsKLSAgICBpZiAodmFsdWUgPT0gImV4dGVuZHMi
KSByZXR1cm4gY29udChleHByZXNzaW9uKTsKKyAgZnVuY3Rpb24gY2xhc3NOYW1lQWZ0ZXIodHlw
ZSwgdmFsdWUpIHsKKyAgICBpZiAodmFsdWUgPT0gImV4dGVuZHMiKSByZXR1cm4gY29udChleHBy
ZXNzaW9uLCBjbGFzc05hbWVBZnRlcik7CisgICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29u
dChwdXNobGV4KCJ9IiksIGNsYXNzQm9keSwgcG9wbGV4KTsKICAgfQotICBmdW5jdGlvbiBvYmps
aXQodHlwZSkgewotICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnRDb21tYXNlcChvYmpw
cm9wLCAifSIpOworICBmdW5jdGlvbiBjbGFzc0JvZHkodHlwZSwgdmFsdWUpIHsKKyAgICBpZiAo
dHlwZSA9PSAidmFyaWFibGUiIHx8IGN4LnN0eWxlID09ICJrZXl3b3JkIikgeworICAgICAgaWYg
KHZhbHVlID09ICJzdGF0aWMiKSB7CisgICAgICAgIGN4Lm1hcmtlZCA9ICJrZXl3b3JkIjsKKyAg
ICAgICAgcmV0dXJuIGNvbnQoY2xhc3NCb2R5KTsKKyAgICAgIH0KKyAgICAgIGN4Lm1hcmtlZCA9
ICJwcm9wZXJ0eSI7CisgICAgICBpZiAodmFsdWUgPT0gImdldCIgfHwgdmFsdWUgPT0gInNldCIp
IHJldHVybiBjb250KGNsYXNzR2V0dGVyU2V0dGVyLCBmdW5jdGlvbmRlZiwgY2xhc3NCb2R5KTsK
KyAgICAgIHJldHVybiBjb250KGZ1bmN0aW9uZGVmLCBjbGFzc0JvZHkpOworICAgIH0KKyAgICBp
ZiAodmFsdWUgPT0gIioiKSB7CisgICAgICBjeC5tYXJrZWQgPSAia2V5d29yZCI7CisgICAgICBy
ZXR1cm4gY29udChjbGFzc0JvZHkpOworICAgIH0KKyAgICBpZiAodHlwZSA9PSAiOyIpIHJldHVy
biBjb250KGNsYXNzQm9keSk7CisgICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwor
ICB9CisgIGZ1bmN0aW9uIGNsYXNzR2V0dGVyU2V0dGVyKHR5cGUpIHsKKyAgICBpZiAodHlwZSAh
PSAidmFyaWFibGUiKSByZXR1cm4gcGFzcygpOworICAgIGN4Lm1hcmtlZCA9ICJwcm9wZXJ0eSI7
CisgICAgcmV0dXJuIGNvbnQoKTsKICAgfQogICBmdW5jdGlvbiBhZnRlck1vZHVsZSh0eXBlLCB2
YWx1ZSkgewogICAgIGlmICh0eXBlID09ICJzdHJpbmciKSByZXR1cm4gY29udChzdGF0ZW1lbnQp
OwpAQCAtNTU5LDcgKzU4OCwxMSBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQi
LCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICBmdW5jdGlvbiBpbXBvcnRTcGVj
KHR5cGUsIHZhbHVlKSB7CiAgICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udENvbW1hc2Vw
KGltcG9ydFNwZWMsICJ9Iik7CiAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgcmVnaXN0ZXIo
dmFsdWUpOwotICAgIHJldHVybiBjb250KCk7CisgICAgaWYgKHZhbHVlID09ICIqIikgY3gubWFy
a2VkID0gImtleXdvcmQiOworICAgIHJldHVybiBjb250KG1heWJlQXMpOworICB9CisgIGZ1bmN0
aW9uIG1heWJlQXMoX3R5cGUsIHZhbHVlKSB7CisgICAgaWYgKHZhbHVlID09ICJhcyIpIHsgY3gu
bWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChpbXBvcnRTcGVjKTsgfQogICB9CiAgIGZ1
bmN0aW9uIG1heWJlRnJvbShfdHlwZSwgdmFsdWUpIHsKICAgICBpZiAodmFsdWUgPT0gImZyb20i
KSB7IGN4Lm1hcmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7IH0KQEAg
LTU3MCw3ICs2MDMsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5j
dGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICB9CiAgIGZ1bmN0aW9uIG1heWJlQXJyYXlD
b21wcmVoZW5zaW9uKHR5cGUpIHsKICAgICBpZiAodHlwZSA9PSAiZm9yIikgcmV0dXJuIHBhc3Mo
Y29tcHJlaGVuc2lvbiwgZXhwZWN0KCJdIikpOwotICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJu
IGNvbnQoY29tbWFzZXAoZXhwcmVzc2lvbk5vQ29tbWEsICJdIikpOworICAgIGlmICh0eXBlID09
ICIsIikgcmV0dXJuIGNvbnQoY29tbWFzZXAobWF5YmVleHByZXNzaW9uTm9Db21tYSwgIl0iKSk7
CiAgICAgcmV0dXJuIHBhc3MoY29tbWFzZXAoZXhwcmVzc2lvbk5vQ29tbWEsICJdIikpOwogICB9
CiAgIGZ1bmN0aW9uIGNvbXByZWhlbnNpb24odHlwZSkgewpAQCAtNTc4LDYgKzYxMSwxMiBAQCBD
b2RlTWlycm9yLmRlZmluZU1vZGUoImphdmFzY3JpcHQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNl
ckNvbmZpZykgewogICAgIGlmICh0eXBlID09ICJpZiIpIHJldHVybiBjb250KGV4cHJlc3Npb24s
IGNvbXByZWhlbnNpb24pOwogICB9CiAKKyAgZnVuY3Rpb24gaXNDb250aW51ZWRTdGF0ZW1lbnQo
c3RhdGUsIHRleHRBZnRlcikgeworICAgIHJldHVybiBzdGF0ZS5sYXN0VHlwZSA9PSAib3BlcmF0
b3IiIHx8IHN0YXRlLmxhc3RUeXBlID09ICIsIiB8fAorICAgICAgaXNPcGVyYXRvckNoYXIudGVz
dCh0ZXh0QWZ0ZXIuY2hhckF0KDApKSB8fAorICAgICAgL1ssLl0vLnRlc3QodGV4dEFmdGVyLmNo
YXJBdCgwKSk7CisgIH0KKwogICAvLyBJbnRlcmZhY2UKIAogICByZXR1cm4gewpAQCAtNjI5LDE4
ICs2NjgsMTkgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24o
Y29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImZvcm0iICYm
IGZpcnN0Q2hhciA9PSAieyIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkOwogICAgICAgZWxzZSBp
ZiAodHlwZSA9PSAiZm9ybSIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgaW5kZW50VW5pdDsK
ICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gInN0YXQiKQotICAgICAgICByZXR1cm4gbGV4aWNhbC5p
bmRlbnRlZCArIChzdGF0ZS5sYXN0VHlwZSA9PSAib3BlcmF0b3IiIHx8IHN0YXRlLmxhc3RUeXBl
ID09ICIsIiA/IHN0YXRlbWVudEluZGVudCB8fCBpbmRlbnRVbml0IDogMCk7CisgICAgICAgIHJl
dHVybiBsZXhpY2FsLmluZGVudGVkICsgKGlzQ29udGludWVkU3RhdGVtZW50KHN0YXRlLCB0ZXh0
QWZ0ZXIpID8gc3RhdGVtZW50SW5kZW50IHx8IGluZGVudFVuaXQgOiAwKTsKICAgICAgIGVsc2Ug
aWYgKGxleGljYWwuaW5mbyA9PSAic3dpdGNoIiAmJiAhY2xvc2luZyAmJiBwYXJzZXJDb25maWcu
ZG91YmxlSW5kZW50U3dpdGNoICE9IGZhbHNlKQogICAgICAgICByZXR1cm4gbGV4aWNhbC5pbmRl
bnRlZCArICgvXig/OmNhc2V8ZGVmYXVsdClcYi8udGVzdCh0ZXh0QWZ0ZXIpID8gaW5kZW50VW5p
dCA6IDIgKiBpbmRlbnRVbml0KTsKICAgICAgIGVsc2UgaWYgKGxleGljYWwuYWxpZ24pIHJldHVy
biBsZXhpY2FsLmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpOwogICAgICAgZWxzZSByZXR1cm4g
bGV4aWNhbC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpOwogICAgIH0sCiAK
LSAgICBlbGVjdHJpY0NoYXJzOiAiOnt9IiwKKyAgICBlbGVjdHJpY0lucHV0OiAvXlxzKig/OmNh
c2UgLio/OnxkZWZhdWx0Onxce3xcfSkkLywKICAgICBibG9ja0NvbW1lbnRTdGFydDoganNvbk1v
ZGUgPyBudWxsIDogIi8qIiwKICAgICBibG9ja0NvbW1lbnRFbmQ6IGpzb25Nb2RlID8gbnVsbCA6
ICIqLyIsCiAgICAgbGluZUNvbW1lbnQ6IGpzb25Nb2RlID8gbnVsbCA6ICIvLyIsCiAgICAgZm9s
ZDogImJyYWNlIiwKKyAgICBjbG9zZUJyYWNrZXRzOiAiKClbXXt9JydcIlwiYGAiLAogCiAgICAg
aGVscGVyVHlwZToganNvbk1vZGUgPyAianNvbiIgOiAiamF2YXNjcmlwdCIsCiAgICAganNvbmxk
TW9kZToganNvbmxkTW9kZSwKQEAgLTY0OCwxMSArNjg4LDEyIEBAIENvZGVNaXJyb3IuZGVmaW5l
TW9kZSgiamF2YXNjcmlwdCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIH07
CiB9KTsKIAotQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcigid29yZENoYXJzIiwgImphdmFzY3Jp
cHQiLCAvW1xcdyRdLyk7CitDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKCJ3b3JkQ2hhcnMiLCAi
amF2YXNjcmlwdCIsIC9bXHckXS8pOwogCiBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvamF2
YXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CiBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvZWNt
YXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CiBDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0
aW9uL2phdmFzY3JpcHQiLCAiamF2YXNjcmlwdCIpOworQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJh
cHBsaWNhdGlvbi94LWphdmFzY3JpcHQiLCAiamF2YXNjcmlwdCIpOwogQ29kZU1pcnJvci5kZWZp
bmVNSU1FKCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0IiwgImphdmFzY3JpcHQiKTsKIENvZGVNaXJy
b3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24vanNvbiIsIHtuYW1lOiAiamF2YXNjcmlwdCIsIGpz
b246IHRydWV9KTsKIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veC1qc29uIiwg
e25hbWU6ICJqYXZhc2NyaXB0IiwganNvbjogdHJ1ZX0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9saXZlc2NyaXB0
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1p
cnJvci9saXZlc2NyaXB0LmpzCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXgg
NTU4ODJlZmMzYmM0ZjczYmY5NjA5NTUwOTJhMWQxODA4Y2Q5YzI3My4uNGIyNmUwNDYxOWNkNjM5
NjYwMWQyMjQ3MjRlYzI5Y2QzYTU3ZDljZgotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL2xpdmVzY3JpcHQuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9saXZlc2Ny
aXB0LmpzCkBAIC0yNCw4ICsyNCw4IEBACiAgICAgICAgIHZhciBuciA9IFJ1bGVzW25leHRfcnVs
ZV07CiAgICAgICAgIGlmIChuci5zcGxpY2UpIHsKICAgICAgICAgICBmb3IgKHZhciBpJCA9IDA7
IGkkIDwgbnIubGVuZ3RoOyArK2kkKSB7Ci0gICAgICAgICAgICB2YXIgciA9IG5yW2kkXSwgbTsK
LSAgICAgICAgICAgIGlmIChyLnJlZ2V4ICYmIChtID0gc3RyZWFtLm1hdGNoKHIucmVnZXgpKSkg
eworICAgICAgICAgICAgdmFyIHIgPSBucltpJF07CisgICAgICAgICAgICBpZiAoci5yZWdleCAm
JiBzdHJlYW0ubWF0Y2goci5yZWdleCkpIHsKICAgICAgICAgICAgICAgc3RhdGUubmV4dCA9IHIu
bmV4dCB8fCBzdGF0ZS5uZXh0OwogICAgICAgICAgICAgICByZXR1cm4gci50b2tlbjsKICAgICAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0V4dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hicmFja2V0cy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hicmFja2V0cy5qcwpv
bGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGZhMWFlMDMwYTU0NDJjN2FiODVj
YThjZjMwMWNhNzZlNmNmMTgxMzIuLjcwZTFhZTE4Yzc0ODE3NDI1OThjOGIyMDY5YjhhNmM3MTdm
NDcyNTcKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
Q29kZU1pcnJvci9tYXRjaGJyYWNrZXRzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IvbWF0Y2hicmFja2V0cy5qcwpAQCAtODEs
NyArODEsNyBAQAogICAgIGlmIChtYXJrcy5sZW5ndGgpIHsKICAgICAgIC8vIEtsdWRnZSB0byB3
b3JrIGFyb3VuZCB0aGUgSUUgYnVnIGZyb20gaXNzdWUgIzExOTMsIHdoZXJlIHRleHQKICAgICAg
IC8vIGlucHV0IHN0b3BzIGdvaW5nIHRvIHRoZSB0ZXh0YXJlIHdoZXZlciB0aGlzIGZpcmVzLgot
ICAgICAgaWYgKGllX2x0OCAmJiBjbS5zdGF0ZS5mb2N1c2VkKSBjbS5kaXNwbGF5LmlucHV0LmZv
Y3VzKCk7CisgICAgICBpZiAoaWVfbHQ4ICYmIGNtLnN0YXRlLmZvY3VzZWQpIGNtLmZvY3VzKCk7
CiAKICAgICAgIHZhciBjbGVhciA9IGZ1bmN0aW9uKCkgewogICAgICAgICBjbS5vcGVyYXRpb24o
ZnVuY3Rpb24oKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL292ZXJsYXkuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL292ZXJsYXkuanMKb2xkIG1vZGUg
MTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAzOTMwNTRkZmE0NDE3NzhmZTg1MDFkOTZiYmU3
Y2I4Y2YwMTY3MzI3Li5lMWI5ZWQzNzUzMGFkODI0ZTIzZDUwYTBjNGM5MTA1N2M4ZTlmYjQxCi0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJy
b3Ivb3ZlcmxheS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Db2RlTWlycm9yL292ZXJsYXkuanMKQEAgLTI4LDcgKzI4LDcgQEAgQ29kZU1pcnJv
ci5vdmVybGF5TW9kZSA9IGZ1bmN0aW9uKGJhc2UsIG92ZXJsYXksIGNvbWJpbmUpIHsKICAgICAg
ICAgb3ZlcmxheTogQ29kZU1pcnJvci5zdGFydFN0YXRlKG92ZXJsYXkpLAogICAgICAgICBiYXNl
UG9zOiAwLCBiYXNlQ3VyOiBudWxsLAogICAgICAgICBvdmVybGF5UG9zOiAwLCBvdmVybGF5Q3Vy
OiBudWxsLAotICAgICAgICBsaW5lU2VlbjogbnVsbAorICAgICAgICBzdHJlYW1TZWVuOiBudWxs
CiAgICAgICB9OwogICAgIH0sCiAgICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewpAQCAt
NDEsOSArNDEsOSBAQCBDb2RlTWlycm9yLm92ZXJsYXlNb2RlID0gZnVuY3Rpb24oYmFzZSwgb3Zl
cmxheSwgY29tYmluZSkgewogICAgIH0sCiAKICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBz
dGF0ZSkgewotICAgICAgaWYgKHN0cmVhbS5zb2woKSB8fCBzdHJlYW0uc3RyaW5nICE9IHN0YXRl
LmxpbmVTZWVuIHx8CisgICAgICBpZiAoc3RyZWFtICE9IHN0YXRlLnN0cmVhbVNlZW4gfHwKICAg
ICAgICAgICBNYXRoLm1pbihzdGF0ZS5iYXNlUG9zLCBzdGF0ZS5vdmVybGF5UG9zKSA8IHN0cmVh
bS5zdGFydCkgewotICAgICAgICBzdGF0ZS5saW5lU2VlbiA9IHN0cmVhbS5zdHJpbmc7CisgICAg
ICAgIHN0YXRlLnN0cmVhbVNlZW4gPSBzdHJlYW07CiAgICAgICAgIHN0YXRlLmJhc2VQb3MgPSBz
dGF0ZS5vdmVybGF5UG9zID0gc3RyZWFtLnN0YXJ0OwogICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3Bs
YWNlaG9sZGVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJu
YWwvQ29kZU1pcnJvci9wbGFjZWhvbGRlci5qcwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAw
NzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Db2RlTWlycm9yL3J1bm1vZGUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3J1bm1vZGUuanMKb2xkIG1vZGUgMTAwNjQ0Cm5l
dyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zYXNzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zYXNzLmpzCm9sZCBtb2RlIDEwMDY0
NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMmZmNTAwM2MwYWQ3OTlhZTc4Y2JiZWJlYzlkMzVlNjBj
OWIyZmNjMC4uNjk3M2VjZTI5MmIwOTAxNmE0MjE5N2E4MWUzZTA5NThlY2Q3ZGUxMwotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3Nh
c3MuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
Q29kZU1pcnJvci9zYXNzLmpzCkBAIC0xMiwzMDIgKzEyLDM2OCBAQAogInVzZSBzdHJpY3QiOwog
CiBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNhc3MiLCBmdW5jdGlvbihjb25maWcpIHsKLSAgdmFy
IHRva2VuUmVnZXhwID0gZnVuY3Rpb24od29yZHMpeworICBmdW5jdGlvbiB0b2tlblJlZ2V4cCh3
b3JkcykgewogICAgIHJldHVybiBuZXcgUmVnRXhwKCJeIiArIHdvcmRzLmpvaW4oInwiKSk7Ci0g
IH07CisgIH0KIAogICB2YXIga2V5d29yZHMgPSBbInRydWUiLCAiZmFsc2UiLCAibnVsbCIsICJh
dXRvIl07CiAgIHZhciBrZXl3b3Jkc1JlZ2V4cCA9IG5ldyBSZWdFeHAoIl4iICsga2V5d29yZHMu
am9pbigifCIpKTsKIAotICB2YXIgb3BlcmF0b3JzID0gWyJcXCgiLCAiXFwpIiwgIj0iLCAiPiIs
ICI8IiwgIj09IiwgIj49IiwgIjw9IiwgIlxcKyIsICItIiwgIlxcIT0iLCAiLyIsICJcXCoiLCAi
JSIsICJhbmQiLCAib3IiLCAibm90Il07CisgIHZhciBvcGVyYXRvcnMgPSBbIlxcKCIsICJcXCki
LCAiPSIsICI+IiwgIjwiLCAiPT0iLCAiPj0iLCAiPD0iLCAiXFwrIiwgIi0iLAorICAgICAgICAg
ICAgICAgICAgICJcXCE9IiwgIi8iLCAiXFwqIiwgIiUiLCAiYW5kIiwgIm9yIiwgIm5vdCIsICI7
IiwiXFx7IiwiXFx9IiwiOiJdOwogICB2YXIgb3BSZWdleHAgPSB0b2tlblJlZ2V4cChvcGVyYXRv
cnMpOwogCi0gIHZhciBwc2V1ZG9FbGVtZW50c1JlZ2V4cCA9IC9eOjo/W1x3XC1dKy87CisgIHZh
ciBwc2V1ZG9FbGVtZW50c1JlZ2V4cCA9IC9eOjo/W2EtekEtWl9dW1x3XC1dKi87CiAKLSAgdmFy
IHVybFRva2VucyA9IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpeworICBmdW5jdGlvbiB1cmxUb2tl
bnMoc3RyZWFtLCBzdGF0ZSkgewogICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7CiAKLSAgICBp
ZiAoY2ggPT09ICIpIil7CisgICAgaWYgKGNoID09PSAiKSIpIHsKICAgICAgIHN0cmVhbS5uZXh0
KCk7CiAgICAgICBzdGF0ZS50b2tlbml6ZXIgPSB0b2tlbkJhc2U7CiAgICAgICByZXR1cm4gIm9w
ZXJhdG9yIjsKLSAgICB9ZWxzZSBpZiAoY2ggPT09ICIoIil7CisgICAgfSBlbHNlIGlmIChjaCA9
PT0gIigiKSB7CiAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7
CiAKICAgICAgIHJldHVybiAib3BlcmF0b3IiOwotICAgIH1lbHNlIGlmIChjaCA9PT0gIiciIHx8
IGNoID09PSAnIicpeworICAgIH0gZWxzZSBpZiAoY2ggPT09ICInIiB8fCBjaCA9PT0gJyInKSB7
CiAgICAgICBzdGF0ZS50b2tlbml6ZXIgPSBidWlsZFN0cmluZ1Rva2VuaXplcihzdHJlYW0ubmV4
dCgpKTsKICAgICAgIHJldHVybiAic3RyaW5nIjsKLSAgICB9ZWxzZXsKKyAgICB9IGVsc2Ugewog
ICAgICAgc3RhdGUudG9rZW5pemVyID0gYnVpbGRTdHJpbmdUb2tlbml6ZXIoIikiLCBmYWxzZSk7
CiAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgfQotICB9OwotICB2YXIgbXVsdGlsaW5lQ29t
bWVudCA9IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKLSAgICBpZiAoc3RyZWFtLnNraXBUbygi
Ki8iKSl7Ci0gICAgICBzdHJlYW0ubmV4dCgpOwotICAgICAgc3RyZWFtLm5leHQoKTsKLSAgICAg
IHN0YXRlLnRva2VuaXplciA9IHRva2VuQmFzZTsKLSAgICB9ZWxzZSB7Ci0gICAgICBzdHJlYW0u
bmV4dCgpOwotICAgIH0KKyAgfQorICBmdW5jdGlvbiBjb21tZW50KGluZGVudGF0aW9uLCBtdWx0
aUxpbmUpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgeworICAgICAgaWYg
KHN0cmVhbS5zb2woKSAmJiBzdHJlYW0uaW5kZW50YXRpb24oKSA8PSBpbmRlbnRhdGlvbikgewor
ICAgICAgICBzdGF0ZS50b2tlbml6ZXIgPSB0b2tlbkJhc2U7CisgICAgICAgIHJldHVybiB0b2tl
bkJhc2Uoc3RyZWFtLCBzdGF0ZSk7CisgICAgICB9CiAKLSAgICByZXR1cm4gImNvbW1lbnQiOwot
ICB9OworICAgICAgaWYgKG11bHRpTGluZSAmJiBzdHJlYW0uc2tpcFRvKCIqLyIpKSB7CisgICAg
ICAgIHN0cmVhbS5uZXh0KCk7CisgICAgICAgIHN0cmVhbS5uZXh0KCk7CisgICAgICAgIHN0YXRl
LnRva2VuaXplciA9IHRva2VuQmFzZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN0cmVhbS5z
a2lwVG9FbmQoKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuICJjb21tZW50IjsKKyAgICB9Owor
ICB9CiAKLSAgdmFyIGJ1aWxkU3RyaW5nVG9rZW5pemVyID0gZnVuY3Rpb24ocXVvdGUsIGdyZWVk
eSl7Ci0gICAgaWYoZ3JlZWR5ID09IG51bGwpeyBncmVlZHkgPSB0cnVlOyB9CisgIGZ1bmN0aW9u
IGJ1aWxkU3RyaW5nVG9rZW5pemVyKHF1b3RlLCBncmVlZHkpIHsKKyAgICBpZiAoZ3JlZWR5ID09
IG51bGwpIHsgZ3JlZWR5ID0gdHJ1ZTsgfQogCi0gICAgZnVuY3Rpb24gc3RyaW5nVG9rZW5pemVy
KHN0cmVhbSwgc3RhdGUpeworICAgIGZ1bmN0aW9uIHN0cmluZ1Rva2VuaXplcihzdHJlYW0sIHN0
YXRlKSB7CiAgICAgICB2YXIgbmV4dENoYXIgPSBzdHJlYW0ubmV4dCgpOwogICAgICAgdmFyIHBl
ZWtDaGFyID0gc3RyZWFtLnBlZWsoKTsKICAgICAgIHZhciBwcmV2aW91c0NoYXIgPSBzdHJlYW0u
c3RyaW5nLmNoYXJBdChzdHJlYW0ucG9zLTIpOwogCiAgICAgICB2YXIgZW5kaW5nU3RyaW5nID0g
KChuZXh0Q2hhciAhPT0gIlxcIiAmJiBwZWVrQ2hhciA9PT0gcXVvdGUpIHx8IChuZXh0Q2hhciA9
PT0gcXVvdGUgJiYgcHJldmlvdXNDaGFyICE9PSAiXFwiKSk7CiAKLSAgICAgIC8qCi0gICAgICBj
b25zb2xlLmxvZygicHJldmlvdXNDaGFyOiAiICsgcHJldmlvdXNDaGFyKTsKLSAgICAgIGNvbnNv
bGUubG9nKCJuZXh0Q2hhcjogIiArIG5leHRDaGFyKTsKLSAgICAgIGNvbnNvbGUubG9nKCJwZWVr
Q2hhcjogIiArIHBlZWtDaGFyKTsKLSAgICAgIGNvbnNvbGUubG9nKCJlbmRpbmc6ICIgKyBlbmRp
bmdTdHJpbmcpOwotICAgICAgKi8KLQotICAgICAgaWYgKGVuZGluZ1N0cmluZyl7CisgICAgICBp
ZiAoZW5kaW5nU3RyaW5nKSB7CiAgICAgICAgIGlmIChuZXh0Q2hhciAhPT0gcXVvdGUgJiYgZ3Jl
ZWR5KSB7IHN0cmVhbS5uZXh0KCk7IH0KICAgICAgICAgc3RhdGUudG9rZW5pemVyID0gdG9rZW5C
YXNlOwogICAgICAgICByZXR1cm4gInN0cmluZyI7Ci0gICAgICB9ZWxzZSBpZiAobmV4dENoYXIg
PT09ICIjIiAmJiBwZWVrQ2hhciA9PT0gInsiKXsKKyAgICAgIH0gZWxzZSBpZiAobmV4dENoYXIg
PT09ICIjIiAmJiBwZWVrQ2hhciA9PT0gInsiKSB7CiAgICAgICAgIHN0YXRlLnRva2VuaXplciA9
IGJ1aWxkSW50ZXJwb2xhdGlvblRva2VuaXplcihzdHJpbmdUb2tlbml6ZXIpOwogICAgICAgICBz
dHJlYW0ubmV4dCgpOwogICAgICAgICByZXR1cm4gIm9wZXJhdG9yIjsKLSAgICAgIH1lbHNlIHsK
KyAgICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybiAic3RyaW5nIjsKICAgICAgIH0KICAgICB9
CiAKICAgICByZXR1cm4gc3RyaW5nVG9rZW5pemVyOwotICB9OworICB9CiAKLSAgdmFyIGJ1aWxk
SW50ZXJwb2xhdGlvblRva2VuaXplciA9IGZ1bmN0aW9uKGN1cnJlbnRUb2tlbml6ZXIpewotICAg
IHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKXsKLSAgICAgIGlmIChzdHJlYW0ucGVlaygp
ID09PSAifSIpeworICBmdW5jdGlvbiBidWlsZEludGVycG9sYXRpb25Ub2tlbml6ZXIoY3VycmVu
dFRva2VuaXplcikgeworICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CisgICAg
ICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gIn0iKSB7CiAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAg
ICAgICAgIHN0YXRlLnRva2VuaXplciA9IGN1cnJlbnRUb2tlbml6ZXI7CiAgICAgICAgIHJldHVy
biAib3BlcmF0b3IiOwotICAgICAgfWVsc2V7CisgICAgICB9IGVsc2UgewogICAgICAgICByZXR1
cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpOwogICAgICAgfQogICAgIH07Ci0gIH07CisgIH0K
IAotICB2YXIgaW5kZW50ID0gZnVuY3Rpb24oc3RhdGUpewotICAgIGlmIChzdGF0ZS5pbmRlbnRD
b3VudCA9PSAwKXsKKyAgZnVuY3Rpb24gaW5kZW50KHN0YXRlKSB7CisgICAgaWYgKHN0YXRlLmlu
ZGVudENvdW50ID09IDApIHsKICAgICAgIHN0YXRlLmluZGVudENvdW50Kys7CiAgICAgICB2YXIg
bGFzdFNjb3BlT2Zmc2V0ID0gc3RhdGUuc2NvcGVzWzBdLm9mZnNldDsKICAgICAgIHZhciBjdXJy
ZW50T2Zmc2V0ID0gbGFzdFNjb3BlT2Zmc2V0ICsgY29uZmlnLmluZGVudFVuaXQ7CiAgICAgICBz
dGF0ZS5zY29wZXMudW5zaGlmdCh7IG9mZnNldDpjdXJyZW50T2Zmc2V0IH0pOwogICAgIH0KLSAg
fTsKKyAgfQogCi0gIHZhciBkZWRlbnQgPSBmdW5jdGlvbihzdGF0ZSl7Ci0gICAgaWYgKHN0YXRl
LnNjb3Blcy5sZW5ndGggPT0gMSkgeyByZXR1cm47IH0KKyAgZnVuY3Rpb24gZGVkZW50KHN0YXRl
KSB7CisgICAgaWYgKHN0YXRlLnNjb3Blcy5sZW5ndGggPT0gMSkgcmV0dXJuOwogCiAgICAgc3Rh
dGUuc2NvcGVzLnNoaWZ0KCk7Ci0gIH07CisgIH0KIAotICB2YXIgdG9rZW5CYXNlID0gZnVuY3Rp
b24oc3RyZWFtLCBzdGF0ZSkgeworICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkg
ewogICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7CiAKLSAgICAvLyBTaW5nbGUgbGluZSBDb21t
ZW50Ci0gICAgaWYgKHN0cmVhbS5tYXRjaCgnLy8nKSkgewotICAgICAgc3RyZWFtLnNraXBUb0Vu
ZCgpOwotICAgICAgcmV0dXJuICJjb21tZW50IjsKKyAgICAvLyBDb21tZW50CisgICAgaWYgKHN0
cmVhbS5tYXRjaCgiLyoiKSkgeworICAgICAgc3RhdGUudG9rZW5pemVyID0gY29tbWVudChzdHJl
YW0uaW5kZW50YXRpb24oKSwgdHJ1ZSk7CisgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemVyKHN0
cmVhbSwgc3RhdGUpOwogICAgIH0KLQotICAgIC8vIE11bHRpbGluZSBDb21tZW50Ci0gICAgaWYg
KHN0cmVhbS5tYXRjaCgnLyonKSl7Ci0gICAgICBzdGF0ZS50b2tlbml6ZXIgPSBtdWx0aWxpbmVD
b21tZW50OworICAgIGlmIChzdHJlYW0ubWF0Y2goIi8vIikpIHsKKyAgICAgIHN0YXRlLnRva2Vu
aXplciA9IGNvbW1lbnQoc3RyZWFtLmluZGVudGF0aW9uKCksIGZhbHNlKTsKICAgICAgIHJldHVy
biBzdGF0ZS50b2tlbml6ZXIoc3RyZWFtLCBzdGF0ZSk7CiAgICAgfQogCiAgICAgLy8gSW50ZXJw
b2xhdGlvbgotICAgIGlmIChzdHJlYW0ubWF0Y2goJyN7JykpewotICAgIHN0YXRlLnRva2VuaXpl
ciA9IGJ1aWxkSW50ZXJwb2xhdGlvblRva2VuaXplcih0b2tlbkJhc2UpOworICAgIGlmIChzdHJl
YW0ubWF0Y2goIiN7IikpIHsKKyAgICAgIHN0YXRlLnRva2VuaXplciA9IGJ1aWxkSW50ZXJwb2xh
dGlvblRva2VuaXplcih0b2tlbkJhc2UpOwogICAgICAgcmV0dXJuICJvcGVyYXRvciI7CiAgICAg
fQogCi0gICAgaWYgKGNoID09PSAiLiIpeworICAgIC8vIFN0cmluZ3MKKyAgICBpZiAoY2ggPT09
ICciJyB8fCBjaCA9PT0gIiciKSB7CiAgICAgICBzdHJlYW0ubmV4dCgpOworICAgICAgc3RhdGUu
dG9rZW5pemVyID0gYnVpbGRTdHJpbmdUb2tlbml6ZXIoY2gpOworICAgICAgcmV0dXJuICJzdHJp
bmciOworICAgIH0KIAotICAgICAgLy8gTWF0Y2ggY2xhc3Mgc2VsZWN0b3JzCi0gICAgICBpZiAo
c3RyZWFtLm1hdGNoKC9eW1x3LV0rLykpewotICAgICAgICBpbmRlbnQoc3RhdGUpOwotICAgICAg
ICByZXR1cm4gImF0b20iOwotICAgICAgfWVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICIjIil7
Ci0gICAgICAgIGluZGVudChzdGF0ZSk7Ci0gICAgICAgIHJldHVybiAiYXRvbSI7Ci0gICAgICB9
ZWxzZXsKLSAgICAgICAgcmV0dXJuICJvcGVyYXRvciI7CisgICAgaWYoIXN0YXRlLmN1cnNvckhh
bGYpey8vIHN0YXRlLmN1cnNvckhhbGYgPT09IDAKKyAgICAvLyBmaXJzdCBoYWxmIGkuZS4gYmVm
b3JlIDogZm9yIGtleS12YWx1ZSBwYWlycworICAgIC8vIGluY2x1ZGluZyBzZWxlY3RvcnMKKwor
ICAgICAgaWYgKGNoID09PSAiLiIpIHsKKyAgICAgICAgc3RyZWFtLm5leHQoKTsKKyAgICAgICAg
aWYgKHN0cmVhbS5tYXRjaCgvXltcdy1dKy8pKSB7CisgICAgICAgICAgaW5kZW50KHN0YXRlKTsK
KyAgICAgICAgICByZXR1cm4gImF0b20iOworICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVr
KCkgPT09ICIjIikgeworICAgICAgICAgIGluZGVudChzdGF0ZSk7CisgICAgICAgICAgcmV0dXJu
ICJhdG9tIjsKKyAgICAgICAgfQogICAgICAgfQotICAgIH0KIAotICAgIGlmIChjaCA9PT0gIiMi
KXsKLSAgICAgIHN0cmVhbS5uZXh0KCk7CisgICAgICBpZiAoY2ggPT09ICIjIikgeworICAgICAg
ICBzdHJlYW0ubmV4dCgpOworICAgICAgICAvLyBJRCBzZWxlY3RvcnMKKyAgICAgICAgaWYgKHN0
cmVhbS5tYXRjaCgvXltcdy1dKy8pKSB7CisgICAgICAgICAgaW5kZW50KHN0YXRlKTsKKyAgICAg
ICAgICByZXR1cm4gImF0b20iOworICAgICAgICB9CisgICAgICAgIGlmIChzdHJlYW0ucGVlaygp
ID09PSAiIyIpIHsKKyAgICAgICAgICBpbmRlbnQoc3RhdGUpOworICAgICAgICAgIHJldHVybiAi
YXRvbSI7CisgICAgICAgIH0KKyAgICAgIH0KIAotICAgICAgLy8gSGV4IG51bWJlcnMKLSAgICAg
IGlmIChzdHJlYW0ubWF0Y2goL1swLTlhLWZBLUZdezZ9fFswLTlhLWZBLUZdezN9LykpewotICAg
ICAgICByZXR1cm4gIm51bWJlciI7CisgICAgICAvLyBWYXJpYWJsZXMKKyAgICAgIGlmIChjaCA9
PT0gIiQiKSB7CisgICAgICAgIHN0cmVhbS5uZXh0KCk7CisgICAgICAgIHN0cmVhbS5lYXRXaGls
ZSgvW1x3LV0vKTsKKyAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgICAgIH0KIAotICAg
ICAgLy8gSUQgc2VsZWN0b3JzCi0gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW1x3LV0rLykpewot
ICAgICAgICBpbmRlbnQoc3RhdGUpOworICAgICAgLy8gTnVtYmVycworICAgICAgaWYgKHN0cmVh
bS5tYXRjaCgvXi0/WzAtOVwuXSsvKSkKKyAgICAgICAgcmV0dXJuICJudW1iZXIiOworCisgICAg
ICAvLyBVbml0cworICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXihweHxlbXxpbilcYi8pKQorICAg
ICAgICByZXR1cm4gInVuaXQiOworCisgICAgICBpZiAoc3RyZWFtLm1hdGNoKGtleXdvcmRzUmVn
ZXhwKSkKKyAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKKworICAgICAgaWYgKHN0cmVhbS5tYXRj
aCgvXnVybC8pICYmIHN0cmVhbS5wZWVrKCkgPT09ICIoIikgeworICAgICAgICBzdGF0ZS50b2tl
bml6ZXIgPSB1cmxUb2tlbnM7CiAgICAgICAgIHJldHVybiAiYXRvbSI7CiAgICAgICB9CiAKLSAg
ICAgIGlmIChzdHJlYW0ucGVlaygpID09PSAiIyIpewotICAgICAgICBpbmRlbnQoc3RhdGUpOwot
ICAgICAgICByZXR1cm4gImF0b20iOworICAgICAgaWYgKGNoID09PSAiPSIpIHsKKyAgICAgICAg
Ly8gTWF0Y2ggc2hvcnRjdXQgbWl4aW4gZGVmaW5pdGlvbgorICAgICAgICBpZiAoc3RyZWFtLm1h
dGNoKC9ePVtcdy1dKy8pKSB7CisgICAgICAgICAgaW5kZW50KHN0YXRlKTsKKyAgICAgICAgICBy
ZXR1cm4gIm1ldGEiOworICAgICAgICB9CiAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gTnVtYmVy
cwotICAgIGlmIChzdHJlYW0ubWF0Y2goL14tP1swLTlcLl0rLykpewotICAgICAgcmV0dXJuICJu
dW1iZXIiOwotICAgIH0KKyAgICAgIGlmIChjaCA9PT0gIisiKSB7CisgICAgICAgIC8vIE1hdGNo
IHNob3J0Y3V0IG1peGluIGRlZmluaXRpb24KKyAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlwr
W1x3LV0rLykpeworICAgICAgICAgIHJldHVybiAidmFyaWFibGUtMyI7CisgICAgICAgIH0KKyAg
ICAgIH0KIAotICAgIC8vIFVuaXRzCi0gICAgaWYgKHN0cmVhbS5tYXRjaCgvXihweHxlbXxpbilc
Yi8pKXsKLSAgICAgIHJldHVybiAidW5pdCI7Ci0gICAgfQorICAgICAgaWYoY2ggPT09ICJAIil7
CisgICAgICAgIGlmKHN0cmVhbS5tYXRjaCgvQGV4dGVuZC8pKXsKKyAgICAgICAgICBpZighc3Ry
ZWFtLm1hdGNoKC9ccypbXHddLykpCisgICAgICAgICAgICBkZWRlbnQoc3RhdGUpOworICAgICAg
ICB9CisgICAgICB9CiAKLSAgICBpZiAoc3RyZWFtLm1hdGNoKGtleXdvcmRzUmVnZXhwKSl7Ci0g
ICAgICByZXR1cm4gImtleXdvcmQiOwotICAgIH0KIAotICAgIGlmIChzdHJlYW0ubWF0Y2goL151
cmwvKSAmJiBzdHJlYW0ucGVlaygpID09PSAiKCIpewotICAgICAgc3RhdGUudG9rZW5pemVyID0g
dXJsVG9rZW5zOwotICAgICAgcmV0dXJuICJhdG9tIjsKLSAgICB9CisgICAgICAvLyBJbmRlbnQg
RGlyZWN0aXZlcworICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXkAoZWxzZSBpZnxpZnxtZWRpYXxl
bHNlfGZvcnxlYWNofHdoaWxlfG1peGlufGZ1bmN0aW9uKS8pKSB7CisgICAgICAgIGluZGVudChz
dGF0ZSk7CisgICAgICAgIHJldHVybiAibWV0YSI7CisgICAgICB9CiAKLSAgICAvLyBWYXJpYWJs
ZXMKLSAgICBpZiAoY2ggPT09ICIkIil7Ci0gICAgICBzdHJlYW0ubmV4dCgpOwotICAgICAgc3Ry
ZWFtLmVhdFdoaWxlKC9bXHctXS8pOworICAgICAgLy8gT3RoZXIgRGlyZWN0aXZlcworICAgICAg
aWYgKGNoID09PSAiQCIpIHsKKyAgICAgICAgc3RyZWFtLm5leHQoKTsKKyAgICAgICAgc3RyZWFt
LmVhdFdoaWxlKC9bXHctXS8pOworICAgICAgICByZXR1cm4gIm1ldGEiOworICAgICAgfQorCisg
ICAgICBpZiAoc3RyZWFtLmVhdFdoaWxlKC9bXHctXS8pKXsKKyAgICAgICAgaWYoc3RyZWFtLm1h
dGNoKC8gKjogKltcdy1cK1wkIyFcKCInXS8sZmFsc2UpKXsKKyAgICAgICAgICByZXR1cm4gInBy
b3BlcnR5IjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHN0cmVhbS5tYXRjaCgvICo6Lyxm
YWxzZSkpeworICAgICAgICAgIGluZGVudChzdGF0ZSk7CisgICAgICAgICAgc3RhdGUuY3Vyc29y
SGFsZiA9IDE7CisgICAgICAgICAgcmV0dXJuICJhdG9tIjsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmKHN0cmVhbS5tYXRjaCgvICosLyxmYWxzZSkpeworICAgICAgICAgIHJldHVybiAiYXRv
bSI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZXsKKyAgICAgICAgICBpbmRlbnQoc3RhdGUpOwor
ICAgICAgICAgIHJldHVybiAiYXRvbSI7CisgICAgICAgIH0KKyAgICAgIH0KIAotICAgICAgaWYg
KHN0cmVhbS5wZWVrKCkgPT09ICI6Iil7CisgICAgICBpZihjaCA9PT0gIjoiKXsKKyAgICAgICAg
aWYgKHN0cmVhbS5tYXRjaChwc2V1ZG9FbGVtZW50c1JlZ2V4cCkpeyAvLyBjb3VsZCBiZSBhIHBz
ZXVkby1lbGVtZW50CisgICAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKKyAgICAgICAgfQogICAg
ICAgICBzdHJlYW0ubmV4dCgpOwotICAgICAgICByZXR1cm4gInZhcmlhYmxlLTIiOwotICAgICAg
fWVsc2V7Ci0gICAgICAgIHJldHVybiAidmFyaWFibGUtMyI7CisgICAgICAgIHN0YXRlLmN1cnNv
ckhhbGY9MTsKKyAgICAgICAgcmV0dXJuICJvcGVyYXRvciI7CiAgICAgICB9Ci0gICAgfQogCi0g
ICAgaWYgKGNoID09PSAiISIpewotICAgICAgc3RyZWFtLm5leHQoKTsKKyAgICB9IC8vIGN1cnNv
ckhhbGY9PT0wIGVuZHMgaGVyZQorICAgIGVsc2V7CiAKLSAgICAgIGlmIChzdHJlYW0ubWF0Y2go
L15bXHddKy8pKXsKLSAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKKyAgICAgIGlmIChjaCA9PT0g
IiMiKSB7CisgICAgICAgIHN0cmVhbS5uZXh0KCk7CisgICAgICAgIC8vIEhleCBudW1iZXJzCisg
ICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL1swLTlhLWZBLUZdezZ9fFswLTlhLWZBLUZdezN9Lykp
eworICAgICAgICAgIGlmKCFzdHJlYW0ucGVlaygpKXsKKyAgICAgICAgICAgIHN0YXRlLmN1cnNv
ckhhbGYgPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gIm51bWJlciI7CisgICAg
ICAgIH0KICAgICAgIH0KIAotICAgICAgcmV0dXJuICJvcGVyYXRvciI7Ci0gICAgfQorICAgICAg
Ly8gTnVtYmVycworICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/WzAtOVwuXSsvKSl7CisgICAg
ICAgIGlmKCFzdHJlYW0ucGVlaygpKXsKKyAgICAgICAgICBzdGF0ZS5jdXJzb3JIYWxmID0gMDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gIm51bWJlciI7CisgICAgICB9CiAKLSAgICBpZiAo
Y2ggPT09ICI9Iil7Ci0gICAgICBzdHJlYW0ubmV4dCgpOworICAgICAgLy8gVW5pdHMKKyAgICAg
IGlmIChzdHJlYW0ubWF0Y2goL14ocHh8ZW18aW4pXGIvKSl7CisgICAgICAgIGlmKCFzdHJlYW0u
cGVlaygpKXsKKyAgICAgICAgICBzdGF0ZS5jdXJzb3JIYWxmID0gMDsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gInVuaXQiOworICAgICAgfQogCi0gICAgICAvLyBNYXRjaCBzaG9ydGN1dCBt
aXhpbiBkZWZpbml0aW9uCi0gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW1x3LV0rLykpewotICAg
ICAgICBpbmRlbnQoc3RhdGUpOwotICAgICAgICByZXR1cm4gIm1ldGEiOwotICAgICAgfWVsc2Ug
ewotICAgICAgICByZXR1cm4gIm9wZXJhdG9yIjsKKyAgICAgIGlmIChzdHJlYW0ubWF0Y2goa2V5
d29yZHNSZWdleHApKXsKKyAgICAgICAgaWYoIXN0cmVhbS5wZWVrKCkpeworICAgICAgICAgIHN0
YXRlLmN1cnNvckhhbGYgPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiAia2V5d29yZCI7
CiAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKGNoID09PSAiKyIpewotICAgICAgc3RyZWFtLm5l
eHQoKTsKKyAgICAgIGlmIChzdHJlYW0ubWF0Y2goL151cmwvKSAmJiBzdHJlYW0ucGVlaygpID09
PSAiKCIpIHsKKyAgICAgICAgc3RhdGUudG9rZW5pemVyID0gdXJsVG9rZW5zOworICAgICAgICBp
Zighc3RyZWFtLnBlZWsoKSl7CisgICAgICAgICAgc3RhdGUuY3Vyc29ySGFsZiA9IDA7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuICJhdG9tIjsKKyAgICAgIH0KIAotICAgICAgLy8gTWF0Y2gg
c2hvcnRjdXQgbWl4aW4gZGVmaW5pdGlvbgotICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXltcdy1d
Ky8pKXsKKyAgICAgIC8vIFZhcmlhYmxlcworICAgICAgaWYgKGNoID09PSAiJCIpIHsKKyAgICAg
ICAgc3RyZWFtLm5leHQoKTsKKyAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHctXS8pOworICAg
ICAgICBpZighc3RyZWFtLnBlZWsoKSl7CisgICAgICAgICAgc3RhdGUuY3Vyc29ySGFsZiA9IDA7
CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS0zIjsKLSAgICAgIH1lbHNlIHsK
LSAgICAgICAgcmV0dXJuICJvcGVyYXRvciI7CiAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gSW5k
ZW50IERpcmVjdGl2ZXMKLSAgICBpZiAoc3RyZWFtLm1hdGNoKC9eQChlbHNlIGlmfGlmfG1lZGlh
fGVsc2V8Zm9yfGVhY2h8d2hpbGV8bWl4aW58ZnVuY3Rpb24pLykpewotICAgICAgaW5kZW50KHN0
YXRlKTsKLSAgICAgIHJldHVybiAibWV0YSI7Ci0gICAgfQorICAgICAgLy8gYmFuZyBjaGFyYWN0
ZXIgZm9yICFpbXBvcnRhbnQsICFkZWZhdWx0LCBldGMuCisgICAgICBpZiAoY2ggPT09ICIhIikg
eworICAgICAgICBzdHJlYW0ubmV4dCgpOworICAgICAgICBpZighc3RyZWFtLnBlZWsoKSl7Cisg
ICAgICAgICAgc3RhdGUuY3Vyc29ySGFsZiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHN0cmVhbS5tYXRjaCgvXltcd10rLykgPyAia2V5d29yZCI6ICJvcGVyYXRvciI7CisgICAgICB9
CiAKLSAgICAvLyBPdGhlciBEaXJlY3RpdmVzCi0gICAgaWYgKGNoID09PSAiQCIpewotICAgICAg
c3RyZWFtLm5leHQoKTsKLSAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LV0vKTsKLSAgICAgIHJl
dHVybiAibWV0YSI7Ci0gICAgfQorICAgICAgaWYgKHN0cmVhbS5tYXRjaChvcFJlZ2V4cCkpewor
ICAgICAgICBpZighc3RyZWFtLnBlZWsoKSl7CisgICAgICAgICAgc3RhdGUuY3Vyc29ySGFsZiA9
IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICJvcGVyYXRvciI7CisgICAgICB9CiAKLSAg
ICAvLyBTdHJpbmdzCi0gICAgaWYgKGNoID09PSAnIicgfHwgY2ggPT09ICInIil7Ci0gICAgICBz
dHJlYW0ubmV4dCgpOwotICAgICAgc3RhdGUudG9rZW5pemVyID0gYnVpbGRTdHJpbmdUb2tlbml6
ZXIoY2gpOwotICAgICAgcmV0dXJuICJzdHJpbmciOwotICAgIH0KKyAgICAgIC8vIGF0dHJpYnV0
ZXMKKyAgICAgIGlmIChzdHJlYW0uZWF0V2hpbGUoL1tcdy1dLykpIHsKKyAgICAgICAgaWYoIXN0
cmVhbS5wZWVrKCkpeworICAgICAgICAgIHN0YXRlLmN1cnNvckhhbGYgPSAwOworICAgICAgICB9
CisgICAgICAgIHJldHVybiAiYXR0cmlidXRlIjsKKyAgICAgIH0KIAotICAgIC8vIFBzZXVkbyBl
bGVtZW50IHNlbGVjdG9ycwotICAgIGlmIChjaCA9PSAnOicgJiYgc3RyZWFtLm1hdGNoKHBzZXVk
b0VsZW1lbnRzUmVnZXhwKSl7Ci0gICAgICByZXR1cm4gImtleXdvcmQiOwotICAgIH0KKyAgICAg
IC8vc3RyZWFtLmVhdFNwYWNlKCk7CisgICAgICBpZighc3RyZWFtLnBlZWsoKSl7CisgICAgICAg
IHN0YXRlLmN1cnNvckhhbGYgPSAwOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KIAot
ICAgIC8vIGF0b21zCi0gICAgaWYgKHN0cmVhbS5lYXRXaGlsZSgvW1x3LSZdLykpewotICAgICAg
Ly8gbWF0Y2hlcyBhIHByb3BlcnR5IGRlZmluaXRpb24KLSAgICAgIGlmIChzdHJlYW0ucGVlaygp
ID09PSAiOiIgJiYgIXN0cmVhbS5tYXRjaChwc2V1ZG9FbGVtZW50c1JlZ2V4cCwgZmFsc2UpKQot
ICAgICAgICByZXR1cm4gInByb3BlcnR5IjsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuICJh
dG9tIjsKLSAgICB9CisgICAgfSAvLyBlbHNlIGVuZHMgaGVyZQogCi0gICAgaWYgKHN0cmVhbS5t
YXRjaChvcFJlZ2V4cCkpeworICAgIGlmIChzdHJlYW0ubWF0Y2gob3BSZWdleHApKQogICAgICAg
cmV0dXJuICJvcGVyYXRvciI7Ci0gICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZW4ndCByZXR1cm5l
ZCBieSBub3csIHdlIG1vdmUgMSBjaGFyYWN0ZXIKICAgICAvLyBhbmQgcmV0dXJuIGFuIGVycm9y
CiAgICAgc3RyZWFtLm5leHQoKTsKICAgICByZXR1cm4gbnVsbDsKLSAgfTsKKyAgfQogCi0gIHZh
ciB0b2tlbkxleGVyID0gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewotICAgIGlmIChzdHJlYW0u
c29sKCkpewotICAgICAgc3RhdGUuaW5kZW50Q291bnQgPSAwOwotICAgIH0KKyAgZnVuY3Rpb24g
dG9rZW5MZXhlcihzdHJlYW0sIHN0YXRlKSB7CisgICAgaWYgKHN0cmVhbS5zb2woKSkgc3RhdGUu
aW5kZW50Q291bnQgPSAwOwogICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplcihzdHJlYW0s
IHN0YXRlKTsKICAgICB2YXIgY3VycmVudCA9IHN0cmVhbS5jdXJyZW50KCk7CiAKLSAgICBpZiAo
Y3VycmVudCA9PT0gIkByZXR1cm4iKXsKKyAgICBpZiAoY3VycmVudCA9PT0gIkByZXR1cm4iIHx8
IGN1cnJlbnQgPT09ICJ9Iil7CiAgICAgICBkZWRlbnQoc3RhdGUpOwogICAgIH0KIAotICAgIGlm
IChzdHlsZSA9PT0gImF0b20iKXsKLSAgICAgIGluZGVudChzdGF0ZSk7Ci0gICAgfQotCi0gICAg
aWYgKHN0eWxlICE9PSBudWxsKXsKKyAgICBpZiAoc3R5bGUgIT09IG51bGwpIHsKICAgICAgIHZh
ciBzdGFydE9mVG9rZW4gPSBzdHJlYW0ucG9zIC0gY3VycmVudC5sZW5ndGg7CisKICAgICAgIHZh
ciB3aXRoQ3VycmVudEluZGVudCA9IHN0YXJ0T2ZUb2tlbiArIChjb25maWcuaW5kZW50VW5pdCAq
IHN0YXRlLmluZGVudENvdW50KTsKIAogICAgICAgdmFyIG5ld1Njb3BlcyA9IFtdOwogCi0gICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLnNjb3Blcy5sZW5ndGg7IGkrKyl7CisgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLnNjb3Blcy5sZW5ndGg7IGkrKykgewogICAgICAgICB2
YXIgc2NvcGUgPSBzdGF0ZS5zY29wZXNbaV07CiAKLSAgICAgICAgaWYgKHNjb3BlLm9mZnNldCA8
PSB3aXRoQ3VycmVudEluZGVudCl7CisgICAgICAgIGlmIChzY29wZS5vZmZzZXQgPD0gd2l0aEN1
cnJlbnRJbmRlbnQpCiAgICAgICAgICAgbmV3U2NvcGVzLnB1c2goc2NvcGUpOwotICAgICAgICB9
CiAgICAgICB9CiAKICAgICAgIHN0YXRlLnNjb3BlcyA9IG5ld1Njb3BlczsKQEAgLTMxNSwxMyAr
MzgxLDE2IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic2FzcyIsIGZ1bmN0aW9uKGNvbmZpZykg
ewogCiAKICAgICByZXR1cm4gc3R5bGU7Ci0gIH07CisgIH0KIAogICByZXR1cm4gewogICAgIHN0
YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgcmV0dXJuIHsKICAgICAgICAgdG9rZW5pemVy
OiB0b2tlbkJhc2UsCi0gICAgICAgIHNjb3BlczogW3tvZmZzZXQ6IDAsIHR5cGU6ICdzYXNzJ31d
LAorICAgICAgICBzY29wZXM6IFt7b2Zmc2V0OiAwLCB0eXBlOiAic2FzcyJ9XSwKKyAgICAgICAg
aW5kZW50Q291bnQ6IDAsCisgICAgICAgIGN1cnNvckhhbGY6IDAsICAvLyBjdXJzb3IgaGFsZiB0
ZWxscyB1cyBpZiBjdXJzb3IgbGllcyBhZnRlciAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG9yIGJlZm9yZSAoMCkgY29sb24gKHdlbGwuLi4gbW9yZSBvciBsZXNzKQogICAgICAgICBk
ZWZpbmVkVmFyczogW10sCiAgICAgICAgIGRlZmluZWRNaXhpbnM6IFtdCiAgICAgICB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29k
ZU1pcnJvci9zZWFyY2hjdXJzb3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NlYXJjaGN1cnNvci5qcwpvbGQgbW9kZSAxMDA2NDQK
bmV3IG1vZGUgMTAwNzU1CmluZGV4IDI3ODMzMDg4NThjYmI4YThmZGYzNmM4NTExNGRjZDU4MGIw
YzJlNjMuLmI3MDI0MmVlNGI4Y2YxYjY5OGU1OGJlNTlmZDRhNGNkMDUwNjUwMDUKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvQ29kZU1pcnJvci9zZWFy
Y2hjdXJzb3IuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0
ZXJuYWwvQ29kZU1pcnJvci9zZWFyY2hjdXJzb3IuanMKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAg
ICAgICAgICAgdmFyIGZyb20gPSBQb3MocG9zLmxpbmUsIGN1dCk7CiAgICAgICAgICAgICBmb3Ig
KHZhciBsbiA9IHBvcy5saW5lICsgMSwgaSA9IDE7IGkgPCBsYXN0OyArK2ksICsrbG4pCiAgICAg
ICAgICAgICAgIGlmICh0YXJnZXRbaV0gIT0gZm9sZChkb2MuZ2V0TGluZShsbikpKSByZXR1cm47
Ci0gICAgICAgICAgICBpZiAoZG9jLmdldExpbmUobG4pLnNsaWNlKDAsIG9yaWdUYXJnZXRbbGFz
dF0ubGVuZ3RoKSAhPSB0YXJnZXRbbGFzdF0pIHJldHVybjsKKyAgICAgICAgICAgIGlmIChmb2xk
KGRvYy5nZXRMaW5lKGxuKS5zbGljZSgwLCBvcmlnVGFyZ2V0W2xhc3RdLmxlbmd0aCkpICE9IHRh
cmdldFtsYXN0XSkgcmV0dXJuOwogICAgICAgICAgICAgcmV0dXJuIHtmcm9tOiBmcm9tLCB0bzog
UG9zKGxuLCBvcmlnVGFyZ2V0W2xhc3RdLmxlbmd0aCl9OwogICAgICAgICAgIH0KICAgICAgICAg
fTsKQEAgLTE0OCwxMCArMTQ4LDEwIEBACiAgICAgZnJvbTogZnVuY3Rpb24oKSB7aWYgKHRoaXMu
YXRPY2N1cnJlbmNlKSByZXR1cm4gdGhpcy5wb3MuZnJvbTt9LAogICAgIHRvOiBmdW5jdGlvbigp
IHtpZiAodGhpcy5hdE9jY3VycmVuY2UpIHJldHVybiB0aGlzLnBvcy50bzt9LAogCi0gICAgcmVw
bGFjZTogZnVuY3Rpb24obmV3VGV4dCkgeworICAgIHJlcGxhY2U6IGZ1bmN0aW9uKG5ld1RleHQs
IG9yaWdpbikgewogICAgICAgaWYgKCF0aGlzLmF0T2NjdXJyZW5jZSkgcmV0dXJuOwogICAgICAg
dmFyIGxpbmVzID0gQ29kZU1pcnJvci5zcGxpdExpbmVzKG5ld1RleHQpOwotICAgICAgdGhpcy5k
b2MucmVwbGFjZVJhbmdlKGxpbmVzLCB0aGlzLnBvcy5mcm9tLCB0aGlzLnBvcy50byk7CisgICAg
ICB0aGlzLmRvYy5yZXBsYWNlUmFuZ2UobGluZXMsIHRoaXMucG9zLmZyb20sIHRoaXMucG9zLnRv
LCBvcmlnaW4pOwogICAgICAgdGhpcy5wb3MudG8gPSBQb3ModGhpcy5wb3MuZnJvbS5saW5lICsg
bGluZXMubGVuZ3RoIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW2xpbmVzLmxl
bmd0aCAtIDFdLmxlbmd0aCArIChsaW5lcy5sZW5ndGggPT0gMSA/IHRoaXMucG9zLmZyb20uY2gg
OiAwKSk7CiAgICAgfQpAQCAtMTc3LDkgKzE3Nyw5IEBACiAgIH0pOwogCiAgIENvZGVNaXJyb3Iu
ZGVmaW5lRXh0ZW5zaW9uKCJzZWxlY3RNYXRjaGVzIiwgZnVuY3Rpb24ocXVlcnksIGNhc2VGb2xk
KSB7Ci0gICAgdmFyIHJhbmdlcyA9IFtdLCBuZXh0OworICAgIHZhciByYW5nZXMgPSBbXTsKICAg
ICB2YXIgY3VyID0gdGhpcy5nZXRTZWFyY2hDdXJzb3IocXVlcnksIHRoaXMuZ2V0Q3Vyc29yKCJm
cm9tIiksIGNhc2VGb2xkKTsKLSAgICB3aGlsZSAobmV4dCA9IGN1ci5maW5kTmV4dCgpKSB7Cisg
ICAgd2hpbGUgKGN1ci5maW5kTmV4dCgpKSB7CiAgICAgICBpZiAoQ29kZU1pcnJvci5jbXBQb3Mo
Y3VyLnRvKCksIHRoaXMuZ2V0Q3Vyc29yKCJ0byIpKSA+IDApIGJyZWFrOwogICAgICAgcmFuZ2Vz
LnB1c2goe2FuY2hvcjogY3VyLmZyb20oKSwgaGVhZDogY3VyLnRvKCl9KTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2Rl
TWlycm9yL3NxbC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0NvZGVNaXJyb3Ivc3FsLmpzCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5k
ZXggNmMwMmY0ZTk0NzQxYmZiMDQ3NzA1OTYwMTEyN2FhZTQzOTcyMmVjMi4uYTkwODI3NzE1MWZl
OWZkNTA4YTQxMzcxNWY3YjMxMDljMzQ4Mjc3ZgotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcwpAQCAt
MTkwLDcgKzE5MCw3IEBAIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29u
ZmlnLCBwYXJzZXJDb25maWcpIHsKIAogICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRB
ZnRlcikgewogICAgICAgdmFyIGN4ID0gc3RhdGUuY29udGV4dDsKLSAgICAgIGlmICghY3gpIHJl
dHVybiAwOworICAgICAgaWYgKCFjeCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKICAgICAgIHZh
ciBjbG9zaW5nID0gdGV4dEFmdGVyLmNoYXJBdCgwKSA9PSBjeC50eXBlOwogICAgICAgaWYgKGN4
LmFsaWduKSByZXR1cm4gY3guY29sICsgKGNsb3NpbmcgPyAwIDogMSk7CiAgICAgICBlbHNlIHJl
dHVybiBjeC5pbmRlbnQgKyAoY2xvc2luZyA/IDAgOiBjb25maWcuaW5kZW50VW5pdCk7CkBAIC0y
MTMsNyArMjEzLDggQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcWwiLCBmdW5jdGlvbihjb25m
aWcsIHBhcnNlckNvbmZpZykgewogICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBu
dWxsKSB7CiAgICAgICBpZiAoY2ggPT0gImAiICYmICFzdHJlYW0uZWF0KCJgIikpIHJldHVybiAi
dmFyaWFibGUtMiI7CiAgICAgfQotICAgIHJldHVybiBudWxsOworICAgIHN0cmVhbS5iYWNrVXAo
c3RyZWFtLmN1cnJlbnQoKS5sZW5ndGggLSAxKTsKKyAgICByZXR1cm4gc3RyZWFtLmVhdFdoaWxl
KC9cdy8pID8gInZhcmlhYmxlLTIiIDogbnVsbDsKICAgfQogCiAgIC8vIHZhcmlhYmxlIHRva2Vu
CkBAIC0yNTYsNyArMjU3LDcgQEAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcWwiLCBmdW5jdGlv
bihjb25maWcsIHBhcnNlckNvbmZpZykgewogICB9CiAKICAgLy8gdGhlc2Uga2V5d29yZHMgYXJl
IHVzZWQgYnkgYWxsIFNRTCBkaWFsZWN0cyAoaG93ZXZlciwgYSBtb2RlIGNhbiBzdGlsbCBvdmVy
d3JpdGUgaXQpCi0gIHZhciBzcWxLZXl3b3JkcyA9ICJhbHRlciBhbmQgYXMgYXNjIGJldHdlZW4g
YnkgY291bnQgY3JlYXRlIGRlbGV0ZSBkZXNjIGRpc3RpbmN0IGRyb3AgZnJvbSBoYXZpbmcgaW4g
aW5zZXJ0IGludG8gaXMgam9pbiBsaWtlIG5vdCBvbiBvciBvcmRlciBzZWxlY3Qgc2V0IHRhYmxl
IHVuaW9uIHVwZGF0ZSB2YWx1ZXMgd2hlcmUgIjsKKyAgdmFyIHNxbEtleXdvcmRzID0gImFsdGVy
IGFuZCBhcyBhc2MgYmV0d2VlbiBieSBjb3VudCBjcmVhdGUgZGVsZXRlIGRlc2MgZGlzdGluY3Qg
ZHJvcCBmcm9tIGdyb3VwIGhhdmluZyBpbiBpbnNlcnQgaW50byBpcyBqb2luIGxpa2Ugbm90IG9u
IG9yIG9yZGVyIHNlbGVjdCBzZXQgdGFibGUgdW5pb24gdXBkYXRlIHZhbHVlcyB3aGVyZSAiOwog
CiAgIC8vIHR1cm4gYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBpbnRvIGFuIGFycmF5CiAgIGZ1bmN0
aW9uIHNldChzdHIpIHsKQEAgLTI3OSw3ICsyODAsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUo
InNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgIENvZGVNaXJyb3IuZGVm
aW5lTUlNRSgidGV4dC94LW1zc3FsIiwgewogICAgIG5hbWU6ICJzcWwiLAogICAgIGNsaWVudDog
c2V0KCJjaGFyc2V0IGNsZWFyIGNvbm5lY3QgZWRpdCBlZ28gZXhpdCBnbyBoZWxwIG5vcGFnZXIg
bm90ZWUgbm93YXJuaW5nIHBhZ2VyIHByaW50IHByb21wdCBxdWl0IHJlaGFzaCBzb3VyY2Ugc3Rh
dHVzIHN5c3RlbSB0ZWUiKSwKLSAgICBrZXl3b3Jkczogc2V0KHNxbEtleXdvcmRzICsgImJlZ2lu
IHRyaWdnZXIgcHJvYyB2aWV3IGluZGV4IGZvciBhZGQgY29uc3RyYWludCBrZXkgcHJpbWFyeSBm
b3JlaWduIGNvbGxhdGUgY2x1c3RlcmVkIG5vbmNsdXN0ZXJlZCIpLAorICAgIGtleXdvcmRzOiBz
ZXQoc3FsS2V5d29yZHMgKyAiYmVnaW4gdHJpZ2dlciBwcm9jIHZpZXcgaW5kZXggZm9yIGFkZCBj
b25zdHJhaW50IGtleSBwcmltYXJ5IGZvcmVpZ24gY29sbGF0ZSBjbHVzdGVyZWQgbm9uY2x1c3Rl
cmVkIGRlY2xhcmUiKSwKICAgICBidWlsdGluOiBzZXQoImJpZ2ludCBudW1lcmljIGJpdCBzbWFs
bGludCBkZWNpbWFsIHNtYWxsbW9uZXkgaW50IHRpbnlpbnQgbW9uZXkgZmxvYXQgcmVhbCBjaGFy
IHZhcmNoYXIgdGV4dCBuY2hhciBudmFyY2hhciBudGV4dCBiaW5hcnkgdmFyYmluYXJ5IGltYWdl
IGN1cnNvciB0aW1lc3RhbXAgaGllcmFyY2h5aWQgdW5pcXVlaWRlbnRpZmllciBzcWxfdmFyaWFu
dCB4bWwgdGFibGUgIiksCiAgICAgYXRvbXM6IHNldCgiZmFsc2UgdHJ1ZSBudWxsIHVua25vd24i
KSwKICAgICBvcGVyYXRvckNoYXJzOiAvXlsqK1wtJTw+IT1dLywKQEAgLTI5Miw3ICsyOTMsNyBA
QCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29u
ZmlnKSB7CiAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LW15c3FsIiwgewogICAgIG5h
bWU6ICJzcWwiLAogICAgIGNsaWVudDogc2V0KCJjaGFyc2V0IGNsZWFyIGNvbm5lY3QgZWRpdCBl
Z28gZXhpdCBnbyBoZWxwIG5vcGFnZXIgbm90ZWUgbm93YXJuaW5nIHBhZ2VyIHByaW50IHByb21w
dCBxdWl0IHJlaGFzaCBzb3VyY2Ugc3RhdHVzIHN5c3RlbSB0ZWUiKSwKLSAgICBrZXl3b3Jkczog
c2V0KHNxbEtleXdvcmRzICsgImFjY2Vzc2libGUgYWN0aW9uIGFkZCBhZnRlciBhbGdvcml0aG0g
YWxsIGFuYWx5emUgYXNlbnNpdGl2ZSBhdCBhdXRob3JzIGF1dG9faW5jcmVtZW50IGF1dG9jb21t
aXQgYXZnIGF2Z19yb3dfbGVuZ3RoIGJlZm9yZSBiaW5hcnkgYmlubG9nIGJvdGggYnRyZWUgY2Fj
aGUgY2FsbCBjYXNjYWRlIGNhc2NhZGVkIGNhc2UgY2F0YWxvZ19uYW1lIGNoYWluIGNoYW5nZSBj
aGFuZ2VkIGNoYXJhY3RlciBjaGVjayBjaGVja3BvaW50IGNoZWNrc3VtIGNsYXNzX29yaWdpbiBj
bGllbnRfc3RhdGlzdGljcyBjbG9zZSBjb2FsZXNjZSBjb2RlIGNvbGxhdGUgY29sbGF0aW9uIGNv
bGxhdGlvbnMgY29sdW1uIGNvbHVtbnMgY29tbWVudCBjb21taXQgY29tbWl0dGVkIGNvbXBsZXRp
b24gY29uY3VycmVudCBjb25kaXRpb24gY29ubmVjdGlvbiBjb25zaXN0ZW50IGNvbnN0cmFpbnQg
Y29udGFpbnMgY29udGludWUgY29udHJpYnV0b3JzIGNvbnZlcnQgY3Jvc3MgY3VycmVudCBjdXJy
ZW50X2RhdGUgY3VycmVudF90aW1lIGN1cnJlbnRfdGltZXN0YW1wIGN1cnJlbnRfdXNlciBjdXJz
b3IgZGF0YSBkYXRhYmFzZSBkYXRhYmFzZXMgZGF5X2hvdXIgZGF5X21pY3Jvc2Vjb25kIGRheV9t
aW51dGUgZGF5X3NlY29uZCBkZWFsbG9jYXRlIGRlYyBkZWNsYXJlIGRlZmF1bHQgZGVsYXlfa2V5
X3dyaXRlIGRlbGF5ZWQgZGVsaW1pdGVyIGRlc19rZXlfZmlsZSBkZXNjcmliZSBkZXRlcm1pbmlz
dGljIGRldl9wb3AgZGV2X3NhbXAgZGV2aWFuY2UgZGlhZ25vc3RpY3MgZGlyZWN0b3J5IGRpc2Fi
bGUgZGlzY2FyZCBkaXN0aW5jdHJvdyBkaXYgZHVhbCBkdW1wZmlsZSBlYWNoIGVsc2VpZiBlbmFi
bGUgZW5jbG9zZWQgZW5kIGVuZHMgZW5naW5lIGVuZ2luZXMgZW51bSBlcnJvcnMgZXNjYXBlIGVz
Y2FwZWQgZXZlbiBldmVudCBldmVudHMgZXZlcnkgZXhlY3V0ZSBleGlzdHMgZXhpdCBleHBsYWlu
IGV4dGVuZGVkIGZhc3QgZmV0Y2ggZmllbGQgZmllbGRzIGZpcnN0IGZsdXNoIGZvciBmb3JjZSBm
b3JlaWduIGZvdW5kX3Jvd3MgZnVsbCBmdWxsdGV4dCBmdW5jdGlvbiBnZW5lcmFsIGdldCBnbG9i
YWwgZ3JhbnQgZ3JhbnRzIGdyb3VwIGdyb3VwYnlfY29uY2F0IGhhbmRsZXIgaGFzaCBoZWxwIGhp
Z2hfcHJpb3JpdHkgaG9zdHMgaG91cl9taWNyb3NlY29uZCBob3VyX21pbnV0ZSBob3VyX3NlY29u
ZCBpZiBpZ25vcmUgaWdub3JlX3NlcnZlcl9pZHMgaW1wb3J0IGluZGV4IGluZGV4X3N0YXRpc3Rp
Y3MgaW5maWxlIGlubmVyIGlubm9kYiBpbm91dCBpbnNlbnNpdGl2ZSBpbnNlcnRfbWV0aG9kIGlu
c3RhbGwgaW50ZXJ2YWwgaW52b2tlciBpc29sYXRpb24gaXRlcmF0ZSBrZXkga2V5cyBraWxsIGxh
bmd1YWdlIGxhc3QgbGVhZGluZyBsZWF2ZSBsZWZ0IGxldmVsIGxpbWl0IGxpbmVhciBsaW5lcyBs
aXN0IGxvYWQgbG9jYWwgbG9jYWx0aW1lIGxvY2FsdGltZXN0YW1wIGxvY2sgbG9ncyBsb3dfcHJp
b3JpdHkgbWFzdGVyIG1hc3Rlcl9oZWFydGJlYXRfcGVyaW9kIG1hc3Rlcl9zc2xfdmVyaWZ5X3Nl
cnZlcl9jZXJ0IG1hc3RlcnMgbWF0Y2ggbWF4IG1heF9yb3dzIG1heHZhbHVlIG1lc3NhZ2VfdGV4
dCBtaWRkbGVpbnQgbWlncmF0ZSBtaW4gbWluX3Jvd3MgbWludXRlX21pY3Jvc2Vjb25kIG1pbnV0
ZV9zZWNvbmQgbW9kIG1vZGUgbW9kaWZpZXMgbW9kaWZ5IG11dGV4IG15c3FsX2Vycm5vIG5hdHVy
YWwgbmV4dCBubyBub193cml0ZV90b19iaW5sb2cgb2ZmbGluZSBvZmZzZXQgb25lIG9ubGluZSBv
cGVuIG9wdGltaXplIG9wdGlvbiBvcHRpb25hbGx5IG91dCBvdXRlciBvdXRmaWxlIHBhY2tfa2V5
cyBwYXJzZXIgcGFydGl0aW9uIHBhcnRpdGlvbnMgcGFzc3dvcmQgcGhhc2UgcGx1Z2luIHBsdWdp
bnMgcHJlcGFyZSBwcmVzZXJ2ZSBwcmV2IHByaW1hcnkgcHJpdmlsZWdlcyBwcm9jZWR1cmUgcHJv
Y2Vzc2xpc3QgcHJvZmlsZSBwcm9maWxlcyBwdXJnZSBxdWVyeSBxdWljayByYW5nZSByZWFkIHJl
YWRfd3JpdGUgcmVhZHMgcmVhbCByZWJ1aWxkIHJlY292ZXIgcmVmZXJlbmNlcyByZWdleHAgcmVs
YXlsb2cgcmVsZWFzZSByZW1vdmUgcmVuYW1lIHJlb3JnYW5pemUgcmVwYWlyIHJlcGVhdGFibGUg
cmVwbGFjZSByZXF1aXJlIHJlc2lnbmFsIHJlc3RyaWN0IHJlc3VtZSByZXR1cm4gcmV0dXJucyBy
ZXZva2UgcmlnaHQgcmxpa2Ugcm9sbGJhY2sgcm9sbHVwIHJvdyByb3dfZm9ybWF0IHJ0cmVlIHNh
dmVwb2ludCBzY2hlZHVsZSBzY2hlbWEgc2NoZW1hX25hbWUgc2NoZW1hcyBzZWNvbmRfbWljcm9z
ZWNvbmQgc2VjdXJpdHkgc2Vuc2l0aXZlIHNlcGFyYXRvciBzZXJpYWxpemFibGUgc2VydmVyIHNl
c3Npb24gc2hhcmUgc2hvdyBzaWduYWwgc2xhdmUgc2xvdyBzbWFsbGludCBzbmFwc2hvdCBzb25h
bWUgc3BhdGlhbCBzcGVjaWZpYyBzcWwgc3FsX2JpZ19yZXN1bHQgc3FsX2J1ZmZlcl9yZXN1bHQg
c3FsX2NhY2hlIHNxbF9jYWxjX2ZvdW5kX3Jvd3Mgc3FsX25vX2NhY2hlIHNxbF9zbWFsbF9yZXN1
bHQgc3FsZXhjZXB0aW9uIHNxbHN0YXRlIHNxbHdhcm5pbmcgc3NsIHN0YXJ0IHN0YXJ0aW5nIHN0
YXJ0cyBzdGF0dXMgc3RkIHN0ZGRldiBzdGRkZXZfcG9wIHN0ZGRldl9zYW1wIHN0b3JhZ2Ugc3Ry
YWlnaHRfam9pbiBzdWJjbGFzc19vcmlnaW4gc3VtIHN1c3BlbmQgdGFibGVfbmFtZSB0YWJsZV9z
dGF0aXN0aWNzIHRhYmxlcyB0YWJsZXNwYWNlIHRlbXBvcmFyeSB0ZXJtaW5hdGVkIHRvIHRyYWls
aW5nIHRyYW5zYWN0aW9uIHRyaWdnZXIgdHJpZ2dlcnMgdHJ1bmNhdGUgdW5jb21taXR0ZWQgdW5k
byB1bmluc3RhbGwgdW5pcXVlIHVubG9jayB1cGdyYWRlIHVzYWdlIHVzZSB1c2VfZnJtIHVzZXIg
dXNlcl9yZXNvdXJjZXMgdXNlcl9zdGF0aXN0aWNzIHVzaW5nIHV0Y19kYXRlIHV0Y190aW1lIHV0
Y190aW1lc3RhbXAgdmFsdWUgdmFyaWFibGVzIHZhcnlpbmcgdmlldyB2aWV3cyB3YXJuaW5ncyB3
aGVuIHdoaWxlIHdpdGggd29yayB3cml0ZSB4YSB4b3IgeWVhcl9tb250aCB6ZXJvZmlsbCBiZWdp
biBkbyB0aGVuIGVsc2UgbG9vcCByZXBlYXQiKSwKKyAgICBrZXl3b3Jkczogc2V0KHNxbEtleXdv
cmRzICsgImFjY2Vzc2libGUgYWN0aW9uIGFkZCBhZnRlciBhbGdvcml0aG0gYWxsIGFuYWx5emUg
YXNlbnNpdGl2ZSBhdCBhdXRob3JzIGF1dG9faW5jcmVtZW50IGF1dG9jb21taXQgYXZnIGF2Z19y
b3dfbGVuZ3RoIGJlZm9yZSBiaW5hcnkgYmlubG9nIGJvdGggYnRyZWUgY2FjaGUgY2FsbCBjYXNj
YWRlIGNhc2NhZGVkIGNhc2UgY2F0YWxvZ19uYW1lIGNoYWluIGNoYW5nZSBjaGFuZ2VkIGNoYXJh
Y3RlciBjaGVjayBjaGVja3BvaW50IGNoZWNrc3VtIGNsYXNzX29yaWdpbiBjbGllbnRfc3RhdGlz
dGljcyBjbG9zZSBjb2FsZXNjZSBjb2RlIGNvbGxhdGUgY29sbGF0aW9uIGNvbGxhdGlvbnMgY29s
dW1uIGNvbHVtbnMgY29tbWVudCBjb21taXQgY29tbWl0dGVkIGNvbXBsZXRpb24gY29uY3VycmVu
dCBjb25kaXRpb24gY29ubmVjdGlvbiBjb25zaXN0ZW50IGNvbnN0cmFpbnQgY29udGFpbnMgY29u
dGludWUgY29udHJpYnV0b3JzIGNvbnZlcnQgY3Jvc3MgY3VycmVudCBjdXJyZW50X2RhdGUgY3Vy
cmVudF90aW1lIGN1cnJlbnRfdGltZXN0YW1wIGN1cnJlbnRfdXNlciBjdXJzb3IgZGF0YSBkYXRh
YmFzZSBkYXRhYmFzZXMgZGF5X2hvdXIgZGF5X21pY3Jvc2Vjb25kIGRheV9taW51dGUgZGF5X3Nl
Y29uZCBkZWFsbG9jYXRlIGRlYyBkZWNsYXJlIGRlZmF1bHQgZGVsYXlfa2V5X3dyaXRlIGRlbGF5
ZWQgZGVsaW1pdGVyIGRlc19rZXlfZmlsZSBkZXNjcmliZSBkZXRlcm1pbmlzdGljIGRldl9wb3Ag
ZGV2X3NhbXAgZGV2aWFuY2UgZGlhZ25vc3RpY3MgZGlyZWN0b3J5IGRpc2FibGUgZGlzY2FyZCBk
aXN0aW5jdHJvdyBkaXYgZHVhbCBkdW1wZmlsZSBlYWNoIGVsc2VpZiBlbmFibGUgZW5jbG9zZWQg
ZW5kIGVuZHMgZW5naW5lIGVuZ2luZXMgZW51bSBlcnJvcnMgZXNjYXBlIGVzY2FwZWQgZXZlbiBl
dmVudCBldmVudHMgZXZlcnkgZXhlY3V0ZSBleGlzdHMgZXhpdCBleHBsYWluIGV4dGVuZGVkIGZh
c3QgZmV0Y2ggZmllbGQgZmllbGRzIGZpcnN0IGZsdXNoIGZvciBmb3JjZSBmb3JlaWduIGZvdW5k
X3Jvd3MgZnVsbCBmdWxsdGV4dCBmdW5jdGlvbiBnZW5lcmFsIGdldCBnbG9iYWwgZ3JhbnQgZ3Jh
bnRzIGdyb3VwIGdyb3VwX2NvbmNhdCBoYW5kbGVyIGhhc2ggaGVscCBoaWdoX3ByaW9yaXR5IGhv
c3RzIGhvdXJfbWljcm9zZWNvbmQgaG91cl9taW51dGUgaG91cl9zZWNvbmQgaWYgaWdub3JlIGln
bm9yZV9zZXJ2ZXJfaWRzIGltcG9ydCBpbmRleCBpbmRleF9zdGF0aXN0aWNzIGluZmlsZSBpbm5l
ciBpbm5vZGIgaW5vdXQgaW5zZW5zaXRpdmUgaW5zZXJ0X21ldGhvZCBpbnN0YWxsIGludGVydmFs
IGludm9rZXIgaXNvbGF0aW9uIGl0ZXJhdGUga2V5IGtleXMga2lsbCBsYW5ndWFnZSBsYXN0IGxl
YWRpbmcgbGVhdmUgbGVmdCBsZXZlbCBsaW1pdCBsaW5lYXIgbGluZXMgbGlzdCBsb2FkIGxvY2Fs
IGxvY2FsdGltZSBsb2NhbHRpbWVzdGFtcCBsb2NrIGxvZ3MgbG93X3ByaW9yaXR5IG1hc3RlciBt
YXN0ZXJfaGVhcnRiZWF0X3BlcmlvZCBtYXN0ZXJfc3NsX3ZlcmlmeV9zZXJ2ZXJfY2VydCBtYXN0
ZXJzIG1hdGNoIG1heCBtYXhfcm93cyBtYXh2YWx1ZSBtZXNzYWdlX3RleHQgbWlkZGxlaW50IG1p
Z3JhdGUgbWluIG1pbl9yb3dzIG1pbnV0ZV9taWNyb3NlY29uZCBtaW51dGVfc2Vjb25kIG1vZCBt
b2RlIG1vZGlmaWVzIG1vZGlmeSBtdXRleCBteXNxbF9lcnJubyBuYXR1cmFsIG5leHQgbm8gbm9f
d3JpdGVfdG9fYmlubG9nIG9mZmxpbmUgb2Zmc2V0IG9uZSBvbmxpbmUgb3BlbiBvcHRpbWl6ZSBv
cHRpb24gb3B0aW9uYWxseSBvdXQgb3V0ZXIgb3V0ZmlsZSBwYWNrX2tleXMgcGFyc2VyIHBhcnRp
dGlvbiBwYXJ0aXRpb25zIHBhc3N3b3JkIHBoYXNlIHBsdWdpbiBwbHVnaW5zIHByZXBhcmUgcHJl
c2VydmUgcHJldiBwcmltYXJ5IHByaXZpbGVnZXMgcHJvY2VkdXJlIHByb2Nlc3NsaXN0IHByb2Zp
bGUgcHJvZmlsZXMgcHVyZ2UgcXVlcnkgcXVpY2sgcmFuZ2UgcmVhZCByZWFkX3dyaXRlIHJlYWRz
IHJlYWwgcmVidWlsZCByZWNvdmVyIHJlZmVyZW5jZXMgcmVnZXhwIHJlbGF5bG9nIHJlbGVhc2Ug
cmVtb3ZlIHJlbmFtZSByZW9yZ2FuaXplIHJlcGFpciByZXBlYXRhYmxlIHJlcGxhY2UgcmVxdWly
ZSByZXNpZ25hbCByZXN0cmljdCByZXN1bWUgcmV0dXJuIHJldHVybnMgcmV2b2tlIHJpZ2h0IHJs
aWtlIHJvbGxiYWNrIHJvbGx1cCByb3cgcm93X2Zvcm1hdCBydHJlZSBzYXZlcG9pbnQgc2NoZWR1
bGUgc2NoZW1hIHNjaGVtYV9uYW1lIHNjaGVtYXMgc2Vjb25kX21pY3Jvc2Vjb25kIHNlY3VyaXR5
IHNlbnNpdGl2ZSBzZXBhcmF0b3Igc2VyaWFsaXphYmxlIHNlcnZlciBzZXNzaW9uIHNoYXJlIHNo
b3cgc2lnbmFsIHNsYXZlIHNsb3cgc21hbGxpbnQgc25hcHNob3Qgc29uYW1lIHNwYXRpYWwgc3Bl
Y2lmaWMgc3FsIHNxbF9iaWdfcmVzdWx0IHNxbF9idWZmZXJfcmVzdWx0IHNxbF9jYWNoZSBzcWxf
Y2FsY19mb3VuZF9yb3dzIHNxbF9ub19jYWNoZSBzcWxfc21hbGxfcmVzdWx0IHNxbGV4Y2VwdGlv
biBzcWxzdGF0ZSBzcWx3YXJuaW5nIHNzbCBzdGFydCBzdGFydGluZyBzdGFydHMgc3RhdHVzIHN0
ZCBzdGRkZXYgc3RkZGV2X3BvcCBzdGRkZXZfc2FtcCBzdG9yYWdlIHN0cmFpZ2h0X2pvaW4gc3Vi
Y2xhc3Nfb3JpZ2luIHN1bSBzdXNwZW5kIHRhYmxlX25hbWUgdGFibGVfc3RhdGlzdGljcyB0YWJs
ZXMgdGFibGVzcGFjZSB0ZW1wb3JhcnkgdGVybWluYXRlZCB0byB0cmFpbGluZyB0cmFuc2FjdGlv
biB0cmlnZ2VyIHRyaWdnZXJzIHRydW5jYXRlIHVuY29tbWl0dGVkIHVuZG8gdW5pbnN0YWxsIHVu
aXF1ZSB1bmxvY2sgdXBncmFkZSB1c2FnZSB1c2UgdXNlX2ZybSB1c2VyIHVzZXJfcmVzb3VyY2Vz
IHVzZXJfc3RhdGlzdGljcyB1c2luZyB1dGNfZGF0ZSB1dGNfdGltZSB1dGNfdGltZXN0YW1wIHZh
bHVlIHZhcmlhYmxlcyB2YXJ5aW5nIHZpZXcgdmlld3Mgd2FybmluZ3Mgd2hlbiB3aGlsZSB3aXRo
IHdvcmsgd3JpdGUgeGEgeG9yIHllYXJfbW9udGggemVyb2ZpbGwgYmVnaW4gZG8gdGhlbiBlbHNl
IGxvb3AgcmVwZWF0IiksCiAgICAgYnVpbHRpbjogc2V0KCJib29sIGJvb2xlYW4gYml0IGJsb2Ig
ZGVjaW1hbCBkb3VibGUgZmxvYXQgbG9uZyBsb25nYmxvYiBsb25ndGV4dCBtZWRpdW0gbWVkaXVt
YmxvYiBtZWRpdW1pbnQgbWVkaXVtdGV4dCB0aW1lIHRpbWVzdGFtcCB0aW55YmxvYiB0aW55aW50
IHRpbnl0ZXh0IHRleHQgYmlnaW50IGludCBpbnQxIGludDIgaW50MyBpbnQ0IGludDggaW50ZWdl
ciBmbG9hdCBmbG9hdDQgZmxvYXQ4IGRvdWJsZSBjaGFyIHZhcmJpbmFyeSB2YXJjaGFyIHZhcmNo
YXJhY3RlciBwcmVjaXNpb24gZGF0ZSBkYXRldGltZSB5ZWFyIHVuc2lnbmVkIHNpZ25lZCBudW1l
cmljIiksCiAgICAgYXRvbXM6IHNldCgiZmFsc2UgdHJ1ZSBudWxsIHVua25vd24iKSwKICAgICBv
cGVyYXRvckNoYXJzOiAvXlsqK1wtJTw+IT0mfF5dLywKQEAgLTMyNiw5ICszMjcsOSBAQCBDb2Rl
TWlycm9yLmRlZmluZU1vZGUoInNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7
CiAgIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWNhc3NhbmRyYSIsIHsKICAgICBuYW1l
OiAic3FsIiwKICAgICBjbGllbnQ6IHsgfSwKLSAgICBrZXl3b3Jkczogc2V0KCJ1c2Ugc2VsZWN0
IGZyb20gdXNpbmcgY29uc2lzdGVuY3kgd2hlcmUgbGltaXQgZmlyc3QgcmV2ZXJzZWQgZmlyc3Qg
YW5kIGluIGluc2VydCBpbnRvIHZhbHVlcyB1c2luZyBjb25zaXN0ZW5jeSB0dGwgdXBkYXRlIHNl
dCBkZWxldGUgdHJ1bmNhdGUgYmVnaW4gYmF0Y2ggYXBwbHkgY3JlYXRlIGtleXNwYWNlIHdpdGgg
Y29sdW1uZmFtaWx5IHByaW1hcnkga2V5IGluZGV4IG9uIGRyb3AgYWx0ZXIgdHlwZSBhZGQgYW55
IG9uZSBxdW9ydW0gYWxsIGxvY2FsX3F1b3J1bSBlYWNoX3F1b3J1bSIpLAotICAgIGJ1aWx0aW46
IHNldCgiYXNjaWkgYmlnaW50IGJsb2IgYm9vbGVhbiBjb3VudGVyIGRlY2ltYWwgZG91YmxlIGZs
b2F0IGludCB0ZXh0IHRpbWVzdGFtcCB1dWlkIHZhcmNoYXIgdmFyaW50IiksCi0gICAgYXRvbXM6
IHNldCgiZmFsc2UgdHJ1ZSIpLAorICAgIGtleXdvcmRzOiBzZXQoImFkZCBhbGwgYWxsb3cgYWx0
ZXIgYW5kIGFueSBhcHBseSBhcyBhc2MgYXV0aG9yaXplIGJhdGNoIGJlZ2luIGJ5IGNsdXN0ZXJp
bmcgY29sdW1uZmFtaWx5IGNvbXBhY3QgY29uc2lzdGVuY3kgY291bnQgY3JlYXRlIGN1c3RvbSBk
ZWxldGUgZGVzYyBkaXN0aW5jdCBkcm9wIGVhY2hfcXVvcnVtIGV4aXN0cyBmaWx0ZXJpbmcgZnJv
bSBncmFudCBpZiBpbiBpbmRleCBpbnNlcnQgaW50byBrZXkga2V5c3BhY2Uga2V5c3BhY2VzIGxl
dmVsIGxpbWl0IGxvY2FsX29uZSBsb2NhbF9xdW9ydW0gbW9kaWZ5IG5hbiBub3JlY3Vyc2l2ZSBu
b3N1cGVydXNlciBub3Qgb2Ygb24gb25lIG9yZGVyIHBhc3N3b3JkIHBlcm1pc3Npb24gcGVybWlz
c2lvbnMgcHJpbWFyeSBxdW9ydW0gcmVuYW1lIHJldm9rZSBzY2hlbWEgc2VsZWN0IHNldCBzdG9y
YWdlIHN1cGVydXNlciB0YWJsZSB0aHJlZSB0byB0b2tlbiB0cnVuY2F0ZSB0dGwgdHdvIHR5cGUg
dW5sb2dnZWQgdXBkYXRlIHVzZSB1c2VyIHVzZXJzIHVzaW5nIHZhbHVlcyB3aGVyZSB3aXRoIHdy
aXRldGltZSIpLAorICAgIGJ1aWx0aW46IHNldCgiYXNjaWkgYmlnaW50IGJsb2IgYm9vbGVhbiBj
b3VudGVyIGRlY2ltYWwgZG91YmxlIGZsb2F0IGZyb3plbiBpbmV0IGludCBsaXN0IG1hcCBzdGF0
aWMgdGV4dCB0aW1lc3RhbXAgdGltZXV1aWQgdHVwbGUgdXVpZCB2YXJjaGFyIHZhcmludCIpLAor
ICAgIGF0b21zOiBzZXQoImZhbHNlIHRydWUgaW5maW5pdHkgTmFOIiksCiAgICAgb3BlcmF0b3JD
aGFyczogL15bPD49XS8sCiAgICAgZGF0ZVNRTDogeyB9LAogICAgIHN1cHBvcnQ6IHNldCgiY29t
bWVudFNsYXNoU2xhc2ggZGVjaW1hbGxlc3NGbG9hdCIpLApAQCAtMzY2LDggKzM2Nyw2IEBAIENv
ZGVNaXJyb3IuZGVmaW5lTW9kZSgic3FsIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcp
IHsKIAogICBrZXl3b3JkczoKICAgICBBIGxpc3Qgb2Yga2V5d29yZHMgeW91IHdhbnQgdG8gYmUg
aGlnaGxpZ2h0ZWQuCi0gIGZ1bmN0aW9uczoKLSAgICBBIGxpc3Qgb2YgZnVuY3Rpb24gbmFtZXMg
eW91IHdhbnQgdG8gYmUgaGlnaGxpZ2h0ZWQuCiAgIGJ1aWx0aW46CiAgICAgQSBsaXN0IG9mIGJ1
aWx0aW4gdHlwZXMgeW91IHdhbnQgdG8gYmUgaGlnaGxpZ2h0ZWQgKGlmIHlvdSB3YW50IHR5cGVz
IHRvIGJlIG9mIGNsYXNzICJidWlsdGluIiBpbnN0ZWFkIG9mICJrZXl3b3JkIikuCiAgIG9wZXJh
dG9yQ2hhcnM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzCm9sZCBtb2RlIDEwMDY0NApuZXcg
bW9kZSAxMDA3NTUKaW5kZXggNzg2NTA3ZDJlNDM5MmEzNTJkZGFlNGFjMDAzNWY5MmVhZWY2MDlh
NC4uNWFkMjE3MjBmYmNhMzg2MGE2NzU4YWQ3N2ZjOGI1NzM5MjY5MjY1MQotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qcwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Db2RlTWly
cm9yL3htbC5qcwpAQCAtMjEsNyArMjEsNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIs
IGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgICAgYXV0b1NlbGZDbG9zZXJzOiB7
J2FyZWEnOiB0cnVlLCAnYmFzZSc6IHRydWUsICdicic6IHRydWUsICdjb2wnOiB0cnVlLCAnY29t
bWFuZCc6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgJ2VtYmVkJzogdHJ1ZSwgJ2ZyYW1l
JzogdHJ1ZSwgJ2hyJzogdHJ1ZSwgJ2ltZyc6IHRydWUsICdpbnB1dCc6IHRydWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgJ2tleWdlbic6IHRydWUsICdsaW5rJzogdHJ1ZSwgJ21ldGEnOiB0cnVl
LCAncGFyYW0nOiB0cnVlLCAnc291cmNlJzogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAn
dHJhY2snOiB0cnVlLCAnd2JyJzogdHJ1ZX0sCisgICAgICAgICAgICAgICAgICAgICAgJ3RyYWNr
JzogdHJ1ZSwgJ3dicic6IHRydWUsICdtZW51aXRlbSc6IHRydWV9LAogICAgIGltcGxpY2l0bHlD
bG9zZWQ6IHsnZGQnOiB0cnVlLCAnbGknOiB0cnVlLCAnb3B0Z3JvdXAnOiB0cnVlLCAnb3B0aW9u
JzogdHJ1ZSwgJ3AnOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAncnAnOiB0cnVlLCAn
cnQnOiB0cnVlLCAndGJvZHknOiB0cnVlLCAndGQnOiB0cnVlLCAndGZvb3QnOiB0cnVlLAogICAg
ICAgICAgICAgICAgICAgICAgICAndGgnOiB0cnVlLCAndHInOiB0cnVlfSwKQEAgLTEwOSw2ICsx
MDksNyBAQCBDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFy
c2VyQ29uZmlnKSB7CiAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAgIH0KKyAgaW5UZXh0Lmlz
SW5UZXh0ID0gdHJ1ZTsKIAogICBmdW5jdGlvbiBpblRhZyhzdHJlYW0sIHN0YXRlKSB7CiAgICAg
dmFyIGNoID0gc3RyZWFtLm5leHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmNzcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFy
YXRpb25UZXh0RWRpdG9yLmNzcwppbmRleCBlMzYyMjJiMmRiNTk3YmRhNGNlMDhkOGY1NDA2YWQx
MTViOTdlYzZhLi5kNWRkN2YzOGIxYjcwYmFkY2ZmOTg5OTllOGFmMTRlYzY2YTllY2Q3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHls
ZURlY2xhcmF0aW9uVGV4dEVkaXRvci5jc3MKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0b3IuY3NzCkBAIC00
NSw3ICs0NSw3IEBACiAKIC5jc3Mtc3R5bGUtdGV4dC1lZGl0b3IgPiAuQ29kZU1pcnJvciBwcmUg
ewogICAgIC8qIENvbXBlbnNhdGUgZm9yIHRoZSBjaGVja2JveGVzIHNvIHByb3BlcnRpZXMgbGlu
ZSB1cCB3aXRoIHJlYWRvbmx5IHN0eWxlcyB0aGF0IGRvIG5vdCBoYXZlIGNoZWNrYm94ZXMuICov
Ci0gICAgcGFkZGluZzogMXB4IDVweCAxcHggMjVweDsKKyAgICBwYWRkaW5nOiAwIDVweCAwIDI1
cHg7CiAgICAgdGV4dC1pbmRlbnQ6IC0yMXB4OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVk
aXRvci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0
eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpzCmluZGV4IDljZThhNTI0MTIxNjQ5NDFmYzQzNDVl
ZGJmOGJiNmYzNjAzY2Q4NGIuLjY2NjZhYzc0OTc1YmQ0ODEyNzZhZDk4ZDJhZDk1Njg4YWViNjEw
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yLmpz
CkBAIC00NDEsMTMgKzQ0MSwxMiBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRl
eHRFZGl0b3IgPSBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvcgogCiAgICAgX2hh
bmRsZU1vdXNlRG93bihldmVudCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9jb2RlTWlycm9y
Lm9wdGlvbnMucmVhZE9ubHkgfHwgdGhpcy5fY29kZU1pcnJvci5zdGF0ZS5mb2N1c2VkKQorICAg
ICAgICBpZiAodGhpcy5fY29kZU1pcnJvci5vcHRpb25zLnJlYWRPbmx5KQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLl9jb2RlTWlycm9yLmNvb3Jkc0No
YXIoe2xlZnQ6IGV2ZW50LngsIHRvcDogZXZlbnQueX0pOwotICAgICAgICB2YXIgbGluZSA9IHRo
aXMuX2NvZGVNaXJyb3IuZ2V0TGluZShjdXJzb3IubGluZSk7Ci0gICAgICAgIHZhciB0cmltbWVk
TGluZSA9IGxpbmUudHJpbVJpZ2h0KCk7Ci0KKyAgICAgICAgbGV0IGN1cnNvciA9IHRoaXMuX2Nv
ZGVNaXJyb3IuY29vcmRzQ2hhcih7bGVmdDogZXZlbnQueCwgdG9wOiBldmVudC55fSk7CisgICAg
ICAgIGxldCBsaW5lID0gdGhpcy5fY29kZU1pcnJvci5nZXRMaW5lKGN1cnNvci5saW5lKTsKKyAg
ICAgICAgbGV0IHRyaW1tZWRMaW5lID0gbGluZS50cmltUmlnaHQoKTsKICAgICAgICAgaWYgKCF0
cmltbWVkTGluZS50cmltTGVmdCgpLmxlbmd0aCB8fCBjdXJzb3IuY2ggIT09IHRyaW1tZWRMaW5l
Lmxlbmd0aCkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNDU5LDE2ICs0NTgsMTkgQEAgV2Vi
SW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yID0gY2xhc3MgQ1NTU3R5bGVE
ZWNsYXJhdGlvblRleHRFZGl0b3IKICAgICAgICAgaWYgKHRoaXMuX2NvZGVNaXJyb3Iub3B0aW9u
cy5yZWFkT25seSB8fCAhdGhpcy5fbW91c2VEb3duQ3Vyc29yUG9zaXRpb24pCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMuX2NvZGVNaXJyb3IuY29vcmRz
Q2hhcih7bGVmdDogZXZlbnQueCwgdG9wOiBldmVudC55fSk7Ci0gICAgICAgIHZhciBsaW5lID0g
dGhpcy5fY29kZU1pcnJvci5nZXRMaW5lKGN1cnNvci5saW5lKTsKLQorICAgICAgICBsZXQgY3Vy
c29yID0gdGhpcy5fY29kZU1pcnJvci5jb29yZHNDaGFyKHtsZWZ0OiBldmVudC54LCB0b3A6IGV2
ZW50Lnl9KTsKICAgICAgICAgaWYgKHRoaXMuX21vdXNlRG93bkN1cnNvclBvc2l0aW9uLmxpbmUg
PT09IGN1cnNvci5saW5lICYmIHRoaXMuX21vdXNlRG93bkN1cnNvclBvc2l0aW9uLmNoID09PSBj
dXJzb3IuY2gpIHsKLSAgICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9ICJcbiI7Ci0KLSAgICAg
ICAgICAgIGlmICghbGluZS50cmltUmlnaHQoKS5lbmRzV2l0aCgiOyIpICYmICF0aGlzLl90ZXh0
QXRDdXJzb3JJc0NvbW1lbnQodGhpcy5fY29kZU1pcnJvciwgY3Vyc29yKSkKLSAgICAgICAgICAg
ICAgICByZXBsYWNlbWVudCA9ICI7IiArIHJlcGxhY2VtZW50OworICAgICAgICAgICAgbGV0IG5l
eHRMaW5lID0gdGhpcy5fY29kZU1pcnJvci5nZXRMaW5lKGN1cnNvci5saW5lICsgMSk7CisgICAg
ICAgICAgICBpZiAoY3Vyc29yLmxpbmUgPCB0aGlzLl9jb2RlTWlycm9yLmxpbmVDb3VudCgpIC0g
MSAmJiAoIW5leHRMaW5lIHx8ICFuZXh0TGluZS50cmltKCkubGVuZ3RoKSkgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iuc2V0Q3Vyc29yKHtsaW5lOiBjdXJzb3IubGluZSArIDEs
IGNoOiAwfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxldCBsaW5l
ID0gdGhpcy5fY29kZU1pcnJvci5nZXRMaW5lKGN1cnNvci5saW5lKTsKKyAgICAgICAgICAgICAg
ICBsZXQgcmVwbGFjZW1lbnQgPSAiXG4iOworICAgICAgICAgICAgICAgIGlmICghbGluZS50cmlt
UmlnaHQoKS5lbmRzV2l0aCgiOyIpICYmICF0aGlzLl90ZXh0QXRDdXJzb3JJc0NvbW1lbnQodGhp
cy5fY29kZU1pcnJvciwgY3Vyc29yKSkKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQg
PSAiOyIgKyByZXBsYWNlbWVudDsKIAotICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5yZXBs
YWNlUmFuZ2UocmVwbGFjZW1lbnQsIGN1cnNvcik7CisgICAgICAgICAgICAgICAgdGhpcy5fY29k
ZU1pcnJvci5yZXBsYWNlUmFuZ2UocmVwbGFjZW1lbnQsIGN1cnNvcik7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9tb3VzZURvd25DdXJzb3JQb3NpdGlvbiA9IG51
bGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9Db2RlTWlycm9yRm9ybWF0dGVycy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzCmluZGV4IGVlZmMyZDU2NjM0NGVl
NTFjNzIyNjEzM2E5NTNlYzYyNzdmYWE4NTEuLmZiNWJkYmEwYmUzNTJkNGUyNzgxMDA1OGVlYjE0
NTQwOWNmNGZiOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvZGVNaXJyb3JGb3JtYXR0ZXJzLmpzCkBAIC0zMzks
NyArMzM5LDcgQEAgQ29kZU1pcnJvci5leHRlbmRNb2RlKCJjc3MiLCB7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0g
InByb3AiKSAvLyAtd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoLi4uKXRyYW5zbGF0ZSguLi4pOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoc3Rh
dGUuc3RhdGUgPT09ICJtZWRpYSIgfHwgc3RhdGUuc3RhdGUgPT09ICJtZWRpYV9wYXJlbnMiKSAv
LyBTcGFjZSBpbiAibm90KGZvbylhbmQiIGJ1dCBub3QgYXQgdGhlIGVuZCBvZiAibm90KG5vdChm
b28pKSIKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3RhdGUgPT09ICJtZWRpYSIgfHwgc3Rh
dGUuc3RhdGUgPT09ICJhdEJsb2NrX3BhcmVucyIpIC8vIFNwYWNlIGluICJub3QoZm9vKWFuZCIg
YnV0IG5vdCBhdCB0aGUgZW5kIG9mICJub3Qobm90KGZvbykpIgogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGNvbG9yOiBy
Z2IoLi4uKTsKICAgICAgICAgICAgIH0KQEAgLTM1MCw3ICszNTAsNyBAQCBDb2RlTWlycm9yLmV4
dGVuZE1vZGUoImNzcyIsIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIGlm
ICgvXGJrZXl3b3JkXGIvLnRlc3QobGFzdFRva2VuKSkgLy8gbWVkaWEtcXVlcnkga2V5d29yZHMK
LSAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zdGF0ZSA9PT0gIm1lZGlhIiB8fCBzdGF0ZS5zdGF0
ZSA9PT0gIm1lZGlhX3BhcmVucyI7CisgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3RhdGUgPT09
ICJtZWRpYSIgfHwgKHN0YXRlLnN0YXRlID09PSAiYXRCbG9ja19wYXJlbnMiICYmIGNvbnRlbnQg
IT09ICIpIik7CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db21wdXRlZFN0eWxlRGV0
YWlsc1BhbmVsLmNzcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0NvbXB1dGVkU3R5bGVEZXRhaWxzUGFuZWwuY3NzCmluZGV4IDIxZWY1ZjIwYjkzYWQ1OTJjNTJh
OGI2YjMyZGRmOWZmNGRiZDAxMzYuLjkyZWYzOTI2MWRiZDExNWZhMGRjYjVmMWQ1OGE4YmM3Yjk3
MmZiZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL0NvbXB1dGVkU3R5bGVEZXRhaWxzUGFuZWwuY3NzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbXB1dGVkU3R5bGVEZXRhaWxzUGFuZWwuY3NzCkBA
IC00NCw3ICs0NCw3IEBACiAgICAgZGlzcGxheTogbm9uZTsKICAgICBwb3NpdGlvbjogYWJzb2x1
dGU7CiAgICAgd2lkdGg6IDEycHg7Ci0gICAgaGVpZ2h0OiAxMHB4OworICAgIGhlaWdodDogMTJw
eDsKICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0hvdmVyTWVudS5jc3MgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Ib3Zlck1lbnUuY3NzCmlu
ZGV4IDFmMTQ2ZGJlMDcyYWEwMjgzMmRlZGFmZDFkOTQ4ZDJiZDM3MGM4YzYuLmRmOWQ4NTZmMmJm
Y2RiNzhmYTcxNzA0OGEwNzE4YzZlMWUxMmE5MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0hvdmVyTWVudS5jc3MKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvSG92ZXJNZW51LmNzcwpAQCAtNTksNiAr
NTksNyBAQAogICAgIGhlaWdodDogMTNweDsKIAogICAgIGNvbnRlbnQ6IC13ZWJraXQtaW1hZ2Ut
c2V0KHVybCguLi9JbWFnZXMvSG92ZXJNZW51QnV0dG9uLnBuZykgMXgsIHVybCguLi9JbWFnZXMv
SG92ZXJNZW51QnV0dG9uQDJ4LnBuZykgMngpOworICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgt
MXB4KTsKIH0KIAogLmhvdmVyLW1lbnUudmlzaWJsZSA+IGltZyB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VD
b2RlVGV4dEVkaXRvci5jc3MKaW5kZXggNjhhOTU5ZjBhNDAzMTM3YzFhMjMxZDBhYzgyNDA1MjNh
MmJjMzE4OS4uYjk0ZWVhZWUwZDk2Y2U1YWUzOGY5MzRkYTU5MGRmNzJiMDc1NGE5YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29k
ZVRleHRFZGl0b3IuY3NzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmNzcwpAQCAtMTgwLDggKzE4MCw3IEBACiAgICAg
d2lkdGg6IDE2cHg7CiAgICAgaGVpZ2h0OiAxNnB4OwogICAgIGNvbnRlbnQ6IC13ZWJraXQtaW1h
Z2Utc2V0KHVybCguLi9JbWFnZXMvQ29sb3JJY29uLnBuZykgMXgsIHVybCguLi9JbWFnZXMvQ29s
b3JJY29uQDJ4LnBuZykgMngpOwotCi0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVko
MXB4KTsKKyAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMC41cHgpOwogfQogCiBAbWVkaWEgKC13
ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMikgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>